@@ -13,7 +13,7 @@ interface ExtractedBlock {
1313 attrs : Record < string , string > ;
1414}
1515
16- const COMPONENT_TAGS = [ 'Summary' , 'Tip' , 'Note' , 'Warning' , 'Prompt' , 'ApiTable' , 'Step' , 'Steps' ] ;
16+ const COMPONENT_TAGS = [ 'Summary' , 'Tip' , 'Note' , 'Warning' , 'Prompt' , 'ApiTable' , 'Related' , ' Step', 'Steps' ] ;
1717
1818function extractComponentTags ( source : string ) : { cleaned : string ; blocks : ExtractedBlock [ ] } {
1919 const blocks : ExtractedBlock [ ] = [ ] ;
@@ -41,14 +41,37 @@ function extractComponentTags(source: string): { cleaned: string; blocks: Extrac
4141 return { cleaned, blocks } ;
4242}
4343
44- function renderSummary ( content : string ) : string {
45- return `<div class="doc-summary"> ${ content } </div>` ;
44+ async function renderInlineMarkdown ( content : string ) : Promise < string > {
45+ return await marked . parseInline ( content ) ;
4646}
4747
48- function renderCallout ( type : 'tip' | 'note' | 'warning' , content : string ) : string {
48+ async function renderSummary ( content : string ) : Promise < string > {
49+ const html = await renderInlineMarkdown ( content ) ;
50+ return `<div class="doc-summary">${ html } </div>` ;
51+ }
52+
53+ async function renderCallout (
54+ type : 'tip' | 'note' | 'warning' ,
55+ content : string ,
56+ ) : Promise < string > {
57+ const html = await renderInlineMarkdown ( content ) ;
4958 const icons = { tip : '💡' , note : '⚠️' , warning : '🚨' } ;
5059 const labels = { tip : 'Tip' , note : 'Note' , warning : 'Warning' } ;
51- return `<div class="doc-callout doc-callout--${ type } "><div class="doc-callout__label">${ icons [ type ] } ${ labels [ type ] } </div><div class="doc-callout__content">${ content } </div></div>` ;
60+ return `<div class="doc-callout doc-callout--${ type } "><div class="doc-callout__label">${ icons [ type ] } ${ labels [ type ] } </div><div class="doc-callout__content">${ html } </div></div>` ;
61+ }
62+
63+ async function renderPrompt ( content : string ) : Promise < string > {
64+ const html = await renderInlineMarkdown ( content ) ;
65+ return `<div class="doc-prompt"><div class="doc-prompt__header"><span class="doc-prompt__label">🤖 Agentic Prompt</span><button class="doc-prompt__copy" data-copy-prompt>Copy prompt</button></div><div class="doc-prompt__content">${ html } </div></div>` ;
66+ }
67+
68+ async function renderRelated ( content : string ) : Promise < string > {
69+ const html = await marked . parse ( content ) ;
70+ return `<div class="doc-related">${ html } </div>` ;
71+ }
72+
73+ function renderApiTable ( content : string ) : string {
74+ return `<div class="doc-api-table">${ content } </div>` ;
5275}
5376
5477async function renderSteps (
@@ -100,14 +123,6 @@ async function parseStepContent(
100123 return html ;
101124}
102125
103- function renderPrompt ( content : string ) : string {
104- return `<div class="doc-prompt"><div class="doc-prompt__header"><span class="doc-prompt__label">🤖 Agentic Prompt</span><button class="doc-prompt__copy" data-copy-prompt>Copy prompt</button></div><div class="doc-prompt__content">${ content } </div></div>` ;
105- }
106-
107- function renderApiTable ( content : string ) : string {
108- return `<div class="doc-api-table">${ content } </div>` ;
109- }
110-
111126function extractFilename ( code : string ) : { filename : string | null ; cleanedCode : string } {
112127 const firstLine = code . split ( '\n' ) [ 0 ] ;
113128 const tsMatch = firstLine ?. match ( / ^ \/ \/ \s * ( .+ \. \w + ) \s * $ / ) ;
@@ -166,13 +181,14 @@ export async function renderMarkdown(source: string): Promise<RenderedMarkdown>
166181 if ( ! html . includes ( block . placeholder ) ) continue ;
167182 let rendered : string ;
168183 switch ( block . type ) {
169- case 'Summary' : rendered = renderSummary ( block . content ) ; break ;
170- case 'Tip' : rendered = renderCallout ( 'tip' , block . content ) ; break ;
171- case 'Note' : rendered = renderCallout ( 'note' , block . content ) ; break ;
172- case 'Warning' : rendered = renderCallout ( 'warning' , block . content ) ; break ;
184+ case 'Summary' : rendered = await renderSummary ( block . content ) ; break ;
185+ case 'Tip' : rendered = await renderCallout ( 'tip' , block . content ) ; break ;
186+ case 'Note' : rendered = await renderCallout ( 'note' , block . content ) ; break ;
187+ case 'Warning' : rendered = await renderCallout ( 'warning' , block . content ) ; break ;
173188 case 'Steps' : rendered = await renderSteps ( block . content , blocks ) ; break ;
174189 case 'Step' : rendered = '' ; break ;
175- case 'Prompt' : rendered = renderPrompt ( block . content ) ; break ;
190+ case 'Prompt' : rendered = await renderPrompt ( block . content ) ; break ;
191+ case 'Related' : rendered = await renderRelated ( block . content ) ; break ;
176192 case 'ApiTable' : {
177193 const tableHtml = await marked . parse ( block . content ) ;
178194 rendered = renderApiTable ( tableHtml ) ;
0 commit comments