hd-garden 0.6.1 → 0.7.0

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.
Files changed (45) hide show
  1. package/app/admin/preview/[...path]/page.tsx +1 -1
  2. package/app/blog/[...path]/page.tsx +2 -2
  3. package/app/columns/[column]/[...path]/page.tsx +2 -2
  4. package/app/components/ArticleMeasure.tsx +39 -4
  5. package/app/components/GardenDocsNav.tsx +184 -0
  6. package/app/components/MarkdownArticle.tsx +7 -6
  7. package/app/components/SiteChrome.tsx +1 -1
  8. package/app/components/SiteFooter.tsx +10 -3
  9. package/app/garden/[...slug]/page.tsx +148 -0
  10. package/app/garden/page.tsx +61 -128
  11. package/app/garden-modules.d.ts +15 -0
  12. package/app/globals.css +10 -10
  13. package/app/lib/content.ts +16 -10
  14. package/app/lib/garden-docs-meta.ts +83 -0
  15. package/app/lib/heading-number.ts +13 -0
  16. package/app/styles/a2.css +531 -0
  17. package/docs/handbook/assets/reading-layout.svg +26 -0
  18. package/docs/handbook/components/card.md +44 -0
  19. package/docs/handbook/components/chart.md +52 -0
  20. package/docs/handbook/components/compare.md +40 -0
  21. package/docs/handbook/components/figure.md +70 -0
  22. package/docs/handbook/components/file/checklist.md +17 -0
  23. package/docs/handbook/components/file.md +32 -0
  24. package/docs/handbook/components/html.md +67 -0
  25. package/docs/handbook/components/interactive.md +65 -0
  26. package/docs/handbook/components/stat.md +55 -0
  27. package/docs/handbook/components/timeline.md +50 -0
  28. package/docs/handbook/components.md +30 -0
  29. package/docs/handbook/config.md +125 -0
  30. package/docs/handbook/deploy.md +273 -0
  31. package/docs/handbook/design.md +81 -0
  32. package/docs/handbook/index.md +92 -0
  33. package/docs/handbook/start.md +92 -0
  34. package/docs/handbook/workflow.md +81 -0
  35. package/docs/handbook/writing.md +148 -0
  36. package/package.json +2 -1
  37. package/scripts/build-content.mjs +124 -15
  38. package/scripts/handbook-allowlist.mjs +68 -0
  39. package/scripts/handbook-facts.mjs +1104 -0
  40. package/site.config.yaml +2 -2
  41. package/templates/garden-blocks.md +1 -1
  42. package/templates/site/package.json +1 -3
  43. package/ui/garden/catalog.mjs +1 -1
  44. package/ui/preview/dist/garden-ui.esm.js +1 -1
  45. package/ui/preview/dist/garden-ui.iife.js +1 -1
package/site.config.yaml CHANGED
@@ -42,7 +42,7 @@ pages:
42
42
  href: /blog
43
43
  label: 浏览博文
44
44
  garden:
45
- title: "用 Markdown 写。\n推送之后,网站自己更新。"
46
- subtitle: ""
45
+ title: "用 Markdown 写丨推送之后网站自己更新"
46
+ subtitle: "用 Markdown 写文章、随想和专栏,保存在自己的 Git 仓库里。"
47
47
 
48
48
  footer: 持续记录。
@@ -40,7 +40,7 @@ items:
40
40
 
41
41
  ## compare · 对比
42
42
 
43
- 两三件东西并排,每格大约 60 字以内。原文是「X:Y」的列表时,每格写成一行带引号的字符串,冒号前是标题,冒号原样显示。
43
+ 两三件东西并排,每格约 60 字以内。原文是「X:Y」列表时,每格写成一行带引号的「X:Y」。
44
44
 
45
45
  不该用:任何一格超过约 60 字时,用原文的列表,不要并排。
46
46
 
@@ -13,7 +13,5 @@
13
13
  "pages:validate": "garden pages:validate",
14
14
  "pages:prepare": "garden pages:prepare"
15
15
  },
16
- "dependencies": {
17
- "hd-garden": "^0.3.3",
18
- }
16
+ "dependencies": {}
19
17
  }
@@ -43,7 +43,7 @@ items:
43
43
  },
44
44
  compare: {
45
45
  label: "对比",
46
- when: "两三件东西并排,每格大约 60 字以内。原文是「X:Y」的列表时,每格写成一行带引号的字符串,冒号前是标题,冒号原样显示。",
46
+ when: "两三件东西并排,每格约 60 字以内。原文是「X:Y」列表时,每格写成一行带引号的「X:Y」。",
47
47
  whenNot: "任何一格超过约 60 字时,用原文的列表,不要并排。",
48
48
  keys: ["items"],
49
49
  itemKeys: ["title", "text"],
@@ -305,7 +305,7 @@ ${e}</tr>
305
305
  `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
306
306
  `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${lr(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let i=this.parser.parseInline(n),r=Yk(e);if(r===null)return i;e=r;let a='<a href="'+e+'"';return t&&(a+=' title="'+lr(t)+'"'),a+=">"+i+"</a>",a}image({href:e,title:t,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let r=Yk(e);if(r===null)return lr(n);e=r;let a=`<img src="${e}" alt="${n}"`;return t&&(a+=` title="${lr(t)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:lr(e.text)}},ly=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},Mi=class Z0{constructor(t){Ze(this,"options");Ze(this,"renderer");Ze(this,"textRenderer");this.options=t||bs,this.options.renderer=this.options.renderer||new Xh,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new ly}static parse(t,n){return new Z0(n).parse(t)}static parseInline(t,n){return new Z0(n).parseInline(t)}parse(t,n=!0){let i="";for(let r=0;r<t.length;r++){let a=t[r];if(this.options.extensions?.renderers?.[a.type]){let l=a,u=this.options.extensions.renderers[l.type].call({parser:this},l);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(l.type)){i+=u||"";continue}}let s=a;switch(s.type){case"space":{i+=this.renderer.space(s);continue}case"hr":{i+=this.renderer.hr(s);continue}case"heading":{i+=this.renderer.heading(s);continue}case"code":{i+=this.renderer.code(s);continue}case"table":{i+=this.renderer.table(s);continue}case"blockquote":{i+=this.renderer.blockquote(s);continue}case"list":{i+=this.renderer.list(s);continue}case"html":{i+=this.renderer.html(s);continue}case"def":{i+=this.renderer.def(s);continue}case"paragraph":{i+=this.renderer.paragraph(s);continue}case"text":{let l=s,u=this.renderer.text(l);for(;r+1<t.length&&t[r+1].type==="text";)l=t[++r],u+=`
307
307
  `+this.renderer.text(l);n?i+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):i+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return i}parseInline(t,n=this.renderer){let i="";for(let r=0;r<t.length;r++){let a=t[r];if(this.options.extensions?.renderers?.[a.type]){let l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){i+=l||"";continue}}let s=a;switch(s.type){case"escape":{i+=n.text(s);break}case"html":{i+=n.html(s);break}case"link":{i+=n.link(s);break}case"image":{i+=n.image(s);break}case"strong":{i+=n.strong(s);break}case"em":{i+=n.em(s);break}case"codespan":{i+=n.codespan(s);break}case"br":{i+=n.br(s);break}case"del":{i+=n.del(s);break}case"text":{i+=n.text(s);break}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return i}},Kh,zo=(Kh=class{constructor(e){Ze(this,"options");Ze(this,"block");this.options=e||bs}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?Oi.lex:Oi.lexInline}provideParser(){return this.block?Mi.parse:Mi.parseInline}},Ze(Kh,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens","emStrongMask"])),Ze(Kh,"passThroughHooksRespectAsync",new Set(["preprocess","postprocess","processAllTokens"])),Kh),H4=class{constructor(...e){Ze(this,"defaults",W0());Ze(this,"options",this.setOptions);Ze(this,"parse",this.parseMarkdown(!0));Ze(this,"parseInline",this.parseMarkdown(!1));Ze(this,"Parser",Mi);Ze(this,"Renderer",Xh);Ze(this,"TextRenderer",ly);Ze(this,"Lexer",Oi);Ze(this,"Tokenizer",Qh);Ze(this,"Hooks",zo);this.use(...e)}walkTokens(e,t){let n=[];for(let i of e)switch(n=n.concat(t.call(this,i)),i.type){case"table":{let r=i;for(let a of r.header)n=n.concat(this.walkTokens(a.tokens,t));for(let a of r.rows)for(let s of a)n=n.concat(this.walkTokens(s.tokens,t));break}case"list":{let r=i;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=i;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(a=>{let s=r[a].flat(1/0);n=n.concat(this.walkTokens(s,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let a=t.renderers[r.name];a?t.renderers[r.name]=function(...s){let l=r.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=t[r.level];a?a.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),i.extensions=t),n.renderer){let r=this.defaults.renderer||new Xh(this.defaults);for(let a in n.renderer){if(!(a in r))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=n.renderer[s],u=r[s];r[s]=(...o)=>{let h=l.apply(r,o);return h===!1&&(h=u.apply(r,o)),h||""}}i.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Qh(this.defaults);for(let a in n.tokenizer){if(!(a in r))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=n.tokenizer[s],u=r[s];r[s]=(...o)=>{let h=l.apply(r,o);return h===!1&&(h=u.apply(r,o)),h}}i.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new zo;for(let a in n.hooks){if(!(a in r))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=n.hooks[s],u=r[s];zo.passThroughHooks.has(a)?r[s]=o=>{if(this.defaults.async&&zo.passThroughHooksRespectAsync.has(a))return(async()=>{let c=await l.call(r,o);return u.call(r,c)})();let h=l.call(r,o);return u.call(r,h)}:r[s]=(...o)=>{if(this.defaults.async)return(async()=>{let c=await l.apply(r,o);return c===!1&&(c=await u.apply(r,o)),c})();let h=l.apply(r,o);return h===!1&&(h=u.apply(r,o)),h}}i.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,a=n.walkTokens;i.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),r&&(l=l.concat(r.call(this,s))),l}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Oi.lex(e,t??this.defaults)}parser(e,t){return Mi.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let i={...n},r={...this.defaults,...i},a=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let s=r.hooks?await r.hooks.preprocess(t):t,l=await(r.hooks?await r.hooks.provideLexer():e?Oi.lex:Oi.lexInline)(s,r),u=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(u,r.walkTokens));let o=await(r.hooks?await r.hooks.provideParser():e?Mi.parse:Mi.parseInline)(u,r);return r.hooks?await r.hooks.postprocess(o):o})().catch(a);try{r.hooks&&(t=r.hooks.preprocess(t));let s=(r.hooks?r.hooks.provideLexer():e?Oi.lex:Oi.lexInline)(t,r);r.hooks&&(s=r.hooks.processAllTokens(s)),r.walkTokens&&this.walkTokens(s,r.walkTokens);let l=(r.hooks?r.hooks.provideParser():e?Mi.parse:Mi.parseInline)(s,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(s){return a(s)}}}onError(e,t){return n=>{if(n.message+=`
308
- Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+lr(n.message+"",!0)+"</pre>";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}},ys=new H4;function Ye(e,t){return ys.parse(e,t)}Ye.options=Ye.setOptions=function(e){return ys.setOptions(e),Ye.defaults=ys.defaults,Qk(Ye.defaults),Ye};Ye.getDefaults=W0;Ye.defaults=bs;Ye.use=function(...e){return ys.use(...e),Ye.defaults=ys.defaults,Qk(Ye.defaults),Ye};Ye.walkTokens=function(e,t){return ys.walkTokens(e,t)};Ye.parseInline=ys.parseInline;Ye.Parser=Mi;Ye.parser=Mi.parse;Ye.Renderer=Xh;Ye.TextRenderer=ly;Ye.Lexer=Oi;Ye.lexer=Oi.lex;Ye.Tokenizer=Qh;Ye.Hooks=zo;Ye.parse=Ye;var AU=Ye.options,CU=Ye.setOptions,NU=Ye.use,_U=Ye.walkTokens,OU=Ye.parseInline;var MU=Mi.parse,LU=Oi.lex;var Ra=Fe(Yn(),1);var lE=["card","stat","compare","timeline","chart","figure","html","interactive","file"];var uE={card:{label:"\u8D44\u6E90\u5361",when:"\u4E00\u7BC7\u8BBA\u6587\u3001\u4E00\u4E2A\u4ED3\u5E93\u6216\u4E00\u672C\u4E66\uFF0C\u8BFB\u8005\u9700\u8981\u6807\u9898\u3001\u94FE\u63A5\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6B63\u6587\u91CC\u5DF2\u7ECF\u6709\u8FD9\u53E5\u8BDD\u65F6\uFF0C\u4E0D\u8981\u518D\u5305\u4E00\u5F20\u5361\u3002",keys:["url","title","description","image","alt","points","meta","text","source","site","items"],example:"```garden card\nurl: https://arxiv.org/abs/2309.06180\ntitle: PagedAttention\ndescription: vLLM \u7684\u5206\u9875 KV \u7BA1\u7406\u3002\n```",triggers:["gcard"]},stat:{label:"\u6307\u6807",when:"\u4E00\u4E2A\u77ED\u6307\u6807\uFF1A\u6807\u7B7E\u3001\u6570\u5B57\u3001\u53EF\u9009\u7684\u4E00\u53E5\u8BF4\u660E\u548C\u6765\u6E90\u3002",whenNot:"\u6570\u5B57\u9700\u8981\u8BFB\u8005\u81EA\u5DF1\u4EE3\u5165\u53C2\u6570\u65F6\uFF0C\u5199\u6210\u60F3\u6CD5\uFF0C\u4E0D\u8981\u505A\u9759\u6001\u6307\u6807\u3002",keys:["items","label","value","unit","caption","source","text"],example:"```garden stat\nitems:\n - label: Llama-2-13B \xB7 4K \u4E0A\u4E0B\u6587\n value: 3.2\n unit: GiB\n source: https://arxiv.org/abs/2309.06180\n```",triggers:["gstat"]},compare:{label:"\u5BF9\u6BD4",when:"\u4E24\u4E09\u4EF6\u4E1C\u897F\u5E76\u6392\uFF0C\u6BCF\u683C\u5927\u7EA6 60 \u5B57\u4EE5\u5185\u3002\u539F\u6587\u662F\u300CX\uFF1AY\u300D\u7684\u5217\u8868\u65F6\uFF0C\u6BCF\u683C\u5199\u6210\u4E00\u884C\u5E26\u5F15\u53F7\u7684\u5B57\u7B26\u4E32\uFF0C\u5192\u53F7\u524D\u662F\u6807\u9898\uFF0C\u5192\u53F7\u539F\u6837\u663E\u793A\u3002",whenNot:"\u4EFB\u4F55\u4E00\u683C\u8D85\u8FC7\u7EA6 60 \u5B57\u65F6\uFF0C\u7528\u539F\u6587\u7684\u5217\u8868\uFF0C\u4E0D\u8981\u5E76\u6392\u3002",keys:["items"],itemKeys:["title","text"],example:"```garden compare\nitems:\n - title: \u81EA\u65CB\u9501\n text: \u4E34\u754C\u533A\u6781\u77ED\u65F6\u5FD9\u7B49\uFF0C\u4E0D\u8FDB\u5165\u4F11\u7720\u3002\n - title: \u4E92\u65A5\u9501\n text: \u4E89\u7528\u4E45\u5C31\u4F11\u7720\uFF0C\u907F\u514D\u7A7A\u8F6C\u5360\u6EE1 CPU\u3002\n```",triggers:["gcompare"]},timeline:{label:"\u65F6\u95F4\u7EBF",when:"\u7248\u672C\u6F14\u8FDB\u6216\u4E00\u6BB5\u5386\u53F2\uFF0C\u6BCF\u6761\u6709\u65E5\u671F\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6CA1\u6709\u65F6\u95F4\u987A\u5E8F\u65F6\uFF0C\u7528\u666E\u901A\u5217\u8868\u3002",keys:["title","items"],itemKeys:["date","title","text","source"],example:`\`\`\`garden timeline
308
+ Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+lr(n.message+"",!0)+"</pre>";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}},ys=new H4;function Ye(e,t){return ys.parse(e,t)}Ye.options=Ye.setOptions=function(e){return ys.setOptions(e),Ye.defaults=ys.defaults,Qk(Ye.defaults),Ye};Ye.getDefaults=W0;Ye.defaults=bs;Ye.use=function(...e){return ys.use(...e),Ye.defaults=ys.defaults,Qk(Ye.defaults),Ye};Ye.walkTokens=function(e,t){return ys.walkTokens(e,t)};Ye.parseInline=ys.parseInline;Ye.Parser=Mi;Ye.parser=Mi.parse;Ye.Renderer=Xh;Ye.TextRenderer=ly;Ye.Lexer=Oi;Ye.lexer=Oi.lex;Ye.Tokenizer=Qh;Ye.Hooks=zo;Ye.parse=Ye;var AU=Ye.options,CU=Ye.setOptions,NU=Ye.use,_U=Ye.walkTokens,OU=Ye.parseInline;var MU=Mi.parse,LU=Oi.lex;var Ra=Fe(Yn(),1);var lE=["card","stat","compare","timeline","chart","figure","html","interactive","file"];var uE={card:{label:"\u8D44\u6E90\u5361",when:"\u4E00\u7BC7\u8BBA\u6587\u3001\u4E00\u4E2A\u4ED3\u5E93\u6216\u4E00\u672C\u4E66\uFF0C\u8BFB\u8005\u9700\u8981\u6807\u9898\u3001\u94FE\u63A5\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6B63\u6587\u91CC\u5DF2\u7ECF\u6709\u8FD9\u53E5\u8BDD\u65F6\uFF0C\u4E0D\u8981\u518D\u5305\u4E00\u5F20\u5361\u3002",keys:["url","title","description","image","alt","points","meta","text","source","site","items"],example:"```garden card\nurl: https://arxiv.org/abs/2309.06180\ntitle: PagedAttention\ndescription: vLLM \u7684\u5206\u9875 KV \u7BA1\u7406\u3002\n```",triggers:["gcard"]},stat:{label:"\u6307\u6807",when:"\u4E00\u4E2A\u77ED\u6307\u6807\uFF1A\u6807\u7B7E\u3001\u6570\u5B57\u3001\u53EF\u9009\u7684\u4E00\u53E5\u8BF4\u660E\u548C\u6765\u6E90\u3002",whenNot:"\u6570\u5B57\u9700\u8981\u8BFB\u8005\u81EA\u5DF1\u4EE3\u5165\u53C2\u6570\u65F6\uFF0C\u5199\u6210\u60F3\u6CD5\uFF0C\u4E0D\u8981\u505A\u9759\u6001\u6307\u6807\u3002",keys:["items","label","value","unit","caption","source","text"],example:"```garden stat\nitems:\n - label: Llama-2-13B \xB7 4K \u4E0A\u4E0B\u6587\n value: 3.2\n unit: GiB\n source: https://arxiv.org/abs/2309.06180\n```",triggers:["gstat"]},compare:{label:"\u5BF9\u6BD4",when:"\u4E24\u4E09\u4EF6\u4E1C\u897F\u5E76\u6392\uFF0C\u6BCF\u683C\u7EA6 60 \u5B57\u4EE5\u5185\u3002\u539F\u6587\u662F\u300CX\uFF1AY\u300D\u5217\u8868\u65F6\uFF0C\u6BCF\u683C\u5199\u6210\u4E00\u884C\u5E26\u5F15\u53F7\u7684\u300CX\uFF1AY\u300D\u3002",whenNot:"\u4EFB\u4F55\u4E00\u683C\u8D85\u8FC7\u7EA6 60 \u5B57\u65F6\uFF0C\u7528\u539F\u6587\u7684\u5217\u8868\uFF0C\u4E0D\u8981\u5E76\u6392\u3002",keys:["items"],itemKeys:["title","text"],example:"```garden compare\nitems:\n - title: \u81EA\u65CB\u9501\n text: \u4E34\u754C\u533A\u6781\u77ED\u65F6\u5FD9\u7B49\uFF0C\u4E0D\u8FDB\u5165\u4F11\u7720\u3002\n - title: \u4E92\u65A5\u9501\n text: \u4E89\u7528\u4E45\u5C31\u4F11\u7720\uFF0C\u907F\u514D\u7A7A\u8F6C\u5360\u6EE1 CPU\u3002\n```",triggers:["gcompare"]},timeline:{label:"\u65F6\u95F4\u7EBF",when:"\u7248\u672C\u6F14\u8FDB\u6216\u4E00\u6BB5\u5386\u53F2\uFF0C\u6BCF\u6761\u6709\u65E5\u671F\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6CA1\u6709\u65F6\u95F4\u987A\u5E8F\u65F6\uFF0C\u7528\u666E\u901A\u5217\u8868\u3002",keys:["title","items"],itemKeys:["date","title","text","source"],example:`\`\`\`garden timeline
309
309
  items:
310
310
  - date: 2015
311
311
  title: \u5E76\u53D1\u6807\u8BB0
@@ -305,7 +305,7 @@ ${e}</tr>
305
305
  `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
306
306
  `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${lr(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let i=this.parser.parseInline(n),r=Kk(e);if(r===null)return i;e=r;let a='<a href="'+e+'"';return t&&(a+=' title="'+lr(t)+'"'),a+=">"+i+"</a>",a}image({href:e,title:t,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let r=Kk(e);if(r===null)return lr(n);e=r;let a=`<img src="${e}" alt="${n}"`;return t&&(a+=` title="${lr(t)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:lr(e.text)}},ly=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},Mi=class Z0{constructor(t){Ze(this,"options");Ze(this,"renderer");Ze(this,"textRenderer");this.options=t||bs,this.options.renderer=this.options.renderer||new Zh,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new ly}static parse(t,n){return new Z0(n).parse(t)}static parseInline(t,n){return new Z0(n).parseInline(t)}parse(t,n=!0){let i="";for(let r=0;r<t.length;r++){let a=t[r];if(this.options.extensions?.renderers?.[a.type]){let l=a,u=this.options.extensions.renderers[l.type].call({parser:this},l);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(l.type)){i+=u||"";continue}}let s=a;switch(s.type){case"space":{i+=this.renderer.space(s);continue}case"hr":{i+=this.renderer.hr(s);continue}case"heading":{i+=this.renderer.heading(s);continue}case"code":{i+=this.renderer.code(s);continue}case"table":{i+=this.renderer.table(s);continue}case"blockquote":{i+=this.renderer.blockquote(s);continue}case"list":{i+=this.renderer.list(s);continue}case"html":{i+=this.renderer.html(s);continue}case"def":{i+=this.renderer.def(s);continue}case"paragraph":{i+=this.renderer.paragraph(s);continue}case"text":{let l=s,u=this.renderer.text(l);for(;r+1<t.length&&t[r+1].type==="text";)l=t[++r],u+=`
307
307
  `+this.renderer.text(l);n?i+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):i+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return i}parseInline(t,n=this.renderer){let i="";for(let r=0;r<t.length;r++){let a=t[r];if(this.options.extensions?.renderers?.[a.type]){let l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){i+=l||"";continue}}let s=a;switch(s.type){case"escape":{i+=n.text(s);break}case"html":{i+=n.html(s);break}case"link":{i+=n.link(s);break}case"image":{i+=n.image(s);break}case"strong":{i+=n.strong(s);break}case"em":{i+=n.em(s);break}case"codespan":{i+=n.codespan(s);break}case"br":{i+=n.br(s);break}case"del":{i+=n.del(s);break}case"text":{i+=n.text(s);break}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return i}},Jh,Do=(Jh=class{constructor(e){Ze(this,"options");Ze(this,"block");this.options=e||bs}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?Oi.lex:Oi.lexInline}provideParser(){return this.block?Mi.parse:Mi.parseInline}},Ze(Jh,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens","emStrongMask"])),Ze(Jh,"passThroughHooksRespectAsync",new Set(["preprocess","postprocess","processAllTokens"])),Jh),G4=class{constructor(...e){Ze(this,"defaults",W0());Ze(this,"options",this.setOptions);Ze(this,"parse",this.parseMarkdown(!0));Ze(this,"parseInline",this.parseMarkdown(!1));Ze(this,"Parser",Mi);Ze(this,"Renderer",Zh);Ze(this,"TextRenderer",ly);Ze(this,"Lexer",Oi);Ze(this,"Tokenizer",Xh);Ze(this,"Hooks",Do);this.use(...e)}walkTokens(e,t){let n=[];for(let i of e)switch(n=n.concat(t.call(this,i)),i.type){case"table":{let r=i;for(let a of r.header)n=n.concat(this.walkTokens(a.tokens,t));for(let a of r.rows)for(let s of a)n=n.concat(this.walkTokens(s.tokens,t));break}case"list":{let r=i;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=i;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(a=>{let s=r[a].flat(1/0);n=n.concat(this.walkTokens(s,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let a=t.renderers[r.name];a?t.renderers[r.name]=function(...s){let l=r.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=t[r.level];a?a.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),i.extensions=t),n.renderer){let r=this.defaults.renderer||new Zh(this.defaults);for(let a in n.renderer){if(!(a in r))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=n.renderer[s],u=r[s];r[s]=(...o)=>{let h=l.apply(r,o);return h===!1&&(h=u.apply(r,o)),h||""}}i.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Xh(this.defaults);for(let a in n.tokenizer){if(!(a in r))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=n.tokenizer[s],u=r[s];r[s]=(...o)=>{let h=l.apply(r,o);return h===!1&&(h=u.apply(r,o)),h}}i.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new Do;for(let a in n.hooks){if(!(a in r))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=n.hooks[s],u=r[s];Do.passThroughHooks.has(a)?r[s]=o=>{if(this.defaults.async&&Do.passThroughHooksRespectAsync.has(a))return(async()=>{let c=await l.call(r,o);return u.call(r,c)})();let h=l.call(r,o);return u.call(r,h)}:r[s]=(...o)=>{if(this.defaults.async)return(async()=>{let c=await l.apply(r,o);return c===!1&&(c=await u.apply(r,o)),c})();let h=l.apply(r,o);return h===!1&&(h=u.apply(r,o)),h}}i.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,a=n.walkTokens;i.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),r&&(l=l.concat(r.call(this,s))),l}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Oi.lex(e,t??this.defaults)}parser(e,t){return Mi.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let i={...n},r={...this.defaults,...i},a=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let s=r.hooks?await r.hooks.preprocess(t):t,l=await(r.hooks?await r.hooks.provideLexer():e?Oi.lex:Oi.lexInline)(s,r),u=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(u,r.walkTokens));let o=await(r.hooks?await r.hooks.provideParser():e?Mi.parse:Mi.parseInline)(u,r);return r.hooks?await r.hooks.postprocess(o):o})().catch(a);try{r.hooks&&(t=r.hooks.preprocess(t));let s=(r.hooks?r.hooks.provideLexer():e?Oi.lex:Oi.lexInline)(t,r);r.hooks&&(s=r.hooks.processAllTokens(s)),r.walkTokens&&this.walkTokens(s,r.walkTokens);let l=(r.hooks?r.hooks.provideParser():e?Mi.parse:Mi.parseInline)(s,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(s){return a(s)}}}onError(e,t){return n=>{if(n.message+=`
308
- Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+lr(n.message+"",!0)+"</pre>";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}},ys=new G4;function Ye(e,t){return ys.parse(e,t)}Ye.options=Ye.setOptions=function(e){return ys.setOptions(e),Ye.defaults=ys.defaults,Xk(Ye.defaults),Ye};Ye.getDefaults=W0;Ye.defaults=bs;Ye.use=function(...e){return ys.use(...e),Ye.defaults=ys.defaults,Xk(Ye.defaults),Ye};Ye.walkTokens=function(e,t){return ys.walkTokens(e,t)};Ye.parseInline=ys.parseInline;Ye.Parser=Mi;Ye.parser=Mi.parse;Ye.Renderer=Zh;Ye.TextRenderer=ly;Ye.Lexer=Oi;Ye.lexer=Oi.lex;Ye.Tokenizer=Xh;Ye.Hooks=Do;Ye.parse=Ye;var LU=Ye.options,RU=Ye.setOptions,zU=Ye.use,DU=Ye.walkTokens,BU=Ye.parseInline;var IU=Mi.parse,UU=Oi.lex;var Ra=Fe(Yn(),1);var uE=["card","stat","compare","timeline","chart","figure","html","interactive","file"];var oE={card:{label:"\u8D44\u6E90\u5361",when:"\u4E00\u7BC7\u8BBA\u6587\u3001\u4E00\u4E2A\u4ED3\u5E93\u6216\u4E00\u672C\u4E66\uFF0C\u8BFB\u8005\u9700\u8981\u6807\u9898\u3001\u94FE\u63A5\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6B63\u6587\u91CC\u5DF2\u7ECF\u6709\u8FD9\u53E5\u8BDD\u65F6\uFF0C\u4E0D\u8981\u518D\u5305\u4E00\u5F20\u5361\u3002",keys:["url","title","description","image","alt","points","meta","text","source","site","items"],example:"```garden card\nurl: https://arxiv.org/abs/2309.06180\ntitle: PagedAttention\ndescription: vLLM \u7684\u5206\u9875 KV \u7BA1\u7406\u3002\n```",triggers:["gcard"]},stat:{label:"\u6307\u6807",when:"\u4E00\u4E2A\u77ED\u6307\u6807\uFF1A\u6807\u7B7E\u3001\u6570\u5B57\u3001\u53EF\u9009\u7684\u4E00\u53E5\u8BF4\u660E\u548C\u6765\u6E90\u3002",whenNot:"\u6570\u5B57\u9700\u8981\u8BFB\u8005\u81EA\u5DF1\u4EE3\u5165\u53C2\u6570\u65F6\uFF0C\u5199\u6210\u60F3\u6CD5\uFF0C\u4E0D\u8981\u505A\u9759\u6001\u6307\u6807\u3002",keys:["items","label","value","unit","caption","source","text"],example:"```garden stat\nitems:\n - label: Llama-2-13B \xB7 4K \u4E0A\u4E0B\u6587\n value: 3.2\n unit: GiB\n source: https://arxiv.org/abs/2309.06180\n```",triggers:["gstat"]},compare:{label:"\u5BF9\u6BD4",when:"\u4E24\u4E09\u4EF6\u4E1C\u897F\u5E76\u6392\uFF0C\u6BCF\u683C\u5927\u7EA6 60 \u5B57\u4EE5\u5185\u3002\u539F\u6587\u662F\u300CX\uFF1AY\u300D\u7684\u5217\u8868\u65F6\uFF0C\u6BCF\u683C\u5199\u6210\u4E00\u884C\u5E26\u5F15\u53F7\u7684\u5B57\u7B26\u4E32\uFF0C\u5192\u53F7\u524D\u662F\u6807\u9898\uFF0C\u5192\u53F7\u539F\u6837\u663E\u793A\u3002",whenNot:"\u4EFB\u4F55\u4E00\u683C\u8D85\u8FC7\u7EA6 60 \u5B57\u65F6\uFF0C\u7528\u539F\u6587\u7684\u5217\u8868\uFF0C\u4E0D\u8981\u5E76\u6392\u3002",keys:["items"],itemKeys:["title","text"],example:"```garden compare\nitems:\n - title: \u81EA\u65CB\u9501\n text: \u4E34\u754C\u533A\u6781\u77ED\u65F6\u5FD9\u7B49\uFF0C\u4E0D\u8FDB\u5165\u4F11\u7720\u3002\n - title: \u4E92\u65A5\u9501\n text: \u4E89\u7528\u4E45\u5C31\u4F11\u7720\uFF0C\u907F\u514D\u7A7A\u8F6C\u5360\u6EE1 CPU\u3002\n```",triggers:["gcompare"]},timeline:{label:"\u65F6\u95F4\u7EBF",when:"\u7248\u672C\u6F14\u8FDB\u6216\u4E00\u6BB5\u5386\u53F2\uFF0C\u6BCF\u6761\u6709\u65E5\u671F\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6CA1\u6709\u65F6\u95F4\u987A\u5E8F\u65F6\uFF0C\u7528\u666E\u901A\u5217\u8868\u3002",keys:["title","items"],itemKeys:["date","title","text","source"],example:`\`\`\`garden timeline
308
+ Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+lr(n.message+"",!0)+"</pre>";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}},ys=new G4;function Ye(e,t){return ys.parse(e,t)}Ye.options=Ye.setOptions=function(e){return ys.setOptions(e),Ye.defaults=ys.defaults,Xk(Ye.defaults),Ye};Ye.getDefaults=W0;Ye.defaults=bs;Ye.use=function(...e){return ys.use(...e),Ye.defaults=ys.defaults,Xk(Ye.defaults),Ye};Ye.walkTokens=function(e,t){return ys.walkTokens(e,t)};Ye.parseInline=ys.parseInline;Ye.Parser=Mi;Ye.parser=Mi.parse;Ye.Renderer=Zh;Ye.TextRenderer=ly;Ye.Lexer=Oi;Ye.lexer=Oi.lex;Ye.Tokenizer=Xh;Ye.Hooks=Do;Ye.parse=Ye;var LU=Ye.options,RU=Ye.setOptions,zU=Ye.use,DU=Ye.walkTokens,BU=Ye.parseInline;var IU=Mi.parse,UU=Oi.lex;var Ra=Fe(Yn(),1);var uE=["card","stat","compare","timeline","chart","figure","html","interactive","file"];var oE={card:{label:"\u8D44\u6E90\u5361",when:"\u4E00\u7BC7\u8BBA\u6587\u3001\u4E00\u4E2A\u4ED3\u5E93\u6216\u4E00\u672C\u4E66\uFF0C\u8BFB\u8005\u9700\u8981\u6807\u9898\u3001\u94FE\u63A5\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6B63\u6587\u91CC\u5DF2\u7ECF\u6709\u8FD9\u53E5\u8BDD\u65F6\uFF0C\u4E0D\u8981\u518D\u5305\u4E00\u5F20\u5361\u3002",keys:["url","title","description","image","alt","points","meta","text","source","site","items"],example:"```garden card\nurl: https://arxiv.org/abs/2309.06180\ntitle: PagedAttention\ndescription: vLLM \u7684\u5206\u9875 KV \u7BA1\u7406\u3002\n```",triggers:["gcard"]},stat:{label:"\u6307\u6807",when:"\u4E00\u4E2A\u77ED\u6307\u6807\uFF1A\u6807\u7B7E\u3001\u6570\u5B57\u3001\u53EF\u9009\u7684\u4E00\u53E5\u8BF4\u660E\u548C\u6765\u6E90\u3002",whenNot:"\u6570\u5B57\u9700\u8981\u8BFB\u8005\u81EA\u5DF1\u4EE3\u5165\u53C2\u6570\u65F6\uFF0C\u5199\u6210\u60F3\u6CD5\uFF0C\u4E0D\u8981\u505A\u9759\u6001\u6307\u6807\u3002",keys:["items","label","value","unit","caption","source","text"],example:"```garden stat\nitems:\n - label: Llama-2-13B \xB7 4K \u4E0A\u4E0B\u6587\n value: 3.2\n unit: GiB\n source: https://arxiv.org/abs/2309.06180\n```",triggers:["gstat"]},compare:{label:"\u5BF9\u6BD4",when:"\u4E24\u4E09\u4EF6\u4E1C\u897F\u5E76\u6392\uFF0C\u6BCF\u683C\u7EA6 60 \u5B57\u4EE5\u5185\u3002\u539F\u6587\u662F\u300CX\uFF1AY\u300D\u5217\u8868\u65F6\uFF0C\u6BCF\u683C\u5199\u6210\u4E00\u884C\u5E26\u5F15\u53F7\u7684\u300CX\uFF1AY\u300D\u3002",whenNot:"\u4EFB\u4F55\u4E00\u683C\u8D85\u8FC7\u7EA6 60 \u5B57\u65F6\uFF0C\u7528\u539F\u6587\u7684\u5217\u8868\uFF0C\u4E0D\u8981\u5E76\u6392\u3002",keys:["items"],itemKeys:["title","text"],example:"```garden compare\nitems:\n - title: \u81EA\u65CB\u9501\n text: \u4E34\u754C\u533A\u6781\u77ED\u65F6\u5FD9\u7B49\uFF0C\u4E0D\u8FDB\u5165\u4F11\u7720\u3002\n - title: \u4E92\u65A5\u9501\n text: \u4E89\u7528\u4E45\u5C31\u4F11\u7720\uFF0C\u907F\u514D\u7A7A\u8F6C\u5360\u6EE1 CPU\u3002\n```",triggers:["gcompare"]},timeline:{label:"\u65F6\u95F4\u7EBF",when:"\u7248\u672C\u6F14\u8FDB\u6216\u4E00\u6BB5\u5386\u53F2\uFF0C\u6BCF\u6761\u6709\u65E5\u671F\u548C\u4E00\u53E5\u8BF4\u660E\u3002",whenNot:"\u6CA1\u6709\u65F6\u95F4\u987A\u5E8F\u65F6\uFF0C\u7528\u666E\u901A\u5217\u8868\u3002",keys:["title","items"],itemKeys:["date","title","text","source"],example:`\`\`\`garden timeline
309
309
  items:
310
310
  - date: 2015
311
311
  title: \u5E76\u53D1\u6807\u8BB0