mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-15 10:21:05 +00:00
38 lines
1 KiB
Svelte
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="{type}" nested />
|
|
</RecursiveListItem>
|
|
{:else}
|
|
<RecursiveListItem {...child} />
|
|
{/if}
|
|
{/each}
|
|
</svelte:component>
|