* [Tree Tabs] Add UI representation for tree tab nesting
Add visual indentation support for tree tabs in the vertical tab strip.
This enables tabs to be visually nested based on their tree hierarchy,
with dynamic indentation that adapts to available width.
Key changes:
- Add TabNestingInfo struct and integrate it into tab layout pipeline
- Add GetTabNestingInfo() virtual method to TabSlotView
- Add GetTreeHeight()/GetTreeTabNode() to TabSlotController interface
- Implement nesting-aware layout in CalculateVerticalLayout
- Wire tree tab pref into BraveTabContainer layout orientation
Implementation:
- Base offset per level is kBaseOffsetPerLevel (20px). When the strip is
too narrow to keep min tab width at that spacing, use a tree-wide
reduced offset: even_offset_per_level = available_width_for_tree /
(tree_height + 1). The switch to this narrow offset is based on
tree_height only (not level), so all nodes in the tree share the same
rule and indent does not jump at a specific depth.
- Minimum offset_per_level in the narrow case is 1. The final offset is
clamped so tab width never goes below min_inactive_width:
offset = clamp(offset_per_level * level, 0,
clamped_available_width_for_tree).
- For very narrow strips, available_width_for_tree is clamped to
non-negative so offset math stays valid.