streamdown 1.1.9 → 1.2.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/dist/index.cjs +14 -7
- package/dist/index.js +14 -7
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
"use strict";"use client";var te=Object.create;var B=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var ie=(e,t)=>{for(var r in t)B(e,r,{get:t[r],enumerable:!0})},_=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ne(t))!se.call(e,o)&&o!==r&&B(e,o,{get:()=>t[o],enumerable:!(n=re(t,o))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?te(oe(e)):{},_(t||!e||!e.__esModule?B(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>_(B({},"__esModule",{value:!0}),e);var ze={};ie(ze,{ShikiThemeContext:()=>I,Streamdown:()=>Z});module.exports=ae(ze);var b=require("react"),F=v(require("react-markdown"),1),X=v(require("rehype-katex"),1),J=v(require("remark-gfm"),1),Q=v(require("remark-math"),1),Ze=require("katex/dist/katex.min.css"),L=v(require("harden-react-markdown"),1);var G=require("react");var $=require("lucide-react"),h=require("react"),N=require("shiki"),W=require("shiki/engine/javascript");var R=require("clsx"),E=require("tailwind-merge"),i=(...e)=>(0,E.twMerge)((0,R.clsx)(e));var f=require("react/jsx-runtime"),le=/<pre(\s|>)/,z=(0,h.createContext)({code:""}),S=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null}async ensureHighlightersInitialized(t,r){var m,u;let[n,o]=t,s=(0,W.createJavaScriptRegexEngine)({forgiving:!0}),a=!this.lightHighlighter||this.lightTheme!==n,c=!this.darkHighlighter||this.darkTheme!==o;(a||c)&&this.loadedLanguages.clear();let l=!this.loadedLanguages.has(r);if(a?(this.lightHighlighter=await(0,N.createHighlighter)({themes:[n],langs:[r],engine:s}),this.lightTheme=n,this.loadedLanguages.add(r)):l&&await((m=this.lightHighlighter)==null?void 0:m.loadLanguage(r)),c){let p=l?[...this.loadedLanguages,r]:Array.from(this.loadedLanguages);this.darkHighlighter=await(0,N.createHighlighter)({themes:[o],langs:p.length>0?p:[r],engine:s}),this.darkTheme=o}else l&&await((u=this.darkHighlighter)==null?void 0:u.loadLanguage(r));l&&this.loadedLanguages.add(r)}async highlightCode(t,r,n,o){var u,p;this.initializationPromise&&await this.initializationPromise,this.initializationPromise=this.ensureHighlightersInitialized(n,r),await this.initializationPromise,this.initializationPromise=null;let s=g=>o?g.replace(le,`<pre class="${o}"$1`):g,[a,c]=n,l=(u=this.lightHighlighter)==null?void 0:u.codeToHtml(t,{lang:r,theme:a}),m=(p=this.darkHighlighter)==null?void 0:p.codeToHtml(t,{lang:r,theme:c});return[D(s(l)),D(s(m))]}},de=new S;async function ce(e,t,r,n){return de.highlightCode(e,t,r,n)}function D(e){return e.replace(/(<pre[^>]*)(style="[^"]*background[^";]*;?[^"]*")([^>]*>)/g,"$1$3")}var O=({code:e,language:t,className:r,children:n,preClassName:o,...s})=>{let[a,c]=(0,h.useState)(""),[l,m]=(0,h.useState)(""),u=(0,h.useRef)(!1),[p,g]=(0,h.useContext)(I);return(0,h.useEffect)(()=>(u.current=!0,ce(e,t,[p,g],o).then(([w,y])=>{u.current&&(c(w),m(y))}),()=>{u.current=!1}),[e,t,p,g,o]),(0,f.jsx)(z.Provider,{value:{code:e},children:(0,f.jsxs)("div",{className:"my-4 w-full overflow-hidden rounded-xl border","data-code-block-container":!0,"data-language":t,children:[(0,f.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,f.jsx)("span",{className:"ml-1 font-mono lowercase",children:t}),(0,f.jsx)("div",{children:n})]}),(0,f.jsx)("div",{className:"w-full",children:(0,f.jsxs)("div",{className:"min-w-full",children:[(0,f.jsx)("div",{className:i("overflow-x-auto dark:hidden",r),dangerouslySetInnerHTML:{__html:a},"data-code-block":!0,"data-language":t,...s}),(0,f.jsx)("div",{className:i("hidden overflow-x-auto dark:block",r),dangerouslySetInnerHTML:{__html:l},"data-code-block":!0,"data-language":t,...s})]})})]})})},H=({onCopy:e,onError:t,timeout:r=2e3,children:n,className:o,code:s,...a})=>{let[c,l]=(0,h.useState)(!1),m=(0,h.useRef)(0),u=(0,h.useContext)(z).code,p=s!=null?s:u,g=async()=>{var y;if(typeof window=="undefined"||!((y=navigator==null?void 0:navigator.clipboard)!=null&&y.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{c||(await navigator.clipboard.writeText(p),l(!0),e==null||e(),m.current=window.setTimeout(()=>l(!1),r))}catch(T){t==null||t(T)}};(0,h.useEffect)(()=>()=>{window.clearTimeout(m.current)},[]);let w=c?$.CheckIcon:$.CopyIcon;return(0,f.jsx)("button",{className:i("text-muted-foreground","p-1 transition-all",o),onClick:g,type:"button",...a,children:n!=null?n:(0,f.jsx)(w,{size:14})})};var M=require("react");var k=require("react/jsx-runtime"),U=!1,me=async()=>{if(!U){let r=(await import("mermaid")).default;return r.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),U=!0,r}return(await import("mermaid")).default},q=({chart:e,className:t})=>{let[r,n]=(0,M.useState)(null),[o,s]=(0,M.useState)(!0),[a,c]=(0,M.useState)(""),[l,m]=(0,M.useState)("");if((0,M.useEffect)(()=>{(async()=>{try{n(null),s(!0);let g=await me(),w=e.split("").reduce((A,ee)=>(A<<5)-A+ee.charCodeAt(0)|0,0),y=`mermaid-${Math.abs(w)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:T}=await g.render(y,e);c(T),m(T)}catch(g){if(!(l||a)){let w=g instanceof Error?g.message:"Failed to render Mermaid chart";n(w)}}finally{s(!1)}})()},[e]),o&&!a&&!l)return(0,k.jsx)("div",{className:i("my-4 flex justify-center p-4",t),children:(0,k.jsxs)("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[(0,k.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),(0,k.jsx)("span",{className:"text-sm",children:"Loading diagram..."})]})});if(r&&!a&&!l)return(0,k.jsxs)("div",{className:i("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[(0,k.jsxs)("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",r]}),(0,k.jsxs)("details",{className:"mt-2",children:[(0,k.jsx)("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),(0,k.jsx)("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let u=a||l;return(0,k.jsx)("div",{"aria-label":"Mermaid chart",className:i("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:u},role:"img"})};var d=require("react/jsx-runtime"),ue=/language-([^\s]+)/,he=({node:e,className:t,children:r,...n})=>{var l,m,u;if(((l=e==null?void 0:e.position)==null?void 0:l.start.line)===((m=e==null?void 0:e.position)==null?void 0:m.end.line))return(0,d.jsx)("code",{className:i("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:r});let s=t==null?void 0:t.match(ue),a=(u=s==null?void 0:s.at(1))!=null?u:"",c="";return(0,G.isValidElement)(r)&&r.props&&typeof r.props=="object"&&"children"in r.props&&typeof r.props.children=="string"?c=r.props.children:typeof r=="string"&&(c=r),a==="mermaid"?(0,d.jsxs)("div",{className:i("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[(0,d.jsx)("div",{className:"flex items-center justify-end",children:(0,d.jsx)(H,{code:c})}),(0,d.jsx)(q,{chart:c})]}):(0,d.jsx)(O,{className:i("overflow-x-auto border-t",t),code:c,"data-language":a,"data-streamdown":"code-block",language:a,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:(0,d.jsx)(H,{})})},V={ol:({node:e,children:t,className:r,...n})=>(0,d.jsx)("ol",{className:i("ml-4 list-outside list-decimal whitespace-normal",r),"data-streamdown":"ordered-list",...n,children:t}),li:({node:e,children:t,className:r,...n})=>(0,d.jsx)("li",{className:i("py-1",r),"data-streamdown":"list-item",...n,children:t}),ul:({node:e,children:t,className:r,...n})=>(0,d.jsx)("ul",{className:i("ml-4 list-outside list-disc whitespace-normal",r),"data-streamdown":"unordered-list",...n,children:t}),hr:({node:e,className:t,...r})=>(0,d.jsx)("hr",{className:i("my-6 border-border",t),"data-streamdown":"horizontal-rule",...r}),strong:({node:e,children:t,className:r,...n})=>(0,d.jsx)("span",{className:i("font-semibold",r),"data-streamdown":"strong",...n,children:t}),a:({node:e,children:t,className:r,href:n,...o})=>{let s=n==="streamdown:incomplete-link";return(0,d.jsx)("a",{className:i("font-medium text-primary underline",r),"data-incomplete":s,"data-streamdown":"link",href:n,rel:"noreferrer",target:"_blank",...o,children:t})},h1:({node:e,children:t,className:r,...n})=>(0,d.jsx)("h1",{className:i("mt-6 mb-2 font-semibold text-3xl",r),"data-streamdown":"heading-1",...n,children:t}),h2:({node:e,children:t,className:r,...n})=>(0,d.jsx)("h2",{className:i("mt-6 mb-2 font-semibold text-2xl",r),"data-streamdown":"heading-2",...n,children:t}),h3:({node:e,children:t,className:r,...n})=>(0,d.jsx)("h3",{className:i("mt-6 mb-2 font-semibold text-xl",r),"data-streamdown":"heading-3",...n,children:t}),h4:({node:e,children:t,className:r,...n})=>(0,d.jsx)("h4",{className:i("mt-6 mb-2 font-semibold text-lg",r),"data-streamdown":"heading-4",...n,children:t}),h5:({node:e,children:t,className:r,...n})=>(0,d.jsx)("h5",{className:i("mt-6 mb-2 font-semibold text-base",r),"data-streamdown":"heading-5",...n,children:t}),h6:({node:e,children:t,className:r,...n})=>(0,d.jsx)("h6",{className:i("mt-6 mb-2 font-semibold text-sm",r),"data-streamdown":"heading-6",...n,children:t}),table:({node:e,children:t,className:r,...n})=>(0,d.jsx)("div",{className:"my-4 overflow-x-auto","data-streamdown":"table-wrapper",children:(0,d.jsx)("table",{className:i("w-full border-collapse border border-border",r),"data-streamdown":"table",...n,children:t})}),thead:({node:e,children:t,className:r,...n})=>(0,d.jsx)("thead",{className:i("bg-muted/50",r),"data-streamdown":"table-header",...n,children:t}),tbody:({node:e,children:t,className:r,...n})=>(0,d.jsx)("tbody",{className:i("divide-y divide-border",r),"data-streamdown":"table-body",...n,children:t}),tr:({node:e,children:t,className:r,...n})=>(0,d.jsx)("tr",{className:i("border-border border-b",r),"data-streamdown":"table-row",...n,children:t}),th:({node:e,children:t,className:r,...n})=>(0,d.jsx)("th",{className:i("px-4 py-2 text-left font-semibold text-sm",r),"data-streamdown":"table-header-cell",...n,children:t}),td:({node:e,children:t,className:r,...n})=>(0,d.jsx)("td",{className:i("px-4 py-2 text-sm",r),"data-streamdown":"table-cell",...n,children:t}),blockquote:({node:e,children:t,className:r,...n})=>(0,d.jsx)("blockquote",{className:i("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",r),"data-streamdown":"blockquote",...n,children:t}),code:he,pre:({children:e})=>e,sup:({node:e,children:t,className:r,...n})=>(0,d.jsx)("sup",{className:i("text-sm",r),"data-streamdown":"superscript",...n,children:t}),sub:({node:e,children:t,className:r,...n})=>(0,d.jsx)("sub",{className:i("text-sm",r),"data-streamdown":"subscript",...n,children:t})};var x=require("marked"),K=e=>{let r=x.marked.use({gfm:!0}).lexer(e).map(o=>o.raw),n=[];for(let o=0;o<r.length;o++){let s=r[o];if(s.trim()==="$$"&&n.length>0){let a=n.at(-1),c=a.trimStart().startsWith("$$"),l=(a.match(/\$\$/g)||[]).length;if(c&&l%2===1){n[n.length-1]=a+s;continue}}if(n.length>0&&s.trimEnd().endsWith("$$")){let a=n.at(-1),c=a.trimStart().startsWith("$$"),l=(a.match(/\$\$/g)||[]).length,m=(s.match(/\$\$/g)||[]).length;if(c&&l%2===1&&!s.trimStart().startsWith("$$")&&m===1){n[n.length-1]=a+s;continue}}n.push(s)}return n};var ge=/(!?\[)([^\]]*?)$/,pe=/(\*\*)([^*]*?)$/,fe=/(__)([^_]*?)$/,ke=/(\*\*\*)([^*]*?)$/,be=/(\*)([^*]*?)$/,we=/(_)([^_]*?)$/,ye=/(`)([^`]*?)$/,ve=/(~~)([^~]*?)$/,P=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
2
|
-
`)
|
|
3
|
-
`)
|
|
4
|
-
`))return e.
|
|
5
|
-
`)
|
|
6
|
-
|
|
1
|
+
"use strict";"use client";var he=Object.create;var S=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var ke=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var ye=(e,t)=>{for(var s in t)S(e,s,{get:t[s],enumerable:!0})},U=(e,t,s,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ke(t))!ve.call(e,n)&&n!==s&&S(e,n,{get:()=>t[n],enumerable:!(r=be(t,n))||r.enumerable});return e};var I=(e,t,s)=>(s=e!=null?he(we(e)):{},U(t||!e||!e.__esModule?S(s,"default",{value:e,enumerable:!0}):s,e)),Te=e=>U(S({},"__esModule",{value:!0}),e);var et={};ye(et,{ShikiThemeContext:()=>H,Streamdown:()=>fe});module.exports=Te(et);var y=require("react"),de=I(require("react-markdown"),1),me=I(require("rehype-katex"),1),ue=I(require("remark-gfm"),1),pe=I(require("remark-math"),1),vt=require("katex/dist/katex.min.css"),E=I(require("harden-react-markdown"),1);var oe=require("react");var P=require("lucide-react"),b=require("react"),q=require("shiki"),K=require("shiki/engine/javascript");var W=require("clsx"),G=require("tailwind-merge"),c=(...e)=>(0,G.twMerge)((0,W.clsx)(e)),N=(e,t,s)=>{let r=typeof t=="string"?new Blob([t],{type:s}):t,n=URL.createObjectURL(r),o=document.createElement("a");o.href=n,o.download=e,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(n)};var k=require("react/jsx-runtime"),Ce=/<pre(\s|>)/,_=(0,b.createContext)({code:""}),A=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null}async ensureHighlightersInitialized(t,s){var u,m;let[r,n]=t,o=(0,K.createJavaScriptRegexEngine)({forgiving:!0}),a=!this.lightHighlighter||this.lightTheme!==r,l=!this.darkHighlighter||this.darkTheme!==n;(a||l)&&this.loadedLanguages.clear();let i=!this.loadedLanguages.has(s);if(a?(this.lightHighlighter=await(0,q.createHighlighter)({themes:[r],langs:[s],engine:o}),this.lightTheme=r,this.loadedLanguages.add(s)):i&&await((u=this.lightHighlighter)==null?void 0:u.loadLanguage(s)),l){let f=i?[...this.loadedLanguages,s]:Array.from(this.loadedLanguages);this.darkHighlighter=await(0,q.createHighlighter)({themes:[n],langs:f.length>0?f:[s],engine:o}),this.darkTheme=n}else i&&await((m=this.darkHighlighter)==null?void 0:m.loadLanguage(s));i&&this.loadedLanguages.add(s)}async highlightCode(t,s,r,n){var m,f;this.initializationPromise&&await this.initializationPromise,this.initializationPromise=this.ensureHighlightersInitialized(r,s),await this.initializationPromise,this.initializationPromise=null;let o=p=>n?p.replace(Ce,`<pre class="${n}"$1`):p,[a,l]=r,i=(m=this.lightHighlighter)==null?void 0:m.codeToHtml(t,{lang:s,theme:a}),u=(f=this.darkHighlighter)==null?void 0:f.codeToHtml(t,{lang:s,theme:l});return[V(o(i)),V(o(u))]}},Me=new A,V=e=>e.replace(/(<pre[^>]*)(style="[^"]*background[^";]*;?[^"]*")([^>]*>)/g,"$1$3"),X=({code:e,language:t,className:s,children:r,preClassName:n,...o})=>{let[a,l]=(0,b.useState)(""),[i,u]=(0,b.useState)(""),m=(0,b.useRef)(!1),[f,p]=(0,b.useContext)(H);return(0,b.useEffect)(()=>(m.current=!0,Me.highlightCode(e,t,[f,p],n).then(([g,h])=>{m.current&&(l(g),u(h))}),()=>{m.current=!1}),[e,t,f,p,n]),(0,k.jsx)(_.Provider,{value:{code:e},children:(0,k.jsxs)("div",{className:"my-4 w-full overflow-hidden rounded-xl border","data-code-block-container":!0,"data-language":t,children:[(0,k.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,k.jsx)("span",{className:"ml-1 font-mono lowercase",children:t}),(0,k.jsx)("div",{className:"flex items-center gap-2",children:r})]}),(0,k.jsx)("div",{className:"w-full",children:(0,k.jsxs)("div",{className:"min-w-full",children:[(0,k.jsx)("div",{className:c("overflow-x-auto dark:hidden",s),dangerouslySetInnerHTML:{__html:a},"data-code-block":!0,"data-language":t,...o}),(0,k.jsx)("div",{className:c("hidden overflow-x-auto dark:block",s),dangerouslySetInnerHTML:{__html:i},"data-code-block":!0,"data-language":t,...o})]})})]})})},F={"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"},O=({onDownload:e,onError:t,language:s,children:r,className:n,code:o,...a})=>{let l=(0,b.useContext)(_).code,i=o!=null?o:l,m=`file.${s&&s in F?F[s]:"txt"}`,f="text/plain",p=()=>{try{N(m,i,f),e==null||e()}catch(g){t==null||t(g)}};return(0,k.jsx)("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",n),onClick:p,title:"Download file",type:"button",...a,children:r!=null?r:(0,k.jsx)(P.DownloadIcon,{size:14})})},z=({onCopy:e,onError:t,timeout:s=2e3,children:r,className:n,code:o,...a})=>{let[l,i]=(0,b.useState)(!1),u=(0,b.useRef)(0),m=(0,b.useContext)(_).code,f=o!=null?o:m,p=async()=>{var h;if(typeof window=="undefined"||!((h=navigator==null?void 0:navigator.clipboard)!=null&&h.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{l||(await navigator.clipboard.writeText(f),i(!0),e==null||e(),u.current=window.setTimeout(()=>i(!1),s))}catch(v){t==null||t(v)}};(0,b.useEffect)(()=>()=>{window.clearTimeout(u.current)},[]);let g=l?P.CheckIcon:P.CopyIcon;return(0,k.jsx)("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",n),onClick:p,type:"button",...a,children:r!=null?r:(0,k.jsx)(g,{size:14})})};var J=require("lucide-react");var $=require("react/jsx-runtime"),Q=({node:e,className:t,src:s,alt:r,...n})=>{let o=async()=>{var a;if(s)try{let i=await(await fetch(s)).blob(),m=new URL(s,window.location.origin).pathname.split("/").pop()||"",f=m.includes(".")&&((a=m.split(".").pop())==null?void 0:a.length)<=4,p="";if(f)p=m;else{let g=i.type,h="png";g.includes("jpeg")||g.includes("jpg")?h="jpg":g.includes("png")?h="png":g.includes("svg")?h="svg":g.includes("gif")?h="gif":g.includes("webp")&&(h="webp"),p=`${(r||m||"image").replace(/\.[^/.]+$/,"")}.${h}`}N(p,i,i.type)}catch(l){console.error("Failed to download image:",l)}};return s?(0,$.jsxs)("div",{className:"group relative my-4 inline-block","data-streamdown":"image-wrapper",children:[(0,$.jsx)("img",{alt:r,className:c("max-w-full rounded-lg",t),"data-streamdown":"image",src:s,...n}),(0,$.jsx)("div",{className:"pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"}),(0,$.jsx)("button",{className:c("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:o,title:"Download image",type:"button",children:(0,$.jsx)(J.DownloadIcon,{size:14})})]}):null};var x=require("react");var w=require("react/jsx-runtime"),Y=!1,Be=async()=>{if(!Y){let s=(await import("mermaid")).default;return s.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),Y=!0,s}return(await import("mermaid")).default},Z=({chart:e,className:t})=>{let[s,r]=(0,x.useState)(null),[n,o]=(0,x.useState)(!0),[a,l]=(0,x.useState)(""),[i,u]=(0,x.useState)("");if((0,x.useEffect)(()=>{(async()=>{try{r(null),o(!0);let p=await Be(),g=e.split("").reduce((M,B)=>(M<<5)-M+B.charCodeAt(0)|0,0),h=`mermaid-${Math.abs(g)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:v}=await p.render(h,e);l(v),u(v)}catch(p){if(!(i||a)){let g=p instanceof Error?p.message:"Failed to render Mermaid chart";r(g)}}finally{o(!1)}})()},[e]),n&&!a&&!i)return(0,w.jsx)("div",{className:c("my-4 flex justify-center p-4",t),children:(0,w.jsxs)("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[(0,w.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),(0,w.jsx)("span",{className:"text-sm",children:"Loading diagram..."})]})});if(s&&!a&&!i)return(0,w.jsxs)("div",{className:c("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[(0,w.jsxs)("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",s]}),(0,w.jsxs)("details",{className:"mt-2",children:[(0,w.jsx)("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),(0,w.jsx)("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let m=a||i;return(0,w.jsx)("div",{"aria-label":"Mermaid chart",className:c("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:m},role:"img"})};var L=require("lucide-react"),C=require("react");var T=require("react/jsx-runtime");function ee(e){var o,a;let t=[],s=[],r=e.querySelectorAll("thead th");for(let l of r)t.push(((o=l.textContent)==null?void 0:o.trim())||"");let n=e.querySelectorAll("tbody tr");for(let l of n){let i=[],u=l.querySelectorAll("td");for(let m of u)i.push(((a=m.textContent)==null?void 0:a.trim())||"");s.push(i)}return{headers:t,rows:s}}function R(e){let{headers:t,rows:s}=e,r=o=>o.includes(",")||o.includes('"')||o.includes(`
|
|
2
|
+
`)?`"${o.replace(/"/g,'""')}"`:o,n=[];t.length>0&&n.push(t.map(r).join(","));for(let o of s)n.push(o.map(r).join(","));return n.join(`
|
|
3
|
+
`)}function te(e){let{headers:t,rows:s}=e;if(t.length===0)return"";let r=[],n=t.map(o=>o.replace(/\|/g,"\\|"));r.push(`| ${n.join(" | ")} |`),r.push(`| ${t.map(()=>"---").join(" | ")} |`);for(let o of s){let a=[...o];for(;a.length<t.length;)a.push("");let l=a.map(i=>i.replace(/\|/g,"\\|"));r.push(`| ${l.join(" | ")} |`)}return r.join(`
|
|
4
|
+
`)}var se=({children:e,className:t,onCopy:s,onError:r,timeout:n=2e3,format:o="markdown"})=>{let[a,l]=(0,C.useState)(!1),i=(0,C.useRef)(0),u=async f=>{var p;if(typeof window=="undefined"||!((p=navigator==null?void 0:navigator.clipboard)!=null&&p.writeText)){r==null||r(new Error("Clipboard API not available"));return}try{if(!a){let h=f.currentTarget.closest('[data-streamdown="table-wrapper"]'),v=h==null?void 0:h.querySelector("table");if(!v){r==null||r(new Error("Table not found"));return}let M=ee(v),B="";switch(o){case"csv":B=R(M);break;case"markdown":B=te(M);break;case"text":B=R(M).replace(/,/g," ");break;default:B=R(M)}await navigator.clipboard.writeText(B),l(!0),s==null||s(),i.current=window.setTimeout(()=>l(!1),n)}}catch(g){r==null||r(g)}};(0,C.useEffect)(()=>()=>{window.clearTimeout(i.current)},[]);let m=a?L.CheckIcon:L.CopyIcon;return(0,T.jsx)("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",t),onClick:u,title:`Copy table as ${o}`,type:"button",children:e!=null?e:(0,T.jsx)(m,{size:14})})};var re=({children:e,className:t,onDownload:s,onError:r})=>{let[n,o]=(0,C.useState)(!1),a=(0,C.useRef)(null),l=i=>{var u;try{let m=(u=a.current)==null?void 0:u.closest('[data-streamdown="table-wrapper"]'),f=m==null?void 0:m.querySelector("table");if(!f){r==null||r(new Error("Table not found"));return}let p=ee(f),g=i==="csv"?R(p):te(p);N(`table.${i==="csv"?"csv":"md"}`,g,i==="csv"?"text/csv":"text/markdown"),o(!1),s==null||s(i)}catch(m){r==null||r(m)}};return(0,C.useEffect)(()=>{let i=u=>{a.current&&!a.current.contains(u.target)&&o(!1)};return document.addEventListener("mousedown",i),()=>{document.removeEventListener("mousedown",i)}},[]),(0,T.jsxs)("div",{className:"relative",ref:a,children:[(0,T.jsx)("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",t),onClick:()=>o(!n),title:"Download table",type:"button",children:e!=null?e:(0,T.jsx)(L.DownloadIcon,{size:14})}),n&&(0,T.jsxs)("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] rounded-md border border-border bg-white shadow-lg",children:[(0,T.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,T.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 d=require("react/jsx-runtime"),Ie=/language-([^\s]+)/,$e=({node:e,className:t,children:s,...r})=>{var i,u,m;if(((i=e==null?void 0:e.position)==null?void 0:i.start.line)===((u=e==null?void 0:e.position)==null?void 0:u.end.line))return(0,d.jsx)("code",{className:c("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...r,children:s});let o=t==null?void 0:t.match(Ie),a=(m=o==null?void 0:o.at(1))!=null?m:"",l="";return(0,oe.isValidElement)(s)&&s.props&&typeof s.props=="object"&&"children"in s.props&&typeof s.props.children=="string"?l=s.props.children:typeof s=="string"&&(l=s),a==="mermaid"?(0,d.jsxs)("div",{className:c("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(O,{code:l,language:a}),(0,d.jsx)(z,{code:l})]}),(0,d.jsx)(Z,{chart:l})]}):(0,d.jsxs)(X,{className:c("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:[(0,d.jsx)(O,{code:l,language:a}),(0,d.jsx)(z,{})]})},ne={ol:({node:e,children:t,className:s,...r})=>(0,d.jsx)("ol",{className:c("ml-4 list-outside list-decimal whitespace-normal",s),"data-streamdown":"ordered-list",...r,children:t}),li:({node:e,children:t,className:s,...r})=>(0,d.jsx)("li",{className:c("py-1",s),"data-streamdown":"list-item",...r,children:t}),ul:({node:e,children:t,className:s,...r})=>(0,d.jsx)("ul",{className:c("ml-4 list-outside list-disc whitespace-normal",s),"data-streamdown":"unordered-list",...r,children:t}),hr:({node:e,className:t,...s})=>(0,d.jsx)("hr",{className:c("my-6 border-border",t),"data-streamdown":"horizontal-rule",...s}),strong:({node:e,children:t,className:s,...r})=>(0,d.jsx)("span",{className:c("font-semibold",s),"data-streamdown":"strong",...r,children:t}),a:({node:e,children:t,className:s,href:r,...n})=>{let o=r==="streamdown:incomplete-link";return(0,d.jsx)("a",{className:c("font-medium text-primary underline",s),"data-incomplete":o,"data-streamdown":"link",href:r,rel:"noreferrer",target:"_blank",...n,children:t})},h1:({node:e,children:t,className:s,...r})=>(0,d.jsx)("h1",{className:c("mt-6 mb-2 font-semibold text-3xl",s),"data-streamdown":"heading-1",...r,children:t}),h2:({node:e,children:t,className:s,...r})=>(0,d.jsx)("h2",{className:c("mt-6 mb-2 font-semibold text-2xl",s),"data-streamdown":"heading-2",...r,children:t}),h3:({node:e,children:t,className:s,...r})=>(0,d.jsx)("h3",{className:c("mt-6 mb-2 font-semibold text-xl",s),"data-streamdown":"heading-3",...r,children:t}),h4:({node:e,children:t,className:s,...r})=>(0,d.jsx)("h4",{className:c("mt-6 mb-2 font-semibold text-lg",s),"data-streamdown":"heading-4",...r,children:t}),h5:({node:e,children:t,className:s,...r})=>(0,d.jsx)("h5",{className:c("mt-6 mb-2 font-semibold text-base",s),"data-streamdown":"heading-5",...r,children:t}),h6:({node:e,children:t,className:s,...r})=>(0,d.jsx)("h6",{className:c("mt-6 mb-2 font-semibold text-sm",s),"data-streamdown":"heading-6",...r,children:t}),table:({node:e,children:t,className:s,...r})=>(0,d.jsxs)("div",{className:"my-4 flex flex-col space-y-2","data-streamdown":"table-wrapper",children:[(0,d.jsxs)("div",{className:"flex items-center justify-end gap-1",children:[(0,d.jsx)(se,{}),(0,d.jsx)(re,{})]}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsx)("table",{className:c("w-full border-collapse border border-border",s),"data-streamdown":"table",...r,children:t})})]}),thead:({node:e,children:t,className:s,...r})=>(0,d.jsx)("thead",{className:c("bg-muted/80",s),"data-streamdown":"table-header",...r,children:t}),tbody:({node:e,children:t,className:s,...r})=>(0,d.jsx)("tbody",{className:c("divide-y divide-border bg-muted/40",s),"data-streamdown":"table-body",...r,children:t}),tr:({node:e,children:t,className:s,...r})=>(0,d.jsx)("tr",{className:c("border-border border-b",s),"data-streamdown":"table-row",...r,children:t}),th:({node:e,children:t,className:s,...r})=>(0,d.jsx)("th",{className:c("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",s),"data-streamdown":"table-header-cell",...r,children:t}),td:({node:e,children:t,className:s,...r})=>(0,d.jsx)("td",{className:c("px-4 py-2 text-sm",s),"data-streamdown":"table-cell",...r,children:t}),blockquote:({node:e,children:t,className:s,...r})=>(0,d.jsx)("blockquote",{className:c("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",s),"data-streamdown":"blockquote",...r,children:t}),code:$e,img:Q,pre:({children:e})=>e,sup:({node:e,children:t,className:s,...r})=>(0,d.jsx)("sup",{className:c("text-sm",s),"data-streamdown":"superscript",...r,children:t}),sub:({node:e,children:t,className:s,...r})=>(0,d.jsx)("sub",{className:c("text-sm",s),"data-streamdown":"subscript",...r,children:t})};var ae=require("marked"),ie=e=>{let s=ae.marked.use({gfm:!0}).lexer(e).map(n=>n.raw),r=[];for(let n=0;n<s.length;n++){let o=s[n];if(o.trim()==="$$"&&r.length>0){let a=r.at(-1),l=a.trimStart().startsWith("$$"),i=(a.match(/\$\$/g)||[]).length;if(l&&i%2===1){r[r.length-1]=a+o;continue}}if(r.length>0&&o.trimEnd().endsWith("$$")){let a=r.at(-1),l=a.trimStart().startsWith("$$"),i=(a.match(/\$\$/g)||[]).length,u=(o.match(/\$\$/g)||[]).length;if(l&&i%2===1&&!o.trimStart().startsWith("$$")&&u===1){r[r.length-1]=a+o;continue}}r.push(o)}return r};var xe=/(!?\[)([^\]]*?)$/,Ne=/(\*\*)([^*]*?)$/,Pe=/(__)([^_]*?)$/,Le=/(\*\*\*)([^*]*?)$/,je=/(\*)([^*]*?)$/,Se=/(_)([^_]*?)$/,He=/(`)([^`]*?)$/,Re=/(~~)([^~]*?)$/,D=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
5
|
+
`)},De=e=>{let t=e.match(xe);if(t){if(t[1].startsWith("!")){let r=e.lastIndexOf(t[1]);return e.substring(0,r)}return`${e}](streamdown:incomplete-link)`}return e},qe=e=>{if(D(e))return e;let t=e.match(Ne);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;let r=e.lastIndexOf(t[1]),o=e.substring(0,r).lastIndexOf(`
|
|
6
|
+
`),a=o===-1?0:o+1,l=e.substring(a,r);if(/^[\s]*[-*+][\s]+$/.test(l)&&s.includes(`
|
|
7
|
+
`))return e;if((e.match(/\*\*/g)||[]).length%2===1)return`${e}**`}return e},Ae=e=>{let t=e.match(Pe);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;let r=e.lastIndexOf(t[1]),o=e.substring(0,r).lastIndexOf(`
|
|
8
|
+
`),a=o===-1?0:o+1,l=e.substring(a,r);if(/^[\s]*[-*+][\s]+$/.test(l)&&s.includes(`
|
|
9
|
+
`))return e;if((e.match(/__/g)||[]).length%2===1)return`${e}__`}return e},_e=e=>e.split("").reduce((t,s,r)=>{if(s==="*"){let n=e[r-1],o=e[r+1];if(n==="\\")return t;let a=r;for(let i=r-1;i>=0;i--){if(e[i]===`
|
|
10
|
+
`){a=i+1;break}if(i===0){a=0;break}}if(e.substring(a,r).trim()===""&&(o===" "||o===" "))return t;if(n!=="*"&&o!=="*")return t+1}return t},0),Oe=e=>{if(D(e))return e;if(e.match(je)){let s=-1;for(let o=0;o<e.length;o++)if(e[o]==="*"&&e[o-1]!=="*"&&e[o+1]!=="*"){s=o;break}if(s===-1)return e;let r=e.substring(s+1);if(!r||/^[\s_~*`]*$/.test(r))return e;if(_e(e)%2===1)return`${e}*`}return e},le=(e,t)=>{let s=!1,r=!1;for(let n=0;n<e.length&&n<t;n++){if(e[n]==="\\"&&e[n+1]==="$"){n++;continue}e[n]==="$"&&(e[n+1]==="$"?(r=!r,n++,s=!1):r||(s=!s))}return s||r},ze=e=>e.split("").reduce((t,s,r)=>{if(s==="_"){let n=e[r-1],o=e[r+1];if(n==="\\"||le(e,r))return t;if(n!=="_"&&o!=="_")return t+1}return t},0),Ee=e=>{if(D(e))return e;if(e.match(Se)){let s=-1;for(let o=0;o<e.length;o++)if(e[o]==="_"&&e[o-1]!=="_"&&e[o+1]!=="_"&&!le(e,o)){s=o;break}if(s===-1)return e;let r=e.substring(s+1);if(!r||/^[\s_~*`]*$/.test(r))return e;if(ze(e)%2===1)return`${e}_`}return e},Ue=(e,t)=>{let s=e.substring(t,t+3)==="```",r=t>0&&e.substring(t-1,t+2)==="```",n=t>1&&e.substring(t-2,t+1)==="```";return s||r||n},We=e=>{let t=0;for(let s=0;s<e.length;s++)e[s]==="`"&&!Ue(e,s)&&t++;return t},Ge=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
|
|
11
|
+
`))return e.endsWith("``")&&!e.endsWith("```")?`${e}\``:e;let s=(e.match(/```/g)||[]).length,r=s%2===1;if(s>0&&s%2===0&&e.includes(`
|
|
12
|
+
`)||(e.endsWith("```\n")||e.endsWith("```"))&&s%2===0)return e;let n=e.match(He);if(n&&!r){let o=n[2];if(!o||/^[\s_~*`]*$/.test(o))return e;if(We(e)%2===1)return`${e}\``}return e},Ve=e=>{let t=e.match(Re);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;if((e.match(/~~/g)||[]).length%2===1)return`${e}~~`}return e};var Fe=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let s=e.indexOf("$$");return s!==-1&&e.indexOf(`
|
|
13
|
+
`,s)!==-1&&!e.endsWith(`
|
|
7
14
|
`)?`${e}
|
|
8
|
-
$$`:`${e}$$`},
|
|
15
|
+
$$`:`${e}$$`},Ke=e=>{let t=0,s=e.match(/\*+/g)||[];for(let r of s){let n=r.length;n>=3&&(t+=Math.floor(n/3))}return t},Xe=e=>{if(D(e)||/^\*{4,}$/.test(e))return e;let t=e.match(Le);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;if(Ke(e)%2===1)return`${e}***`}return e},ce=e=>{if(!e||typeof e!="string")return e;let t=e,s=De(t);return s.endsWith("](streamdown:incomplete-link)")?s:(t=s,t=Xe(t),t=qe(t),t=Ae(t),t=Oe(t),t=Ee(t),t=Ge(t),t=Ve(t),t=Fe(t),t)};var j=require("react/jsx-runtime"),Je=E.default.default||E.default,Qe=Je(de.default),H=(0,y.createContext)(["github-light","github-dark"]),Ye={singleDollarTextMath:!1},Ze={},ge=(0,y.memo)(({content:e,shouldParseIncompleteMarkdown:t,...s})=>{let r=(0,y.useMemo)(()=>typeof e=="string"&&t?ce(e.trim()):e,[e,t]);return(0,j.jsx)(Qe,{...s,children:r})},(e,t)=>e.content===t.content);ge.displayName="Block";var fe=(0,y.memo)(({children:e,allowedImagePrefixes:t=["*"],allowedLinkPrefixes:s=["*"],defaultOrigin:r,parseIncompleteMarkdown:n=!0,components:o,rehypePlugins:a,remarkPlugins:l,className:i,shikiTheme:u=["github-light","github-dark"],...m})=>{let f=(0,y.useId)(),p=(0,y.useMemo)(()=>ie(typeof e=="string"?e:""),[e]),g=(0,y.useMemo)(()=>()=>(0,me.default)({errorColor:"var(--color-muted-foreground)"}),[]);return(0,j.jsx)(H.Provider,{value:u,children:(0,j.jsx)("div",{className:c("space-y-4",i),...m,children:p.map((h,v)=>(0,j.jsx)(ge,{allowedImagePrefixes:t,allowedLinkPrefixes:s,components:{...ne,...o},content:h,defaultOrigin:r,rehypePlugins:[g,...a!=null?a:[]],remarkPlugins:[[ue.default,Ze],[pe.default,Ye],...l!=null?l:[]],shouldParseIncompleteMarkdown:n},`${f}-block_${v}`))})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme);fe.displayName="Streamdown";0&&(module.exports={ShikiThemeContext,Streamdown});
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
"use client";import{createContext as Le,memo as V,useId as Ae,useMemo as N}from"react";import _e from"react-markdown";import Re from"rehype-katex";import Ee from"remark-gfm";import De from"remark-math";import"katex/dist/katex.min.css";import G from"harden-react-markdown";import{isValidElement as oe}from"react";import{CheckIcon as X,CopyIcon as J}from"lucide-react";import{createContext as Q,useContext as A,useEffect as _,useRef as R,useState as B}from"react";import{createHighlighter as H}from"shiki";import{createJavaScriptRegexEngine as Y}from"shiki/engine/javascript";import{clsx as j}from"clsx";import{twMerge as F}from"tailwind-merge";var i=(...e)=>F(j(e));import{jsx as k,jsxs as C}from"react/jsx-runtime";var Z=/<pre(\s|>)/,E=Q({code:""}),$=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null}async ensureHighlightersInitialized(t,r){var m,u;let[n,o]=t,s=Y({forgiving:!0}),a=!this.lightHighlighter||this.lightTheme!==n,c=!this.darkHighlighter||this.darkTheme!==o;(a||c)&&this.loadedLanguages.clear();let l=!this.loadedLanguages.has(r);if(a?(this.lightHighlighter=await H({themes:[n],langs:[r],engine:s}),this.lightTheme=n,this.loadedLanguages.add(r)):l&&await((m=this.lightHighlighter)==null?void 0:m.loadLanguage(r)),c){let g=l?[...this.loadedLanguages,r]:Array.from(this.loadedLanguages);this.darkHighlighter=await H({themes:[o],langs:g.length>0?g:[r],engine:s}),this.darkTheme=o}else l&&await((u=this.darkHighlighter)==null?void 0:u.loadLanguage(r));l&&this.loadedLanguages.add(r)}async highlightCode(t,r,n,o){var u,g;this.initializationPromise&&await this.initializationPromise,this.initializationPromise=this.ensureHighlightersInitialized(n,r),await this.initializationPromise,this.initializationPromise=null;let s=h=>o?h.replace(Z,`<pre class="${o}"$1`):h,[a,c]=n,l=(u=this.lightHighlighter)==null?void 0:u.codeToHtml(t,{lang:r,theme:a}),m=(g=this.darkHighlighter)==null?void 0:g.codeToHtml(t,{lang:r,theme:c});return[L(s(l)),L(s(m))]}},ee=new $;async function te(e,t,r,n){return ee.highlightCode(e,t,r,n)}function L(e){return e.replace(/(<pre[^>]*)(style="[^"]*background[^";]*;?[^"]*")([^>]*>)/g,"$1$3")}var D=({code:e,language:t,className:r,children:n,preClassName:o,...s})=>{let[a,c]=B(""),[l,m]=B(""),u=R(!1),[g,h]=A(P);return _(()=>(u.current=!0,te(e,t,[g,h],o).then(([p,f])=>{u.current&&(c(p),m(f))}),()=>{u.current=!1}),[e,t,g,h,o]),k(E.Provider,{value:{code:e},children:C("div",{className:"my-4 w-full overflow-hidden rounded-xl border","data-code-block-container":!0,"data-language":t,children:[C("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:[k("span",{className:"ml-1 font-mono lowercase",children:t}),k("div",{children:n})]}),k("div",{className:"w-full",children:C("div",{className:"min-w-full",children:[k("div",{className:i("overflow-x-auto dark:hidden",r),dangerouslySetInnerHTML:{__html:a},"data-code-block":!0,"data-language":t,...s}),k("div",{className:i("hidden overflow-x-auto dark:block",r),dangerouslySetInnerHTML:{__html:l},"data-code-block":!0,"data-language":t,...s})]})})]})})},I=({onCopy:e,onError:t,timeout:r=2e3,children:n,className:o,code:s,...a})=>{let[c,l]=B(!1),m=R(0),u=A(E).code,g=s!=null?s:u,h=async()=>{var f;if(typeof window=="undefined"||!((f=navigator==null?void 0:navigator.clipboard)!=null&&f.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{c||(await navigator.clipboard.writeText(g),l(!0),e==null||e(),m.current=window.setTimeout(()=>l(!1),r))}catch(b){t==null||t(b)}};_(()=>()=>{window.clearTimeout(m.current)},[]);let p=c?X:J;return k("button",{className:i("text-muted-foreground","p-1 transition-all",o),onClick:h,type:"button",...a,children:n!=null?n:k(p,{size:14})})};import{useEffect as re,useState as y}from"react";import{jsx as w,jsxs as v}from"react/jsx-runtime";var W=!1,ne=async()=>{if(!W){let r=(await import("mermaid")).default;return r.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),W=!0,r}return(await import("mermaid")).default},z=({chart:e,className:t})=>{let[r,n]=y(null),[o,s]=y(!0),[a,c]=y(""),[l,m]=y("");if(re(()=>{(async()=>{try{n(null),s(!0);let h=await ne(),p=e.split("").reduce((S,K)=>(S<<5)-S+K.charCodeAt(0)|0,0),f=`mermaid-${Math.abs(p)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:b}=await h.render(f,e);c(b),m(b)}catch(h){if(!(l||a)){let p=h instanceof Error?h.message:"Failed to render Mermaid chart";n(p)}}finally{s(!1)}})()},[e]),o&&!a&&!l)return w("div",{className:i("my-4 flex justify-center p-4",t),children:v("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[w("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),w("span",{className:"text-sm",children:"Loading diagram..."})]})});if(r&&!a&&!l)return v("div",{className:i("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[v("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",r]}),v("details",{className:"mt-2",children:[w("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),w("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let u=a||l;return w("div",{"aria-label":"Mermaid chart",className:i("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:u},role:"img"})};import{jsx as d,jsxs as ae}from"react/jsx-runtime";var se=/language-([^\s]+)/,ie=({node:e,className:t,children:r,...n})=>{var l,m,u;if(((l=e==null?void 0:e.position)==null?void 0:l.start.line)===((m=e==null?void 0:e.position)==null?void 0:m.end.line))return d("code",{className:i("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:r});let s=t==null?void 0:t.match(se),a=(u=s==null?void 0:s.at(1))!=null?u:"",c="";return oe(r)&&r.props&&typeof r.props=="object"&&"children"in r.props&&typeof r.props.children=="string"?c=r.props.children:typeof r=="string"&&(c=r),a==="mermaid"?ae("div",{className:i("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[d("div",{className:"flex items-center justify-end",children:d(I,{code:c})}),d(z,{chart:c})]}):d(D,{className:i("overflow-x-auto border-t",t),code:c,"data-language":a,"data-streamdown":"code-block",language:a,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:d(I,{})})},O={ol:({node:e,children:t,className:r,...n})=>d("ol",{className:i("ml-4 list-outside list-decimal whitespace-normal",r),"data-streamdown":"ordered-list",...n,children:t}),li:({node:e,children:t,className:r,...n})=>d("li",{className:i("py-1",r),"data-streamdown":"list-item",...n,children:t}),ul:({node:e,children:t,className:r,...n})=>d("ul",{className:i("ml-4 list-outside list-disc whitespace-normal",r),"data-streamdown":"unordered-list",...n,children:t}),hr:({node:e,className:t,...r})=>d("hr",{className:i("my-6 border-border",t),"data-streamdown":"horizontal-rule",...r}),strong:({node:e,children:t,className:r,...n})=>d("span",{className:i("font-semibold",r),"data-streamdown":"strong",...n,children:t}),a:({node:e,children:t,className:r,href:n,...o})=>{let s=n==="streamdown:incomplete-link";return d("a",{className:i("font-medium text-primary underline",r),"data-incomplete":s,"data-streamdown":"link",href:n,rel:"noreferrer",target:"_blank",...o,children:t})},h1:({node:e,children:t,className:r,...n})=>d("h1",{className:i("mt-6 mb-2 font-semibold text-3xl",r),"data-streamdown":"heading-1",...n,children:t}),h2:({node:e,children:t,className:r,...n})=>d("h2",{className:i("mt-6 mb-2 font-semibold text-2xl",r),"data-streamdown":"heading-2",...n,children:t}),h3:({node:e,children:t,className:r,...n})=>d("h3",{className:i("mt-6 mb-2 font-semibold text-xl",r),"data-streamdown":"heading-3",...n,children:t}),h4:({node:e,children:t,className:r,...n})=>d("h4",{className:i("mt-6 mb-2 font-semibold text-lg",r),"data-streamdown":"heading-4",...n,children:t}),h5:({node:e,children:t,className:r,...n})=>d("h5",{className:i("mt-6 mb-2 font-semibold text-base",r),"data-streamdown":"heading-5",...n,children:t}),h6:({node:e,children:t,className:r,...n})=>d("h6",{className:i("mt-6 mb-2 font-semibold text-sm",r),"data-streamdown":"heading-6",...n,children:t}),table:({node:e,children:t,className:r,...n})=>d("div",{className:"my-4 overflow-x-auto","data-streamdown":"table-wrapper",children:d("table",{className:i("w-full border-collapse border border-border",r),"data-streamdown":"table",...n,children:t})}),thead:({node:e,children:t,className:r,...n})=>d("thead",{className:i("bg-muted/50",r),"data-streamdown":"table-header",...n,children:t}),tbody:({node:e,children:t,className:r,...n})=>d("tbody",{className:i("divide-y divide-border",r),"data-streamdown":"table-body",...n,children:t}),tr:({node:e,children:t,className:r,...n})=>d("tr",{className:i("border-border border-b",r),"data-streamdown":"table-row",...n,children:t}),th:({node:e,children:t,className:r,...n})=>d("th",{className:i("px-4 py-2 text-left font-semibold text-sm",r),"data-streamdown":"table-header-cell",...n,children:t}),td:({node:e,children:t,className:r,...n})=>d("td",{className:i("px-4 py-2 text-sm",r),"data-streamdown":"table-cell",...n,children:t}),blockquote:({node:e,children:t,className:r,...n})=>d("blockquote",{className:i("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",r),"data-streamdown":"blockquote",...n,children:t}),code:ie,pre:({children:e})=>e,sup:({node:e,children:t,className:r,...n})=>d("sup",{className:i("text-sm",r),"data-streamdown":"superscript",...n,children:t}),sub:({node:e,children:t,className:r,...n})=>d("sub",{className:i("text-sm",r),"data-streamdown":"subscript",...n,children:t})};import{marked as le}from"marked";var U=e=>{let r=le.use({gfm:!0}).lexer(e).map(o=>o.raw),n=[];for(let o=0;o<r.length;o++){let s=r[o];if(s.trim()==="$$"&&n.length>0){let a=n.at(-1),c=a.trimStart().startsWith("$$"),l=(a.match(/\$\$/g)||[]).length;if(c&&l%2===1){n[n.length-1]=a+s;continue}}if(n.length>0&&s.trimEnd().endsWith("$$")){let a=n.at(-1),c=a.trimStart().startsWith("$$"),l=(a.match(/\$\$/g)||[]).length,m=(s.match(/\$\$/g)||[]).length;if(c&&l%2===1&&!s.trimStart().startsWith("$$")&&m===1){n[n.length-1]=a+s;continue}}n.push(s)}return n};var de=/(!?\[)([^\]]*?)$/,ce=/(\*\*)([^*]*?)$/,me=/(__)([^_]*?)$/,ue=/(\*\*\*)([^*]*?)$/,he=/(\*)([^*]*?)$/,ge=/(_)([^_]*?)$/,pe=/(`)([^`]*?)$/,fe=/(~~)([^~]*?)$/,M=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
2
|
-
`)
|
|
3
|
-
`)
|
|
4
|
-
`))return e.
|
|
5
|
-
`)
|
|
6
|
-
|
|
1
|
+
"use client";import{createContext as Ye,memo as le,useId as Ze,useMemo as _}from"react";import et from"react-markdown";import tt from"rehype-katex";import st from"remark-gfm";import rt from"remark-math";import"katex/dist/katex.min.css";import ie from"harden-react-markdown";import{isValidElement as Ie}from"react";import{CheckIcon as ue,CopyIcon as pe,DownloadIcon as ge}from"lucide-react";import{createContext as fe,useContext as H,useEffect as U,useRef as W,useState as j}from"react";import{createHighlighter as O}from"shiki";import{createJavaScriptRegexEngine as he}from"shiki/engine/javascript";import{clsx as de}from"clsx";import{twMerge as me}from"tailwind-merge";var c=(...e)=>me(de(e)),y=(e,t,s)=>{let r=typeof t=="string"?new Blob([t],{type:s}):t,n=URL.createObjectURL(r),o=document.createElement("a");o.href=n,o.download=e,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(n)};import{jsx as k,jsxs as L}from"react/jsx-runtime";var be=/<pre(\s|>)/,R=fe({code:""}),S=class{constructor(){this.lightHighlighter=null;this.darkHighlighter=null;this.lightTheme=null;this.darkTheme=null;this.loadedLanguages=new Set;this.initializationPromise=null}async ensureHighlightersInitialized(t,s){var m,d;let[r,n]=t,o=he({forgiving:!0}),a=!this.lightHighlighter||this.lightTheme!==r,l=!this.darkHighlighter||this.darkTheme!==n;(a||l)&&this.loadedLanguages.clear();let i=!this.loadedLanguages.has(s);if(a?(this.lightHighlighter=await O({themes:[r],langs:[s],engine:o}),this.lightTheme=r,this.loadedLanguages.add(s)):i&&await((m=this.lightHighlighter)==null?void 0:m.loadLanguage(s)),l){let f=i?[...this.loadedLanguages,s]:Array.from(this.loadedLanguages);this.darkHighlighter=await O({themes:[n],langs:f.length>0?f:[s],engine:o}),this.darkTheme=n}else i&&await((d=this.darkHighlighter)==null?void 0:d.loadLanguage(s));i&&this.loadedLanguages.add(s)}async highlightCode(t,s,r,n){var d,f;this.initializationPromise&&await this.initializationPromise,this.initializationPromise=this.ensureHighlightersInitialized(r,s),await this.initializationPromise,this.initializationPromise=null;let o=p=>n?p.replace(be,`<pre class="${n}"$1`):p,[a,l]=r,i=(d=this.lightHighlighter)==null?void 0:d.codeToHtml(t,{lang:s,theme:a}),m=(f=this.darkHighlighter)==null?void 0:f.codeToHtml(t,{lang:s,theme:l});return[z(o(i)),z(o(m))]}},ke=new S,z=e=>e.replace(/(<pre[^>]*)(style="[^"]*background[^";]*;?[^"]*")([^>]*>)/g,"$1$3"),G=({code:e,language:t,className:s,children:r,preClassName:n,...o})=>{let[a,l]=j(""),[i,m]=j(""),d=W(!1),[f,p]=H(A);return U(()=>(d.current=!0,ke.highlightCode(e,t,[f,p],n).then(([g,h])=>{d.current&&(l(g),m(h))}),()=>{d.current=!1}),[e,t,f,p,n]),k(R.Provider,{value:{code:e},children:L("div",{className:"my-4 w-full overflow-hidden rounded-xl border","data-code-block-container":!0,"data-language":t,children:[L("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:[k("span",{className:"ml-1 font-mono lowercase",children:t}),k("div",{className:"flex items-center gap-2",children:r})]}),k("div",{className:"w-full",children:L("div",{className:"min-w-full",children:[k("div",{className:c("overflow-x-auto dark:hidden",s),dangerouslySetInnerHTML:{__html:a},"data-code-block":!0,"data-language":t,...o}),k("div",{className:c("hidden overflow-x-auto dark:block",s),dangerouslySetInnerHTML:{__html:i},"data-code-block":!0,"data-language":t,...o})]})})]})})},E={"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"},D=({onDownload:e,onError:t,language:s,children:r,className:n,code:o,...a})=>{let l=H(R).code,i=o!=null?o:l,d=`file.${s&&s in E?E[s]:"txt"}`,f="text/plain",p=()=>{try{y(d,i,f),e==null||e()}catch(g){t==null||t(g)}};return k("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",n),onClick:p,title:"Download file",type:"button",...a,children:r!=null?r:k(ge,{size:14})})},q=({onCopy:e,onError:t,timeout:s=2e3,children:r,className:n,code:o,...a})=>{let[l,i]=j(!1),m=W(0),d=H(R).code,f=o!=null?o:d,p=async()=>{var h;if(typeof window=="undefined"||!((h=navigator==null?void 0:navigator.clipboard)!=null&&h.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{l||(await navigator.clipboard.writeText(f),i(!0),e==null||e(),m.current=window.setTimeout(()=>i(!1),s))}catch(b){t==null||t(b)}};U(()=>()=>{window.clearTimeout(m.current)},[]);let g=l?ue:pe;return k("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",n),onClick:p,type:"button",...a,children:r!=null?r:k(g,{size:14})})};import{DownloadIcon as we}from"lucide-react";import{jsx as B,jsxs as ve}from"react/jsx-runtime";var V=({node:e,className:t,src:s,alt:r,...n})=>{let o=async()=>{var a;if(s)try{let i=await(await fetch(s)).blob(),d=new URL(s,window.location.origin).pathname.split("/").pop()||"",f=d.includes(".")&&((a=d.split(".").pop())==null?void 0:a.length)<=4,p="";if(f)p=d;else{let g=i.type,h="png";g.includes("jpeg")||g.includes("jpg")?h="jpg":g.includes("png")?h="png":g.includes("svg")?h="svg":g.includes("gif")?h="gif":g.includes("webp")&&(h="webp"),p=`${(r||d||"image").replace(/\.[^/.]+$/,"")}.${h}`}y(p,i,i.type)}catch(l){console.error("Failed to download image:",l)}};return s?ve("div",{className:"group relative my-4 inline-block","data-streamdown":"image-wrapper",children:[B("img",{alt:r,className:c("max-w-full rounded-lg",t),"data-streamdown":"image",src:s,...n}),B("div",{className:"pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block"}),B("button",{className:c("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:o,title:"Download image",type:"button",children:B(we,{size:14})})]}):null};import{useEffect as ye,useState as I}from"react";import{jsx as T,jsxs as $}from"react/jsx-runtime";var F=!1,Te=async()=>{if(!F){let s=(await import("mermaid")).default;return s.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),F=!0,s}return(await import("mermaid")).default},K=({chart:e,className:t})=>{let[s,r]=I(null),[n,o]=I(!0),[a,l]=I(""),[i,m]=I("");if(ye(()=>{(async()=>{try{r(null),o(!0);let p=await Te(),g=e.split("").reduce((w,v)=>(w<<5)-w+v.charCodeAt(0)|0,0),h=`mermaid-${Math.abs(g)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:b}=await p.render(h,e);l(b),m(b)}catch(p){if(!(i||a)){let g=p instanceof Error?p.message:"Failed to render Mermaid chart";r(g)}}finally{o(!1)}})()},[e]),n&&!a&&!i)return T("div",{className:c("my-4 flex justify-center p-4",t),children:$("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(s&&!a&&!i)return $("div",{className:c("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[$("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",s]}),$("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 d=a||i;return T("div",{"aria-label":"Mermaid chart",className:c("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:d},role:"img"})};import{CheckIcon as Ce,CopyIcon as Me,DownloadIcon as Be}from"lucide-react";import{useEffect as J,useRef as Q,useState as Y}from"react";import{jsx as C,jsxs as X}from"react/jsx-runtime";function Z(e){var o,a;let t=[],s=[],r=e.querySelectorAll("thead th");for(let l of r)t.push(((o=l.textContent)==null?void 0:o.trim())||"");let n=e.querySelectorAll("tbody tr");for(let l of n){let i=[],m=l.querySelectorAll("td");for(let d of m)i.push(((a=d.textContent)==null?void 0:a.trim())||"");s.push(i)}return{headers:t,rows:s}}function x(e){let{headers:t,rows:s}=e,r=o=>o.includes(",")||o.includes('"')||o.includes(`
|
|
2
|
+
`)?`"${o.replace(/"/g,'""')}"`:o,n=[];t.length>0&&n.push(t.map(r).join(","));for(let o of s)n.push(o.map(r).join(","));return n.join(`
|
|
3
|
+
`)}function ee(e){let{headers:t,rows:s}=e;if(t.length===0)return"";let r=[],n=t.map(o=>o.replace(/\|/g,"\\|"));r.push(`| ${n.join(" | ")} |`),r.push(`| ${t.map(()=>"---").join(" | ")} |`);for(let o of s){let a=[...o];for(;a.length<t.length;)a.push("");let l=a.map(i=>i.replace(/\|/g,"\\|"));r.push(`| ${l.join(" | ")} |`)}return r.join(`
|
|
4
|
+
`)}var te=({children:e,className:t,onCopy:s,onError:r,timeout:n=2e3,format:o="markdown"})=>{let[a,l]=Y(!1),i=Q(0),m=async f=>{var p;if(typeof window=="undefined"||!((p=navigator==null?void 0:navigator.clipboard)!=null&&p.writeText)){r==null||r(new Error("Clipboard API not available"));return}try{if(!a){let h=f.currentTarget.closest('[data-streamdown="table-wrapper"]'),b=h==null?void 0:h.querySelector("table");if(!b){r==null||r(new Error("Table not found"));return}let w=Z(b),v="";switch(o){case"csv":v=x(w);break;case"markdown":v=ee(w);break;case"text":v=x(w).replace(/,/g," ");break;default:v=x(w)}await navigator.clipboard.writeText(v),l(!0),s==null||s(),i.current=window.setTimeout(()=>l(!1),n)}}catch(g){r==null||r(g)}};J(()=>()=>{window.clearTimeout(i.current)},[]);let d=a?Ce:Me;return C("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",t),onClick:m,title:`Copy table as ${o}`,type:"button",children:e!=null?e:C(d,{size:14})})};var se=({children:e,className:t,onDownload:s,onError:r})=>{let[n,o]=Y(!1),a=Q(null),l=i=>{var m;try{let d=(m=a.current)==null?void 0:m.closest('[data-streamdown="table-wrapper"]'),f=d==null?void 0:d.querySelector("table");if(!f){r==null||r(new Error("Table not found"));return}let p=Z(f),g=i==="csv"?x(p):ee(p);y(`table.${i==="csv"?"csv":"md"}`,g,i==="csv"?"text/csv":"text/markdown"),o(!1),s==null||s(i)}catch(d){r==null||r(d)}};return J(()=>{let i=m=>{a.current&&!a.current.contains(m.target)&&o(!1)};return document.addEventListener("mousedown",i),()=>{document.removeEventListener("mousedown",i)}},[]),X("div",{className:"relative",ref:a,children:[C("button",{className:c("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground",t),onClick:()=>o(!n),title:"Download table",type:"button",children:e!=null?e:C(Be,{size:14})}),n&&X("div",{className:"absolute top-full right-0 z-10 mt-1 min-w-[120px] rounded-md border border-border bg-white shadow-lg",children:[C("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"}),C("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{jsx as u,jsxs as M}from"react/jsx-runtime";var $e=/language-([^\s]+)/,xe=({node:e,className:t,children:s,...r})=>{var i,m,d;if(((i=e==null?void 0:e.position)==null?void 0:i.start.line)===((m=e==null?void 0:e.position)==null?void 0:m.end.line))return u("code",{className:c("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...r,children:s});let o=t==null?void 0:t.match($e),a=(d=o==null?void 0:o.at(1))!=null?d:"",l="";return Ie(s)&&s.props&&typeof s.props=="object"&&"children"in s.props&&typeof s.props.children=="string"?l=s.props.children:typeof s=="string"&&(l=s),a==="mermaid"?M("div",{className:c("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[M("div",{className:"flex items-center justify-end gap-2",children:[u(D,{code:l,language:a}),u(q,{code:l})]}),u(K,{chart:l})]}):M(G,{className:c("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:[u(D,{code:l,language:a}),u(q,{})]})},re={ol:({node:e,children:t,className:s,...r})=>u("ol",{className:c("ml-4 list-outside list-decimal whitespace-normal",s),"data-streamdown":"ordered-list",...r,children:t}),li:({node:e,children:t,className:s,...r})=>u("li",{className:c("py-1",s),"data-streamdown":"list-item",...r,children:t}),ul:({node:e,children:t,className:s,...r})=>u("ul",{className:c("ml-4 list-outside list-disc whitespace-normal",s),"data-streamdown":"unordered-list",...r,children:t}),hr:({node:e,className:t,...s})=>u("hr",{className:c("my-6 border-border",t),"data-streamdown":"horizontal-rule",...s}),strong:({node:e,children:t,className:s,...r})=>u("span",{className:c("font-semibold",s),"data-streamdown":"strong",...r,children:t}),a:({node:e,children:t,className:s,href:r,...n})=>{let o=r==="streamdown:incomplete-link";return u("a",{className:c("font-medium text-primary underline",s),"data-incomplete":o,"data-streamdown":"link",href:r,rel:"noreferrer",target:"_blank",...n,children:t})},h1:({node:e,children:t,className:s,...r})=>u("h1",{className:c("mt-6 mb-2 font-semibold text-3xl",s),"data-streamdown":"heading-1",...r,children:t}),h2:({node:e,children:t,className:s,...r})=>u("h2",{className:c("mt-6 mb-2 font-semibold text-2xl",s),"data-streamdown":"heading-2",...r,children:t}),h3:({node:e,children:t,className:s,...r})=>u("h3",{className:c("mt-6 mb-2 font-semibold text-xl",s),"data-streamdown":"heading-3",...r,children:t}),h4:({node:e,children:t,className:s,...r})=>u("h4",{className:c("mt-6 mb-2 font-semibold text-lg",s),"data-streamdown":"heading-4",...r,children:t}),h5:({node:e,children:t,className:s,...r})=>u("h5",{className:c("mt-6 mb-2 font-semibold text-base",s),"data-streamdown":"heading-5",...r,children:t}),h6:({node:e,children:t,className:s,...r})=>u("h6",{className:c("mt-6 mb-2 font-semibold text-sm",s),"data-streamdown":"heading-6",...r,children:t}),table:({node:e,children:t,className:s,...r})=>M("div",{className:"my-4 flex flex-col space-y-2","data-streamdown":"table-wrapper",children:[M("div",{className:"flex items-center justify-end gap-1",children:[u(te,{}),u(se,{})]}),u("div",{className:"overflow-x-auto",children:u("table",{className:c("w-full border-collapse border border-border",s),"data-streamdown":"table",...r,children:t})})]}),thead:({node:e,children:t,className:s,...r})=>u("thead",{className:c("bg-muted/80",s),"data-streamdown":"table-header",...r,children:t}),tbody:({node:e,children:t,className:s,...r})=>u("tbody",{className:c("divide-y divide-border bg-muted/40",s),"data-streamdown":"table-body",...r,children:t}),tr:({node:e,children:t,className:s,...r})=>u("tr",{className:c("border-border border-b",s),"data-streamdown":"table-row",...r,children:t}),th:({node:e,children:t,className:s,...r})=>u("th",{className:c("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",s),"data-streamdown":"table-header-cell",...r,children:t}),td:({node:e,children:t,className:s,...r})=>u("td",{className:c("px-4 py-2 text-sm",s),"data-streamdown":"table-cell",...r,children:t}),blockquote:({node:e,children:t,className:s,...r})=>u("blockquote",{className:c("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",s),"data-streamdown":"blockquote",...r,children:t}),code:xe,img:V,pre:({children:e})=>e,sup:({node:e,children:t,className:s,...r})=>u("sup",{className:c("text-sm",s),"data-streamdown":"superscript",...r,children:t}),sub:({node:e,children:t,className:s,...r})=>u("sub",{className:c("text-sm",s),"data-streamdown":"subscript",...r,children:t})};import{marked as Ne}from"marked";var oe=e=>{let s=Ne.use({gfm:!0}).lexer(e).map(n=>n.raw),r=[];for(let n=0;n<s.length;n++){let o=s[n];if(o.trim()==="$$"&&r.length>0){let a=r.at(-1),l=a.trimStart().startsWith("$$"),i=(a.match(/\$\$/g)||[]).length;if(l&&i%2===1){r[r.length-1]=a+o;continue}}if(r.length>0&&o.trimEnd().endsWith("$$")){let a=r.at(-1),l=a.trimStart().startsWith("$$"),i=(a.match(/\$\$/g)||[]).length,m=(o.match(/\$\$/g)||[]).length;if(l&&i%2===1&&!o.trimStart().startsWith("$$")&&m===1){r[r.length-1]=a+o;continue}}r.push(o)}return r};var Pe=/(!?\[)([^\]]*?)$/,Le=/(\*\*)([^*]*?)$/,je=/(__)([^_]*?)$/,Se=/(\*\*\*)([^*]*?)$/,He=/(\*)([^*]*?)$/,Re=/(_)([^_]*?)$/,De=/(`)([^`]*?)$/,qe=/(~~)([^~]*?)$/,N=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
5
|
+
`)},Ae=e=>{let t=e.match(Pe);if(t){if(t[1].startsWith("!")){let r=e.lastIndexOf(t[1]);return e.substring(0,r)}return`${e}](streamdown:incomplete-link)`}return e},_e=e=>{if(N(e))return e;let t=e.match(Le);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;let r=e.lastIndexOf(t[1]),o=e.substring(0,r).lastIndexOf(`
|
|
6
|
+
`),a=o===-1?0:o+1,l=e.substring(a,r);if(/^[\s]*[-*+][\s]+$/.test(l)&&s.includes(`
|
|
7
|
+
`))return e;if((e.match(/\*\*/g)||[]).length%2===1)return`${e}**`}return e},Oe=e=>{let t=e.match(je);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;let r=e.lastIndexOf(t[1]),o=e.substring(0,r).lastIndexOf(`
|
|
8
|
+
`),a=o===-1?0:o+1,l=e.substring(a,r);if(/^[\s]*[-*+][\s]+$/.test(l)&&s.includes(`
|
|
9
|
+
`))return e;if((e.match(/__/g)||[]).length%2===1)return`${e}__`}return e},ze=e=>e.split("").reduce((t,s,r)=>{if(s==="*"){let n=e[r-1],o=e[r+1];if(n==="\\")return t;let a=r;for(let i=r-1;i>=0;i--){if(e[i]===`
|
|
10
|
+
`){a=i+1;break}if(i===0){a=0;break}}if(e.substring(a,r).trim()===""&&(o===" "||o===" "))return t;if(n!=="*"&&o!=="*")return t+1}return t},0),Ee=e=>{if(N(e))return e;if(e.match(He)){let s=-1;for(let o=0;o<e.length;o++)if(e[o]==="*"&&e[o-1]!=="*"&&e[o+1]!=="*"){s=o;break}if(s===-1)return e;let r=e.substring(s+1);if(!r||/^[\s_~*`]*$/.test(r))return e;if(ze(e)%2===1)return`${e}*`}return e},ne=(e,t)=>{let s=!1,r=!1;for(let n=0;n<e.length&&n<t;n++){if(e[n]==="\\"&&e[n+1]==="$"){n++;continue}e[n]==="$"&&(e[n+1]==="$"?(r=!r,n++,s=!1):r||(s=!s))}return s||r},Ue=e=>e.split("").reduce((t,s,r)=>{if(s==="_"){let n=e[r-1],o=e[r+1];if(n==="\\"||ne(e,r))return t;if(n!=="_"&&o!=="_")return t+1}return t},0),We=e=>{if(N(e))return e;if(e.match(Re)){let s=-1;for(let o=0;o<e.length;o++)if(e[o]==="_"&&e[o-1]!=="_"&&e[o+1]!=="_"&&!ne(e,o)){s=o;break}if(s===-1)return e;let r=e.substring(s+1);if(!r||/^[\s_~*`]*$/.test(r))return e;if(Ue(e)%2===1)return`${e}_`}return e},Ge=(e,t)=>{let s=e.substring(t,t+3)==="```",r=t>0&&e.substring(t-1,t+2)==="```",n=t>1&&e.substring(t-2,t+1)==="```";return s||r||n},Ve=e=>{let t=0;for(let s=0;s<e.length;s++)e[s]==="`"&&!Ge(e,s)&&t++;return t},Fe=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
|
|
11
|
+
`))return e.endsWith("``")&&!e.endsWith("```")?`${e}\``:e;let s=(e.match(/```/g)||[]).length,r=s%2===1;if(s>0&&s%2===0&&e.includes(`
|
|
12
|
+
`)||(e.endsWith("```\n")||e.endsWith("```"))&&s%2===0)return e;let n=e.match(De);if(n&&!r){let o=n[2];if(!o||/^[\s_~*`]*$/.test(o))return e;if(Ve(e)%2===1)return`${e}\``}return e},Ke=e=>{let t=e.match(qe);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;if((e.match(/~~/g)||[]).length%2===1)return`${e}~~`}return e};var Xe=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let s=e.indexOf("$$");return s!==-1&&e.indexOf(`
|
|
13
|
+
`,s)!==-1&&!e.endsWith(`
|
|
7
14
|
`)?`${e}
|
|
8
|
-
$$`:`${e}$$`},
|
|
15
|
+
$$`:`${e}$$`},Je=e=>{let t=0,s=e.match(/\*+/g)||[];for(let r of s){let n=r.length;n>=3&&(t+=Math.floor(n/3))}return t},Qe=e=>{if(N(e)||/^\*{4,}$/.test(e))return e;let t=e.match(Se);if(t){let s=t[2];if(!s||/^[\s_~*`]*$/.test(s))return e;if(Je(e)%2===1)return`${e}***`}return e},ae=e=>{if(!e||typeof e!="string")return e;let t=e,s=Ae(t);return s.endsWith("](streamdown:incomplete-link)")?s:(t=s,t=Qe(t),t=_e(t),t=Oe(t),t=Ee(t),t=We(t),t=Fe(t),t=Ke(t),t=Xe(t),t)};import{jsx as P}from"react/jsx-runtime";var ot=ie.default||ie,nt=ot(et),A=Ye(["github-light","github-dark"]),at={singleDollarTextMath:!1},it={},ce=le(({content:e,shouldParseIncompleteMarkdown:t,...s})=>{let r=_(()=>typeof e=="string"&&t?ae(e.trim()):e,[e,t]);return P(nt,{...s,children:r})},(e,t)=>e.content===t.content);ce.displayName="Block";var lt=le(({children:e,allowedImagePrefixes:t=["*"],allowedLinkPrefixes:s=["*"],defaultOrigin:r,parseIncompleteMarkdown:n=!0,components:o,rehypePlugins:a,remarkPlugins:l,className:i,shikiTheme:m=["github-light","github-dark"],...d})=>{let f=Ze(),p=_(()=>oe(typeof e=="string"?e:""),[e]),g=_(()=>()=>tt({errorColor:"var(--color-muted-foreground)"}),[]);return P(A.Provider,{value:m,children:P("div",{className:c("space-y-4",i),...d,children:p.map((h,b)=>P(ce,{allowedImagePrefixes:t,allowedLinkPrefixes:s,components:{...re,...o},content:h,defaultOrigin:r,rehypePlugins:[g,...a!=null?a:[]],remarkPlugins:[[st,it],[rt,at],...l!=null?l:[]],shouldParseIncompleteMarkdown:n},`${f}-block_${b}`))})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme);lt.displayName="Streamdown";export{A as ShikiThemeContext,lt as Streamdown};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "streamdown",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"katex": "^0.16.22",
|
|
48
48
|
"lucide-react": "^0.542.0",
|
|
49
49
|
"marked": "^16.2.1",
|
|
50
|
-
"mermaid": "^11.
|
|
50
|
+
"mermaid": "^11.11.0",
|
|
51
51
|
"react-markdown": "^10.1.0",
|
|
52
52
|
"rehype-katex": "^7.0.1",
|
|
53
53
|
"remark-gfm": "^4.0.1",
|