{"version":3,"sources":["../src/components/Menu/MenuPopover/useMenuPopover.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useMenuPopoverBase_unstable } from '@fluentui/react-menu';\nimport { useMenuContext } from '../menuContext';\nimport type { MenuPopoverProps, MenuPopoverState } from '@fluentui/react-menu';\n\nconst SUPPORTS_POPOVER_OPEN_SELECTOR =\n  typeof CSS !== 'undefined' && typeof CSS.supports === 'function' && CSS.supports('selector(:popover-open)');\n\ntype ToggleEvent = Event & { newState?: 'open' | 'closed' };\n\nexport const useMenuPopover = (props: MenuPopoverProps, ref: React.Ref<HTMLElement>): MenuPopoverState => {\n  const baseState = useMenuPopoverBase_unstable(props, ref);\n\n  const state: MenuPopoverState = {\n    ...baseState,\n    root: { ...baseState.root, popover: 'auto' } as MenuPopoverState['root'],\n  };\n\n  const open = useMenuContext(ctx => ctx.open);\n  const setOpen = useMenuContext(ctx => ctx.setOpen);\n  const menuPopoverRef = useMenuContext(ctx => ctx.menuPopoverRef);\n\n  React.useEffect(() => {\n    const surface = menuPopoverRef.current as HTMLElement | null;\n\n    if (!surface) {\n      return;\n    }\n\n    if (typeof surface.showPopover !== 'function') {\n      return;\n    }\n\n    if (!open) {\n      if (SUPPORTS_POPOVER_OPEN_SELECTOR && !surface.matches(':popover-open')) {\n        return;\n      }\n\n      surface.hidePopover();\n      return;\n    }\n\n    const firstFocusable = surface.querySelector<HTMLElement>(\n      ':is([role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]):not([aria-disabled=\"true\"])',\n    );\n\n    firstFocusable?.setAttribute('autofocus', '');\n\n    if (!(SUPPORTS_POPOVER_OPEN_SELECTOR && surface.matches(':popover-open'))) {\n      surface.showPopover();\n    }\n\n    const menuListEl = surface.querySelector<HTMLElement>('[focusgroup]');\n\n    if (menuListEl) {\n      menuListEl.setAttribute('focusgroup', menuListEl.getAttribute('focusgroup') ?? '');\n    }\n\n    const onSurfaceToggle = (event: Event) => {\n      const next = (event as ToggleEvent).newState;\n      if (next === 'closed' && open) {\n        setOpen(event as unknown as MouseEvent, {\n          open: false,\n          type: 'clickOutside',\n          event: event as unknown as MouseEvent,\n        });\n      }\n    };\n\n    surface.addEventListener('toggle', onSurfaceToggle);\n    return () => surface.removeEventListener('toggle', onSurfaceToggle);\n  }, [menuPopoverRef, open, setOpen]);\n\n  return state;\n};\n"],"names":["useMenuPopover","SUPPORTS_POPOVER_OPEN_SELECTOR","CSS","supports","props","ref","baseState","useMenuPopoverBase_unstable","state","root","popover","open","useMenuContext","ctx","setOpen","menuPopoverRef","React","useEffect","surface","current","showPopover","matches","hidePopover","firstFocusable","querySelector","setAttribute","menuListEl","getAttribute","onSurfaceToggle","event","next","newState","type","addEventListener","removeEventListener"],"mappings":"AAAA;;;;;+BAYaA;;;eAAAA;;;;iEAVU;2BACqB;6BACb;AAG/B,MAAMC,iCACJ,OAAOC,QAAQ,eAAe,OAAOA,IAAIC,QAAQ,KAAK,cAAcD,IAAIC,QAAQ,CAAC;AAI5E,MAAMH,iBAAiB,CAACI,OAAyBC;IACtD,MAAMC,YAAYC,IAAAA,sCAA2B,EAACH,OAAOC;IAErD,MAAMG,QAA0B;QAC9B,GAAGF,SAAS;QACZG,MAAM;YAAE,GAAGH,UAAUG,IAAI;YAAEC,SAAS;QAAO;IAC7C;IAEA,MAAMC,OAAOC,IAAAA,2BAAc,EAACC,CAAAA,MAAOA,IAAIF,IAAI;IAC3C,MAAMG,UAAUF,IAAAA,2BAAc,EAACC,CAAAA,MAAOA,IAAIC,OAAO;IACjD,MAAMC,iBAAiBH,IAAAA,2BAAc,EAACC,CAAAA,MAAOA,IAAIE,cAAc;IAE/DC,OAAMC,SAAS,CAAC;QACd,MAAMC,UAAUH,eAAeI,OAAO;QAEtC,IAAI,CAACD,SAAS;YACZ;QACF;QAEA,IAAI,OAAOA,QAAQE,WAAW,KAAK,YAAY;YAC7C;QACF;QAEA,IAAI,CAACT,MAAM;YACT,IAAIV,kCAAkC,CAACiB,QAAQG,OAAO,CAAC,kBAAkB;gBACvE;YACF;YAEAH,QAAQI,WAAW;YACnB;QACF;QAEA,MAAMC,iBAAiBL,QAAQM,aAAa,CAC1C;QAGFD,gBAAgBE,aAAa,aAAa;QAE1C,IAAI,CAAExB,CAAAA,kCAAkCiB,QAAQG,OAAO,CAAC,gBAAe,GAAI;YACzEH,QAAQE,WAAW;QACrB;QAEA,MAAMM,aAAaR,QAAQM,aAAa,CAAc;QAEtD,IAAIE,YAAY;YACdA,WAAWD,YAAY,CAAC,cAAcC,WAAWC,YAAY,CAAC,iBAAiB;QACjF;QAEA,MAAMC,kBAAkB,CAACC;YACvB,MAAMC,OAAO,AAACD,MAAsBE,QAAQ;YAC5C,IAAID,SAAS,YAAYnB,MAAM;gBAC7BG,QAAQe,OAAgC;oBACtClB,MAAM;oBACNqB,MAAM;oBACNH,OAAOA;gBACT;YACF;QACF;QAEAX,QAAQe,gBAAgB,CAAC,UAAUL;QACnC,OAAO,IAAMV,QAAQgB,mBAAmB,CAAC,UAAUN;IACrD,GAAG;QAACb;QAAgBJ;QAAMG;KAAQ;IAElC,OAAON;AACT"}