{"version":3,"sources":["../../src/components/Button/BaseButton.styles.ts","../../src/components/Icon/ImageIcon.tsx","../../src/components/Button/SplitButton/SplitButton.classNames.ts","../../src/components/Button/BaseButton.tsx","../../src/components/Button/SplitButton/SplitButton.styles.ts","../../src/components/Button/BaseButton.classNames.ts","../../src/warn/warnDeprecations.ts","../../src/componentAs/composeComponentAs.tsx","../../src/warn/warnConditionallyRequiredProps.ts","../../src/warn/warnMutuallyExclusive.ts","../../src/BaseComponent.ts","../../src/customizations/customizable.tsx"],"names":["noOutline","outline","iconStyle","fontSize","margin","height","lineHeight","textAlign","flexShrink","getStyles","memoizeFunction","theme","semanticColors","effects","fonts","border","buttonBorder","disabledBackground","disabledText","buttonHighContrastFocus","left","top","bottom","right","outlineColor","root","getFocusStyle","inset","highContrastStyle","borderColor","medium","borderRadius","roundedCorner2","boxSizing","cursor","display","padding","textDecoration","userSelect","selectors","position","rootDisabled","backgroundColor","color","iconDisabled","_a","HighContrastSelector","menuIconDisabled","_b","flexContainer","flexWrap","justifyContent","alignItems","description","textContainer","flexGrow","icon","mediumPlus","menuIcon","small","label","screenReaderText","hiddenContentStyle","ImageIcon","props","className","imageProps","nativeProps","getNativeProps","htmlElementProperties","altText","alt","hasName","title","imageNameProps","containerProps","React","__assign","css","MS_ICON","classNames","image","Image","getSplitButtonClassNames","styles","disabled","expanded","checked","primaryDisabled","mergeStyles","splitButtonMenuButton","splitButtonMenuButtonExpanded","splitButtonMenuButtonDisabled","splitButtonMenuButtonChecked","splitButtonMenuFocused","splitButtonContainer","splitButtonContainerChecked","splitButtonContainerCheckedHovered","splitButtonContainerHovered","splitButtonContainerFocused","splitButtonContainerDisabled","splitButtonMenuIcon","splitButtonMenuIconDisabled","splitButtonFlexContainer","divider","splitButtonDivider","splitButtonDividerDisabled","BaseButton","_super","_this","call","_buttonElement","_splitButtonContainer","_mergedRef","createMergedRef","_renderedVisibleMenu","_getMemoizedMenuButtonKeytipProps","keytipProps","hasMenu","_onRenderIcon","buttonProps","defaultRender","iconProps","undefined","iconName","rest","__rest","Icon","_classNames","FontIcon","_onRenderTextContents","text","children","secondaryText","_c","onRenderText","_onRenderText","_d","onRenderDescription","_onRenderDescription","_hasText","key","_labelId","id","_onRenderChildren","_descriptionId","_onRenderAriaDescription","ariaDescription","_ariaDescriptionId","_onRenderMenuIcon","menuIconProps","_onRenderMenu","menuProps","MenuType","menuAs","composeComponentAs","ContextualMenu","_onDismissMenu","ev","onDismiss","defaultPrevented","_dismissMenu","_menuShouldFocusOnMount","_menuShouldFocusOnContainer","setState","menuHidden","_openMenu","shouldFocusOnContainer","shouldFocusOnMount","_onToggleMenu","state","_onSplitContainerFocusCapture","container","current","target","portalContainsElement","focus","_onSplitButtonPrimaryClick","_processingTouch","onClick","_onMenuClick","_onKeyDown","which","KeyCodes","enter","space","_onMenuKeyDown","onKeyDown","preventDefault","stopPropagation","_onKeyUp","onKeyUp","_onKeyPress","onKeyPress","_onMouseUp","onMouseUp","_onMouseDown","onMouseDown","_onClick","_onSplitButtonContainerKeyDown","click","isUp","up","isDown","down","_isValidMenuOpenKey","onMenuClick","setFocusVisibility","context","registeredProviders","altKey","metaKey","forceUpdate","_onTouchStart","_isSplitButton","_handleTouchAndPointerEvent","nativeEvent","pointerType","initializeComponentRef","_async","Async","_events","EventGroup","warnConditionallyRequiredProps","split","warnDeprecations","rootProps","toggled","getId","__extends","Object","defineProperty","prototype","this","render","ariaLabel","ariaHidden","allowDisabledFocus","href","variantClassName","toggle","getClassNames","role","isPrimaryButtonDisabled","getBaseButtonClassNames","renderAsAnchor","tag","assign","type","anchorProperties","buttonProperties","resolvedAriaLabel","ariaDescribedBy","nullRender","ariaLabelledBy","dataIsFocusable","isCheckboxTypeRole","checkedOrPressedValue","ref","elementRef","_onRenderSplitButtonContent","_e","_onRenderContent","componentDidMount","on","_onPointerDown","onPointerUp","componentDidUpdate","prevProps","prevState","onAfterMenuDismiss","componentWillUnmount","dispose","dismissMenu","openMenu","Tag","onRenderIcon","onRenderAriaDescription","onRenderChildren","onRenderMenu","onRenderMenuIcon","Button","keytipAttributes","doNotLayer","_shouldRenderMenu","_getMenuProps","Content","KeytipData","FocusRects","persistMenu","renderPersistedMenuHiddenOnMount","labelElementId","directionalHint","DirectionalHint","bottomLeftEdge","hidden","primaryActionButtonProps","getBaseSplitButtonClassNames","onPointerDown","tabIndex","SplitButton","mergeAriaAttributeValues","onTouchStart","onFocusCapture","style","width","_onRenderSplitButtonMenuButton","_onRenderSplitButtonDivider","splitButtonMenuProps","splitButtonAriaLabel","splitButtonProps","stopImmediatePropagation","_lastTouchTimeoutId","clearTimeout","setTimeout","menuTriggerKeyCode","defaultProps","baseClassName","contextType","FocusRectsContext","customStyles","palette","splitButtonDividerBaseStyles","splitButtonStyles","pointerEvents","borderTopRightRadius","borderBottomRightRadius","borderRight","borderRightWidth","getHighContrastNoAdjustStyle","borderLeftWidth","buttonTextDisabled","_f","_g","neutralSecondaryAlt","borderLeft","verticalAlign","marginLeft","marginTop","marginRight","marginBottom","_h","_j","_k","_l","_m","_o","concatStyleSets","ButtonGlobalClassNames","msButton","msButtonHasMenu","msButtonIcon","msButtonMenuIcon","msButtonLabel","msButtonDescription","msButtonScreenReaderText","msButtonFlexContainer","msButtonTextContainer","iconClassName","menuIconClassName","isSplit","getGlobalClassNames","isExpanded","mergeStyleSets","rootChecked","rootExpanded","iconExpandedHovered","menuIconExpandedHovered","rootExpandedHovered","rootHasMenu","rootHovered","labelHovered","iconHovered","descriptionHovered","menuIconHovered","rootFocused","rootPressed","iconPressed","descriptionPressed","menuIconPressed","rootCheckedDisabled","rootCheckedHovered","rootCheckedPressed","iconExpanded","iconChecked","labelChecked","labelDisabled","menuIconChecked","menuIconExpanded","descriptionChecked","descriptionDisabled","componentName","deprecationMap","componentAsMemoizer","createMemoizer","outer","Outer","inner","Error","Inner","innerMemoizer","innerProps","outerProps","requiredProps","conditionalPropName","condition","warnMutuallyExclusive","exclusiveMap","BaseComponent","obj","methodNames","i","len","length","_makeSafe","_makeAllSafe","_updateComponentRef","_setComponentRef","componentRef","__disposables","_disposables","disposable","__className","results","exec","constructor","toString","__async","push","__events","_resolveRef","refName","__resolves","currentProps","newProps","_warnDeprecations","_warnMutuallyExclusive","mutuallyExclusiveMap","_warnConditionallyRequiredProps","value","_skipComponentRefResolution","methodName","classMethod","prototypeMethod","retVal","args","_i","arguments","apply","customizable","scope","fields","concatStyles","ComposedComponent","resultClass","ComponentWithInjectedProps","_styleCache","_onSettingChanged","bind","Customizations","observe","unobserve","CustomizerContext","Consumer","getSettings","customizations","componentProps","default","component","mergedStyles","merged","displayName","hoistStatics"],"mappings":"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","file":"static/js/0.2637fdc9.chunk.js","sourcesContent":["import { memoizeFunction } from '../../Utilities';\nimport { HighContrastSelector, getFocusStyle, hiddenContentStyle } from '../../Styling';\nimport type { IButtonStyles } from './Button.types';\nimport type { ITheme, IRawStyle } from '../../Styling';\n\nconst noOutline: IRawStyle = {\n  outline: 0,\n};\n\nconst iconStyle = (fontSize?: string | number): IRawStyle => {\n  return {\n    fontSize,\n    margin: '0 4px',\n    height: '16px',\n    lineHeight: '16px',\n    textAlign: 'center',\n    flexShrink: 0,\n  };\n};\n\n/**\n * Gets the base button styles. Note: because it is a base class to be used with the `mergeRules`\n * helper, it should have values for all class names in the interface. This let `mergeRules` optimize\n * mixing class names together.\n */\nexport const getStyles = memoizeFunction((theme: ITheme): IButtonStyles => {\n  const { semanticColors, effects, fonts } = theme;\n\n  const border = semanticColors.buttonBorder;\n  const disabledBackground = semanticColors.disabledBackground;\n  const disabledText = semanticColors.disabledText;\n  const buttonHighContrastFocus = {\n    left: -2,\n    top: -2,\n    bottom: -2,\n    right: -2,\n    outlineColor: 'ButtonText',\n  };\n\n  return {\n    root: [\n      getFocusStyle(theme, { inset: 1, highContrastStyle: buttonHighContrastFocus, borderColor: 'transparent' }),\n      theme.fonts.medium,\n      {\n        border: '1px solid ' + border,\n        borderRadius: effects.roundedCorner2,\n        boxSizing: 'border-box',\n        cursor: 'pointer',\n        display: 'inline-block',\n        padding: '0 16px',\n        textDecoration: 'none',\n        textAlign: 'center',\n        userSelect: 'none',\n\n        selectors: {\n          // IE11 workaround for preventing shift of child elements of a button when active.\n          ':active > span': {\n            position: 'relative',\n            left: 0,\n            top: 0,\n          },\n        },\n      },\n    ],\n\n    rootDisabled: [\n      getFocusStyle(theme, { inset: 1, highContrastStyle: buttonHighContrastFocus, borderColor: 'transparent' }),\n      {\n        backgroundColor: disabledBackground,\n        borderColor: disabledBackground,\n        color: disabledText,\n        cursor: 'default',\n        selectors: {\n          ':hover': noOutline,\n          ':focus': noOutline,\n        },\n      },\n    ],\n\n    iconDisabled: {\n      color: disabledText,\n      selectors: {\n        [HighContrastSelector]: {\n          color: 'GrayText',\n        },\n      },\n    },\n\n    menuIconDisabled: {\n      color: disabledText,\n      selectors: {\n        [HighContrastSelector]: {\n          color: 'GrayText',\n        },\n      },\n    },\n\n    flexContainer: {\n      display: 'flex',\n      height: '100%',\n      flexWrap: 'nowrap',\n      justifyContent: 'center',\n      alignItems: 'center',\n    },\n    description: {\n      display: 'block',\n    },\n\n    textContainer: {\n      flexGrow: 1,\n      display: 'block',\n    },\n\n    icon: iconStyle(fonts.mediumPlus.fontSize),\n\n    menuIcon: iconStyle(fonts.small.fontSize),\n\n    label: {\n      margin: '0 4px',\n      lineHeight: '100%',\n      display: 'block',\n    },\n\n    screenReaderText: hiddenContentStyle,\n  };\n});\n","import * as React from 'react';\nimport { Image } from '../Image/Image';\nimport { css, getNativeProps, htmlElementProperties } from '../../Utilities';\nimport { classNames, MS_ICON } from './Icon.styles';\nimport type { IImageIconProps } from './Icon.types';\n\n/**\n * Fast icon component which only supports images (not font glyphs) and can't be targeted by customizations.\n * To style the icon, use `className` or reference `ms-Icon` in CSS.\n * {@docCategory Icon}\n */\nexport const ImageIcon: React.FunctionComponent<IImageIconProps> = props => {\n  const { className, imageProps } = props;\n\n  const nativeProps = getNativeProps<React.HTMLAttributes<HTMLDivElement>>(props, htmlElementProperties, [\n    'aria-label',\n    'aria-labelledby',\n    'title',\n    'aria-describedby',\n  ]);\n  const altText = imageProps.alt || props['aria-label'];\n  const hasName =\n    altText ||\n    props['aria-labelledby'] ||\n    props.title ||\n    imageProps['aria-label'] ||\n    imageProps['aria-labelledby'] ||\n    imageProps.title;\n\n  // move naming or describing attributes from the container (where they are invalid) to the image\n  const imageNameProps = {\n    'aria-labelledby': props['aria-labelledby'],\n    'aria-describedby': props['aria-describedby'],\n    title: props.title,\n  };\n\n  const containerProps = hasName\n    ? {}\n    : {\n        'aria-hidden': true,\n      };\n\n  return (\n    <div {...containerProps} {...nativeProps} className={css(MS_ICON, classNames.root, classNames.image, className)}>\n      <Image {...imageNameProps} {...imageProps} alt={hasName ? altText : ''} />\n    </div>\n  );\n};\n","import { memoizeFunction } from '../../../Utilities';\nimport { mergeStyles } from '../../../Styling';\nimport type { IButtonStyles } from '../Button.types';\n\nexport interface ISplitButtonClassNames {\n  root?: string;\n  icon?: string;\n  splitButtonContainer?: string;\n  flexContainer?: string;\n  divider?: string;\n}\n\nexport const getSplitButtonClassNames = memoizeFunction(\n  (\n    styles: IButtonStyles,\n    disabled: boolean,\n    expanded: boolean,\n    checked: boolean,\n    primaryDisabled?: boolean,\n  ): ISplitButtonClassNames => {\n    return {\n      root: mergeStyles(\n        styles.splitButtonMenuButton,\n        expanded && [styles.splitButtonMenuButtonExpanded],\n        disabled && [styles.splitButtonMenuButtonDisabled],\n        checked && !disabled && [styles.splitButtonMenuButtonChecked],\n        primaryDisabled &&\n          !disabled && [\n            {\n              selectors: {\n                ':focus': styles.splitButtonMenuFocused,\n              },\n            },\n          ],\n      ),\n\n      splitButtonContainer: mergeStyles(\n        styles.splitButtonContainer,\n        !disabled &&\n          checked && [\n            styles.splitButtonContainerChecked,\n            {\n              selectors: {\n                ':hover': styles.splitButtonContainerCheckedHovered,\n              },\n            },\n          ],\n        !disabled &&\n          !checked && [\n            {\n              selectors: {\n                ':hover': styles.splitButtonContainerHovered,\n                ':focus': styles.splitButtonContainerFocused,\n              },\n            },\n          ],\n        disabled && styles.splitButtonContainerDisabled,\n      ),\n\n      icon: mergeStyles(\n        styles.splitButtonMenuIcon,\n        disabled && styles.splitButtonMenuIconDisabled,\n        !disabled && primaryDisabled && styles.splitButtonMenuIcon,\n      ),\n\n      flexContainer: mergeStyles(styles.splitButtonFlexContainer),\n\n      divider: mergeStyles(\n        styles.splitButtonDivider,\n        (primaryDisabled || disabled) && styles.splitButtonDividerDisabled,\n      ),\n    };\n  },\n);\n","import * as React from 'react';\nimport {\n  anchorProperties,\n  assign,\n  buttonProperties,\n  createMergedRef,\n  css,\n  getId,\n  getNativeProps,\n  initializeComponentRef,\n  memoizeFunction,\n  mergeAriaAttributeValues,\n  nullRender,\n  portalContainsElement,\n  setFocusVisibility,\n  warnConditionallyRequiredProps,\n  warnDeprecations,\n  Async,\n  EventGroup,\n  FocusRects,\n  FocusRectsContext,\n  KeyCodes,\n} from '../../Utilities';\nimport { Icon, FontIcon, ImageIcon } from '../../Icon';\nimport { DirectionalHint } from '../../common/DirectionalHint';\nimport { ContextualMenu } from '../../ContextualMenu';\nimport { getBaseButtonClassNames } from './BaseButton.classNames';\nimport { getSplitButtonClassNames as getBaseSplitButtonClassNames } from './SplitButton/SplitButton.classNames';\nimport { KeytipData } from '../../KeytipData';\nimport type { IFocusRectsContext, IRenderFunction } from '../../Utilities';\nimport type { IContextualMenuProps } from '../../ContextualMenu';\nimport type { IButtonProps, IButton } from './Button.types';\nimport type { IButtonClassNames } from './BaseButton.classNames';\nimport type { ISplitButtonClassNames } from './SplitButton/SplitButton.classNames';\nimport type { IKeytipProps } from '../../Keytip';\nimport { composeComponentAs } from '../../Utilities';\n\n/**\n * {@docCategory Button}\n */\nexport interface IBaseButtonProps extends IButtonProps {\n  baseClassName?: string;\n  variantClassName?: string;\n}\n\n/**\n * {@docCategory Button}\n */\nexport interface IBaseButtonState {\n  menuHidden: boolean;\n}\n\nconst TouchIdleDelay = 500; /* ms */\nconst COMPONENT_NAME = 'BaseButton';\n\n/**\n * {@docCategory Button}\n */\nexport class BaseButton extends React.Component<IBaseButtonProps, IBaseButtonState> implements IButton {\n  private get _isSplitButton(): boolean {\n    return !!this.props.menuProps && !!this.props.onClick && this.props.split === true;\n  }\n\n  public static defaultProps: Partial<IBaseButtonProps> = {\n    baseClassName: 'ms-Button',\n    styles: {},\n    split: false,\n  };\n\n  // needed to access registeredProviders when manually setting focus visibility\n  public static contextType = FocusRectsContext;\n  public context: IFocusRectsContext;\n\n  private _async: Async;\n  private _events: EventGroup;\n  private _buttonElement = React.createRef<HTMLElement>();\n  private _splitButtonContainer = React.createRef<HTMLDivElement>();\n  private _mergedRef = createMergedRef<HTMLElement>();\n  private _labelId: string;\n  private _descriptionId: string;\n  private _ariaDescriptionId: string;\n  private _classNames: IButtonClassNames;\n  private _processingTouch: boolean;\n  private _lastTouchTimeoutId: number | undefined;\n  private _renderedVisibleMenu: boolean = false;\n\n  // These fields will be used to set corresponding props on the menu.\n  private _menuShouldFocusOnContainer: boolean | undefined;\n  private _menuShouldFocusOnMount: boolean | undefined;\n\n  private _getMemoizedMenuButtonKeytipProps = memoizeFunction((keytipProps: IKeytipProps) => {\n    return {\n      ...keytipProps,\n      hasMenu: true,\n    };\n  });\n\n  constructor(props: IBaseButtonProps) {\n    super(props);\n\n    initializeComponentRef(this);\n    this._async = new Async(this);\n    this._events = new EventGroup(this);\n\n    warnConditionallyRequiredProps(COMPONENT_NAME, props, ['menuProps', 'onClick'], 'split', this.props.split!);\n\n    warnDeprecations(COMPONENT_NAME, props, {\n      rootProps: undefined,\n      description: 'secondaryText',\n      toggled: 'checked',\n    });\n    this._labelId = getId();\n    this._descriptionId = getId();\n    this._ariaDescriptionId = getId();\n\n    this.state = {\n      menuHidden: true,\n    };\n  }\n\n  public render(): JSX.Element {\n    const {\n      ariaDescription,\n      ariaLabel,\n      ariaHidden,\n      className,\n      disabled,\n      allowDisabledFocus,\n      primaryDisabled,\n      // eslint-disable-next-line deprecation/deprecation\n      secondaryText = this.props.description,\n      href,\n      iconProps,\n      menuIconProps,\n      styles,\n      checked,\n      variantClassName,\n      theme,\n      toggle,\n      getClassNames,\n      role,\n    } = this.props;\n\n    const { menuHidden } = this.state;\n\n    // Button is disabled if the whole button (in case of splitButton is disabled) or if the primary action is disabled\n    const isPrimaryButtonDisabled = disabled || primaryDisabled;\n\n    this._classNames = getClassNames\n      ? getClassNames(\n          theme!,\n          className!,\n          variantClassName!,\n          iconProps && iconProps.className,\n          menuIconProps && menuIconProps.className,\n          isPrimaryButtonDisabled!,\n          checked!,\n          !menuHidden,\n          !!this.props.menuProps,\n          this.props.split,\n          !!allowDisabledFocus,\n        )\n      : getBaseButtonClassNames(\n          theme!,\n          styles!,\n          className!,\n          variantClassName!,\n          iconProps && iconProps.className,\n          menuIconProps && menuIconProps.className,\n          isPrimaryButtonDisabled!,\n          !!this.props.menuProps,\n          checked!,\n          !menuHidden,\n          this.props.split,\n        );\n\n    const { _ariaDescriptionId, _labelId, _descriptionId } = this;\n    // Anchor tag cannot be disabled hence in disabled state rendering\n    // anchor button as normal button\n    const renderAsAnchor: boolean = !isPrimaryButtonDisabled && !!href;\n    const tag = renderAsAnchor ? 'a' : 'button';\n\n    const nativeProps = getNativeProps(\n      // eslint-disable-next-line deprecation/deprecation\n      assign(renderAsAnchor ? {} : { type: 'button' }, this.props.rootProps, this.props),\n      renderAsAnchor ? anchorProperties : buttonProperties,\n      [\n        'disabled', // let disabled buttons be focused and styled as disabled.\n      ],\n    );\n\n    // Check for ariaLabel passed in via Button props, and fall back to aria-label passed in via native props\n    const resolvedAriaLabel = ariaLabel || (nativeProps as any)['aria-label'];\n\n    // Check for ariaDescription, secondaryText or aria-describedby in the native props to determine source of\n    // aria-describedby. Otherwise default to undefined so property does not appear in output.\n    let ariaDescribedBy = undefined;\n    if (ariaDescription) {\n      ariaDescribedBy = _ariaDescriptionId;\n    } else if (secondaryText && this.props.onRenderDescription !== nullRender) {\n      // for buttons like CompoundButton with a valid onRenderDescription, we need to set an ariaDescribedBy\n      // for buttons that do not render anything (via nullRender), we should not set an ariaDescribedBy\n      ariaDescribedBy = _descriptionId;\n    } else if ((nativeProps as any)['aria-describedby']) {\n      ariaDescribedBy = (nativeProps as any)['aria-describedby'];\n    }\n\n    // If an explicit aria-labelledby is given, use that and we're done.\n    // If any kind of description is given (which will end up as an aria-describedby attribute)\n    // and no ariaLabel is specified, set the labelledby element.\n    // Otherwise, the button is labeled implicitly by the descendent text on the button (if it exists).\n    let ariaLabelledBy = undefined;\n    if ((nativeProps as any)['aria-labelledby']) {\n      ariaLabelledBy = (nativeProps as any)['aria-labelledby'];\n    } else if (ariaDescribedBy && !resolvedAriaLabel) {\n      ariaLabelledBy = this._hasText() ? _labelId : undefined;\n    }\n\n    const dataIsFocusable =\n      (this.props as any)['data-is-focusable'] === false || (disabled && !allowDisabledFocus) || this._isSplitButton\n        ? false\n        : true;\n\n    const isCheckboxTypeRole = role === 'menuitemcheckbox' || role === 'checkbox';\n    // if isCheckboxTypeRole, always return a checked value.\n    // Otherwise only return checked value if toggle is set to true.\n    // This is because role=\"checkbox\" always needs to have an aria-checked value\n    // but our checked prop only sets aria-pressed if we mark the button as a toggle=\"true\"\n    const checkedOrPressedValue = isCheckboxTypeRole ? !!checked : toggle === true ? !!checked : undefined;\n\n    const buttonProps = assign(nativeProps, {\n      className: this._classNames.root,\n      // eslint-disable-next-line deprecation/deprecation\n      ref: this._mergedRef(this.props.elementRef, this._buttonElement),\n      disabled: isPrimaryButtonDisabled && !allowDisabledFocus,\n      onKeyDown: this._onKeyDown,\n      onKeyPress: this._onKeyPress,\n      onKeyUp: this._onKeyUp,\n      onMouseDown: this._onMouseDown,\n      onMouseUp: this._onMouseUp,\n      onClick: this._onClick,\n      'aria-label': resolvedAriaLabel,\n      'aria-labelledby': ariaLabelledBy,\n      'aria-describedby': ariaDescribedBy,\n      'aria-disabled': isPrimaryButtonDisabled,\n      'data-is-focusable': dataIsFocusable,\n      // aria-pressed attribute should only be present for toggle buttons\n      // aria-checked attribute should only be present for toggle buttons with checkbox type role\n      [isCheckboxTypeRole ? 'aria-checked' : 'aria-pressed']: checkedOrPressedValue,\n    });\n\n    if (ariaHidden) {\n      buttonProps['aria-hidden'] = true;\n    }\n\n    if (this._isSplitButton) {\n      return this._onRenderSplitButtonContent(tag, buttonProps);\n    } else if (this.props.menuProps) {\n      const { id = `${this._labelId}-menu` } = this.props.menuProps;\n      assign(buttonProps, {\n        'aria-expanded': !menuHidden,\n        'aria-controls': !menuHidden ? id : null,\n        'aria-haspopup': true,\n      });\n    }\n\n    return this._onRenderContent(tag, buttonProps);\n  }\n\n  public componentDidMount() {\n    // For split buttons, touching anywhere in the button should drop the dropdown, which should contain the\n    // primary action. This gives more hit target space for touch environments. We're setting the onpointerdown here,\n    // because React does not support Pointer events yet.\n    if (this._isSplitButton && this._splitButtonContainer.current) {\n      if ('onpointerdown' in this._splitButtonContainer.current) {\n        this._events.on(this._splitButtonContainer.current, 'pointerdown', this._onPointerDown, true);\n      }\n      if ('onpointerup' in this._splitButtonContainer.current && this.props.onPointerUp) {\n        this._events.on(this._splitButtonContainer.current, 'pointerup', this.props.onPointerUp, true);\n      }\n    }\n  }\n\n  public componentDidUpdate(prevProps: IBaseButtonProps, prevState: IBaseButtonState) {\n    // If Button's menu was closed, run onAfterMenuDismiss.\n    if (this.props.onAfterMenuDismiss && !prevState.menuHidden && this.state.menuHidden) {\n      this.props.onAfterMenuDismiss();\n    }\n  }\n\n  public componentWillUnmount(): void {\n    this._async.dispose();\n    this._events.dispose();\n  }\n\n  public focus(): void {\n    if (this._isSplitButton && this._splitButtonContainer.current) {\n      setFocusVisibility(true, undefined, this.context?.registeredProviders);\n      this._splitButtonContainer.current.focus();\n    } else if (this._buttonElement.current) {\n      setFocusVisibility(true, undefined, this.context?.registeredProviders);\n      this._buttonElement.current.focus();\n    }\n  }\n\n  public dismissMenu(): void {\n    this._dismissMenu();\n  }\n\n  public openMenu(shouldFocusOnContainer?: boolean, shouldFocusOnMount?: boolean): void {\n    this._openMenu(shouldFocusOnContainer, shouldFocusOnMount);\n  }\n\n  private _onRenderContent(tag: any, buttonProps: IButtonProps): JSX.Element {\n    const props = this.props;\n    const Tag = tag;\n    const {\n      menuIconProps,\n      menuProps,\n      onRenderIcon = this._onRenderIcon,\n      onRenderAriaDescription = this._onRenderAriaDescription,\n      onRenderChildren = this._onRenderChildren,\n      // eslint-disable-next-line deprecation/deprecation\n      onRenderMenu = this._onRenderMenu,\n      onRenderMenuIcon = this._onRenderMenuIcon,\n      disabled,\n    } = props;\n    let { keytipProps } = props;\n    if (keytipProps && menuProps) {\n      keytipProps = this._getMemoizedMenuButtonKeytipProps(keytipProps);\n    }\n\n    const Button = (keytipAttributes?: any): JSX.Element => (\n      <Tag {...buttonProps} {...keytipAttributes}>\n        <span className={this._classNames.flexContainer} data-automationid=\"splitbuttonprimary\">\n          {onRenderIcon(props, this._onRenderIcon)}\n          {this._onRenderTextContents()}\n          {onRenderAriaDescription(props, this._onRenderAriaDescription)}\n          {onRenderChildren(props, this._onRenderChildren)}\n          {!this._isSplitButton &&\n            (menuProps || menuIconProps || this.props.onRenderMenuIcon) &&\n            onRenderMenuIcon(this.props, this._onRenderMenuIcon)}\n          {menuProps &&\n            !menuProps.doNotLayer &&\n            this._shouldRenderMenu() &&\n            onRenderMenu(this._getMenuProps(menuProps), this._onRenderMenu)}\n        </span>\n      </Tag>\n    );\n\n    const Content = keytipProps ? (\n      // If we're making a split button, we won't put the keytip here\n      <KeytipData\n        keytipProps={!this._isSplitButton ? keytipProps : undefined}\n        ariaDescribedBy={(buttonProps as any)['aria-describedby']}\n        disabled={disabled}\n      >\n        {(keytipAttributes: any): JSX.Element => Button(keytipAttributes)}\n      </KeytipData>\n    ) : (\n      Button()\n    );\n\n    if (menuProps && menuProps.doNotLayer) {\n      return (\n        <>\n          {Content}\n          {this._shouldRenderMenu() && onRenderMenu(this._getMenuProps(menuProps), this._onRenderMenu)}\n        </>\n      );\n    }\n\n    return (\n      <>\n        {Content}\n        <FocusRects />\n      </>\n    );\n  }\n\n  /**\n   * Method to help determine if the menu's component tree should\n   * be rendered. It takes into account whether the menu is expanded,\n   * whether it is a persisted menu and whether it has been shown to the user.\n   */\n  private _shouldRenderMenu() {\n    const { menuHidden } = this.state;\n    // eslint-disable-next-line deprecation/deprecation\n    const { persistMenu, renderPersistedMenuHiddenOnMount } = this.props;\n\n    if (!menuHidden) {\n      // Always should render a menu when it is expanded\n      return true;\n    } else if (persistMenu && (this._renderedVisibleMenu || renderPersistedMenuHiddenOnMount)) {\n      // _renderedVisibleMenu ensures that the first rendering of\n      // the menu happens on-screen, as edge's scrollbar calculations are off if done while hidden.\n      return true;\n    }\n\n    return false;\n  }\n\n  private _onRenderIcon = (\n    buttonProps?: IButtonProps,\n    defaultRender?: IRenderFunction<IButtonProps>,\n  ): JSX.Element | null => {\n    const { iconProps } = this.props;\n\n    if (iconProps && (iconProps.iconName !== undefined || iconProps.imageProps)) {\n      const { className, imageProps, ...rest } = iconProps;\n\n      // If the styles prop is specified as part of iconProps, fall back to regular Icon as FontIcon and ImageIcon\n      // do not have this prop.\n      if (iconProps.styles) {\n        return <Icon className={css(this._classNames.icon, className)} imageProps={imageProps} {...rest} />;\n      }\n      if (iconProps.iconName) {\n        return <FontIcon className={css(this._classNames.icon, className)} {...rest} />;\n      }\n      if (imageProps) {\n        return <ImageIcon className={css(this._classNames.icon, className)} imageProps={imageProps} {...rest} />;\n      }\n    }\n    return null;\n  };\n\n  private _onRenderTextContents = (): JSX.Element | (JSX.Element | null)[] => {\n    const {\n      text,\n      children,\n      // eslint-disable-next-line deprecation/deprecation\n      secondaryText = this.props.description,\n      onRenderText = this._onRenderText,\n      onRenderDescription = this._onRenderDescription,\n    } = this.props;\n\n    if (text || typeof children === 'string' || secondaryText) {\n      return (\n        <span className={this._classNames.textContainer}>\n          {onRenderText(this.props, this._onRenderText)}\n          {onRenderDescription(this.props, this._onRenderDescription)}\n        </span>\n      );\n    }\n    return [onRenderText(this.props, this._onRenderText), onRenderDescription(this.props, this._onRenderDescription)];\n  };\n\n  private _onRenderText = (): JSX.Element | null => {\n    let { text } = this.props;\n    const { children } = this.props;\n\n    // For backwards compat, we should continue to take in the text content from children.\n    if (text === undefined && typeof children === 'string') {\n      text = children;\n    }\n\n    if (this._hasText()) {\n      return (\n        <span key={this._labelId} className={this._classNames.label} id={this._labelId}>\n          {text}\n        </span>\n      );\n    }\n\n    return null;\n  };\n\n  private _hasText(): boolean {\n    // _onRenderTextContents and _onRenderText do not perform the same checks. Below is parity with what _onRenderText\n    // used to have before the refactor that introduced this function. _onRenderTextContents does not require props.\n    // text to be undefined in order for props.children to be used as a fallback.\n    // Purely a code maintainability/reuse issue, but logged as Issue #4979.\n    return this.props.text !== null && (this.props.text !== undefined || typeof this.props.children === 'string');\n  }\n\n  private _onRenderChildren = (): JSX.Element | null => {\n    const { children } = this.props;\n\n    // If children is just a string, either it or the text will be rendered via onRenderLabel\n    // If children is another component, it will be rendered after text\n    if (typeof children === 'string') {\n      return null;\n    }\n\n    return children as any;\n  };\n\n  private _onRenderDescription = (props: IButtonProps) => {\n    // eslint-disable-next-line deprecation/deprecation\n    const { secondaryText = this.props.description } = props;\n\n    // ms-Button-description is only shown when the button type is compound.\n    // In other cases it will not be displayed.\n    return secondaryText ? (\n      <span key={this._descriptionId} className={this._classNames.description} id={this._descriptionId}>\n        {secondaryText}\n      </span>\n    ) : null;\n  };\n\n  private _onRenderAriaDescription = () => {\n    const { ariaDescription } = this.props;\n\n    // If ariaDescription is given, descriptionId will be assigned to ariaDescriptionSpan,\n    // otherwise it will be assigned to descriptionSpan.\n    return ariaDescription ? (\n      <span className={this._classNames.screenReaderText} id={this._ariaDescriptionId}>\n        {ariaDescription}\n      </span>\n    ) : null;\n  };\n\n  private _onRenderMenuIcon = (props: IButtonProps): JSX.Element | null => {\n    const { menuIconProps } = this.props;\n\n    return <FontIcon iconName=\"ChevronDown\" {...menuIconProps} className={this._classNames.menuIcon} />;\n  };\n\n  private _getMenuProps(menuProps: IContextualMenuProps): IContextualMenuProps {\n    const { persistMenu } = this.props;\n    const { menuHidden } = this.state;\n\n    // the accessible menu label (accessible name) has a relationship to the button.\n    // If the menu props do not specify an explicit value for aria-label or aria-labelledBy,\n    // AND the button has text, we'll set the menu aria-labelledBy to the text element id.\n    if (!menuProps.ariaLabel && !menuProps.labelElementId && this._hasText()) {\n      menuProps = { ...menuProps, labelElementId: this._labelId };\n    }\n\n    return {\n      id: this._labelId + '-menu',\n      directionalHint: DirectionalHint.bottomLeftEdge,\n      ...menuProps,\n      shouldFocusOnContainer: this._menuShouldFocusOnContainer,\n      shouldFocusOnMount: this._menuShouldFocusOnMount,\n      hidden: persistMenu ? menuHidden : undefined,\n      className: css('ms-BaseButton-menuhost', menuProps.className),\n      target: this._isSplitButton ? this._splitButtonContainer.current : this._buttonElement.current,\n      onDismiss: this._onDismissMenu,\n    };\n  }\n\n  private _onRenderMenu = (menuProps: IContextualMenuProps): JSX.Element => {\n    const MenuType = this.props.menuAs ? composeComponentAs(this.props.menuAs, ContextualMenu) : ContextualMenu;\n\n    return <MenuType {...menuProps} />;\n  };\n\n  private _onDismissMenu: IContextualMenuProps['onDismiss'] = ev => {\n    const { menuProps } = this.props;\n\n    if (menuProps && menuProps.onDismiss) {\n      menuProps.onDismiss(ev);\n    }\n    if (!ev || !ev.defaultPrevented) {\n      this._dismissMenu();\n    }\n  };\n\n  private _dismissMenu = (): void => {\n    this._menuShouldFocusOnMount = undefined;\n    this._menuShouldFocusOnContainer = undefined;\n    this.setState({ menuHidden: true });\n  };\n\n  private _openMenu = (shouldFocusOnContainer?: boolean, shouldFocusOnMount: boolean = true): void => {\n    if (this.props.menuProps) {\n      this._menuShouldFocusOnContainer = shouldFocusOnContainer;\n      this._menuShouldFocusOnMount = shouldFocusOnMount;\n      this._renderedVisibleMenu = true;\n      this.setState({ menuHidden: false });\n    }\n  };\n\n  private _onToggleMenu = (shouldFocusOnContainer: boolean): void => {\n    let shouldFocusOnMount = true;\n    if (this.props.menuProps && this.props.menuProps.shouldFocusOnMount === false) {\n      shouldFocusOnMount = false;\n    }\n\n    this.state.menuHidden ? this._openMenu(shouldFocusOnContainer, shouldFocusOnMount) : this._dismissMenu();\n  };\n\n  private _onRenderSplitButtonContent(tag: any, buttonProps: IButtonProps): JSX.Element {\n    const {\n      styles = {},\n      disabled,\n      allowDisabledFocus,\n      checked,\n      getSplitButtonClassNames,\n      primaryDisabled,\n      menuProps,\n      toggle,\n      role,\n      primaryActionButtonProps,\n    } = this.props;\n    let { keytipProps } = this.props;\n    const { menuHidden } = this.state;\n\n    const classNames = getSplitButtonClassNames\n      ? getSplitButtonClassNames(!!disabled, !menuHidden, !!checked, !!allowDisabledFocus)\n      : styles && getBaseSplitButtonClassNames(styles!, !!disabled, !menuHidden, !!checked, !!primaryDisabled);\n\n    assign(buttonProps, {\n      onClick: undefined,\n      onPointerDown: undefined,\n      onPointerUp: undefined,\n      tabIndex: -1,\n      'data-is-focusable': false,\n    });\n\n    if (keytipProps && menuProps) {\n      keytipProps = this._getMemoizedMenuButtonKeytipProps(keytipProps);\n    }\n\n    const containerProps = getNativeProps<React.HTMLAttributes<HTMLSpanElement>>(buttonProps, [], ['disabled']);\n\n    // Add additional props to apply on primary action button\n    if (primaryActionButtonProps) {\n      assign(buttonProps, primaryActionButtonProps);\n    }\n\n    const SplitButton = (keytipAttributes?: any): JSX.Element => (\n      <div\n        {...containerProps}\n        data-ktp-target={keytipAttributes ? keytipAttributes['data-ktp-target'] : undefined}\n        role={role ? role : 'button'}\n        aria-disabled={disabled}\n        aria-haspopup={true}\n        aria-expanded={!menuHidden}\n        aria-pressed={toggle ? !!checked : undefined} // should only be present for toggle buttons\n        aria-describedby={mergeAriaAttributeValues(\n          buttonProps['aria-describedby'],\n          keytipAttributes ? keytipAttributes['aria-describedby'] : undefined,\n        )}\n        className={classNames && classNames.splitButtonContainer}\n        onKeyDown={this._onSplitButtonContainerKeyDown}\n        onTouchStart={this._onTouchStart}\n        ref={this._splitButtonContainer}\n        data-is-focusable={true}\n        onClick={!disabled && !primaryDisabled ? this._onSplitButtonPrimaryClick : undefined}\n        tabIndex={(!disabled && !primaryDisabled) || allowDisabledFocus ? 0 : undefined}\n        aria-roledescription={buttonProps['aria-roledescription']}\n        onFocusCapture={this._onSplitContainerFocusCapture}\n      >\n        <span style={{ display: 'flex', width: '100%' }}>\n          {this._onRenderContent(tag, buttonProps)}\n          {this._onRenderSplitButtonMenuButton(classNames, keytipAttributes)}\n          {this._onRenderSplitButtonDivider(classNames)}\n        </span>\n      </div>\n    );\n\n    return keytipProps ? (\n      <KeytipData keytipProps={keytipProps} disabled={disabled}>\n        {(keytipAttributes: any): JSX.Element => SplitButton(keytipAttributes)}\n      </KeytipData>\n    ) : (\n      SplitButton()\n    );\n  }\n\n  private _onSplitContainerFocusCapture = (ev: React.FocusEvent<HTMLDivElement>) => {\n    const container = this._splitButtonContainer.current;\n\n    // If the target is coming from the portal we do not need to set focus on the container.\n    if (!container || (ev.target && portalContainsElement(ev.target, container))) {\n      return;\n    }\n\n    // We should never be able to focus the individual buttons in a split button. Focus\n    // should always remain on the container.\n    container.focus();\n  };\n\n  private _onSplitButtonPrimaryClick = (ev: React.MouseEvent<HTMLDivElement>) => {\n    if (!this.state.menuHidden) {\n      this._dismissMenu();\n    }\n\n    if (!this._processingTouch && this.props.onClick) {\n      this.props.onClick(ev);\n    } else if (this._processingTouch) {\n      this._onMenuClick(ev);\n    }\n  };\n\n  private _onRenderSplitButtonDivider(classNames: ISplitButtonClassNames | undefined): JSX.Element | null {\n    if (classNames && classNames.divider) {\n      const onClick = (ev: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n        ev.stopPropagation();\n      };\n      return <span className={classNames.divider} aria-hidden={true} onClick={onClick} />;\n    }\n    return null;\n  }\n\n  private _onRenderSplitButtonMenuButton(\n    classNames: ISplitButtonClassNames | undefined,\n    keytipAttributes: any,\n  ): JSX.Element {\n    const { allowDisabledFocus, checked, disabled, splitButtonMenuProps, splitButtonAriaLabel, primaryDisabled } =\n      this.props;\n    const { menuHidden } = this.state;\n    let menuIconProps = this.props.menuIconProps;\n\n    if (menuIconProps === undefined) {\n      menuIconProps = {\n        iconName: 'ChevronDown',\n      };\n    }\n\n    const splitButtonProps = {\n      ...splitButtonMenuProps,\n      styles: classNames,\n      checked,\n      disabled,\n      allowDisabledFocus,\n      onClick: this._onMenuClick,\n      menuProps: undefined,\n      iconProps: { ...menuIconProps, className: this._classNames.menuIcon },\n      ariaLabel: splitButtonAriaLabel,\n      'aria-haspopup': true,\n      'aria-expanded': !menuHidden,\n      'data-is-focusable': false,\n    };\n\n    // Add data-ktp-execute-target to the split button if the keytip is defined\n    return (\n      <BaseButton\n        {...splitButtonProps}\n        data-ktp-execute-target={keytipAttributes ? keytipAttributes['data-ktp-execute-target'] : keytipAttributes}\n        onMouseDown={this._onMouseDown}\n        tabIndex={primaryDisabled && !allowDisabledFocus ? 0 : -1}\n      />\n    );\n  }\n\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\n    // explicity cancelling event so click won't fire after this\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.props.disabled && (ev.which === KeyCodes.enter || ev.which === KeyCodes.space)) {\n      ev.preventDefault();\n      ev.stopPropagation();\n    } else if (!this.props.disabled) {\n      if (this.props.menuProps) {\n        this._onMenuKeyDown(ev);\n      } else if (this.props.onKeyDown !== undefined) {\n        this.props.onKeyDown(ev); // not cancelling event because it's not disabled\n      }\n    }\n  };\n\n  private _onKeyUp = (\n    ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>,\n  ) => {\n    if (!this.props.disabled && this.props.onKeyUp !== undefined) {\n      this.props.onKeyUp(ev); // not cancelling event because it's not disabled\n    }\n  };\n\n  private _onKeyPress = (\n    ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>,\n  ) => {\n    // eslint-disable-next-line deprecation/deprecation\n    if (!this.props.disabled && this.props.onKeyPress !== undefined) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.props.onKeyPress(ev); // not cancelling event because it's not disabled\n    }\n  };\n\n  private _onMouseUp = (\n    ev: React.MouseEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>,\n  ) => {\n    if (!this.props.disabled && this.props.onMouseUp !== undefined) {\n      this.props.onMouseUp(ev); // not cancelling event because it's not disabled\n    }\n  };\n\n  private _onMouseDown = (\n    ev: React.MouseEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>,\n  ) => {\n    if (!this.props.disabled && this.props.onMouseDown !== undefined) {\n      this.props.onMouseDown(ev); // not cancelling event because it's not disabled\n    }\n  };\n\n  private _onClick = (\n    ev: React.MouseEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>,\n  ) => {\n    if (!this.props.disabled) {\n      if (this.props.menuProps) {\n        this._onMenuClick(ev);\n      } else if (this.props.onClick !== undefined) {\n        this.props.onClick(ev); // not cancelling event because it's not disabled\n      }\n    }\n  };\n\n  private _onSplitButtonContainerKeyDown = (ev: React.KeyboardEvent<HTMLDivElement>) => {\n    // eslint-disable-next-line deprecation/deprecation\n    if (ev.which === KeyCodes.enter || ev.which === KeyCodes.space) {\n      if (this._buttonElement.current) {\n        this._buttonElement.current.click();\n        ev.preventDefault();\n        ev.stopPropagation();\n      }\n    } else {\n      this._onMenuKeyDown(ev);\n    }\n  };\n\n  private _onMenuKeyDown = (ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\n    if (this.props.disabled) {\n      return;\n    }\n\n    if (this.props.onKeyDown) {\n      this.props.onKeyDown(ev);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    const isUp = ev.which === KeyCodes.up;\n    // eslint-disable-next-line deprecation/deprecation\n    const isDown = ev.which === KeyCodes.down;\n\n    if (!ev.defaultPrevented && this._isValidMenuOpenKey(ev)) {\n      const { onMenuClick } = this.props;\n      if (onMenuClick) {\n        onMenuClick(ev, this.props);\n      }\n\n      this._onToggleMenu(false);\n      ev.preventDefault();\n      ev.stopPropagation();\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (ev.which === KeyCodes.enter || ev.which === KeyCodes.space) {\n      // We manually set the focus visibility to true if opening via Enter or Space to account for the scenario where\n      // a user clicks on the button, closes the menu and then opens it via keyboard. In this scenario our default logic\n      // for setting focus visibility is not triggered since there is no keyboard navigation present beforehand.\n      setFocusVisibility(true, ev.target as Element, this.context?.registeredProviders);\n    }\n\n    if (!(ev.altKey || ev.metaKey) && (isUp || isDown)) {\n      // Suppose a menu, with shouldFocusOnMount: false, is open, and user wants to keyboard to the menu items\n      // We need to re-render the menu with shouldFocusOnMount as true.\n\n      if (!this.state.menuHidden && this.props.menuProps) {\n        const currentShouldFocusOnMount =\n          this._menuShouldFocusOnMount !== undefined\n            ? this._menuShouldFocusOnMount\n            : this.props.menuProps.shouldFocusOnMount;\n        if (!currentShouldFocusOnMount) {\n          ev.preventDefault();\n          ev.stopPropagation();\n          this._menuShouldFocusOnMount = true;\n          this.forceUpdate();\n        }\n      }\n    }\n  };\n\n  private _onTouchStart: () => void = () => {\n    if (\n      this._isSplitButton &&\n      this._splitButtonContainer.current &&\n      !('onpointerdown' in this._splitButtonContainer.current)\n    ) {\n      this._handleTouchAndPointerEvent();\n    }\n  };\n\n  private _onPointerDown(\n    ev: PointerEvent &\n      React.PointerEvent<HTMLAnchorElement | HTMLButtonElement | HTMLDivElement | BaseButton | HTMLSpanElement>,\n  ) {\n    const { onPointerDown } = this.props;\n    if (onPointerDown) {\n      onPointerDown(ev);\n    }\n\n    if (ev.pointerType === 'touch') {\n      this._handleTouchAndPointerEvent();\n\n      ev.preventDefault();\n      ev.stopImmediatePropagation();\n    }\n  }\n\n  private _handleTouchAndPointerEvent() {\n    // If we already have an existing timeout from a previous touch and pointer event\n    // cancel that timeout so we can set a new one.\n    if (this._lastTouchTimeoutId !== undefined) {\n      this._async.clearTimeout(this._lastTouchTimeoutId);\n      this._lastTouchTimeoutId = undefined;\n    }\n    this._processingTouch = true;\n\n    this._lastTouchTimeoutId = this._async.setTimeout(() => {\n      this._processingTouch = false;\n      this._lastTouchTimeoutId = undefined;\n\n      // Touch and pointer events don't focus the button naturally,\n      // so adding an imperative focus call to guarantee this behavior.\n      // Only focus the button if a splitbutton menu is not open\n      if (this.state.menuHidden) {\n        this.focus();\n      }\n    }, TouchIdleDelay);\n  }\n\n  /**\n   * Returns if the user hits a valid keyboard key to open the menu\n   * @param ev - the keyboard event\n   * @returns True if user clicks on custom trigger key if enabled or alt + down arrow if not. False otherwise.\n   */\n  private _isValidMenuOpenKey(\n    ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>,\n  ): boolean {\n    if (this.props.menuTriggerKeyCode) {\n      // eslint-disable-next-line deprecation/deprecation\n      return ev.which === this.props.menuTriggerKeyCode;\n    } else if (this.props.menuProps) {\n      // eslint-disable-next-line deprecation/deprecation\n      return ev.which === KeyCodes.down && (ev.altKey || ev.metaKey);\n    }\n\n    // Note: When enter is pressed, we will let the event continue to propagate\n    // to trigger the onClick event on the button\n    return false;\n  }\n\n  private _onMenuClick = (\n    ev: React.MouseEvent<HTMLDivElement | HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement>,\n  ) => {\n    const { onMenuClick, menuProps } = this.props;\n    if (onMenuClick) {\n      onMenuClick(ev, this.props);\n    }\n\n    // focus on the container by default when the menu is opened with a click event\n    // this differentiates from a keyboard interaction triggering the click event\n    const shouldFocusOnContainer =\n      typeof menuProps?.shouldFocusOnContainer === 'boolean'\n        ? menuProps.shouldFocusOnContainer\n        : (ev.nativeEvent as PointerEvent).pointerType === 'mouse';\n\n    if (!ev.defaultPrevented) {\n      this._onToggleMenu(shouldFocusOnContainer);\n      ev.preventDefault();\n      ev.stopPropagation();\n    }\n  };\n}\n","import { HighContrastSelector, concatStyleSets, getFocusStyle, getHighContrastNoAdjustStyle } from '../../../Styling';\nimport { memoizeFunction } from '../../../Utilities';\nimport type { IButtonStyles } from '../Button.types';\nimport type { ITheme, IStyle } from '../../../Styling';\n\nexport const getStyles = memoizeFunction((theme: ITheme, customStyles?: IButtonStyles): IButtonStyles => {\n  const { effects, palette, semanticColors } = theme;\n\n  const buttonHighContrastFocus = {\n    left: -2,\n    top: -2,\n    bottom: -2,\n    right: -2,\n    border: 'none',\n  };\n\n  const splitButtonDividerBaseStyles: IStyle = {\n    position: 'absolute',\n    width: 1,\n    right: 31,\n    top: 8,\n    bottom: 8,\n  };\n\n  const splitButtonStyles: IButtonStyles = {\n    splitButtonContainer: [\n      getFocusStyle(theme, { highContrastStyle: buttonHighContrastFocus, inset: 2, pointerEvents: 'none' }),\n      {\n        display: 'inline-flex',\n        selectors: {\n          '.ms-Button--default': {\n            borderTopRightRadius: '0',\n            borderBottomRightRadius: '0',\n            borderRight: 'none',\n            flexGrow: '1',\n          },\n          '.ms-Button--primary': {\n            borderTopRightRadius: '0',\n            borderBottomRightRadius: '0',\n            border: 'none',\n            flexGrow: '1',\n\n            selectors: {\n              [HighContrastSelector]: {\n                color: 'WindowText',\n                backgroundColor: 'Window',\n                border: '1px solid WindowText',\n                borderRightWidth: '0',\n                ...getHighContrastNoAdjustStyle(),\n              },\n              ':hover': {\n                border: 'none',\n              },\n              ':active': {\n                border: 'none',\n              },\n            },\n          },\n          '.ms-Button--primary + .ms-Button': {\n            border: 'none',\n            selectors: {\n              [HighContrastSelector]: {\n                border: '1px solid WindowText',\n                borderLeftWidth: '0',\n              },\n            },\n          },\n        },\n      },\n    ],\n    splitButtonContainerHovered: {\n      selectors: {\n        '.ms-Button--primary': {\n          selectors: {\n            [HighContrastSelector]: {\n              color: 'Window',\n              backgroundColor: 'Highlight',\n            },\n          },\n        },\n        '.ms-Button.is-disabled': {\n          color: semanticColors.buttonTextDisabled,\n          selectors: {\n            [HighContrastSelector]: {\n              color: 'GrayText',\n              borderColor: 'GrayText',\n              backgroundColor: 'Window',\n            },\n          },\n        },\n      },\n    },\n    splitButtonContainerChecked: {\n      selectors: {\n        '.ms-Button--primary': {\n          selectors: {\n            [HighContrastSelector]: {\n              color: 'Window',\n              backgroundColor: 'WindowText',\n              ...getHighContrastNoAdjustStyle(),\n            },\n          },\n        },\n      },\n    },\n    splitButtonContainerCheckedHovered: {\n      selectors: {\n        '.ms-Button--primary': {\n          selectors: {\n            [HighContrastSelector]: {\n              color: 'Window',\n              backgroundColor: 'WindowText',\n              ...getHighContrastNoAdjustStyle(),\n            },\n          },\n        },\n      },\n    },\n    splitButtonContainerFocused: {\n      outline: 'none!important',\n    },\n    splitButtonMenuButton: {\n      padding: 6,\n      height: 'auto',\n      boxSizing: 'border-box',\n      borderRadius: 0,\n      borderTopRightRadius: effects.roundedCorner2,\n      borderBottomRightRadius: effects.roundedCorner2,\n      border: `1px solid ${palette.neutralSecondaryAlt}`,\n      borderLeft: 'none',\n      outline: 'transparent',\n      userSelect: 'none',\n      display: 'inline-block',\n      textDecoration: 'none',\n      textAlign: 'center',\n      cursor: 'pointer',\n      verticalAlign: 'top',\n      width: 32,\n      marginLeft: -1,\n      marginTop: 0,\n      marginRight: 0,\n      marginBottom: 0,\n      [HighContrastSelector]: {\n        '.ms-Button-menuIcon': {\n          color: 'WindowText',\n        },\n      },\n    },\n    splitButtonDivider: {\n      ...splitButtonDividerBaseStyles,\n      selectors: {\n        [HighContrastSelector]: {\n          backgroundColor: 'WindowText',\n        },\n      },\n    },\n    splitButtonDividerDisabled: {\n      ...splitButtonDividerBaseStyles,\n      selectors: {\n        [HighContrastSelector]: {\n          backgroundColor: 'GrayText',\n        },\n      },\n    },\n    splitButtonMenuButtonDisabled: {\n      pointerEvents: 'none',\n      border: 'none',\n      selectors: {\n        ':hover': {\n          cursor: 'default',\n        },\n\n        '.ms-Button--primary': {\n          selectors: {\n            [HighContrastSelector]: {\n              color: 'GrayText',\n              borderColor: 'GrayText',\n              backgroundColor: 'Window',\n            },\n          },\n        },\n        '.ms-Button-menuIcon': {\n          selectors: {\n            [HighContrastSelector]: {\n              color: 'GrayText',\n            },\n          },\n        },\n        [HighContrastSelector]: {\n          color: 'GrayText',\n          border: '1px solid GrayText',\n          backgroundColor: 'Window',\n        },\n      },\n    },\n\n    splitButtonFlexContainer: {\n      display: 'flex',\n      height: '100%',\n      flexWrap: 'nowrap',\n      justifyContent: 'center',\n      alignItems: 'center',\n    },\n\n    splitButtonContainerDisabled: {\n      outline: 'none',\n      border: 'none',\n      selectors: {\n        [HighContrastSelector]: {\n          color: 'GrayText',\n          borderColor: 'GrayText',\n          backgroundColor: 'Window',\n          ...getHighContrastNoAdjustStyle(),\n        },\n      },\n    },\n    splitButtonMenuFocused: {\n      ...getFocusStyle(theme, { highContrastStyle: buttonHighContrastFocus, inset: 2 }),\n    },\n  };\n\n  return concatStyleSets(splitButtonStyles, customStyles)!;\n});\n","import { memoizeFunction } from '../../Utilities';\nimport { getGlobalClassNames, mergeStyleSets } from '../../Styling';\nimport type { ITheme } from '../../Styling';\nimport type { IButtonStyles } from './Button.types';\n\nexport interface IButtonClassNames {\n  root?: string;\n  flexContainer?: string;\n  textContainer?: string;\n  icon?: string;\n  label?: string;\n  menuIcon?: string;\n  description?: string;\n  screenReaderText?: string;\n}\n\nexport const ButtonGlobalClassNames = {\n  msButton: 'ms-Button',\n  msButtonHasMenu: 'ms-Button--hasMenu',\n  msButtonIcon: 'ms-Button-icon',\n  msButtonMenuIcon: 'ms-Button-menuIcon',\n  msButtonLabel: 'ms-Button-label',\n  msButtonDescription: 'ms-Button-description',\n  msButtonScreenReaderText: 'ms-Button-screenReaderText',\n  msButtonFlexContainer: 'ms-Button-flexContainer',\n  msButtonTextContainer: 'ms-Button-textContainer',\n};\n\nexport const getBaseButtonClassNames = memoizeFunction(\n  (\n    theme: ITheme,\n    styles: IButtonStyles,\n    className: string,\n    variantClassName: string,\n    iconClassName: string | undefined,\n    menuIconClassName: string | undefined,\n    disabled: boolean,\n    hasMenu: boolean,\n    checked: boolean,\n    expanded: boolean,\n    isSplit: boolean | undefined,\n  ): IButtonClassNames => {\n    const classNames = getGlobalClassNames(ButtonGlobalClassNames, theme || {});\n\n    const isExpanded = expanded && !isSplit;\n    return mergeStyleSets({\n      root: [\n        classNames.msButton,\n        styles.root,\n        variantClassName,\n        checked && ['is-checked', styles.rootChecked],\n        isExpanded && [\n          'is-expanded',\n          styles.rootExpanded,\n          {\n            selectors: {\n              [`:hover .${classNames.msButtonIcon}`]: styles.iconExpandedHovered,\n              // menuIcon falls back to rootExpandedHovered to support original behavior\n              [`:hover .${classNames.msButtonMenuIcon}`]: styles.menuIconExpandedHovered || styles.rootExpandedHovered,\n              ':hover': styles.rootExpandedHovered,\n            },\n          },\n        ],\n        hasMenu && [ButtonGlobalClassNames.msButtonHasMenu, styles.rootHasMenu],\n        disabled && ['is-disabled', styles.rootDisabled],\n        !disabled &&\n          !isExpanded &&\n          !checked && {\n            selectors: {\n              ':hover': styles.rootHovered,\n              [`:hover .${classNames.msButtonLabel}`]: styles.labelHovered,\n              [`:hover .${classNames.msButtonIcon}`]: styles.iconHovered,\n              [`:hover .${classNames.msButtonDescription}`]: styles.descriptionHovered,\n              [`:hover .${classNames.msButtonMenuIcon}`]: styles.menuIconHovered,\n              ':focus': styles.rootFocused,\n              ':active': styles.rootPressed,\n              [`:active .${classNames.msButtonIcon}`]: styles.iconPressed,\n              [`:active .${classNames.msButtonDescription}`]: styles.descriptionPressed,\n              [`:active .${classNames.msButtonMenuIcon}`]: styles.menuIconPressed,\n            },\n          },\n        disabled && checked && [styles.rootCheckedDisabled],\n        !disabled &&\n          checked && {\n            selectors: {\n              ':hover': styles.rootCheckedHovered,\n              ':active': styles.rootCheckedPressed,\n            },\n          },\n        className,\n      ],\n      flexContainer: [classNames.msButtonFlexContainer, styles.flexContainer],\n      textContainer: [classNames.msButtonTextContainer, styles.textContainer],\n      icon: [\n        classNames.msButtonIcon,\n        iconClassName,\n        styles.icon,\n        isExpanded && styles.iconExpanded,\n        checked && styles.iconChecked,\n        disabled && styles.iconDisabled,\n      ],\n      label: [classNames.msButtonLabel, styles.label, checked && styles.labelChecked, disabled && styles.labelDisabled],\n      menuIcon: [\n        classNames.msButtonMenuIcon,\n        menuIconClassName,\n        styles.menuIcon,\n        checked && styles.menuIconChecked,\n        disabled && !isSplit && styles.menuIconDisabled,\n        !disabled &&\n          !isExpanded &&\n          !checked && {\n            selectors: {\n              ':hover': styles.menuIconHovered,\n              ':active': styles.menuIconPressed,\n            },\n          },\n        isExpanded && ['is-expanded', styles.menuIconExpanded],\n      ],\n      description: [\n        classNames.msButtonDescription,\n        styles.description,\n        checked && styles.descriptionChecked,\n        disabled && styles.descriptionDisabled,\n      ],\n      screenReaderText: [classNames.msButtonScreenReaderText, styles.screenReaderText],\n    });\n  },\n);\n","import { warn } from './warn';\nimport type { ISettingsMap } from './warn';\n\n/**\n * Warns when a deprecated props are being used.\n *\n * @public\n * @param componentName - The name of the component being used.\n * @param props - The props passed into the component.\n * @param deprecationMap - The map of deprecations, where key is the prop name and the value is\n * either null or a replacement prop name.\n */\nexport function warnDeprecations<P>(componentName: string, props: P, deprecationMap: ISettingsMap<P>): void {\n  if (process.env.NODE_ENV !== 'production') {\n    for (const propName in deprecationMap) {\n      if (props && propName in props) {\n        let deprecationMessage = `${componentName} property '${propName}' was used but has been deprecated.`;\n        const replacementPropName = deprecationMap[propName];\n        if (replacementPropName) {\n          deprecationMessage += ` Use '${replacementPropName}' instead.`;\n        }\n        warn(deprecationMessage);\n      }\n    }\n  }\n}\n","import * as React from 'react';\nimport { createMemoizer } from '../memoize';\nimport type { IComponentAs, IComponentAsProps } from '../IComponentAs';\n\ninterface IComposeComponentAs {\n  <TProps>(outer: IComponentAs<TProps>): (inner: IComponentAs<TProps>) => IComponentAs<TProps>;\n}\n\nfunction createComposedComponent<TProps>(\n  outer: IComponentAs<TProps>,\n): (inner: IComponentAs<TProps>) => IComponentAs<TProps> {\n  const Outer = outer;\n\n  const outerMemoizer = createMemoizer((inner: IComponentAs<TProps>) => {\n    if (outer === inner) {\n      throw new Error('Attempted to compose a component with itself.');\n    }\n\n    const Inner = inner;\n\n    const innerMemoizer = createMemoizer((defaultRender: IComponentAs<TProps>) => {\n      const InnerWithDefaultRender: React.ComponentType<IComponentAsProps<TProps>> = (\n        innerProps: IComponentAsProps<TProps>,\n      ): JSX.Element => {\n        return <Inner {...innerProps} defaultRender={defaultRender} />;\n      };\n\n      return InnerWithDefaultRender;\n    });\n\n    const OuterWithDefaultRender: React.ComponentType<IComponentAsProps<TProps>> = (\n      outerProps: IComponentAsProps<TProps>,\n    ): JSX.Element => {\n      const { defaultRender } = outerProps;\n\n      return <Outer {...outerProps} defaultRender={defaultRender ? innerMemoizer(defaultRender) : Inner} />;\n    };\n\n    return OuterWithDefaultRender;\n  });\n\n  return outerMemoizer;\n}\n\nconst componentAsMemoizer = createMemoizer<IComposeComponentAs>(createComposedComponent);\n\n/**\n * Composes two components which conform to the `IComponentAs` specification; that is, two\n * components which accept a `defaultRender` prop, which is a 'default' implementation of\n * a component which accepts the same overall props.\n *\n * @public\n */\nexport function composeComponentAs<TProps>(\n  outer: IComponentAs<TProps>,\n  inner: IComponentAs<TProps>,\n): IComponentAs<TProps> {\n  return componentAsMemoizer(outer)(inner);\n}\n","import { warn } from './warn';\n/**\n * Warns when props are required if a condition is met.\n *\n * @public\n * @param componentName - The name of the component being used.\n * @param props - The props passed into the component.\n * @param requiredProps - The name of the props that are required when the condition is met.\n * @param conditionalPropName - The name of the prop that the condition is based on.\n * @param condition - Whether the condition is met.\n */\nexport function warnConditionallyRequiredProps<P>(\n  componentName: string,\n  props: P,\n  requiredProps: string[],\n  conditionalPropName: string,\n  condition: boolean,\n): void {\n  if (condition === true && process.env.NODE_ENV !== 'production') {\n    for (const requiredPropName of requiredProps) {\n      if (!(requiredPropName in props)) {\n        warn(`${componentName} property '${requiredPropName}' is required when '${conditionalPropName}' is used.'`);\n      }\n    }\n  }\n}\n","import { warn } from './warn';\nimport type { ISettingsMap } from './warn';\n\n/**\n * Warns when two props which are mutually exclusive are both being used.\n *\n * @public\n * @param componentName - The name of the component being used.\n * @param props - The props passed into the component.\n * @param exclusiveMap - A map where the key is a parameter, and the value is the other parameter.\n */\nexport function warnMutuallyExclusive<P>(componentName: string, props: P, exclusiveMap: ISettingsMap<P>): void {\n  if (process.env.NODE_ENV !== 'production') {\n    for (const propName in exclusiveMap) {\n      if (props && props[propName] !== undefined) {\n        let propInExclusiveMapValue = exclusiveMap[propName];\n        if (propInExclusiveMapValue && props[propInExclusiveMapValue as keyof P] !== undefined) {\n          warn(\n            `${componentName} property '${propName}' is mutually exclusive with '${exclusiveMap[propName]}'. ` +\n              `Use one or the other.`,\n          );\n        }\n      }\n    }\n  }\n}\n","import * as React from 'react';\nimport { Async } from './Async';\nimport { EventGroup } from './EventGroup';\nimport { warnConditionallyRequiredProps } from './warn/warnConditionallyRequiredProps';\nimport { warnMutuallyExclusive } from './warn/warnMutuallyExclusive';\nimport { warnDeprecations } from './warn/warnDeprecations';\nimport type { IDisposable } from './IDisposable';\nimport type { ISettingsMap } from './warn/warn';\nimport type { IRefObject } from './createRef';\nimport type { IBaseProps } from './BaseComponent.types';\n\n/**\n * BaseComponent class, which provides basic helpers for all components.\n *\n * @public\n * {@docCategory BaseComponent}\n *\n * @deprecated Do not use. We are moving away from class component.\n */\nexport class BaseComponent<TProps extends IBaseProps = {}, TState = {}> extends React.Component<TProps, TState> {\n  /**\n   * @deprecated Use React's error boundaries instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public static onError: (errorMessage?: string, ex?: any) => void;\n\n  /**\n   * Controls whether the componentRef prop will be resolved by this component instance. If you are\n   * implementing a passthrough (higher-order component), you would set this to false and pass through\n   * the props to the inner component, allowing it to resolve the componentRef.\n   */\n  protected _skipComponentRefResolution!: boolean;\n\n  private __async!: Async;\n  private __events!: EventGroup;\n  private __disposables!: IDisposable[] | null;\n  private __resolves!: { [name: string]: (ref: React.ReactNode) => React.ReactNode };\n  private __className!: string;\n\n  /**\n   * BaseComponent constructor\n   * @param props - The props for the component.\n   * @param context - The context for the component.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  constructor(props: TProps, context?: any) {\n    super(props, context);\n\n    // eslint-disable-next-line deprecation/deprecation\n    _makeAllSafe(this, BaseComponent.prototype, [\n      'componentDidMount',\n      'shouldComponentUpdate',\n      'getSnapshotBeforeUpdate',\n      'render',\n      'componentDidUpdate',\n      'componentWillUnmount',\n    ]);\n  }\n\n  /**\n   * When the component receives props, make sure the componentRef is updated.\n   */\n  public componentDidUpdate(prevProps: TProps, prevState: TState): void {\n    this._updateComponentRef(prevProps, this.props);\n  }\n\n  /**\n   * When the component has mounted, update the componentRef.\n   */\n  public componentDidMount(): void {\n    this._setComponentRef(this.props.componentRef, this);\n  }\n\n  /**\n   * If we have disposables, dispose them automatically on unmount.\n   */\n  public componentWillUnmount(): void {\n    this._setComponentRef(this.props.componentRef, null);\n\n    if (this.__disposables) {\n      for (let i = 0, len = this._disposables.length; i < len; i++) {\n        let disposable = this.__disposables[i];\n\n        if (disposable.dispose) {\n          disposable.dispose();\n        }\n      }\n      this.__disposables = null;\n    }\n  }\n\n  /**\n   * Gets the object's class name.\n   */\n  public get className(): string {\n    if (!this.__className) {\n      let funcNameRegex = /function (.{1,})\\(/;\n      let results = funcNameRegex.exec(this.constructor.toString());\n\n      this.__className = results && results.length > 1 ? results[1] : '';\n    }\n\n    return this.__className;\n  }\n\n  /**\n   * Allows subclasses to push things to this._disposables to be auto disposed.\n   */\n  protected get _disposables(): IDisposable[] {\n    if (!this.__disposables) {\n      this.__disposables = [];\n    }\n    return this.__disposables;\n  }\n\n  /**\n   * Gets the async instance associated with the component, created on demand. The async instance gives\n   * subclasses a way to execute setTimeout/setInterval async calls safely, where the callbacks\n   * will be cleared/ignored automatically after unmounting. The helpers within the async object also\n   * preserve the this pointer so that you don't need to \"bind\" the callbacks.\n   */\n  protected get _async(): Async {\n    if (!this.__async) {\n      this.__async = new Async(this);\n      this._disposables.push(this.__async);\n    }\n\n    return this.__async;\n  }\n\n  /**\n   * Gets the event group instance assocaited with the component, created on demand. The event instance\n   * provides on/off methods for listening to DOM (or regular javascript object) events. The event callbacks\n   * will be automatically disconnected after unmounting. The helpers within the events object also\n   * preserve the this reference so that you don't need to \"bind\" the callbacks.\n   */\n  protected get _events(): EventGroup {\n    if (!this.__events) {\n      this.__events = new EventGroup(this);\n      this._disposables.push(this.__events);\n    }\n\n    return this.__events;\n  }\n\n  /**\n   * Helper to return a memoized ref resolver function.\n   * @param refName - Name of the member to assign the ref to.\n   * @returns A function instance keyed from the given refname.\n   * @deprecated Use `createRef` from React.createRef.\n   */\n  protected _resolveRef(refName: string): (ref: React.ReactNode) => React.ReactNode {\n    if (!this.__resolves) {\n      this.__resolves = {};\n    }\n\n    if (!this.__resolves[refName]) {\n      this.__resolves[refName] = (ref: React.ReactNode) => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return ((this as any)[refName] = ref);\n      };\n    }\n\n    return this.__resolves[refName];\n  }\n\n  /**\n   * Updates the componentRef (by calling it with \"this\" when necessary.)\n   */\n  protected _updateComponentRef(currentProps: IBaseProps, newProps: IBaseProps = {}): void {\n    // currentProps *should* always be defined, but verify that just in case a subclass is manually\n    // calling a lifecycle method with no parameters (which has happened) or other odd usage.\n    if (currentProps && newProps && currentProps.componentRef !== newProps.componentRef) {\n      this._setComponentRef(currentProps.componentRef, null);\n      this._setComponentRef(newProps.componentRef, this);\n    }\n  }\n\n  /**\n   * Warns when a deprecated props are being used.\n   *\n   * @param deprecationMap - The map of deprecations, where key is the prop name and the value is\n   * either null or a replacement prop name.\n   */\n  protected _warnDeprecations(deprecationMap: ISettingsMap<TProps>): void {\n    warnDeprecations(this.className, this.props, deprecationMap);\n  }\n\n  /**\n   * Warns when props which are mutually exclusive with each other are both used.\n   *\n   * @param mutuallyExclusiveMap - The map of mutually exclusive props.\n   */\n  protected _warnMutuallyExclusive(mutuallyExclusiveMap: ISettingsMap<TProps>): void {\n    warnMutuallyExclusive(this.className, this.props, mutuallyExclusiveMap);\n  }\n\n  /**\n   * Warns when props are required if a condition is met.\n   *\n   * @param requiredProps - The name of the props that are required when the condition is met.\n   * @param conditionalPropName - The name of the prop that the condition is based on.\n   * @param condition - Whether the condition is met.\n   */\n  protected _warnConditionallyRequiredProps(\n    requiredProps: string[],\n    conditionalPropName: string,\n    condition: boolean,\n  ): void {\n    warnConditionallyRequiredProps(this.className, this.props, requiredProps, conditionalPropName, condition);\n  }\n\n  private _setComponentRef<TRefInterface>(\n    ref: IRefObject<TRefInterface> | undefined,\n    value: TRefInterface | null,\n  ): void {\n    if (!this._skipComponentRefResolution && ref) {\n      if (typeof ref === 'function') {\n        ref(value);\n      }\n\n      if (typeof ref === 'object') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (ref as any).current = value;\n      }\n    }\n  }\n}\n\n/**\n * Helper to override a given method with a wrapper method that can try/catch the original, but also\n * ensures that the BaseComponent's methods are called before the subclass's. This ensures that\n * componentWillUnmount in the base is called and that things in the _disposables array are disposed.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction _makeAllSafe(obj: BaseComponent<{}, {}>, prototype: Object, methodNames: string[]): void {\n  for (let i = 0, len = methodNames.length; i < len; i++) {\n    _makeSafe(obj, prototype, methodNames[i]);\n  }\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction _makeSafe(obj: BaseComponent<{}, {}>, prototype: Object, methodName: string): void {\n  /* eslint-disable @typescript-eslint/no-explicit-any */\n  let classMethod = (obj as any)[methodName];\n  let prototypeMethod = (prototype as any)[methodName];\n\n  if (classMethod || prototypeMethod) {\n    (obj as any)[methodName] = function (...args: any[]): any {\n      /* eslint-enable @typescript-eslint/no-explicit-any */\n      let retVal;\n\n      if (prototypeMethod) {\n        retVal = prototypeMethod.apply(this, args);\n      }\n      if (classMethod !== prototypeMethod) {\n        retVal = classMethod.apply(this, args);\n      }\n\n      return retVal;\n    };\n  }\n}\n\n/**\n * Simple constant function for returning null, used to render empty templates in JSX.\n *\n * @public\n */\nexport function nullRender(): JSX.Element | null {\n  return null;\n}\n","import * as React from 'react';\nimport { Customizations } from './Customizations';\nimport { hoistStatics } from '../hoistStatics';\nimport { CustomizerContext } from './CustomizerContext';\nimport { concatStyleSets } from '@fluentui/merge-styles';\nimport type { ICustomizerContext } from './CustomizerContext';\n\nexport function customizable(\n  scope: string,\n  fields: string[],\n  concatStyles?: boolean,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): <P>(ComposedComponent: React.ComponentType<P>) => any {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function customizableFactory<P>(ComposedComponent: React.ComponentType<P>): any {\n    const resultClass = class ComponentWithInjectedProps extends React.Component<P, {}> {\n      public static displayName: string = 'Customized' + scope;\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      private _styleCache: { default?: any; component?: any; merged?: any } = {};\n\n      constructor(props: P) {\n        super(props);\n\n        this._onSettingChanged = this._onSettingChanged.bind(this);\n      }\n\n      public componentDidMount(): void {\n        Customizations.observe(this._onSettingChanged);\n      }\n\n      public componentWillUnmount(): void {\n        Customizations.unobserve(this._onSettingChanged);\n      }\n\n      public render(): JSX.Element {\n        return (\n          <CustomizerContext.Consumer>\n            {(context: ICustomizerContext) => {\n              const defaultProps = Customizations.getSettings(fields, scope, context.customizations);\n\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              const componentProps = this.props as any;\n\n              // If defaultProps.styles is a function, evaluate it before calling concatStyleSets\n              if (defaultProps.styles && typeof defaultProps.styles === 'function') {\n                defaultProps.styles = defaultProps.styles({ ...defaultProps, ...componentProps });\n              }\n\n              // If concatStyles is true and custom styles have been defined compute those styles\n              if (concatStyles && defaultProps.styles) {\n                if (\n                  this._styleCache.default !== defaultProps.styles ||\n                  this._styleCache.component !== componentProps.styles\n                ) {\n                  const mergedStyles = concatStyleSets(defaultProps.styles, componentProps.styles);\n                  this._styleCache.default = defaultProps.styles;\n                  this._styleCache.component = componentProps.styles;\n                  this._styleCache.merged = mergedStyles;\n                }\n\n                return <ComposedComponent {...defaultProps} {...componentProps} styles={this._styleCache.merged} />;\n              }\n\n              return <ComposedComponent {...defaultProps} {...componentProps} />;\n            }}\n          </CustomizerContext.Consumer>\n        );\n      }\n\n      private _onSettingChanged(): void {\n        this.forceUpdate();\n      }\n    };\n\n    return hoistStatics(ComposedComponent, resultClass);\n  };\n}\n"],"sourceRoot":""}