streamdown 1.1.7 → 1.1.9
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 +5 -5
- package/dist/index.js +5 -5
- package/package.json +12 -12
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
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 ae=(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)),ie=e=>_(B({},"__esModule",{value:!0}),e);var We={};ae(We,{ShikiThemeContext:()=>N,Streamdown:()=>Z});module.exports=ie(We);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),Ye=require("katex/dist/katex.min.css"),A=v(require("harden-react-markdown"),1);var G=require("react");var I=require("lucide-react"),p=require("react"),P=require("shiki"),W=require("shiki/engine/javascript");var E=require("clsx"),R=require("tailwind-merge"),s=(...e)=>(0,R.twMerge)((0,E.clsx)(e));var h=require("react/jsx-runtime"),le=/<pre(\s|>)/,O=(0,p.createContext)({code:""}),g={light:null,dark:null,lightTheme:null,darkTheme:null};async function de(e,t,r,n){let o=m=>n?m.replace(le,`<pre class="${n}"$1`):m,a=(0,W.createJavaScriptRegexEngine)({forgiving:!0}),[i,c]=r;!g.light||g.lightTheme!==i?(g.light=await(0,P.createHighlighter)({themes:[i],langs:[t],engine:a}),g.lightTheme=i):await g.light.loadLanguage(t),!g.dark||g.darkTheme!==c?(g.dark=await(0,P.createHighlighter)({themes:[c],langs:[t],engine:a}),g.darkTheme=c):await g.dark.loadLanguage(t);let d=g.light.codeToHtml(e,{lang:t,theme:i}),u=g.dark.codeToHtml(e,{lang:t,theme:c});return[D(o(d)),D(o(u))]}function D(e){return e.replace(/(<pre[^>]*)(style="[^"]*background[^";]*;?[^"]*")([^>]*>)/g,"$1$3")}var U=({code:e,language:t,className:r,children:n,preClassName:o,...a})=>{let[i,c]=(0,p.useState)(""),[d,u]=(0,p.useState)(""),m=(0,p.useRef)(!1),[w,k]=(0,p.useContext)(N);return(0,p.useEffect)(()=>(m.current=!0,de(e,t,[w,k],o).then(([y,M])=>{m.current&&(c(y),u(M))}),()=>{m.current=!1}),[e,t,w,k,o]),(0,h.jsx)(O.Provider,{value:{code:e},children:(0,h.jsxs)("div",{className:"my-4 w-full overflow-hidden rounded-xl border",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs",children:[(0,h.jsx)("span",{className:"ml-1 font-mono lowercase",children:t}),(0,h.jsx)("div",{children:n})]}),(0,h.jsx)("div",{className:"w-full",children:(0,h.jsxs)("div",{className:"min-w-full",children:[(0,h.jsx)("div",{className:s("overflow-x-auto dark:hidden",r),dangerouslySetInnerHTML:{__html:i},...a}),(0,h.jsx)("div",{className:s("hidden overflow-x-auto dark:block",r),dangerouslySetInnerHTML:{__html:d},...a})]})})]})})},H=({onCopy:e,onError:t,timeout:r=2e3,children:n,className:o,code:a,...i})=>{let[c,d]=(0,p.useState)(!1),u=(0,p.useContext)(O).code,m=a!=null?a:u,w=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{await navigator.clipboard.writeText(m),d(!0),e==null||e(),setTimeout(()=>d(!1),r)}catch(M){t==null||t(M)}},k=c?I.CheckIcon:I.CopyIcon;return(0,h.jsx)("button",{className:s("text-muted-foreground","p-1 transition-all",o),onClick:w,type:"button",...i,children:n!=null?n:(0,h.jsx)(k,{size:14})})};var C=require("react");var f=require("react/jsx-runtime"),q=!1,ce=async()=>{if(!q){let r=(await import("mermaid")).default;return r.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),q=!0,r}return(await import("mermaid")).default},x=({chart:e,className:t})=>{let[r,n]=(0,C.useState)(null),[o,a]=(0,C.useState)(!0),[i,c]=(0,C.useState)(""),[d,u]=(0,C.useState)("");if((0,C.useEffect)(()=>{(async()=>{try{n(null),a(!0);let k=await ce(),y=e.split("").reduce((L,ee)=>(L<<5)-L+ee.charCodeAt(0)|0,0),M=`mermaid-${Math.abs(y)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:T}=await k.render(M,e);c(T),u(T)}catch(k){if(!(d||i)){let y=k instanceof Error?k.message:"Failed to render Mermaid chart";n(y)}}finally{a(!1)}})()},[e]),o&&!i&&!d)return(0,f.jsx)("div",{className:s("my-4 flex justify-center p-4",t),children:(0,f.jsxs)("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[(0,f.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),(0,f.jsx)("span",{className:"text-sm",children:"Loading diagram..."})]})});if(r&&!i&&!d)return(0,f.jsxs)("div",{className:s("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[(0,f.jsxs)("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",r]}),(0,f.jsxs)("details",{className:"mt-2",children:[(0,f.jsx)("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),(0,f.jsx)("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let m=i||d;return(0,f.jsx)("div",{"aria-label":"Mermaid chart",className:s("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:m},role:"img"})};var l=require("react/jsx-runtime"),me=/language-([^\s]+)/,ue=({node:e,className:t,children:r,...n})=>{var d,u,m;if(((d=e==null?void 0:e.position)==null?void 0:d.start.line)===((u=e==null?void 0:e.position)==null?void 0:u.end.line))return(0,l.jsx)("code",{className:s("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:r});let a=t==null?void 0:t.match(me),i=(m=a==null?void 0:a.at(1))!=null?m:"",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),i==="mermaid"?(0,l.jsxs)("div",{className:s("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[(0,l.jsx)("div",{className:"flex items-center justify-end",children:(0,l.jsx)(H,{code:c})}),(0,l.jsx)(x,{chart:c})]}):(0,l.jsx)(U,{className:s("overflow-x-auto border-t",t),code:c,"data-language":i,"data-streamdown":"code-block",language:i,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:(0,l.jsx)(H,{})})},K={ol:({node:e,children:t,className:r,...n})=>(0,l.jsx)("ol",{className:s("ml-4 list-outside list-decimal",r),"data-streamdown":"ordered-list",...n,children:t}),li:({node:e,children:t,className:r,...n})=>(0,l.jsx)("li",{className:s("py-1",r),"data-streamdown":"list-item",...n,children:t}),ul:({node:e,children:t,className:r,...n})=>(0,l.jsx)("ul",{className:s("ml-4 list-outside list-disc",r),"data-streamdown":"unordered-list",...n,children:t}),hr:({node:e,className:t,...r})=>(0,l.jsx)("hr",{className:s("my-6 border-border",t),"data-streamdown":"horizontal-rule",...r}),strong:({node:e,children:t,className:r,...n})=>(0,l.jsx)("span",{className:s("font-semibold",r),"data-streamdown":"strong",...n,children:t}),a:({node:e,children:t,className:r,href:n,...o})=>(0,l.jsx)("a",{className:s("font-medium text-primary underline",r),"data-streamdown":"link",href:n,rel:"noreferrer",target:"_blank",...o,children:t}),h1:({node:e,children:t,className:r,...n})=>(0,l.jsx)("h1",{className:s("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,l.jsx)("h2",{className:s("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,l.jsx)("h3",{className:s("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,l.jsx)("h4",{className:s("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,l.jsx)("h5",{className:s("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,l.jsx)("h6",{className:s("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,l.jsx)("div",{className:"my-4 overflow-x-auto","data-streamdown":"table-wrapper",children:(0,l.jsx)("table",{className:s("w-full border-collapse border border-border",r),"data-streamdown":"table",...n,children:t})}),thead:({node:e,children:t,className:r,...n})=>(0,l.jsx)("thead",{className:s("bg-muted/50",r),"data-streamdown":"table-header",...n,children:t}),tbody:({node:e,children:t,className:r,...n})=>(0,l.jsx)("tbody",{className:s("divide-y divide-border",r),"data-streamdown":"table-body",...n,children:t}),tr:({node:e,children:t,className:r,...n})=>(0,l.jsx)("tr",{className:s("border-border border-b",r),"data-streamdown":"table-row",...n,children:t}),th:({node:e,children:t,className:r,...n})=>(0,l.jsx)("th",{className:s("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,l.jsx)("td",{className:s("px-4 py-2 text-sm",r),"data-streamdown":"table-cell",...n,children:t}),blockquote:({node:e,children:t,className:r,...n})=>(0,l.jsx)("blockquote",{className:s("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",r),"data-streamdown":"blockquote",...n,children:t}),code:ue,pre:({children:e})=>e,sup:({node:e,children:t,className:r,...n})=>(0,l.jsx)("sup",{className:s("text-sm",r),"data-streamdown":"superscript",...n,children:t}),sub:({node:e,children:t,className:r,...n})=>(0,l.jsx)("sub",{className:s("text-sm",r),"data-streamdown":"subscript",...n,children:t})};var z=require("marked"),V=e=>{let r=z.marked.use({gfm:!0}).lexer(e).map(o=>o.raw),n=[];for(let o=0;o<r.length;o++){let a=r[o];if(a.trim()==="$$"&&n.length>0){let i=n[n.length-1],c=i.trimStart().startsWith("$$"),d=(i.match(/\$\$/g)||[]).length;if(c&&d%2===1){n[n.length-1]=i+a;continue}}if(n.length>0&&a.trimEnd().endsWith("$$")){let i=n[n.length-1],c=i.trimStart().startsWith("$$"),d=(i.match(/\$\$/g)||[]).length,u=(a.match(/\$\$/g)||[]).length;if(c&&d%2===1&&!a.trimStart().startsWith("$$")&&u===1){n[n.length-1]=i+a;continue}}n.push(a)}return n};var he=/(!?\[)([^\]]*?)$/,pe=/(\*\*)([^*]*?)$/,ge=/(__)([^_]*?)$/,fe=/(\*\*\*)([^*]*?)$/,ke=/(\*)([^*]*?)$/,be=/(_)([^_]*?)$/,ye=/(`)([^`]*?)$/,we=/(~~)([^~]*?)$/;var S=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
2
|
-
`)},Me=e=>{let t=e.match(
|
|
3
|
-
`){
|
|
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
|
+
`)},Me=e=>{let t=e.match(ge);if(t){if(t[1].startsWith("!")){let n=e.lastIndexOf(t[1]);return e.substring(0,n)}return`${e}](streamdown:incomplete-link)`}return e},Te=e=>P(e)?e:e.match(pe)&&(e.match(/\*\*/g)||[]).length%2===1?`${e}**`:e,Ce=e=>e.match(fe)&&(e.match(/__/g)||[]).length%2===1?`${e}__`:e,Be=e=>e.split("").reduce((t,r,n)=>{if(r==="*"){let o=e[n-1],s=e[n+1];if(o==="\\")return t;let a=n;for(let l=n-1;l>=0;l--){if(e[l]===`
|
|
3
|
+
`){a=l+1;break}if(l===0){a=0;break}}if(e.substring(a,n).trim()===""&&(s===" "||s===" "))return t;if(o!=="*"&&s!=="*")return t+1}return t},0),$e=e=>P(e)?e:e.match(be)&&Be(e)%2===1?`${e}*`:e,Ie=(e,t)=>{let r=!1,n=!1;for(let o=0;o<e.length&&o<t;o++){if(e[o]==="\\"&&e[o+1]==="$"){o++;continue}e[o]==="$"&&(e[o+1]==="$"?(n=!n,o++,r=!1):n||(r=!r))}return r||n},Pe=e=>e.split("").reduce((t,r,n)=>{if(r==="_"){let o=e[n-1],s=e[n+1];if(o==="\\"||Ie(e,n))return t;if(o!=="_"&&s!=="_")return t+1}return t},0),Ne=e=>P(e)?e:e.match(we)&&Pe(e)%2===1?`${e}_`:e,Se=(e,t)=>{let r=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",o=t>1&&e.substring(t-2,t+1)==="```";return r||n||o},He=e=>{let t=0;for(let r=0;r<e.length;r++)e[r]==="`"&&!Se(e,r)&&t++;return t},Le=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
|
|
4
4
|
`))return e.endsWith("``")&&!e.endsWith("```")?`${e}\``:e;let r=(e.match(/```/g)||[]).length,n=r%2===1;return r>0&&r%2===0&&e.includes(`
|
|
5
|
-
`)||(e.endsWith("```\n")||e.endsWith("```"))&&r%2===0?e:e.match(ye)&&!n&&
|
|
5
|
+
`)||(e.endsWith("```\n")||e.endsWith("```"))&&r%2===0?e:e.match(ye)&&!n&&He(e)%2===1?`${e}\``:e},Ae=e=>e.match(ve)&&(e.match(/~~/g)||[]).length%2===1?`${e}~~`:e;var _e=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let r=e.indexOf("$$");return r!==-1&&e.indexOf(`
|
|
6
6
|
`,r)!==-1&&!e.endsWith(`
|
|
7
7
|
`)?`${e}
|
|
8
|
-
$$`:`${e}$$`}
|
|
8
|
+
$$`:`${e}$$`},Re=e=>{let t=0,r=e.match(/\*+/g)||[];for(let n of r){let o=n.length;o>=3&&(t+=Math.floor(o/3))}return t},Ee=e=>P(e)||/^\*{4,}$/.test(e)?e:e.match(ke)&&Re(e)%2===1?`${e}***`:e,j=e=>{if(!e||typeof e!="string")return e;let t=e,r=Me(t);return r.endsWith("](streamdown:incomplete-link)")?r:(t=r,t=Ee(t),t=Te(t),t=Ce(t),t=$e(t),t=Ne(t),t=Le(t),t=Ae(t),t=_e(t),t)};var C=require("react/jsx-runtime"),De=L.default.default||L.default,We=De(F.default),I=(0,b.createContext)(["github-light","github-dark"]),Y=(0,b.memo)(({content:e,shouldParseIncompleteMarkdown:t,...r})=>{let n=(0,b.useMemo)(()=>typeof e=="string"&&t?j(e.trim()):e,[e,t]);return(0,C.jsx)(We,{...r,children:n})},(e,t)=>e.content===t.content);Y.displayName="Block";var Z=(0,b.memo)(({children:e,allowedImagePrefixes:t,allowedLinkPrefixes:r,defaultOrigin:n,parseIncompleteMarkdown:o=!0,components:s,rehypePlugins:a,remarkPlugins:c,className:l,shikiTheme:m=["github-light","github-dark"],...u})=>{let p=(0,b.useId)(),g=(0,b.useMemo)(()=>K(typeof e=="string"?e:""),[e]),w=(0,b.useMemo)(()=>()=>(0,X.default)({errorColor:"var(--color-muted-foreground)"}),[]);return(0,C.jsx)(I.Provider,{value:m,children:(0,C.jsx)("div",{className:i("space-y-4",l),...u,children:g.map((y,T)=>(0,C.jsx)(Y,{allowedImagePrefixes:t!=null?t:["*"],allowedLinkPrefixes:r!=null?r:["*"],components:{...V,...s},content:y,defaultOrigin:n,rehypePlugins:[w,...a!=null?a:[]],remarkPlugins:[J.default,[Q.default,{singleDollarTextMath:!1}],...c!=null?c:[]],shouldParseIncompleteMarkdown:o},`${p}-block_${T}`))})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme);Z.displayName="Streamdown";0&&(module.exports={ShikiThemeContext,Streamdown});
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use client";import{createContext as He,memo as x,useId as Ae,useMemo as S}from"react";import Le from"react-markdown";import _e from"rehype-katex";import Ee from"remark-gfm";import Re from"remark-math";import"katex/dist/katex.min.css";import q from"harden-react-markdown";import{isValidElement as ne}from"react";import{CheckIcon as j,CopyIcon as F}from"lucide-react";import{createContext as X,useContext as L,useEffect as J,useRef as Q,useState as B}from"react";import{createHighlighter as H}from"shiki";import{createJavaScriptRegexEngine as Y}from"shiki/engine/javascript";import{clsx as z}from"clsx";import{twMerge as V}from"tailwind-merge";var s=(...e)=>V(z(e));import{jsx as f,jsxs as T}from"react/jsx-runtime";var Z=/<pre(\s|>)/,_=X({code:""}),h={light:null,dark:null,lightTheme:null,darkTheme:null};async function ee(e,t,r,n){let o=m=>n?m.replace(Z,`<pre class="${n}"$1`):m,a=Y({forgiving:!0}),[i,c]=r;!h.light||h.lightTheme!==i?(h.light=await H({themes:[i],langs:[t],engine:a}),h.lightTheme=i):await h.light.loadLanguage(t),!h.dark||h.darkTheme!==c?(h.dark=await H({themes:[c],langs:[t],engine:a}),h.darkTheme=c):await h.dark.loadLanguage(t);let d=h.light.codeToHtml(e,{lang:t,theme:i}),u=h.dark.codeToHtml(e,{lang:t,theme:c});return[A(o(d)),A(o(u))]}function A(e){return e.replace(/(<pre[^>]*)(style="[^"]*background[^";]*;?[^"]*")([^>]*>)/g,"$1$3")}var E=({code:e,language:t,className:r,children:n,preClassName:o,...a})=>{let[i,c]=B(""),[d,u]=B(""),m=Q(!1),[k,p]=L(N);return J(()=>(m.current=!0,ee(e,t,[k,p],o).then(([g,b])=>{m.current&&(c(g),u(b))}),()=>{m.current=!1}),[e,t,k,p,o]),f(_.Provider,{value:{code:e},children:T("div",{className:"my-4 w-full overflow-hidden rounded-xl border",children:[T("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs",children:[f("span",{className:"ml-1 font-mono lowercase",children:t}),f("div",{children:n})]}),f("div",{className:"w-full",children:T("div",{className:"min-w-full",children:[f("div",{className:s("overflow-x-auto dark:hidden",r),dangerouslySetInnerHTML:{__html:i},...a}),f("div",{className:s("hidden overflow-x-auto dark:block",r),dangerouslySetInnerHTML:{__html:d},...a})]})})]})})},I=({onCopy:e,onError:t,timeout:r=2e3,children:n,className:o,code:a,...i})=>{let[c,d]=B(!1),u=L(_).code,m=a!=null?a:u,k=async()=>{var g;if(typeof window=="undefined"||!((g=navigator==null?void 0:navigator.clipboard)!=null&&g.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{await navigator.clipboard.writeText(m),d(!0),e==null||e(),setTimeout(()=>d(!1),r)}catch(b){t==null||t(b)}},p=c?j:F;return f("button",{className:s("text-muted-foreground","p-1 transition-all",o),onClick:k,type:"button",...i,children:n!=null?n:f(p,{size:14})})};import{useEffect as te,useState as M}from"react";import{jsx as y,jsxs as v}from"react/jsx-runtime";var R=!1,re=async()=>{if(!R){let r=(await import("mermaid")).default;return r.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),R=!0,r}return(await import("mermaid")).default},D=({chart:e,className:t})=>{let[r,n]=M(null),[o,a]=M(!0),[i,c]=M(""),[d,u]=M("");if(te(()=>{(async()=>{try{n(null),a(!0);let p=await re(),g=e.split("").reduce((P,K)=>(P<<5)-P+K.charCodeAt(0)|0,0),b=`mermaid-${Math.abs(g)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:w}=await p.render(b,e);c(w),u(w)}catch(p){if(!(d||i)){let g=p instanceof Error?p.message:"Failed to render Mermaid chart";n(g)}}finally{a(!1)}})()},[e]),o&&!i&&!d)return y("div",{className:s("my-4 flex justify-center p-4",t),children:v("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[y("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),y("span",{className:"text-sm",children:"Loading diagram..."})]})});if(r&&!i&&!d)return v("div",{className:s("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:[y("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),y("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let m=i||d;return y("div",{"aria-label":"Mermaid chart",className:s("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:m},role:"img"})};import{jsx as l,jsxs as ae}from"react/jsx-runtime";var oe=/language-([^\s]+)/,se=({node:e,className:t,children:r,...n})=>{var d,u,m;if(((d=e==null?void 0:e.position)==null?void 0:d.start.line)===((u=e==null?void 0:e.position)==null?void 0:u.end.line))return l("code",{className:s("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:r});let a=t==null?void 0:t.match(oe),i=(m=a==null?void 0:a.at(1))!=null?m:"",c="";return ne(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),i==="mermaid"?ae("div",{className:s("group relative my-4 h-auto rounded-xl border p-4",t),"data-streamdown":"mermaid-block",children:[l("div",{className:"flex items-center justify-end",children:l(I,{code:c})}),l(D,{chart:c})]}):l(E,{className:s("overflow-x-auto border-t",t),code:c,"data-language":i,"data-streamdown":"code-block",language:i,preClassName:"overflow-x-auto font-mono text-xs p-4 bg-muted/40",children:l(I,{})})},W={ol:({node:e,children:t,className:r,...n})=>l("ol",{className:s("ml-4 list-outside list-decimal",r),"data-streamdown":"ordered-list",...n,children:t}),li:({node:e,children:t,className:r,...n})=>l("li",{className:s("py-1",r),"data-streamdown":"list-item",...n,children:t}),ul:({node:e,children:t,className:r,...n})=>l("ul",{className:s("ml-4 list-outside list-disc",r),"data-streamdown":"unordered-list",...n,children:t}),hr:({node:e,className:t,...r})=>l("hr",{className:s("my-6 border-border",t),"data-streamdown":"horizontal-rule",...r}),strong:({node:e,children:t,className:r,...n})=>l("span",{className:s("font-semibold",r),"data-streamdown":"strong",...n,children:t}),a:({node:e,children:t,className:r,href:n,...o})=>l("a",{className:s("font-medium text-primary underline",r),"data-streamdown":"link",href:n,rel:"noreferrer",target:"_blank",...o,children:t}),h1:({node:e,children:t,className:r,...n})=>l("h1",{className:s("mt-6 mb-2 font-semibold text-3xl",r),"data-streamdown":"heading-1",...n,children:t}),h2:({node:e,children:t,className:r,...n})=>l("h2",{className:s("mt-6 mb-2 font-semibold text-2xl",r),"data-streamdown":"heading-2",...n,children:t}),h3:({node:e,children:t,className:r,...n})=>l("h3",{className:s("mt-6 mb-2 font-semibold text-xl",r),"data-streamdown":"heading-3",...n,children:t}),h4:({node:e,children:t,className:r,...n})=>l("h4",{className:s("mt-6 mb-2 font-semibold text-lg",r),"data-streamdown":"heading-4",...n,children:t}),h5:({node:e,children:t,className:r,...n})=>l("h5",{className:s("mt-6 mb-2 font-semibold text-base",r),"data-streamdown":"heading-5",...n,children:t}),h6:({node:e,children:t,className:r,...n})=>l("h6",{className:s("mt-6 mb-2 font-semibold text-sm",r),"data-streamdown":"heading-6",...n,children:t}),table:({node:e,children:t,className:r,...n})=>l("div",{className:"my-4 overflow-x-auto","data-streamdown":"table-wrapper",children:l("table",{className:s("w-full border-collapse border border-border",r),"data-streamdown":"table",...n,children:t})}),thead:({node:e,children:t,className:r,...n})=>l("thead",{className:s("bg-muted/50",r),"data-streamdown":"table-header",...n,children:t}),tbody:({node:e,children:t,className:r,...n})=>l("tbody",{className:s("divide-y divide-border",r),"data-streamdown":"table-body",...n,children:t}),tr:({node:e,children:t,className:r,...n})=>l("tr",{className:s("border-border border-b",r),"data-streamdown":"table-row",...n,children:t}),th:({node:e,children:t,className:r,...n})=>l("th",{className:s("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})=>l("td",{className:s("px-4 py-2 text-sm",r),"data-streamdown":"table-cell",...n,children:t}),blockquote:({node:e,children:t,className:r,...n})=>l("blockquote",{className:s("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",r),"data-streamdown":"blockquote",...n,children:t}),code:se,pre:({children:e})=>e,sup:({node:e,children:t,className:r,...n})=>l("sup",{className:s("text-sm",r),"data-streamdown":"superscript",...n,children:t}),sub:({node:e,children:t,className:r,...n})=>l("sub",{className:s("text-sm",r),"data-streamdown":"subscript",...n,children:t})};import{marked as ie}from"marked";var O=e=>{let r=ie.use({gfm:!0}).lexer(e).map(o=>o.raw),n=[];for(let o=0;o<r.length;o++){let a=r[o];if(a.trim()==="$$"&&n.length>0){let i=n[n.length-1],c=i.trimStart().startsWith("$$"),d=(i.match(/\$\$/g)||[]).length;if(c&&d%2===1){n[n.length-1]=i+a;continue}}if(n.length>0&&a.trimEnd().endsWith("$$")){let i=n[n.length-1],c=i.trimStart().startsWith("$$"),d=(i.match(/\$\$/g)||[]).length,u=(a.match(/\$\$/g)||[]).length;if(c&&d%2===1&&!a.trimStart().startsWith("$$")&&u===1){n[n.length-1]=i+a;continue}}n.push(a)}return n};var le=/(!?\[)([^\]]*?)$/,de=/(\*\*)([^*]*?)$/,ce=/(__)([^_]*?)$/,me=/(\*\*\*)([^*]*?)$/,ue=/(\*)([^*]*?)$/,he=/(_)([^_]*?)$/,pe=/(`)([^`]*?)$/,ge=/(~~)([^~]*?)$/;var C=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
2
|
-
`)},
|
|
3
|
-
`){
|
|
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
|
+
`)},ke=e=>{let t=e.match(de);if(t){if(t[1].startsWith("!")){let n=e.lastIndexOf(t[1]);return e.substring(0,n)}return`${e}](streamdown:incomplete-link)`}return e},be=e=>M(e)?e:e.match(ce)&&(e.match(/\*\*/g)||[]).length%2===1?`${e}**`:e,we=e=>e.match(me)&&(e.match(/__/g)||[]).length%2===1?`${e}__`:e,ye=e=>e.split("").reduce((t,r,n)=>{if(r==="*"){let o=e[n-1],s=e[n+1];if(o==="\\")return t;let a=n;for(let l=n-1;l>=0;l--){if(e[l]===`
|
|
3
|
+
`){a=l+1;break}if(l===0){a=0;break}}if(e.substring(a,n).trim()===""&&(s===" "||s===" "))return t;if(o!=="*"&&s!=="*")return t+1}return t},0),ve=e=>M(e)?e:e.match(he)&&ye(e)%2===1?`${e}*`:e,Me=(e,t)=>{let r=!1,n=!1;for(let o=0;o<e.length&&o<t;o++){if(e[o]==="\\"&&e[o+1]==="$"){o++;continue}e[o]==="$"&&(e[o+1]==="$"?(n=!n,o++,r=!1):n||(r=!r))}return r||n},Te=e=>e.split("").reduce((t,r,n)=>{if(r==="_"){let o=e[n-1],s=e[n+1];if(o==="\\"||Me(e,n))return t;if(o!=="_"&&s!=="_")return t+1}return t},0),Ce=e=>M(e)?e:e.match(ge)&&Te(e)%2===1?`${e}_`:e,Be=(e,t)=>{let r=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",o=t>1&&e.substring(t-2,t+1)==="```";return r||n||o},$e=e=>{let t=0;for(let r=0;r<e.length;r++)e[r]==="`"&&!Be(e,r)&&t++;return t},Ie=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
|
|
4
4
|
`))return e.endsWith("``")&&!e.endsWith("```")?`${e}\``:e;let r=(e.match(/```/g)||[]).length,n=r%2===1;return r>0&&r%2===0&&e.includes(`
|
|
5
|
-
`)||(e.endsWith("```\n")||e.endsWith("```"))&&r%2===0?e:e.match(pe)&&!n
|
|
5
|
+
`)||(e.endsWith("```\n")||e.endsWith("```"))&&r%2===0?e:e.match(pe)&&!n&&$e(e)%2===1?`${e}\``:e},Pe=e=>e.match(fe)&&(e.match(/~~/g)||[]).length%2===1?`${e}~~`:e;var Ne=e=>{if((e.match(/\$\$/g)||[]).length%2===0)return e;let r=e.indexOf("$$");return r!==-1&&e.indexOf(`
|
|
6
6
|
`,r)!==-1&&!e.endsWith(`
|
|
7
7
|
`)?`${e}
|
|
8
|
-
$$`:`${e}$$`}
|
|
8
|
+
$$`:`${e}$$`},Se=e=>{let t=0,r=e.match(/\*+/g)||[];for(let n of r){let o=n.length;o>=3&&(t+=Math.floor(o/3))}return t},He=e=>M(e)||/^\*{4,}$/.test(e)?e:e.match(ue)&&Se(e)%2===1?`${e}***`:e,q=e=>{if(!e||typeof e!="string")return e;let t=e,r=ke(t);return r.endsWith("](streamdown:incomplete-link)")?r:(t=r,t=He(t),t=be(t),t=we(t),t=ve(t),t=Ce(t),t=Ie(t),t=Pe(t),t=Ne(t),t)};import{jsx as T}from"react/jsx-runtime";var We=G.default||G,ze=We(_e),P=Le(["github-light","github-dark"]),x=V(({content:e,shouldParseIncompleteMarkdown:t,...r})=>{let n=N(()=>typeof e=="string"&&t?q(e.trim()):e,[e,t]);return T(ze,{...r,children:n})},(e,t)=>e.content===t.content);x.displayName="Block";var Oe=V(({children:e,allowedImagePrefixes:t,allowedLinkPrefixes:r,defaultOrigin:n,parseIncompleteMarkdown:o=!0,components:s,rehypePlugins:a,remarkPlugins:c,className:l,shikiTheme:m=["github-light","github-dark"],...u})=>{let g=Ae(),h=N(()=>U(typeof e=="string"?e:""),[e]),p=N(()=>()=>Re({errorColor:"var(--color-muted-foreground)"}),[]);return T(P.Provider,{value:m,children:T("div",{className:i("space-y-4",l),...u,children:h.map((f,b)=>T(x,{allowedImagePrefixes:t!=null?t:["*"],allowedLinkPrefixes:r!=null?r:["*"],components:{...O,...s},content:f,defaultOrigin:n,rehypePlugins:[p,...a!=null?a:[]],remarkPlugins:[Ee,[De,{singleDollarTextMath:!1}],...c!=null?c:[]],shouldParseIncompleteMarkdown:o},`${g}-block_${b}`))})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme);Oe.displayName="Streamdown";export{P as ShikiThemeContext,Oe as Streamdown};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "streamdown",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
"license": "Apache-2.0",
|
|
27
27
|
"description": "A drop-in replacement for react-markdown, designed for AI-powered streaming.",
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@testing-library/jest-dom": "^6.
|
|
30
|
-
"@testing-library/react": "^16.
|
|
31
|
-
"@types/react": "^19.1.
|
|
32
|
-
"@types/react-dom": "^19.1.
|
|
33
|
-
"@vitejs/plugin-react": "^5.0.
|
|
29
|
+
"@testing-library/jest-dom": "^6.8.0",
|
|
30
|
+
"@testing-library/react": "^16.3.0",
|
|
31
|
+
"@types/react": "^19.1.12",
|
|
32
|
+
"@types/react-dom": "^19.1.9",
|
|
33
|
+
"@vitejs/plugin-react": "^5.0.2",
|
|
34
34
|
"@vitest/coverage-v8": "^3.2.4",
|
|
35
|
-
"jsdom": "^
|
|
35
|
+
"jsdom": "^26.1.0",
|
|
36
36
|
"react": "^19.1.1",
|
|
37
37
|
"react-dom": "^19.1.1",
|
|
38
38
|
"tsup": "^8.5.0",
|
|
@@ -43,16 +43,16 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"clsx": "^2.1.1",
|
|
46
|
-
"harden-react-markdown": "^1.0.
|
|
46
|
+
"harden-react-markdown": "^1.0.5",
|
|
47
47
|
"katex": "^0.16.22",
|
|
48
|
-
"lucide-react": "^0.
|
|
49
|
-
"marked": "^16.1
|
|
50
|
-
"mermaid": "^11.
|
|
48
|
+
"lucide-react": "^0.542.0",
|
|
49
|
+
"marked": "^16.2.1",
|
|
50
|
+
"mermaid": "^11.10.1",
|
|
51
51
|
"react-markdown": "^10.1.0",
|
|
52
52
|
"rehype-katex": "^7.0.1",
|
|
53
53
|
"remark-gfm": "^4.0.1",
|
|
54
54
|
"remark-math": "^6.0.0",
|
|
55
|
-
"shiki": "^3.
|
|
55
|
+
"shiki": "^3.12.2",
|
|
56
56
|
"tailwind-merge": "^3.3.1"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|