{"version":3,"sources":["../src/components/Dialog/useDialog.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useControllableState, useEventCallback, useId } from '@fluentui/react-utilities';\nimport { DialogContext } from './dialogContext';\nimport type { DialogOpenChangeData, DialogProps, DialogState } from './Dialog.types';\n\n/**\n * Create the state required to render Dialog.\n *\n * The returned state can be modified with hooks before being passed to renderDialog.\n *\n * @param props - props from this instance of Dialog\n */\nexport const useDialog = (props: DialogProps): DialogState => {\n  const { children, modalType = 'modal', onOpenChange, inertTrapFocus = false, unmountOnClose = true } = props;\n\n  const dialogTitleId = useId('dialog-title-');\n  const [trigger, content] = childrenToTriggerAndContent(children);\n\n  const [open, setOpen] = useControllableState({\n    state: props.open,\n    defaultState: props.defaultOpen,\n    initialState: false,\n  });\n\n  // Detect nested dialog by checking for a parent DialogContext\n  const parentContext = React.useContext(DialogContext);\n  const isNestedDialog = parentContext !== undefined;\n\n  const requestOpenChange = useEventCallback((data: DialogOpenChangeData) => {\n    onOpenChange?.(data.event, data);\n\n    const syntheticEvent = data.event as React.SyntheticEvent;\n\n    const isDefaultPrevented =\n      typeof syntheticEvent.isDefaultPrevented === 'function'\n        ? syntheticEvent.isDefaultPrevented()\n        : data.event.defaultPrevented;\n\n    if (!isDefaultPrevented) {\n      setOpen(data.open);\n    }\n  });\n\n  return {\n    open,\n    modalType,\n    dialogTitleId,\n    isNestedDialog,\n    inertTrapFocus,\n    unmountOnClose,\n    trigger,\n    content,\n    requestOpenChange,\n  };\n};\n\n/**\n * Splits Dialog children into trigger and surface content by position.\n *\n * Expected order is:\n * - `[DialogTrigger, DialogSurface]`, or\n * - `[DialogSurface]` when the dialog is externally triggered/controlled.\n *\n * In development, invalid child counts emit a warning.\n */\nfunction childrenToTriggerAndContent(\n  children: React.ReactNode,\n): readonly [trigger: React.ReactNode, content: React.ReactNode] {\n  const childrenArray = React.Children.toArray(children) as React.ReactElement[];\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (childrenArray.length !== 1 && childrenArray.length !== 2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `@fluentui/react-headless-components-preview [useDialog]: ` +\n          `Dialog must contain at least one child <DialogSurface/>, ` +\n          `and at most two children <DialogTrigger/> <DialogSurface/> (in this order).`,\n      );\n    }\n  }\n\n  switch (childrenArray.length) {\n    // trigger + content\n    case 2:\n      return childrenArray as [trigger: React.ReactNode, content: React.ReactNode];\n    // content only\n    case 1:\n      return [undefined, childrenArray[0]];\n    default:\n      return [undefined, undefined];\n  }\n}\n"],"names":["useDialog","props","children","modalType","onOpenChange","inertTrapFocus","unmountOnClose","dialogTitleId","useId","trigger","content","childrenToTriggerAndContent","open","setOpen","useControllableState","state","defaultState","defaultOpen","initialState","parentContext","React","useContext","DialogContext","isNestedDialog","undefined","requestOpenChange","useEventCallback","data","event","syntheticEvent","isDefaultPrevented","defaultPrevented","childrenArray","Children","toArray","process","env","NODE_ENV","length","console","warn"],"mappings":"AAAA;;;;;+BAcaA;;;eAAAA;;;;iEAZU;gCACuC;+BAChC;AAUvB,MAAMA,YAAY,CAACC;IACxB,MAAM,EAAEC,QAAQ,EAAEC,YAAY,OAAO,EAAEC,YAAY,EAAEC,iBAAiB,KAAK,EAAEC,iBAAiB,IAAI,EAAE,GAAGL;IAEvG,MAAMM,gBAAgBC,IAAAA,qBAAK,EAAC;IAC5B,MAAM,CAACC,SAASC,QAAQ,GAAGC,4BAA4BT;IAEvD,MAAM,CAACU,MAAMC,QAAQ,GAAGC,IAAAA,oCAAoB,EAAC;QAC3CC,OAAOd,MAAMW,IAAI;QACjBI,cAAcf,MAAMgB,WAAW;QAC/BC,cAAc;IAChB;IAEA,8DAA8D;IAC9D,MAAMC,gBAAgBC,OAAMC,UAAU,CAACC,4BAAa;IACpD,MAAMC,iBAAiBJ,kBAAkBK;IAEzC,MAAMC,oBAAoBC,IAAAA,gCAAgB,EAAC,CAACC;QAC1CvB,eAAeuB,KAAKC,KAAK,EAAED;QAE3B,MAAME,iBAAiBF,KAAKC,KAAK;QAEjC,MAAME,qBACJ,OAAOD,eAAeC,kBAAkB,KAAK,aACzCD,eAAeC,kBAAkB,KACjCH,KAAKC,KAAK,CAACG,gBAAgB;QAEjC,IAAI,CAACD,oBAAoB;YACvBjB,QAAQc,KAAKf,IAAI;QACnB;IACF;IAEA,OAAO;QACLA;QACAT;QACAI;QACAgB;QACAlB;QACAC;QACAG;QACAC;QACAe;IACF;AACF;AAEA;;;;;;;;CAQC,GACD,SAASd,4BACPT,QAAyB;IAEzB,MAAM8B,gBAAgBZ,OAAMa,QAAQ,CAACC,OAAO,CAAChC;IAE7C,IAAIiC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;QACzC,IAAIL,cAAcM,MAAM,KAAK,KAAKN,cAAcM,MAAM,KAAK,GAAG;YAC5D,sCAAsC;YACtCC,QAAQC,IAAI,CACV,CAAC,yDAAyD,CAAC,GACzD,CAAC,yDAAyD,CAAC,GAC3D,CAAC,2EAA2E,CAAC;QAEnF;IACF;IAEA,OAAQR,cAAcM,MAAM;QAC1B,oBAAoB;QACpB,KAAK;YACH,OAAON;QACT,eAAe;QACf,KAAK;YACH,OAAO;gBAACR;gBAAWQ,aAAa,CAAC,EAAE;aAAC;QACtC;YACE,OAAO;gBAACR;gBAAWA;aAAU;IACjC;AACF"}