diff --git a/src/ShellDocs.Components/Chrome/DocsSidebar.razor.css b/src/ShellDocs.Components/Chrome/DocsSidebar.razor.css index 6a90cf2..2f35aff 100644 --- a/src/ShellDocs.Components/Chrome/DocsSidebar.razor.css +++ b/src/ShellDocs.Components/Chrome/DocsSidebar.razor.css @@ -120,6 +120,22 @@ transform: rotate(90deg); } +/* Toggleable section content — grid-rows 0fr→1fr animates to natural height + without needing a fixed max-height. The inner wrapper carries the actual + items and MUST have `min-height: 0` so it can collapse cleanly. */ +::deep .sidebar-section-shell { + display: grid; + grid-template-rows: 0fr; + transition: grid-template-rows 220ms cubic-bezier(0.16, 1, 0.3, 1); +} +::deep .sidebar-section-shell[data-open="true"] { + grid-template-rows: 1fr; +} +::deep .sidebar-section-shell > .sidebar-section-items { + overflow: hidden; + min-height: 0; +} + ::deep .sidebar-section-items { display: flex; flex-direction: column; diff --git a/src/ShellDocs.Components/Chrome/DocsSidebarNode.razor b/src/ShellDocs.Components/Chrome/DocsSidebarNode.razor index 8bdeef0..afbd4f3 100644 --- a/src/ShellDocs.Components/Chrome/DocsSidebarNode.razor +++ b/src/ShellDocs.Components/Chrome/DocsSidebarNode.razor @@ -23,7 +23,18 @@ else if (Node.Kind == NodeKind.Section) } } - @if (!_isToggleable || _isOpen) + @if (_isToggleable) + { +
+ } + else {