rdesign/frontend/node_modules/streamdown/dist/code-block-LUI4OL5H.js

3 lines
4.3 KiB
JavaScript

"use client";
import {a,f as f$1,j as j$1,b as b$1,e,d as d$1}from'./chunk-ZKROPTWQ.js';import {memo,useMemo,useContext,useState,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';import {createHighlighter}from'shiki';import {createJavaScriptRegexEngine}from'shiki/engine/javascript';var M=a("block","before:content-[counter(line)]","before:inline-block","before:[counter-increment:line]","before:w-6","before:mr-4","before:text-[13px]","before:text-right","before:text-muted-foreground/50","before:font-mono","before:select-none"),x=memo(({children:t,result:e,language:n,className:r,...s})=>{let o=useMemo(()=>({backgroundColor:e.bg,color:e.fg}),[e.bg,e.fg]);return jsx("pre",{className:a(r,"p-4 text-sm dark:bg-(--shiki-dark-bg)!"),"data-language":n,"data-streamdown":"code-block-body",style:o,...s,children:jsx("code",{className:"[counter-increment:line_0] [counter-reset:line]",children:e.tokens.map((a,c)=>jsx("span",{className:M,children:a.map((i,g)=>jsx("span",{className:"dark:bg-(--shiki-dark-bg)! dark:text-(--shiki-dark)!",style:{color:i.color,backgroundColor:i.bgColor,...i.htmlStyle},...i.htmlAttrs,children:i.content},g))},c))})})},(t,e)=>t.result===e.result&&t.language===e.language&&t.className===e.className);var N=({className:t,language:e,style:n,...r})=>jsx("div",{className:a("my-4 w-full overflow-hidden rounded-xl border border-border",t),"data-language":e,"data-streamdown":"code-block",style:{contentVisibility:"auto",containIntrinsicSize:"auto 200px",...n},...r});var H=({language:t,children:e})=>jsxs("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs","data-language":t,"data-streamdown":"code-block-header",children:[jsx("span",{className:"ml-1 font-mono lowercase",children:t}),jsx("div",{className:"flex items-center gap-2",children:e})]});var I=f$1.dependencies.shiki.replace(/^\^/,""),D=`/cdn/shiki/${I}/langs`,F=5e3,h=new Map,P=new Set,K=/JSON\.parse\(("(?:[^"\\]|\\.)*")\)/;async function $(t,e,n=F){if(e===null)return null;let r=e!=null?e:D,s=`${r}/${t}`;if(h.has(s))return h.get(s);if(P.has(s))return null;try{let o=`${r}/${t}.mjs`,a=new AbortController,c=setTimeout(()=>a.abort(),n),i=await fetch(o,{signal:a.signal});if(clearTimeout(c),!i.ok)throw new Error(`HTTP ${i.status}: ${i.statusText}`);let g=await i.text();try{let l=g.match(K);if(!l)throw new Error("Could not find JSON.parse() in CDN response");let u=JSON.parse(l[1]),y=[JSON.parse(u)];return h.set(s,y),y}catch(l){throw new Error(`Failed to parse language grammar: ${l instanceof Error?l.message:"Unknown error"}`)}}catch(o){P.add(s);let a=o instanceof Error?o.message:"Unknown error";return console.warn(`[Streamdown] Failed to load language "${t}" from CDN: ${a}`),null}}var U=createJavaScriptRegexEngine({forgiving:true}),f=new Map,k=new Map,d=new Map,j=(t,e)=>`${t}-${e[0]}-${e[1]}`,G=(t,e,n)=>{let r=t.slice(0,100),s=t.length>100?t.slice(-100):"";return `${e}:${n[0]}:${n[1]}:${t.length}:${r}:${s}`};async function V(t,e$1){if(e(t))return d$1[t];let n=await $(t,e$1);return n||console.warn(`[Streamdown] Language "${t}" not found in bundled languages or CDN. Falling back to plain text.`),n}var z=(t,e,n)=>{let r=j(t,e);if(f.has(r))return f.get(r);let s=(async()=>{let o=await V(t,n);return await createHighlighter({themes:e,langs:o?[o]:["text"],engine:U})})();return f.set(r,s),s},b=({code:t,language:e,shikiTheme:n,cdnUrl:r,callback:s})=>{let o=G(t,e,n);return k.has(o)?k.get(o):(s&&(d.has(o)||d.set(o,new Set),d.get(o).add(s)),z(e,n,r).then(a=>{let i=a.getLoadedLanguages().includes(e)?e:"text",g=a.codeToTokens(t,{lang:i,themes:{light:n[0],dark:n[1]}});k.set(o,g);let l=d.get(o);if(l){for(let u of l)u(g);d.delete(o);}}).catch(a=>{console.error("Failed to highlight code:",a),d.delete(o);}),null)};var we=({code:t,language:e,className:n,children:r,...s})=>{let{shikiTheme:o,cdnUrl:a}=useContext(j$1),c=useMemo(()=>({bg:"transparent",fg:"inherit",tokens:t.split(`
`).map(l=>[{content:l,color:"inherit",bgColor:"transparent",htmlStyle:{},offset:0}])}),[t]),[i,g]=useState(c);return useEffect(()=>{let l=b({code:t,language:e,shikiTheme:o,cdnUrl:a});if(l){g(l);return}b({code:t,language:e,shikiTheme:o,cdnUrl:a,callback:u=>{g(u);}});},[t,e,o,a]),jsx(b$1.Provider,{value:{code:t},children:jsxs(N,{language:e,children:[jsx(H,{language:e,children:r}),jsx(x,{className:n,language:e,result:i,...s})]})})};export{we as CodeBlock};