{"version":3,"sources":["../src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useAvatarGroupContext_unstable } from '../../contexts/AvatarGroupContext';\nimport { defaultAvatarGroupSize } from '../AvatarGroup/useAvatarGroup';\nimport { useControllableState, slot } from '@fluentui/react-utilities';\nimport { MoreHorizontalRegular } from '@fluentui/react-icons';\nimport type { OnOpenChangeData, OpenPopoverEvents } from '@fluentui/react-popover';\nimport { Popover, type PopoverProps, PopoverSurface } from '@fluentui/react-popover';\nimport type {\n  AvatarGroupPopoverBaseProps,\n  AvatarGroupPopoverBaseState,\n  AvatarGroupPopoverProps,\n  AvatarGroupPopoverState,\n} from './AvatarGroupPopover.types';\nimport { Tooltip } from '@fluentui/react-tooltip';\n\n/**\n * Create the state required to render AvatarGroupPopover.\n *\n * The returned state can be modified with hooks such as useAvatarGroupPopoverStyles_unstable,\n * before being passed to renderAvatarGroupPopover_unstable.\n *\n * @param props - props from this instance of AvatarGroupPopover\n */\nexport const useAvatarGroupPopover_unstable = (props: AvatarGroupPopoverProps): AvatarGroupPopoverState => {\n  const size = useAvatarGroupContext_unstable(ctx => ctx.size) ?? defaultAvatarGroupSize;\n  const layout = useAvatarGroupContext_unstable(ctx => ctx.layout);\n  const { indicator = size < 24 ? 'icon' : 'count', ...baseProps } = props;\n\n  const state = useAvatarGroupPopoverBase_unstable({\n    indicator,\n    ...baseProps,\n  });\n\n  if (layout === 'pie') {\n    // eslint-disable-next-line react-hooks/immutability\n    state.triggerButton.children = null;\n  } else if (indicator === 'icon') {\n    // eslint-disable-next-line react-hooks/immutability\n    state.triggerButton.children = <MoreHorizontalRegular />;\n  }\n\n  return {\n    size,\n    ...state,\n\n    components: {\n      // eslint-disable-next-line @typescript-eslint/no-deprecated\n      ...state.components,\n      root: Popover,\n      popoverSurface: PopoverSurface,\n      tooltip: Tooltip,\n    },\n    root: slot.always(state.root as PopoverProps, { elementType: Popover }),\n    popoverSurface: slot.always(props.popoverSurface, {\n      defaultProps: state.popoverSurface,\n      elementType: PopoverSurface,\n    }),\n    tooltip: slot.always(props.tooltip, {\n      defaultProps: state.tooltip,\n      elementType: Tooltip,\n    }),\n  };\n};\n\n/**\n * Handles popover open/closed state, indicator display, and slot configuration.\n * Use directly for custom implementations or use useAvatarGroupPopover_unstable for defaults.\n *\n * @param props - AvatarGroupPopover props\n * @returns AvatarGroupPopover state\n */\nexport const useAvatarGroupPopoverBase_unstable = (props: AvatarGroupPopoverBaseProps): AvatarGroupPopoverBaseState => {\n  const layout = useAvatarGroupContext_unstable(ctx => ctx.layout);\n  const { indicator = 'count', count = React.Children.count(props.children), children, ...restOfProps } = props;\n\n  const [popoverOpen, setPopoverOpen] = useControllableState({\n    state: props.open,\n    defaultState: props.defaultOpen,\n    initialState: false,\n  });\n\n  const handleOnPopoverChange = (e: OpenPopoverEvents, data: OnOpenChangeData) => {\n    restOfProps.onOpenChange?.(e, data);\n    setPopoverOpen(data.open);\n  };\n\n  let triggerButtonChildren;\n  if (layout === 'pie') {\n    triggerButtonChildren = null;\n  } else if (indicator === 'count') {\n    triggerButtonChildren = count > 99 ? '99+' : `+${count}`;\n  }\n\n  return {\n    count,\n    indicator,\n    layout,\n    popoverOpen,\n\n    components: {\n      root: 'div',\n      triggerButton: 'button',\n      content: 'ul',\n      popoverSurface: 'div',\n      tooltip: 'div',\n    },\n    root: slot.always(\n      {\n        // Popover expects a child for its children. The children are added in the renderAvatarGroupPopover.\n        children: <></>,\n        size: 'small',\n        trapFocus: true,\n        ...restOfProps,\n        open: popoverOpen,\n        onOpenChange: handleOnPopoverChange,\n      },\n      { elementType: 'div' },\n    ),\n    triggerButton: slot.always(props.triggerButton, {\n      defaultProps: {\n        children: triggerButtonChildren,\n        type: 'button',\n      },\n      elementType: 'button',\n    }),\n    content: slot.always(props.content, {\n      defaultProps: {\n        children,\n        role: 'list',\n      },\n      elementType: 'ul',\n    }),\n    popoverSurface: slot.always(props.popoverSurface, {\n      defaultProps: {\n        'aria-label': 'Overflow',\n        tabIndex: 0,\n      },\n      elementType: 'div',\n    }),\n    tooltip: slot.always(props.tooltip, {\n      defaultProps: {\n        content: 'View more people.',\n        relationship: 'label',\n      },\n      elementType: 'div',\n    }),\n  };\n};\n"],"names":["React","useAvatarGroupContext_unstable","defaultAvatarGroupSize","useControllableState","slot","MoreHorizontalRegular","Popover","PopoverSurface","Tooltip","useAvatarGroupPopover_unstable","props","size","ctx","layout","indicator","baseProps","state","useAvatarGroupPopoverBase_unstable","triggerButton","children","components","root","popoverSurface","tooltip","always","elementType","defaultProps","count","Children","restOfProps","popoverOpen","setPopoverOpen","open","defaultState","defaultOpen","initialState","handleOnPopoverChange","e","data","onOpenChange","triggerButtonChildren","content","trapFocus","type","role","tabIndex","relationship"],"mappings":"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"}