@@ -90,6 +90,7 @@ export type TreeSlots<
90
90
A extends TreeItem [] = TreeItem [],
91
91
T extends NestedItem <A > = NestedItem <A >
92
92
> = {
93
+ ' item-wrapper' : SlotProps <T >
93
94
' item' : SlotProps <T >
94
95
' item-leading' : SlotProps <T >
95
96
' item-label' : SlotProps <T >
@@ -163,35 +164,37 @@ const defaultExpanded = computed(() =>
163
164
@toggle =" item.onToggle"
164
165
@select =" item.onSelect"
165
166
>
166
- <button type =" button" :disabled =" item.disabled || disabled" :class =" ui.link({ class: [props.ui?.link, item.ui?.link, item.class], selected: isSelected, disabled: item.disabled || disabled })" >
167
- <slot :name =" ((item.slot || 'item') as keyof TreeSlots<T>)" v-bind =" { index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
168
- <slot :name =" ((item.slot ? `${item.slot}-leading`: 'item-leading') as keyof TreeSlots<T>)" v-bind =" { index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
169
- <UIcon
170
- v-if =" item.icon"
171
- :name =" item.icon"
172
- :class =" ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
173
- />
174
- <UIcon
175
- v-else-if =" item.children?.length"
176
- :name =" isExpanded ? (expandedIcon ?? appConfig.ui.icons.folderOpen) : (collapsedIcon ?? appConfig.ui.icons.folder)"
177
- :class =" ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
178
- />
179
- </slot >
180
-
181
- <span v-if =" getItemLabel(item) || !!slots[(item.slot ? `${item.slot}-label`: 'item-label') as keyof TreeSlots<T>]" :class =" ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })" >
182
- <slot :name =" ((item.slot ? `${item.slot}-label`: 'item-label') as keyof TreeSlots<T>)" v-bind =" { item, index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
183
- {{ getItemLabel(item) }}
167
+ <slot :name =" ((item.slot ? `${item.slot}-wrapper` : 'item-wrapper') as keyof TreeSlots<T>)" v-bind =" { item, index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
168
+ <button type =" button" :disabled =" item.disabled || disabled" :class =" ui.link({ class: [props.ui?.link, item.ui?.link, item.class], selected: isSelected, disabled: item.disabled || disabled })" >
169
+ <slot :name =" ((item.slot || 'item') as keyof TreeSlots<T>)" v-bind =" { index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
170
+ <slot :name =" ((item.slot ? `${item.slot}-leading`: 'item-leading') as keyof TreeSlots<T>)" v-bind =" { index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
171
+ <UIcon
172
+ v-if =" item.icon"
173
+ :name =" item.icon"
174
+ :class =" ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
175
+ />
176
+ <UIcon
177
+ v-else-if =" item.children?.length"
178
+ :name =" isExpanded ? (expandedIcon ?? appConfig.ui.icons.folderOpen) : (collapsedIcon ?? appConfig.ui.icons.folder)"
179
+ :class =" ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
180
+ />
184
181
</slot >
185
- </span >
186
182
187
- <span v-if =" item.trailingIcon || item.children?.length || !!slots[(item.slot ? `${item.slot}-trailing`: 'item-trailing') as keyof TreeSlots<T>]" :class =" ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })" >
188
- <slot :name =" ((item.slot ? `${item.slot}-trailing`: 'item-trailing') as keyof TreeSlots<T>)" v-bind =" { item, index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
189
- <UIcon v-if =" item.trailingIcon" :name =" item.trailingIcon" :class =" ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
190
- <UIcon v-else-if =" item.children?.length" :name =" trailingIcon ?? appConfig.ui.icons.chevronDown" :class =" ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
191
- </slot >
192
- </span >
193
- </slot >
194
- </button >
183
+ <span v-if =" getItemLabel(item) || !!slots[(item.slot ? `${item.slot}-label`: 'item-label') as keyof TreeSlots<T>]" :class =" ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })" >
184
+ <slot :name =" ((item.slot ? `${item.slot}-label`: 'item-label') as keyof TreeSlots<T>)" v-bind =" { item, index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
185
+ {{ getItemLabel(item) }}
186
+ </slot >
187
+ </span >
188
+
189
+ <span v-if =" item.trailingIcon || item.children?.length || !!slots[(item.slot ? `${item.slot}-trailing`: 'item-trailing') as keyof TreeSlots<T>]" :class =" ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })" >
190
+ <slot :name =" ((item.slot ? `${item.slot}-trailing`: 'item-trailing') as keyof TreeSlots<T>)" v-bind =" { item, index, level, expanded: isExpanded, selected: isSelected }" :item =" (item as Extract<NestedItem<T>, { slot: string; }>)" >
191
+ <UIcon v-if =" item.trailingIcon" :name =" item.trailingIcon" :class =" ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
192
+ <UIcon v-else-if =" item.children?.length" :name =" trailingIcon ?? appConfig.ui.icons.chevronDown" :class =" ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
193
+ </slot >
194
+ </span >
195
+ </slot >
196
+ </button >
197
+ </slot >
195
198
196
199
<ul v-if =" item.children?.length && isExpanded" :class =" ui.listWithChildren({ class: [props.ui?.listWithChildren, item.ui?.listWithChildren] })" >
197
200
<ReuseTreeTemplate :items =" item.children" :level =" level + 1" />
0 commit comments