carbon-components-svelte/src/RecursiveList/RecursiveList.svelte
2024-11-11 21:35:48 -08:00

38 lines
1 KiB
Svelte

<script>
/**
* @typedef {{ text?: string; href?: string; html?: string; }} RecursiveListNode
* @restProps {ul | ol}
*/
/**
* Specify the nodes to render
* @type {Array<RecursiveListNode & { nodes?: RecursiveListNode[]; }>}
*/
export let nodes = [];
/**
* Specify the type of list to render
* @type {"unordered" | "ordered" | "ordered-native"}
*/
export let type = "unordered";
import UnorderedList from "../UnorderedList/UnorderedList.svelte";
import OrderedList from "../OrderedList/OrderedList.svelte";
import RecursiveListItem from "./RecursiveListItem.svelte";
</script>
<svelte:component
this={type === "unordered" ? UnorderedList : OrderedList}
native={type === "ordered-native"}
{...$$restProps}
>
{#each nodes as child}
{#if Array.isArray(child.nodes)}
<RecursiveListItem {...child}>
<svelte:self {...child} {type} nested />
</RecursiveListItem>
{:else}
<RecursiveListItem {...child} />
{/if}
{/each}
</svelte:component>