markstream-react 0.0.19 → 0.0.20-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@ pnpm --filter markstream-react build
17
17
  ## Usage
18
18
 
19
19
  ```tsx
20
- import { NodeRenderer } from 'markstream-react'
20
+ import NodeRenderer from 'markstream-react'
21
21
  import 'markstream-react/index.css'
22
22
 
23
23
  export default function Article({ markdown }: { markdown: string }) {
@@ -36,11 +36,11 @@ You can also pass a pre-parsed `nodes` array if you already have AST data.
36
36
 
37
37
  ## Custom components (e.g. `<thinking>`)
38
38
 
39
- Custom tag-like blocks are exposed as nodes with `type: '<tag>'` (for example `type: 'thinking'`) when you register the tag in `customHtmlTags` or register a custom component mapping for it.
39
+ Custom tag-like blocks are exposed as nodes with `type: 'thinking'` (the tag name, no angle brackets) when you register the tag in `customHtmlTags` or register a custom component mapping for it.
40
40
 
41
41
  ```tsx
42
42
  import type { NodeComponentProps } from 'markstream-react'
43
- import { NodeRenderer, setCustomComponents } from 'markstream-react'
43
+ import NodeRenderer, { setCustomComponents } from 'markstream-react'
44
44
 
45
45
  function ThinkingNode(props: NodeComponentProps<{ type: 'thinking', content: string }>) {
46
46
  const { node, ctx } = props
package/dist/index.d.ts CHANGED
@@ -53,6 +53,7 @@ interface RenderContext {
53
53
  isDark?: boolean;
54
54
  indexKey?: string;
55
55
  typewriter?: boolean;
56
+ customComponents?: Record<string, React.ComponentType<any>>;
56
57
  codeBlockProps?: Record<string, any>;
57
58
  codeBlockStream?: boolean;
58
59
  renderCodeBlocksAsPre?: boolean;
package/dist/index.js CHANGED
@@ -94,10 +94,10 @@ return e("ins",{className:"insert-node",children:t.children})}function Bt(t){var
94
94
  /* @__PURE__ */e("span",{className:"underline-anim","aria-hidden":"true"})]})}):/* @__PURE__ */e("a",{className:"link-node",href:s.href,title:p?"":w,"aria-label":`Link: ${w}`,target:"_blank",rel:"noopener noreferrer",style:f,onMouseEnter:v,onMouseLeave:y,children:u&&m?C(s.children,u,String(null!=h?h:"link"),m):null!=(c=s.text)?c:null})}function Lt(t){const{node:n,ctx:r,renderNode:o,value:i,indexKey:l,children:a}=t;/* @__PURE__ */
95
95
  return e("li",{className:"list-item pl-1.5 my-2",dir:"auto",value:null==i?void 0:i,children:null!=a?a:r&&o?C(n.children,r,String(null!=l?l:"list-item"),o):null})}function St(t){var n;const{node:r,ctx:o,renderNode:i,indexKey:l}=t,a=r.ordered?"ol":"ul",c=r.ordered&&r.start?r.start:void 0,s=o&&I(o.customId).list_item||Lt;/* @__PURE__ */
96
96
  return e(a,{className:ze("list-node my-5 pl-[calc(13/8*1em)]",r.ordered?"list-decimal":"list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)]"),start:c,children:null==(n=r.items)?void 0:n.map((t,n)=>{var a;/* @__PURE__ */
97
- return e(s,{node:t,value:r.ordered?(null!=(a=r.start)?a:1)+n:void 0,ctx:o,renderNode:i,indexKey:`${String(null!=l?l:"list")}-${n}`,customId:null==o?void 0:o.customId,isDark:null==o?void 0:o.isDark,typewriter:null==o?void 0:o.typewriter},`${String(null!=l?l:"list")}-${n}`)})})}let Tt=null,Et=null,$t=!1;const Dt=/* @__PURE__ */new Map,_t=/* @__PURE__ */new Map;let jt=5;const Wt=/* @__PURE__ */new Set;function Pt(){if(Dt.size<jt&&Wt.size){const e=Array.from(Wt);Wt.clear();for(const t of e)try{t()}catch{}}}function At(e){Tt=e,Et=null,Tt.onmessage=e=>{const{id:t,html:n,error:r}=e.data,o=Dt.get(t);if(o)if(Dt.delete(t),clearTimeout(o.timeoutId),Pt(),r)o.reject(new Error(r));else{const{content:t,displayMode:r}=e.data;if(t){const e=`${r?"d":"i"}:${t}`;if(_t.set(e,n),_t.size>200){const e=_t.keys().next().value;_t.delete(e)}}o.resolve(n)}},Tt.onerror=e=>{console.error("[katexWorkerClient] Worker error:",e);for(const[t,n]of Dt.entries())clearTimeout(n.timeoutId),n.reject(new Error(`Worker error: ${e.message}`));Dt.clear(),Pt()}}function Ot(){var e;Tt&&(null==(e=Tt.terminate)||e.call(Tt)),Tt=null,Et=null}function It(e){$t=!!e,Tt&&Tt.postMessage({type:"init",debug:$t})}const Rt="WORKER_BUSY";async function Ht(e,t=!0,n=2e3,r){if(performance.now(),Et)return Promise.reject(Et);const o=`${t?"d":"i"}:${e}`,i=_t.get(o);if(i)return Promise.resolve(i);const l=Tt||(Et=new Error("[katexWorkerClient] No worker instance set. Please inject a Worker via setKaTeXWorker()."),Et.name="WORKER_INIT_ERROR",Et.code="WORKER_INIT_ERROR",null);if(!l)return Promise.reject(Et);if(Dt.size>=jt){const e=new Error("Worker busy");return e.name="WorkerBusy",e.code=Rt,e.busy=!0,e.inFlight=Dt.size,e.max=jt,Promise.reject(e)}return new Promise((o,i)=>{if(null==r?void 0:r.aborted){const e=new Error("Aborted");return e.name="AbortError",void i(e)}const a=Math.random().toString(36).slice(2),c=setTimeout(()=>{Dt.delete(a);const e=new Error("Worker render timed out");e.name="WorkerTimeout",e.code="WORKER_TIMEOUT",i(e),Pt()},n),s=()=>{},d=()=>{Dt.delete(a),clearTimeout(c),Wt.delete(s);const e=new Error("Aborted");e.name="AbortError",i(e),Pt()};r&&r.addEventListener("abort",d,{once:!0}),Dt.set(a,{resolve:e=>{r&&r.removeEventListener("abort",d),o(e)},reject:e=>{r&&r.removeEventListener("abort",d),i(e)},timeoutId:c});try{l.postMessage({id:a,content:e,displayMode:t,debug:$t})}catch(u){Dt.delete(a),clearTimeout(c),r&&r.removeEventListener("abort",d),i(u),Pt()}})}function zt(e,t,n){const r=`${t?"d":"i"}:${e}`;if(_t.set(r,n),_t.size>200){const e=_t.keys().next().value;_t.delete(e)}}function Ft(){_t.clear()}function Vt(e){jt=Math.max(1,Math.floor(e)),Pt()}function Kt(e=1500,t){return Dt.size<jt?Promise.resolve():new Promise((n,r)=>{if(null==t?void 0:t.aborted){const e=new Error("Aborted");return e.name="AbortError",void r(e)}let o=null;function i(){Wt.delete(l),null!=o&&clearTimeout(o),t&&t.removeEventListener("abort",a)}function l(){i(),n()}function a(){i();const e=new Error("Aborted");e.name="AbortError",r(e)}o=e>0?setTimeout(()=>{i(),r(new Error("Timeout waiting for worker slot"))},e):null,t&&t.addEventListener("abort",a,{once:!0}),Wt.add(l)})}const Xt={timeout:2e3,waitTimeout:1500,backoffMs:30,maxRetries:1};function qt(e){null!=e.timeout&&(Xt.timeout=Math.max(0,Math.floor(e.timeout))),null!=e.waitTimeout&&(Xt.waitTimeout=Math.max(0,Math.floor(e.waitTimeout))),null!=e.backoffMs&&(Xt.backoffMs=Math.max(0,Math.floor(e.backoffMs))),null!=e.maxRetries&&(Xt.maxRetries=Math.max(0,Math.floor(e.maxRetries)))}function Ut(){return{...Xt}}async function Zt(e,t=!0,n={}){var r,o,i,l;const a=null!=(r=n.timeout)?r:Xt.timeout,c=null!=(o=n.waitTimeout)?o:Xt.waitTimeout,s=null!=(i=n.backoffMs)?i:Xt.backoffMs,d=null!=(l=n.maxRetries)?l:Xt.maxRetries,u=n.signal;let m=0;for(;;){if(null==u?void 0:u.aborted){const e=new Error("Aborted");throw e.name="AbortError",e}try{return await Ht(e,t,a,u)}catch(h){if((null==h?void 0:h.code)!==Rt||m>=d)throw h;if(m++,await Kt(c,u).catch(()=>{}),null==u?void 0:u.aborted){const e=new Error("Aborted");throw e.name="AbortError",e}s>0&&await new Promise(e=>setTimeout(e,s*m))}}}let Yt=null,Gt=!1;async function Jt(){if(Yt)return Yt;if(Gt)return null;try{return Yt=await import("katex"),await import("katex/contrib/mhchem"),Yt}catch{return Gt=!0,null}}function Qt({node:t}){const n=c(null),[r,o]=i(!0),l=c(0);return s(()=>{var e;let r=!1;const i=new AbortController,a=++l.current,c=null!=(e=t.content)?e:"";return c?(Zt(c,!0,{timeout:3e3,waitTimeout:2e3,maxRetries:1,signal:i.signal}).then(e=>{r||a!==l.current||(n.current&&(n.current.innerHTML=e),o(!1))}).catch(async e=>{if(r||a!==l.current)return;if(!n.current)return;const i=(null==e?void 0:e.code)||(null==e?void 0:e.name);if("WORKER_INIT_ERROR"===i||(null==e?void 0:e.fallbackToRenderer)||i===Rt||"WORKER_TIMEOUT"===i){const e=await Jt();if(e)try{const i=e.renderToString(c,{throwOnError:t.loading,displayMode:!0});return void(!r&&a===l.current&&n.current&&(n.current.innerHTML=i,o(!1),zt(c,!0,i)))}catch{}}t.loading||(n.current.textContent=t.raw,o(!1))}),()=>{r=!0,i.abort()}):(o(!1),()=>i.abort())},[t.content,t.loading,t.raw]),/* @__PURE__ */e("div",{className:"math-block text-center overflow-x-auto relative min-h-[40px]",children:/* @__PURE__ */e("div",{ref:n,className:r?"math-rendering":void 0})})}function en({node:t}){const r=c(null),o=c(null),[l,a]=i(!0),d=c(0);return s(()=>{var e;let n=!1;const r=new AbortController,i=++d.current,l=null!=(e=t.content)?e:"";if(!l)return a(!1),()=>r.abort();const c="$$"===t.markup;return Zt(l,c,{timeout:1500,waitTimeout:0,maxRetries:0,signal:r.signal}).then(e=>{n||i!==d.current||o.current&&(o.current.innerHTML=e,a(!1))}).catch(async e=>{if(n||i!==d.current)return;if(!o.current)return;const r=(null==e?void 0:e.code)||(null==e?void 0:e.name);if("WORKER_INIT_ERROR"===r||(null==e?void 0:e.fallbackToRenderer)||r===Rt||"WORKER_TIMEOUT"===r){const e=await Jt();if(e)try{const r=e.renderToString(l,{throwOnError:t.loading,displayMode:c});return void(!n&&i===d.current&&o.current&&(o.current.innerHTML=r,a(!1),zt(l,c,r)))}catch{}}t.loading||(o.current.textContent=t.raw,a(!1))}),()=>{n=!0,r.abort()}},[t.content,t.loading,t.raw,t.markup]),/* @__PURE__ */n("span",{ref:r,className:"math-inline-wrapper",children:[
97
+ return e(s,{node:t,value:r.ordered?(null!=(a=r.start)?a:1)+n:void 0,ctx:o,renderNode:i,indexKey:`${String(null!=l?l:"list")}-${n}`,customId:null==o?void 0:o.customId,isDark:null==o?void 0:o.isDark,typewriter:null==o?void 0:o.typewriter},`${String(null!=l?l:"list")}-${n}`)})})}let Tt=null,Et=null,$t=!1;const Dt=/* @__PURE__ */new Map,_t=/* @__PURE__ */new Map;let jt=5;const Wt=/* @__PURE__ */new Set;function Pt(){if(Dt.size<jt&&Wt.size){const e=Array.from(Wt);Wt.clear();for(const t of e)try{t()}catch{}}}function At(e){Tt=e,Et=null,Tt.onmessage=e=>{const{id:t,html:n,error:r}=e.data,o=Dt.get(t);if(o)if(Dt.delete(t),clearTimeout(o.timeoutId),Pt(),r)o.reject(new Error(r));else{const{content:t,displayMode:r}=e.data;if(t){const e=`${r?"d":"i"}:${t}`;if(_t.set(e,n),_t.size>200){const e=_t.keys().next().value;_t.delete(e)}}o.resolve(n)}},Tt.onerror=e=>{console.error("[katexWorkerClient] Worker error:",e);for(const[t,n]of Dt.entries())clearTimeout(n.timeoutId),n.reject(new Error(`Worker error: ${e.message}`));Dt.clear(),Pt()}}function Ot(){var e;Tt&&(null==(e=Tt.terminate)||e.call(Tt)),Tt=null,Et=null}function It(e){$t=!!e,Tt&&Tt.postMessage({type:"init",debug:$t})}const Rt="WORKER_BUSY";async function Ht(e,t=!0,n=2e3,r){if(performance.now(),Et)return Promise.reject(Et);const o=`${t?"d":"i"}:${e}`,i=_t.get(o);if(i)return Promise.resolve(i);const l=Tt||(Et=new Error("[katexWorkerClient] No worker instance set. Please inject a Worker via setKaTeXWorker()."),Et.name="WORKER_INIT_ERROR",Et.code="WORKER_INIT_ERROR",null);if(!l)return Promise.reject(Et);if(Dt.size>=jt){const e=new Error("Worker busy");return e.name="WorkerBusy",e.code=Rt,e.busy=!0,e.inFlight=Dt.size,e.max=jt,Promise.reject(e)}return new Promise((o,i)=>{if(null==r?void 0:r.aborted){const e=new Error("Aborted");return e.name="AbortError",void i(e)}const a=Math.random().toString(36).slice(2),c=setTimeout(()=>{Dt.delete(a);const e=new Error("Worker render timed out");e.name="WorkerTimeout",e.code="WORKER_TIMEOUT",i(e),Pt()},n),s=()=>{},d=()=>{Dt.delete(a),clearTimeout(c),Wt.delete(s);const e=new Error("Aborted");e.name="AbortError",i(e),Pt()};r&&r.addEventListener("abort",d,{once:!0}),Dt.set(a,{resolve:e=>{r&&r.removeEventListener("abort",d),o(e)},reject:e=>{r&&r.removeEventListener("abort",d),i(e)},timeoutId:c});try{l.postMessage({id:a,content:e,displayMode:t,debug:$t})}catch(u){Dt.delete(a),clearTimeout(c),r&&r.removeEventListener("abort",d),i(u),Pt()}})}function zt(e,t,n){const r=`${t?"d":"i"}:${e}`;if(_t.set(r,n),_t.size>200){const e=_t.keys().next().value;_t.delete(e)}}function Ft(){_t.clear()}function Vt(e){jt=Math.max(1,Math.floor(e)),Pt()}function Kt(e=1500,t){return Dt.size<jt?Promise.resolve():new Promise((n,r)=>{if(null==t?void 0:t.aborted){const e=new Error("Aborted");return e.name="AbortError",void r(e)}let o=null;function i(){Wt.delete(l),null!=o&&clearTimeout(o),t&&t.removeEventListener("abort",a)}function l(){i(),n()}function a(){i();const e=new Error("Aborted");e.name="AbortError",r(e)}o=e>0?setTimeout(()=>{i(),r(new Error("Timeout waiting for worker slot"))},e):null,t&&t.addEventListener("abort",a,{once:!0}),Wt.add(l)})}const Xt={timeout:2e3,waitTimeout:1500,backoffMs:30,maxRetries:1};function qt(e){null!=e.timeout&&(Xt.timeout=Math.max(0,Math.floor(e.timeout))),null!=e.waitTimeout&&(Xt.waitTimeout=Math.max(0,Math.floor(e.waitTimeout))),null!=e.backoffMs&&(Xt.backoffMs=Math.max(0,Math.floor(e.backoffMs))),null!=e.maxRetries&&(Xt.maxRetries=Math.max(0,Math.floor(e.maxRetries)))}function Ut(){return{...Xt}}async function Zt(e,t=!0,n={}){var r,o,i,l;const a=null!=(r=n.timeout)?r:Xt.timeout,c=null!=(o=n.waitTimeout)?o:Xt.waitTimeout,s=null!=(i=n.backoffMs)?i:Xt.backoffMs,d=null!=(l=n.maxRetries)?l:Xt.maxRetries,u=Number.isFinite(d)?Math.max(0,Math.min(Math.floor(d),8)):Xt.maxRetries,m=n.signal;let h=0;for(;;){if(null==m?void 0:m.aborted){const e=new Error("Aborted");throw e.name="AbortError",e}try{return await Ht(e,t,a,m)}catch(p){if((null==p?void 0:p.code)!==Rt||h>=u)throw p;if(h++,await Kt(c,m).catch(()=>{}),null==m?void 0:m.aborted){const e=new Error("Aborted");throw e.name="AbortError",e}s>0&&await new Promise(e=>setTimeout(e,s*h))}}}let Yt=null,Gt=!1;async function Jt(){if(Yt)return Yt;if(Gt)return null;try{return Yt=await import("katex"),await import("katex/contrib/mhchem"),Yt}catch{return Gt=!0,null}}function Qt({node:t}){const n=c(null),[r,o]=i(!0),l=c(0);return s(()=>{var e;let r=!1;const i=new AbortController,a=++l.current,c=null!=(e=t.content)?e:"";return c?(Zt(c,!0,{timeout:3e3,waitTimeout:2e3,maxRetries:1,signal:i.signal}).then(e=>{r||a!==l.current||(n.current&&(n.current.innerHTML=e),o(!1))}).catch(async e=>{if(r||a!==l.current)return;if(!n.current)return;const i=(null==e?void 0:e.code)||(null==e?void 0:e.name);if("WORKER_INIT_ERROR"===i||(null==e?void 0:e.fallbackToRenderer)||i===Rt||"WORKER_TIMEOUT"===i){const e=await Jt();if(e)try{const i=e.renderToString(c,{throwOnError:t.loading,displayMode:!0});return void(!r&&a===l.current&&n.current&&(n.current.innerHTML=i,o(!1),zt(c,!0,i)))}catch{}}t.loading||(n.current.textContent=t.raw,o(!1))}),()=>{r=!0,i.abort()}):(o(!1),()=>i.abort())},[t.content,t.loading,t.raw]),/* @__PURE__ */e("div",{className:"math-block text-center overflow-x-auto relative min-h-[40px]",children:/* @__PURE__ */e("div",{ref:n,className:r?"math-rendering":void 0})})}function en({node:t}){const r=c(null),o=c(null),[l,a]=i(!0),d=c(0);return s(()=>{var e;let n=!1;const r=new AbortController,i=++d.current,l=null!=(e=t.content)?e:"";if(!l)return a(!1),()=>r.abort();const c="$$"===t.markup;return Zt(l,c,{timeout:1500,waitTimeout:0,maxRetries:0,signal:r.signal}).then(e=>{n||i!==d.current||o.current&&(o.current.innerHTML=e,a(!1))}).catch(async e=>{if(n||i!==d.current)return;if(!o.current)return;const r=(null==e?void 0:e.code)||(null==e?void 0:e.name);if("WORKER_INIT_ERROR"===r||(null==e?void 0:e.fallbackToRenderer)||r===Rt||"WORKER_TIMEOUT"===r){const e=await Jt();if(e)try{const r=e.renderToString(l,{throwOnError:t.loading,displayMode:c});return void(!n&&i===d.current&&o.current&&(o.current.innerHTML=r,a(!1),zt(l,c,r)))}catch{}}t.loading||(o.current.textContent=t.raw,a(!1))}),()=>{n=!0,r.abort()}},[t.content,t.loading,t.raw,t.markup]),/* @__PURE__ */n("span",{ref:r,className:"math-inline-wrapper",children:[
98
98
  /* @__PURE__ */e("span",{ref:o,className:"math-inline"+(l?" math-inline--hidden":"")}),l&&/* @__PURE__ */n("span",{className:"math-inline__loading",role:"status","aria-live":"polite",children:[
99
99
  /* @__PURE__ */e("span",{className:"math-inline__spinner","aria-hidden":"true"}),
100
- /* @__PURE__ */e("span",{className:"sr-only",children:"Loading"})]})]})}let tn=null,nn=null;const rn=/* @__PURE__ */new Map;let on=5,ln=!1;function an(e){ln=!!e}function cn(e){Number.isFinite(e)&&e>0&&(on=Math.floor(e))}function sn(){return{inFlight:rn.size,max:on}}const dn="WORKER_BUSY";function un(e){tn=e,nn=null;const t=e;tn.onmessage=e=>{if(tn!==t)return;const{id:n,ok:r,result:o,error:i}=e.data,l=rn.get(n);l&&(!1===r||i?l.reject(new Error(i||"Unknown error")):l.resolve(o))},tn.onerror=e=>{var n,r;if(tn===t)if(0!==rn.size){try{ln?console.error("[mermaidWorkerClient] Worker error:",(null==e?void 0:e.message)||e):null==(r=console.debug)||r.call(console,"[mermaidWorkerClient] Worker error:",(null==e?void 0:e.message)||e)}catch{}for(const[t,n]of rn.entries())n.reject(new Error(`Worker error: ${e.message}`));rn.clear()}else null==(n=console.debug)||n.call(console,"[mermaidWorkerClient] Worker error (no pending):",(null==e?void 0:e.message)||e)},tn.onmessageerror=e=>{var n,r;if(tn===t)if(0!==rn.size){try{ln?console.error("[mermaidWorkerClient] Worker messageerror:",e):null==(r=console.debug)||r.call(console,"[mermaidWorkerClient] Worker messageerror:",e)}catch{}for(const[e,t]of rn.entries())t.reject(new Error("Worker messageerror"));rn.clear()}else null==(n=console.debug)||n.call(console,"[mermaidWorkerClient] Worker messageerror (no pending):",e)}}function mn(){var e;if(tn)try{for(const[e,t]of rn.entries())t.reject(new Error("Worker cleared"));rn.clear(),null==(e=tn.terminate)||e.call(tn)}catch{}tn=null,nn=null}function hn(e,t,n=1400){if(nn)return Promise.reject(nn);const r=tn||(nn=new Error("[mermaidWorkerClient] No worker instance set. Please inject a Worker via setMermaidWorker()."),nn.name="WORKER_INIT_ERROR",nn.code="WORKER_INIT_ERROR",null);if(!r)return Promise.reject(nn);if(rn.size>=on){const e=new Error("Worker busy");return e.name="WorkerBusy",e.code=dn,e.inFlight=rn.size,e.max=on,Promise.reject(e)}return new Promise((o,i)=>{const l=Math.random().toString(36).slice(2);let a=!1,c=null;const s=()=>{a||(a=!0,null!=c&&clearTimeout(c),rn.delete(l))},d={resolve:e=>{s(),o(e)},reject:e=>{s(),i(e)}};rn.set(l,d);try{r.postMessage({id:l,action:e,payload:t})}catch(u){return rn.delete(l),void i(u)}c=setTimeout(()=>{const e=new Error("Worker call timed out");e.name="WorkerTimeout",e.code="WORKER_TIMEOUT";const t=rn.get(l);null==t||t.reject(e)},n)})}async function pn(e,t,n=1400){return hn("canParse",{code:e,theme:t},n)}async function gn(e,t,n=2400){return hn("findPrefix",{code:e,theme:t},n)}function fn(){var e;null==(e=null==tn?void 0:tn.terminate)||e.call(tn),tn=null,nn=null,rn.clear()}let wn=null,vn=!1,yn=null,xn=null;function kn(e,t){var n;if(!e||!t)return;const r=function(e){var t,n;return`${String(null!=(t=null==e?void 0:e.securityLevel)?t:"loose")}|htmlLabels:${!1===(null==(n=null==e?void 0:e.flowchart)?void 0:n.htmlLabels)?"0":"1"}`}(t);if(yn!==r)try{"function"==typeof e.initialize?e.initialize(t):(null==(n=e.mermaidAPI)?void 0:n.initialize)&&e.mermaidAPI.initialize(t),yn=r}catch{}}const bn="undefined"!=typeof window?m:s,Cn={USE_PROFILES:{svg:!0},FORBID_TAGS:["script"],FORBID_ATTR:[/^on/i],ADD_TAGS:["style"],ADD_ATTR:["style"],SAFE_FOR_TEMPLATES:!0},Mn=[/javascript:/i,/expression\s*\(/i,/url\s*\(\s*javascript:/i,/@import/i],Nn=/^(?:https?:|mailto:|tel:|#|\/|data:image\/(?:png|gif|jpe?g|webp);)/i;function Bn(e){if(!e)return"";const t=e.trim();return Nn.test(t)?t:""}function Ln(e){if(e)try{e.replaceChildren()}catch{e.innerHTML=""}}function Sn(e,t,n){if(!e)return"";if(n)return function(e,t){if(!e)return"";Ln(e);const n=function(e){if("undefined"==typeof window||"undefined"==typeof DOMParser)return null;if(!e)return null;const t=e.replace(/["']\s*javascript:/gi,"#").replace(/\bjavascript:/gi,"#").replace(/["']\s*vbscript:/gi,"#").replace(/\bvbscript:/gi,"#").replace(/\bdata:text\/html/gi,"#"),n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;if(!n||"svg"!==n.nodeName.toLowerCase())return null;const r=n;return function(e){const t=/* @__PURE__ */new Set(["script"]),n=[e,...Array.from(e.querySelectorAll("*"))];for(const r of n){if(t.has(r.tagName.toLowerCase())){r.remove();continue}const e=Array.from(r.attributes);for(const t of e){const e=t.name;if(/^on/i.test(e))r.removeAttribute(e);else{if("style"===e&&t.value){const n=t.value;if(Mn.some(e=>e.test(n))){r.removeAttribute(e);continue}}if(("href"===e||"xlink:href"===e)&&t.value){const n=Bn(t.value);if(!n){r.removeAttribute(e);continue}n!==t.value&&r.setAttribute(e,n)}}}}}(r),r}(t);return n?(e.appendChild(n),e.innerHTML):""}(e,t);if(Ln(e),t)try{e.insertAdjacentHTML("afterbegin",t)}catch{e.innerHTML=t}return e.innerHTML}const Tn={maxHeight:"500px",loading:!0,workerTimeoutMs:1400,parseTimeoutMs:1800,renderTimeoutMs:2500,fullRenderTimeoutMs:4e3,showHeader:!0,showModeToggle:!0,showCopyButton:!0,showExportButton:!0,showFullscreenButton:!0,showCollapseButton:!0,showZoomControls:!0,enableWheelZoom:!1,isStrict:!1};function En(r){var l,a,u,m,h,p,g,f,w;const v={...Tn,...r},{t:y}=K(),k=o(()=>ae("mermaid"),[]),b=null!=(a=null==(l=v.node)?void 0:l.code)?a:"",C=o(()=>b.replace(/\]::([^:])/g,"]:::$1").replace(/:::subgraphNode$/gm,"::subgraphNode"),[b]),M=null!=(u=v.workerTimeoutMs)?u:Tn.workerTimeoutMs,N=null!=(m=v.parseTimeoutMs)?m:Tn.parseTimeoutMs,B=null!=(h=v.renderTimeoutMs)?h:Tn.renderTimeoutMs,L=null!=(p=v.fullRenderTimeoutMs)?p:Tn.fullRenderTimeoutMs,[S,T]=i(!1),[E,D]=i(!1),[_,j]=i(!1),[W,P]=i(!1),[A,O]=i(1),[I,R]=i({x:0,y:0}),[H,z]=i(!1),[F,V]=i(!1),[X,q]=i(!1),[U,Z]=i(null),[Y,G]=i(!1),[J,Q]=i(()=>null==v.maxHeight?"360px":v.maxHeight),[ne,re]=i("undefined"==typeof window),oe=c(null),ie=c(null),le=c(null),ce=c(null),se=c(null),de=c(null),ue=c(null),me=c({x:0,y:0}),he=c(0),pe=c({}),ge=c(""),fe=c(!1),we=c(null),ve=c(!1),ye=c({zoom:1,translateX:0,translateY:0,containerHeight:J||"360px"}),xe=$(),ke=Boolean(null!=(f=null==(g=v.node)?void 0:g.loading)?f:v.loading),be=v.isDark?"dark":"light",Ce=Boolean(v.isStrict),Me=o(()=>Ce?{startOnLoad:!1,securityLevel:"strict",dompurifyConfig:Cn,flowchart:{htmlLabels:!1}}:{startOnLoad:!1,securityLevel:"loose"},[Ce]);s(()=>{ve.current=X},[X]),s(()=>{pe.current={}},[be,C,Ce]),s(()=>{let e=!1;return(async()=>{const t=await async function(e){if(wn)return kn(wn,e),wn;if(xn){const t=await xn;return t&&kn(t,e),t}if(vn)return null;try{vn=!0,xn=(async()=>{try{const t=await import("mermaid"),n=(null==t?void 0:t.default)||t;if(wn=(null==n?void 0:n.default)?n.default:(null==n?void 0:n.mermaidAPI)?n:(null==n?void 0:n.mermaid)?n.mermaid:n,!wn)throw new Error("Mermaid module did not export expected API");return kn(wn,null!=e?e:{startOnLoad:!1,securityLevel:"loose"}),wn}catch(t){return console.warn("[markstream-react] Failed to load mermaid:",t),null}finally{xn=null}})();const t=await xn;return t&&kn(t,e),t}catch{return null}}(Me);e||(oe.current=t,T(Boolean(t)),fe.current||D(!t))})(),()=>{e=!0}},[Me]),s(()=>{const e=ie.current;if(!e)return;const t=xe(e,{rootMargin:"400px"});return we.current=t,t.isVisible()&&re(!0),t.whenVisible.then(()=>re(!0)),()=>{t.destroy(),we.current=null}},[xe]),s(()=>{if("undefined"==typeof document)return;if(!Y)return;const e=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=e}},[Y]);const Ne=d(e=>{const t=ie.current,n=ce.current;if(!t||!n)return;const r=n.querySelector("svg");if(!r)return;let o=0,i=0;const l=r.getAttribute("viewBox");if(l){const e=l.split(" ");4===e.length&&(o=Number.parseFloat(e[2]),i=Number.parseFloat(e[3]))}if(o&&i||!r.hasAttribute("width")||!r.hasAttribute("height")||(o=Number.parseFloat(r.getAttribute("width")||"0"),i=Number.parseFloat(r.getAttribute("height")||"0")),!o||!i||Number.isNaN(o)||Number.isNaN(i))try{const e=r.getBBox();o=e.width,i=e.height}catch{return}if(!(o>0&&i>0))return;const a=(null!=e?e:t.clientWidth)*(i/o),c=Number.isFinite(a)&&a>0?a:i;Q(`${Math.min(c,i)}px`)},[]);s(()=>{if(!ie.current||"undefined"==typeof ResizeObserver)return;const e=new ResizeObserver(e=>{if(!e.length)return;const t=e[0].contentRect.width;!function(e){try{if("undefined"!=typeof globalThis&&"function"==typeof globalThis.requestAnimationFrame)return globalThis.requestAnimationFrame(e)}catch{}globalThis.setTimeout(e,0)}(()=>Ne(t))});return e.observe(ie.current),()=>e.disconnect()},[Ne]),s(()=>()=>{fn()},[]);const Be=d(async(e,t,n)=>{var r;if(!oe.current||!ce.current)return!1;V(!0);try{const o=`mermaid-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,i=Dn(e,t),l=await jn(()=>oe.current.render(o,i),{timeoutMs:L,signal:n});if(!(null==l?void 0:l.svg))return!1;const a=Sn(ce.current,l.svg,Ce);return null==(r=l.bindFunctions)||r.call(l,ce.current),Ne(),pe.current[t]=a,q(!0),Z(null),!0}catch(o){return ke||Z(o instanceof Error?o.message:String(o)),!1}finally{V(!1)}},[L,ke,Ce,Ne]),Le=d(async(e,t,n)=>{var r;if(oe.current&&ce.current){V(!0);try{const o=`mermaid-preview-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,i=Dn(_n(e)||e,t),l=await jn(()=>oe.current.render(o,i),{timeoutMs:B,signal:n});(null==l?void 0:l.svg)&&(Sn(ce.current,l.svg,Ce),null==(r=l.bindFunctions)||r.call(l,ce.current),Ne())}catch{}finally{V(!1)}}},[B,ke,Ce,Ne]),Se=d(async(e,t)=>{if(!e.trim())return Ln(ce.current),q(!1),void(ge.current="");const n=e.replace(/\s+/g,"");if(n===ge.current&&ve.current)return;const r=++he.current;try{if(await async function(e,t,n){try{if(await pn(e,t,n.workerTimeout))return!0}catch(l){if("AbortError"===(null==l?void 0:l.name))throw l}if(!n.mermaid)throw new Error("Mermaid not available");const r=Dn(e,t),o=n.mermaid;if("function"==typeof o.parse)return await jn(()=>o.parse(r),{timeoutMs:n.parseTimeout,signal:n.signal}),!0;const i=`mermaid-parse-${Math.random().toString(36).slice(2,9)}`;return await jn(()=>o.render(i,r),{timeoutMs:n.parseTimeout,signal:n.signal}),!0}(e,be,{workerTimeout:M,parseTimeout:N,mermaid:oe.current,signal:t}),(null==t?void 0:t.aborted)||he.current!==r)return;return void(await Be(e,be,t)&&(ge.current=n))}catch(o){if("AbortError"===(null==o?void 0:o.name))return}try{const n=await async function(e,t,n){try{const r=await gn(e,t,n.workerTimeout);if(r)return r}catch(o){if("AbortError"===(null==o?void 0:o.name))throw o}return _n(e)}(e,be,{workerTimeout:M,signal:t});if(!n||(null==t?void 0:t.aborted)||he.current!==r)return;await Le(n,be,t)}catch{}},[N,Be,Le,be,M]);s(()=>{if(!ne||E||_)return;const e=new AbortController;return Se(C,e.signal),()=>e.abort()},[C,_,Se,E,ne]);const Te=d((e,t)=>{e.clientX,e.clientY,ee(e.currentTarget,t,"top",!1,0,v.isDark)},[v.isDark]),Ee=d(async()=>{var e,t;try{await(null==(e=navigator.clipboard)?void 0:e.writeText(C)),P(!0),null==(t=v.onCopy)||t.call(v,C),setTimeout(()=>P(!1),1e3)}catch{}},[C,v]),$e=d(()=>{var e,t,n;const r=null!=(t=null==(e=ce.current)?void 0:e.querySelector("svg"))?t:null;if(!r)return;const o=Wn(r),i={payload:{type:"export"},defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0},svgElement:r,svgString:o};null==(n=v.onExport)||n.call(v,i),i.defaultPrevented||function(e,t){const n=null!=t?t:Wn(e),r=new Blob([n],{type:"image/svg+xml;charset=utf-8"}),o=URL.createObjectURL(r),i=document.createElement("a");i.href=o,i.download=`mermaid-${Date.now()}.svg`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o)}(r,o)},[v]),De=d(()=>{ue.current=null,Ln(de.current)},[]),_e=d(()=>{G(!1),De()},[De]),je=d(()=>{var e,t,n;const r=null!=(t=null==(e=ce.current)?void 0:e.querySelector("svg"))?t:null,o=r?Wn(r):null,i={payload:{type:"open-modal"},defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0},svgElement:r,svgString:o};null==(n=v.onOpenModal)||n.call(v,i),i.defaultPrevented||G(!0)},[v]);s(()=>{if(!Y)return;if("undefined"==typeof window)return;const e=e=>{"Escape"===e.key&&_e()};try{window.addEventListener("keydown",e)}catch{}return()=>{try{window.removeEventListener("keydown",e)}catch{}}},[_e,Y]),bn(()=>{if(!Y)return;const e=de.current,t=ie.current;if(!e||!t)return;const n=`translate(${I.x}px, ${I.y}px) scale(${A})`,r=t.cloneNode(!0);r.classList.add("fullscreen");const o=r.querySelector("[data-mermaid-wrapper]");o&&(ue.current=o,o.style.transform=n),Ln(e),e.appendChild(r)},[Y]),s(()=>{Y&&ue.current&&(ue.current.style.transform=`translate(${I.x}px, ${I.y}px) scale(${A})`)},[Y,I.x,I.y,A]);const We=E||F||_,Pe=o(()=>v.isDark?"mermaid-action-btn p-2 text-xs rounded text-gray-400 hover:bg-gray-700 hover:text-gray-200":"mermaid-action-btn p-2 text-xs rounded text-gray-600 hover:bg-gray-200 hover:text-gray-700",[v.isDark]),Ae=d(e=>{var t;const n={payload:{type:"toggle-mode",target:e},defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0}};if(null==(t=v.onToggleMode)||t.call(v,e,n),!n.defaultPrevented)if(fe.current=!0,"preview"===e){D(!1);const e=ye.current;O(e.zoom),R({x:e.translateX,y:e.translateY}),Q(e.containerHeight),ve.current&&pe.current[be]&&ce.current?(ce.current.innerHTML=pe.current[be],Ne()):Se(C)}else ye.current={zoom:A,translateX:I.x,translateY:I.y,containerHeight:J},D(!0)},[C,J,Se,v,be,I.x,I.y,Ne,A]),Oe=d(e=>{if(!1===v.enableWheelZoom)return;if(!e.ctrlKey&&!e.metaKey)return;e.preventDefault();const t=ie.current;if(!t)return;const n=t.getBoundingClientRect(),r=e.clientX-n.left-I.x,o=e.clientY-n.top-I.y,i=.01*-e.deltaY,l=$n(A+i,.5,3);if(l===A)return;const a=l/A;R({x:I.x-r*(a-1),y:I.y-o*(a-1)}),O(l)},[I,A]),Ie=d((e,t)=>{z(!0),me.current={x:e-I.x,y:t-I.y}},[I.x,I.y]),Re=d((e,t)=>{H&&R({x:e-me.current.x,y:t-me.current.y})},[H]),He=d(()=>{z(!1)},[]),Fe=/* @__PURE__ */n("div",{className:"relative",children:[v.showZoomControls&&/* @__PURE__ */e("div",{className:"absolute top-2 right-2 z-10 rounded-lg",children:/* @__PURE__ */n("div",{className:"flex items-center gap-2 backdrop-blur rounded-lg",children:[
100
+ /* @__PURE__ */e("span",{className:"sr-only",children:"Loading"})]})]})}let tn=null,nn=null;const rn=/* @__PURE__ */new Map;let on=5,ln=!1;function an(e){ln=!!e}function cn(e){Number.isFinite(e)&&e>0&&(on=Math.floor(e))}function sn(){return{inFlight:rn.size,max:on}}const dn="WORKER_BUSY";function un(e){tn=e,nn=null;const t=e;tn.onmessage=e=>{if(tn!==t)return;const{id:n,ok:r,result:o,error:i}=e.data,l=rn.get(n);l&&(!1===r||i?l.reject(new Error(i||"Unknown error")):l.resolve(o))},tn.onerror=e=>{var n,r;if(tn===t)if(0!==rn.size){try{ln?console.error("[mermaidWorkerClient] Worker error:",(null==e?void 0:e.message)||e):null==(r=console.debug)||r.call(console,"[mermaidWorkerClient] Worker error:",(null==e?void 0:e.message)||e)}catch{}for(const[t,n]of rn.entries())n.reject(new Error(`Worker error: ${e.message}`));rn.clear()}else null==(n=console.debug)||n.call(console,"[mermaidWorkerClient] Worker error (no pending):",(null==e?void 0:e.message)||e)},tn.onmessageerror=e=>{var n,r;if(tn===t)if(0!==rn.size){try{ln?console.error("[mermaidWorkerClient] Worker messageerror:",e):null==(r=console.debug)||r.call(console,"[mermaidWorkerClient] Worker messageerror:",e)}catch{}for(const[e,t]of rn.entries())t.reject(new Error("Worker messageerror"));rn.clear()}else null==(n=console.debug)||n.call(console,"[mermaidWorkerClient] Worker messageerror (no pending):",e)}}function mn(){var e;if(tn)try{for(const[e,t]of rn.entries())t.reject(new Error("Worker cleared"));rn.clear(),null==(e=tn.terminate)||e.call(tn)}catch{}tn=null,nn=null}function hn(e,t,n=1400){if(nn)return Promise.reject(nn);const r=tn||(nn=new Error("[mermaidWorkerClient] No worker instance set. Please inject a Worker via setMermaidWorker()."),nn.name="WORKER_INIT_ERROR",nn.code="WORKER_INIT_ERROR",null);if(!r)return Promise.reject(nn);if(rn.size>=on){const e=new Error("Worker busy");return e.name="WorkerBusy",e.code=dn,e.inFlight=rn.size,e.max=on,Promise.reject(e)}return new Promise((o,i)=>{const l=Math.random().toString(36).slice(2);let a=!1,c=null;const s=()=>{a||(a=!0,null!=c&&clearTimeout(c),rn.delete(l))},d={resolve:e=>{s(),o(e)},reject:e=>{s(),i(e)}};rn.set(l,d);try{r.postMessage({id:l,action:e,payload:t})}catch(u){return rn.delete(l),void i(u)}c=setTimeout(()=>{const e=new Error("Worker call timed out");e.name="WorkerTimeout",e.code="WORKER_TIMEOUT";const t=rn.get(l);null==t||t.reject(e)},n)})}async function pn(e,t,n=1400){return hn("canParse",{code:e,theme:t},n)}async function gn(e,t,n=2400){return hn("findPrefix",{code:e,theme:t},n)}function fn(){var e;null==(e=null==tn?void 0:tn.terminate)||e.call(tn),tn=null,nn=null,rn.clear()}let wn=null,vn=!1,yn=null,xn=null;function kn(e,t){var n;if(!e||!t)return;const r=function(e){var t,n;return`${String(null!=(t=null==e?void 0:e.securityLevel)?t:"loose")}|htmlLabels:${!1===(null==(n=null==e?void 0:e.flowchart)?void 0:n.htmlLabels)?"0":"1"}`}(t);if(yn!==r)try{"function"==typeof e.initialize?e.initialize(t):(null==(n=e.mermaidAPI)?void 0:n.initialize)&&e.mermaidAPI.initialize(t),yn=r}catch{}}const bn="undefined"!=typeof window?m:s,Cn={USE_PROFILES:{svg:!0},FORBID_TAGS:["script"],FORBID_ATTR:[/^on/i],ADD_TAGS:["style"],ADD_ATTR:["style"],SAFE_FOR_TEMPLATES:!0},Mn=[/javascript:/i,/expression\s*\(/i,/url\s*\(\s*javascript:/i,/@import/i],Nn=/^(?:https?:|mailto:|tel:|#|\/|data:image\/(?:png|gif|jpe?g|webp);)/i;function Bn(e){if(!e)return"";const t=e.trim();return Nn.test(t)?t:""}function Ln(e){if(e)try{e.replaceChildren()}catch{e.innerHTML=""}}function Sn(e,t,n){if(!e)return"";if(n)return function(e,t){if(!e)return"";Ln(e);const n=function(e){if("undefined"==typeof window||"undefined"==typeof DOMParser)return null;if(!e)return null;const t=e.replace(/["']\s*javascript:/gi,"#").replace(/\bjavascript:/gi,"#").replace(/["']\s*vbscript:/gi,"#").replace(/\bvbscript:/gi,"#").replace(/\bdata:text\/html/gi,"#"),n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;if(!n||"svg"!==n.nodeName.toLowerCase())return null;const r=n;return function(e){const t=/* @__PURE__ */new Set(["script"]),n=[e,...Array.from(e.querySelectorAll("*"))];for(const r of n){if(t.has(r.tagName.toLowerCase())){r.remove();continue}const e=Array.from(r.attributes);for(const t of e){const e=t.name;if(/^on/i.test(e))r.removeAttribute(e);else{if("style"===e&&t.value){const n=t.value;if(Mn.some(e=>e.test(n))){r.removeAttribute(e);continue}}if(("href"===e||"xlink:href"===e)&&t.value){const n=Bn(t.value);if(!n){r.removeAttribute(e);continue}n!==t.value&&r.setAttribute(e,n)}}}}}(r),r}(t);return n?(e.appendChild(n),e.innerHTML):""}(e,t);if(Ln(e),t)try{e.insertAdjacentHTML("afterbegin",t)}catch{e.innerHTML=t}return e.innerHTML}const Tn={maxHeight:"500px",loading:!0,workerTimeoutMs:1400,parseTimeoutMs:1800,renderTimeoutMs:2500,fullRenderTimeoutMs:4e3,showHeader:!0,showModeToggle:!0,showCopyButton:!0,showExportButton:!0,showFullscreenButton:!0,showCollapseButton:!0,showZoomControls:!0,enableWheelZoom:!1,isStrict:!1};function En(r){var l,a,u,m,h,p,g,f,w;const v={...Tn,...r},{t:y}=K(),k=o(()=>ae("mermaid"),[]),b=null!=(a=null==(l=v.node)?void 0:l.code)?a:"",C=o(()=>b.replace(/\]::([^:])/g,"]:::$1").replace(/:::subgraphNode$/gm,"::subgraphNode"),[b]),M=null!=(u=v.workerTimeoutMs)?u:Tn.workerTimeoutMs,N=null!=(m=v.parseTimeoutMs)?m:Tn.parseTimeoutMs,B=null!=(h=v.renderTimeoutMs)?h:Tn.renderTimeoutMs,L=null!=(p=v.fullRenderTimeoutMs)?p:Tn.fullRenderTimeoutMs,[S,T]=i(!1),[E,D]=i(!1),[_,j]=i(!1),[W,P]=i(!1),[A,O]=i(1),[I,R]=i({x:0,y:0}),[H,z]=i(!1),[F,V]=i(!1),[X,q]=i(!1),[U,Z]=i(null),[Y,G]=i(!1),[J,Q]=i(()=>null==v.maxHeight?"360px":v.maxHeight),[ne,re]=i("undefined"==typeof window),oe=c(null),ie=c(null),le=c(null),ce=c(null),se=c(null),de=c(null),ue=c(null),me=c({x:0,y:0}),he=c(0),pe=c({}),ge=c(""),fe=c(!1),we=c(null),ve=c(!1),ye=c({zoom:1,translateX:0,translateY:0,containerHeight:J||"360px"}),xe=$(),ke=Boolean(null!=(f=null==(g=v.node)?void 0:g.loading)?f:v.loading),be=v.isDark?"dark":"light",Ce=Boolean(v.isStrict),Me=o(()=>Ce?{startOnLoad:!1,securityLevel:"strict",suppressErrorRendering:!0,dompurifyConfig:Cn,flowchart:{htmlLabels:!1}}:{startOnLoad:!1,securityLevel:"loose",suppressErrorRendering:!0},[Ce]);s(()=>{ve.current=X},[X]),s(()=>{pe.current={}},[be,C,Ce]),s(()=>{let e=!1;return(async()=>{const t=await async function(e){if(wn)return kn(wn,e),wn;if(xn){const t=await xn;return t&&kn(t,e),t}if(vn)return null;try{vn=!0,xn=(async()=>{try{const t=await import("mermaid"),n=(null==t?void 0:t.default)||t;if(wn=(null==n?void 0:n.default)?n.default:(null==n?void 0:n.mermaidAPI)?n:(null==n?void 0:n.mermaid)?n.mermaid:n,!wn)throw new Error("Mermaid module did not export expected API");return kn(wn,null!=e?e:{startOnLoad:!1,securityLevel:"loose"}),wn}catch(t){return console.warn("[markstream-react] Failed to load mermaid:",t),null}finally{xn=null}})();const t=await xn;return t&&kn(t,e),t}catch{return null}}(Me);e||(oe.current=t,T(Boolean(t)),fe.current||D(!t))})(),()=>{e=!0}},[Me]),s(()=>{const e=ie.current;if(!e)return;const t=xe(e,{rootMargin:"400px"});return we.current=t,t.isVisible()&&re(!0),t.whenVisible.then(()=>re(!0)),()=>{t.destroy(),we.current=null}},[xe]),s(()=>{if("undefined"==typeof document)return;if(!Y)return;const e=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=e}},[Y]);const Ne=d(e=>{const t=ie.current,n=ce.current;if(!t||!n)return;const r=n.querySelector("svg");if(!r)return;let o=0,i=0;const l=r.getAttribute("viewBox");if(l){const e=l.split(" ");4===e.length&&(o=Number.parseFloat(e[2]),i=Number.parseFloat(e[3]))}if(o&&i||!r.hasAttribute("width")||!r.hasAttribute("height")||(o=Number.parseFloat(r.getAttribute("width")||"0"),i=Number.parseFloat(r.getAttribute("height")||"0")),!o||!i||Number.isNaN(o)||Number.isNaN(i))try{const e=r.getBBox();o=e.width,i=e.height}catch{return}if(!(o>0&&i>0))return;const a=(null!=e?e:t.clientWidth)*(i/o),c=Number.isFinite(a)&&a>0?a:i;Q(`${Math.min(c,i)}px`)},[]);s(()=>{if(!ie.current||"undefined"==typeof ResizeObserver)return;const e=new ResizeObserver(e=>{if(!e.length)return;const t=e[0].contentRect.width;!function(e){try{if("undefined"!=typeof globalThis&&"function"==typeof globalThis.requestAnimationFrame)return globalThis.requestAnimationFrame(e)}catch{}globalThis.setTimeout(e,0)}(()=>Ne(t))});return e.observe(ie.current),()=>e.disconnect()},[Ne]),s(()=>()=>{fn()},[]);const Be=d(async(e,t,n)=>{var r;if(!oe.current||!ce.current)return!1;V(!0);try{const o=`mermaid-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,i=Dn(e,t),l=await jn(()=>oe.current.render(o,i),{timeoutMs:L,signal:n});if(!(null==l?void 0:l.svg))return!1;const a=Sn(ce.current,l.svg,Ce);return null==(r=l.bindFunctions)||r.call(l,ce.current),Ne(),pe.current[t]=a,q(!0),Z(null),!0}catch(o){return ke||Z(o instanceof Error?o.message:String(o)),!1}finally{V(!1)}},[L,ke,Ce,Ne]),Le=d(async(e,t,n)=>{var r;if(oe.current&&ce.current){V(!0);try{const o=`mermaid-preview-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,i=Dn(_n(e)||e,t),l=await jn(()=>oe.current.render(o,i),{timeoutMs:B,signal:n});(null==l?void 0:l.svg)&&(Sn(ce.current,l.svg,Ce),null==(r=l.bindFunctions)||r.call(l,ce.current),Ne())}catch{}finally{V(!1)}}},[B,ke,Ce,Ne]),Se=d(async(e,t)=>{if(!e.trim())return Ln(ce.current),q(!1),void(ge.current="");const n=e.replace(/\s+/g,"");if(n===ge.current&&ve.current)return;const r=++he.current;try{if(await async function(e,t,n){try{if(await pn(e,t,n.workerTimeout))return!0}catch(l){if("AbortError"===(null==l?void 0:l.name))throw l}if(!n.mermaid)throw new Error("Mermaid not available");const r=Dn(e,t),o=n.mermaid;if("function"==typeof o.parse)return await jn(()=>o.parse(r),{timeoutMs:n.parseTimeout,signal:n.signal}),!0;const i=`mermaid-parse-${Math.random().toString(36).slice(2,9)}`;return await jn(()=>o.render(i,r),{timeoutMs:n.parseTimeout,signal:n.signal}),!0}(e,be,{workerTimeout:M,parseTimeout:N,mermaid:oe.current,signal:t}),(null==t?void 0:t.aborted)||he.current!==r)return;return void(await Be(e,be,t)&&(ge.current=n))}catch(o){if("AbortError"===(null==o?void 0:o.name))return}try{const n=await async function(e,t,n){try{const r=await gn(e,t,n.workerTimeout);if(r)return r}catch(o){if("AbortError"===(null==o?void 0:o.name))throw o}return _n(e)}(e,be,{workerTimeout:M,signal:t});if(!n||(null==t?void 0:t.aborted)||he.current!==r)return;await Le(n,be,t)}catch{}},[N,Be,Le,be,M]);s(()=>{if(!ne||E||_)return;const e=new AbortController;return Se(C,e.signal),()=>e.abort()},[C,_,Se,E,ne]);const Te=d((e,t)=>{e.clientX,e.clientY,ee(e.currentTarget,t,"top",!1,0,v.isDark)},[v.isDark]),Ee=d(async()=>{var e,t;try{await(null==(e=navigator.clipboard)?void 0:e.writeText(C)),P(!0),null==(t=v.onCopy)||t.call(v,C),setTimeout(()=>P(!1),1e3)}catch{}},[C,v]),$e=d(()=>{var e,t,n;const r=null!=(t=null==(e=ce.current)?void 0:e.querySelector("svg"))?t:null;if(!r)return;const o=Wn(r),i={payload:{type:"export"},defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0},svgElement:r,svgString:o};null==(n=v.onExport)||n.call(v,i),i.defaultPrevented||function(e,t){const n=null!=t?t:Wn(e),r=new Blob([n],{type:"image/svg+xml;charset=utf-8"}),o=URL.createObjectURL(r),i=document.createElement("a");i.href=o,i.download=`mermaid-${Date.now()}.svg`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o)}(r,o)},[v]),De=d(()=>{ue.current=null,Ln(de.current)},[]),_e=d(()=>{G(!1),De()},[De]),je=d(()=>{var e,t,n;const r=null!=(t=null==(e=ce.current)?void 0:e.querySelector("svg"))?t:null,o=r?Wn(r):null,i={payload:{type:"open-modal"},defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0},svgElement:r,svgString:o};null==(n=v.onOpenModal)||n.call(v,i),i.defaultPrevented||G(!0)},[v]);s(()=>{if(!Y)return;if("undefined"==typeof window)return;const e=e=>{"Escape"===e.key&&_e()};try{window.addEventListener("keydown",e)}catch{}return()=>{try{window.removeEventListener("keydown",e)}catch{}}},[_e,Y]),bn(()=>{if(!Y)return;const e=de.current,t=ie.current;if(!e||!t)return;const n=`translate(${I.x}px, ${I.y}px) scale(${A})`,r=t.cloneNode(!0);r.classList.add("fullscreen");const o=r.querySelector("[data-mermaid-wrapper]");o&&(ue.current=o,o.style.transform=n),Ln(e),e.appendChild(r)},[Y]),s(()=>{Y&&ue.current&&(ue.current.style.transform=`translate(${I.x}px, ${I.y}px) scale(${A})`)},[Y,I.x,I.y,A]);const We=E||F||_,Pe=o(()=>v.isDark?"mermaid-action-btn p-2 text-xs rounded text-gray-400 hover:bg-gray-700 hover:text-gray-200":"mermaid-action-btn p-2 text-xs rounded text-gray-600 hover:bg-gray-200 hover:text-gray-700",[v.isDark]),Ae=d(e=>{var t;const n={payload:{type:"toggle-mode",target:e},defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0}};if(null==(t=v.onToggleMode)||t.call(v,e,n),!n.defaultPrevented)if(fe.current=!0,"preview"===e){D(!1);const e=ye.current;O(e.zoom),R({x:e.translateX,y:e.translateY}),Q(e.containerHeight),ve.current&&pe.current[be]&&ce.current?(ce.current.innerHTML=pe.current[be],Ne()):Se(C)}else ye.current={zoom:A,translateX:I.x,translateY:I.y,containerHeight:J},D(!0)},[C,J,Se,v,be,I.x,I.y,Ne,A]),Oe=d(e=>{if(!1===v.enableWheelZoom)return;if(!e.ctrlKey&&!e.metaKey)return;e.preventDefault();const t=ie.current;if(!t)return;const n=t.getBoundingClientRect(),r=e.clientX-n.left-I.x,o=e.clientY-n.top-I.y,i=.01*-e.deltaY,l=$n(A+i,.5,3);if(l===A)return;const a=l/A;R({x:I.x-r*(a-1),y:I.y-o*(a-1)}),O(l)},[I,A]),Ie=d((e,t)=>{z(!0),me.current={x:e-I.x,y:t-I.y}},[I.x,I.y]),Re=d((e,t)=>{H&&R({x:e-me.current.x,y:t-me.current.y})},[H]),He=d(()=>{z(!1)},[]),Fe=/* @__PURE__ */n("div",{className:"relative",children:[v.showZoomControls&&/* @__PURE__ */e("div",{className:"absolute top-2 right-2 z-10 rounded-lg",children:/* @__PURE__ */n("div",{className:"flex items-center gap-2 backdrop-blur rounded-lg",children:[
101
101
  /* @__PURE__ */e("button",{type:"button",className:ze("p-2 text-xs rounded transition-colors",v.isDark?"text-gray-400 hover:bg-gray-700":"text-gray-600 hover:bg-gray-200"),onMouseEnter:e=>Te(e,y("common.zoomIn")),onMouseLeave:()=>te(),onClick:()=>O($n(A+.1,.5,3)),children:"+"}),
102
102
  /* @__PURE__ */e("button",{type:"button",className:ze("p-2 text-xs rounded transition-colors",v.isDark?"text-gray-400 hover:bg-gray-700":"text-gray-600 hover:bg-gray-200"),onMouseEnter:e=>Te(e,y("common.zoomOut")),onMouseLeave:()=>te(),onClick:()=>O($n(A-.1,.5,3)),children:"−"}),
103
103
  /* @__PURE__ */n("button",{type:"button",className:ze("p-2 text-xs rounded transition-colors",v.isDark?"text-gray-400 hover:bg-gray-700":"text-gray-600 hover:bg-gray-200"),onMouseEnter:e=>Te(e,y("common.resetZoom")),onMouseLeave:()=>te(),onClick:()=>{O(1),R({x:0,y:0})},children:[Math.round(100*A),"%"]})]})}),
@@ -146,9 +146,9 @@ return e("tr",{className:ze("border-[var(--table-border,#cbd5e1)]",n<d.length-1&
146
146
  /* @__PURE__ */e("span",{className:"sr-only",children:"Loading"})]})]})}function Vn(t){const{node:n,children:r}=t;/* @__PURE__ */
147
147
  return e("span",{className:ze("text-node whitespace-pre-wrap break-words",n.center&&"text-node-center"),children:null!=r?r:n.content})}function Kn(){/* @__PURE__ */
148
148
  return e("hr",{className:"hr-node thematic-break"})}function Xn(t){const{node:n,ctx:i,renderNode:l,indexKey:a}=t,c=`vmr-container vmr-container-${n.name}`,s=o(()=>{if(n.attrs)return Array.isArray(n.attrs)?b(n.attrs):n.attrs},[n.attrs]);/* @__PURE__ */
149
- return e("div",{className:c,...s,children:i&&l&&Array.isArray(n.children)?n.children.map((t,n)=>/* @__PURE__ */e(r.Fragment,{children:l(t,`${String(null!=a?a:"vmr-container")}-${n}`,i)},`${String(null!=a?a:"vmr-container")}-${n}`)):null})}function qn(e,t){const n=String(null!=e?e:"");if(!t)return n;const r=new RegExp(String.raw`^\s*<\s*${t}(?:\s[^>]*)?>\s*`,"i"),o=new RegExp(String.raw`\s*<\s*\/\s*${t}\s*>\s*$`,"i");return n.replace(r,"").replace(o,"")}function Un(t,n,o){var i,l;const a=I(o.customId),c=a[t.type];if(c)return r.createElement(c,{key:n,node:t,customId:o.customId,isDark:o.isDark,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter});if("html_block"===t.type||"html_inline"===t.type){const e=String(null!=(i=t.tag)?i:"").trim().toLowerCase()||function(e){const t=String(null!=e?e:"").match(/^\s*<\s*([A-Z][\w:-]*)/i);return t?t[1].toLowerCase():""}(t.content),l=e?a[e]:null;if(l){const i={...t,type:e,tag:e,content:qn(t.content,e)};return r.createElement(l,{key:n,node:i,customId:o.customId,isDark:o.isDark,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter})}}switch(t.type){case"text":/* @__PURE__ */
149
+ return e("div",{className:c,...s,children:i&&l&&Array.isArray(n.children)?n.children.map((t,n)=>/* @__PURE__ */e(r.Fragment,{children:l(t,`${String(null!=a?a:"vmr-container")}-${n}`,i)},`${String(null!=a?a:"vmr-container")}-${n}`)):null})}function qn(e,t){const n=String(null!=e?e:"");if(!t)return n;const r=new RegExp(String.raw`^\s*<\s*${t}(?:\s[^>]*)?>\s*`,"i"),o=new RegExp(String.raw`\s*<\s*\/\s*${t}\s*>\s*$`,"i");return n.replace(r,"").replace(o,"")}function Un(t,n,o){var i,l,a;const c=null!=(i=o.customComponents)?i:I(o.customId),s=c[t.type];if(s)return r.createElement(s,{key:n,node:t,customId:o.customId,isDark:o.isDark,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter});if("html_block"===t.type||"html_inline"===t.type){const e=String(null!=(l=t.tag)?l:"").trim().toLowerCase()||function(e){const t=String(null!=e?e:"").match(/^\s*<\s*([A-Z][\w:-]*)/i);return t?t[1].toLowerCase():""}(t.content),i=e?c[e]:null;if(i){const l={...t,type:e,tag:e,content:qn(t.content,e)};return r.createElement(i,{key:n,node:l,customId:o.customId,isDark:o.isDark,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter})}}switch(t.type){case"text":/* @__PURE__ */
150
150
  return e(Vn,{node:t,typewriter:o.typewriter},n);case"text_special":/* @__PURE__ */
151
- return e(Vn,{node:{type:"text",content:null!=(l=t.content)?l:"",center:t.center},typewriter:o.typewriter},n);case"paragraph":/* @__PURE__ */
151
+ return e(Vn,{node:{type:"text",content:null!=(a=t.content)?a:"",center:t.center},typewriter:o.typewriter},n);case"paragraph":/* @__PURE__ */
152
152
  return e(An,{node:t,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter},n);case"heading":/* @__PURE__ */
153
153
  return e(Fe,{node:t,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter},n);case"blockquote":/* @__PURE__ */
154
154
  return e(tr,{node:t,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter},n);case"list":/* @__PURE__ */
@@ -163,8 +163,8 @@ return e(B,{node:t,ctx:o,renderNode:Un,indexKey:n,isDark:o.isDark,typewriter:o.t
163
163
  return e(Re,{node:t,typewriter:o.typewriter},n);case"link":/* @__PURE__ */
164
164
  return e(Bt,{node:t,ctx:o,renderNode:Un,indexKey:n,isDark:o.isDark,typewriter:o.typewriter},n);case"image":/* @__PURE__ */
165
165
  return e(vt,{node:t},n);case"inline_code":/* @__PURE__ */
166
- return e(Mt,{node:t,typewriter:o.typewriter},n);case"code_block":return function(t,n,o){var i,l,a,c;const s=ie(String(t.language||""));if("mermaid"===s){const i=I(o.customId).mermaid;if(i)return r.createElement(i,{key:n,node:t,isDark:o.isDark});if(!o.renderCodeBlocksAsPre)/* @__PURE__ */
167
- return e(En,{node:t,isDark:o.isDark,loading:Boolean(t.loading)},n)}if("infographic"===s){const i=I(o.customId).infographic;return i?r.createElement(i,{key:n,node:t,isDark:o.isDark}):/* @__PURE__ */e(Ct,{node:t,isDark:o.isDark,loading:Boolean(t.loading)},n)}return o.renderCodeBlocksAsPre||"mermaid"===s?/* @__PURE__ */e($e,{node:t},n):/* @__PURE__ */e(_e,{node:t,loading:Boolean(t.loading),stream:o.codeBlockStream,monacoOptions:null==(i=o.codeBlockThemes)?void 0:i.monacoOptions,themes:null==(l=o.codeBlockThemes)?void 0:l.themes,minWidth:null==(a=o.codeBlockThemes)?void 0:a.minWidth,maxWidth:null==(c=o.codeBlockThemes)?void 0:c.maxWidth,isDark:o.isDark,onCopy:o.events.onCopy,...o.codeBlockProps||{}},n)}(t,n,o);case"strong":/* @__PURE__ */
166
+ return e(Mt,{node:t,typewriter:o.typewriter},n);case"code_block":return function(t,n,o,i){var l,a,c,s;const d=ie(String(t.language||""));if("mermaid"===d){const l=i.mermaid;if(l)return r.createElement(l,{key:n,node:t,isDark:o.isDark});if(!o.renderCodeBlocksAsPre)/* @__PURE__ */
167
+ return e(En,{node:t,isDark:o.isDark,loading:Boolean(t.loading)},n)}if("infographic"===d){const l=i.infographic;return l?r.createElement(l,{key:n,node:t,isDark:o.isDark}):/* @__PURE__ */e(Ct,{node:t,isDark:o.isDark,loading:Boolean(t.loading)},n)}return o.renderCodeBlocksAsPre||"mermaid"===d?/* @__PURE__ */e($e,{node:t},n):/* @__PURE__ */e(_e,{node:t,loading:Boolean(t.loading),stream:o.codeBlockStream,monacoOptions:null==(l=o.codeBlockThemes)?void 0:l.monacoOptions,themes:null==(a=o.codeBlockThemes)?void 0:a.themes,minWidth:null==(c=o.codeBlockThemes)?void 0:c.minWidth,maxWidth:null==(s=o.codeBlockThemes)?void 0:s.maxWidth,isDark:o.isDark,onCopy:o.events.onCopy,...o.codeBlockProps||{}},n)}(t,n,o,c);case"strong":/* @__PURE__ */
168
168
  return e(Rn,{node:t,children:C(t.children,o,`${String(n)}-strong`,Un)},n);case"emphasis":/* @__PURE__ */
169
169
  return e(Pe,{node:t,children:C(t.children,o,`${String(n)}-em`,Un)},n);case"strikethrough":/* @__PURE__ */
170
170
  return e(In,{node:t,children:C(t.children,o,`${String(n)}-strike`,Un)},n);case"highlight":/* @__PURE__ */
@@ -180,8 +180,8 @@ return e(Qt,{node:t},n);case"reference":/* @__PURE__ */
180
180
  return e(On,{node:t,ctx:o,typewriter:o.typewriter},n);case"html_block":case"html_inline":return"html_block"===t.type?/* @__PURE__ */e(tt,{node:t,typewriter:o.typewriter,customId:o.customId},n):/* @__PURE__ */e(ft,{node:t,typewriter:o.typewriter,customId:o.customId},n);case"vmr_container":/* @__PURE__ */
181
181
  return e(Xn,{node:t,ctx:o,renderNode:Un,indexKey:n,typewriter:o.typewriter},n);case"label_open":case"label_close":return null;default:/* @__PURE__ */
182
182
  return e(Pn,{node:t},n)}}const Zn={codeBlockStream:!0,typewriter:!0,batchRendering:!0,initialRenderBatchSize:40,renderBatchSize:80,renderBatchDelay:16,renderBatchBudgetMs:6,renderBatchIdleTimeoutMs:120,deferNodesUntilVisible:!0,maxLiveNodes:320,liveNodeBuffer:60},Yn=h();function Gn(e){const t=String(null!=e?e:"").trim();if(!t)return"";const n=t.match(/^[<\s/]*([A-Z][\w-]*)/i);return n?n[1].toLowerCase():""}function Jn(e){return/^[a-z][a-z0-9-]*$/.test(e)}const Qn=r.memo(({props:t,parsedNodes:r,renderCtx:l,indexPrefix:a,containerRef:u})=>{var m,h,p,g,f,w,v;const y=$(),x="undefined"!=typeof window,k="undefined"!=typeof window&&"function"==typeof window.requestIdleCallback,b=Math.max(0,Math.trunc(null!=(m=t.renderBatchSize)?m:80)),C=Math.max(0,Math.trunc(null!=(h=t.initialRenderBatchSize)?h:b||r.length)),M=!1!==t.batchRendering&&b>0&&x,N=Math.max(0,null!=(p=t.liveNodeBuffer)?p:60),B=Math.max(1,null!=(g=t.maxLiveNodes)?g:320),L=(null!=(f=t.maxLiveNodes)?f:0)>0&&r.length>B,S=!1!==t.viewportPriority,T=M&&(null!=(w=t.maxLiveNodes)?w:0)<=0,E=o(()=>{var e;return!1!==t.deferNodesUntilVisible&&!((null!=(e=t.maxLiveNodes)?e:0)<=0)&&!L&&!(r.length>900)&&S},[r.length,t.deferNodesUntilVisible,t.maxLiveNodes,S,L]),[D,_]=i(()=>T?Math.min(r.length,C):r.length),j=c(D);s(()=>{j.current=D},[D]);const W=T?D:r.length,[P,A]=i(0),[O,I]=i({start:0,end:r.length}),R=c(/* @__PURE__ */new Map),[H,z]=i(0),F=c({}),V=c(/* @__PURE__ */new Map),K=c(/* @__PURE__ */new Map),X=c(/* @__PURE__ */new Map),q=c(/* @__PURE__ */new Map),U=c(/* @__PURE__ */new Set),Z=c(D),Y=c(null),G=c(null),J=c(null),Q=c(!1),ee=c(null),te=c(Math.max(1,b||1)),ne=c(r.length),re=c({key:t.indexKey,total:r.length}),oe=c({batchSize:b,initial:C,delay:null!=(v=t.renderBatchDelay)?v:16,enabled:T}),ie=E||L,le=o(()=>{const e=R.current;if(!e.size)return 32;let t=0;for(const n of e.values())t+=n;return Math.max(16,t/e.size)},[H]),ae=o(()=>{if(!L)return r.map((e,t)=>({node:e,index:t}));const e=r.length,t=Math.max(0,Math.min(O.start,e)),n=Math.max(t,Math.min(O.end,e));return r.slice(t,n).map((e,n)=>({node:e,index:t+n}))},[r,O,L]),ce=o(()=>{if(!L)return r.length;const e=Math.max(O.end+N,C),t=Math.min(r.length,e);return Math.max(D,t)},[r.length,L,O.end,N,C,D]);ne.current=ce;const se=d((e,t)=>{var n;if(e>=t)return 0;const r=R.current;let o=0;for(let i=e;i<t;i++)o+=null!=(n=r.get(i))?n:le;return o},[le]),de=L?se(0,Math.min(O.start,r.length)):0,ue=L?se(Math.min(O.end,r.length),r.length):0,me=d(()=>{null!=Y.current&&"function"==typeof cancelAnimationFrame&&(cancelAnimationFrame(Y.current),Y.current=null),null!=G.current&&(window.clearTimeout(G.current),G.current=null),null!=J.current&&"function"==typeof window.cancelIdleCallback&&(window.cancelIdleCallback(J.current),J.current=null),Q.current=!1,ee.current=null},[]),he=d(e=>{var n;if(!T)return;const r=Math.max(2,null!=(n=t.renderBatchBudgetMs)?n:6),o=Math.max(1,b||1),i=Math.max(1,Math.floor(o/4));e>1.2*r?te.current=Math.max(i,Math.floor(.7*te.current)):e<.5*r&&te.current<o&&(te.current=Math.min(o,Math.ceil(1.2*te.current)))},[T,t.renderBatchBudgetMs,b]),pe=d((e,n={})=>{var r,o;if(!T)return;const i=ne.current;if(j.current>=i)return;const l=Math.max(1,e),a=e=>{const t="undefined"!=typeof performance?performance.now():Date.now();_(t=>{const n=Math.min(ne.current,t+Math.max(1,e));return j.current=n,n});const n="undefined"!=typeof performance?performance.now():Date.now();he(n-t)},c=()=>{const e=Math.max(1,Math.round(te.current));pe(e)},s=e=>{var n;Y.current=null,G.current=null,J.current=null,Q.current=!1;const r=ee.current;if(ee.current=null,a(null!=r?r:l),j.current>=ne.current)return;if(!e)return void c();const o=Math.max(2,null!=(n=t.renderBatchBudgetMs)?n:6);for(;j.current<ne.current&&!(("function"==typeof e.timeRemaining?e.timeRemaining():0)<=.5*o);)a(Math.max(1,Math.round(te.current)));j.current<ne.current&&c()};if(!x||n.immediate)return void s();const d=Math.max(0,null!=(r=t.renderBatchDelay)?r:16);if(ee.current=null!=ee.current?Math.max(ee.current,l):l,!Q.current){if(Q.current=!0,k){const e=Math.max(0,null!=(o=t.renderBatchIdleTimeoutMs)?o:120);return void(J.current=window.requestIdleCallback(e=>s(e),{timeout:e}))}"function"==typeof requestAnimationFrame?Y.current=requestAnimationFrame(()=>{0!==d?G.current=window.setTimeout(()=>s(),d):s()}):G.current=window.setTimeout(()=>s(),d)}},[he,k,T,x,t.renderBatchDelay,t.renderBatchBudgetMs,t.renderBatchIdleTimeoutMs]);s(()=>{var e;const n=t.indexKey,o=r.length,i=re.current,l=void 0!==n?n!==i.key:o!==i.total;re.current={key:n,total:o};const a=oe.current,c=null!=(e=t.renderBatchDelay)?e:16,s=a.batchSize!==b||a.initial!==C||a.delay!==c||a.enabled!==T;if(oe.current={batchSize:b,initial:C,delay:c,enabled:T},(l||s||!T)&&me(),(l||s)&&(te.current=Math.max(1,b||1),U.current.clear()),!o)return j.current=0,void _(0);const d=ne.current;if(!T)return j.current=d,void _(d);if(l||s){const e=Math.min(d,C);return j.current=e,_(e),void(e<d&&pe(Math.max(1,C),{immediate:!x}))}const u=Math.min(j.current,d);u!==j.current&&(j.current=u,_(u)),j.current<d&&pe(Math.max(1,b||1))},[me,T,x,r.length,t.indexKey,t.renderBatchDelay,b,C,pe]),s(()=>{if(!L)return void I({start:0,end:r.length});const e=r.length;if(!e)return void I({start:0,end:0});const t=Math.max(0,Math.min(P,e-1));let n=Math.max(0,t-N),o=Math.min(e,t+N+1);const i=o-n;if(i>B){const e=i-B;n+=Math.ceil(e/2),o-=Math.floor(e/2)}else if(i<B){const t=B-i;n=Math.max(0,n-Math.ceil(t/2)),o=Math.min(e,o+Math.floor(t/2))}I({start:n,end:o})},[P,N,B,r.length,L]),s(()=>()=>{me();for(const e of V.current.values())e.destroy();V.current.clear()},[me]);const ge=d(e=>{for(const[t,n]of V.current.entries())t>=e&&(n.destroy(),V.current.delete(t),delete F.current[t],K.current.delete(t),X.current.delete(t),q.current.delete(t))},[]);s(()=>{ge(W)},[ge,W]),s(()=>{const e=r.length;let t=!1;for(const n of Array.from(R.current.keys()))n>=e&&(R.current.delete(n),t=!0);t&&z(e=>e+1);for(const n of Object.keys(F.current))Number(n)>=e&&delete F.current[n];for(const n of Array.from(U.current))n>=e&&U.current.delete(n)},[r.length]);const fe=d((e,t)=>{E&&t&&(F.current[e]=!0),t&&L&&A(t=>e>t?e:t)},[E,L]),we=d(e=>{const t=V.current.get(e);t&&(t.destroy(),V.current.delete(e))},[]),ve=d((e,t)=>{const n=K.current;if(t?n.set(e,t):n.delete(e),!ie||!t)return we(e),E&&!t&&delete F.current[e],void(t&&fe(e,!0));if(e<C&&!L)return we(e),void fe(e,!0);we(e);const r=y(t,{rootMargin:"400px"});V.current.set(e,r),r.isVisible()&&fe(e,!0),r.whenVisible.then(()=>fe(e,!0)).catch(()=>{})},[E,we,fe,y,C,ie,L]),ye=d(e=>{const t=X.current.get(e);if(t)return t;const n=t=>ve(e,t);return X.current.set(e,n),n},[ve]),xe=d((e,t)=>{if(!t)return void(R.current.has(e)&&(R.current.delete(e),z(e=>e+1)));const n=()=>{const n=t.offsetHeight;n&&R.current.get(e)!==n&&(R.current.set(e,n),z(e=>e+1))};"function"==typeof queueMicrotask?queueMicrotask(n):Promise.resolve().then(n)},[]),ke=d(e=>{const t=q.current.get(e);if(t)return t;const n=t=>xe(e,t);return q.current.set(e,n),n},[xe]),be=d(e=>!(T&&e>=j.current)&&(!E||e<C||!0===F.current[e]),[E,T,C]),Ce=d(e=>t=>{if(!e)return;const n=t.target;(null==n?void 0:n.closest("[data-node-index]"))&&e(t)},[]);s(()=>{for(const[e,t]of K.current.entries())t&&ve(e,t)},[ve]),s(()=>{L&&D>Z.current&&A(D-1),Z.current=D},[D,L]);const Me=L?/* @__PURE__ */e("div",{className:"node-spacer",style:{height:`${de}px`},"aria-hidden":"true"}):null,Ne=L?/* @__PURE__ */e("div",{className:"node-spacer",style:{height:`${ue}px`},"aria-hidden":"true"}):null;/* @__PURE__ */
183
- return n("div",{ref:u,className:`markstream-react markdown-renderer${t.isDark?" dark":""}${L?" virtualized":""}`,onClick:t.onClick,onMouseOver:Ce(t.onMouseOver),onMouseOut:Ce(t.onMouseOut),children:[Me,ae.map(({node:n,index:r})=>{var o;const i=be(r),c=null!=(o=R.current.get(r))?o:le,s=!1!==t.typewriter&&"code_block"!==n.type&&!U.current.has(r)&&i;return s&&U.current.add(r),/* @__PURE__ */e("div",{ref:ye(r),className:"node-slot","data-node-index":r,"data-node-type":n.type,children:/* @__PURE__ */e("div",i?{ref:ke(r),className:"node-content"+(s?" typewriter-node":""),children:Un(n,`${a}-${r}`,l)}:{className:"node-placeholder",style:{height:`${c}px`}})},`${a}-${r}`)}),Ne]})},function(e,t){if(e.parsedNodes!==t.parsedNodes)return!1;if(e.renderCtx!==t.renderCtx)return!1;if(e.indexPrefix!==t.indexPrefix)return!1;if(e.containerRef!==t.containerRef)return!1;const n=e.props,r=t.props;return n.isDark===r.isDark&&n.typewriter===r.typewriter&&n.batchRendering===r.batchRendering&&n.initialRenderBatchSize===r.initialRenderBatchSize&&n.renderBatchSize===r.renderBatchSize&&n.renderBatchDelay===r.renderBatchDelay&&n.renderBatchBudgetMs===r.renderBatchBudgetMs&&n.renderBatchIdleTimeoutMs===r.renderBatchIdleTimeoutMs&&n.deferNodesUntilVisible===r.deferNodesUntilVisible&&n.maxLiveNodes===r.maxLiveNodes&&n.liveNodeBuffer===r.liveNodeBuffer&&n.viewportPriority===r.viewportPriority&&n.indexKey===r.indexKey&&n.onClick===r.onClick&&n.onMouseOver===r.onMouseOver&&n.onMouseOut===r.onMouseOut}),er=t=>{const n={...Zn,...t},r=c(null),i=c(null),l=u(P,A,A),a=o(()=>n.customId?`renderer-${n.customId}`:`renderer-${Date.now()}-${Math.random().toString(36).slice(2)}`,[n.customId]),d=o(()=>{const e=I(n.customId);return Object.keys(e).map(String).map(e=>e.trim().toLowerCase()).filter(Jn)},[n.customId,l]),m=o(()=>{var e,t,r;const o=null!=(t=(null!=(e=n.parseOptions)?e:{}).customHtmlTags)?t:[],i=[...null!=(r=n.customHtmlTags)?r:[],...Array.isArray(o)?o:[],...d].map(Gn).filter(Boolean);return Array.from(new Set(i))},[n.customId,n.customHtmlTags,n.parseOptions,d,l]),g=o(()=>{const e=m;return e&&0!==e.length?h(a,{customHtmlTags:e}):h(a)},[a,m]),f=o(()=>{const e=g;return n.customMarkdownIt?n.customMarkdownIt(e):e},[g,n.customMarkdownIt]),w=o(()=>{var e,t;const r=null!=(e=n.parseOptions)?e:{},o=null!=(t=n.final)?t:r.final,i=null!=o,l=m.length>0;return i||l?{...r,...i?{final:o}:{},...l?{customHtmlTags:m}:{}}:r},[m,n.final,n.parseOptions]),v=o(()=>{var e,t;const r=Boolean(n.debugPerformance)&&"undefined"!=typeof console&&"undefined"!=typeof performance,o=r?performance.now():0;let i=[];return Array.isArray(n.nodes)&&n.nodes.length?i=n.nodes.map(e=>({...e})):n.content&&(i=p(n.content,null!=f?f:Yn,w)),r&&console.info("[markstream-react][perf] parse(sync)",{ms:Math.round(performance.now()-o),nodes:i.length,contentLength:null!=(t=null==(e=n.content)?void 0:e.length)?t:0}),i},[n.content,n.debugPerformance,n.nodes,w,f,n.customId,l,m]);s(()=>{var e,t;if("undefined"==typeof window)return;if(n.renderCodeBlocksAsPre)return;if(!v.some(e=>{var t;return"code_block"===(null==e?void 0:e.type)&&"mermaid"!==ie(String(null!=(t=null==e?void 0:e.language)?t:""))}))return;const r=null!=(e=window.requestIdleCallback)?e:(e,t)=>{var n;return window.setTimeout(()=>e({didTimeout:!0,timeRemaining:()=>0}),null!=(n=null==t?void 0:t.timeout)?n:600)},o=null!=(t=window.cancelIdleCallback)?t:e=>window.clearTimeout(e),i=r(()=>{he()},{timeout:900});return()=>o(i)},[v,n.renderCodeBlocksAsPre]),s(()=>{if("undefined"==typeof window)return;if(n.renderCodeBlocksAsPre)return;const e=n.isDark?n.codeBlockDarkTheme:n.codeBlockLightTheme,t="string"==typeof e?e:"object"==typeof e&&e&&"name"in e?String(e.name):null;t&&i.current!==t&&(i.current=t,function(e){if(null==e)return;const t=function(e){if(null==e)return null;if("string"==typeof e)return e;if("object"==typeof e&&e&&"name"in e)return String(e.name);if("object"==typeof e){const t=Se.get(e);if(t)return t;try{const t=JSON.stringify(e);if(t)return Se.set(e,t),t}catch{}const n="__theme_"+ ++Te;return Se.set(e,n),n}return String(e)}(e);t&&Ne!==t&&(Me=e,Ne=t,Be&&Ce(Me,Be).then(()=>Ee()).catch(()=>{}))}(e))},[n.codeBlockDarkTheme,n.codeBlockLightTheme,n.isDark,n.renderCodeBlocksAsPre]);const y=o(()=>null!=n.indexKey?String(n.indexKey):"markdown-renderer",[n.indexKey]),x=o(()=>({customId:n.customId,isDark:n.isDark,indexKey:y,typewriter:n.typewriter,renderCodeBlocksAsPre:n.renderCodeBlocksAsPre,codeBlockStream:n.codeBlockStream,codeBlockProps:n.codeBlockProps,codeBlockThemes:{themes:n.themes,monacoOptions:n.codeBlockMonacoOptions,minWidth:n.codeBlockMinWidth,maxWidth:n.codeBlockMaxWidth},events:{onCopy:n.onCopy,onHandleArtifactClick:n.onHandleArtifactClick}}),[n.customId,n.isDark,y,n.typewriter,n.renderCodeBlocksAsPre,n.codeBlockStream,n.codeBlockProps,n.themes,n.codeBlockMonacoOptions,n.codeBlockMinWidth,n.codeBlockMaxWidth,n.onCopy,n.onHandleArtifactClick]);/* @__PURE__ */
184
- return e(E,{getRoot:()=>r.current,enabled:!1!==n.viewportPriority,children:/* @__PURE__ */e(Qn,{props:n,parsedNodes:v,renderCtx:x,indexPrefix:y,containerRef:r})})};function tr(t){var n,r,o,i,l,a;const{node:c,ctx:s,renderNode:d,indexKey:u,children:m}=t;/* @__PURE__ */
183
+ return n("div",{ref:u,className:`markstream-react markdown-renderer${t.isDark?" dark":""}${L?" virtualized":""}`,onClick:t.onClick,onMouseOver:Ce(t.onMouseOver),onMouseOut:Ce(t.onMouseOut),children:[Me,ae.map(({node:n,index:r})=>{var o;const i=be(r),c=null!=(o=R.current.get(r))?o:le,s=!1!==t.typewriter&&"code_block"!==n.type&&!U.current.has(r)&&i;return s&&U.current.add(r),/* @__PURE__ */e("div",{ref:ye(r),className:"node-slot","data-node-index":r,"data-node-type":n.type,children:/* @__PURE__ */e("div",i?{ref:ke(r),className:"node-content"+(s?" typewriter-node":""),children:Un(n,`${a}-${r}`,l)}:{className:"node-placeholder",style:{height:`${c}px`}})},`${a}-${r}`)}),Ne]})},function(e,t){if(e.parsedNodes!==t.parsedNodes)return!1;if(e.renderCtx!==t.renderCtx)return!1;if(e.indexPrefix!==t.indexPrefix)return!1;if(e.containerRef!==t.containerRef)return!1;const n=e.props,r=t.props;return n.isDark===r.isDark&&n.typewriter===r.typewriter&&n.batchRendering===r.batchRendering&&n.initialRenderBatchSize===r.initialRenderBatchSize&&n.renderBatchSize===r.renderBatchSize&&n.renderBatchDelay===r.renderBatchDelay&&n.renderBatchBudgetMs===r.renderBatchBudgetMs&&n.renderBatchIdleTimeoutMs===r.renderBatchIdleTimeoutMs&&n.deferNodesUntilVisible===r.deferNodesUntilVisible&&n.maxLiveNodes===r.maxLiveNodes&&n.liveNodeBuffer===r.liveNodeBuffer&&n.viewportPriority===r.viewportPriority&&n.indexKey===r.indexKey&&n.onClick===r.onClick&&n.onMouseOver===r.onMouseOver&&n.onMouseOut===r.onMouseOut}),er=t=>{const n={...Zn,...t},r=c(null),i=c(null),l=u(P,A,A),a=o(()=>I(n.customId),[n.customId,l]),d=o(()=>n.customId?`renderer-${n.customId}`:`renderer-${Date.now()}-${Math.random().toString(36).slice(2)}`,[n.customId]),m=o(()=>Object.keys(a).map(String).map(e=>e.trim().toLowerCase()).filter(Jn),[a]),g=o(()=>{var e,t,r;const o=null!=(t=(null!=(e=n.parseOptions)?e:{}).customHtmlTags)?t:[],i=[...null!=(r=n.customHtmlTags)?r:[],...Array.isArray(o)?o:[],...m].map(Gn).filter(Boolean);return Array.from(new Set(i))},[n.customId,n.customHtmlTags,n.parseOptions,m,l]),f=o(()=>{const e=g;return e&&0!==e.length?h(d,{customHtmlTags:e}):h(d)},[d,g]),w=o(()=>{const e=f;return n.customMarkdownIt?n.customMarkdownIt(e):e},[f,n.customMarkdownIt]),v=o(()=>{var e,t;const r=null!=(e=n.parseOptions)?e:{},o=null!=(t=n.final)?t:r.final,i=null!=o,l=g.length>0;return i||l?{...r,...i?{final:o}:{},...l?{customHtmlTags:g}:{}}:r},[g,n.final,n.parseOptions]),y=o(()=>{var e,t;const r=Boolean(n.debugPerformance)&&"undefined"!=typeof console&&"undefined"!=typeof performance,o=r?performance.now():0;let i=[];return Array.isArray(n.nodes)&&n.nodes.length?i=n.nodes.map(e=>({...e})):n.content&&(i=p(n.content,null!=w?w:Yn,v)),r&&console.info("[markstream-react][perf] parse(sync)",{ms:Math.round(performance.now()-o),nodes:i.length,contentLength:null!=(t=null==(e=n.content)?void 0:e.length)?t:0}),i},[n.content,n.debugPerformance,n.nodes,v,w,n.customId,l,g]);s(()=>{var e,t;if("undefined"==typeof window)return;if(n.renderCodeBlocksAsPre)return;if(!y.some(e=>{var t;return"code_block"===(null==e?void 0:e.type)&&"mermaid"!==ie(String(null!=(t=null==e?void 0:e.language)?t:""))}))return;const r=null!=(e=window.requestIdleCallback)?e:(e,t)=>{var n;return window.setTimeout(()=>e({didTimeout:!0,timeRemaining:()=>0}),null!=(n=null==t?void 0:t.timeout)?n:600)},o=null!=(t=window.cancelIdleCallback)?t:e=>window.clearTimeout(e),i=r(()=>{he()},{timeout:900});return()=>o(i)},[y,n.renderCodeBlocksAsPre]),s(()=>{if("undefined"==typeof window)return;if(n.renderCodeBlocksAsPre)return;const e=n.isDark?n.codeBlockDarkTheme:n.codeBlockLightTheme,t="string"==typeof e?e:"object"==typeof e&&e&&"name"in e?String(e.name):null;t&&i.current!==t&&(i.current=t,function(e){if(null==e)return;const t=function(e){if(null==e)return null;if("string"==typeof e)return e;if("object"==typeof e&&e&&"name"in e)return String(e.name);if("object"==typeof e){const t=Se.get(e);if(t)return t;try{const t=JSON.stringify(e);if(t)return Se.set(e,t),t}catch{}const n="__theme_"+ ++Te;return Se.set(e,n),n}return String(e)}(e);t&&Ne!==t&&(Me=e,Ne=t,Be&&Ce(Me,Be).then(()=>Ee()).catch(()=>{}))}(e))},[n.codeBlockDarkTheme,n.codeBlockLightTheme,n.isDark,n.renderCodeBlocksAsPre]);const x=o(()=>null!=n.indexKey?String(n.indexKey):"markdown-renderer",[n.indexKey]),k=o(()=>({customId:n.customId,isDark:n.isDark,indexKey:x,typewriter:n.typewriter,customComponents:a,renderCodeBlocksAsPre:n.renderCodeBlocksAsPre,codeBlockStream:n.codeBlockStream,codeBlockProps:n.codeBlockProps,codeBlockThemes:{themes:n.themes,monacoOptions:n.codeBlockMonacoOptions,minWidth:n.codeBlockMinWidth,maxWidth:n.codeBlockMaxWidth},events:{onCopy:n.onCopy,onHandleArtifactClick:n.onHandleArtifactClick}}),[n.customId,n.isDark,x,n.typewriter,n.renderCodeBlocksAsPre,n.codeBlockStream,n.codeBlockProps,n.themes,n.codeBlockMonacoOptions,n.codeBlockMinWidth,n.codeBlockMaxWidth,n.onCopy,n.onHandleArtifactClick,a]);/* @__PURE__ */
184
+ return e(E,{getRoot:()=>r.current,enabled:!1!==n.viewportPriority,children:/* @__PURE__ */e(Qn,{props:n,parsedNodes:y,renderCtx:k,indexPrefix:x,containerRef:r})})};function tr(t){var n,r,o,i,l,a;const{node:c,ctx:s,renderNode:d,indexKey:u,children:m}=t;/* @__PURE__ */
185
185
  return e("blockquote",{className:"blockquote-node",dir:"auto",cite:c.cite,children:null!=m?m:s&&d?/* @__PURE__ */e(er,{nodes:c.children||[],indexKey:`blockquote-${String(null!=u?u:"blockquote")}`,customId:s.customId,isDark:s.isDark,typewriter:s.typewriter,viewportPriority:!0,codeBlockStream:s.codeBlockStream,renderCodeBlocksAsPre:s.renderCodeBlocksAsPre,codeBlockProps:s.codeBlockProps,themes:null==(n=s.codeBlockThemes)?void 0:n.themes,codeBlockDarkTheme:null==(r=s.codeBlockThemes)?void 0:r.darkTheme,codeBlockLightTheme:null==(o=s.codeBlockThemes)?void 0:o.lightTheme,codeBlockMonacoOptions:null==(i=s.codeBlockThemes)?void 0:i.monacoOptions,codeBlockMinWidth:null==(l=s.codeBlockThemes)?void 0:l.minWidth,codeBlockMaxWidth:null==(a=s.codeBlockThemes)?void 0:a.maxWidth,onCopy:s.events.onCopy,onHandleArtifactClick:s.events.onHandleArtifactClick}):null})}function nr(r){const l={loading:!0,stream:!0,darkTheme:"vitesse-dark",lightTheme:"vitesse-light",isDark:!1,isShowPreview:!0,enableFontSizeControl:!0,showHeader:!0,showCopyButton:!0,showExpandButton:!0,showPreviewButton:!0,showFontSizeButtons:!0,...r},a=o(()=>{var e;return String(null!=(e=l.node.language)?e:"")},[l.node.language]),u=o(()=>function(e){var t;const[n]=String(null!=e?e:"").split(":");return(null!=(t=null==n?void 0:n.trim().toLowerCase())?t:"")||"plaintext"}(a),[a]),m=o(()=>ie(a),[a]),h=o(()=>{const e=ce[m]||m;return e?e.charAt(0).toUpperCase()+e.slice(1):"Text"},[m]),p=o(()=>ae(m),[m]),{t:g}=K(),f=o(()=>!!l.isShowPreview&&("html"===m||"svg"===m),[m,l.isShowPreview]),w=o(()=>{const e={},t=e=>{if(null!=e)return"number"==typeof e?`${e}px`:String(e)},n=t(l.minWidth),r=t(l.maxWidth);return n&&(e.minWidth=n),r&&(e.maxWidth=r),e},[l.maxWidth,l.minWidth]),[v,y]=i(!1),[x,k]=i(!1),[b,C]=i(!1),[M,N]=i(""),[B,L]=i(!1),[S,T]=i(14),[E,$]=i(S),D=c(null),_=c(null),j=c(null),W=c(null),P=c(!1),A=d(()=>l.isDark?l.darkTheme:l.lightTheme,[l.darkTheme,l.isDark,l.lightTheme]),O=d(e=>{if(!e)return N(""),void L(!1);var t;N(`<pre class="shiki shiki-fallback"><code>${t=e,t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}</code></pre>`),L(!1)},[]),I=d(()=>{N(""),L(!0)},[]),R=d(async()=>{if(!W.current&&!P.current){P.current=!0;try{const e=await import("stream-markdown");W.current=e.createShikiStreamRenderer}catch{}}},[]),H=d(async()=>{if(await R(),D.current&&_.current)if(!j.current&&W.current&&(j.current=W.current(_.current,{theme:A(),themes:l.themes}),L(!0)),j.current)if(!1===l.stream&&l.loading)O(l.node.code);else{O(l.node.code);try{await j.current.updateCode(l.node.code,u),I()}catch{}}else O(l.node.code);else O(l.node.code)},[I,R,A,u,l.loading,l.node.code,l.stream,l.themes,O]);s(()=>(H(),()=>{var e;null==(e=j.current)||e.dispose(),j.current=null}),[H]),s(()=>{j.current&&j.current.setTheme(A())},[A]),s(()=>{j.current&&(!1===l.stream&&l.loading||(O(l.node.code),Promise.resolve(j.current.updateCode(l.node.code,u)).then(()=>I()).catch(()=>{})))},[I,u,l.loading,l.node.code,l.stream,O]);const z=d((e,t)=>{ee(e.currentTarget,t,"top",!1,(e.clientX,e.clientY),l.isDark)},[l.isDark]),F=d(()=>te(),[]),V=d(async()=>{var e;try{"undefined"!=typeof navigator&&navigator.clipboard&&"function"==typeof navigator.clipboard.writeText&&await navigator.clipboard.writeText(l.node.code),y(!0),null==(e=l.onCopy)||e.call(l,l.node.code),setTimeout(()=>y(!1),1e3)}catch{}},[l]),X=d(()=>{var e;if(!f)return;const t="html"===u?"text/html":"image/svg+xml",n="html"===u?"HTML Preview":"SVG Preview";null==(e=l.onPreviewCode)||e.call(l,{type:t,content:l.node.code,title:n})},[f,u,l]),q=o(()=>({fontSize:`${E}px`}),[E]);return s(()=>{T(14),$(14)},[]),/* @__PURE__ */n("div",{className:["code-block-container my-4 rounded-lg border overflow-hidden shadow-sm",l.isDark?"border-gray-700/30 bg-gray-900 is-dark":"border-gray-200 bg-white"].join(" "),style:w,children:[l.showHeader&&/* @__PURE__ */n("div",{className:"code-block-header flex justify-between items-center px-4 py-2.5 border-b border-gray-400/5",style:{color:"var(--vscode-editor-foreground)",backgroundColor:"var(--vscode-editor-background)"},children:[
186
186
  /* @__PURE__ */n("div",{className:"flex items-center space-x-2",children:[
187
187
  /* @__PURE__ */e("span",{className:"icon-slot h-4 w-4 flex-shrink-0",dangerouslySetInnerHTML:{__html:p}}),
package/dist/tailwind.ts CHANGED
@@ -1,3 +1,3 @@
1
- export const safeList = `string cannot delete global call clearGlobalCustomComponents blockquote-node auto react note is-dark data-index-key headerId admonition-header admonition-icon admonition-title admonition-toggle aria-expanded aria-controls collapsed admonition-content aria-labelledby stream-markdown-parser typeof window.requestIdleCallback [data-node-index] node-spacer dark virtualized code_block node-slot data-node-index data-node-type typewriter-node node-placeholder performance [markstream-react][perf] mermaid theme object name markdown-renderer checkbox-node checkbox checkbox-input emoji-node react-dom en utf-8 viewport content="width=device-width initial-scale=1 event.key keydown html-preview-frame__backdrop--dark html-preview-frame--dark html-preview-frame__header html-preview-frame__title html-preview-frame__dot html-preview-frame__label html-preview-frame__close--dark html-preview-frame__iframe allow-scripts allow-same-origin emphasis-node smooth footnote-anchor text-sm text-[#0366d6] hover:underline cursor-pointer ↩︎ dl definition-list indexKey mb-4 dt definition-term font-semibold ctx renderNode ?? definition dd definition-desc ml-4 footnote-node flex mt-2 mb-2 leading-relaxed border-t border-[#eaecef] pt-2 flex-1 hard-break clsx heading-node plaintext number diff none visible view.getModifiedEditor on same helpers.cleanupEditor canonicalLanguage single window.requestAnimationFrame window.cancelAnimationFrame top navigator.clipboard navigator.clipboard.writeText code-block-container my-4 rounded-lg border overflow-hidden shadow-sm border-gray-700/30 bg-gray-900 border-gray-200 bg-white is-rendering code-block-header justify-between items-center px-4 py-2.5 border-b border-gray-400/5 space-x-2 icon-slot h-4 w-4 flex-shrink-0 font-medium font-mono truncate code-action-btn p-2 text-xs rounded-md transition-colors hover:bg-[var(--vscode-editor-selectionBackground)] aria-pressed w-3 h-3 currentColor round m9 copied m14 evenodd code-block-body--collapsed code-block-body--expanded code-height-placeholder hidden aria-hidden absolute code-fallback-plain m-0 aria-busy aria-label no code-loading-placeholder loading-skeleton skeleton-line short sr-only polite status footnote-reference handleScroll href footnote footnote-link mark highlight-node onclick onerror onload onmouseover onmouseout onmousedown onmouseup onkeydown onkeyup onfocus onblur onsubmit onreset onchange onselect ondblclick src srcset xlink:href formaction abbr address area article aside bdi bdo caption cite col colgroup data datalist details dfn dialog embed fieldset footer header hgroup kbd legend main map menu meter nav optgroup output param picture progress rp rt ruby samp section small source summary template tfoot time track var wbr class text tag_close self_closing tag_open setHostEl html-block-node shouldRender useDynamic reactNodes renderContent html-block-node__placeholder html-block-node__placeholder-bar w-4/5 w-2/3 setFigureEl image-node image-node__inner is-loaded contain lazy eager async image image-node__placeholder image-node__spinner image-node__placeholder-text image… placeholder image-node__error failed to load image-node__caption inline-code inline text-[85%] px-1 py-0.5 rounded bg-[hsl(var(--secondary))] whitespace-normal break-words max-w-full insert-node list-node my-5 pl-[calc(13/8*1em)] list-decimal list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)] list linear infinite link-loading inline-flex items-baseline gap-1.5 link-text-wrapper relative leading-[normal] link-text node.text underline-anim link-node noopener noreferrer list-item pl-1.5 my-2 valueAttr children library render text-red-500 p-4">Failed instanceof error.message error transform ease center fullscreen touches text-gray-400 hover:bg-gray-700 hover:text-gray-200 text-gray-600 hover:bg-gray-200 hover:text-gray-700 bg-gray-800 bg-gray-50 gap-x-2 gap-x-1 p-0.5 bg-gray-700 bg-gray-100 px-2.5 py-1 !showSource bg-gray-600 text-gray-200 text-gray-700 text-gray-500 showSource m16 isCollapsed opacity-50 cursor-not-allowed m7 whitespace-pre-wrap text-gray-300 baseCode top-2 right-2 z-10 gap-2 backdrop-blur min-h-[360px] transition-all duration-100 block inset-0 cursor-grab isDragging containerRef w-full text-center justify-center min-h-full fixed z-50 bg-black/70 p-4 closeModal h-full max-h-full shadow-lg top-6 right-6 !isDragging cursor-grabbing right text-right text-left table-node-wrapper my-8 table-node table-node--loading border-[var(--table-border,#cbd5e1)] p-[calc(4/7*1em)] table-node__loading table-node__spinner paragraph-node paragraph strikethrough-node unknown-node italic node strong-node subscript-node vitesse-dark vitesse-light shiki shiki-fallback stream-markdown code-block-content rendererTargetRef code-block-render hr-node thematic-break in out zoom text-node text-node-center reference-node bg-[hsl(var(--muted))] px-1.5 mx-0.5 hover:bg-[hsl(var(--secondary))] superscript-node boolean window.matchMedia ms-tooltip z-[9999] inline-block text-base py-2 px-3 shadow-md whitespace-nowrap pointer-events-none tooltip-element text-white border-gray-700 text-gray-900 tooltip containerClass vmr-container infographic html_block node.type html_inline text_special node.content heading list_item definition_list footnote_reference footnote_anchor admonition hardbreak inline_code emphasis strikethrough highlight insert subscript superscript checkbox_input emoji thematic_break math_inline math_block reference vmr_container label_open label_close afterbegin light loose strict viewBox open-modal [data-mermaid-wrapper] mermaid-action-btn toggle-mode preview common.zoomIn common.zoomOut common.resetZoom data-mermaid-wrapper mermaid-loading mermaid-spinner diagram… mermaid-block-header space-x-1 common.preview common.source common.export mermaid-error mermaid-block mermaid-modal-overlay mermaid-modal-panel mermaid-modal-header mermaid-modal-title mermaid-modal-close mermaid-modal-body modalContentRef mermaid-modal-content not available default abort timed javascript typescript python shell plain cpp markdown [mermaidWorkerClient] messageerror cleared worker instance inject via busy canParse findPrefix stream-monaco thinking htmlFor className data-language document role aria-describedby ontouchstart ontouchend ontouchmove ontouchcancel onwheel onscroll oncopy oncut onpaste oninput oninvalid onsearch checked disabled readonly required autofocus multiple value min max step width height size maxlength parse dynamic html-inline-node html-inline-node--loading $$ math-inline-wrapper mathRef math-inline--hidden math-inline__loading math-inline__spinner math-block overflow-x-auto min-h-[40px] rendering math-rendering globalThis.requestAnimationFrame globalThis.cancelAnimationFrame module did expected [markstream-react] [katexWorkerClient] init cache-hit timeout waiting slot existingEnv.getWorkerUrl katex`
1
+ export const safeList = `string cannot delete global call clearGlobalCustomComponents emoji-node checkbox-node checkbox checkbox-input blockquote-node auto footnote-node flex mt-2 mb-2 text-sm leading-relaxed border-t border-[#eaecef] pt-2 flex-1 emphasis-node react react-dom en utf-8 viewport content="width=device-width initial-scale=1 event.key keydown html-preview-frame__backdrop--dark html-preview-frame--dark html-preview-frame__header html-preview-frame__title html-preview-frame__dot html-preview-frame__label html-preview-frame__close--dark html-preview-frame__iframe allow-scripts allow-same-origin clsx heading-node font-semibold object smooth footnote-anchor text-[#0366d6] hover:underline cursor-pointer ↩︎ footnote-reference handleScroll href footnote footnote-link dl definition-list indexKey mb-4 dt definition-term ctx renderNode ?? definition dd definition-desc ml-4 note is-dark data-index-key headerId admonition-header admonition-icon admonition-title admonition-toggle aria-expanded aria-controls collapsed admonition-content aria-labelledby stream-markdown-parser typeof window.requestIdleCallback [data-node-index] node-spacer dark virtualized code_block node-slot data-node-index data-node-type typewriter-node node-placeholder performance [markstream-react][perf] mermaid theme name markdown-renderer plaintext number diff none visible view.getModifiedEditor on same helpers.cleanupEditor canonicalLanguage single window.requestAnimationFrame window.cancelAnimationFrame top navigator.clipboard navigator.clipboard.writeText code-block-container my-4 rounded-lg border overflow-hidden shadow-sm border-gray-700/30 bg-gray-900 border-gray-200 bg-white is-rendering code-block-header justify-between items-center px-4 py-2.5 border-b border-gray-400/5 space-x-2 icon-slot h-4 w-4 flex-shrink-0 font-medium font-mono truncate code-action-btn p-2 text-xs rounded-md transition-colors hover:bg-[var(--vscode-editor-selectionBackground)] aria-pressed w-3 h-3 currentColor round m9 copied m14 evenodd code-block-body--collapsed code-block-body--expanded code-height-placeholder hidden aria-hidden absolute code-fallback-plain m-0 aria-busy aria-label no code-loading-placeholder loading-skeleton skeleton-line short sr-only polite status hard-break mark highlight-node onclick onerror onload onmouseover onmouseout onmousedown onmouseup onkeydown onkeyup onfocus onblur onsubmit onreset onchange onselect ondblclick src srcset xlink:href formaction abbr address area article aside bdi bdo caption cite col colgroup data datalist details dfn dialog embed fieldset footer header hgroup kbd legend main map menu meter nav optgroup output param picture progress rp rt ruby samp section small source summary template tfoot time track var wbr class text tag_close self_closing tag_open setHostEl html-block-node shouldRender useDynamic reactNodes renderContent html-block-node__placeholder html-block-node__placeholder-bar w-4/5 w-2/3 setFigureEl image-node image-node__inner is-loaded contain lazy eager async image image-node__placeholder image-node__spinner image-node__placeholder-text image… placeholder image-node__error failed to load image-node__caption list-item pl-1.5 my-2 valueAttr children list-node my-5 pl-[calc(13/8*1em)] list-decimal list-disc max-lg:my-[calc(4/3*1em)] max-lg:pl-[calc(14/9*1em)] list inline-code inline text-[85%] px-1 py-0.5 rounded bg-[hsl(var(--secondary))] whitespace-normal break-words max-w-full linear infinite link-loading inline-flex items-baseline gap-1.5 link-text-wrapper relative leading-[normal] link-text node.text underline-anim link-node noopener noreferrer library render text-red-500 p-4">Failed instanceof error.message error transform ease center fullscreen touches text-gray-400 hover:bg-gray-700 hover:text-gray-200 text-gray-600 hover:bg-gray-200 hover:text-gray-700 bg-gray-800 bg-gray-50 gap-x-2 gap-x-1 p-0.5 bg-gray-700 bg-gray-100 px-2.5 py-1 !showSource bg-gray-600 text-gray-200 text-gray-700 text-gray-500 showSource m16 isCollapsed opacity-50 cursor-not-allowed m7 whitespace-pre-wrap text-gray-300 baseCode top-2 right-2 z-10 gap-2 backdrop-blur min-h-[360px] transition-all duration-100 block inset-0 cursor-grab isDragging containerRef w-full text-center justify-center min-h-full fixed z-50 bg-black/70 p-4 closeModal h-full max-h-full shadow-lg top-6 right-6 !isDragging cursor-grabbing insert-node unknown-node italic node paragraph-node paragraph vitesse-dark vitesse-light shiki shiki-fallback stream-markdown code-block-content rendererTargetRef code-block-render afterbegin light loose strict viewBox open-modal [data-mermaid-wrapper] mermaid-action-btn toggle-mode preview common.zoomIn common.zoomOut common.resetZoom data-mermaid-wrapper mermaid-loading mermaid-spinner diagram… mermaid-block-header space-x-1 common.preview common.source common.export mermaid-error mermaid-block mermaid-modal-overlay mermaid-modal-panel mermaid-modal-header mermaid-modal-title mermaid-modal-close mermaid-modal-body modalContentRef mermaid-modal-content not available default abort timed out reference-node bg-[hsl(var(--muted))] px-1.5 mx-0.5 hover:bg-[hsl(var(--secondary))] subscript-node right text-right text-left table-node-wrapper my-8 table-node table-node--loading border-[var(--table-border,#cbd5e1)] p-[calc(4/7*1em)] table-node__loading table-node__spinner hr-node thematic-break superscript-node strikethrough-node text-node text-node-center strong-node containerClass vmr-container boolean window.matchMedia ms-tooltip z-[9999] inline-block text-base py-2 px-3 shadow-md whitespace-nowrap pointer-events-none tooltip-element text-white border-gray-700 text-gray-900 tooltip in zoom infographic html_block node.type html_inline text_special node.content heading list_item definition_list footnote_reference footnote_anchor admonition hardbreak inline_code emphasis strikethrough highlight insert subscript superscript checkbox_input emoji thematic_break math_inline math_block reference vmr_container label_open label_close javascript typescript python shell plain cpp markdown stream-monaco [mermaidWorkerClient] messageerror cleared worker instance inject via busy canParse findPrefix thinking htmlFor className document data-language role aria-describedby ontouchstart ontouchend ontouchmove ontouchcancel onwheel onscroll oncopy oncut onpaste oninput oninvalid onsearch checked disabled readonly required autofocus multiple value min max step width height size maxlength parse dynamic html-inline-node html-inline-node--loading math-block overflow-x-auto min-h-[40px] mathRef rendering math-rendering $$ math-inline-wrapper math-inline--hidden math-inline__loading math-inline__spinner globalThis.requestAnimationFrame globalThis.cancelAnimationFrame module did expected [markstream-react] [katexWorkerClient] init cache-hit timeout waiting slot existingEnv.getWorkerUrl katex`
2
2
  module.exports = safeList;
3
3
  export default safeList;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "markstream-react",
3
3
  "type": "module",
4
- "version": "0.0.19",
4
+ "version": "0.0.20-beta.1",
5
5
  "description": "React Markdown renderer optimized for large documents with progressive Mermaid rendering, streaming diff code blocks, and fast real-time preview. Built on stream-markdown AST for consistent rendering across frameworks. Perfect for documentation sites, AI chat interfaces, and content management systems.",
6
6
  "author": "Simon He",
7
7
  "license": "MIT",
@@ -80,7 +80,7 @@
80
80
  "mermaid": ">=11",
81
81
  "react": ">=18",
82
82
  "react-dom": ">=18",
83
- "stream-markdown": ">=0.0.13",
83
+ "stream-markdown": ">=0.0.14",
84
84
  "stream-monaco": ">=0.0.15"
85
85
  },
86
86
  "peerDependenciesMeta": {
@@ -101,15 +101,15 @@
101
101
  }
102
102
  },
103
103
  "dependencies": {
104
- "@floating-ui/dom": "^1.7.4",
104
+ "@floating-ui/dom": "^1.7.5",
105
105
  "clsx": "^2.1.1",
106
- "stream-markdown-parser": "0.0.59-beta.6"
106
+ "stream-markdown-parser": "0.0.59-beta.7"
107
107
  },
108
108
  "devDependencies": {
109
109
  "@types/react": "^18.3.27",
110
110
  "@types/react-dom": "^18.3.7",
111
111
  "@vitejs/plugin-react-swc": "^3.11.0",
112
- "autoprefixer": "^10.4.23",
112
+ "autoprefixer": "^10.4.24",
113
113
  "rollup": "^3.29.5",
114
114
  "rollup-plugin-dts": "^5.3.1",
115
115
  "tailwindcss": "^3.4.19",