forked from carbon-design-system/carbon-components-svelte
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RecursiveList (carbon-design-system#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
- Loading branch information
Showing
17 changed files
with
334 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
# Component Index | ||
|
||
> 168 components exported from [email protected]. | ||
> 169 components exported from [email protected]. | ||
## Components | ||
|
||
|
@@ -107,6 +107,7 @@ | |
- [`RadioButtonGroup`](#radiobuttongroup) | ||
- [`RadioButtonSkeleton`](#radiobuttonskeleton) | ||
- [`RadioTile`](#radiotile) | ||
- [`RecursiveList`](#recursivelist) | ||
- [`Row`](#row) | ||
- [`Search`](#search) | ||
- [`SearchSkeleton`](#searchskeleton) | ||
|
@@ -3031,6 +3032,33 @@ None. | |
| mouseenter | forwarded | -- | | ||
| mouseleave | forwarded | -- | | ||
|
||
## `RecursiveList` | ||
|
||
### Types | ||
|
||
```ts | ||
export interface RecursiveListNode { | ||
text?: string; | ||
href?: string; | ||
html?: string; | ||
} | ||
``` | ||
|
||
### Props | ||
|
||
| Prop name | Kind | Reactive | Type | Default value | Description | | ||
| :-------- | :--------------- | :------- | :-------------------------------------------------------------------------- | ------------------------ | ---------------------------------- | | ||
| children | <code>let</code> | No | <code>Array<RecursiveListNode & { children?: RecursiveListNode[]; }></code> | <code>[]</code> | Specify the children to render | | ||
| type | <code>let</code> | No | <code>"unordered" | "ordered" | "ordered-native"</code> | <code>"unordered"</code> | Specify the type of list to render | | ||
|
||
### Slots | ||
|
||
None. | ||
|
||
### Events | ||
|
||
None. | ||
|
||
## `Row` | ||
|
||
### Props | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
<script> | ||
import { InlineNotification, RecursiveList } from "carbon-components-svelte"; | ||
import Preview from "../../components/Preview.svelte"; | ||
</script> | ||
|
||
This component uses the [svelte:self API](https://svelte.dev/docs#svelte_self) to render the [UnorderedList](/components/UnorderedList) and [OrderedList](/components/OrderedList) components with data formatted as a tree structure. This is especially useful when the depth of the tree is unknown. | ||
|
||
A child node can render text (`text`), a link (`href`), HTML content (`html`), and other `children`. | ||
|
||
<InlineNotification svx-ignore title="Warning:" kind="warning" hideCloseButton> | ||
<div class="body-short-01"> | ||
HTML content provided via the <code>html</code> prop is not sanitized. | ||
</div> | ||
</InlineNotification> | ||
|
||
### Unordered | ||
|
||
The `children` prop accepts an array of child nodes. | ||
|
||
By default, the list type is unordered. | ||
|
||
<FileSource src="/framed/RecursiveList/RecursiveList" /> | ||
|
||
### Ordered | ||
|
||
Set `type` to `"ordered"` to use the ordered list variant. | ||
|
||
<FileSource src="/framed/RecursiveList/RecursiveListOrdered" /> | ||
|
||
### Ordered (native styles) | ||
|
||
Set `type` to `"ordered-native"` to use the native styles for an ordered list. | ||
|
||
<FileSource src="/framed/RecursiveList/RecursiveListOrderedNative" /> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<script> | ||
import { RecursiveList } from "carbon-components-svelte"; | ||
const children = [ | ||
{ | ||
text: "Item 1", | ||
children: [ | ||
{ | ||
text: "Item 1a", | ||
children: [{ html: "<h5>HTML content</h5>" }], | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 2", | ||
children: [ | ||
{ | ||
href: "https://svelte.dev/", | ||
}, | ||
{ | ||
href: "https://svelte.dev/", | ||
text: "Link with custom text", | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 3", | ||
}, | ||
]; | ||
</script> | ||
|
||
<RecursiveList children="{children}" /> |
32 changes: 32 additions & 0 deletions
32
docs/src/pages/framed/RecursiveList/RecursiveListOrdered.svelte
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<script> | ||
import { RecursiveList } from "carbon-components-svelte"; | ||
const children = [ | ||
{ | ||
text: "Item 1", | ||
children: [ | ||
{ | ||
text: "Item 1a", | ||
children: [{ html: "<h5>HTML content</h5>" }], | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 2", | ||
children: [ | ||
{ | ||
href: "https://svelte.dev/", | ||
}, | ||
{ | ||
href: "https://svelte.dev/", | ||
text: "Link with custom text", | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 3", | ||
}, | ||
]; | ||
</script> | ||
|
||
<RecursiveList type="ordered" children="{children}" /> |
32 changes: 32 additions & 0 deletions
32
docs/src/pages/framed/RecursiveList/RecursiveListOrderedNative.svelte
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<script> | ||
import { RecursiveList } from "carbon-components-svelte"; | ||
const children = [ | ||
{ | ||
text: "Item 1", | ||
children: [ | ||
{ | ||
text: "Item 1a", | ||
children: [{ html: "<h5>HTML content</h5>" }], | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 2", | ||
children: [ | ||
{ | ||
href: "https://svelte.dev/", | ||
}, | ||
{ | ||
href: "https://svelte.dev/", | ||
text: "Link with custom text", | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 3", | ||
}, | ||
]; | ||
</script> | ||
|
||
<RecursiveList type="ordered-native" children="{children}" /> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<script> | ||
/** Specify the text to render*/ | ||
export let text = ""; | ||
/** Specify a link href */ | ||
export let href = ""; | ||
/** Specify HTML to render using `@html` */ | ||
export let html = ""; | ||
import ListItem from "../ListItem/ListItem.svelte"; | ||
</script> | ||
|
||
<ListItem> | ||
{#if text && !href}{text}{/if} | ||
{#if href}<a class:bx--link="{true}" href="{href}">{text || href}</a>{/if} | ||
{#if !text && html}{@html html}{/if} | ||
<slot /> | ||
</ListItem> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export { default as RecursiveList } from "./RecursiveList.svelte"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
<script> | ||
<script lang="ts"> | ||
import { ProgressBar } from "../types"; | ||
</script> | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<script lang="ts"> | ||
import { RecursiveList } from "../types"; | ||
const children = [ | ||
{ | ||
text: "Item 1", | ||
children: [ | ||
{ | ||
text: "Item 1a", | ||
children: [{ html: "<h5>HTML content</h5>" }], | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 2", | ||
children: [ | ||
{ | ||
href: "https://svelte.dev/", | ||
}, | ||
{ | ||
href: "https://svelte.dev/", | ||
text: "Link with custom text", | ||
}, | ||
], | ||
}, | ||
{ | ||
text: "Item 3", | ||
}, | ||
]; | ||
</script> | ||
|
||
<RecursiveList type="ordered" children="{children}" /> |
Oops, something went wrong.