@@ -49,6 +49,9 @@ export type PageHeaderProps = {
4949 hasBorder ?: boolean
5050} & SxProp
5151
52+ const RootBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
53+ React . PropsWithChildren < PageHeaderProps & React . RefAttributes < HTMLDivElement > >
54+ >
5255const Root = React . forwardRef < HTMLDivElement , React . PropsWithChildren < PageHeaderProps > > (
5356 ( { children, className, sx = { } , as = 'div' , 'aria-label' : ariaLabel , role, hasBorder} , forwardedRef ) => {
5457 const rootRef = useProvidedRefOrCreate < HTMLDivElement > ( forwardedRef as React . RefObject < HTMLDivElement > )
@@ -104,12 +107,10 @@ const Root = React.forwardRef<HTMLDivElement, React.PropsWithChildren<PageHeader
104107 } ,
105108 [ children , rootRef ] ,
106109 )
107- const BaseComponent = toggleSxComponent ( as ) as React . ComponentType <
108- React . PropsWithChildren < PageHeaderProps & React . RefAttributes < HTMLDivElement > >
109- >
110110
111111 return (
112- < BaseComponent
112+ < RootBaseComponent
113+ as = { as }
113114 ref = { rootRef }
114115 className = { clsx ( classes . PageHeader , className ) }
115116 data-has-border = { hasBorder ? 'true' : undefined }
@@ -118,11 +119,14 @@ const Root = React.forwardRef<HTMLDivElement, React.PropsWithChildren<PageHeader
118119 role = { role }
119120 >
120121 { children }
121- </ BaseComponent >
122+ </ RootBaseComponent >
122123 )
123124 } ,
124125) as PolymorphicForwardRefComponent < 'div' , PageHeaderProps >
125126
127+ const ContextAreaBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
128+ React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
129+ >
126130// PageHeader.ContextArea : Only visible on narrow viewports by default to provide user context of where they are at their journey. `hidden` prop available
127131// to manage their custom visibility but consumers should be careful if they choose to hide this on narrow viewports.
128132// PageHeader.ContextArea Sub Components: PageHeader.ParentLink, PageHeader.ContextBar, PageHeader.ContextAreaActions
@@ -133,13 +137,14 @@ const ContextArea: React.FC<React.PropsWithChildren<ChildrenPropTypes>> = ({
133137 hidden = hiddenOnRegularAndWide ,
134138 sx : sxProp = defaultSxProp ,
135139} ) => {
136- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
137- React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
138- >
139140 return (
140- < BaseComponent className = { clsx ( classes . ContextArea , className ) } sx = { sxProp } { ...getHiddenDataAttributes ( hidden ) } >
141+ < ContextAreaBaseComponent
142+ className = { clsx ( classes . ContextArea , className ) }
143+ sx = { sxProp }
144+ { ...getHiddenDataAttributes ( hidden ) }
145+ >
141146 { children }
142- </ BaseComponent >
147+ </ ContextAreaBaseComponent >
143148 )
144149}
145150type LinkProps = Pick <
@@ -189,22 +194,29 @@ ParentLink.displayName = 'ParentLink'
189194// Generic slot for any component above the title region. Use it for custom breadcrumbs and other navigation elements instead of ParentLink.
190195// ---------------------------------------------------------------------
191196
197+ const ContextBarBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
198+ React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
199+ >
192200const ContextBar : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
193201 children,
194202 className,
195203 sx : sxProp = defaultSxProp ,
196204 hidden = hiddenOnRegularAndWide ,
197205} ) => {
198- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
199- React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
200- >
201206 return (
202- < BaseComponent className = { clsx ( classes . ContextBar , className ) } sx = { sxProp } { ...getHiddenDataAttributes ( hidden ) } >
207+ < ContextBarBaseComponent
208+ className = { clsx ( classes . ContextBar , className ) }
209+ sx = { sxProp }
210+ { ...getHiddenDataAttributes ( hidden ) }
211+ >
203212 { children }
204- </ BaseComponent >
213+ </ ContextBarBaseComponent >
205214 )
206215}
207216
217+ const ContextAreaActionsBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
218+ React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
219+ >
208220// ContextAreaActions
209221// ---------------------------------------------------------------------
210222const ContextAreaActions : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
@@ -213,18 +225,15 @@ const ContextAreaActions: React.FC<React.PropsWithChildren<ChildrenPropTypes>> =
213225 sx : sxProp = defaultSxProp ,
214226 hidden = hiddenOnRegularAndWide ,
215227} ) => {
216- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
217- React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
218- >
219228 return (
220- < BaseComponent
229+ < ContextAreaActionsBaseComponent
221230 className = { clsx ( classes . ContextAreaActions , className ) }
222231 { ...getHiddenDataAttributes ( hidden ) }
223232 sx = { sxProp }
224233 { ...getHiddenDataAttributes ( hidden ) }
225234 >
226235 { children }
227- </ BaseComponent >
236+ </ ContextAreaActionsBaseComponent >
228237 )
229238}
230239
@@ -235,15 +244,15 @@ type TitleAreaProps = {
235244// PageHeader.TitleArea Sub Components: PageHeader.LeadingVisual, PageHeader.Title, PageTitle.TrailingVisual
236245// ---------------------------------------------------------------------
237246
247+ const TitleAreaBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
248+ React . PropsWithChildren < TitleAreaProps & React . RefAttributes < HTMLDivElement > >
249+ >
238250const TitleArea = React . forwardRef < HTMLDivElement , React . PropsWithChildren < TitleAreaProps > > (
239251 ( { children, className, sx : sxProp = defaultSxProp , hidden = false , variant = 'medium' } , forwardedRef ) => {
240252 const titleAreaRef = useProvidedRefOrCreate < HTMLDivElement > ( forwardedRef as React . RefObject < HTMLDivElement > )
241253 const currentVariant = useResponsiveValue ( variant , 'medium' )
242- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
243- React . PropsWithChildren < TitleAreaProps & React . RefAttributes < HTMLDivElement > >
244- >
245254 return (
246- < BaseComponent
255+ < TitleAreaBaseComponent
247256 className = { clsx ( classes . TitleArea , className ) }
248257 ref = { titleAreaRef }
249258 data-component = "TitleArea"
@@ -252,12 +261,16 @@ const TitleArea = React.forwardRef<HTMLDivElement, React.PropsWithChildren<Title
252261 { ...getHiddenDataAttributes ( hidden ) }
253262 >
254263 { children }
255- </ BaseComponent >
264+ </ TitleAreaBaseComponent >
256265 )
257266 } ,
258267) as PolymorphicForwardRefComponent < 'div' , TitleAreaProps >
259268TitleArea . displayName = 'TitleArea'
260269
270+ const LeadingActionBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
271+ React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > > &
272+ React . HtmlHTMLAttributes < HTMLDivElement >
273+ >
261274// PageHeader.LeadingAction and PageHeader.TrailingAction should only be visible on regular viewports.
262275// So they come as hidden on narrow viewports by default and their visibility can be managed by their `hidden` prop.
263276const LeadingAction : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
@@ -270,45 +283,46 @@ const LeadingAction: React.FC<React.PropsWithChildren<ChildrenPropTypes>> = ({
270283 // @ts -ignore sx has height attribute
271284 const { height} = sxProp
272285 if ( height ) style [ '--custom-height' ] = height
273- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
274- React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > > &
275- React . HtmlHTMLAttributes < HTMLDivElement >
276- >
277286 return (
278- < BaseComponent
287+ < LeadingActionBaseComponent
279288 className = { clsx ( classes . LeadingAction , className ) }
280289 data-component = "PH_LeadingAction"
281290 sx = { sxProp }
282291 style = { style }
283292 { ...getHiddenDataAttributes ( hidden ) }
284293 >
285294 { children }
286- </ BaseComponent >
295+ </ LeadingActionBaseComponent >
287296 )
288297}
289298
299+ const BreadcrumbsBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
300+ React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
301+ >
290302// This is reserved for only breadcrumbs.
291303const Breadcrumbs : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
292304 children,
293305 className,
294306 sx : sxProp = defaultSxProp ,
295307 hidden = false ,
296308} ) => {
297- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
298- React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
299- >
300309 return (
301- < BaseComponent
310+ < BreadcrumbsBaseComponent
302311 className = { clsx ( classes . Breadcrumbs , className ) }
303312 data-component = "PH_Breadcrumbs"
304313 sx = { sxProp }
305314 { ...getHiddenDataAttributes ( hidden ) }
306315 >
307316 { children }
308- </ BaseComponent >
317+ </ BreadcrumbsBaseComponent >
309318 )
310319}
311320
321+ const LeadingVisualBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
322+ React . PropsWithChildren <
323+ ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
324+ >
325+ >
312326// PageHeader.LeadingVisual and PageHeader.TrailingVisual should remain visible on narrow viewports.
313327const LeadingVisual : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
314328 children,
@@ -320,21 +334,16 @@ const LeadingVisual: React.FC<React.PropsWithChildren<ChildrenPropTypes>> = ({
320334 // @ts -ignore sx has height attribute
321335 const { height} = sxProp
322336 if ( height ) style [ '--custom-height' ] = height
323- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
324- React . PropsWithChildren <
325- ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
326- >
327- >
328337 return (
329- < BaseComponent
338+ < LeadingVisualBaseComponent
330339 className = { clsx ( classes . LeadingVisual , className ) }
331340 data-component = "PH_LeadingVisual"
332341 sx = { sxProp }
333342 style = { style }
334343 { ...getHiddenDataAttributes ( hidden ) }
335344 >
336345 { children }
337- </ BaseComponent >
346+ </ LeadingVisualBaseComponent >
338347 )
339348}
340349
@@ -371,6 +380,11 @@ const Title: React.FC<React.PropsWithChildren<TitleProps>> = ({
371380 )
372381}
373382
383+ const TrailingVisualBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
384+ React . PropsWithChildren <
385+ ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
386+ >
387+ >
374388// PageHeader.LeadingVisual and PageHeader.TrailingVisual should remain visible on narrow viewports.
375389const TrailingVisual : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
376390 children,
@@ -382,24 +396,24 @@ const TrailingVisual: React.FC<React.PropsWithChildren<ChildrenPropTypes>> = ({
382396 // @ts -ignore sx has height attribute
383397 const { height} = sxProp
384398 if ( height ) style [ '--custom-height' ] = height
385- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
386- React . PropsWithChildren <
387- ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
388- >
389- >
390399 return (
391- < BaseComponent
400+ < TrailingVisualBaseComponent
392401 className = { clsx ( classes . TrailingVisual , className ) }
393402 data-component = "PH_TrailingVisual"
394403 sx = { sxProp }
395404 style = { style }
396405 { ...getHiddenDataAttributes ( hidden ) }
397406 >
398407 { children }
399- </ BaseComponent >
408+ </ TrailingVisualBaseComponent >
400409 )
401410}
402411
412+ const TrailingActionBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
413+ React . PropsWithChildren <
414+ ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
415+ >
416+ >
403417const TrailingAction : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
404418 children,
405419 className,
@@ -410,24 +424,24 @@ const TrailingAction: React.FC<React.PropsWithChildren<ChildrenPropTypes>> = ({
410424 // @ts -ignore sx has height attribute
411425 const { height} = sxProp
412426 if ( height ) style [ '--custom-height' ] = height
413- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
414- React . PropsWithChildren <
415- ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
416- >
417- >
418427 return (
419- < BaseComponent
428+ < TrailingActionBaseComponent
420429 className = { clsx ( classes . TrailingAction , className ) }
421430 data-component = "PH_TrailingAction"
422431 sx = { sxProp }
423432 style = { style }
424433 { ...getHiddenDataAttributes ( hidden ) }
425434 >
426435 { children }
427- </ BaseComponent >
436+ </ TrailingActionBaseComponent >
428437 )
429438}
430439
440+ const ActionsBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
441+ React . PropsWithChildren <
442+ ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
443+ >
444+ >
431445const Actions : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
432446 children,
433447 className,
@@ -438,38 +452,38 @@ const Actions: React.FC<React.PropsWithChildren<ChildrenPropTypes>> = ({
438452 // @ts -ignore sx has height attribute
439453 const { height} = sxProp
440454 if ( height ) style [ '--custom-height' ] = height
441- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
442- React . PropsWithChildren <
443- ChildrenPropTypes & React . RefAttributes < HTMLDivElement > & React . HtmlHTMLAttributes < HTMLDivElement >
444- >
445- >
446455 return (
447- < BaseComponent
456+ < ActionsBaseComponent
448457 className = { clsx ( classes . Actions , className ) }
449458 data-component = "PH_Actions"
450459 sx = { sxProp }
451460 style = { style }
452461 { ...getHiddenDataAttributes ( hidden ) }
453462 >
454463 { children }
455- </ BaseComponent >
464+ </ ActionsBaseComponent >
456465 )
457466}
458467
468+ const DescriptionBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
469+ React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
470+ >
471+
459472// PageHeader.Description: The description area of the header. Visible on all viewports
460473const Description : React . FC < React . PropsWithChildren < ChildrenPropTypes > > = ( {
461474 children,
462475 className,
463476 sx : sxProp = defaultSxProp ,
464477 hidden = false ,
465478} ) => {
466- const BaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
467- React . PropsWithChildren < ChildrenPropTypes & React . RefAttributes < HTMLDivElement > >
468- >
469479 return (
470- < BaseComponent className = { clsx ( classes . Description , className ) } sx = { sxProp } { ...getHiddenDataAttributes ( hidden ) } >
480+ < DescriptionBaseComponent
481+ className = { clsx ( classes . Description , className ) }
482+ sx = { sxProp }
483+ { ...getHiddenDataAttributes ( hidden ) }
484+ >
471485 { children }
472- </ BaseComponent >
486+ </ DescriptionBaseComponent >
473487 )
474488}
475489
@@ -479,6 +493,10 @@ export type NavigationProps = {
479493 'aria-labelledby' ?: React . AriaAttributes [ 'aria-labelledby' ]
480494} & ChildrenPropTypes
481495
496+ const NavigationBaseComponent = toggleSxComponent ( 'div' ) as React . ComponentType <
497+ React . PropsWithChildren < NavigationProps & React . RefAttributes < HTMLDivElement > >
498+ >
499+
482500// PageHeader.Navigation: The local navigation area of the header. Visible on all viewports
483501const Navigation : React . FC < React . PropsWithChildren < NavigationProps > > = ( {
484502 children,
@@ -493,11 +511,10 @@ const Navigation: React.FC<React.PropsWithChildren<NavigationProps>> = ({
493511 as === 'nav' && ! ariaLabel && ! ariaLabelledBy ,
494512 'Use `aria-label` or `aria-labelledby` prop to provide an accessible label to the `nav` landmark for assistive technology' ,
495513 )
496- const BaseComponent = toggleSxComponent ( as || 'div' ) as React . ComponentType <
497- React . PropsWithChildren < NavigationProps & React . RefAttributes < HTMLDivElement > >
498- >
514+
499515 return (
500- < BaseComponent
516+ < NavigationBaseComponent
517+ as = { as }
501518 // Render `aria-label` and `aria-labelledby` only on `nav` elements
502519 aria-label = { as === 'nav' ? ariaLabel : undefined }
503520 aria-labelledby = { as === 'nav' ? ariaLabelledBy : undefined }
@@ -507,7 +524,7 @@ const Navigation: React.FC<React.PropsWithChildren<NavigationProps>> = ({
507524 { ...getHiddenDataAttributes ( hidden ) }
508525 >
509526 { children }
510- </ BaseComponent >
527+ </ NavigationBaseComponent >
511528 )
512529}
513530
0 commit comments