Content passed inside a component becomes a snippet prop called children. Named snippets can be passed as props too.
Use {@render} to render a snippet. The parentheses are required, even when there are no parameters.
Check whether an optional snippet was provided before rendering it.
<script>
let { children, footer } = $props();
</script>
<main>
{@render children()}
</main>
{#if footer}
<footer>
{@render footer()}
</footer>
{/if}