@@ -16,6 +16,7 @@ import React, {
1616 type ElementType ,
1717} from 'react' ;
1818import useIsomorphicEffect from '../../internal/useIsomorphicEffect' ;
19+ import { isComponentElement } from '../../internal' ;
1920import { useMergedRefs } from '../../internal/useMergedRefs' ;
2021import { usePrefix } from '../../internal/usePrefix' ;
2122import { useWindowEvent , useEvent } from '../../internal/useEvent' ;
@@ -475,7 +476,13 @@ export const Popover: PopoverComponent & {
475476 const mappedChildren = React . Children . map ( children , ( child ) => {
476477 // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452
477478 const item = child as any ;
478- const displayName = item ?. type ?. displayName ;
479+ // TODO: Stop relying on `displayName` checks by moving `Toggletip`
480+ // subcomponents into their own files that avoid the `Popover` <->
481+ // `Toggletip` circular dependency. Then replace these `displayName` checks
482+ // with `isComponentElement(item, ...)` checks.
483+ const isToggletipButton = item ?. type ?. displayName === 'ToggletipButton' ;
484+ const isToggletipContent = item ?. type ?. displayName === 'ToggletipContent' ;
485+ const isPopoverContent = isComponentElement ( item , PopoverContent ) ;
479486
480487 /**
481488 * Only trigger elements (button) or trigger components (ToggletipButton) should be
@@ -485,13 +492,9 @@ export const Popover: PopoverComponent & {
485492 * is on, even if they are a trigger element.
486493 */
487494 const isTriggerElement = item ?. type === 'button' ;
488- const isTriggerComponent =
489- enableFloatingStyles &&
490- displayName &&
491- [ 'ToggletipButton' ] . includes ( displayName ) ;
495+ const isTriggerComponent = enableFloatingStyles && isToggletipButton ;
492496 const isAllowedTriggerComponent =
493- enableFloatingStyles &&
494- ! [ 'ToggletipContent' , 'PopoverContent' ] . includes ( displayName ) ;
497+ enableFloatingStyles && ! isToggletipContent && ! isPopoverContent ;
495498
496499 if (
497500 React . isValidElement ( item ) &&
@@ -523,11 +526,7 @@ export const Popover: PopoverComponent & {
523526 // For a toggletip there is a specific trigger component, ToggletipButton.
524527 // In either of these cases we want to set this as the reference node for floating-ui autoAlign
525528 // positioning.
526- if (
527- ( enableFloatingStyles && item ?. type !== PopoverContent ) ||
528- ( enableFloatingStyles &&
529- item ?. type [ 'displayName' ] === 'ToggletipButton' )
530- ) {
529+ if ( enableFloatingStyles && ! isPopoverContent ) {
531530 // Set the reference element for floating-ui
532531 refs . setReference ( node ) ;
533532 }
0 commit comments