{"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":""}