From c6c756925bd408b373ff879cb600cfce106f9d9d Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sat, 11 Nov 2023 13:43:02 -0800 Subject: [PATCH 1/3] feat(treeview): make `node` slottable Closes #1660 --- src/TreeView/TreeView.svelte | 7 ++++++- src/TreeView/TreeViewNode.svelte | 20 ++++++++++++++++---- src/TreeView/TreeViewNodeList.svelte | 24 +++++++++++++++++------- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/TreeView/TreeView.svelte b/src/TreeView/TreeView.svelte index fa25b8a0f7..eabe6255de 100644 --- a/src/TreeView/TreeView.svelte +++ b/src/TreeView/TreeView.svelte @@ -2,6 +2,7 @@ /** * @typedef {string | number} TreeNodeId * @typedef {{ id: TreeNodeId; text: any; icon?: typeof import("svelte").SvelteComponent; disabled?: boolean; children?: TreeNode[]; }} TreeNode + * @slot {{ node: { id: TreeNodeId; text: string; expanded: boolean, leaf: boolean; disabled: boolean; selected: boolean; } }} * @event {TreeNode & { expanded: boolean; leaf: boolean; }} select * @event {TreeNode & { expanded: boolean; leaf: boolean; }} toggle * @event {TreeNode & { expanded: boolean; leaf: boolean; }} focus @@ -202,5 +203,9 @@ on:keydown on:keydown|stopPropagation="{handleKeyDown}" > - + + + {node.text} + + diff --git a/src/TreeView/TreeViewNode.svelte b/src/TreeView/TreeViewNode.svelte index 33481b19e2..5e0aedd68d 100644 --- a/src/TreeView/TreeViewNode.svelte +++ b/src/TreeView/TreeViewNode.svelte @@ -34,6 +34,7 @@ @@ -17,6 +17,23 @@ A parent node contains `children` while a leaf node does not. +## Slottable node + +By default, each item renders the value of `node.text`. Use the data from `let:node` directive to override the default slot. + +The destructured `let:node` contains the following properties: + + + id: the node id + text: the node text + expanded: true if the node is expanded + leaf: true if the node does not have children + disabled: true if the node is disabled + selected: true if the node is selected + + + + ## Initial active node The active node can be set through `activeId`. diff --git a/docs/src/pages/framed/TreeView/TreeViewSlot.svelte b/docs/src/pages/framed/TreeView/TreeViewSlot.svelte new file mode 100644 index 0000000000..e608e54556 --- /dev/null +++ b/docs/src/pages/framed/TreeView/TreeViewSlot.svelte @@ -0,0 +1,61 @@ + + + + + {node.text} (id: {node.id}) + +