{"version":3,"sources":["../../src/components/Button/IconButton/IconButton.styles.ts","../../src/components/Button/IconButton/IconButton.tsx","../../src/useUnmount.ts","../../src/components/Overlay/Overlay.base.tsx","../../src/components/Overlay/Overlay.styles.ts","../../src/components/Overlay/Overlay.tsx","../../src/useEventCallback.ts","../../src/components/FocusTrapZone/FocusTrapZone.tsx","../../src/components/Dialog/DialogContent.types.ts","../../src/components/Modal/Modal.styles.ts","../../src/utilities/DraggableZone/DraggableZone.styles.ts","../../src/utilities/DraggableZone/DraggableZone.tsx","../../src/useSetTimeout.ts","../../src/components/Modal/Modal.base.tsx","../../src/useBoolean.ts","../../src/components/Modal/Modal.ts","../../src/components/Dialog/DialogFooter.base.tsx","../../src/components/Dialog/DialogFooter.styles.ts","../../src/components/Dialog/DialogFooter.tsx","../../src/components/Dialog/DialogContent.base.tsx","../../src/components/Dialog/DialogContent.styles.ts","../../src/components/Dialog/DialogContent.tsx","../../src/components/Dialog/Dialog.base.tsx","../../src/components/Dialog/Dialog.styles.ts","../../src/components/Dialog/Dialog.tsx"],"names":["getStyles","memoizeFunction","theme","customStyles","baseButtonStyles","getBaseButtonStyles","splitButtonStyles","getSplitButtonStyles","palette","iconButtonStyles","root","padding","width","height","backgroundColor","border","color","semanticColors","link","rootHovered","themeDarkAlt","neutralLighter","selectors","_a","HighContrastSelector","borderColor","rootHasMenu","rootPressed","themeDark","neutralLight","rootExpanded","rootChecked","rootCheckedHovered","neutralQuaternaryAlt","rootDisabled","neutralTertiaryAlt","concatStyleSets","IconButton","_super","__extends","prototype","render","this","props","styles","React","BaseButton","__assign","variantClassName","onRenderText","nullRender","onRenderDescription","__decorate","customizable","useUnmount","callback","unmountRef","current","call","getClassNames","classNamesFunction","OverlayBase","_this","initializeComponentRef","allowTouchBodyScroll","_allowTouchBodyScroll","componentDidMount","disableBodyScroll","componentWillUnmount","enableBodyScroll","isDark","isDarkThemed","className","divProps","getNativeProps","divProperties","classNames","GlobalClassNames","rootDark","Overlay","styled","isNone","getGlobalClassNames","fonts","medium","whiteTranslucent40","top","right","bottom","left","position","opacity","visibility","blackTranslucent40","undefined","scope","useEventCallback","fn","callbackRef","Error","useIsomorphicLayoutEffect","useConst","args","_i","arguments","length","apply","DEFAULT_PROPS","disabled","disableFirstFocus","forceFocusInsideTrap","isClickableOutsideFocusTrap","FocusTrapZone","propsWithoutDefaults","ref","firstBumper","lastBumper","mergedRootRef","useMergedRefs","doc","useDocument","isFirstRender","usePrevious","getPropsWithDefaults","internalState","hasFocus","focusStackId","useId","id","children","componentRef","focusPreviouslyFocusedInnerElement","firstFocusableSelector","firstFocusableTarget","_b","disableRestoreFocus","ignoreExternalFocusing","enableAriaHiddenSiblings","bumperProps","style","pointerEvents","tabIndex","focusElementAsync","element","focusAsync","focusFTZ","previouslyFocusedElementInTrapZone","elementContains","firstFocusableChild","querySelector","focusSelector","getNextElement","firstChild","focusBumper","isFirstBumper","nextFocusable","getLastTabbable","getFirstTabbable","focus","returnFocusToInitiator","elementToFocusOnDismiss","focusStack","filter","value","activeElement","body","forceFocusOrClickInTrap","ev","slice","targetElement","target","setTimeout","preventDefault","stopPropagation","disposables","push","on","window","forEach","dispose","modalize","previouslyFocusedElement","useComponentRef","ariaLabelledBy","onFocusCapture","currentTarget","onBlurCapture","relatedTarget","displayName","DialogType","animationDuration","AnimationVariables","durationValue2","globalClassNames","main","scrollableContent","isOpen","layer","isDragging","mergeStyles","touchAction","userSelect","eventMapping","start","move","stop","DraggableZone","_currentEventType","_events","_onMouseDown","event","onMouseDown","only","_onDragStart","_onMouseUp","onMouseUp","_onDragStop","_onTouchStart","onTouchStart","_onTouchEnd","onTouchEnd","button","handleSelector","_matchesSelector","preventDragSelector","_touchId","_getTouchId","_getControlPosition","dragData","_createDragDataFromPosition","onStart","setState","lastPosition","document","_onDrag","type","updatedData","_createUpdatedDragData","updatedPosition","onDragChange","state","baseDragData","onStop","x","y","componentDidUpdate","prevProps","child","statePosition","transform","touchObj","_getActiveTouch","eventToGetOffset","clientX","clientY","targetTouches","_findTouchInTouchList","changedTouches","touch","identifier","selector","matchesSelectorFn","matches","webkitMatchesSelector","msMatchesSelector","parentElement","touchList","i","delta","useSetTimeout","timeoutIds","Object","keys","clearTimeout","_setTimeout","_x","_x2","toString","func","duration","_clearTimeout","_x3","ZERO","isDarkOverlay","containerClassName","ModalBase","scrollableContentClassName","focusTrapZoneProps","_f","isBlocking","isAlert","onDismiss","layerProps","overlay","titleAriaId","subtitleAriaId","topOffsetFixed","responsiveMode","onLayerDidMount","isModeless","dragOptions","onDismissed","popupProps","rootRef","focusTrapZone","focusTrapZoneRef","focusTrapZoneElm","mergedRef","modalResponsiveMode","useResponsiveMode","focusTrapZoneId","win","useWindow","_g","_h","isModalOpen","setIsModalOpen","_j","isVisible","setIsVisible","_k","coordinates","setCoordinates","_l","modalRectangleTop","setModalRectangleTop","_m","initialState","setValue","setTrue","setFalse","toggle","currentValue","useBoolean","isModalMenuOpen","_o","toggleModalMenuOpen","setModalMenuClose","onModalCloseTimer","lastSetCoordinates","events","EventGroup","keepInBounds","isAlertRole","layerClassName","hasBeenOpened","windowInnerHeight","innerHeight","isDefaultDragHandle","dragHandleSelector","mergedLayerProps","eventBubblingEnabled","insertFirst","allowScrollOnModal","elt","allowOverscrollOnElement","allowScrollOnElement","off","registerInitialModalPosition","dialogMain","modalRectangle","getBoundingClientRect","minPosition","maxPosition","getClampedAxis","axis","Math","max","min","handleModalClose","isInKeyboardMoveMode","disposeOnKeyUp","handleDragStart","handleDrag","prevValue","handleDragStop","requestAnimationFrame","handleKeyUp","altKey","ctrlKey","keyCode","KeyCodes","space","registerForKeyUp","parseFloat","modalContent","css","_c","_d","_e","onBlur","disposeOnKeyDown","keyboardMoveIconContainer","keyboardMoveIconProps","Icon","iconName","keyboardMoveIcon","menu","items","key","text","moveMenuItemText","onClick","handleKeyDown","newLocal","escape","enter","handledEvent","delta_1","shiftKey","getMoveDelta","up","down","closeMenuItemText","alignTargetEdge","coverTarget","directionalHint","DirectionalHint","topLeftEdge","directionalHintFixed","shouldFocusOnMount","ResponsiveMode","small","Layer","Popup","role","ariaDescribedBy","shouldRestoreFocus","Modal","effects","display","alignItems","justifyContent","transition","boxShadow","elevation64","borderRadius","roundedCorner2","white","boxSizing","textAlign","outline","maxHeight","maxWidth","minHeight","minWidth","overflowY","zIndex","ZIndexes","cursor","flexGrow","fontSize","xLargePlus","fields","DialogFooterBase","_classNames","actions","actionsRight","_renderChildrenAsActions","map","action","DialogFooter","lineHeight","margin","verticalAlign","marginRight","DialogFooterType","DialogContentBase","warnDeprecations","titleId","subTextContent","showCloseButton","closeButtonAriaLabel","subTextId","subText","titleProps","title","draggableHeaderClassName","isLargeHeader","largeHeader","isClose","close","groupings","_groupChildren","content","header","topButton","topButtonsProps","index","uniqueId","iconProps","ariaLabel","inner","innerContent","contents","footers","defaultProps","withResponsiveMode","contentLgHeader","headerLg","DialogContent","hidden","isMultiline","borderTop","themePrimary","bodySubtext","wordWrap","fontWeight","FontWeights","regular","buttonText","IconFontSizes","ScreenWidthMinSmall","ScreenWidthMaxSmall","xLarge","bodyText","menuHeader","xxLarge","flexDirection","flexWrap","flex","buttonTextHovered","DefaultModalProps","DefaultDialogContentProps","normal","DialogBase","_getSubTextId","ariaDescribedById","modalProps","dialogContentProps","_defaultSubTextId","_getTitleTextId","ariaLabelledById","_defaultTitleTextId","_id","getId","dialogDraggableClassName","contentClassName","mergedModalProps","dialogDefaultMinWidth","dialogDefaultMaxWidth","Dialog","ScreenWidthMinMedium"],"mappings":"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","file":"static/js/55.0af8e212.chunk.js","sourcesContent":["import { concatStyleSets, HighContrastSelector } from '../../../Styling';\nimport { memoizeFunction } from '../../../Utilities';\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\nimport { getStyles as getSplitButtonStyles } from '../SplitButton/SplitButton.styles';\nimport type { IButtonStyles } from '../Button.types';\nimport type { ITheme } from '../../../Styling';\n\nexport const getStyles = memoizeFunction((theme: ITheme, customStyles?: IButtonStyles): IButtonStyles => {\n const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\n const splitButtonStyles: IButtonStyles = getSplitButtonStyles(theme);\n const { palette, semanticColors } = theme;\n const iconButtonStyles: IButtonStyles = {\n root: {\n padding: '0 4px',\n width: '32px',\n height: '32px',\n backgroundColor: 'transparent',\n border: 'none',\n color: semanticColors.link,\n },\n\n rootHovered: {\n color: palette.themeDarkAlt,\n backgroundColor: palette.neutralLighter,\n selectors: {\n [HighContrastSelector]: {\n borderColor: 'Highlight',\n color: 'Highlight',\n },\n },\n },\n\n rootHasMenu: {\n width: 'auto',\n },\n\n rootPressed: {\n color: palette.themeDark,\n backgroundColor: palette.neutralLight,\n },\n\n rootExpanded: {\n color: palette.themeDark,\n backgroundColor: palette.neutralLight,\n },\n\n rootChecked: {\n color: palette.themeDark,\n backgroundColor: palette.neutralLight,\n },\n\n rootCheckedHovered: {\n color: palette.themeDark,\n backgroundColor: palette.neutralQuaternaryAlt,\n },\n\n rootDisabled: {\n color: palette.neutralTertiaryAlt,\n },\n };\n\n return concatStyleSets(baseButtonStyles, iconButtonStyles, splitButtonStyles, customStyles)!;\n});\n","import * as React from 'react';\nimport { BaseButton } from '../BaseButton';\nimport { customizable, nullRender } from '../../../Utilities';\nimport { getStyles } from './IconButton.styles';\nimport type { IButtonProps } from '../Button.types';\n\n/**\n * {@docCategory Button}\n */\n@customizable('IconButton', ['theme', 'styles'], true)\nexport class IconButton extends React.Component<IButtonProps, {}> {\n public render(): JSX.Element {\n const { styles, theme } = this.props;\n\n return (\n <BaseButton\n {...this.props}\n variantClassName=\"ms-Button--icon\"\n styles={getStyles(theme!, styles)}\n onRenderText={nullRender}\n onRenderDescription={nullRender}\n />\n );\n }\n}\n","import * as React from 'react';\n\n/**\n * Hook which synchronously executes a callback when the component is about to unmount.\n *\n * @param callback - Function to call during unmount.\n */\nexport const useUnmount = (callback: () => void) => {\n const unmountRef = React.useRef(callback);\n unmountRef.current = callback;\n React.useEffect(\n () => () => {\n unmountRef.current?.();\n },\n [],\n );\n};\n","import * as React from 'react';\nimport {\n classNamesFunction,\n getNativeProps,\n divProperties,\n enableBodyScroll,\n disableBodyScroll,\n initializeComponentRef,\n} from '../../Utilities';\nimport type { IOverlayProps, IOverlayStyleProps, IOverlayStyles } from './Overlay.types';\n\nconst getClassNames = classNamesFunction<IOverlayStyleProps, IOverlayStyles>();\n\nexport class OverlayBase extends React.Component<IOverlayProps, {}> {\n private _allowTouchBodyScroll: boolean;\n\n constructor(props: IOverlayProps) {\n super(props);\n\n initializeComponentRef(this);\n const { allowTouchBodyScroll = false } = this.props;\n this._allowTouchBodyScroll = allowTouchBodyScroll;\n }\n\n public componentDidMount(): void {\n !this._allowTouchBodyScroll && disableBodyScroll();\n }\n\n public componentWillUnmount(): void {\n !this._allowTouchBodyScroll && enableBodyScroll();\n }\n\n public render(): JSX.Element {\n const { isDarkThemed: isDark, className, theme, styles } = this.props;\n\n const divProps = getNativeProps<React.HTMLAttributes<HTMLDivElement>>(this.props, divProperties);\n\n const classNames = getClassNames(styles!, {\n theme: theme!,\n className,\n isDark,\n });\n\n return <div {...divProps} className={classNames.root} />;\n }\n}\n","import { HighContrastSelector, getGlobalClassNames } from '../../Styling';\nimport type { IOverlayStyleProps, IOverlayStyles } from './Overlay.types';\n\nconst GlobalClassNames = {\n root: 'ms-Overlay',\n rootDark: 'ms-Overlay--dark',\n};\n\nexport const getStyles = (props: IOverlayStyleProps): IOverlayStyles => {\n const { className, theme, isNone, isDark } = props;\n\n const { palette } = theme;\n\n const classNames = getGlobalClassNames(GlobalClassNames, theme);\n\n return {\n root: [\n classNames.root,\n theme.fonts.medium,\n {\n backgroundColor: palette.whiteTranslucent40,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n position: 'absolute',\n\n selectors: {\n [HighContrastSelector]: {\n border: '1px solid WindowText',\n opacity: 0,\n },\n },\n },\n\n isNone && {\n visibility: 'hidden',\n },\n\n isDark && [\n classNames.rootDark,\n {\n backgroundColor: palette.blackTranslucent40,\n },\n ],\n\n className,\n ],\n };\n};\n","import * as React from 'react';\nimport { styled } from '../../Utilities';\nimport { OverlayBase } from './Overlay.base';\nimport { getStyles } from './Overlay.styles';\nimport type { IOverlayProps, IOverlayStyleProps, IOverlayStyles } from './Overlay.types';\n\nexport const Overlay: React.FunctionComponent<IOverlayProps> = styled<\n IOverlayProps,\n IOverlayStyleProps,\n IOverlayStyles\n>(OverlayBase, getStyles, undefined, {\n scope: 'Overlay',\n});\n","import * as React from 'react';\nimport { useConst } from './useConst';\nimport { useIsomorphicLayoutEffect } from '@fluentui/utilities';\n\n/**\n * Modified `useCallback` that returns the same function reference every time, but internally calls\n * the most-recently passed callback implementation. Can be useful in situations such as:\n * - Event handler dependencies change too frequently, such as user props which might change on\n * every render, or volatile values such as useState/useDispatch\n * - Callback must be referenced in a captured context (such as a window event handler or unmount\n * handler that's registered once) but needs access to the latest props\n *\n * In general, prefer `useCallback` unless you've encountered one of the problems above.\n *\n * https://reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback\n *\n * @param fn - The callback function that will be used\n * @returns A function which is referentially stable but internally calls the most recently passed callback\n */\nexport function useEventCallback<Args extends unknown[], Return>(fn: (...args: Args) => Return) {\n const callbackRef = React.useRef<typeof fn>(() => {\n throw new Error('Cannot call an event handler while rendering');\n });\n\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = fn;\n }, [fn]);\n\n // useConst rather than useCallback to ensure the reference is always stable\n // (useCallback's deps list is an optimization, not a guarantee)\n return useConst(() => (...args: Args) => {\n const callback = callbackRef.current;\n return callback(...args);\n });\n}\n","import * as React from 'react';\nimport {\n elementContains,\n getNativeProps,\n divProperties,\n getFirstTabbable,\n getLastTabbable,\n getNextElement,\n focusAsync,\n getPropsWithDefaults,\n modalize,\n on,\n} from '../../Utilities';\nimport { useId, useConst, useMergedRefs, useEventCallback, usePrevious, useUnmount } from '@fluentui/react-hooks';\nimport { useDocument } from '../../WindowProvider';\nimport type { IRefObject } from '../../Utilities';\nimport type { IFocusTrapZoneProps, IFocusTrapZone } from './FocusTrapZone.types';\n\ninterface IFocusTrapZoneInternalState {\n previouslyFocusedElementInTrapZone?: HTMLElement;\n hasFocus: boolean;\n /** ID tracked in focusStack. Don't respect prop updates in case the ID changes while the FTZ is active. */\n focusStackId: string;\n}\n\nconst COMPONENT_NAME = 'FocusTrapZone';\n\nconst DEFAULT_PROPS = {\n disabled: false,\n disableFirstFocus: false,\n forceFocusInsideTrap: true,\n isClickableOutsideFocusTrap: false,\n};\n\nconst useComponentRef = (\n componentRef: IRefObject<IFocusTrapZone> | undefined,\n previouslyFocusedElement: HTMLElement | undefined,\n focusFTZ: () => void,\n) => {\n React.useImperativeHandle(\n componentRef,\n () => ({\n get previouslyFocusedElement() {\n return previouslyFocusedElement;\n },\n focus: focusFTZ,\n }),\n [focusFTZ, previouslyFocusedElement],\n );\n};\n\nexport const FocusTrapZone: React.FunctionComponent<IFocusTrapZoneProps> & {\n /**\n * Stack of active FocusTrapZone identifiers, exposed for testing purposes only.\n * (This is always set, just marked as optional to avoid a cast in the component definition.)\n * @internal\n */\n focusStack?: string[];\n} = React.forwardRef<HTMLDivElement, IFocusTrapZoneProps>((propsWithoutDefaults, ref) => {\n const root = React.useRef<HTMLDivElement>(null);\n const firstBumper = React.useRef<HTMLDivElement>(null);\n const lastBumper = React.useRef<HTMLDivElement>(null);\n const mergedRootRef = useMergedRefs(root, ref) as React.Ref<HTMLDivElement>;\n const doc = useDocument();\n\n const isFirstRender = usePrevious(false) ?? true;\n\n const props = getPropsWithDefaults(DEFAULT_PROPS, propsWithoutDefaults);\n\n const internalState = useConst<IFocusTrapZoneInternalState>({\n hasFocus: false,\n focusStackId: useId('ftz-', props.id),\n });\n\n const {\n children,\n componentRef,\n disabled,\n disableFirstFocus,\n forceFocusInsideTrap,\n focusPreviouslyFocusedInnerElement,\n // eslint-disable-next-line deprecation/deprecation\n firstFocusableSelector,\n firstFocusableTarget,\n // eslint-disable-next-line deprecation/deprecation\n disableRestoreFocus = props.ignoreExternalFocusing,\n isClickableOutsideFocusTrap,\n enableAriaHiddenSiblings,\n } = props;\n\n const bumperProps = {\n 'aria-hidden': true,\n style: {\n pointerEvents: 'none',\n position: 'fixed', // 'fixed' prevents browsers from scrolling to bumpers when viewport does not contain them\n },\n tabIndex: disabled ? -1 : 0, // make bumpers tabbable only when enabled\n 'data-is-visible': true,\n 'data-is-focus-trap-zone-bumper': true,\n } as React.HTMLAttributes<HTMLDivElement>;\n\n const focusElementAsync = React.useCallback((element: HTMLElement) => {\n if (element !== firstBumper.current && element !== lastBumper.current) {\n focusAsync(element);\n }\n }, []);\n\n /**\n * Callback to force focus into FTZ (named to avoid overlap with global focus() callback).\n * useEventCallback always returns the same callback reference but updates the implementation\n * every render to avoid stale captured values.\n */\n const focusFTZ = useEventCallback(() => {\n if (!root.current) {\n return; // not done mounting\n }\n\n const { previouslyFocusedElementInTrapZone } = internalState;\n if (\n focusPreviouslyFocusedInnerElement &&\n previouslyFocusedElementInTrapZone &&\n elementContains(root.current, previouslyFocusedElementInTrapZone)\n ) {\n // focus on the last item that had focus in the zone before we left the zone\n focusElementAsync(previouslyFocusedElementInTrapZone);\n return;\n }\n\n let firstFocusableChild: HTMLElement | null = null;\n\n if (typeof firstFocusableTarget === 'string') {\n firstFocusableChild = root.current.querySelector(firstFocusableTarget);\n } else if (firstFocusableTarget) {\n firstFocusableChild = firstFocusableTarget(root.current);\n } else if (firstFocusableSelector) {\n const focusSelector =\n typeof firstFocusableSelector === 'string' ? firstFocusableSelector : firstFocusableSelector();\n firstFocusableChild = root.current.querySelector('.' + focusSelector);\n }\n\n // Fall back to first element if query selector did not match any elements.\n if (!firstFocusableChild) {\n firstFocusableChild = getNextElement(\n root.current,\n root.current.firstChild as HTMLElement,\n false,\n false,\n false,\n true,\n );\n }\n\n if (firstFocusableChild) {\n focusElementAsync(firstFocusableChild);\n }\n });\n\n /** Used in root div focus/blur handlers */\n const focusBumper = (isFirstBumper: boolean) => {\n if (disabled || !root.current) {\n return;\n }\n\n const nextFocusable =\n isFirstBumper === internalState.hasFocus\n ? getLastTabbable(root.current, lastBumper.current!, true, false)\n : getFirstTabbable(root.current, firstBumper.current!, true, false);\n\n if (nextFocusable) {\n if (nextFocusable === firstBumper.current || nextFocusable === lastBumper.current) {\n // This can happen when FTZ contains no tabbable elements.\n // focusFTZ() will take care of finding a focusable element in FTZ.\n focusFTZ();\n } else {\n nextFocusable.focus();\n }\n }\n };\n\n /** Root div blur handler (doesn't need useCallback since it's for a native element) */\n const onRootBlurCapture = (ev: React.FocusEvent<HTMLDivElement>) => {\n props.onBlurCapture?.(ev);\n let relatedTarget = ev.relatedTarget;\n if (ev.relatedTarget === null) {\n // In IE11, due to lack of support, event.relatedTarget is always\n // null making every onBlur call to be \"outside\" of the root\n // even when it's not. Using document.activeElement is another way\n // for us to be able to get what the relatedTarget without relying\n // on the event\n relatedTarget = doc!.activeElement as Element;\n }\n if (!elementContains(root.current, relatedTarget as HTMLElement)) {\n internalState.hasFocus = false;\n }\n };\n\n /** Root div focus handler (doesn't need useCallback since it's for a native element) */\n const onRootFocusCapture = (ev: React.FocusEvent<HTMLDivElement>) => {\n props.onFocusCapture?.(ev);\n\n if (ev.target === firstBumper.current) {\n focusBumper(true);\n } else if (ev.target === lastBumper.current) {\n focusBumper(false);\n }\n\n internalState.hasFocus = true;\n\n if (ev.target !== ev.currentTarget && !(ev.target === firstBumper.current || ev.target === lastBumper.current)) {\n // every time focus changes within the trap zone, remember the focused element so that\n // it can be restored if focus leaves the pane and returns via keystroke (i.e. via a call to this.focus(true))\n internalState.previouslyFocusedElementInTrapZone = ev.target as HTMLElement;\n }\n };\n\n /** Called to restore focus on unmount or props change. (useEventCallback ensures latest prop values are used.) */\n const returnFocusToInitiator = useEventCallback((elementToFocusOnDismiss: HTMLElement | null) => {\n FocusTrapZone.focusStack = FocusTrapZone.focusStack!.filter(value => internalState.focusStackId !== value);\n\n if (!doc) {\n return;\n }\n\n const activeElement = doc.activeElement as HTMLElement;\n if (\n !disableRestoreFocus &&\n typeof elementToFocusOnDismiss?.focus === 'function' &&\n // only restore focus if the current focused element is within the FTZ, or if nothing is focused\n (elementContains(root.current, activeElement) || activeElement === doc.body)\n ) {\n focusElementAsync(elementToFocusOnDismiss);\n }\n });\n\n /** Called in window event handlers. (useEventCallback ensures latest prop values are used.) */\n const forceFocusOrClickInTrap = useEventCallback((ev: FocusEvent | MouseEvent): void => {\n // be sure to use the latest values here\n if (disabled) {\n return;\n }\n if (internalState.focusStackId === FocusTrapZone.focusStack!.slice(-1)[0]) {\n const targetElement = ev.target as HTMLElement | null;\n if (targetElement && !elementContains(root.current, targetElement)) {\n if (doc && doc.activeElement === doc.body) {\n setTimeout(() => {\n if (doc && doc.activeElement === doc.body) {\n focusFTZ();\n internalState.hasFocus = true; // set focus here since we stop event propagation\n }\n }, 0);\n } else {\n focusFTZ();\n internalState.hasFocus = true; // set focus here since we stop event propagation\n }\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n });\n\n // Update window event handlers when relevant props change\n React.useEffect(() => {\n const disposables: Array<() => void> = [];\n\n if (forceFocusInsideTrap) {\n disposables.push(on(window, 'focus', forceFocusOrClickInTrap, true));\n }\n if (!isClickableOutsideFocusTrap) {\n disposables.push(on(window, 'click', forceFocusOrClickInTrap, true));\n }\n\n return () => {\n disposables.forEach(dispose => dispose());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- should only run when these two props change\n }, [forceFocusInsideTrap, isClickableOutsideFocusTrap]);\n\n // On prop change or first render, focus the FTZ and update focusStack if appropriate\n React.useEffect(() => {\n // Do nothing if disabled, or if it's a re-render and forceFocusInsideTrap is false\n // (to match existing behavior, the FTZ handles first focus even if forceFocusInsideTrap\n // is false, though it's debatable whether it should do this)\n if (disabled || (!isFirstRender && !forceFocusInsideTrap) || !root.current) {\n return;\n }\n\n // Transition from forceFocusInsideTrap / FTZ disabled to enabled (or initial mount)\n FocusTrapZone.focusStack!.push(internalState.focusStackId);\n\n const elementToFocusOnDismiss = props.elementToFocusOnDismiss || (doc!.activeElement as HTMLElement | null);\n\n if (!disableFirstFocus && !elementContains(root.current, elementToFocusOnDismiss)) {\n focusFTZ();\n }\n\n // To match existing behavior, always return focus on cleanup (even if we didn't handle\n // initial focus), but it's debatable whether that's correct\n return () => returnFocusToInitiator(elementToFocusOnDismiss);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- should only run when these two props change\n }, [forceFocusInsideTrap, disabled]);\n\n // Handle modalization separately from first focus\n React.useEffect(() => {\n if (!disabled && enableAriaHiddenSiblings) {\n const unmodalize = modalize(root.current!);\n return unmodalize;\n }\n }, [disabled, enableAriaHiddenSiblings, root]);\n\n // Cleanup lifecyle method for internalState.\n useUnmount(() => {\n // Dispose of element references so the DOM Nodes can be garbage-collected\n delete internalState.previouslyFocusedElementInTrapZone;\n });\n\n useComponentRef(componentRef, internalState.previouslyFocusedElementInTrapZone, focusFTZ);\n\n return (\n <div\n // this is above the native props spread so props['aria-labelledby'] will override it if provided\n aria-labelledby={props.ariaLabelledBy}\n // native props include onFocus, onBlur, className\n {...getNativeProps<React.HTMLAttributes<HTMLDivElement>>(props, divProperties)}\n ref={mergedRootRef}\n onFocusCapture={onRootFocusCapture}\n onBlurCapture={onRootBlurCapture}\n >\n <div {...bumperProps} ref={firstBumper} />\n {children}\n <div {...bumperProps} ref={lastBumper} />\n </div>\n );\n});\n\nFocusTrapZone.displayName = COMPONENT_NAME;\nFocusTrapZone.focusStack = [];\n","import * as React from 'react';\nimport { DialogContentBase } from './DialogContent.base';\nimport { ResponsiveMode } from '../../ResponsiveMode';\nimport type { IButtonProps } from '../../Button';\nimport type { IStyle, ITheme } from '../../Styling';\nimport type { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\n\n/**\n * {@docCategory Dialog}\n */\nexport interface IDialogContent {}\n\n/**\n * {@docCategory Dialog}\n */\nexport interface IDialogContentProps extends React.ClassAttributes<DialogContentBase> {\n children?: React.ReactNode;\n\n /**\n * Optional callback to access the IDialogContent interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: IRefObject<IDialogContent>;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules\n */\n styles?: IStyleFunctionOrObject<IDialogContentStyleProps, IDialogContentStyles>;\n\n /**\n * Theme provided by HOC.\n */\n theme?: ITheme;\n\n /**\n * Is inside a multiline wrapper\n */\n isMultiline?: boolean;\n\n /**\n * Show an 'x' close button in the upper-right corner\n */\n showCloseButton?: boolean;\n\n /**\n * Other top buttons that will show up next to the close button\n */\n topButtonsProps?: IButtonProps[];\n\n /**\n * Optional override class name\n */\n className?: string;\n\n /**\n * Callback for when the Dialog is dismissed from the close button or light dismiss, before the animation completes.\n */\n onDismiss?: (ev?: React.MouseEvent<HTMLButtonElement>) => any;\n\n /**\n * The Id for subText container\n */\n subTextId?: string;\n\n /**\n * The subtext to display in the dialog\n */\n subText?: string;\n\n /**\n * The Id for title container\n *\n * @deprecated use the `id` attribute in `titleProps` instead.\n */\n titleId?: string;\n\n /**\n * The title text to display at the top of the dialog.\n */\n title?: string | JSX.Element;\n\n /**\n * The props for title container.\n */\n titleProps?: React.HTMLAttributes<HTMLDivElement>;\n\n /**\n * Responsive mode passed in from decorator.\n */\n responsiveMode?: ResponsiveMode;\n\n /**\n * Label to be passed to to aria-label of close button\n * @defaultvalue Close\n */\n closeButtonAriaLabel?: string;\n\n /**\n * The type of Dialog to display.\n * @defaultvalue DialogType.normal\n */\n type?: DialogType;\n\n /**\n * The classname for when the header is draggable\n */\n draggableHeaderClassName?: string;\n}\n\n/**\n * {@docCategory Dialog}\n */\nexport enum DialogType {\n /** Standard dialog */\n normal = 0,\n /** Dialog with large header banner */\n largeHeader = 1,\n /** Dialog with an 'x' close button in the upper-right corner */\n close = 2,\n}\n\n/**\n * {@docCategory Dialog}\n */\nexport interface IDialogContentStyleProps {\n /**\n * Accept theme prop.\n */\n theme: ITheme;\n\n /**\n * Accept custom classNames\n */\n className?: string;\n\n isLargeHeader?: boolean;\n isClose?: boolean;\n hidden?: boolean;\n\n /**\n * Is inside a multiline wrapper\n */\n isMultiline?: boolean;\n\n /**\n * The classname for when the header is draggable\n */\n draggableHeaderClassName?: string;\n}\n\n/**\n * {@docCategory Dialog}\n */\nexport interface IDialogContentStyles {\n /**\n * Style for the content element.\n */\n content: IStyle;\n subText: IStyle;\n header: IStyle;\n button: IStyle;\n inner: IStyle;\n innerContent: IStyle;\n title: IStyle;\n topButton: IStyle;\n}\n","import { AnimationVariables, getGlobalClassNames, ZIndexes } from '../../Styling';\nimport type { IModalStyleProps, IModalStyles } from './Modal.types';\n\nexport const animationDuration = AnimationVariables.durationValue2;\n\nconst globalClassNames = {\n root: 'ms-Modal',\n main: 'ms-Dialog-main',\n scrollableContent: 'ms-Modal-scrollableContent',\n isOpen: 'is-open',\n layer: 'ms-Modal-Layer',\n};\n\nexport const getStyles = (props: IModalStyleProps): IModalStyles => {\n const {\n className,\n containerClassName,\n scrollableContentClassName,\n isOpen,\n isVisible,\n hasBeenOpened,\n modalRectangleTop,\n theme,\n topOffsetFixed,\n isModeless,\n layerClassName,\n isDefaultDragHandle,\n windowInnerHeight,\n } = props;\n const { palette, effects, fonts } = theme;\n\n const classNames = getGlobalClassNames(globalClassNames, theme);\n\n return {\n root: [\n classNames.root,\n fonts.medium,\n {\n backgroundColor: 'transparent',\n position: 'fixed',\n height: '100%',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: 0,\n pointerEvents: 'none',\n transition: `opacity ${animationDuration}`,\n },\n topOffsetFixed &&\n typeof modalRectangleTop === 'number' &&\n hasBeenOpened && {\n alignItems: 'flex-start',\n },\n isOpen && classNames.isOpen,\n isVisible && {\n opacity: 1,\n },\n isVisible &&\n !isModeless && {\n pointerEvents: 'auto',\n },\n\n className,\n ],\n main: [\n classNames.main,\n {\n boxShadow: effects.elevation64,\n borderRadius: effects.roundedCorner2,\n backgroundColor: palette.white,\n boxSizing: 'border-box',\n position: 'relative',\n textAlign: 'left',\n outline: '3px solid transparent',\n maxHeight: 'calc(100% - 32px)',\n maxWidth: 'calc(100% - 32px)',\n minHeight: '176px',\n minWidth: '288px',\n overflowY: 'auto',\n zIndex: isModeless ? ZIndexes.Layer : undefined,\n },\n isModeless && {\n pointerEvents: 'auto',\n },\n topOffsetFixed &&\n typeof modalRectangleTop === 'number' &&\n hasBeenOpened && {\n top: modalRectangleTop,\n },\n isDefaultDragHandle && {\n cursor: 'move',\n },\n containerClassName,\n ],\n scrollableContent: [\n classNames.scrollableContent,\n {\n overflowY: 'auto',\n flexGrow: 1,\n maxHeight: '100vh',\n selectors: {\n ['@supports (-webkit-overflow-scrolling: touch)']: {\n maxHeight: windowInnerHeight,\n },\n },\n },\n scrollableContentClassName,\n ],\n layer: isModeless && [layerClassName, classNames.layer, { pointerEvents: 'none' }],\n keyboardMoveIconContainer: {\n position: 'absolute',\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n padding: '3px 0px',\n },\n keyboardMoveIcon: {\n // eslint-disable-next-line deprecation/deprecation\n fontSize: fonts.xLargePlus.fontSize,\n width: '24px',\n },\n };\n};\n","import { memoizeFunction } from '../../Utilities';\nimport { mergeStyles } from '../../Styling';\n\nexport interface IDraggableZoneStyles {\n root: string;\n}\n\nexport const getClassNames = memoizeFunction((className: string, isDragging: boolean): IDraggableZoneStyles => {\n return {\n root: mergeStyles(\n className,\n isDragging && {\n touchAction: 'none',\n selectors: {\n '& *': {\n userSelect: 'none',\n },\n },\n },\n ),\n };\n});\n","import * as React from 'react';\nimport { getClassNames } from './DraggableZone.styles';\nimport { on } from '../../Utilities';\nimport type { IDraggableZoneProps, ICoordinates, IDragData } from './DraggableZone.types';\n\nexport interface IDraggableZoneState {\n isDragging: boolean;\n position: ICoordinates;\n lastPosition?: ICoordinates;\n}\n\nconst eventMapping = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend',\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup',\n },\n};\n\n// These are needed so that we can generalize the events\n// and so we have access to clientX and clientY in the touch events\ntype MouseTouchEvent<T> = React.MouseEvent<T> & React.TouchEvent<T> & Event;\n\nexport class DraggableZone extends React.Component<IDraggableZoneProps, IDraggableZoneState> {\n private _touchId?: number;\n private _currentEventType = eventMapping.mouse;\n private _events: (() => void)[] = [];\n\n constructor(props: IDraggableZoneProps) {\n super(props);\n\n this.state = {\n isDragging: false,\n position: this.props.position || { x: 0, y: 0 },\n lastPosition: undefined,\n };\n }\n\n public componentDidUpdate(prevProps: IDraggableZoneProps) {\n if (this.props.position && (!prevProps.position || this.props.position !== prevProps.position)) {\n this.setState({ position: this.props.position });\n }\n }\n\n public componentWillUnmount() {\n this._events.forEach(dispose => dispose());\n }\n\n public render() {\n const child: any = React.Children.only(this.props.children);\n const { props } = child;\n const { position } = this.props;\n const { position: statePosition, isDragging } = this.state;\n let x = statePosition.x;\n let y = statePosition.y;\n\n if (position && !isDragging) {\n x = position.x;\n y = position.y;\n }\n\n return React.cloneElement(child, {\n style: {\n ...props.style,\n transform: `translate(${x}px, ${y}px)`,\n },\n className: getClassNames(props.className, this.state.isDragging).root,\n onMouseDown: this._onMouseDown,\n onMouseUp: this._onMouseUp,\n onTouchStart: this._onTouchStart,\n onTouchEnd: this._onTouchEnd,\n });\n }\n\n private _onMouseDown = (event: MouseTouchEvent<HTMLElement>) => {\n const onMouseDown = (React.Children.only(this.props.children) as any).props.onMouseDown;\n if (onMouseDown) {\n onMouseDown(event);\n }\n\n this._currentEventType = eventMapping.mouse;\n return this._onDragStart(event);\n };\n\n private _onMouseUp = (event: MouseTouchEvent<HTMLElement>) => {\n const onMouseUp = (React.Children.only(this.props.children) as any).props.onMouseUp;\n if (onMouseUp) {\n onMouseUp(event);\n }\n\n this._currentEventType = eventMapping.mouse;\n return this._onDragStop(event);\n };\n\n private _onTouchStart = (event: MouseTouchEvent<HTMLElement>) => {\n const onTouchStart = (React.Children.only(this.props.children) as any).props.onTouchStart;\n if (onTouchStart) {\n onTouchStart(event);\n }\n\n this._currentEventType = eventMapping.touch;\n return this._onDragStart(event);\n };\n\n private _onTouchEnd = (event: MouseTouchEvent<HTMLElement>) => {\n const onTouchEnd = (React.Children.only(this.props.children) as any).props.onTouchEnd;\n if (onTouchEnd) {\n onTouchEnd(event);\n }\n\n this._currentEventType = eventMapping.touch;\n this._onDragStop(event);\n };\n\n private _onDragStart = (event: MouseTouchEvent<HTMLElement>) => {\n // Only handle left click for dragging\n if (typeof event.button === 'number' && event.button !== 0) {\n return false;\n }\n\n // If the target doesn't match the handleSelector OR\n // if the target does match the preventDragSelector, bail out\n if (\n (this.props.handleSelector && !this._matchesSelector(event.target as HTMLElement, this.props.handleSelector)) ||\n (this.props.preventDragSelector &&\n this._matchesSelector(event.target as HTMLElement, this.props.preventDragSelector))\n ) {\n return;\n }\n\n // Remember the touch identifier if this is a touch event so we can\n // distinguish between individual touches in multitouch scenarios\n // by remembering which touch point we were given\n this._touchId = this._getTouchId(event);\n\n const position = this._getControlPosition(event);\n if (position === undefined) {\n return;\n }\n\n const dragData = this._createDragDataFromPosition(position);\n this.props.onStart && this.props.onStart(event, dragData);\n\n this.setState({\n isDragging: true,\n lastPosition: position,\n });\n\n // hook up the appropriate mouse/touch events to the body to ensure\n // smooth dragging\n this._events = [\n on(document.body, this._currentEventType.move, this._onDrag, true /* use capture phase */),\n on(document.body, this._currentEventType.stop, this._onDragStop, true /* use capture phase */),\n ];\n };\n\n private _onDrag = (event: MouseTouchEvent<HTMLElement>) => {\n // Prevent scrolling on mobile devices\n if (event.type === 'touchmove') {\n event.preventDefault();\n }\n\n const position = this._getControlPosition(event);\n if (!position) {\n return;\n }\n\n // create the updated drag data from the position data\n const updatedData = this._createUpdatedDragData(this._createDragDataFromPosition(position));\n const updatedPosition = updatedData.position;\n\n this.props.onDragChange && this.props.onDragChange(event, updatedData);\n\n this.setState({\n position: updatedPosition,\n lastPosition: position,\n });\n };\n\n private _onDragStop = (event: MouseTouchEvent<HTMLElement>) => {\n if (!this.state.isDragging) {\n return;\n }\n\n const position = this._getControlPosition(event);\n if (!position) {\n return;\n }\n\n const baseDragData = this._createDragDataFromPosition(position);\n\n // Set dragging to false and reset the lastPosition\n this.setState({\n isDragging: false,\n lastPosition: undefined,\n });\n\n this.props.onStop && this.props.onStop(event, baseDragData);\n\n if (this.props.position) {\n this.setState({\n position: this.props.position,\n });\n }\n\n // Remove event handlers\n this._events.forEach(dispose => dispose());\n };\n\n /**\n * Get the control position based off the event that fired\n * @param event - The event to get offsets from\n */\n private _getControlPosition(event: MouseTouchEvent<HTMLElement>): ICoordinates | undefined {\n const touchObj = this._getActiveTouch(event);\n\n // did we get the right touch?\n if (this._touchId !== undefined && !touchObj) {\n return undefined;\n }\n\n const eventToGetOffset = touchObj || event;\n return {\n x: eventToGetOffset.clientX,\n y: eventToGetOffset.clientY,\n };\n }\n\n /**\n * Get the active touch point that we have saved from the event's TouchList\n * @param event - The event used to get the TouchList for the active touch point\n */\n private _getActiveTouch(event: MouseTouchEvent<HTMLElement>): React.Touch | undefined {\n return (\n (event.targetTouches && this._findTouchInTouchList(event.targetTouches)) ||\n (event.changedTouches && this._findTouchInTouchList(event.changedTouches))\n );\n }\n\n /**\n * Get the initial touch identifier associated with the given event\n * @param event - The event that contains the TouchList\n */\n private _getTouchId(event: MouseTouchEvent<HTMLElement>): number | undefined {\n const touch: React.Touch | undefined =\n (event.targetTouches && event.targetTouches[0]) || (event.changedTouches && event.changedTouches[0]);\n\n if (touch) {\n return touch.identifier;\n }\n }\n\n /**\n * Returns if an element (or any of the element's parents) match the given selector\n */\n private _matchesSelector(element: HTMLElement | null, selector: string): boolean {\n if (!element || element === document.body) {\n return false;\n }\n\n const matchesSelectorFn: Function =\n element.matches || element.webkitMatchesSelector || (element as any).msMatchesSelector; /* for IE */\n\n if (!matchesSelectorFn) {\n return false;\n }\n\n return matchesSelectorFn.call(element, selector) || this._matchesSelector(element.parentElement, selector);\n }\n\n /**\n * Attempts to find the Touch that matches the identifier we stored in dragStart\n * @param touchList The TouchList to look for the stored identifier from dragStart\n */\n private _findTouchInTouchList(touchList: React.TouchList): React.Touch | undefined {\n if (this._touchId === undefined) {\n return;\n }\n\n for (let i = 0; i < touchList.length; i++) {\n if (touchList[i].identifier === this._touchId) {\n return touchList[i];\n }\n }\n\n return undefined;\n }\n\n /**\n * Create DragData based off of the last known position and the new position passed in\n * @param position The new position as part of the drag\n */\n private _createDragDataFromPosition(position: ICoordinates): IDragData {\n const { lastPosition } = this.state;\n\n // If we have no lastPosition, use the given position\n // for last position\n if (lastPosition === undefined) {\n return {\n delta: { x: 0, y: 0 },\n lastPosition: position,\n position,\n };\n }\n\n return {\n delta: {\n x: position.x - lastPosition.x,\n y: position.y - lastPosition.y,\n },\n lastPosition,\n position,\n };\n }\n\n /**\n * Creates an updated DragData based off the current position and given baseDragData\n * @param baseDragData The base DragData (from _createDragDataFromPosition) used to calculate the updated positions\n */\n private _createUpdatedDragData(baseDragData: IDragData): IDragData {\n const { position } = this.state;\n return {\n position: {\n x: position.x + baseDragData.delta.x,\n y: position.y + baseDragData.delta.y,\n },\n delta: baseDragData.delta,\n lastPosition: position,\n };\n }\n}\n","import * as React from 'react';\nimport { useConst } from './useConst';\n\nexport type UseSetTimeoutReturnType = {\n setTimeout: (callback: () => void, duration: number) => number;\n clearTimeout: (id: number) => void;\n};\n\n/**\n * Returns a wrapper function for `setTimeout` which automatically handles disposal.\n */\nexport const useSetTimeout = (): UseSetTimeoutReturnType => {\n const timeoutIds = useConst<Record<number, number>>({});\n\n // Cleanup function.\n React.useEffect(\n () => () => {\n for (const id of Object.keys(timeoutIds)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n clearTimeout(id as any);\n }\n },\n // useConst ensures this will never change, but react-hooks/exhaustive-deps doesn't know that\n [timeoutIds],\n );\n\n // Return wrapper which will auto cleanup.\n return useConst({\n setTimeout: (func: () => void, duration: number): number => {\n const id = setTimeout(func, duration) as unknown as number;\n\n timeoutIds[id] = 1;\n\n return id;\n },\n\n clearTimeout: (id: number): void => {\n delete timeoutIds[id];\n clearTimeout(id);\n },\n });\n};\n","import * as React from 'react';\nimport {\n classNamesFunction,\n css,\n allowScrollOnElement,\n allowOverscrollOnElement,\n getPropsWithDefaults,\n KeyCodes,\n elementContains,\n EventGroup,\n} from '../../Utilities';\nimport { FocusTrapZone } from '../../FocusTrapZone';\nimport { animationDuration } from './Modal.styles';\nimport { Overlay } from '../../Overlay';\nimport { Layer } from '../../Layer';\nimport { Popup } from '../../Popup';\nimport { ResponsiveMode, useResponsiveMode } from '../../ResponsiveMode';\nimport { DirectionalHint } from '../../common/DirectionalHint';\nimport { Icon } from '../../Icon';\nimport { DraggableZone } from '../../utilities/DraggableZone/index';\nimport { useWindow } from '@fluentui/react-window-provider';\nimport {\n useBoolean,\n useMergedRefs,\n useWarnings,\n useConst,\n useSetTimeout,\n useId,\n useUnmount,\n} from '@fluentui/react-hooks';\nimport type { IFocusTrapZone } from '../../FocusTrapZone';\nimport type { IDragOptions, IModalProps, IModalStyleProps, IModalStyles } from './Modal.types';\nimport type { ILayerProps } from '../../Layer';\nimport type { ICoordinates, IDragData } from '../../utilities/DraggableZone/index';\n\n// @TODO - need to change this to a panel whenever the breakpoint is under medium (verify the spec)\n\ninterface IModalInternalState {\n onModalCloseTimer: number;\n allowTouchBodyScroll?: boolean;\n scrollableContent: HTMLDivElement | null;\n lastSetCoordinates: ICoordinates;\n /** Minimum clamped position, if dragging and clamping (`dragOptions.keepInBounds`) are enabled */\n minPosition?: ICoordinates;\n /** Maximum clamped position, if dragging and clamping (`dragOptions.keepInBounds`) are enabled */\n maxPosition?: ICoordinates;\n events: EventGroup;\n /** Ensures we dispose the same keydown callback as was registered */\n disposeOnKeyDown?: () => void;\n /** Ensures we dispose the same keyup callback as was registered (also tracks whether keyup has been registered) */\n disposeOnKeyUp?: () => void;\n isInKeyboardMoveMode?: boolean;\n hasBeenOpened?: boolean;\n}\n\nconst ZERO: ICoordinates = { x: 0, y: 0 };\n\nconst DEFAULT_PROPS: Partial<IModalProps> = {\n isOpen: false,\n isDarkOverlay: true,\n className: '',\n containerClassName: '',\n enableAriaHiddenSiblings: true,\n};\n\nconst getClassNames = classNamesFunction<IModalStyleProps, IModalStyles>();\n\nconst getMoveDelta = (ev: React.KeyboardEvent<HTMLElement>): number => {\n let delta = 10;\n if (ev.shiftKey) {\n if (!ev.ctrlKey) {\n delta = 50;\n }\n } else if (ev.ctrlKey) {\n delta = 1;\n }\n\n return delta;\n};\n\nconst useComponentRef = (props: IModalProps, focusTrapZone: React.RefObject<IFocusTrapZone>) => {\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n focus() {\n if (focusTrapZone.current) {\n focusTrapZone.current.focus();\n }\n },\n }),\n [focusTrapZone],\n );\n};\n\nexport const ModalBase: React.FunctionComponent<IModalProps> = React.forwardRef<HTMLDivElement, IModalProps>(\n (propsWithoutDefaults, ref) => {\n const props = getPropsWithDefaults(DEFAULT_PROPS, propsWithoutDefaults);\n const {\n allowTouchBodyScroll,\n className,\n children,\n containerClassName,\n scrollableContentClassName,\n elementToFocusOnDismiss,\n firstFocusableSelector,\n focusTrapZoneProps,\n forceFocusInsideTrap,\n // eslint-disable-next-line deprecation/deprecation\n disableRestoreFocus = props.ignoreExternalFocusing,\n isBlocking,\n isAlert,\n isClickableOutsideFocusTrap,\n isDarkOverlay,\n onDismiss,\n layerProps,\n overlay,\n isOpen,\n titleAriaId,\n styles,\n subtitleAriaId,\n theme,\n topOffsetFixed,\n responsiveMode,\n // eslint-disable-next-line deprecation/deprecation\n onLayerDidMount,\n isModeless,\n dragOptions,\n onDismissed,\n // eslint-disable-next-line deprecation/deprecation\n enableAriaHiddenSiblings,\n popupProps,\n } = props;\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const focusTrapZone = React.useRef<IFocusTrapZone>(null);\n const focusTrapZoneRef = useMergedRefs(focusTrapZone, focusTrapZoneProps?.componentRef);\n const focusTrapZoneElm = React.useRef<HTMLDivElement>(null);\n const mergedRef = useMergedRefs(rootRef, ref);\n\n const modalResponsiveMode = useResponsiveMode(mergedRef);\n\n const focusTrapZoneId = useId('ModalFocusTrapZone', focusTrapZoneProps?.id);\n\n const win = useWindow();\n\n const { setTimeout, clearTimeout } = useSetTimeout();\n\n const [isModalOpen, setIsModalOpen] = React.useState(isOpen);\n const [isVisible, setIsVisible] = React.useState(isOpen);\n const [coordinates, setCoordinates] = React.useState<ICoordinates>(ZERO);\n const [modalRectangleTop, setModalRectangleTop] = React.useState<number | undefined>();\n\n const [isModalMenuOpen, { toggle: toggleModalMenuOpen, setFalse: setModalMenuClose }] = useBoolean(false);\n\n const internalState = useConst<IModalInternalState>(() => ({\n onModalCloseTimer: 0,\n allowTouchBodyScroll,\n scrollableContent: null,\n lastSetCoordinates: ZERO,\n events: new EventGroup({}),\n }));\n\n const { keepInBounds } = dragOptions || ({} as IDragOptions);\n const isAlertRole = isAlert ?? (isBlocking && !isModeless);\n\n const layerClassName = layerProps === undefined ? '' : layerProps.className;\n const classNames = getClassNames(styles, {\n theme: theme!,\n className,\n containerClassName,\n scrollableContentClassName,\n isOpen,\n isVisible,\n hasBeenOpened: internalState.hasBeenOpened,\n modalRectangleTop,\n topOffsetFixed,\n isModeless,\n layerClassName,\n windowInnerHeight: win?.innerHeight,\n isDefaultDragHandle: dragOptions && !dragOptions.dragHandleSelector,\n });\n\n const mergedLayerProps: ILayerProps = {\n eventBubblingEnabled: false,\n ...layerProps,\n onLayerDidMount: layerProps && layerProps.onLayerDidMount ? layerProps.onLayerDidMount : onLayerDidMount,\n insertFirst: layerProps?.insertFirst || isModeless,\n className: classNames.layer,\n };\n\n // Allow the user to scroll within the modal but not on the body\n const allowScrollOnModal = React.useCallback(\n (elt: HTMLDivElement | null): void => {\n if (elt) {\n if (internalState.allowTouchBodyScroll) {\n allowOverscrollOnElement(elt, internalState.events);\n } else {\n allowScrollOnElement(elt, internalState.events);\n }\n } else {\n internalState.events.off(internalState.scrollableContent);\n }\n internalState.scrollableContent = elt;\n },\n [internalState],\n );\n\n const registerInitialModalPosition = (): void => {\n const dialogMain = focusTrapZoneElm.current;\n const modalRectangle = dialogMain?.getBoundingClientRect();\n\n if (modalRectangle) {\n if (topOffsetFixed) {\n setModalRectangleTop(modalRectangle.top);\n }\n\n if (keepInBounds) {\n // x/y are unavailable in IE, so use the equivalent left/top\n internalState.minPosition = { x: -modalRectangle.left, y: -modalRectangle.top };\n internalState.maxPosition = { x: modalRectangle.left, y: modalRectangle.top };\n }\n }\n };\n\n /**\n * Clamps an axis to a specified min and max position.\n *\n * @param axis A string that represents the axis (x/y).\n * @param position The position on the axis.\n */\n const getClampedAxis = React.useCallback(\n (axis: keyof ICoordinates, position: number) => {\n const { minPosition, maxPosition } = internalState;\n if (keepInBounds && minPosition && maxPosition) {\n position = Math.max(minPosition[axis], position);\n position = Math.min(maxPosition[axis], position);\n }\n return position;\n },\n [keepInBounds, internalState],\n );\n\n const handleModalClose = (): void => {\n internalState.lastSetCoordinates = ZERO;\n\n setModalMenuClose();\n internalState.isInKeyboardMoveMode = false;\n setIsModalOpen(false);\n setCoordinates(ZERO);\n\n internalState.disposeOnKeyUp?.();\n\n onDismissed?.();\n };\n\n const handleDragStart = React.useCallback((): void => {\n setModalMenuClose();\n internalState.isInKeyboardMoveMode = false;\n }, [internalState, setModalMenuClose]);\n\n const handleDrag = React.useCallback(\n (ev: React.MouseEvent<HTMLElement> & React.TouchEvent<HTMLElement>, dragData: IDragData): void => {\n setCoordinates(prevValue => ({\n x: getClampedAxis('x', prevValue.x + dragData.delta.x),\n y: getClampedAxis('y', prevValue.y + dragData.delta.y),\n }));\n },\n [getClampedAxis],\n );\n\n const handleDragStop = React.useCallback((): void => {\n if (focusTrapZone.current) {\n focusTrapZone.current.focus();\n }\n }, []);\n\n const handleEnterKeyboardMoveMode = () => {\n // We need a global handleKeyDown event when we are in the move mode so that we can\n // handle the key presses and the components inside the modal do not get the events\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\n // eslint-disable-next-line deprecation/deprecation\n if (ev.altKey && ev.ctrlKey && ev.keyCode === KeyCodes.space) {\n // CTRL + ALT + SPACE is handled during keyUp\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const newLocal = ev.altKey || ev.keyCode === KeyCodes.escape;\n if (isModalMenuOpen && newLocal) {\n setModalMenuClose();\n }\n\n // eslint-disable-next-line deprecation/deprecation\n if (internalState.isInKeyboardMoveMode && (ev.keyCode === KeyCodes.escape || ev.keyCode === KeyCodes.enter)) {\n internalState.isInKeyboardMoveMode = false;\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n if (internalState.isInKeyboardMoveMode) {\n let handledEvent = true;\n const delta = getMoveDelta(ev);\n\n // eslint-disable-next-line deprecation/deprecation\n switch (ev.keyCode) {\n /* eslint-disable no-fallthrough */\n case KeyCodes.escape:\n setCoordinates(internalState.lastSetCoordinates);\n case KeyCodes.enter: {\n // TODO: determine if fallthrough was intentional\n /* eslint-enable no-fallthrough */\n internalState.lastSetCoordinates = ZERO;\n // setIsInKeyboardMoveMode(false);\n break;\n }\n case KeyCodes.up: {\n setCoordinates(prevValue => ({ x: prevValue.x, y: getClampedAxis('y', prevValue.y - delta) }));\n break;\n }\n case KeyCodes.down: {\n setCoordinates(prevValue => ({ x: prevValue.x, y: getClampedAxis('y', prevValue.y + delta) }));\n break;\n }\n case KeyCodes.left: {\n setCoordinates(prevValue => ({ x: getClampedAxis('x', prevValue.x - delta), y: prevValue.y }));\n break;\n }\n case KeyCodes.right: {\n setCoordinates(prevValue => ({ x: getClampedAxis('x', prevValue.x + delta), y: prevValue.y }));\n break;\n }\n default: {\n handledEvent = false;\n }\n }\n if (handledEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n };\n\n internalState.lastSetCoordinates = coordinates;\n setModalMenuClose();\n internalState.isInKeyboardMoveMode = true;\n\n internalState.events.on(win, 'keydown', handleKeyDown, true /* useCapture */);\n internalState.disposeOnKeyDown = () => {\n internalState.events.off(win, 'keydown', handleKeyDown, true /* useCapture */);\n internalState.disposeOnKeyDown = undefined;\n };\n };\n\n const handleExitKeyboardMoveMode = (ev: React.FocusEvent<HTMLDivElement>) => {\n focusTrapZoneProps?.onBlur?.(ev);\n internalState.lastSetCoordinates = ZERO;\n internalState.isInKeyboardMoveMode = false;\n internalState.disposeOnKeyDown?.();\n };\n\n const registerForKeyUp = (): void => {\n const handleKeyUp = (ev: React.KeyboardEvent<HTMLElement>): void => {\n // Needs to handle the CTRL + ALT + SPACE key during keyup due to FireFox bug:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n // eslint-disable-next-line deprecation/deprecation\n if (ev.altKey && ev.ctrlKey && ev.keyCode === KeyCodes.space) {\n if (elementContains(internalState.scrollableContent, ev.target as HTMLElement)) {\n toggleModalMenuOpen();\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n };\n\n if (!internalState.disposeOnKeyUp) {\n internalState.events.on(win, 'keyup', handleKeyUp, true /* useCapture */);\n internalState.disposeOnKeyUp = () => {\n internalState.events.off(win, 'keyup', handleKeyUp, true /* useCapture */);\n internalState.disposeOnKeyUp = undefined;\n };\n }\n };\n\n React.useEffect(() => {\n clearTimeout(internalState.onModalCloseTimer);\n // Opening the dialog\n if (isOpen) {\n // This must be done after the modal content has rendered\n requestAnimationFrame(() => setTimeout(registerInitialModalPosition, 0));\n\n setIsModalOpen(true);\n\n // Add a keyUp handler for all key up events once the dialog is open.\n if (dragOptions) {\n registerForKeyUp();\n }\n\n internalState.hasBeenOpened = true;\n setIsVisible(true);\n }\n\n // Closing the dialog\n if (!isOpen && isModalOpen) {\n internalState.onModalCloseTimer = setTimeout(handleModalClose, parseFloat(animationDuration) * 1000);\n setIsVisible(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- should only run if isModalOpen or isOpen mutates.\n }, [isModalOpen, isOpen]);\n\n useUnmount(() => {\n internalState.events.dispose();\n });\n\n useComponentRef(props, focusTrapZone);\n useDebugWarnings(props);\n\n const modalContent = (\n <FocusTrapZone\n {...focusTrapZoneProps}\n id={focusTrapZoneId}\n ref={focusTrapZoneElm}\n componentRef={focusTrapZoneRef}\n className={css(classNames.main, focusTrapZoneProps?.className)}\n elementToFocusOnDismiss={focusTrapZoneProps?.elementToFocusOnDismiss ?? elementToFocusOnDismiss}\n isClickableOutsideFocusTrap={\n focusTrapZoneProps?.isClickableOutsideFocusTrap ?? (isModeless || isClickableOutsideFocusTrap || !isBlocking)\n }\n disableRestoreFocus={focusTrapZoneProps?.disableRestoreFocus ?? disableRestoreFocus}\n forceFocusInsideTrap={(focusTrapZoneProps?.forceFocusInsideTrap ?? forceFocusInsideTrap) && !isModeless}\n // eslint-disable-next-line deprecation/deprecation\n firstFocusableSelector={focusTrapZoneProps?.firstFocusableSelector || firstFocusableSelector}\n focusPreviouslyFocusedInnerElement={focusTrapZoneProps?.focusPreviouslyFocusedInnerElement ?? true}\n onBlur={internalState.isInKeyboardMoveMode ? handleExitKeyboardMoveMode : undefined}\n // enableAriaHiddenSiblings is handled by the Popup\n >\n {dragOptions && internalState.isInKeyboardMoveMode && (\n <div className={classNames.keyboardMoveIconContainer}>\n {dragOptions.keyboardMoveIconProps ? (\n <Icon {...dragOptions.keyboardMoveIconProps} />\n ) : (\n <Icon iconName=\"move\" className={classNames.keyboardMoveIcon} />\n )}\n </div>\n )}\n <div ref={allowScrollOnModal} className={classNames.scrollableContent} data-is-scrollable>\n {dragOptions && isModalMenuOpen && (\n <dragOptions.menu\n items={[\n { key: 'move', text: dragOptions.moveMenuItemText, onClick: handleEnterKeyboardMoveMode },\n { key: 'close', text: dragOptions.closeMenuItemText, onClick: handleModalClose },\n ]}\n onDismiss={setModalMenuClose}\n alignTargetEdge\n coverTarget\n directionalHint={DirectionalHint.topLeftEdge}\n directionalHintFixed\n shouldFocusOnMount\n target={internalState.scrollableContent}\n />\n )}\n {children}\n </div>\n </FocusTrapZone>\n );\n\n return (\n (isModalOpen && modalResponsiveMode! >= (responsiveMode || ResponsiveMode.small) && (\n <Layer ref={mergedRef} {...mergedLayerProps}>\n <Popup\n role={isAlertRole ? 'alertdialog' : 'dialog'}\n ariaLabelledBy={titleAriaId}\n ariaDescribedBy={subtitleAriaId}\n onDismiss={onDismiss}\n shouldRestoreFocus={!disableRestoreFocus}\n // Modeless modals shouldn't hide siblings.\n // Popup will automatically handle this based on the aria-modal setting.\n enableAriaHiddenSiblings={enableAriaHiddenSiblings}\n aria-modal={!isModeless}\n {...popupProps}\n >\n <div className={classNames.root} role={!isModeless ? 'document' : undefined}>\n {!isModeless && (\n <Overlay\n aria-hidden={true}\n isDarkThemed={isDarkOverlay}\n onClick={isBlocking ? undefined : onDismiss}\n allowTouchBodyScroll={allowTouchBodyScroll}\n {...overlay}\n />\n )}\n {dragOptions ? (\n <DraggableZone\n handleSelector={dragOptions.dragHandleSelector || `#${focusTrapZoneId}`}\n preventDragSelector=\"button\"\n onStart={handleDragStart}\n onDragChange={handleDrag}\n onStop={handleDragStop}\n position={coordinates}\n >\n {modalContent}\n </DraggableZone>\n ) : (\n modalContent\n )}\n </div>\n </Popup>\n </Layer>\n )) ||\n null\n );\n },\n);\nModalBase.displayName = 'Modal';\n\nfunction useDebugWarnings(props: IModalProps) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- build-time conditional\n useWarnings({\n name: 'Modal',\n props,\n deprecations: { onLayerDidMount: 'layerProps.onLayerDidMount' },\n });\n }\n}\n","import * as React from 'react';\nimport { useConst } from './useConst';\n\n/** Updater callbacks returned by `useBoolean`. */\nexport interface IUseBooleanCallbacks {\n /** Set the value to true. Always has the same identity. */\n setTrue: () => void;\n /** Set the value to false. Always has the same identity. */\n setFalse: () => void;\n /** Toggle the value. Always has the same identity. */\n toggle: () => void;\n}\n\n/**\n * Hook to store a value and generate callbacks for setting the value to true or false.\n * The identity of the callbacks will always stay the same.\n *\n * @param initialState - Initial value\n * @returns Array with the current value and an object containing the updater callbacks.\n */\nexport function useBoolean(initialState: boolean): [boolean, IUseBooleanCallbacks] {\n const [value, setValue] = React.useState(initialState);\n\n const setTrue = useConst(() => () => {\n setValue(true);\n });\n const setFalse = useConst(() => () => {\n setValue(false);\n });\n const toggle = useConst(() => () => {\n setValue(currentValue => !currentValue);\n });\n\n return [value, { setTrue, setFalse, toggle }];\n}\n","import * as React from 'react';\nimport { styled } from '../../Utilities';\nimport { ModalBase } from './Modal.base';\nimport { getStyles } from './Modal.styles';\nimport type { IModalProps, IModalStyleProps, IModalStyles } from './Modal.types';\n\nexport const Modal: React.FunctionComponent<IModalProps> = styled<IModalProps, IModalStyleProps, IModalStyles>(\n ModalBase,\n getStyles,\n undefined,\n {\n scope: 'Modal',\n fields: ['theme', 'styles', 'enableAriaHiddenSiblings'],\n },\n);\nModal.displayName = 'Modal';\n","import * as React from 'react';\nimport { classNamesFunction, initializeComponentRef } from '../../Utilities';\nimport type { IDialogFooterProps, IDialogFooterStyleProps, IDialogFooterStyles } from './DialogFooter.types';\nimport type { IProcessedStyleSet } from '../../Styling';\n\nconst getClassNames = classNamesFunction<IDialogFooterStyleProps, IDialogFooterStyles>();\n\nexport class DialogFooterBase extends React.Component<IDialogFooterProps, {}> {\n private _classNames: IProcessedStyleSet<IDialogFooterStyles>;\n\n constructor(props: IDialogFooterProps) {\n super(props);\n\n initializeComponentRef(this);\n }\n\n public render(): JSX.Element {\n const { className, styles, theme } = this.props;\n\n this._classNames = getClassNames(styles!, {\n theme: theme!,\n className,\n });\n\n return (\n <div className={this._classNames.actions}>\n <div className={this._classNames.actionsRight}>{this._renderChildrenAsActions()}</div>\n </div>\n );\n }\n\n private _renderChildrenAsActions(): (JSX.Element | null)[] | null | undefined {\n return React.Children.map(this.props.children, child =>\n child ? <span className={this._classNames.action}>{child}</span> : null,\n );\n }\n}\n","import { getGlobalClassNames } from '../../Styling';\nimport type { IDialogFooterStyleProps, IDialogFooterStyles } from './DialogFooter.types';\n\nconst GlobalClassNames = {\n actions: 'ms-Dialog-actions',\n action: 'ms-Dialog-action',\n actionsRight: 'ms-Dialog-actionsRight',\n};\n\nexport const getStyles = (props: IDialogFooterStyleProps): IDialogFooterStyles => {\n const { className, theme } = props;\n\n const classNames = getGlobalClassNames(GlobalClassNames, theme);\n\n return {\n actions: [\n classNames.actions,\n {\n position: 'relative',\n width: '100%',\n minHeight: '24px',\n lineHeight: '24px',\n margin: '16px 0 0',\n fontSize: '0',\n\n selectors: {\n '.ms-Button': {\n lineHeight: 'normal',\n verticalAlign: 'middle',\n },\n },\n },\n className,\n ],\n\n action: [\n classNames.action,\n {\n margin: '0 4px',\n },\n ],\n\n actionsRight: [\n classNames.actionsRight,\n {\n alignItems: 'center',\n display: 'flex',\n fontSize: '0',\n justifyContent: 'flex-end',\n marginRight: '-4px',\n },\n ],\n };\n};\n","import * as React from 'react';\nimport { styled } from '../../Utilities';\nimport { DialogFooterBase } from './DialogFooter.base';\nimport { getStyles } from './DialogFooter.styles';\nimport type { IDialogFooterProps, IDialogFooterStyleProps, IDialogFooterStyles } from './DialogFooter.types';\n\nexport const DialogFooter: React.FunctionComponent<IDialogFooterProps> = styled<\n IDialogFooterProps,\n IDialogFooterStyleProps,\n IDialogFooterStyles\n>(DialogFooterBase, getStyles, undefined, { scope: 'DialogFooter' });\n","import * as React from 'react';\nimport { classNamesFunction, css, warnDeprecations, initializeComponentRef } from '../../Utilities';\nimport { DialogType } from './DialogContent.types';\nimport { IconButton } from '../../Button';\nimport { DialogFooter } from './DialogFooter';\nimport { withResponsiveMode } from '../../ResponsiveMode';\nimport type { IDialogContentProps, IDialogContentStyleProps, IDialogContentStyles } from './DialogContent.types';\nimport type { IDialogFooterProps } from './DialogFooter.types';\n\nconst getClassNames = classNamesFunction<IDialogContentStyleProps, IDialogContentStyles>();\n\nconst DialogFooterType = ((<DialogFooter />) as React.ReactElement<IDialogFooterProps>).type;\n\nconst COMPONENT_NAME = 'DialogContent';\n\n// eslint-disable-next-line deprecation/deprecation\n@withResponsiveMode\nexport class DialogContentBase extends React.Component<IDialogContentProps, {}> {\n public static defaultProps: IDialogContentProps = {\n showCloseButton: false,\n className: '',\n topButtonsProps: [],\n closeButtonAriaLabel: 'Close',\n };\n\n constructor(props: IDialogContentProps) {\n super(props);\n\n initializeComponentRef(this);\n warnDeprecations(COMPONENT_NAME, props, {\n titleId: 'titleProps.id',\n });\n }\n\n public render(): JSX.Element {\n const {\n showCloseButton,\n className,\n closeButtonAriaLabel,\n onDismiss,\n subTextId,\n subText,\n titleProps = {},\n // eslint-disable-next-line deprecation/deprecation\n titleId,\n title,\n type,\n styles,\n theme,\n draggableHeaderClassName,\n } = this.props;\n\n const classNames = getClassNames(styles!, {\n theme: theme!,\n className,\n isLargeHeader: type === DialogType.largeHeader,\n isClose: type === DialogType.close,\n draggableHeaderClassName,\n });\n\n const groupings = this._groupChildren();\n let subTextContent;\n if (subText) {\n subTextContent = (\n <p className={classNames.subText} id={subTextId}>\n {subText}\n </p>\n );\n }\n\n return (\n <div className={classNames.content}>\n <div className={classNames.header}>\n <div\n id={titleId}\n role=\"heading\"\n aria-level={1}\n {...titleProps}\n className={css(classNames.title, titleProps.className)}\n >\n {title}\n </div>\n <div className={classNames.topButton}>\n {this.props.topButtonsProps!.map((props, index) => (\n <IconButton key={props.uniqueId || index} {...props} />\n ))}\n {(type === DialogType.close || (showCloseButton && type !== DialogType.largeHeader)) && (\n <IconButton\n className={classNames.button}\n iconProps={{ iconName: 'Cancel' }}\n ariaLabel={closeButtonAriaLabel}\n onClick={onDismiss as any}\n />\n )}\n </div>\n </div>\n <div className={classNames.inner}>\n <div className={classNames.innerContent}>\n {subTextContent}\n {groupings.contents}\n </div>\n {groupings.footers}\n </div>\n </div>\n );\n }\n\n // @TODO - typing the footers as an array of DialogFooter is difficult because\n // casing \"child as DialogFooter\" causes a problem because\n // \"Neither type 'ReactElement<any>' nor type 'DialogFooter' is assignable to the other.\"\n private _groupChildren(): { footers: any[]; contents: any[] } {\n const groupings: { footers: any[]; contents: any[] } = {\n footers: [],\n contents: [],\n };\n\n React.Children.map(this.props.children, child => {\n if (typeof child === 'object' && child !== null && (child as any).type === DialogFooterType) {\n groupings.footers.push(child);\n } else {\n groupings.contents.push(child);\n }\n });\n\n return groupings;\n }\n}\n","import {\n FontWeights,\n getGlobalClassNames,\n IconFontSizes,\n ScreenWidthMinSmall,\n ScreenWidthMaxSmall,\n} from '../../Styling';\nimport type { IDialogContentStyleProps, IDialogContentStyles } from './DialogContent.types';\n\nconst GlobalClassNames = {\n contentLgHeader: 'ms-Dialog-lgHeader',\n close: 'ms-Dialog--close',\n subText: 'ms-Dialog-subText',\n header: 'ms-Dialog-header',\n headerLg: 'ms-Dialog--lgHeader',\n button: 'ms-Dialog-button ms-Dialog-button--close',\n inner: 'ms-Dialog-inner',\n content: 'ms-Dialog-content',\n title: 'ms-Dialog-title',\n};\n\nexport const getStyles = (props: IDialogContentStyleProps): IDialogContentStyles => {\n const { className, theme, isLargeHeader, isClose, hidden, isMultiline, draggableHeaderClassName } = props;\n\n const { palette, fonts, effects, semanticColors } = theme;\n\n const classNames = getGlobalClassNames(GlobalClassNames, theme);\n\n return {\n content: [\n isLargeHeader && [\n classNames.contentLgHeader,\n {\n borderTop: `4px solid ${palette.themePrimary}`,\n },\n ],\n isClose && classNames.close,\n {\n flexGrow: 1,\n overflowY: 'hidden', // required for allowScrollOnElement\n },\n className,\n ],\n\n subText: [\n classNames.subText,\n fonts.medium,\n {\n margin: '0 0 24px 0',\n color: semanticColors.bodySubtext,\n lineHeight: '1.5',\n wordWrap: 'break-word',\n fontWeight: FontWeights.regular,\n },\n ],\n\n header: [\n classNames.header,\n {\n position: 'relative',\n width: '100%',\n boxSizing: 'border-box',\n },\n isClose && classNames.close,\n draggableHeaderClassName && [\n draggableHeaderClassName,\n {\n cursor: 'move',\n },\n ],\n ],\n\n button: [\n classNames.button,\n hidden && {\n selectors: {\n '.ms-Icon.ms-Icon--Cancel': {\n color: semanticColors.buttonText,\n fontSize: IconFontSizes.medium,\n },\n },\n },\n ],\n\n inner: [\n classNames.inner,\n {\n padding: '0 24px 24px',\n selectors: {\n [`@media (min-width: ${ScreenWidthMinSmall}px) and (max-width: ${ScreenWidthMaxSmall}px)`]: {\n padding: '0 16px 16px',\n },\n },\n },\n ],\n\n innerContent: [\n classNames.content,\n {\n position: 'relative',\n width: '100%',\n },\n ],\n\n title: [\n classNames.title,\n fonts.xLarge,\n {\n color: semanticColors.bodyText,\n margin: '0',\n minHeight: fonts.xLarge.fontSize,\n padding: '16px 46px 20px 24px',\n lineHeight: 'normal',\n selectors: {\n [`@media (min-width: ${ScreenWidthMinSmall}px) and (max-width: ${ScreenWidthMaxSmall}px)`]: {\n padding: '16px 46px 16px 16px',\n },\n },\n },\n isLargeHeader && {\n color: semanticColors.menuHeader,\n },\n isMultiline && { fontSize: fonts.xxLarge.fontSize },\n ],\n\n topButton: [\n {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n position: 'absolute',\n top: '0',\n right: '0',\n padding: '15px 15px 0 0',\n selectors: {\n '> *': {\n flex: '0 0 auto',\n },\n '.ms-Dialog-button': {\n color: semanticColors.buttonText,\n },\n '.ms-Dialog-button:hover': {\n color: semanticColors.buttonTextHovered,\n borderRadius: effects.roundedCorner2,\n },\n [`@media (min-width: ${ScreenWidthMinSmall}px) and (max-width: ${ScreenWidthMaxSmall}px)`]: {\n padding: '15px 8px 0 0',\n },\n },\n },\n ],\n };\n};\n","import * as React from 'react';\nimport { styled } from '../../Utilities';\nimport { DialogContentBase } from './DialogContent.base';\nimport { getStyles } from './DialogContent.styles';\nimport type { IDialogContentProps, IDialogContentStyleProps, IDialogContentStyles } from './DialogContent.types';\n\nexport const DialogContent: React.FunctionComponent<IDialogContentProps> = styled<\n IDialogContentProps,\n IDialogContentStyleProps,\n IDialogContentStyles\n>(DialogContentBase, getStyles, undefined, { scope: 'DialogContent' });\n","import * as React from 'react';\nimport { warnDeprecations, classNamesFunction, getId } from '../../Utilities';\nimport { DialogType } from './DialogContent.types';\nimport { Modal } from '../../Modal';\nimport { withResponsiveMode } from '../../ResponsiveMode';\n\nconst getClassNames = classNamesFunction<IDialogStyleProps, IDialogStyles>();\n\nimport { DialogContent } from './DialogContent';\nimport type { IDialogProps, IDialogStyleProps, IDialogStyles } from './Dialog.types';\nimport type { IDialogContentProps } from './DialogContent.types';\nimport type { IModalProps } from '../../Modal';\nimport type { ILayerProps } from '../../Layer';\n\nconst DefaultModalProps: IModalProps = {\n isDarkOverlay: false,\n isBlocking: false,\n className: '',\n containerClassName: '',\n topOffsetFixed: false,\n enableAriaHiddenSiblings: true,\n};\n\nconst DefaultDialogContentProps: IDialogContentProps = {\n type: DialogType.normal,\n className: '',\n topButtonsProps: [],\n};\n\n// eslint-disable-next-line deprecation/deprecation\n@withResponsiveMode\nexport class DialogBase extends React.Component<IDialogProps, {}> {\n public static defaultProps: IDialogProps = {\n hidden: true,\n };\n\n private _id: string;\n private _defaultTitleTextId: string;\n private _defaultSubTextId: string;\n\n constructor(props: IDialogProps) {\n super(props);\n\n this._id = getId('Dialog');\n this._defaultTitleTextId = this._id + '-title';\n this._defaultSubTextId = this._id + '-subText';\n\n if (process.env.NODE_ENV !== 'production') {\n warnDeprecations('Dialog', props, {\n isOpen: 'hidden',\n type: 'dialogContentProps.type',\n subText: 'dialogContentProps.subText',\n contentClassName: 'dialogContentProps.className',\n topButtonsProps: 'dialogContentProps.topButtonsProps',\n className: 'modalProps.className',\n isDarkOverlay: 'modalProps.isDarkOverlay',\n isBlocking: 'modalProps.isBlocking',\n containerClassName: 'modalProps.containerClassName',\n onDismissed: 'modalProps.onDismissed',\n onLayerDidMount: 'modalProps.layerProps.onLayerDidMount',\n ariaDescribedById: 'modalProps.subtitleAriaId',\n ariaLabelledById: 'modalProps.titleAriaId',\n });\n }\n }\n\n public render(): JSX.Element {\n const props = this.props;\n const {\n /* eslint-disable deprecation/deprecation */\n className,\n containerClassName,\n contentClassName,\n elementToFocusOnDismiss,\n firstFocusableSelector,\n forceFocusInsideTrap,\n styles,\n hidden,\n disableRestoreFocus = props.ignoreExternalFocusing,\n isBlocking,\n isClickableOutsideFocusTrap,\n isDarkOverlay,\n isOpen = !hidden,\n onDismiss,\n onDismissed,\n onLayerDidMount,\n responsiveMode,\n subText,\n theme,\n title,\n topButtonsProps,\n type,\n /* eslint-enable deprecation/deprecation */\n minWidth,\n maxWidth,\n modalProps,\n } = props;\n\n const mergedLayerProps: ILayerProps = {\n onLayerDidMount,\n ...modalProps?.layerProps,\n };\n\n let dialogDraggableClassName: string | undefined;\n let dragOptions: IModalProps['dragOptions'];\n\n // If dragOptions are provided, but no drag handle is specified, we supply a drag handle,\n // and inform dialog contents to add class to draggable class to the header\n if (modalProps?.dragOptions && !modalProps.dragOptions?.dragHandleSelector) {\n // spread options to avoid mutating props\n dragOptions = { ...modalProps.dragOptions };\n dialogDraggableClassName = 'ms-Dialog-draggable-header';\n dragOptions.dragHandleSelector = `.${dialogDraggableClassName}`;\n }\n\n const mergedModalProps: IModalProps = {\n ...DefaultModalProps,\n elementToFocusOnDismiss,\n firstFocusableSelector,\n forceFocusInsideTrap,\n disableRestoreFocus,\n isClickableOutsideFocusTrap,\n responsiveMode,\n className,\n containerClassName,\n isBlocking,\n isDarkOverlay,\n onDismissed,\n ...modalProps,\n dragOptions,\n layerProps: mergedLayerProps,\n isOpen,\n };\n\n const dialogContentProps: IDialogContentProps = {\n className: contentClassName,\n subText,\n title,\n topButtonsProps,\n type,\n ...DefaultDialogContentProps,\n ...props.dialogContentProps,\n draggableHeaderClassName: dialogDraggableClassName,\n titleProps: {\n // eslint-disable-next-line deprecation/deprecation\n id: props.dialogContentProps?.titleId || this._defaultTitleTextId,\n ...props.dialogContentProps?.titleProps,\n },\n };\n\n const classNames = getClassNames(styles!, {\n theme: theme!,\n className: mergedModalProps.className,\n containerClassName: mergedModalProps.containerClassName,\n hidden,\n dialogDefaultMinWidth: minWidth,\n dialogDefaultMaxWidth: maxWidth,\n });\n\n return (\n <Modal\n {...mergedModalProps}\n className={classNames.root}\n containerClassName={classNames.main}\n onDismiss={onDismiss || mergedModalProps.onDismiss}\n subtitleAriaId={this._getSubTextId()}\n titleAriaId={this._getTitleTextId()}\n >\n <DialogContent\n subTextId={this._defaultSubTextId}\n showCloseButton={mergedModalProps.isBlocking}\n onDismiss={onDismiss}\n {...dialogContentProps}\n >\n {props.children}\n </DialogContent>\n </Modal>\n );\n }\n\n private _getSubTextId = (): string | undefined => {\n // eslint-disable-next-line deprecation/deprecation\n const { ariaDescribedById, modalProps, dialogContentProps, subText } = this.props;\n let id = (modalProps && modalProps.subtitleAriaId) || ariaDescribedById;\n\n if (!id) {\n id = ((dialogContentProps && dialogContentProps.subText) || subText) && this._defaultSubTextId;\n }\n\n return id;\n };\n\n private _getTitleTextId = (): string | undefined => {\n // eslint-disable-next-line deprecation/deprecation\n const { ariaLabelledById, modalProps, dialogContentProps, title } = this.props;\n let id = (modalProps && modalProps.titleAriaId) || ariaLabelledById;\n\n if (!id) {\n id = ((dialogContentProps && dialogContentProps.title) || title) && this._defaultTitleTextId;\n }\n\n return id;\n };\n}\n","import { ScreenWidthMinMedium, getGlobalClassNames } from '../../Styling';\nimport type { IDialogStyleProps, IDialogStyles } from './Dialog.types';\n\nconst GlobalClassNames = {\n root: 'ms-Dialog',\n};\n\nexport const getStyles = (props: IDialogStyleProps): IDialogStyles => {\n const {\n className,\n containerClassName, // eslint-disable-line deprecation/deprecation\n dialogDefaultMinWidth = '288px',\n dialogDefaultMaxWidth = '340px',\n hidden,\n theme,\n } = props;\n\n const classNames = getGlobalClassNames(GlobalClassNames, theme);\n\n return {\n root: [classNames.root, theme.fonts.medium, className],\n\n main: [\n {\n width: dialogDefaultMinWidth,\n outline: '3px solid transparent',\n\n selectors: {\n [`@media (min-width: ${ScreenWidthMinMedium}px)`]: {\n width: 'auto',\n maxWidth: dialogDefaultMaxWidth,\n minWidth: dialogDefaultMinWidth,\n },\n },\n },\n !hidden && { display: 'flex' },\n containerClassName,\n ],\n };\n};\n","import * as React from 'react';\nimport { styled } from '../../Utilities';\nimport { DialogBase } from './Dialog.base';\nimport { getStyles } from './Dialog.styles';\nimport type { IDialogProps, IDialogStyleProps, IDialogStyles } from './Dialog.types';\n\nexport const Dialog: React.FunctionComponent<IDialogProps> = styled<IDialogProps, IDialogStyleProps, IDialogStyles>(\n DialogBase,\n getStyles,\n undefined,\n { scope: 'Dialog' },\n);\nDialog.displayName = 'Dialog';\n"],"sourceRoot":""}