streamdown 0.0.1 → 0.0.3
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 +1 -0
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1 -0
- package/package.json +50 -5
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";"use client";var F=Object.create;var h=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames,C=Object.getOwnPropertySymbols,W=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty,v=Object.prototype.propertyIsEnumerable;var $=(t,e,o)=>e in t?h(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,a=(t,e)=>{for(var o in e||(e={}))N.call(e,o)&&$(t,o,e[o]);if(C)for(var o of C(e))v.call(e,o)&&$(t,o,e[o]);return t};var i=(t,e)=>{var o={};for(var n in t)N.call(t,n)&&e.indexOf(n)<0&&(o[n]=t[n]);if(t!=null&&C)for(var n of C(t))e.indexOf(n)<0&&v.call(t,n)&&(o[n]=t[n]);return o};var X=(t,e)=>{for(var o in e)h(t,o,{get:e[o],enumerable:!0})},w=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Q(e))!N.call(t,s)&&s!==o&&h(t,s,{get:()=>e[s],enumerable:!(n=J(e,s))||n.enumerable});return t};var f=(t,e,o)=>(o=t!=null?F(W(t)):{},w(e||!t||!t.__esModule?h(o,"default",{value:t,enumerable:!0}):o,t)),Y=t=>w(h({},"__esModule",{value:!0}),t);var Nt={};X(Nt,{Streamdown:()=>z});module.exports=Y(Nt);var p=require("react"),O=f(require("react-markdown"),1),q=f(require("rehype-katex"),1),R=f(require("remark-gfm"),1),V=f(require("remark-math"),1),Ut=require("katex/dist/katex.min.css"),j=f(require("harden-react-markdown"),1);var K=require("react");var M=require("lucide-react"),d=require("react"),_=require("shiki");var P=require("clsx"),T=require("tailwind-merge"),c=(...t)=>(0,T.twMerge)((0,P.clsx)(t));var S=(0,d.createContext)({code:""});async function Z(t,e){return await(0,_.codeToHtml)(t,{lang:e,theme:"github-light"})}var A=r=>{var l=r,{code:t,language:e,className:o,children:n}=l,s=i(l,["code","language","className","children"]);let[m,g]=(0,d.useState)("");return(0,d.useEffect)(()=>{let u=!0;return Z(t,e).then(b=>{u&&g(b)}),()=>{u=!1}},[t,e]),React.createElement(S.Provider,{value:{code:t}},React.createElement("div",{className:"group relative"},React.createElement("div",a({className:c("overflow-x-auto",o),dangerouslySetInnerHTML:{__html:m}},s)),n))},H=l=>{var m=l,{onCopy:t,onError:e,timeout:o=2e3,children:n,className:s}=m,r=i(m,["onCopy","onError","timeout","children","className"]);let[g,u]=(0,d.useState)(!1),{code:b}=(0,d.useContext)(S),k=async()=>{var y;if(typeof window=="undefined"||!((y=navigator==null?void 0:navigator.clipboard)!=null&&y.writeText)){e==null||e(new Error("Clipboard API not available"));return}try{await navigator.clipboard.writeText(b),u(!0),t==null||t(),setTimeout(()=>u(!1),o)}catch(I){e==null||e(I)}},B=g?M.CheckIcon:M.CopyIcon;return React.createElement("button",a({className:c("absolute top-2 right-2 shrink-0 rounded-md p-3 opacity-0 transition-all","hover:bg-secondary group-hover:opacity-100",s),onClick:k,type:"button"},r),n!=null?n:React.createElement(B,{size:14}))};var L={ol:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("ol",a({className:c("ml-4 list-outside list-decimal",o)},n),e)},li:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("li",a({className:c("py-1",o)},n),e)},ul:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("ul",a({className:c("ml-4 list-outside list-disc",o)},n),e)},hr:n=>{var s=n,{node:t,className:e}=s,o=i(s,["node","className"]);return React.createElement("hr",a({className:c("my-6 border-border",e)},o))},strong:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("span",a({className:c("font-semibold",o)},n),e)},a:r=>{var l=r,{node:t,children:e,className:o,href:n}=l,s=i(l,["node","children","className","href"]);return React.createElement("a",a({className:c("font-medium text-primary underline",o),href:n,rel:"noreferrer",target:"_blank"},s),e)},h1:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h1",a({className:c("mt-6 mb-2 font-semibold text-3xl",o)},n),e)},h2:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h2",a({className:c("mt-6 mb-2 font-semibold text-2xl",o)},n),e)},h3:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h3",a({className:c("mt-6 mb-2 font-semibold text-xl",o)},n),e)},h4:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h4",a({className:c("mt-6 mb-2 font-semibold text-lg",o)},n),e)},h5:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h5",a({className:c("mt-6 mb-2 font-semibold text-base",o)},n),e)},h6:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h6",a({className:c("mt-6 mb-2 font-semibold text-sm",o)},n),e)},table:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("div",{className:"my-4 overflow-x-auto"},React.createElement("table",a({className:c("w-full border-collapse border border-border",o)},n),e))},thead:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("thead",a({className:c("bg-muted/50",o)},n),e)},tbody:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("tbody",a({className:c("divide-y divide-border",o)},n),e)},tr:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("tr",a({className:c("border-border border-b",o)},n),e)},th:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("th",a({className:c("px-4 py-2 text-left font-semibold text-sm",o)},n),e)},td:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("td",a({className:c("px-4 py-2 text-sm",o)},n),e)},blockquote:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("blockquote",a({className:c("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",o)},n),e)},code:n=>{var s=n,{node:t,className:e}=s,o=i(s,["node","className"]);var l,m;return((l=t==null?void 0:t.position)==null?void 0:l.start.line)===((m=t==null?void 0:t.position)==null?void 0:m.end.line)?React.createElement("code",a({className:c("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",e)},o)):React.createElement("code",a({className:e},o))},pre:({node:t,className:e,children:o})=>{var r;let n="javascript";typeof((r=t==null?void 0:t.properties)==null?void 0:r.className)=="string"&&(n=t.properties.className.replace("language-",""));let s="";return(0,K.isValidElement)(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?s=o.props.children:typeof o=="string"&&(s=o),React.createElement(A,{className:c("my-4 h-auto rounded-lg border p-4",e),code:s,language:n},React.createElement(H,null))},sup:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("sup",a({className:c("text-sm",o)},n),e)},sub:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("sub",a({className:c("text-sm",o)},n),e)}};var U=require("marked"),x=t=>U.marked.lexer(t).map(o=>o.raw);var E=/(!?\[)([^\]]*?)$/,tt=/(\*\*)([^*]*?)$/,et=/(__)([^_]*?)$/,ot=/(\*)([^*]*?)$/,nt=/(_)([^_]*?)$/,rt=/(`)([^`]*?)$/,st=/(~~)([^~]*?)$/,at=/(\$)([^$]*?)$/,it=/(\$\$)([^$]*?)$/,ct=t=>{let e=t.match(E);if(e){let o=t.lastIndexOf(e[1]);return t.substring(0,o)}return t},lt=t=>t.match(tt)&&(t.match(/\*\*/g)||[]).length%2===1?`${t}**`:t,mt=t=>t.match(et)&&(t.match(/__/g)||[]).length%2===1?`${t}__`:t,dt=t=>t.split("").reduce((e,o,n)=>{if(o==="*"){let s=t[n-1],r=t[n+1];if(s==="\\")return e;if(s!=="*"&&r!=="*")return e+1}return e},0),pt=t=>t.match(ot)&&dt(t)%2===1?`${t}*`:t,ut=t=>t.split("").reduce((e,o,n)=>{if(o==="_"){let s=t[n-1],r=t[n+1];if(s==="\\")return e;if(s!=="_"&&r!=="_")return e+1}return e},0),gt=t=>t.match(nt)&&ut(t)%2===1?`${t}_`:t,ht=(t,e)=>{let o=t.substring(e,e+3)==="```",n=e>0&&t.substring(e-1,e+2)==="```",s=e>1&&t.substring(e-2,e+1)==="```";return o||n||s},ft=t=>{let e=0;for(let o=0;o<t.length;o++)t[o]==="`"&&!ht(t,o)&&e++;return e},bt=t=>{let e=(t.match(/```/g)||[]).length,o=e%2===1;return e>0&&e%2===0?t:t.match(rt)&&!o&&ft(t)%2===1?`${t}\``:t},kt=t=>t.match(st)&&(t.match(/~~/g)||[]).length%2===1?`${t}~~`:t,yt=t=>t.split("").reduce((e,o,n)=>{if(o==="$"){let s=t[n-1],r=t[n+1];if(s==="\\")return e;if(s!=="$"&&r!=="$")return e+1}return e},0),Ct=t=>t.match(it)&&(t.match(/\$\$/g)||[]).length%2===1?`${t}$$`:t,Mt=t=>t.match(at)&&yt(t)%2===1?`${t}$`:t,D=t=>{if(!t||typeof t!="string")return t;let e=t;return e=ct(e),e=lt(e),e=mt(e),e=pt(e),e=gt(e),e=bt(e),e=kt(e),e=Ct(e),e=Mt(e),e};var Bt=(0,j.default)(O.default),It=(0,p.memo)(n=>{var s=n,{content:t,shouldParseIncompleteMarkdown:e}=s,o=i(s,["content","shouldParseIncompleteMarkdown"]);let r=(0,p.useMemo)(()=>typeof t=="string"&&e?D(t.trim()):t,[t,e]);return React.createElement(Bt,a({},o),r)},(t,e)=>t.content===e.content),z=(0,p.memo)(b=>{var k=b,{children:t,allowedImagePrefixes:e,allowedLinkPrefixes:o,defaultOrigin:n,parseIncompleteMarkdown:s=!0,components:r,rehypePlugins:l,remarkPlugins:m,className:g}=k,u=i(k,["children","allowedImagePrefixes","allowedLinkPrefixes","defaultOrigin","parseIncompleteMarkdown","components","rehypePlugins","remarkPlugins","className"]);let B=(0,p.useId)(),y=(0,p.useMemo)(()=>x(typeof t=="string"?t:""),[t]);return React.createElement("div",a({className:c("space-y-4",g)},u),y.map((I,G)=>React.createElement(It,{allowedImagePrefixes:e!=null?e:["*"],allowedLinkPrefixes:o!=null?o:["*"],components:a(a({},L),r),content:I,defaultOrigin:n,key:`${B}-block_${G}`,rehypePlugins:[q.default,...l!=null?l:[]],remarkPlugins:[R.default,V.default,...m!=null?m:[]],shouldParseIncompleteMarkdown:s})))},(t,e)=>t.children===e.children);z.displayName="Streamdown";0&&(module.exports={Streamdown});
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ComponentProps } from 'react';
|
|
3
|
+
import hardenReactMarkdown from 'harden-react-markdown';
|
|
4
|
+
|
|
5
|
+
declare const HardenedMarkdown: ReturnType<typeof hardenReactMarkdown>;
|
|
6
|
+
type StreamdownProps = ComponentProps<typeof HardenedMarkdown> & {
|
|
7
|
+
parseIncompleteMarkdown?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
declare const Streamdown: react.MemoExoticComponent<({ children, allowedImagePrefixes, allowedLinkPrefixes, defaultOrigin, parseIncompleteMarkdown: shouldParseIncompleteMarkdown, components, rehypePlugins, remarkPlugins, className, ...props }: StreamdownProps) => react.JSX.Element>;
|
|
11
|
+
|
|
12
|
+
export { Streamdown, type StreamdownProps };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ComponentProps } from 'react';
|
|
3
|
+
import hardenReactMarkdown from 'harden-react-markdown';
|
|
4
|
+
|
|
5
|
+
declare const HardenedMarkdown: ReturnType<typeof hardenReactMarkdown>;
|
|
6
|
+
type StreamdownProps = ComponentProps<typeof HardenedMarkdown> & {
|
|
7
|
+
parseIncompleteMarkdown?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
declare const Streamdown: react.MemoExoticComponent<({ children, allowedImagePrefixes, allowedLinkPrefixes, defaultOrigin, parseIncompleteMarkdown: shouldParseIncompleteMarkdown, components, rehypePlugins, remarkPlugins, className, ...props }: StreamdownProps) => react.JSX.Element>;
|
|
11
|
+
|
|
12
|
+
export { Streamdown, type StreamdownProps };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";var A=Object.defineProperty;var f=Object.getOwnPropertySymbols;var C=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var y=(t,e,o)=>e in t?A(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,a=(t,e)=>{for(var o in e||(e={}))C.call(e,o)&&y(t,o,e[o]);if(f)for(var o of f(e))M.call(e,o)&&y(t,o,e[o]);return t};var i=(t,e)=>{var o={};for(var n in t)C.call(t,n)&&e.indexOf(n)<0&&(o[n]=t[n]);if(t!=null&&f)for(var n of f(t))e.indexOf(n)<0&&M.call(t,n)&&(o[n]=t[n]);return o};import{memo as T,useId as ut,useMemo as _}from"react";import gt from"react-markdown";import ht from"rehype-katex";import ft from"remark-gfm";import bt from"remark-math";import"katex/dist/katex.min.css";import kt from"harden-react-markdown";import{isValidElement as V}from"react";import{CheckIcon as L,CopyIcon as U}from"lucide-react";import{createContext as x,useContext as D,useEffect as O,useState as B}from"react";import{codeToHtml as q}from"shiki";import{clsx as H}from"clsx";import{twMerge as K}from"tailwind-merge";var c=(...t)=>K(H(t));var I=x({code:""});async function R(t,e){return await q(t,{lang:e,theme:"github-light"})}var N=r=>{var l=r,{code:t,language:e,className:o,children:n}=l,s=i(l,["code","language","className","children"]);let[m,p]=B("");return O(()=>{let d=!0;return R(t,e).then(u=>{d&&p(u)}),()=>{d=!1}},[t,e]),React.createElement(I.Provider,{value:{code:t}},React.createElement("div",{className:"group relative"},React.createElement("div",a({className:c("overflow-x-auto",o),dangerouslySetInnerHTML:{__html:m}},s)),n))},$=l=>{var m=l,{onCopy:t,onError:e,timeout:o=2e3,children:n,className:s}=m,r=i(m,["onCopy","onError","timeout","children","className"]);let[p,d]=B(!1),{code:u}=D(I),g=async()=>{var h;if(typeof window=="undefined"||!((h=navigator==null?void 0:navigator.clipboard)!=null&&h.writeText)){e==null||e(new Error("Clipboard API not available"));return}try{await navigator.clipboard.writeText(u),d(!0),t==null||t(),setTimeout(()=>d(!1),o)}catch(k){e==null||e(k)}},b=p?L:U;return React.createElement("button",a({className:c("absolute top-2 right-2 shrink-0 rounded-md p-3 opacity-0 transition-all","hover:bg-secondary group-hover:opacity-100",s),onClick:g,type:"button"},r),n!=null?n:React.createElement(b,{size:14}))};var v={ol:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("ol",a({className:c("ml-4 list-outside list-decimal",o)},n),e)},li:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("li",a({className:c("py-1",o)},n),e)},ul:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("ul",a({className:c("ml-4 list-outside list-disc",o)},n),e)},hr:n=>{var s=n,{node:t,className:e}=s,o=i(s,["node","className"]);return React.createElement("hr",a({className:c("my-6 border-border",e)},o))},strong:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("span",a({className:c("font-semibold",o)},n),e)},a:r=>{var l=r,{node:t,children:e,className:o,href:n}=l,s=i(l,["node","children","className","href"]);return React.createElement("a",a({className:c("font-medium text-primary underline",o),href:n,rel:"noreferrer",target:"_blank"},s),e)},h1:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h1",a({className:c("mt-6 mb-2 font-semibold text-3xl",o)},n),e)},h2:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h2",a({className:c("mt-6 mb-2 font-semibold text-2xl",o)},n),e)},h3:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h3",a({className:c("mt-6 mb-2 font-semibold text-xl",o)},n),e)},h4:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h4",a({className:c("mt-6 mb-2 font-semibold text-lg",o)},n),e)},h5:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h5",a({className:c("mt-6 mb-2 font-semibold text-base",o)},n),e)},h6:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("h6",a({className:c("mt-6 mb-2 font-semibold text-sm",o)},n),e)},table:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("div",{className:"my-4 overflow-x-auto"},React.createElement("table",a({className:c("w-full border-collapse border border-border",o)},n),e))},thead:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("thead",a({className:c("bg-muted/50",o)},n),e)},tbody:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("tbody",a({className:c("divide-y divide-border",o)},n),e)},tr:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("tr",a({className:c("border-border border-b",o)},n),e)},th:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("th",a({className:c("px-4 py-2 text-left font-semibold text-sm",o)},n),e)},td:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("td",a({className:c("px-4 py-2 text-sm",o)},n),e)},blockquote:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("blockquote",a({className:c("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",o)},n),e)},code:n=>{var s=n,{node:t,className:e}=s,o=i(s,["node","className"]);var l,m;return((l=t==null?void 0:t.position)==null?void 0:l.start.line)===((m=t==null?void 0:t.position)==null?void 0:m.end.line)?React.createElement("code",a({className:c("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",e)},o)):React.createElement("code",a({className:e},o))},pre:({node:t,className:e,children:o})=>{var r;let n="javascript";typeof((r=t==null?void 0:t.properties)==null?void 0:r.className)=="string"&&(n=t.properties.className.replace("language-",""));let s="";return V(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?s=o.props.children:typeof o=="string"&&(s=o),React.createElement(N,{className:c("my-4 h-auto rounded-lg border p-4",e),code:s,language:n},React.createElement($,null))},sup:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("sup",a({className:c("text-sm",o)},n),e)},sub:s=>{var r=s,{node:t,children:e,className:o}=r,n=i(r,["node","children","className"]);return React.createElement("sub",a({className:c("text-sm",o)},n),e)}};import{marked as j}from"marked";var w=t=>j.lexer(t).map(o=>o.raw);var z=/(!?\[)([^\]]*?)$/,G=/(\*\*)([^*]*?)$/,F=/(__)([^_]*?)$/,J=/(\*)([^*]*?)$/,Q=/(_)([^_]*?)$/,W=/(`)([^`]*?)$/,X=/(~~)([^~]*?)$/,Y=/(\$)([^$]*?)$/,Z=/(\$\$)([^$]*?)$/,E=t=>{let e=t.match(z);if(e){let o=t.lastIndexOf(e[1]);return t.substring(0,o)}return t},tt=t=>t.match(G)&&(t.match(/\*\*/g)||[]).length%2===1?`${t}**`:t,et=t=>t.match(F)&&(t.match(/__/g)||[]).length%2===1?`${t}__`:t,ot=t=>t.split("").reduce((e,o,n)=>{if(o==="*"){let s=t[n-1],r=t[n+1];if(s==="\\")return e;if(s!=="*"&&r!=="*")return e+1}return e},0),nt=t=>t.match(J)&&ot(t)%2===1?`${t}*`:t,rt=t=>t.split("").reduce((e,o,n)=>{if(o==="_"){let s=t[n-1],r=t[n+1];if(s==="\\")return e;if(s!=="_"&&r!=="_")return e+1}return e},0),st=t=>t.match(Q)&&rt(t)%2===1?`${t}_`:t,at=(t,e)=>{let o=t.substring(e,e+3)==="```",n=e>0&&t.substring(e-1,e+2)==="```",s=e>1&&t.substring(e-2,e+1)==="```";return o||n||s},it=t=>{let e=0;for(let o=0;o<t.length;o++)t[o]==="`"&&!at(t,o)&&e++;return e},ct=t=>{let e=(t.match(/```/g)||[]).length,o=e%2===1;return e>0&&e%2===0?t:t.match(W)&&!o&&it(t)%2===1?`${t}\``:t},lt=t=>t.match(X)&&(t.match(/~~/g)||[]).length%2===1?`${t}~~`:t,mt=t=>t.split("").reduce((e,o,n)=>{if(o==="$"){let s=t[n-1],r=t[n+1];if(s==="\\")return e;if(s!=="$"&&r!=="$")return e+1}return e},0),dt=t=>t.match(Z)&&(t.match(/\$\$/g)||[]).length%2===1?`${t}$$`:t,pt=t=>t.match(Y)&&mt(t)%2===1?`${t}$`:t,P=t=>{if(!t||typeof t!="string")return t;let e=t;return e=E(e),e=tt(e),e=et(e),e=nt(e),e=st(e),e=ct(e),e=lt(e),e=dt(e),e=pt(e),e};var yt=kt(gt),Ct=T(n=>{var s=n,{content:t,shouldParseIncompleteMarkdown:e}=s,o=i(s,["content","shouldParseIncompleteMarkdown"]);let r=_(()=>typeof t=="string"&&e?P(t.trim()):t,[t,e]);return React.createElement(yt,a({},o),r)},(t,e)=>t.content===e.content),Mt=T(u=>{var g=u,{children:t,allowedImagePrefixes:e,allowedLinkPrefixes:o,defaultOrigin:n,parseIncompleteMarkdown:s=!0,components:r,rehypePlugins:l,remarkPlugins:m,className:p}=g,d=i(g,["children","allowedImagePrefixes","allowedLinkPrefixes","defaultOrigin","parseIncompleteMarkdown","components","rehypePlugins","remarkPlugins","className"]);let b=ut(),h=_(()=>w(typeof t=="string"?t:""),[t]);return React.createElement("div",a({className:c("space-y-4",p)},d),h.map((k,S)=>React.createElement(Ct,{allowedImagePrefixes:e!=null?e:["*"],allowedLinkPrefixes:o!=null?o:["*"],components:a(a({},v),r),content:k,defaultOrigin:n,key:`${b}-block_${S}`,rehypePlugins:[ht,...l!=null?l:[]],remarkPlugins:[ft,bt,...m!=null?m:[]],shouldParseIncompleteMarkdown:s})))},(t,e)=>t.children===e.children);Mt.displayName="Streamdown";export{Mt as Streamdown};
|
package/package.json
CHANGED
|
@@ -1,11 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "streamdown",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.cjs"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
5
18
|
"scripts": {
|
|
6
|
-
"
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"test:ui": "vitest --ui run",
|
|
22
|
+
"test:coverage": "vitest --coverage run"
|
|
7
23
|
},
|
|
8
24
|
"author": "Hayden Bleasel <hayden.bleasel@vercel.com>",
|
|
9
|
-
"license": "
|
|
10
|
-
"description": ""
|
|
25
|
+
"license": "Apache-2.0",
|
|
26
|
+
"description": "A drop-in replacement for react-markdown, designed for AI-powered streaming.",
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
29
|
+
"@testing-library/react": "^16.1.0",
|
|
30
|
+
"@types/react": "^19.1.10",
|
|
31
|
+
"@types/react-dom": "^19.1.7",
|
|
32
|
+
"@vitejs/plugin-react": "^5.0.0",
|
|
33
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
34
|
+
"jsdom": "^25.0.1",
|
|
35
|
+
"react": "^19.1.1",
|
|
36
|
+
"react-dom": "^19.1.1",
|
|
37
|
+
"tsup": "^8.5.0",
|
|
38
|
+
"vitest": "^3.2.4"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"react": "^19.1.1"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"clsx": "^2.1.1",
|
|
45
|
+
"harden-react-markdown": "^1.0.4",
|
|
46
|
+
"katex": "^0.16.22",
|
|
47
|
+
"lucide-react": "^0.539.0",
|
|
48
|
+
"marked": "^16.1.2",
|
|
49
|
+
"react-markdown": "^10.1.0",
|
|
50
|
+
"rehype-katex": "^7.0.1",
|
|
51
|
+
"remark-gfm": "^4.0.1",
|
|
52
|
+
"remark-math": "^6.0.0",
|
|
53
|
+
"shiki": "^3.9.2",
|
|
54
|
+
"tailwind-merge": "^3.3.1"
|
|
55
|
+
}
|
|
11
56
|
}
|