streamdown 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/index.cjs +5 -4
- package/dist/index.js +5 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -149,6 +149,8 @@ Streamdown accepts all the same props as react-markdown, plus additional streami
|
|
|
149
149
|
| `rehypePlugins` | `array` | `[rehypeKatex]` | Rehype plugins to use |
|
|
150
150
|
| `allowedImagePrefixes` | `array` | `['*']` | Allowed image URL prefixes |
|
|
151
151
|
| `allowedLinkPrefixes` | `array` | `['*']` | Allowed link URL prefixes |
|
|
152
|
+
| `defaultOrigin` | `string` | - | Default origin to use for relative URLs in links and images |
|
|
153
|
+
| `shikiTheme` | `BundledTheme` (from Shiki) | `github-light` | The theme to use for code blocks |
|
|
152
154
|
|
|
153
155
|
## Architecture
|
|
154
156
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
2
|
-
`){
|
|
3
|
-
`))
|
|
4
|
-
`)
|
|
1
|
+
"use strict";"use client";var j=Object.create;var T=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var ne=(e,t)=>{for(var r in t)T(e,r,{get:t[r],enumerable:!0})},A=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ee(t))!re.call(e,o)&&o!==r&&T(e,o,{get:()=>t[o],enumerable:!(n=x(t,o))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?j(te(e)):{},A(t||!e||!e.__esModule?T(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>A(T({},"__esModule",{value:!0}),e);var Re={};ne(Re,{ShikiThemeContext:()=>$,Streamdown:()=>Y});module.exports=oe(Re);var h=require("react"),G=M(require("react-markdown"),1),F=M(require("rehype-katex"),1),J=M(require("remark-gfm"),1),Q=M(require("remark-math"),1),Xe=require("katex/dist/katex.min.css"),H=M(require("harden-react-markdown"),1);var K=require("react");var B=require("lucide-react"),m=require("react"),P=require("shiki");var _=require("clsx"),R=require("tailwind-merge"),s=(...e)=>(0,R.twMerge)((0,_.clsx)(e));var k=require("react/jsx-runtime"),D=(0,m.createContext)({code:""});async function se(e,t,r){return Promise.all([await(0,P.codeToHtml)(e,{lang:t,theme:r[0]}),await(0,P.codeToHtml)(e,{lang:t,theme:r[1]})])}var E=({code:e,language:t,className:r,children:n,...o})=>{let[i,d]=(0,m.useState)(""),[c,l]=(0,m.useState)(""),u=(0,m.useRef)(!1),[g,y]=(0,m.useContext)($);return(0,m.useEffect)(()=>(se(e,t,[g,y]).then(([f,b])=>{u.current||(d(f),l(b),u.current=!0)}),()=>{u.current=!1}),[e,t,g,y]),(0,k.jsx)(D.Provider,{value:{code:e},children:(0,k.jsxs)("div",{className:"group relative",children:[(0,k.jsx)("div",{className:s("overflow-x-auto dark:hidden [&>pre]:bg-transparent!",r),dangerouslySetInnerHTML:{__html:i},...o}),(0,k.jsx)("div",{className:s("hidden overflow-x-auto dark:block [&>pre]:bg-transparent!",r),dangerouslySetInnerHTML:{__html:c},...o}),n]})})},S=({onCopy:e,onError:t,timeout:r=2e3,children:n,className:o,code:i,...d})=>{let[c,l]=(0,m.useState)(!1),u=(0,m.useContext)(D).code,g=i!=null?i:u,y=async()=>{var b;if(typeof window=="undefined"||!((b=navigator==null?void 0:navigator.clipboard)!=null&&b.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{await navigator.clipboard.writeText(g),l(!0),e==null||e(),setTimeout(()=>l(!1),r)}catch(w){t==null||t(w)}},f=c?B.CheckIcon:B.CopyIcon;return(0,k.jsx)("button",{className:s("absolute top-2 right-2 shrink-0 rounded-md p-3 opacity-0 transition-all","hover:bg-secondary group-hover:opacity-100",o),onClick:y,type:"button",...d,children:n!=null?n:(0,k.jsx)(f,{size:14})})};var C=require("react");var p=require("react/jsx-runtime"),O=!1,ae=async()=>{if(!O){let r=(await import("mermaid")).default;return r.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),O=!0,r}return(await import("mermaid")).default},U=({chart:e,className:t})=>{let[r,n]=(0,C.useState)(null),[o,i]=(0,C.useState)(!0),[d,c]=(0,C.useState)(""),[l,u]=(0,C.useState)("");if((0,C.useEffect)(()=>{(async()=>{try{n(null),i(!0);let f=await ae(),b=e.split("").reduce((L,Z)=>(L<<5)-L+Z.charCodeAt(0)|0,0),w=`mermaid-${Math.abs(b)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:I}=await f.render(w,e);c(I),u(I)}catch(f){if(!(l||d)){let b=f instanceof Error?f.message:"Failed to render Mermaid chart";n(b)}}finally{i(!1)}})()},[e]),o&&!d&&!l)return(0,p.jsx)("div",{className:s("my-4 flex justify-center p-4",t),children:(0,p.jsxs)("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[(0,p.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),(0,p.jsx)("span",{className:"text-sm",children:"Loading diagram..."})]})});if(r&&!d&&!l)return(0,p.jsxs)("div",{className:s("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[(0,p.jsxs)("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",r]}),(0,p.jsxs)("details",{className:"mt-2",children:[(0,p.jsx)("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),(0,p.jsx)("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let g=d||l;return(0,p.jsx)("div",{"aria-label":"Mermaid chart",className:s("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:g},role:"img"})};var a=require("react/jsx-runtime"),ie=/language-([^\s]+)/,de=({node:e,className:t,children:r,...n})=>{var l,u,g;if(((l=e==null?void 0:e.position)==null?void 0:l.start.line)===((u=e==null?void 0:e.position)==null?void 0:u.end.line))return(0,a.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 i=t==null?void 0:t.match(ie),d=(g=i==null?void 0:i.at(1))!=null?g:"plaintext",c="";return(0,K.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),d==="mermaid"?(0,a.jsxs)("div",{className:s("group relative my-4 h-auto rounded-lg border p-4",t),"data-streamdown":"mermaid-block",children:[(0,a.jsx)(U,{chart:c}),(0,a.jsx)(S,{code:c})]}):(0,a.jsx)(E,{className:s("my-4 h-auto rounded-lg border p-4",t),code:c,"data-language":d,"data-streamdown":"code-block",language:d,children:(0,a.jsx)(S,{})})},q={ol:({node:e,children:t,className:r,...n})=>(0,a.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,a.jsx)("li",{className:s("py-1",r),"data-streamdown":"list-item",...n,children:t}),ul:({node:e,children:t,className:r,...n})=>(0,a.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,a.jsx)("hr",{className:s("my-6 border-border",t),"data-streamdown":"horizontal-rule",...r}),strong:({node:e,children:t,className:r,...n})=>(0,a.jsx)("span",{className:s("font-semibold",r),"data-streamdown":"strong",...n,children:t}),a:({node:e,children:t,className:r,href:n,...o})=>(0,a.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,a.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,a.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,a.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,a.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,a.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,a.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,a.jsx)("div",{className:"my-4 overflow-x-auto","data-streamdown":"table-wrapper",children:(0,a.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,a.jsx)("thead",{className:s("bg-muted/50",r),"data-streamdown":"table-header",...n,children:t}),tbody:({node:e,children:t,className:r,...n})=>(0,a.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,a.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,a.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,a.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,a.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:de,pre:({children:e})=>e,sup:({node:e,children:t,className:r,...n})=>(0,a.jsx)("sup",{className:s("text-sm",r),"data-streamdown":"superscript",...n,children:t}),sub:({node:e,children:t,className:r,...n})=>(0,a.jsx)("sub",{className:s("text-sm",r),"data-streamdown":"subscript",...n,children:t})};var z=require("marked"),V=e=>z.marked.use({gfm:!0}).lexer(e).map(r=>r.raw);var le=/(!?\[)([^\]]*?)$/,ce=/(\*\*)([^*]*?)$/,me=/(__)([^_]*?)$/,ue=/(\*\*\*)([^*]*?)$/,pe=/(\*)([^*]*?)$/,ge=/(_)([^_]*?)$/,he=/(`)([^`]*?)$/,fe=/(~~)([^~]*?)$/,be=/(\$\$)([^$]*?)$/,N=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
2
|
+
`)},ke=e=>{let t=e.match(le);if(t){let r=e.lastIndexOf(t[1]);return e.substring(0,r)}return e},ye=e=>N(e)?e:e.match(ce)&&(e.match(/\*\*/g)||[]).length%2===1?`${e}**`:e,Me=e=>e.match(me)&&(e.match(/__/g)||[]).length%2===1?`${e}__`:e,Ce=e=>e.split("").reduce((t,r,n)=>{if(r==="*"){let o=e[n-1],i=e[n+1];if(o==="\\")return t;let d=n;for(let l=n-1;l>=0;l--){if(e[l]===`
|
|
3
|
+
`){d=l+1;break}if(l===0){d=0;break}}if(e.substring(d,n).trim()===""&&(i===" "||i===" "))return t;if(o!=="*"&&i!=="*")return t+1}return t},0),we=e=>N(e)?e:e.match(pe)&&Ce(e)%2===1?`${e}*`:e,Be=(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},ve=e=>e.split("").reduce((t,r,n)=>{if(r==="_"){let o=e[n-1],i=e[n+1];if(o==="\\"||Be(e,n))return t;if(o!=="_"&&i!=="_")return t+1}return t},0),Ie=e=>N(e)?e:e.match(ge)&&ve(e)%2===1?`${e}_`:e,Te=(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]==="`"&&!Te(e,r)&&t++;return t},Ne=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
|
|
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(he)&&!n&&$e(e)%2===1?`${e}\``:e},Pe=e=>e.match(fe)&&(e.match(/~~/g)||[]).length%2===1?`${e}~~`:e;var Se=e=>e.match(be)&&(e.match(/\$\$/g)||[]).length%2===1?`${e}$$`:e;var He=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},Le=e=>N(e)||/^\*{4,}$/.test(e)?e:e.match(ue)&&He(e)%2===1?`${e}***`:e,W=e=>{if(!e||typeof e!="string")return e;let t=e;return t=ke(t),t=Le(t),t=ye(t),t=Me(t),t=we(t),t=Ie(t),t=Ne(t),t=Pe(t),t=Se(t),t};var v=require("react/jsx-runtime"),Ae=H.default.default||H.default,_e=Ae(G.default),$=(0,h.createContext)(["github-light","github-dark"]),X=(0,h.memo)(({content:e,shouldParseIncompleteMarkdown:t,...r})=>{let n=(0,h.useMemo)(()=>typeof e=="string"&&t?W(e.trim()):e,[e,t]);return(0,v.jsx)(_e,{...r,children:n})},(e,t)=>e.content===t.content);X.displayName="Block";var Y=(0,h.memo)(({children:e,allowedImagePrefixes:t,allowedLinkPrefixes:r,defaultOrigin:n,parseIncompleteMarkdown:o=!0,components:i,rehypePlugins:d,remarkPlugins:c,className:l,shikiTheme:u=["github-light","github-dark"],...g})=>{let y=(0,h.useId)(),f=(0,h.useMemo)(()=>V(typeof e=="string"?e:""),[e]),b=(0,h.useMemo)(()=>()=>(0,F.default)({errorColor:"var(--color-muted-foreground)"}),[]);return(0,v.jsx)($.Provider,{value:u,children:(0,v.jsx)("div",{className:s("space-y-4",l),...g,children:f.map((w,I)=>(0,v.jsx)(X,{allowedImagePrefixes:t!=null?t:["*"],allowedLinkPrefixes:r!=null?r:["*"],components:{...q,...i},content:w,defaultOrigin:n,rehypePlugins:[b,...d!=null?d:[]],remarkPlugins:[J.default,[Q.default,{singleDollarTextMath:!1}],...c!=null?c:[]],shouldParseIncompleteMarkdown:o},`${y}-block_${I}`))})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme);Y.displayName="Streamdown";0&&(module.exports={ShikiThemeContext,Streamdown});
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
"use client";import{createContext as
|
|
2
|
-
`){
|
|
3
|
-
`))
|
|
4
|
-
`)
|
|
1
|
+
"use client";import{createContext as Ne,memo as U,useId as Pe,useMemo as $}from"react";import Se from"react-markdown";import He from"rehype-katex";import Le from"remark-gfm";import Ae from"remark-math";import"katex/dist/katex.min.css";import O from"harden-react-markdown";import{isValidElement as x}from"react";import{CheckIcon as W,CopyIcon as G,RouteIcon as qe}from"lucide-react";import{createContext as F,useContext as S,useEffect as J,useRef as Q,useState as v}from"react";import{codeToHtml as P}from"shiki";import{clsx as z}from"clsx";import{twMerge as V}from"tailwind-merge";var o=(...e)=>V(z(e));import{jsx as k,jsxs as Y}from"react/jsx-runtime";var H=F({code:""});async function X(e,t,r){return Promise.all([await P(e,{lang:t,theme:r[0]}),await P(e,{lang:t,theme:r[1]})])}var L=({code:e,language:t,className:r,children:n,...s})=>{let[i,d]=v(""),[c,l]=v(""),m=Q(!1),[u,h]=S(T);return J(()=>(X(e,t,[u,h]).then(([p,g])=>{m.current||(d(p),l(g),m.current=!0)}),()=>{m.current=!1}),[e,t,u,h]),k(H.Provider,{value:{code:e},children:Y("div",{className:"group relative",children:[k("div",{className:o("overflow-x-auto dark:hidden [&>pre]:bg-transparent!",r),dangerouslySetInnerHTML:{__html:i},...s}),k("div",{className:o("hidden overflow-x-auto dark:block [&>pre]:bg-transparent!",r),dangerouslySetInnerHTML:{__html:c},...s}),n]})})},I=({onCopy:e,onError:t,timeout:r=2e3,children:n,className:s,code:i,...d})=>{let[c,l]=v(!1),m=S(H).code,u=i!=null?i:m,h=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(u),l(!0),e==null||e(),setTimeout(()=>l(!1),r)}catch(b){t==null||t(b)}},p=c?W:G;return k("button",{className:o("absolute top-2 right-2 shrink-0 rounded-md p-3 opacity-0 transition-all","hover:bg-secondary group-hover:opacity-100",s),onClick:h,type:"button",...d,children:n!=null?n:k(p,{size:14})})};import{useEffect as Z,useState as M}from"react";import{jsx as f,jsxs as C}from"react/jsx-runtime";var A=!1,j=async()=>{if(!A){let r=(await import("mermaid")).default;return r.initialize({startOnLoad:!1,theme:"default",securityLevel:"strict",fontFamily:"monospace",suppressErrorRendering:!0}),A=!0,r}return(await import("mermaid")).default},_=({chart:e,className:t})=>{let[r,n]=M(null),[s,i]=M(!0),[d,c]=M(""),[l,m]=M("");if(Z(()=>{(async()=>{try{n(null),i(!0);let p=await j(),g=e.split("").reduce((N,q)=>(N<<5)-N+q.charCodeAt(0)|0,0),b=`mermaid-${Math.abs(g)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:y}=await p.render(b,e);c(y),m(y)}catch(p){if(!(l||d)){let g=p instanceof Error?p.message:"Failed to render Mermaid chart";n(g)}}finally{i(!1)}})()},[e]),s&&!d&&!l)return f("div",{className:o("my-4 flex justify-center p-4",t),children:C("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[f("div",{className:"h-4 w-4 animate-spin rounded-full border-current border-b-2"}),f("span",{className:"text-sm",children:"Loading diagram..."})]})});if(r&&!d&&!l)return C("div",{className:o("rounded-lg border border-red-200 bg-red-50 p-4",t),children:[C("p",{className:"font-mono text-red-700 text-sm",children:["Mermaid Error: ",r]}),C("details",{className:"mt-2",children:[f("summary",{className:"cursor-pointer text-red-600 text-xs",children:"Show Code"}),f("pre",{className:"mt-2 overflow-x-auto rounded bg-red-100 p-2 text-red-800 text-xs",children:e})]})]});let u=d||l;return f("div",{"aria-label":"Mermaid chart",className:o("my-4 flex justify-center",t),dangerouslySetInnerHTML:{__html:u},role:"img"})};import{jsx as a,jsxs as re}from"react/jsx-runtime";var ee=/language-([^\s]+)/,te=({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 a("code",{className:o("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:r});let i=t==null?void 0:t.match(ee),d=(u=i==null?void 0:i.at(1))!=null?u:"plaintext",c="";return x(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),d==="mermaid"?re("div",{className:o("group relative my-4 h-auto rounded-lg border p-4",t),"data-streamdown":"mermaid-block",children:[a(_,{chart:c}),a(I,{code:c})]}):a(L,{className:o("my-4 h-auto rounded-lg border p-4",t),code:c,"data-language":d,"data-streamdown":"code-block",language:d,children:a(I,{})})},R={ol:({node:e,children:t,className:r,...n})=>a("ol",{className:o("ml-4 list-outside list-decimal",r),"data-streamdown":"ordered-list",...n,children:t}),li:({node:e,children:t,className:r,...n})=>a("li",{className:o("py-1",r),"data-streamdown":"list-item",...n,children:t}),ul:({node:e,children:t,className:r,...n})=>a("ul",{className:o("ml-4 list-outside list-disc",r),"data-streamdown":"unordered-list",...n,children:t}),hr:({node:e,className:t,...r})=>a("hr",{className:o("my-6 border-border",t),"data-streamdown":"horizontal-rule",...r}),strong:({node:e,children:t,className:r,...n})=>a("span",{className:o("font-semibold",r),"data-streamdown":"strong",...n,children:t}),a:({node:e,children:t,className:r,href:n,...s})=>a("a",{className:o("font-medium text-primary underline",r),"data-streamdown":"link",href:n,rel:"noreferrer",target:"_blank",...s,children:t}),h1:({node:e,children:t,className:r,...n})=>a("h1",{className:o("mt-6 mb-2 font-semibold text-3xl",r),"data-streamdown":"heading-1",...n,children:t}),h2:({node:e,children:t,className:r,...n})=>a("h2",{className:o("mt-6 mb-2 font-semibold text-2xl",r),"data-streamdown":"heading-2",...n,children:t}),h3:({node:e,children:t,className:r,...n})=>a("h3",{className:o("mt-6 mb-2 font-semibold text-xl",r),"data-streamdown":"heading-3",...n,children:t}),h4:({node:e,children:t,className:r,...n})=>a("h4",{className:o("mt-6 mb-2 font-semibold text-lg",r),"data-streamdown":"heading-4",...n,children:t}),h5:({node:e,children:t,className:r,...n})=>a("h5",{className:o("mt-6 mb-2 font-semibold text-base",r),"data-streamdown":"heading-5",...n,children:t}),h6:({node:e,children:t,className:r,...n})=>a("h6",{className:o("mt-6 mb-2 font-semibold text-sm",r),"data-streamdown":"heading-6",...n,children:t}),table:({node:e,children:t,className:r,...n})=>a("div",{className:"my-4 overflow-x-auto","data-streamdown":"table-wrapper",children:a("table",{className:o("w-full border-collapse border border-border",r),"data-streamdown":"table",...n,children:t})}),thead:({node:e,children:t,className:r,...n})=>a("thead",{className:o("bg-muted/50",r),"data-streamdown":"table-header",...n,children:t}),tbody:({node:e,children:t,className:r,...n})=>a("tbody",{className:o("divide-y divide-border",r),"data-streamdown":"table-body",...n,children:t}),tr:({node:e,children:t,className:r,...n})=>a("tr",{className:o("border-border border-b",r),"data-streamdown":"table-row",...n,children:t}),th:({node:e,children:t,className:r,...n})=>a("th",{className:o("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})=>a("td",{className:o("px-4 py-2 text-sm",r),"data-streamdown":"table-cell",...n,children:t}),blockquote:({node:e,children:t,className:r,...n})=>a("blockquote",{className:o("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",r),"data-streamdown":"blockquote",...n,children:t}),code:te,pre:({children:e})=>e,sup:({node:e,children:t,className:r,...n})=>a("sup",{className:o("text-sm",r),"data-streamdown":"superscript",...n,children:t}),sub:({node:e,children:t,className:r,...n})=>a("sub",{className:o("text-sm",r),"data-streamdown":"subscript",...n,children:t})};import{marked as ne}from"marked";var D=e=>ne.use({gfm:!0}).lexer(e).map(r=>r.raw);var oe=/(!?\[)([^\]]*?)$/,se=/(\*\*)([^*]*?)$/,ae=/(__)([^_]*?)$/,ie=/(\*\*\*)([^*]*?)$/,de=/(\*)([^*]*?)$/,le=/(_)([^_]*?)$/,ce=/(`)([^`]*?)$/,me=/(~~)([^~]*?)$/,ue=/(\$\$)([^$]*?)$/,w=e=>{let t=(e.match(/```/g)||[]).length;return t>0&&t%2===0&&e.includes(`
|
|
2
|
+
`)},pe=e=>{let t=e.match(oe);if(t){let r=e.lastIndexOf(t[1]);return e.substring(0,r)}return e},ge=e=>w(e)?e:e.match(se)&&(e.match(/\*\*/g)||[]).length%2===1?`${e}**`:e,he=e=>e.match(ae)&&(e.match(/__/g)||[]).length%2===1?`${e}__`:e,fe=e=>e.split("").reduce((t,r,n)=>{if(r==="*"){let s=e[n-1],i=e[n+1];if(s==="\\")return t;let d=n;for(let l=n-1;l>=0;l--){if(e[l]===`
|
|
3
|
+
`){d=l+1;break}if(l===0){d=0;break}}if(e.substring(d,n).trim()===""&&(i===" "||i===" "))return t;if(s!=="*"&&i!=="*")return t+1}return t},0),be=e=>w(e)?e:e.match(de)&&fe(e)%2===1?`${e}*`:e,ke=(e,t)=>{let r=!1,n=!1;for(let s=0;s<e.length&&s<t;s++){if(e[s]==="\\"&&e[s+1]==="$"){s++;continue}e[s]==="$"&&(e[s+1]==="$"?(n=!n,s++,r=!1):n||(r=!r))}return r||n},ye=e=>e.split("").reduce((t,r,n)=>{if(r==="_"){let s=e[n-1],i=e[n+1];if(s==="\\"||ke(e,n))return t;if(s!=="_"&&i!=="_")return t+1}return t},0),Me=e=>w(e)?e:e.match(le)&&ye(e)%2===1?`${e}_`:e,Ce=(e,t)=>{let r=e.substring(t,t+3)==="```",n=t>0&&e.substring(t-1,t+2)==="```",s=t>1&&e.substring(t-2,t+1)==="```";return r||n||s},we=e=>{let t=0;for(let r=0;r<e.length;r++)e[r]==="`"&&!Ce(e,r)&&t++;return t},Be=e=>{if(e.match(/^```[^`\n]*```?$/)&&!e.includes(`
|
|
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(ce)&&!n&&we(e)%2===1?`${e}\``:e},ve=e=>e.match(me)&&(e.match(/~~/g)||[]).length%2===1?`${e}~~`:e;var Ie=e=>e.match(ue)&&(e.match(/\$\$/g)||[]).length%2===1?`${e}$$`:e;var Te=e=>{let t=0,r=e.match(/\*+/g)||[];for(let n of r){let s=n.length;s>=3&&(t+=Math.floor(s/3))}return t},$e=e=>w(e)||/^\*{4,}$/.test(e)?e:e.match(ie)&&Te(e)%2===1?`${e}***`:e,E=e=>{if(!e||typeof e!="string")return e;let t=e;return t=pe(t),t=$e(t),t=ge(t),t=he(t),t=be(t),t=Me(t),t=Be(t),t=ve(t),t=Ie(t),t};import{jsx as B}from"react/jsx-runtime";var _e=O.default||O,Re=_e(Se),T=Ne(["github-light","github-dark"]),K=U(({content:e,shouldParseIncompleteMarkdown:t,...r})=>{let n=$(()=>typeof e=="string"&&t?E(e.trim()):e,[e,t]);return B(Re,{...r,children:n})},(e,t)=>e.content===t.content);K.displayName="Block";var De=U(({children:e,allowedImagePrefixes:t,allowedLinkPrefixes:r,defaultOrigin:n,parseIncompleteMarkdown:s=!0,components:i,rehypePlugins:d,remarkPlugins:c,className:l,shikiTheme:m=["github-light","github-dark"],...u})=>{let h=Pe(),p=$(()=>D(typeof e=="string"?e:""),[e]),g=$(()=>()=>He({errorColor:"var(--color-muted-foreground)"}),[]);return B(T.Provider,{value:m,children:B("div",{className:o("space-y-4",l),...u,children:p.map((b,y)=>B(K,{allowedImagePrefixes:t!=null?t:["*"],allowedLinkPrefixes:r!=null?r:["*"],components:{...R,...i},content:b,defaultOrigin:n,rehypePlugins:[g,...d!=null?d:[]],remarkPlugins:[Le,[Ae,{singleDollarTextMath:!1}],...c!=null?c:[]],shouldParseIncompleteMarkdown:s},`${h}-block_${y}`))})})},(e,t)=>e.children===t.children&&e.shikiTheme===t.shikiTheme);De.displayName="Streamdown";export{T as ShikiThemeContext,De as Streamdown};
|