Back to catalog
Component detail entry
Navigation
@vean/ui
STreeMenu

TreeMenu

TreeMenu belongs to the Navigation category. Start with demos and usage, then use the API tables to finish integration and styling decisions.

Use the quick jump panel to reach overview, usage, demos, and API first, then continue through the full page.

Quick jump

Related components

If you are composing interactions in the same family, these components usually pair well together.

TreeMenu

Overview

A collapsible sidebar navigation tree-menu component. STreeMenu combines the Aria TreeMenuCompact family of composite components (TreeMenuRoot/TreeMenuOptionCompact/TreeMenuSlotCompact, zero-style) with the TreeMenuRoot context (controlled/uncontrolled activation and expansion, collapsed sidebar mode, flyout submenus when collapsed, action menus); the UI layer only injects the 8-step size recipe and slot classes. The recursive items data model ships with built-in icon/badge/tag/actions/isGroup/link fields, and node content can be freely customized through the item/item-leading/item-trailing slots.

Usage

Features

  • 🧭 Hierarchical data model — items: TreeMenuOptionData<T>[] (value/label plus recursive children); the TreeMenuOptionData<T> generic preserves custom fields; built-in isGroup/hidden/icon/badge/tag/disabled/actions/to/href fields
  • 🎛️ Controlled/uncontrolled dual channels — modelValue / defaultValue (active item), expanded / defaultExpanded (expanded items), collapsed / defaultCollapsed (collapsed state); all support v-model and update:* events
  • 🎯 Expand strategy — expandStrategy="keep" (default) preserves manual expansion no matter which menu is selected; expandStrategy="selected" auto-expands only the selected menu and its ancestors, collapsing non-selected branches whenever the selected menu changes
  • 📉 Collapsed sidebar mode — collapsed + collapsedWidth (default 50px) / indent collapses the rail; items with children render a flyout menu while collapsed, and the expansion state is stashed and restored automatically
  • 🧩 Action menus — actions + actionMenuProps + onActionSelect attach hover actions (ellipsis button) to items; the trigger aria-label is localized across 13 language packs
  • 🏷️ Badge/tag/icon — built-in icon/badge/tag fields, freely extended via the item-leading/item-trailing slots
  • 🔗 Link items — to/href render route links or external links (external controls behavior); external links show an arrow-up-right icon automatically
  • 🗂️ Grouping — isGroup groups with the group-label slot; top/bottom slots host menu header/footer content
  • 🎨 8 sizes + style injection — size from xs to 2xl; class/ui overrides across 20+ named slots
  • ⌨️ Keyboard navigation — WAI-ARIA tree pattern: the root is a single tab stop with role="tree", ↑/↓ roam visible items, → expands or enters children, ← collapses or returns to the parent, Home/End jump to the first/last item, and Enter/Space activates (direction keys only move focus — they never change the active item)
  • ♿ Accessibility — role="tree"/treeitem semantics with aria-expanded/aria-controls/aria-selected, roving tabindex, data-vean-tree-menu-* data attributes, zero axe violations

Component family

  • STreeMenu (styled) — entry wrapper; composes TreeMenuCompact + the treeMenuVariants size recipe + provideTreeMenuUi slot-class injection, useForwardListeners event merging
  • STreeMenuStyledItem (styled) — one row drawn with the item recipe, for content that is not a menu node (a brand, a trigger, a footer row); renders through Primitive, so as / asChild pick the element and disabled marks the row
  • TreeMenuCompact (Aria) — composite root; TreeMenuRoot state root + TreeMenuOptionsCompact grouping/recursive rendering + top/bottom slots
  • TreeMenuRoot (Aria) — state root; useControllableState manages activation/expansion/collapse; backupExpanded stashes expansion while collapsed and restores it on recovery
  • TreeMenuOptionsCompact (Aria) — grouping/recursive rendering; with expandStrategy="selected" it syncs the expanded state to the selected menu path
  • TreeMenuOptionCompact (Aria) — single-node composition; leaves render buttons/links + the action menu, parents render a TreeMenuCollapsible trigger + recursive TreeMenuSub + a collapsed-mode flyout DropdownMenuCompact
  • TreeMenuSlotCompact (Aria) — node content orchestration (icon/label/badge/tag/external-link icon/chevron)
  • Base primitives (Aria) — TreeMenuButton/TreeMenuItem/TreeMenuCollapsible/TreeMenuSub/TreeMenuGroup/TreeMenuGroupLabel/TreeMenuTooltipCompact, all zero-style

Demos

Basic

Platform
Projects
  • 01 Basic — customizer for the sidebar: expandStrategy / collapsed / collapsedWidth / indent / size controls over groups/icons/badge/tag/action menus/link items

API

Aria Layer

17

TreeMenu<T>

24 Props4 Emits6 Slots
Props
PropTypeDefaultDescription
class
ClassValue
—
Additional class names applied to the root element.
size
ThemeSize
—
Visual size of the component.
ui
Partial<Record<TreeMenuUiSlot, ClassValue>>
—
Per-slot class overrides for the component.
modelValue
string
—
the selected value of the tree menu. can be bound-with with `v-model`.
defaultValue
string
—
the value of the tree menu when initially rendered. use when you do not need to control the state of the tree.
expanded
string[]
—
the expanded value of the tree menu. can be bound-with with `v-model`.
defaultExpanded
string[]
—
the expanded value of the tree menu when initially rendered. use when you do not need to control the state of the tree.
expandStrategy
TreeMenuExpandStrategy
'keep'
The expand strategy of the tree menu. - `keep`: keep the current expanded state; manually expanded or collapsed menus are not affected by activating other menus. The collapsible ancestors of the selected menu are expanded on mount and whenever the selected menu changes from outside (e.g. driven by an external route), so it stays visible. - `selected`: only expand the currently selected menu and all its ancestor menus; non-selected menus are collapsed when the selected menu changes.
collapsed
boolean
false
Whether the tree menu is collapsed.
defaultCollapsed
boolean
—
The value of the tree menu when it's collapsed.
collapsedWidth
number
50
The width of the sidebar menu when it's collapsed.
indent
number
16
The width of the indent.
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
The function to convert pixels to rem.
items
TreeMenuOptionData<T>[]
—
Items rendered by the component.
groupRootProps
TreeMenuGroupRootProps
—
Properties forwarded to the group root element.
groupProps
TreeMenuGroupProps
—
Properties forwarded to the group element.
groupLabelProps
TreeMenuGroupLabelProps
—
Properties forwarded to the group label element.
showGroupIcon
boolean
false
Whether to show the group icon.
side
HorizontalSide
—
Horizontal side.
itemProps
TreeMenuItemProps
—
Properties forwarded to the item element.
buttonProps
TreeMenuButtonProps
—
Properties forwarded to the button element.
linkProps
LinkExtraProps
—
Properties forwarded to the link element.
collapsibleProps
TreeMenuCollapsibleProps
—
Properties forwarded to the collapsible element.
subProps
TreeMenuSubProps
—
Properties forwarded to the sub element.
Emits
Emit NameParametersDescription
update:modelValue
string
Emitted when the model value changes.
update:expanded
string[]
Emitted when the expanded state changes.
update:collapsed
boolean
Emitted when the collapsed state changes.
selectDropdown
string
Emitted when select dropdown occurs.
Slots
Slot NameParametersDescription
top
—
Custom content rendered before the options.
bottom
—
Custom content rendered after the options.
group-label
{ item: TreeMenuOptionData<T>; }
Custom content for the group label slot.
item
{ item: T; }
Custom content for the item slot.
item-leading
{ item: T; }
Custom content for the item leading slot.
item-trailing
{ item: T; }
Custom content for the item trailing slot.

TreeMenuBadge

2 Props
Props
PropTypeDefaultDescription
open
boolean
true
Whether the badge bubble is rendered.
contentProps
BaseProps
—
Properties forwarded to the badge bubble element.

TreeMenuBaseItem

2 Props
Props
PropTypeDefaultDescription
value
string
—
The unique value of the item.
disabled
boolean
—
When `true`, prevents the user from interacting with the item.

TreeMenuButton

5 Props
Props
PropTypeDefaultDescription
disabledSelect
boolean
false
When `true`, prevents the user from selecting the item.
type
ButtonType
'button'
The type of the button element. Can be one of 'button', 'submit', or 'reset'.
disabled
boolean
—
Whether the component is disabled.
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`

TreeMenuCollapsible

3 Props
Props
PropTypeDefaultDescription
disabledCollapsible
boolean
—
When `true`, prevents the user from activating the collapsible trigger.
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`

TreeMenuCompact<T>

21 Props4 Emits6 Slots
Props
PropTypeDefaultDescription
modelValue
string
—
the selected value of the tree menu. can be bound-with with `v-model`.
defaultValue
string
—
the value of the tree menu when initially rendered. use when you do not need to control the state of the tree.
expanded
string[]
—
the expanded value of the tree menu. can be bound-with with `v-model`.
defaultExpanded
string[]
—
the expanded value of the tree menu when initially rendered. use when you do not need to control the state of the tree.
expandStrategy
TreeMenuExpandStrategy
'keep'
The expand strategy of the tree menu. - `keep`: keep the current expanded state; manually expanded or collapsed menus are not affected by activating other menus. The collapsible ancestors of the selected menu are expanded on mount and whenever the selected menu changes from outside (e.g. driven by an external route), so it stays visible. - `selected`: only expand the currently selected menu and all its ancestor menus; non-selected menus are collapsed when the selected menu changes.
collapsed
boolean
false
Whether the tree menu is collapsed.
defaultCollapsed
boolean
—
The value of the tree menu when it's collapsed.
collapsedWidth
number
50
The width of the sidebar menu when it's collapsed.
indent
number
16
The width of the indent.
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
The function to convert pixels to rem.
items
TreeMenuOptionData<T>[]
—
Items rendered by the component.
groupRootProps
TreeMenuGroupRootProps
—
Properties forwarded to the group root element.
groupProps
TreeMenuGroupProps
—
Properties forwarded to the group element.
groupLabelProps
TreeMenuGroupLabelProps
—
Properties forwarded to the group label element.
showGroupIcon
boolean
false
Whether to show the group icon.
side
HorizontalSide
—
Horizontal side.
itemProps
TreeMenuItemProps
—
Properties forwarded to the item element.
buttonProps
TreeMenuButtonProps
—
Properties forwarded to the button element.
linkProps
LinkExtraProps
—
Properties forwarded to the link element.
collapsibleProps
TreeMenuCollapsibleProps
—
Properties forwarded to the collapsible element.
subProps
TreeMenuSubProps
—
Properties forwarded to the sub element.
Emits
Emit NameParametersDescription
update:modelValue
string
Emitted when the model value changes.
update:expanded
string[]
Emitted when the expanded state changes.
update:collapsed
boolean
Emitted when the collapsed state changes.
selectDropdown
string
Emitted when select dropdown occurs.
Slots
Slot NameParametersDescription
top
—
Custom content rendered before the options.
bottom
—
Custom content rendered after the options.
group-label
{ item: TreeMenuOptionData<T>; }
Custom content for the group label slot.
item
{ item: T; }
Custom content for the item slot.
item-leading
{ item: T; }
Custom content for the item leading slot.
item-trailing
{ item: T; }
Custom content for the item trailing slot.

TreeMenuGroup

2 Props
Props
PropTypeDefaultDescription
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`

TreeMenuGroupLabel

TreeMenuGroupRoot

TreeMenuItem

4 Props
Props
PropTypeDefaultDescription
value
string
—
The unique value of the item.
disabled
boolean
—
When `true`, prevents the user from interacting with the item.
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`

TreeMenuOptionCompact

9 Props1 Emits
Props
PropTypeDefaultDescription
as
AsTag
—
Rendered element tag.
item
TreeMenuOptionData<T extends TreeMenuBaseOptionData = TreeMenuBaseOptionData>
—
Current item data.
side
HorizontalSide
—
Horizontal side.
selectedPaths
string[]
—
The selected paths of the tree menu, used to determine whether the current item is selected or has selected descendants.
itemProps
TreeMenuItemProps
—
Properties forwarded to the item element.
buttonProps
TreeMenuButtonProps
—
Properties forwarded to the button element.
linkProps
LinkExtraProps
—
Properties forwarded to the link element.
collapsibleProps
TreeMenuCollapsibleProps
—
Properties forwarded to the collapsible element.
subProps
TreeMenuSubProps
—
Properties forwarded to the sub element.
Emits
Emit NameParametersDescription
selectDropdown
string
Emitted when select dropdown occurs.

TreeMenuOptionsCompact<T>

11 Props1 Emits
Props
PropTypeDefaultDescription
items
TreeMenuOptionData<T>[]
—
Items rendered by the component.
groupRootProps
TreeMenuGroupRootProps
—
Properties forwarded to the group root element.
groupProps
TreeMenuGroupProps
—
Properties forwarded to the group element.
groupLabelProps
TreeMenuGroupLabelProps
—
Properties forwarded to the group label element.
showGroupIcon
boolean
false
Whether to show the group icon.
side
HorizontalSide
—
Horizontal side.
itemProps
TreeMenuItemProps
—
Properties forwarded to the item element.
buttonProps
TreeMenuButtonProps
—
Properties forwarded to the button element.
linkProps
LinkExtraProps
—
Properties forwarded to the link element.
collapsibleProps
TreeMenuCollapsibleProps
—
Properties forwarded to the collapsible element.
subProps
TreeMenuSubProps
—
Properties forwarded to the sub element.
Emits
Emit NameParametersDescription
selectDropdown
string
Emitted when select dropdown occurs.

TreeMenuOptionSlotCompact

10 Props
Props
PropTypeDefaultDescription
showLinkIcon
boolean
—
Whether to show the link icon.
as
AsTag
—
Rendered element tag.
item
TreeMenuOptionData<T extends TreeMenuBaseOptionData = TreeMenuBaseOptionData>
—
Current item data.
side
HorizontalSide
—
Horizontal side.
selectedPaths
string[]
—
The selected paths of the tree menu, used to determine whether the current item is selected or has selected descendants.
itemProps
TreeMenuItemProps
—
Properties forwarded to the item element.
buttonProps
TreeMenuButtonProps
—
Properties forwarded to the button element.
linkProps
LinkExtraProps
—
Properties forwarded to the link element.
collapsibleProps
TreeMenuCollapsibleProps
—
Properties forwarded to the collapsible element.
subProps
TreeMenuSubProps
—
Properties forwarded to the sub element.

TreeMenuRoot

10 Props3 Emits
Props
PropTypeDefaultDescription
modelValue
string
—
the selected value of the tree menu. can be bound-with with `v-model`.
defaultValue
string
—
the value of the tree menu when initially rendered. use when you do not need to control the state of the tree.
expanded
string[]
—
the expanded value of the tree menu. can be bound-with with `v-model`.
defaultExpanded
string[]
—
the expanded value of the tree menu when initially rendered. use when you do not need to control the state of the tree.
expandStrategy
TreeMenuExpandStrategy
'keep'
The expand strategy of the tree menu. - `keep`: keep the current expanded state; manually expanded or collapsed menus are not affected by activating other menus. The collapsible ancestors of the selected menu are expanded on mount and whenever the selected menu changes from outside (e.g. driven by an external route), so it stays visible. - `selected`: only expand the currently selected menu and all its ancestor menus; non-selected menus are collapsed when the selected menu changes.
collapsed
boolean
false
Whether the tree menu is collapsed.
defaultCollapsed
boolean
—
The value of the tree menu when it's collapsed.
collapsedWidth
number
50
The width of the sidebar menu when it's collapsed.
indent
number
16
The width of the indent.
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
The function to convert pixels to rem.
Emits
Emit NameParametersDescription
update:modelValue
string
Emitted when the model value changes.
update:expanded
string[]
Emitted when the expanded state changes.
update:collapsed
boolean
Emitted when the collapsed state changes.

TreeMenuSlotCompact

TreeMenuStyledItem

6 Props1 Slots
Props
PropTypeDefaultDescription
class
ClassValue
—
Additional class names applied to the root element.
size
ThemeSize
—
Visual size of the component.
ui
Partial<Record<TreeMenuStyledItemUiSlot, ClassValue>>
—
Per-slot class overrides for the component.
disabled
boolean
false
Whether the row is disabled. The row carries `data-disabled` — what the recipe's disabled styles key on — and `aria-disabled`. A native `button` row additionally gets the `disabled` attribute; every other element only declares the state, so nested content (for example a trigger inside the row) decides how it blocks itself.
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`
Slots
Slot NameParametersDescription
default
—
Content of the row.

TreeMenuSub

2 Props
Props
PropTypeDefaultDescription
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`

Notes

Architecture and benchmark differences

TreeMenuRoot owns all state (activation/expansion/collapse through the useControllableState controlled/uncontrolled dual channels). On collapse it stashes the expanded branches via backupExpanded, clears expansion, and triggers the flyout menus; on recovery it restores the branches verbatim — a lossless collapse/expand round trip. Composition happens in the Aria layer: TreeMenuOptionCompact orchestrates leaves (button/link + action menu) and parents (Collapsible trigger + recursive TreeMenuSub + flyout menu), while the UI STreeMenu only injects the size recipe and slot classes and carries no state. Both the action menu and the flyout menu reuse the data-driven DropdownMenuCompact (rendered by MenuOptions). The root follows the WAI-ARIA tree pattern — a single roving tab stop with role="tree", treeitem items, and group sub-lists — and the axe scan reports zero violations. Compared with mainstream sidebar-menu libraries, VeanUI is more complete in Aria separation, built-in action menus, collapsed flyouts, external link items, and 13-language localization.

CapabilityVeanUIAnt DesignElement PlusNaive UI
Aria/style separation✅———
Controlled activation/expand/collapse✅✅✅✅
Collapsed sidebar (rail width)✅✅✅⚠️
Flyout submenus when collapsed✅✅✅⚠️
Built-in action menus (actions)✅———
Badge/tag (badge/tag)✅⚠️——
Groups/icons/external links✅✅✅✅
Localized aria-label✅✅✅✅

⚠️ = partial support (Naive UI needs extra collapsed + custom popup content for flyouts; Ant Design implements badges through custom label nodes).

Cautions

  • Keyboard navigation follows the WAI-ARIA tree pattern: ↑/↓ (and Home/End) roam the visible items without wrapping, → expands a closed branch then enters its first child, ← collapses an expanded branch then returns to the parent, and Enter/Space activate the focused item. Direction keys only move focus — the active item only changes on explicit activation.
  • In collapsed mode the flyout branch popups are owned by the Menu machinery; the tree roaming applies to the rail items only.
  • In collapsed mode (collapsed) the action menu (actions) is hidden; the action button only renders in expanded mode.
  • The collapsed flyout defaults to hover triggering; switch it via dropdownMenuProps.trigger: 'click'.
  • Toggling collapsed stashes and restores the expansion state; the original expanded branches survive the collapse round trip.
  • The action button’s accessible name comes from the treeMenu.openActions template (with the {label} placeholder) and follows the ConfigProvider locale across 13 languages.
  • A node’s disabled blocks activation/expansion/actions; disabled items render data-disabled and native disabled semantics.
  • Clicking a leaf activates it and emits update:modelValue; clicking an item with children toggles expansion and emits update:expanded.
  • With expandStrategy="selected" the expanded state is re-synced to the selected menu path whenever the selected menu changes or the strategy switches to selected; manually expanded non-selected branches stay open until the next selection.
  • Data attributes use only data-vean-tree-menu-* (D1-07) with no redundant attributes.
  • size supports 8 steps from xs to 2xl; style overrides are injected via ui (20+ named slots) and the root class.

FAQ

Which keyboard shortcuts does the tree menu support?

The menu is a single tab stop following the WAI-ARIA tree pattern: entering the tree focuses the active item (or the first one), ↑/↓ roam visible items (skipping disabled ones), → expands a closed branch and a second press enters its first child, ← collapses or returns to the parent, Home/End jump to the first/last visible item, and Enter/Space activate.

How do I build a collapsible sidebar menu?

Bind v-model:collapsed to the collapsed state; collapsedWidth (default 50px) controls the rail width and indent the child indentation:

<STreeMenu v-model:collapsed="collapsed" :items="items" />

How do flyout submenus work when collapsed?

Items with children automatically render a flyout menu in collapsed mode (default hover trigger; switch to click via dropdownMenuProps.trigger). The flyout’s active state is synced with modelValue.

How do I add action buttons to an item?

<STreeMenu :items="items" />
<!-- in items: -->
{ label: 'Design Engineering', value: 'design-engineering', actions: [ { label: 'Edit', value: 'edit', icon:
'lucide:pencil' }, { label: 'Delete', value: 'delete', icon: 'lucide:trash' } ], onActionSelect: action =>
console.log('select', action.value) }

Hovering the item reveals an ellipsis button at the end; clicking it opens the action menu. The button aria-label is localized automatically (Open {label} actions).

How do I control the active and expanded items?

Controlled: v-model:modelValue="active", v-model:expanded="expandedKeys", v-model:collapsed="collapsed"; uncontrolled initial values use default-value / default-expanded / default-collapsed. The activation event is update:modelValue and the expansion event is update:expanded.

What is the difference between the keep and active expand strategies?

expandStrategy decides how the expanded state relates to the active menu. With keep (default) expansion is purely manual: activating another menu never changes what is expanded or collapsed. With active the menu follows the active item — whenever the active menu changes (or you switch to active), only the active menu and all its ancestor menus stay expanded and every other branch collapses:

<STreeMenu :items="items" expand-strategy="selected" />

Use keep for free-form browsing where the user controls every branch, and active for navigation-driven sidebars where the current route’s path should always stay visible.

How do I create groups?

Set isGroup: true on a node with children to turn it into a group; customize the group title through the group-label slot:

<STreeMenu :items="items">
  <template #group-label="{ item }">{{ item.label }} ({{ item.children.length }})</template>
</STreeMenu>

How do I add link items?

{ label: 'Vean', value: 'vean', href: 'https://veanui.com' } { label: 'About', value: 'about', to: '/about' }

External links automatically show the arrow-up-right icon; external: true forces external-link handling.

How do I customize icons, badges, and tags?

Built-in fields: icon (icon), badge + badgeProps (badge), tag + tagProps (tag). For richer content use the item-leading/item-trailing/item slots:

<STreeMenu :items="items">
  <template #item-leading="{ item }">
    <span class="text-primary">{{ item.label.slice(0, 1) }}</span>
  </template>
</STreeMenu>

How do I disable an item?

Set disabled: true on the node to block activation/expansion/actions; disabled items render data-disabled and native disabled semantics.

How do I style a custom row like a menu item?

Render STreeMenuStyledItem — it is the row the menu items themselves are drawn with, so it takes the same size recipe, the same icon column, and the same fold: inside a collapsed ancestor (group + data-state="collapsed") the row narrows to the item’s icon width. Pass size to match the menu, as / asChild when the row is not a button (a div for a non-interactive brand, asChild to merge into your own link), and disabled to mark it. When the row folds it is icon-only, so hide the label yourself and center the icon — a mark wider than the folded content box would otherwise sit against the row’s trailing edge: :ui="{ button: 'group-data-[state=collapsed]:justify-center' }".

How is the action button aria-label localized?

Switch the ConfigProvider locale (13 built-in language packs); the action button uses the treeMenu.openActions template — Open {label} actions — where {label} is replaced by the item label.

Changelog

Version history is grouped by release so you can quickly see what changed for this component across published versions.

v0.50.0

2026-10-02

Compare release

Feature

make the styled item polymorphic and state-aware

Scope: tree-menuAuthors: soybeanjsView commit83a4f

Style

transition the item row width when the rail folds

Scope: tree-menuAuthors: soybeanjsView commit95c3f

Docs

sync the generated skill with the current examples

Scope: tree-menuAuthors: soybeanjsView commit6e7c1

Style

transition the item row width when the rail folds

Scope: tree-menuAuthors: soybeanjsView commit95c3f

Docs

sync the generated skill with the current examples

Scope: tree-menuAuthors: soybeanjsView commit6e7c1

Feature

make the styled item polymorphic and state-aware

Scope: tree-menuAuthors: soybeanjsView commit83a4f

v0.40.0

2026-09-14

Compare release

Feature

keyboard navigation for the collapsed dropdown popup

Scope: tree-menuAuthors: soybeanfeView commitc2a44

Fix

seed collapsed dropdown open state from dropdownMenuProps

Scope: tree-menuAuthors: soybeanfeView commite94f0

Feature

keyboard navigation for the collapsed dropdown popup

Scope: tree-menuAuthors: soybeanfeView commitc2a44

Fix

seed collapsed dropdown open state from dropdownMenuProps

Scope: tree-menuAuthors: soybeanfeView commite94f0

v0.31.0

2026-08-31

Compare release

Optimization

add pxToRem default value

Scope: tree-menuAuthors: soybeanjsView commitabcf5

v0.30.0

2026-08-20

Compare release

Feature

add expandStrategy prop, support keep and active mode

Scope: tree-menuAuthors: soybeanjsView commit5d911

Feature

add expandStrategy prop, support keep and active mode

Scope: tree-menuAuthors: soybeanjsView commit5d911

v0.26.0

2026-05-27

Compare release

Optimization

enhance tooltip and badge integration in tree menu styles and components

Scope: tree-menuAuthors: soybeanfeView commit07bc0

v0.19.0

2026-05-11

Compare release

Feature

Implement TreeMenuCmpact

Scope: tree-menuAuthors: soybeanfeView commitccecd

v0.15.0

2026-04-26

Compare release

Fix

fix collapsible ui context in tree menu

Scope: tree-menuAuthors: soybeanjsView commitfbb4b

Fix

fix collapsible ui context in tree menu

Scope: tree-menuAuthors: soybeanjsView commitfbb4b

v0.7.0

2026-02-09

Compare release

Refactor

add TreeMenuOptions component and enhance context management

Scope: tree-menuAuthors: soybeanjsView commit4878f

v0.3.3

2026-01-30

Compare release

Fix

add active-value binding to dropdown menu

Scope: tree-menuAuthors: soybeanjsView commit18f74

v0.3.0

2026-01-29

Compare release

Feature

implement active path tracking and update child active state logic

Scope: tree-menuAuthors: soybeanjsView commit6d5e8

Optimization

add getTreePaths function and update tree-menu component to use it

Scope: tree-menuAuthors: soybeanjsView commitc6391

v0.2.8

2026-01-28

Compare release

Fix

update open state logic in TreeMenuCollapsible component

Scope: tree-menuAuthors: soybeanjsView commit5e892

Fix

add select-dropdown event emission in TreeMenuOption component

Scope: tree-menuAuthors: soybeanjsView commit7852c

v0.2.7

2026-01-28

Compare release

Fix

ensure new menu objects are created in filterHiddenMenus function

Scope: tree-menuAuthors: soybeanjsView commit5579b

v0.2.6

2026-01-28

Compare release

Feature

enhance filtering logic for hidden menus and update child visibility checks

Scope: tree-menuAuthors: soybeanjsView commit4bd8a

v0.2.5

2026-01-28

Compare release

Optimization

adjust spacing and padding for size variants in TreeMenu

Scope: tree-menuAuthors: soybeanjsView commitf9249

v0.2.4

2026-01-28

Compare release

Fix

update hasChildren computation to exclude hidden children

Scope: tree-menuAuthors: soybeanjsView commitf3343

Optimization

improve children filtering logic in TreeMenuOption and TreeMenu

Scope: tree-menuAuthors: soybeanjsView commit7955e

v0.2.0

2026-01-28

Compare release

Refactor

refactor type definition and add hidden property

Scope: tree-menuAuthors: soybeanjsView commit23110

v0.1.13

2026-01-28

Compare release

Feature

add item visibility control to tree menu options

Scope: tree-menuAuthors: soybeanjsView commit70ac1

v0.1.12

2026-01-28

Compare release

Optimization

change TreeMenuGroupOptionData to a type and remove redundant properties

Scope: tree-menuAuthors: soybeanjsView commit40685

v0.1.10

2026-01-28

Compare release

Feature

add showGroupIcon prop to control group icon visibility

Scope: tree-menuAuthors: soybeanjsView commit62193

Feature

enhance TreeMenuOption with new props for better customization

Scope: tree-menuAuthors: soybeanjsView commit69033

v0.1.8

2026-01-27

Compare release

Optimization

remove unused useTreeMenuUi import and refactor styled item component

Scope: tree-menuAuthors: soybeanjsView commit7e505

v0.1.7

2026-01-27

Compare release

Optimization

update groupRoot margin styles for better layout

Scope: tree-menuAuthors: soybeanjsView commite3fb2

v0.1.5

2026-01-27

Compare release

Optimization

remove unused collapsedWidth prop from TreeMenuRootProps

Scope: tree-menuAuthors: soybeanjsView commit7a4fd

v0.1.4

2026-01-27

Compare release

Feature

extend TreeMenuOptionData with custom properties and update type definitions

Scope: tree-menuAuthors: soybeanjsView commit12721

v0.1.3

2026-01-26

Compare release

Feature

enhance TreeMenuStyledItem with computed classes and props interface

Scope: tree-menuAuthors: soybeanjsView commitc6bc8

v0.0.11

2026-01-08

Compare release

Feature

add 'as' prop to TreeMenuOption and update related components for improved flexibility in rendering

Scope: tree-menuAuthors: soybeanjsView commit18c0f

v0.0.9

2026-01-02

Compare release

Refactor

implement TreeMenu headless component with enhanced structure and styling, including new TreeMenuOption and TreeMenuGroup components

Scope: tree-menuAuthors: soybeanjsView commit21708

v0.0.8

2026-01-01

Compare release

Style

add margin reset to root style for improved layout consistency

Scope: tree-menuAuthors: soybeanjsView commit5ff20

v0.0.6

2025-12-09

Compare release

Style

enhance dropdown selection handling and update type definitions for better integration

Scope: tree-menuAuthors: soybeanjsView commit350ed

Feature

enhance dropdown selection handling and update type definitions for better integration

Scope: tree-menuAuthors: soybeanjsView commit350ed

v0.0.3

2025-11-19

Compare release

Refactor

improve item action positioning and tooltip logic for better usability

Scope: tree-menuAuthors: soybeanjsView commit8fd11

Refactor

improve item action positioning and tooltip logic for better usability

Scope: tree-menuAuthors: soybeanjsView commit8fd11

v0.0.2

2025-11-18

Compare release

Feature

implement TreeMenu component with collapsible functionality and customizable items

Scope: tree-menuAuthors: soybeanjsView commit5d47a

Feature

implement TreeMenuItemWrapper to reuse the style of TreeMenuItem

Scope: tree-menuAuthors: soybeanjsView commitd1b8e

Style

enhance TreeMenuItem implementation with improved props handling and structure

Scope: tree-menuAuthors: soybeanjsView commitc5d34

Style

update TreeMenuItem styles for improved accessibility and consistency

Scope: tree-menuAuthors: soybeanjsView commit9c465

Style

remove TreeMenuItemImpl component and integrate its functionality into TreeMenuItem for cleaner structure

Scope: tree-menuAuthors: soybeanjsView commit60131

Feature

add STreeMenuRootOption component to tree menu exports

Scope: tree-menuAuthors: soybeanjsView commit405ca

Feature

implement TreeMenu component with collapsible functionality and customizable items

Scope: tree-menuAuthors: soybeanjsView commit5d47a

Feature

implement TreeMenuItemWrapper to reuse the style of TreeMenuItem

Scope: tree-menuAuthors: soybeanjsView commitd1b8e

Style

enhance TreeMenuItem implementation with improved props handling and structure

Scope: tree-menuAuthors: soybeanjsView commitc5d34

Style

update TreeMenuItem styles for improved accessibility and consistency

Scope: tree-menuAuthors: soybeanjsView commit9c465

Style

remove TreeMenuItemImpl component and integrate its functionality into TreeMenuItem for cleaner structure

Scope: tree-menuAuthors: soybeanjsView commit60131

Feature

add STreeMenuRootOption component to tree menu exports

Scope: tree-menuAuthors: soybeanjsView commit405ca