--- interface Props { content?: string; } const dedent = (str: string) => { const _str = str.split('\n').filter(s => s.trimStart().length > 0); if (_str.length === 0) { return str.trimStart(); } const trimmedSpace = _str[0].replace(_str[0].trimStart(), ''); return str .split('\n') .map((ln) => ln.startsWith(trimmedSpace) ? ln.replace(trimmedSpace, '') : ln) .join('\n'); } // Internal props that should not be part of the external interface. interface InternalProps extends Props { class: string; $scope: string; } let { content, class: className } = Astro.props as InternalProps; let html = null; let htmlContent = ''; // If no content prop provided, use the slot. if (!content) { content = await Astro.slots.render('default'); if (content !== undefined && content !== null) { content = dedent(content); } } if (content) { htmlContent = await (Astro as any).__renderMarkdown(content, { $: { scopedClassName: className, }, }); } html = htmlContent; --- <> {html ? : }