mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-15 18:31:06 +00:00
RecursiveList (#717)
* feat(recursive-list): add RecursiveList * feat(recursive-list): rename items prop to children * docs(recursive-list): add full examples * test(recursive-list): add types test * refactor(recursive-list): remove superfluous nested prop * docs(recursive-list): update docs * fix(recursive-list): remove nested prop from type test * fix(recursive-list): explicitly type restProps
This commit is contained in:
parent
870c2c2ae8
commit
ae27bedf4c
17 changed files with 334 additions and 6 deletions
38
src/RecursiveList/RecursiveList.svelte
Normal file
38
src/RecursiveList/RecursiveList.svelte
Normal file
|
@ -0,0 +1,38 @@
|
|||
<script>
|
||||
/**
|
||||
* @typedef {{ text?: string; href?: string; html?: string; }} RecursiveListNode
|
||||
* @restProps {ul | ol}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Specify the children to render
|
||||
* @type {Array<RecursiveListNode & { children?: RecursiveListNode[]; }>}
|
||||
*/
|
||||
export let children = [];
|
||||
|
||||
/**
|
||||
* 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 children as child}
|
||||
{#if Array.isArray(child.children)}
|
||||
<RecursiveListItem {...child}>
|
||||
<svelte:self {...child} type="{type}" nested />
|
||||
</RecursiveListItem>
|
||||
{:else}
|
||||
<RecursiveListItem {...child} />
|
||||
{/if}
|
||||
{/each}
|
||||
</svelte:component>
|
Loading…
Add table
Add a link
Reference in a new issue