1- import React , { ReactElement , ReactNode , useEffect , useState } from "react" ;
1+ import React , {
2+ HTMLAttributes ,
3+ ReactElement ,
4+ ReactNode ,
5+ useEffect ,
6+ useState ,
7+ } from "react" ;
28import { SkipToMainContent , SkipToMainContentProps } from "@react-md/link" ;
39import { BaseTreeItem , TreeData } from "@react-md/tree" ;
410import { PropsWithRef } from "@react-md/utils" ;
@@ -8,6 +14,7 @@ import { LayoutAppBar } from "./LayoutAppBar";
814import { LayoutMain , LayoutMainProps } from "./LayoutMain" ;
915import { LayoutNavigation } from "./LayoutNavigation" ;
1016import { useLayoutConfig } from "./LayoutProvider" ;
17+ import { MiniLayoutWrapper } from "./MiniLayoutWrapper" ;
1118import { LayoutNavigationItem } from "./types" ;
1219import { isMiniLayout } from "./utils" ;
1320
@@ -60,6 +67,23 @@ export interface LayoutChildrenProps<
6067 */
6168 miniNavItems ?: TreeData < T > ;
6269
70+ /**
71+ * This prop allows you to provide additional props to the `<div>` surrounding
72+ * the `LayoutMain` and mini `LayoutNavigation` components.
73+ *
74+ * Note: This additional `<div>` will only be rendered if:
75+ * - the current layout is one of the `mini` types
76+ * - the layout is not using a fixed app bar
77+ * - the `miniNav` prop has not been defined
78+ * - `treeProps` have been provided
79+ *
80+ * @remarks \@since 2.8.3
81+ */
82+ miniWrapperProps ?: PropsWithRef <
83+ HTMLAttributes < HTMLDivElement > ,
84+ HTMLDivElement
85+ > ;
86+
6387 /**
6488 * The children to display within the layout. This is pretty much required
6589 * since you'll have an empty app otherwise, but it's left as optional just
@@ -88,8 +112,9 @@ export function LayoutChildren({
88112 navToggleProps,
89113 navAfterAppBar = false ,
90114 nav : propNav ,
91- miniNav : propMiniNav ,
115+ miniNav,
92116 miniNavItems,
117+ miniWrapperProps,
93118 navHeader,
94119 navHeaderProps,
95120 navHeaderTitle,
@@ -151,48 +176,36 @@ export function LayoutChildren({
151176 ) ;
152177 }
153178
154- let miniNav = propMiniNav ;
155- if ( mini && treeProps && typeof miniNav === "undefined" ) {
156- let miniTreeProps = treeProps ;
157- if ( miniNavItems ) {
158- miniTreeProps = {
159- ...miniTreeProps ,
160- navItems : miniNavItems ,
161- } ;
162- }
163-
164- miniNav = (
165- < LayoutNavigation
166- header = { navHeader }
167- headerProps = { navHeaderProps }
168- headerTitle = { navHeaderTitle }
169- headerTitleProps = { navHeaderTitleProps }
170- closeNav = { closeNav }
171- closeNavProps = { closeNavProps }
172- treeProps = { miniTreeProps }
173- { ...navProps }
174- mini
175- hidden = { miniHidden }
176- />
177- ) ;
178- }
179-
180179 return (
181180 < >
182181 < SkipToMainContent { ...skipProps } mainId = { mainId } />
183182 { navAfterAppBar && appBar }
184183 { nav }
185184 { ! navAfterAppBar && appBar }
186- { /* mini nav should always be in tab index after app bar */ }
187- { miniNav }
188- < LayoutMain
189- headerOffset = { fixedAppBar }
190- { ...mainProps }
191- id = { mainId }
185+ < MiniLayoutWrapper
192186 mini = { mini }
187+ miniNav = { miniNav }
188+ miniHidden = { miniHidden }
189+ containerProps = { miniWrapperProps }
190+ miniNavItems = { miniNavItems }
191+ treeProps = { treeProps }
192+ header = { navHeader }
193+ headerProps = { navHeaderProps }
194+ headerTitle = { navHeaderTitle }
195+ headerTitleProps = { navHeaderTitleProps }
196+ closeNav = { closeNav }
197+ closeNavProps = { closeNavProps }
193198 >
194- { children }
195- </ LayoutMain >
199+ < LayoutMain
200+ headerOffset = { fixedAppBar }
201+ mini = { mini }
202+ miniHidden = { miniHidden }
203+ { ...mainProps }
204+ id = { mainId }
205+ >
206+ { children }
207+ </ LayoutMain >
208+ </ MiniLayoutWrapper >
196209 </ >
197210 ) ;
198211}
0 commit comments