{"version":3,"sources":["jsdelivr-header.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/set-version/src/setVersion.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/set-version/src/index.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/src/version.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/Async.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/Stylesheet.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/getVendorSettings.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/lib/src/transforms/prefixRules.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/lib/src/transforms/provideUnits.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/lib/src/transforms/rtlifyRules.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/styleToClassName.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/lib/src/transforms/kebabRules.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/extractStyleParts.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/mergeStyles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/concatStyleSets.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/mergeStyleSets.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/fontFace.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/keyframes.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/merge-styles/src/version.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/object.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/EventGroup.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/scroll.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/getDocument.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/getRect.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/warn/warn.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/warn/warnMutuallyExclusive.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/warn/warnDeprecations.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/getWindow.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/KeyCodes.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/keyboard.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/initializeFocusRects.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/BaseComponent.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/initializeDir.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/warn/warnConditionallyRequiredProps.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/DelayedRender.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/GlobalSettings.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/Rectangle.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/appendFunction.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/aria.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/array.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/autobind.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/classNamesFunction.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/createRef.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/css.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/customizations/Customizations.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/customizations/CustomizerContext.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/customizations/mergeSettings.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/customizations/Customizer.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/customizations/mergeCustomizations.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/hoistStatics.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/customizations/customizable.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/getParent.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/getVirtualParent.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/isVirtualElement.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/elementContains.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/findElementRecursive.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/on.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/setPortalAttribute.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/portalContainsElement.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/raiseClick.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/extendComponent.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/focus.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/elementContainsAttribute.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/hoist.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/initializeComponentRef.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/initials.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/language.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/memoize.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/merge.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/mobileDetector.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/osDetector.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/properties.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/rtl.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/sessionStorage.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/safeRequestAnimationFrame.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/string.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/styled.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Icon/Icon.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Image/Image.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/version.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Image/Image.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/utilities/buildClassMap.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/utilities/icons.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/AnimationStyles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/DefaultPalette.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/fonts.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/DefaultFontStyles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/localStorage.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/CommonStyles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/zIndexes.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/getFocusStyle.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/hiddenContentStyle.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/getGlobalClassNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/DefaultSpacing.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@microsoft/load-themed-styles/src/index.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/DefaultEffects.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/theme.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/styles/GeneralStyles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/classNames/AnimationClassNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/classNames/ColorClassNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/lib/src/classNames/FontClassNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/styling/src/version.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Image/Image.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenu.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Image/Image.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Icon/Icon.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Icon/Icon.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Icon/Icon.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/src/common/DirectionalHint.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/FocusZone/FocusZone.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/FocusZone/FocusZone.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/contextualMenu/contextualMenuUtility.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/decorators/BaseDecorator.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/decorators/withResponsiveMode.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/positioning/positioning.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/positioning/positioning.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Popup/Popup.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Callout/CalloutContent.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Callout/CalloutContent.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Callout/CalloutContent.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Fabric/Fabric.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Fabric/Fabric.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Fabric/Fabric.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Layer/Layer.notification.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Layer/Layer.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/keytips/KeytipConstants.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/lib/src/dom/setVirtualParent.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Layer/Layer.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Layer/Layer.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Callout/Callout.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Layer/LayerHost.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/FocusTrapZone/FocusTrapZone.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenuItem.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Divider/VerticalDivider.classNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenu.cnstyles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenu.classNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenuItem.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ContextualMenu/src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuItemWrapper.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/keytips/KeytipManager.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/keytips/KeytipUtils.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/KeytipData/KeytipData.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ContextualMenu/src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ContextualMenu/src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Divider/VerticalDivider.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ContextualMenu/src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenu.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Button/Button.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenu.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ContextualMenu/ContextualMenu.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Button/BaseButton.classNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/SplitButton/SplitButton.classNames.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Button/BaseButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Button/BaseButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/SplitButton/SplitButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Button/ButtonThemes.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/DefaultButton/DefaultButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/DefaultButton/DefaultButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/ActionButton/ActionButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/ActionButton/ActionButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/CompoundButton/CompoundButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/CompoundButton/CompoundButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/IconButton/IconButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/IconButton/IconButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/PrimaryButton/PrimaryButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/CommandBarButton/CommandBarButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Button/Button.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/CommandBarButton/CommandBarButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/CommandButton/CommandButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/MessageBarButton/MessageBarButton.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/SearchBox/SearchBox.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Button/src/components/Button/MessageBarButton/MessageBarButton.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/SearchBox/SearchBox.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/selection/interfaces.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/SearchBox/SearchBox.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/selection/Selection.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/selection/SelectionZone.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupedList.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsList.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupSpacer.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupedList.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsRow.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Spinner/Spinner.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupHeader.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Check/Check.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Check/Check.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Check/Check.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Spinner/Spinner.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Spinner/Spinner.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Spinner/Spinner.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupHeader.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupHeader.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupShowAll.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Link/Link.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Link/Link.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Link/Link.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupShowAll.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupShowAll.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupFooter.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupFooter.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupFooter.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/List/List.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/List/List.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupedListSection.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsHeader.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupedList.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/GroupedList/GroupedList.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsHeader.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsRowCheck.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsRowCheck.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/dragdrop/DragDropHelper.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsColumn.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsColumn.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsColumn.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsHeader.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsHeader.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsRowFields.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsRow.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsRow.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/decorators/withViewport.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/groupedList/GroupedListUtility.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsList.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsList.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DetailsList/DetailsList.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/react-is/cjs/react-is.production.min.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/react-is/cjs/react-is.development.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/react-is/index.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/object-assign/index.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/prop-types/lib/ReactPropTypesSecret.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/prop-types/checkPropTypes.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/prop-types/factoryWithTypeCheckers.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/prop-types/factoryWithThrowingShims.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/prop-types/index.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Sticky/Sticky.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ScrollablePane/ScrollablePane.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ScrollablePane/ScrollablePane.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ScrollablePane/ScrollablePane.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Sticky/Sticky.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/Tooltip.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/Tooltip.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/TooltipHost.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/Tooltip.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/Tooltip.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/TooltipHost.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/overflow.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/TooltipHost.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Tooltip/TooltipHost.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/style-inject/dist/style-inject.es.js","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/List/List.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_array-includes.js","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/List/List.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/List/List.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_global.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_has.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_cof.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_is-object.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_an-object.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_a-function.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_ctx.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-pie.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_property-desc.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iobject.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_defined.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_to-iobject.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_to-primitive.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_fails.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_descriptors.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_dom-create.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_ie8-dom-define.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-gopd.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_set-proto.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_inherit-if-required.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_to-integer.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_to-length.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_to-absolute-index.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_core.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_shared.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_uid.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_shared-key.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-keys-internal.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_enum-bug-keys.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-gopn.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-dp.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_hide.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_function-to-string.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_redefine.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_export.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_string-ws.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_string-trim.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-keys.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-dps.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_html.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-create.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.number.constructor.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_wks.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_add-to-unscopables.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iter-step.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iterators.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_set-to-string-tag.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iter-create.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_to-object.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_object-gpo.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iter-define.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.array.iterator.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/web.dom.iterable.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_classof.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.object.to-string.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_string-at.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.string.iterator.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_redefine-all.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_an-instance.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iter-call.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_is-array-iter.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/core.get-iterator-method.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_for-of.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_set-species.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_meta.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_validate-collection.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_collection-strong.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_iter-detect.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.map.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Label/Label.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_collection.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Label/Label.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Label/Label.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/TextField/TextField.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/TextField/TextField.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/TextField/TextField.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/TextField/src/components/TextField/MaskedTextField/inputMask.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/TextField/src/components/TextField/MaskedTextField/MaskedTextField.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/selectableOption/SelectableOption.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Checkbox/Checkbox.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Checkbox/Checkbox.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Checkbox/Checkbox.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Dropdown/src/components/Dropdown/utilities/DropdownSizePosCache.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Panel/Panel.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Overlay/Overlay.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Overlay/Overlay.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Overlay/Overlay.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Panel/Panel.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/dateValues/DateValues.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Panel/Panel.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Panel/Panel.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dropdown/Dropdown.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dropdown/Dropdown.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dropdown/Dropdown.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/dateValues/TimeConstants.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/utilities/src/utilities/dateMath/DateMath.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/assertNever.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Calendar/Calendar.scss.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Persona/Persona.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Persona/PersonaConsts.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Calendar/CalendarDay.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Calendar/CalendarYear.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Calendar/CalendarMonth.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Calendar/Calendar.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DatePicker/DatePicker.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DatePicker/DatePicker.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/DatePicker/DatePicker.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Persona/src/components/Persona/PersonaPresence/PersonaPresence.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Persona/src/components/Persona/PersonaPresence/PersonaPresence.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Persona/src/components/Persona/PersonaPresence/PersonaPresence.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Persona/PersonaInitialsColor.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Persona/src/components/Persona/PersonaCoin/PersonaCoin.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Persona/src/components/Persona/PersonaCoin/PersonaCoin.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Persona/src/components/Persona/PersonaCoin/PersonaCoin.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Persona/Persona.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Persona/Persona.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Persona/Persona.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/utilities/src/Context.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogContent.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/Title/Title.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/OverflowSet/OverflowSet.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/OverflowSet/OverflowSet.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/OverflowSet/OverflowSet.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ResizeGroup/ResizeGroup.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ResizeGroup/ResizeGroup.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/CommandBar/CommandBar.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/CommandBar/CommandBar.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/CommandBar/CommandBar.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Modal/Modal.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Modal/Modal.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Modal/Modal.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogFooter.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogFooter.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogFooter.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogContent.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogContent.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/DialogContent.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/Dialog.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/Dialog.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Dialog/Dialog.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/Utils/Utils.types.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/Utils/TemplateUtils.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateForm/TemplateForm.types.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateForm/TemplateForm.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateForm/TemplateForm.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateForm/TemplateForm.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/SearchBox/SearchBox.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/SearchBox/SearchBox.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/SearchBox/SearchBox.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_is-array.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_array-species-constructor.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_array-species-create.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_array-methods.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.array.find.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.array.find-index.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ChoiceGroup/src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ChoiceGroup/src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/ChoiceGroup/src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ChoiceGroup/ChoiceGroup.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ChoiceGroup/ChoiceGroup.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/ChoiceGroup/ChoiceGroup.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/MovableOptionsList/MovableOptionsList.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/MessageBar/MessageBar.types.ts","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/MovableOptionsList/MovableOptionsList.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/MovableOptionsList/MovableOptionsList.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/Utils/Utils.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/MessageBar/MessageBar.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/MessageBar/MessageBar.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/MessageBar/MessageBar.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateAdminForm/TemplateAdminForm.types.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateAdminForm/TemplateAdminForm.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_regexp-exec.js","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateAdminForm/TemplateAdminForm.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/TemplateAdminForm/TemplateAdminForm.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_is-regexp.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_species-constructor.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_advance-string-index.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_regexp-exec-abstract.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_flags.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.regexp.exec.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/_fix-re-wks.js","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/core-js/modules/es6.regexp.split.js","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/QuickButtonForm/QuickButtonForm.types.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/QuickButtonForm/QuickButtonForm.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/QuickButtonForm/QuickButtonForm.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/QuickButtonForm/QuickButtonForm.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Toggle/Toggle.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Toggle/Toggle.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Toggle/Toggle.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/MenusAdminForm/MenusAdminForm.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/MenusAdminForm/MenusAdminForm.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/MenusAdminForm/MenusAdminForm.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/foundation/src/utilities.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/foundation/src/slots.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/foundation/src/createComponent.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/foundation/src/version.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Stack/src/components/Stack/StackItem/StackItem.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/Stack/src/components/Stack/StackItem/StackItem.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Stack/StackUtils.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Stack/Stack.styles.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/office-ui-fabric-react/lib/components/src/components/Stack/Stack.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/DrawerGroups/DrawerGroups.base.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/DrawerGroups/DrawerGroups.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/components/DrawerGroups/DrawerGroups.styles.tsx","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-0.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-1.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-2.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-3.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-4.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-5.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-6.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-7.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-8.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-9.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-10.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-11.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-12.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-13.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-14.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-15.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/fabric-icons-16.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/version.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/index.ts","/npm/enchoice-fabric-react-lib@1.0.2/node_modules/@uifabric/icons/src/iconAliases.ts","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/Utils/Mime.types.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/Utils/ToastUtils.tsx","/npm/enchoice-fabric-react-lib@1.0.2/src/lib/Utils/ExportUtils.tsx"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,+5BCJA,IAAM,EAA4C,GAClD,SAAA,EAA2B,EAAqB,GAC9C,GAAsB,oBAAX,OAAwB,CAEjC,IAAM,EAAa,OAAe,aAAgB,OAAe,cAAgB,GAGjF,IAAK,EAAS,KAAiB,EAAc,GAC3C,EAAc,GAAe,GACX,EAAS,GAAe,EAAS,IAAgB,IAC1D,KAAK,E,CAGpB,CCZA,EAAW,wBAAyB,SCAlC,EAAW,yBAA0B,WCSvC,IAAA,EAAA,WAWE,SAAA,EAAY,EAAiB,GAVrB,KAAA,YAAgD,KAChD,KAAA,cAAkD,KAClD,KAAA,aAAiD,KACjD,KAAA,mBAAuD,KAQ7D,KAAK,aAAc,EACnB,KAAK,QAAU,GAAU,KACzB,KAAK,gBAAkB,EACvB,KAAK,MAAQ,W,EA6cjB,OArcS,EAAA,UAAA,QAAP,WACE,IAAI,EAMJ,GAJA,KAAK,aAAc,EACnB,KAAK,QAAU,KAGX,KAAK,YAAa,CACpB,IAAK,KAAM,KAAK,YACV,KAAK,YAAY,eAAe,IAClC,KAAK,aAAa,SAAS,EAAI,KAInC,KAAK,YAAc,I,CAIrB,GAAI,KAAK,cAAe,CACtB,IAAK,KAAM,KAAK,cACV,KAAK,cAAc,eAAe,IACpC,KAAK,eAAe,SAAS,EAAI,KAIrC,KAAK,cAAgB,I,CAIvB,GAAI,KAAK,aAAc,CACrB,IAAK,KAAM,KAAK,aACV,KAAK,aAAa,eAAe,IACnC,KAAK,cAAc,SAAS,EAAI,KAGpC,KAAK,aAAe,I,CAItB,GAAI,KAAK,mBAAoB,CAC3B,IAAK,KAAM,KAAK,mBACV,KAAK,mBAAmB,eAAe,IACzC,KAAK,qBAAqB,SAAS,EAAI,KAI3C,KAAK,mBAAqB,I,GAUvB,EAAA,UAAA,WAAP,SAAkB,EAAsB,GAAxC,IAAA,EAAA,KACM,EAAY,EA4BhB,OA1BK,KAAK,cACH,KAAK,cACR,KAAK,YAAc,IAIrB,EAAY,YAAW,WAGrB,IAEM,EAAK,oBACA,EAAK,YAAY,GAE1B,EAAS,MAAM,EAAK,Q,CACpB,MAAO,GACH,EAAK,iBACP,EAAK,gBAAgB,E,IAGxB,GAGH,KAAK,YAAY,IAAa,GAGzB,C,EAOF,EAAA,UAAA,aAAP,SAAoB,GACd,KAAK,aAAe,KAAK,YAAY,KAEvC,aAAa,UACN,KAAK,YAAY,G,EAUrB,EAAA,UAAA,aAAP,SAAoB,GAApB,IAAA,EAAA,KACM,EAAc,EAElB,IAAK,KAAK,YAAa,CAChB,KAAK,gBACR,KAAK,cAAgB,IAIvB,IAAI,EAAuB,WAGzB,IAEM,EAAK,sBACA,EAAK,cAAc,GAE5B,EAAS,MAAM,EAAK,Q,CACpB,MAAO,GACP,EAAK,UAAU,E,GAInB,EAAc,OAAO,aAAe,OAAO,aAAa,GAAwB,OAAO,WAAW,EAAsB,GAGxH,KAAK,cAAc,IAAe,C,CAGpC,OAAO,C,EAOF,EAAA,UAAA,eAAP,SAAsB,GAChB,KAAK,eAAiB,KAAK,cAAc,KAE3C,OAAO,eAAiB,OAAO,eAAe,GAAM,OAAO,aAAa,UACjE,KAAK,cAAc,G,EAWvB,EAAA,UAAA,YAAP,SAAmB,EAAsB,GAAzC,IAAA,EAAA,KACM,EAAa,EAqBjB,OAnBK,KAAK,cACH,KAAK,eACR,KAAK,aAAe,IAItB,EAAa,aAAY,WAEvB,IACE,EAAS,MAAM,EAAK,Q,CACpB,MAAO,GACP,EAAK,UAAU,E,IAEhB,GAGH,KAAK,aAAa,IAAc,GAG3B,C,EAOF,EAAA,UAAA,cAAP,SAAqB,GACf,KAAK,cAAgB,KAAK,aAAa,KAEzC,cAAc,UACP,KAAK,aAAa,G,EAmBtB,EAAA,UAAA,SAAP,SACE,EACA,EACA,GAHF,IAAA,EAAA,KAQE,GAAI,KAAK,YACP,OAAO,KAAK,MAGd,IAII,EAEA,EANA,EAAS,GAAQ,EACjB,GAAU,EACV,GAAW,EACX,EAAkB,EAIlB,EAA2B,KAE3B,GAAsC,kBAApB,EAAQ,UAC5B,EAAU,EAAQ,SAGhB,GAAuC,kBAArB,EAAQ,WAC5B,EAAW,EAAQ,UAGrB,IAAI,EAAW,SAAC,GACd,IAAI,GAAM,IAAI,MAAO,UACjB,EAAQ,EAAM,EACd,EAAa,EAAU,EAAS,EAAQ,EAY5C,OAXI,GAAS,KAAY,GAAY,IACnC,EAAkB,EACd,IACF,EAAK,aAAa,GAClB,EAAY,MAEd,EAAa,EAAK,MAAM,EAAK,QAAS,IACf,OAAd,GAAsB,IAC/B,EAAY,EAAK,WAAW,EAAU,IAGjC,C,EAST,OAL8B,W,IAAC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAE7B,OADA,EAAW,EACJ,GAAS,E,GAqBb,EAAA,UAAA,SAAP,SACE,EACA,EACA,GAHF,IAAA,EAAA,KASE,GAAI,KAAK,YAAa,CACpB,IAAI,EAAY,WAEf,EAUD,OARA,EAAa,OAAS,W,EAItB,EAAa,MAAK,WAAU,WAAI,EAEhC,EAAa,QAAU,WAAM,QAAK,EAE3B,C,CAGT,IAMI,EAEA,EARA,EAAS,GAAQ,EACjB,GAAU,EACV,GAAW,EACX,EAAyB,KACzB,EAAe,EACf,GAAkB,IAAI,MAAO,UAI7B,EAA2B,KAE3B,GAAsC,kBAApB,EAAQ,UAC5B,EAAU,EAAQ,SAGhB,GAAuC,kBAArB,EAAQ,WAC5B,EAAW,EAAQ,UAGjB,GAAsC,iBAApB,EAAQ,UAAyB,MAAM,EAAQ,WACnE,EAAU,EAAQ,SAGpB,IAAI,EAAe,SAAC,GACd,IACF,EAAK,aAAa,GAClB,EAAY,MAEd,EAAkB,C,EAGhB,EAAiB,SAAC,GACpB,EAAa,GACb,EAAa,EAAK,MAAM,EAAK,QAAS,E,EAGpC,EAAW,SAAC,GACd,IAAI,GAAM,IAAI,MAAO,UACjB,GAAqB,EACrB,IACE,GAAW,EAAM,GAAgB,IACnC,GAAqB,GAEvB,EAAe,GAEjB,IAAI,EAAQ,EAAM,EACd,EAAa,EAAS,EACtB,EAAe,EAAM,EACrB,GAAiB,EAiBrB,OAfgB,OAAZ,IAEE,GAAgB,GAAW,EAC7B,GAAiB,EAEjB,EAAa,KAAK,IAAI,EAAY,EAAU,IAI5C,GAAS,GAAU,GAAkB,EACvC,EAAe,GACS,OAAd,GAAuB,IAAa,IAC9C,EAAY,EAAK,WAAW,EAAU,IAGjC,C,EAGL,EAAU,WACZ,QAAS,C,EAmBP,EAAc,W,IAAiC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAEjD,OADA,EAAW,EACJ,GAAS,EACjB,EAMD,OAJA,EAAe,OArBF,WACP,KAEF,GAAa,IAAI,MAAO,U,EAmB5B,EAAe,MAfH,WAKV,OAJI,KACF,GAAe,IAAI,MAAO,WAGrB,C,EAWT,EAAe,QAAU,EAElB,C,EAGF,EAAA,UAAA,sBAAP,SAA6B,GAA7B,IAAA,EAAA,KACM,EAAmB,EAEvB,IAAK,KAAK,YAAa,CAChB,KAAK,qBACR,KAAK,mBAAqB,IAI5B,IAAI,EAAyB,WAC3B,IAEM,EAAK,2BACA,EAAK,mBAAmB,GAGjC,EAAS,MAAM,EAAK,Q,CACpB,MAAO,GACP,EAAK,UAAU,E,GAInB,EAAmB,OAAO,sBACtB,OAAO,sBAAsB,GAC7B,OAAO,WAAW,EAAwB,GAG9C,KAAK,mBAAmB,IAAoB,C,CAG9C,OAAO,C,EAGF,EAAA,UAAA,qBAAP,SAA4B,GACtB,KAAK,oBAAsB,KAAK,mBAAmB,KAErD,OAAO,qBAAuB,OAAO,qBAAqB,GAAM,OAAO,aAAa,UAE7E,KAAK,mBAAmB,G,EAKzB,EAAA,UAAA,UAAV,SAAoB,GACd,KAAK,iBACP,KAAK,gBAAgB,E,EAG3B,CAAA,CA5dA,G;;;;;;;;;;;;;;qgCCwDI,EC7DA,EDLS,EAIL,EAJK,EASC,EATD,EAcE,EAgDT,EAAqB,iBAGrB,EAA4C,GAUlD,EAAA,WAgCE,SAAA,EAAY,GA7BJ,KAAA,OAAmB,GACnB,KAAA,gBAA4B,GAE5B,KAAA,eAA2B,GAC3B,KAAA,SAAW,EACX,KAAA,gBAA6C,GAC7C,KAAA,kBAAoC,GAGpC,KAAA,iBAAsE,GAqB5E,KAAK,QAAO,EAAA,CACV,cAAe,EACf,cAAe,MACf,eAAW,EACX,iBAAa,GACV,E,CA8KT,OAnMgB,EAAA,YAAd,WAEE,IAAM,EAAgC,oBAAX,OAAyB,OAAS,EAG7D,KAFA,EAAc,EAAO,KAEA,EAAY,mBAAqB,EAAY,kBAAkB,gBAAkB,SAAW,CAE/G,IAAM,EAAgB,GAAU,EAAqB,cAAM,GAE3D,EAAc,EAAO,GAAsB,IAAI,EAAW,EAAa,Y,CAGzE,OAAO,C,EAgBF,EAAA,UAAA,UAAP,SAAiB,GACf,KAAK,QAAO,EAAA,GACP,KAAK,QACL,E,EASA,EAAA,UAAA,QAAP,SAAe,GACb,KAAK,kBAAkB,KAAK,E,EAQvB,EAAA,UAAA,aAAP,SAAoB,GACV,IAAA,EAAA,KAAA,QAAA,UAGR,OAAU,EAAY,EAAY,IAAM,KAFzB,GAAe,KAAK,QAAQ,eAEQ,IAAI,KAAK,U,EAOvD,EAAA,UAAA,eAAP,SAAsB,EAAmB,EAAa,EAAgB,GACpE,KAAK,gBAAgB,GAAO,EAC5B,KAAK,iBAAiB,GAAa,CACjC,KAAI,EACJ,MAAK,E,EAQF,EAAA,UAAA,iBAAP,SAAwB,GACtB,OAAO,KAAK,gBAAgB,E,EAOvB,EAAA,UAAA,kBAAP,SAAyB,GACvB,IAAM,EAAQ,KAAK,iBAAiB,GAEpC,OAAO,GAAS,EAAM,I,EAOjB,EAAA,UAAA,2BAAP,SAAkC,GAChC,IAAM,EAAQ,KAAK,iBAAiB,GAEpC,OAAO,GAAS,EAAM,K,EAOjB,EAAA,UAAA,WAAP,SAAkB,EAAc,GACtB,IACF,EADE,KAAA,QAAA,gBAC0B,EAAqB,KAAK,wBAAqB,EAMjF,GAJI,GACF,KAAK,gBAAgB,KAAK,GAGxB,EACF,OAAQ,KAAK,QAAQ,eACnB,KAAK,EACK,IAAA,EAAA,EAAA,MAER,IACG,EAAwB,WAAW,EAAO,EAAwB,SAAS,O,CAC5E,MAAO,G,CAKT,MAEF,KAAK,EACH,EAAQ,YAAY,SAAS,eAAe,SAIhD,KAAK,OAAO,KAAK,GAGf,KAAK,QAAQ,cACf,KAAK,QAAQ,aAAa,E,EAQvB,EAAA,UAAA,SAAP,SAAgB,GACd,OAAQ,EAAwB,KAAK,gBAAgB,KAAK,IAAM,IAAM,KAAK,OAAO,KAAK,IAAM,KAAK,eAAe,KAAK,G,EAOjH,EAAA,UAAA,MAAP,WACE,KAAK,OAAS,GACd,KAAK,eAAiB,GACtB,KAAK,SAAW,EAChB,KAAK,iBAAmB,GACxB,KAAK,gBAAkB,GAEvB,KAAK,kBAAkB,SAAQ,SAAC,GAAyB,OAAA,GAAU,G,EAI9D,EAAA,UAAA,UAAP,WACE,KAAK,gBAAkB,E,EAGjB,EAAA,UAAA,iBAAR,eAAA,EAAA,KASE,OARK,KAAK,eAAqC,oBAAb,WAChC,KAAK,cAAgB,KAAK,sBAG1B,OAAO,uBAAsB,WAC3B,EAAK,mBAAgB,C,KAGlB,KAAK,a,EAGN,EAAA,UAAA,oBAAR,WACE,IAAM,EAAe,SAAS,cAAc,SAE5C,EAAa,aAAa,oBAAqB,QAC/C,EAAa,KAAO,WAEZ,IAAA,EAAA,KAAA,QAAA,YAaR,OAZI,GACE,EAAY,OACd,EAAa,aAAa,QAAS,EAAY,OAG/C,KAAK,mBAAqB,KAAK,kBAAkB,mBACnD,SAAS,KAAM,aAAa,EAAc,KAAK,kBAAkB,oBAEjE,SAAS,KAAM,YAAY,GAE7B,KAAK,kBAAoB,EAElB,C,EAEX,CAAA,CApNA,GE3EA,IAAM,EAA6C,CACjD,cAAe,GAGjB,SAAA,EAA4B,EAAgC,GAC1D,IAAM,EDER,WACE,IAAK,EAAiB,CACpB,IAAM,EAA0B,oBAAb,SAA2B,cAAW,EACnD,EAA2B,oBAAd,UAA4B,eAAY,EACrD,EAAY,EAAM,EAAI,UAAU,mBAAgB,EAUpD,EARG,EAQe,CAChB,YAAa,KAAO,qBAAsB,EAAI,gBAAgB,QAC9D,SAAU,GAAa,EAAU,QAAQ,YAAc,GACvD,WAAY,GAAa,EAAU,QAAQ,UAAY,GACvD,QAAS,IAAQ,WAAW,KAAK,EAAI,aAAc,aAAa,KAAK,UAAU,aAX/D,CAChB,UAAU,EACV,OAAO,EACP,SAAS,EACT,MAAM,E,CAYZ,OAAO,CACT,CC1ByB,GAEjB,EAAO,EAAU,GAEvB,GAAI,EAAgB,GAAO,CACzB,IAAM,EAAQ,EAAU,EAAQ,GAE5B,EAAgB,KACd,EAAe,UACjB,EAAU,KAAK,WAAa,EAAM,GAEhC,EAAe,OACjB,EAAU,KAAK,QAAU,EAAM,GAE7B,EAAe,MACjB,EAAU,KAAK,OAAS,EAAM,GAE5B,EAAe,SACjB,EAAU,KAAK,MAAQ,EAAM,G,CAIrC,CC7BA,IAAM,EAAyB,CAC7B,eACA,cACA,aACA,OACA,YACA,cACA,eACA,UACA,QACA,UACA,QAGF,SAAA,EAA6B,EAAgC,GAC3D,IAAM,EAAO,EAAU,GACjB,EAAQ,EAAU,EAAQ,GAEhC,GAAqB,iBAAV,EAAoB,CAC7B,IAAM,GAA2D,IAApD,EAAuB,QAAQ,GAAyB,KAAO,GAE5E,EAAU,EAAQ,GAAK,GAAG,EAAQ,C,CAEtC,CCrBA,I,EAAM,EAAO,OACP,EAAQ,QAER,IAAiB,EAAA,IACpB,GAAO,EACR,EAAC,GAAQ,E,GAEL,EAAgD,CACpD,WAAY,WACZ,YAAa,YACb,YAAa,aAGX,EAAO,IAKX,SAAA,EAAuB,GACjB,IAAS,IACX,EAAW,cAAc,YACzB,EAAO,EAEX,CAKA,SAAA,IAIE,YAHa,IAAT,IACF,EAA2B,oBAAb,YAA8B,SAAS,iBAAoE,QAAjD,SAAS,gBAAgB,aAAa,QAEzG,CACT,CAMA,SAAA,EAA4B,EAAgC,GAC1D,GAAI,IAAU,CACZ,IAAM,EAAO,EAAU,GAEvB,IAAK,EACH,OAGF,IAAM,EAAQ,EAAU,EAAQ,GAEhC,GAAqB,iBAAV,GAAsB,EAAM,QA/C3B,YA+C+C,EACzD,EAAU,EAAQ,GAAK,EAAM,QAAQ,6CAA8C,SAC9E,GAAI,EAAK,QAAQ,IAAS,EAC/B,EAAU,GAAS,EAAK,QAAQ,EAAM,QACjC,GAAI,EAAK,QAAQ,IAAU,EAChC,EAAU,GAAS,EAAK,QAAQ,EAAO,QAClC,GAAI,OAAO,GAAO,QAAQ,IAAS,EACxC,EAAU,EAAQ,GAAK,EAAM,QAAQ,EAAM,QACtC,GAAI,OAAO,GAAO,QAAQ,IAAU,EACzC,EAAU,EAAQ,GAAK,EAAM,QAAQ,EAAO,QACvC,GAAI,EAAkB,GAC3B,EAAU,GAAS,EAAkB,QAChC,GAAI,EAAmB,GAC5B,EAAU,EAAQ,GAAK,EAAmB,QAE1C,OAAQ,GACN,IAAK,SACL,IAAK,UACH,EAAU,EAAQ,GAyB5B,SAAkB,GAChB,GAAqB,iBAAV,EAAoB,CAC7B,IAAM,EAAQ,EAAM,MAAM,KAE1B,GAAqB,IAAjB,EAAM,OACR,OAAU,EAAM,GAAE,IAAI,EAAM,GAAE,IAAI,EAAM,GAAE,IAAI,EAAM,E,CAIxD,OAAO,CACT,CAnCiC,CAAS,GAChC,MACF,IAAK,aACH,EAAU,EAAQ,GAU5B,SAAmB,EAAe,GAChC,IAAM,EAAQ,EAAM,MAAM,KACpB,EAAY,SAAS,EAAM,GAAY,IAI7C,OAFA,EAAM,GAAK,EAAM,GAAG,QAAQ,OAAO,GAAY,QAAoB,EAAb,IAE/C,EAAM,KAAK,IACpB,CAjBiC,CAAU,EAAO,G,CAKlD,CCrDA,IAAM,EAAuB,qBAW7B,SAAA,EAAqC,GAEnC,IAAK,EAAqB,KAAK,GAC7B,OAAO,EAQT,IALA,IAAM,EAAqC,GAErC,EAAa,qBACf,EAAQ,KAEJ,EAAQ,EAAW,KAAK,IAE1B,EAAM,GAAG,QAAQ,MAAQ,GAC3B,EAAgB,KAAK,CACnB,EAAM,MACN,EAAM,MAAQ,EAAM,GAAG,OAEvB,EAAM,GACH,MAAM,KACN,KAAI,SAAC,GAAc,iBAAW,EAAE,OAAM,GAAG,IACzC,KAAK,QAMd,OAAO,EAAgB,UAAU,QAAO,SAAC,EAAkB,G,IAAC,EAAA,EAAA,GAAY,EAAA,EAAA,GAAe,EAAA,EAAA,GAIrF,OAHe,EAAS,MAAM,EAAG,GAGjB,EAFD,EAAS,MAAM,E,GAG7B,EACL,CAEA,SAAA,EAAwB,EAAqB,GAC3C,OAAI,EAAY,QAAQ,aAAe,EAC9B,EAAY,QAAQ,EAAsB,MACX,IAA7B,EAAY,QAAQ,KACtB,EAAkB,EAChB,EAAY,QAAQ,KAAO,EAC7B,EAAkB,IAAM,EAG1B,CACT,CAEA,SAAA,EAAsB,EAAgB,EAAmC,QAAnC,IAAA,MAAA,CAAoB,QAAS,UAAM,IAAA,MAAA,KACvE,IAAM,EAAa,EAAW,cAC1B,EAAwC,EAAM,GAE7C,IACH,EAAe,GACf,EAAM,GAAmB,EACzB,EAAM,QAAQ,KAAK,IAGrB,IAAkB,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAI,CAAjB,IAAM,EAAG,EAAA,GAEZ,GAAmB,iBAAR,EAAkB,CAC3B,IAAM,EAAgB,EAAW,kBAAkB,GAE/C,GACF,EAAa,EAAe,EAAO,E,MAGhC,GAAI,MAAM,QAAQ,GACvB,EAAa,EAAK,EAAO,QAGzB,IAAK,IAAM,KAAQ,EACjB,GAAa,cAAT,EAAsB,CAExB,IAAM,EAAwC,EAAY,UAE1D,IAAK,IAAI,KAAe,EACtB,GAAI,EAAU,eAAe,GAAc,CACzC,IAAM,EAAgB,EAAU,GAEhC,GAAiC,IAA7B,EAAY,QAAQ,KAEtB,EAAa,CAAC,GAAgB,EAD9B,EAAc,EAAc,IAAM,QAE7B,GAAI,EAAY,QAAQ,MAAQ,EAAG,CAIxC,EACE,CAAC,GACD,EAL8B,EAA4B,GACzD,MAAM,MACN,KAAI,SAAC,GAAc,OAAA,EAAE,MAAM,IAKzB,KAAI,SAAC,GAAmC,OAAA,EAAe,EAAwB,EAAgB,IAC/F,KAAK,M,MAGV,EAAa,CAAC,GAAgB,EAAO,EAAe,EAAa,G,YAK5C,IAAtB,EAAY,KAEF,WAAT,GAA8B,YAAT,EAEvB,EAAY,EAAc,EAAO,EAAY,IAG5C,EAAqB,GAAS,EAAY,G,CAQvD,OAAO,CACT,CAEA,SAAA,EAAqB,EAA2B,EAAc,GAC5D,IAAM,EAAyB,iBAAV,EAAqB,EAAM,MAAM,KAAO,CAAC,GAE9D,EAAa,EAAO,OAAS,EAAM,GACnC,EAAa,EAAO,SAAW,EAAM,IAAM,EAAM,GACjD,EAAa,EAAO,UAAY,EAAM,IAAM,EAAM,GAClD,EAAa,EAAO,QAAU,EAAM,IAAM,EAAM,IAAM,EAAM,EAC9D,CAqBA,SAAA,EAAqC,GACnC,IAAK,EACH,MAAO,GAGT,ICzLyB,EAAgC,EDyLnD,EAAkC,GAExC,IAAK,IAAM,KAAS,EACd,EAAY,eAAe,IApLd,gBAoLwB,QAAiD,IAAvB,EAAY,IAC7E,EAAW,KAAK,EAAO,EAAY,IAKvC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,GAAK,GClMnB,EDmMZ,GCnM4C,EDmMhC,GClML,EAAU,GAAkB,QAAQ,WAAY,OAAO,cDmMzE,EAAa,EAAY,GACzB,EAAY,EAAY,GACxB,EAAY,EAAY,GAI1B,IAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,GAAK,EAC1C,EAAW,OAAO,EAAG,EAAG,IAAK,EAAW,GAAI,KAG9C,OAAO,EAAW,KAAK,GACzB,CASA,SAAA,I,IAAoC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAClC,IAAM,EAAkB,EAAa,GAC/B,EAzDR,SAAwB,GAItB,IAHA,IAAM,EAAuB,GACzB,GAAW,EAEQ,EAAA,EAAA,EAAA,EAAM,QAAN,EAAA,EAAA,OAAA,IAAa,CAA/B,IAAM,EAAQ,EAAA,GACjB,EAAW,KAAK,GAChB,IAAM,EAAmB,EAAM,GAE/B,IAAK,IAAM,KAAY,EACjB,EAAiB,eAAe,SAA4C,IAA/B,EAAiB,KAChE,GAAW,EACX,EAAW,KAAK,EAAU,EAAiB,I,CAKjD,OAAO,EAAW,EAAW,KAAK,SAAM,CAC1C,CAwCc,CAAe,GAE3B,GAAI,EAAK,CACP,IAAM,EAAa,EAAW,cACxB,EAAuC,CAC3C,UAAW,EAAW,iBAAiB,GACvC,IAAG,EACH,KAAI,GAGN,IAAK,EAAa,UAAW,CAC3B,EAAa,UAAY,EAAW,aAnN1C,SAAwB,GACtB,IAAM,EAAoB,GAAS,EAAM,KAEzC,OAAO,EAAa,EAAwB,iBAAc,CAC5D,CA+MuD,CAAe,IAGhE,IAFA,IAAM,EAA0B,GAET,EAAA,EAAA,EAAA,EAAM,QAAN,EAAA,EAAA,OAAA,IAAa,CAA/B,IAAM,EAAQ,EAAA,GACjB,EAAc,KAAK,EAAU,EAAqB,EAAM,I,CAE1D,EAAa,cAAgB,C,CAG/B,OAAO,C,CAEX,CAEA,SAAA,EAAkC,EAA6B,GAC7D,IAAM,EAAa,EAAW,cACtB,EAAA,EAAA,UAAW,EAAA,EAAA,IAAK,EAAA,EAAA,KAAM,EAAA,EAAA,cAE9B,GAAI,EAAe,CAEjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAc,OAAQ,GAAK,EAAG,CAChD,IAAM,EAAQ,EAAc,EAAI,GAChC,GAAI,EAAO,CACT,IAAI,EAAW,EAAc,GAgBvB,GAbN,EAAW,EAAS,QAClB,qBACA,SAAC,EAAe,EAAa,GAC3B,OAAI,EACK,IAAM,EAAa,UACjB,EACF,KAAQ,GAAY,EAAS,IAAQ,GAEvC,E,KAKsB,IAAI,EAAK,KAA8B,IAA1B,EAAS,QAAQ,KAAa,IAAM,IAElF,EAAW,WAAW,E,EAG1B,EAAW,eAAe,EAAY,EAAM,EAAO,E,CAEvD,CE3QA,SAAA,I,IACE,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAEA,IAAM,EAAoB,GACpB,EAAgB,GAChB,EAAa,EAAW,cA+B9B,OA7BA,SAAA,EAAsB,GACpB,IAAkB,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAQ,CAArB,IAAM,EAAG,EAAA,GACZ,GAAI,EACF,GAAmB,iBAAR,EACT,GAAI,EAAI,QAAQ,MAAQ,EACtB,EAAa,EAAI,MAAM,UAClB,CACL,IAAM,EAAiB,EAAW,kBAAkB,GAEhD,EACF,EAAa,IAGiB,IAA1B,EAAQ,QAAQ,IAClB,EAAQ,KAAK,E,MAIV,MAAM,QAAQ,GACvB,EAAa,GACW,iBAAR,GAChB,EAAQ,KAAK,E,EAMrB,CAAa,GAEN,CACL,QAAO,EACP,QAAO,EAEX,CCtCA,SAAA,I,IAA4B,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GACpB,IAAA,EAAA,EAAA,GAAE,EAAA,EAAA,QAAS,EAAA,EAAA,QAMjB,OAJI,EAAQ,QACV,EAAQ,KHuQZ,W,IAAiC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAC/B,IAAM,EAAe,EAAmB,WAAA,EAAI,GAC5C,OAAI,GACF,EAAkB,GAEX,EAAa,WAGf,EACT,CGhRiB,CAAiB,IAGzB,EAAQ,KAAK,IACtB,CCoHA,SAAA,I,IAAgC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAM9B,IALA,IAAM,EAAwC,GAGxC,EAAwF,GAErE,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAS,CAA7B,IAAM,EAAU,EAAA,GACnB,GAAI,EACF,IAAK,IAAM,KAAQ,EACjB,GAAI,EAAW,eAAe,GAAO,CACnC,GAAa,uBAAT,QAAmE,IAAlC,EAAW,mBAAkC,CAGhF,IAAM,EAAyB,EAAW,mBAC1C,IAAK,IAAM,KAAe,EACpB,EAAuB,eAAe,KACpC,EAA0B,eAAe,GAC3C,EAA0B,GAAa,KAAK,EAAuB,IAEnE,EAA0B,GAAe,CAAC,EAAuB,KAKvE,Q,CAKF,IAAM,EAAuB,EAAkB,GACzC,EAAgB,EAAmB,GAGtC,EAAkB,QADD,IAAhB,EACyB,GAIrB,MAAM,QAAQ,GAAe,EAAc,CAAC,IAA0B,OACtE,MAAM,QAAQ,GAAgB,EAAe,CAAC,G,EAQ9D,GAAI,OAAO,KAAK,GAA2B,OAAS,EAAG,CACrD,EAAU,mBAAqB,GAC/B,IAAM,EAAkB,EAAU,mB,WAGvB,GACT,GAAI,EAA0B,eAAe,GAAc,CACzD,IAAM,EAAa,EAA0B,GAC7C,EAAgB,GAAe,SAAC,GAC9B,OAAO,EAAe,WAAA,EACjB,EAAW,KACZ,SAAC,GACC,MAAiC,mBAA1B,EAAuC,EAAsB,GAAc,C,QAP9F,IAAK,IAAM,KAAe,E,EAAf,E,CAeb,OAAO,CACT,CC3GA,SAAA,I,IAA+B,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAE7B,IAAM,EAAwC,CAAE,mBAAoB,IAC9D,EAAsC,GAEtC,EAAW,EAAU,GAE3B,IAAK,GAAY,EAAU,QAAU,EACnC,MAAO,CAAE,mBAAoB,IAG/B,IAAI,EAEF,EAEF,EAAuB,EAAe,WAAA,EAAI,GAE1C,IAAM,EAAgB,GAEtB,IAAK,IAAM,KAAgB,EACzB,GAAI,EAAqB,eAAe,GAAe,CACrD,GAAqB,uBAAjB,EAAuC,CACzC,EAAa,mBAAsB,EAAoD,oBAAsB,GAC7G,Q,CAGF,IAEM,EAAA,EAFkB,EAA6B,IAE7C,EAAA,EAAA,QACF,EAAe,EAAoB,CAAE,YAAa,GADvC,EAAA,SAGjB,EAAc,KAAK,GAEf,IACF,EAAS,GAAgB,EAAa,UAErC,EAAqB,GAAgB,EAAQ,OAAO,CAAC,EAAa,YAAY,KAAK,K,CAK1F,IAA2B,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAa,EAA7B,EAAY,EAAA,KAEnB,EAAkB,EAAc,E,CAIpC,OAAO,CACT,CCrIA,SAAA,EAAyB,GACvB,EAAW,cAAc,WAAW,cAAc,EAAqB,GAAW,KAAK,EACzF,CCFA,SAAA,EAA0B,GACxB,IAAM,EAAa,EAAW,cACxB,EAAO,EAAW,eAElB,EAAuB,GAE7B,IAAK,IAAM,KAAQ,EACb,EAAS,eAAe,IAC1B,EAAW,KAAK,EAAM,IAAK,EAAqB,EAAS,IAAQ,KAGrE,IAAM,EAAQ,EAAW,KAAK,IAM9B,OAJA,EAAW,WAAW,cAAc,EAAI,IAAI,EAAK,KAAK,GAEtD,EAAW,eAAe,EAAM,EAAO,GAAI,CAAC,YAAa,IAElD,CACT,CCvBE,EAAW,yBAA0B,UCAvC,IAAM,EAAsB,gBAMxB,GAAkC,oBAAX,QAA0B,QAAW,QAOhE,SAAA,GAAyB,EAAQ,GAC/B,IAAK,IAAI,KAAY,EACnB,GAAI,EAAE,eAAe,MACd,EAAE,eAAe,IAAa,EAAE,KAAc,EAAE,IACnD,OAAO,EAKb,OAAO,CACT,CAOA,SAAA,GAAuC,EAAO,GAC5C,OAAO,GAAgB,EAAG,IAAM,GAAgB,EAAG,EACrD,CAaA,SAAA,GAAuB,G,IAAa,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,GAAA,UAAA,GAClC,OAAO,GAAe,MAAM,KAAM,CAAC,KAAM,GAAQ,OAAO,GAC1D,CAeA,SAAA,GAA+B,EAA0C,G,IAAa,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,GAAA,UAAA,GACpF,EAAS,GAAU,GAEnB,IAAyB,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAI,CAAxB,IAAI,EAAY,EAAA,GACnB,GAAI,EACF,IAAK,IAAI,KAAY,GACf,EAAa,eAAe,IAAe,IAAa,EAAU,KACpE,EAAO,GAAY,EAAa,G,CAMxC,OAAO,CACT,MApEqC,IAAjC,GAAQ,KACV,GAAQ,GAAuB,GAsEjC,IAAM,GAAa,EAAW,cAW9B,SAAA,GAAsB,GAGpB,OAAQ,GA5FgB,QA0FZ,GAAQ,IAGtB,CAbI,IAAc,GAAW,SAC3B,GAAW,SAmBb,SAAyB,QAAA,IAAA,MAAA,GACvB,GAAQ,GAAuB,CACjC,IC/CA,ICvDI,GDuDJ,GAAA,WAsGE,SAAA,EAAmB,GAhGX,KAAA,IAAc,EAAW,YAiG/B,KAAK,QAAU,EACf,KAAK,cAAgB,E,CA6KzB,OAtQgB,EAAA,MAAd,SAEE,EACA,EAEA,EACA,GAEA,IAAI,EAEJ,GAAI,EAAW,WAAW,IACxB,GAAI,SAAS,YAAa,CACxB,IAAI,EAAK,SAAS,YAAY,cAE9B,EAAG,UAAU,EAAW,IAAe,GAAO,GAE9C,GAAO,EAAI,GAEX,EAAS,EAAO,cAAc,E,MAEzB,GAAK,SAAoC,kBAAG,CAGjD,IAAI,EAAS,SAAoC,kBAAE,GAEnD,EAAO,UAAU,KAAO,EAAW,E,OAGrC,KAAO,IAAqB,IAAX,GAAkB,CACjC,IAAI,EAA8B,EAAO,WACrC,EAAe,EAAS,EAAO,GAAa,KAEhD,GAAI,EACF,IAAK,IAAI,KAAM,EACb,GAAI,EAAa,eAAe,GAG9B,IAFA,IAAI,EAAkC,EAAa,GAE1C,EAAY,GAAc,IAAX,GAAoB,EAAY,EAAgB,OAAQ,IAAa,CAC3F,IAAI,EAAS,EAAgB,GAEzB,EAAO,iBACT,EAAS,EAAO,eAAe,KAAK,EAAO,OAAQ,G,CAQ7D,EAAS,EAAc,EAAO,OAAS,I,CAI3C,OAAO,C,EAIK,EAAA,WAAd,SAAyB,EAAa,GACpC,IAAI,EAAS,GAA+B,EAAO,WAEnD,QAAS,KAAY,EAAO,E,EAKhB,EAAA,WAAd,SAAyB,EAAa,GACpC,IAAI,EAAiB,GAAiC,EAAO,iBAE7D,QAAS,KAAoB,EAAe,E,EAIhC,EAAA,gBAAd,SAA8B,GACxB,EAAM,gBACR,EAAM,kBAGN,EAAM,cAAe,C,EAIV,EAAA,WAAf,SAA0B,GACxB,QAAS,MAAa,EAAO,kBAA4C,oBAAhB,aAA+B,aAAkB,Y,EAUrG,EAAA,UAAA,QAAP,WACO,KAAK,cACR,KAAK,aAAc,EAEnB,KAAK,MACL,KAAK,QAAU,K,EAMZ,EAAA,UAAA,MAAP,SAAa,EAAa,EAAiD,GACzE,IAAK,IAAI,KAAa,EAChB,EAAO,eAAe,IACxB,KAAK,GAAG,EAAQ,EAAW,EAAO,GAAY,E,EAS7C,EAAA,UAAA,GAAP,SAAU,EAAa,EAAmB,EAAgC,GAA1E,IAAA,EAAA,KACE,GAAI,EAAU,QAAQ,MAAQ,EAG5B,IAFA,IAAI,EAAS,EAAU,MAAM,SAEpB,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,KAAK,GAAG,EAAQ,EAAO,GAAI,EAAU,OAElC,CACL,IAAI,EAAS,KAAK,QACd,EAA4B,CAC9B,OAAQ,EACR,UAAW,EACX,OAAQ,EACR,SAAU,EACV,QAAO,GAcT,IAVI,EAA+B,EAAO,WAAa,EAAO,YAAc,IACrE,GACL,EAAO,IACW,CAChB,MAAO,GAEX,EAAO,GAAW,KAAK,KAAO,EAAO,GAAW,KAAK,MAAQ,GAC5C,EAAO,GAAW,KAAK,KAAM,KAAK,GACnD,EAAO,GAAW,QAEd,EAAW,WAAW,GAAS,CAEjC,IAAI,EAAsB,W,IAAC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GACzB,IAAI,EAAK,YAAT,CAIA,IAAI,EACJ,IAEE,IAAe,KADf,EAAS,EAAS,MAAM,EAAQ,KACR,EAAK,GAAI,CAC/B,IAAI,EAAI,EAAK,GAET,EAAE,gBACJ,EAAE,iBAGA,EAAE,iBACJ,EAAE,kBAGJ,EAAE,cAAe,C,EAEnB,MAAO,G,CAIT,OAAO,C,GAGT,EAAY,gBAAkB,EAE1B,EAAO,iBAEK,EAAQ,iBAAiB,EAAW,EAAqB,GAE9D,EAAO,aAEhB,EAAO,YAAY,KAAO,EAAW,E,KAElC,CAUL,EAAY,eARa,W,IAAC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GACxB,IAAI,EAAK,YAIT,OAAO,EAAS,MAAM,EAAQ,E,EAOlC,KAAK,cAAc,KAAK,E,GAKrB,EAAA,UAAA,IAAP,SAAW,EAAc,EAAoB,EAAiC,GAC5E,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,cAAc,OAAQ,IAAK,CAClD,IAAI,EAAc,KAAK,cAAc,GACrC,KACI,GAAU,IAAW,EAAY,QACjC,GAAa,IAAc,EAAY,WACvC,GAAY,IAAa,EAAY,UACnB,kBAAZ,GAAyB,IAAY,EAAY,SACzD,CACA,IAAI,EAA8B,EAAY,OAAO,WACjD,EAAoB,EAAO,EAAY,WACvC,EAAc,EAAoC,EAAkB,KAAK,KAAO,KAGhF,IACyB,IAAvB,EAAY,QAAiB,GAI/B,EAAkB,QAClB,EAAY,OAAO,EAAY,QAAQ,GAAc,KAJrD,EAAkB,OAAS,EAAY,cAChC,EAAO,EAAY,WAAW,KAAK,MAMvC,EAAkB,cACd,EAAO,EAAY,YAI1B,EAAY,kBACV,EAAY,OAAO,oBACrB,EAAY,OAAO,oBAAoB,EAAY,UAAW,EAAY,gBAAiB,EAAY,SAC9F,EAAY,OAAO,aAE5B,EAAY,OAAO,YAAY,KAAO,EAAY,UAAW,EAAY,kBAI7E,KAAK,cAAc,OAAO,IAAK,E,IAO9B,EAAA,UAAA,MAAP,SAAa,EAAmB,EAAiB,GAC/C,OAAO,EAAW,MAAM,KAAK,QAAS,EAAW,EAAW,E,EAIvD,EAAA,UAAA,QAAP,SAAe,GACb,IAAI,EAAkB,KAAK,QAAQ,iBAAmB,KAAK,QAAQ,kBAAoB,GAEvF,GAAqB,iBAAV,EACT,EAAe,IAAS,OAExB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,EAAe,EAAM,KAAM,C,EA/QlB,EAAA,UAAoB,EAmRrC,C,CArRA,GElDA,SAAA,GAA4B,GAC1B,MAAkC,oBAAb,cACnB,EAEO,GAAe,EAAY,cAAgB,EAAY,cAAgB,QAElF,CDVA,IAgBM,GACA,GAGE,GAQA,GA5BJ,GAA2B,EAEzB,GAA0B,EAAY,CAC1C,SAAU,sBAUC,GAA+B,qBAiE/B,IA9DP,GAAmB,EACnB,GAA2B,KAGzB,GAAe,SAAC,GACe,IAA/B,EAAM,cAAc,SACtB,GAAmB,EAAM,cAAc,GAAG,Q,EAMxC,GAAwB,SAAC,GAE7B,GAAmC,IAA/B,EAAM,cAAc,SAMxB,EAAM,kBAED,IAAL,CAIA,IAAM,EAAU,EAAM,cAAc,GAAG,QAAU,GAE3C,EAAmB,GAAqB,EAAM,QAChD,IACF,GAAW,GAKc,IAAvB,GAAS,WAAmB,EAAU,GACxC,EAAM,iBAKJ,GAAS,aAAe,GAAS,WAAa,GAAS,cAAgB,EAAU,GACnF,EAAM,gB,GAIH,SAAC,EAA6B,GAC9B,IAIL,EAAO,GAAG,EAAS,aAAc,GAAc,CAAE,SAAS,IAC1D,EAAO,GAAG,EAAS,YAAa,GAAuB,CAAE,SAAS,IAElE,GAAW,E,GAUT,GAAwB,SAAC,GAC7B,EAAM,gBACR,EAyCA,SAAA,KACE,QAAwB,IAApB,GAA+B,CACjC,IAAI,EAAyB,SAAS,cAAc,OACpD,EAAU,MAAM,YAAY,QAAS,SACrC,EAAU,MAAM,YAAY,SAAU,SACtC,EAAU,MAAM,YAAY,WAAY,UACxC,EAAU,MAAM,YAAY,WAAY,YACxC,EAAU,MAAM,YAAY,MAAO,WACnC,SAAS,KAAK,YAAY,GAE1B,GAAkB,EAAU,YAAc,EAAU,YAGpD,SAAS,KAAK,YAAY,E,CAG5B,OAAO,EACT,CAQA,SAAA,GAAqC,GAInC,IAHA,IAAI,EAAyB,EAGtB,GAAM,IAAO,SAAS,MAAM,CACjC,GAAsD,SAAlD,EAAG,aAAa,IAClB,OAAO,EAET,EAAK,EAAG,a,CAMV,IAFA,EAAK,EAEE,GAAM,IAAO,SAAS,MAAM,CACjC,GAAsD,UAAlD,EAAG,aAAa,IAA2C,CAC7D,IAAM,EAAiB,iBAAiB,GACpC,EAAY,EAAiB,EAAe,iBAAiB,cAAgB,GAEjF,GAAI,IAA4B,WAAd,GAAwC,SAAd,GAC1C,OAAO,C,CAIX,EAAK,EAAG,a,CASV,OALK,GAAM,IAAO,SAAS,OAEzB,EAAK,QAGA,CACT,CErLA,SAAA,GAAwB,GACtB,IAAI,EAeJ,OAdI,IACE,IAAY,OACd,EAAO,CACL,KAAM,EACN,IAAK,EACL,MAAO,OAAO,WACd,OAAQ,OAAO,YACf,MAAO,OAAO,WACd,OAAQ,OAAO,aAEP,EAAwB,wBAClC,EAAQ,EAAwB,0BAG7B,CACT,CCvBA,IAAI,QAA4D,EAUhE,SAAA,GAAqB,GACf,IAAuC,oBAAZ,SAAoD,eAAzB,QAAQ,IAAI,SACpE,GAAiB,GACR,SAAW,QAAQ,MAC5B,QAAQ,KAAK,EAEjB,CCPA,SAAA,GAAyC,EAAuB,EAAU,GACxE,GAAuB,oBAAZ,SAAoD,eAAzB,QAAQ,IAAI,SAChD,IAAK,IAAM,KAAY,EACrB,GAAI,GAAS,KAAY,EAAO,CAC9B,IAAI,EAA0B,EAAa,GACvC,GAA2B,KAA2B,GACxD,GAAQ,EAAa,cAAc,EAAQ,iCAAiC,EAAa,GAAS,2B,CAK5G,CCVA,SAAA,GAAoC,EAAuB,EAAU,GACnE,GAAuB,oBAAZ,SAAoD,eAAzB,QAAQ,IAAI,SAChD,IAAK,IAAM,KAAY,EACrB,GAAI,GAAS,KAAY,EAAO,CAC9B,IAAI,EAAwB,EAAa,cAAc,EAAQ,sCACzD,EAAsB,EAAe,GACvC,IACF,GAAsB,SAAS,EAAmB,cAEpD,GAAK,E,CAIb,CChBA,SAAA,GAA0B,GACxB,MAAgC,oBAAX,YACnB,EAEO,GAAe,EAAY,eAAiB,EAAY,cAAc,YACzE,EAAY,cAAc,YAC1B,MAER,CCTO,ICeP,GDfa,GACA,EADA,GAEN,EAFM,GAGJ,GAHI,GAMN,GANM,GASH,GATG,GAUJ,GAVI,GAWH,GAXG,GAYD,GAZC,GAaN,GAbM,GAcL,GAdK,GAeL,GAfK,GAgBP,GAhBO,GAiBJ,GAjBI,GAkBL,GAlBK,GAoBN,GApBM,GA+BR,GCnCC,KAAmB,GAAA,IACtB,IAAc,EACf,GAAC,IAAgB,EACjB,GAAC,IAAgB,EACjB,GAAC,IAAiB,EAClB,GAAC,IAAgB,EACjB,GAAC,IAAe,EAChB,GAAC,IAAe,EAChB,GAAC,IAAkB,EACnB,GAAC,IAAoB,E,IAMvB,SAAA,GAAqC,GACnC,QAAS,GAAoB,EAC/B,CChBO,IAAM,GAA0B,4BA0BvC,SAAA,GAAsB,GACpB,IAAM,EAAM,GAAU,EAAG,QAEzB,GAAI,EAAK,CACC,IAAA,EAAA,EAAA,SAAA,KAAA,UAEJ,EAAU,SAAS,KACrB,EAAU,OAAO,G,CAGvB,CAEA,SAAA,GAAoB,GAClB,IAAM,EAAM,GAAU,EAAG,QAEzB,GAAI,EAAK,CACC,IAAA,EAAA,EAAA,SAAA,KAAA,UAEJ,GAAqB,EAAG,SAAW,EAAU,SAAS,KACxD,EAAU,IAAI,G,CAGpB,CChCA,IAAA,GAAA,SAAA,GA4BE,SAAA,EAAY,EAAe,GAA3B,IAAA,EACE,EAAA,KAAA,KAAM,EAAO,IAAQ,K,OD7BzB,SAAqC,GACnC,IAAM,EAAO,GAAU,KAEnB,IAAQ,EAAI,8BACd,EAAI,6BAA8B,EAClC,EAAI,iBAAiB,YAAa,IAAc,GAChD,EAAI,iBAAiB,UAAW,IAA0B,GAE9D,CCwBI,G,SCjD0B,GAC5B,IAAM,EAAO,GAAU,KAEvB,GAAI,IAAQ,EAAI,sBAAuB,CACrC,EAAI,uBAAwB,EAGpB,IAAA,EAAA,EAAA,SAAA,gBAEH,EAAgB,aAAa,QAChC,EAAgB,aAAa,MAAO,M,CAG1C,CDqCI,GAqLJ,SAAsB,EAA4B,EAAmB,GACnE,IAAK,IAAI,EAAI,EAAG,EAAM,EAAY,OAAQ,EAAI,EAAK,IACjD,GAAU,EAAK,EAAW,EAAY,GAE1C,CAvLI,CAAa,EAAM,EAAc,UAAW,CAC1C,oBACA,wBACA,0BACA,SACA,qBACA,yB,EAsKN,OA/MgF,OAgDvE,EAAA,UAAA,mBAAP,SAA0B,EAAmB,GAC3C,KAAK,oBAAoB,EAAW,KAAK,M,EAMpC,EAAA,UAAA,kBAAP,WACE,KAAK,iBAAiB,KAAK,MAAM,aAAc,K,EAM1C,EAAA,UAAA,qBAAP,WAGE,GAFA,KAAK,iBAAiB,KAAK,MAAM,aAAc,MAE3C,KAAK,cAAe,CACtB,IAAK,IAAI,EAAI,EAAG,EAAM,KAAK,aAAa,OAAQ,EAAI,EAAK,IAAK,CAC5D,IAAI,EAAa,KAAK,cAAc,GAEhC,EAAW,SACb,EAAW,S,CAGf,KAAK,cAAgB,I,GAOzB,OAAA,eAAW,EAAA,UAAA,YAAS,C,IAApB,WACE,IAAK,KAAK,YAAa,CACrB,IACI,EADgB,qBACQ,KAAK,KAAK,YAAY,YAElD,KAAK,YAAc,GAAW,EAAQ,OAAS,EAAI,EAAQ,GAAK,E,CAGlE,OAAO,KAAK,W,kCAMd,OAAA,eAAc,EAAA,UAAA,eAAY,C,IAA1B,WAIE,OAHK,KAAK,gBACR,KAAK,cAAgB,IAEhB,KAAK,a,kCASd,OAAA,eAAc,EAAA,UAAA,SAAM,C,IAApB,WAME,OALK,KAAK,UACR,KAAK,QAAU,IAAI,EAAM,MACzB,KAAK,aAAa,KAAK,KAAK,UAGvB,KAAK,O,kCASd,OAAA,eAAc,EAAA,UAAA,UAAO,C,IAArB,WAME,OALK,KAAK,WACR,KAAK,SAAW,IAAI,GAAW,MAC/B,KAAK,aAAa,KAAK,KAAK,WAGvB,KAAK,Q,kCASJ,EAAA,UAAA,YAAV,SAAsB,GAAtB,IAAA,EAAA,KAaE,OAZK,KAAK,aACR,KAAK,WAAa,IAGf,KAAK,WAAW,KAEnB,KAAK,WAAW,GAAW,SAAC,GAE1B,OAAS,EAAa,GAAW,C,GAI9B,KAAK,WAAW,E,EAMf,EAAA,UAAA,oBAAV,SAA8B,EAA0B,QAAA,IAAA,MAAA,IAGlD,GAAgB,GAAY,EAAa,eAAiB,EAAS,eACrE,KAAK,iBAAiB,EAAa,aAAc,MACjD,KAAK,iBAAiB,EAAS,aAAc,M,EAUvC,EAAA,UAAA,kBAAV,SAA4B,GAC1B,GAAiB,KAAK,UAAW,KAAK,MAAO,E,EAQrC,EAAA,UAAA,uBAAV,SAAiC,GAC/B,GAAsB,KAAK,UAAW,KAAK,MAAO,E,EAU1C,EAAA,UAAA,gCAAV,SAA0C,EAAyB,EAA6B,IEvMlG,SACE,EACA,EACA,EACA,EACA,GAEA,IAAkB,IAAd,GAAyC,oBAAZ,SAAoD,eAAzB,QAAQ,IAAI,SACtE,IAA+B,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAa,CAAvC,IAAM,EAAgB,EAAA,GACnB,KAAoB,GACxB,GAAQ,EAAa,cAAc,EAAgB,uBAAuB,EAAmB,c,CAIrG,CF0LI,CAA+B,KAAK,UAAW,KAAK,MAAO,EAAe,EAAqB,E,EAGzF,EAAA,UAAA,iBAAR,SAAwC,EAA4C,IAC7E,KAAK,6BAA+B,IACpB,mBAAR,GACT,EAAI,GAGa,iBAAR,IAER,EAAY,QAAU,G,EAI/B,CAAA,CA/MA,CAAgF,aA4NhF,SAAA,GAAmB,EAA4B,EAAmB,GAEhE,IAAI,EAAe,EAAY,GAC3B,EAAmB,EAAkB,IAGrC,GAAe,KAEhB,EAAY,GAAc,WACzB,IAAI,EASJ,OAPI,IACF,EAAS,EAAgB,MAAM,KAAM,YAEnC,IAAgB,IAClB,EAAS,EAAY,MAAM,KAAM,YAG5B,C,EAGb,CAOA,SAAA,KACE,OAAO,IACT,CG3OA,IAAA,GAAA,SAAA,GAOE,SAAA,EAAY,GAAZ,IAAA,EACE,EAAA,KAAA,KAAM,IAAM,K,OACZ,EAAK,MAAQ,CACX,YAAY,G,EAsBlB,OAhCmC,OAc1B,EAAA,UAAA,kBAAP,eAAA,EAAA,KACQ,EAAA,KAAA,MAAA,MACN,KAAK,WAAa,YAAW,WAC3B,EAAK,SAAS,CACZ,YAAY,G,GAEb,E,EAGE,EAAA,UAAA,qBAAP,WACM,KAAK,YACP,aAAa,KAAK,W,EAIf,EAAA,UAAA,OAAP,WACE,OAAO,KAAK,MAAM,WAAa,WAAe,KAAK,KAAK,MAAM,UAAY,I,EA7B9D,EAAA,aAAe,CAC3B,MAAO,GA8BX,C,CAhCA,CAAmC,aCvB7B,GAA4B,qBAC5B,GAA2B,gBAE7B,GAAW,EAmCf,GAAA,oBAAA,I,CAoDA,OAnDgB,EAAA,SAAd,SAA0B,EAAa,GACrC,IAAM,EAAiB,KAMvB,YAJ4B,IAAxB,EAAe,KACjB,EAAe,GAA+B,mBAAjB,EAA+B,IAA8B,GAGrF,EAAe,E,EAGV,EAAA,SAAd,SAA0B,EAAa,GACrC,IAAM,EAAiB,KACjB,EAAY,EAAe,IAC7B,EAAW,EAAe,GAE9B,GAAI,IAAU,EAAU,CACtB,EAAe,GAAO,EAEtB,IAAI,EAAoB,CACtB,SAAQ,EACR,MAAK,EACL,IAAG,GAGL,IAAK,IAAI,KAAM,EACT,EAAU,eAAe,IAC3B,EAAU,GAAI,E,CAKpB,OAAO,C,EAGK,EAAA,kBAAd,SAAgC,GAG9B,IAAI,EAAK,EAAG,OACN,EAAY,KAEb,IACH,EAAK,EAAG,OAAS,OAAO,OAG1B,EAAU,GAAM,C,EAGJ,EAAA,qBAAd,SAAmC,UACf,KACD,EAAG,O,EAExB,CAAA,CApDA,GAsDA,SAAA,KACE,I,EAAM,EAAsD,oBAAX,OAAyB,OAAS,GAQnF,OANK,EAAU,MACb,EAAU,MAA0B,EAAA,IACjC,IAA2B,G,IAIzB,EAAU,GACnB,CAEA,SAAA,KAEE,OADuB,KACD,GACxB,CChHA,IAAA,GAAA,WAME,SAAA,EAAY,EAAkB,EAAmB,EAAiB,QAAtD,IAAA,MAAA,QAAkB,IAAA,MAAA,QAAmB,IAAA,MAAA,QAAiB,IAAA,MAAA,GAChE,KAAK,IAAM,EACX,KAAK,OAAS,EACd,KAAK,KAAO,EACZ,KAAK,MAAQ,C,CA8BjB,OAxBE,OAAA,eAAI,EAAA,UAAA,QAAK,C,IAAT,WACE,OAAO,KAAK,MAAQ,KAAK,I,kCAM3B,OAAA,eAAI,EAAA,UAAA,SAAM,C,IAAV,WACE,OAAO,KAAK,OAAS,KAAK,G,kCAMrB,EAAA,UAAA,OAAP,SAAc,GAGZ,OACE,WAAW,KAAK,IAAI,QAAQ,MAAQ,WAAW,EAAK,IAAI,QAAQ,KAChE,WAAW,KAAK,OAAO,QAAQ,MAAQ,WAAW,EAAK,OAAO,QAAQ,KACtE,WAAW,KAAK,KAAK,QAAQ,MAAQ,WAAW,EAAK,KAAK,QAAQ,KAClE,WAAW,KAAK,MAAM,QAAQ,MAAQ,WAAW,EAAK,MAAM,QAAQ,G,EAG1E,CAAA,CAxCA,GCAA,SAAA,GAA+B,G,IAAa,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,GAAA,UAAA,GAC1C,OAAI,EAAU,OAAS,EACd,EAAU,GAGZ,W,IAAC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GACN,EAAU,SAAQ,SAAC,GAAkB,OAAA,GAAK,EAAE,MAAM,EAAQ,EAAK,G,CAEnE,CCRA,SAAA,K,IAAyC,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GACvC,IAAM,EAAkB,EACrB,QAAO,SAAC,GAA4B,OAAA,OAAiC,IACrE,KAAK,KACL,OACH,MAA2B,KAApB,OAAyB,EAAY,CAC9C,CCJA,SAAA,GAA6B,EAAY,GAGvC,IAFA,IAAI,GAAS,EAEJ,EAAI,EAAG,GAAS,EAAI,EAAM,OAAQ,IACzC,GAAI,EAAG,EAAM,GAAI,GAAI,CACnB,EAAQ,EACR,K,CAIJ,OAAO,CACT,CAOA,SAAA,GAAwB,EAAY,GAClC,IAAI,EAAQ,GAAU,EAAO,GAE7B,KAAI,EAAQ,GAIZ,OAAO,EAAM,EACf,CC7BA,SAAA,GAEE,EACA,EACA,GAOA,IAAI,EAAK,EAAW,MAEhB,GAAW,EAEf,MAAO,CACL,cAAc,EAEd,IAAA,WACE,GAAI,GAAa,GAAM,OAAS,EAAG,WAAc,KAAK,eAAe,GACnE,OAAO,EAIT,IAAI,EAAU,GAAM,EAAG,KAAK,MAW5B,OATA,GAAW,EACX,OAAO,eAAe,KAAM,EAAK,CAC/B,cAAc,EACd,UAAU,EACV,YAAY,EACZ,MAAO,IAET,GAAW,EAEJ,C,EAIT,IAAA,SAAI,GACF,OAAO,eAAe,KAAM,EAAK,CAC/B,cAAc,EACd,UAAU,EACV,YAAY,EACZ,MAAO,G,EAIf,CC9CA,SAAA,KAwBE,OAlBsB,SACpB,EACA,GAMA,YANA,IAAA,MAA0B,SAMI,IAA1B,EACK,GAMF,EAFL,IAA2D,mBAA1B,EAAuC,EAAsB,GAAe,G,CAMnH,CCdA,SAAA,KACE,IAAM,EAAS,SAAK,GAClB,EAAU,QAAU,CACrB,EAWD,OARA,OAAO,eAAe,EAAW,QAAS,CACxC,IAAA,WACE,OAAO,EAAU,O,IAIrB,EAAU,QAAU,KAEb,CACT,CCHA,SAAA,K,IAAoB,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAGlB,IAFA,IAAI,EAAU,GAEE,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAI,CAAf,IAAI,EAAG,EAAA,GACV,GAAI,EACF,GAAmB,iBAAR,EACT,EAAQ,KAAK,QACR,GAAI,EAAI,eAAe,aAAuC,mBAAjB,EAAI,SACtD,EAAQ,KAAK,EAAI,iBAGjB,IAAK,IAAI,KAAO,EAET,EAAY,IACf,EAAQ,KAAK,E,CAOvB,OAAO,EAAQ,KAAK,IACtB,CC9BA,IACM,GAAoB,CAAE,SAAU,GAAI,eAAgB,GAAI,qBAAqB,GAE/E,GAAe,GAAe,SAHF,iBAGqD,CACnF,SAAU,GACV,eAAgB,GAChB,qBAAqB,IAGnB,GAA0B,GAE9B,GAAA,oBAAA,I,CAmDA,OAlDgB,EAAA,MAAd,WACE,GAAa,SAAW,GACxB,GAAa,eAAiB,E,EAIlB,EAAA,cAAd,SAA4B,GAC1B,GAAa,SAAQ,EAAA,GAAQ,GAAa,SAAa,GACvD,EAAe,c,EAIH,EAAA,oBAAd,SAAkC,EAAmB,GACnD,GAAa,eAAe,GAAU,EAAA,GAAQ,GAAa,eAAe,GAAe,GACzF,EAAe,c,EAGH,EAAA,YAAd,SACE,EACA,EACA,QAAA,IAAA,MAAA,IAQA,IAJA,IAAM,EAAsB,GACtB,EAAuB,GAAa,EAAc,eAAe,IAAe,GAChF,EAAwB,GAAa,GAAa,eAAe,IAAe,GAEjE,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAU,CAA1B,IAAI,EAAQ,EAAA,GACf,EAAS,GACP,EAAoB,IACpB,EAAc,SAAS,IACvB,EAAqB,IACrB,GAAa,SAAS,E,CAG1B,OAAO,C,EAGK,EAAA,QAAd,SAAsB,GACpB,GAAQ,KAAK,E,EAGD,EAAA,UAAd,SAAwB,GACtB,GAAU,GAAQ,QAAO,SAAC,GAAmB,OAAA,IAAO,CAAQ,G,EAG/C,EAAA,aAAf,WACE,GAAQ,SAAQ,SAAC,GAAmB,OAAA,GAAI,G,EAE5C,CAAA,CAnDA,GC1Ba,GAAoB,gBAAwC,CACvE,eAAgB,CACd,qBAAqB,EACrB,SAAU,GACV,eAAgB,MCFpB,SAAA,GAA8B,EAA6B,QAA7B,IAAA,MAAA,IAC5B,IAAM,EAAoB,GAAoB,GAAe,EAe/D,SAA4B,GAC1B,OAAO,SAAC,GAAwB,OAAC,EAAW,EAAA,GAAQ,EAAa,GAAgB,CAAQ,CAC3F,CAjB6E,CAAmB,GAE9F,OAAO,EAAkB,EAC3B,CAEA,SAAA,GAAoC,EAA6B,GAG/D,YAHkC,IAAA,MAAA,KACR,GAAoB,GAAe,EAa/D,SAAkC,QAAA,IAAA,MAAA,IAChC,OAAO,SAAC,GACN,IAAM,EAAiB,EAAA,GAAmB,GAE1C,IAAK,IAAI,KAAa,EAChB,EAAwB,eAAe,KACzC,EAAkB,GAAU,EAAA,GAAQ,EAAkB,GAAe,EAAwB,KAIjG,OAAO,C,CAEX,CAzB6E,CAAyB,IAE3E,EAC3B,CAEA,SAAA,GAA6B,GAC3B,MAA2B,mBAAb,CAChB,ECHA,SAAA,GAAA,SAAA,IAAA,IAAA,EAAA,OAAA,KAAA,MAAA,KAAA,YAAA,K,OA0BU,EAAA,uBAAyB,WAAM,OAAA,EAAK,aAAa,E,EA1B3B,OACvB,EAAA,UAAA,kBAAP,WACE,GAAe,QAAQ,KAAK,uB,EAGvB,EAAA,UAAA,qBAAP,WACE,GAAe,UAAU,KAAK,uB,EAGzB,EAAA,UAAA,OAAP,eAAA,EAAA,KACU,EAAA,KAAA,MAAA,iBACR,OACE,gBAAC,GAAkB,SAAQ,MACxB,SAAC,GACA,IAAI,ECvBd,SAAoC,EAAyB,GACnD,IAAA,GAAA,GAAA,IAAA,sBAAA,IAAA,EAAA,CAAA,SAAA,GAAA,eAAA,IAAA,EAER,MAAO,CACL,eAAgB,CACd,SAAU,GAAc,EAAe,SAAU,EAAM,UACvD,eAAgB,GAAoB,EAAe,eAAgB,EAAM,gBACzE,qBAAqB,GAG3B,CDa2B,CAAoB,EAAK,MAAO,GAMjD,OAJI,IACF,EAAa,EAAiB,IAGzB,gBAAC,GAAkB,SAAQ,CAAC,MAAO,GAAa,EAAK,MAAM,S,IAO5E,CA3BA,CAAgC,aEThC,SAAA,GAA6C,EAAiB,GAC5D,IAAK,IAAM,KAAQ,EACb,EAAO,eAAe,KAEvB,EAAa,GAAQ,EAAO,IAIjC,OAAO,CACT,C,YCbE,EACA,EACA,GAIA,OAAO,SAEL,GAGA,I,EAAM,IAAW,EAAA,SAAA,GAIf,SAAA,EAAY,GAAZ,IAAA,EACE,EAAA,KAAA,KAAM,IAAM,K,OAEZ,EAAK,kBAAoB,EAAK,kBAAkB,KAAK,G,EAuCzD,OA9C6D,OAUpD,EAAA,UAAA,kBAAP,WACE,GAAe,QAAQ,KAAK,kB,EAGvB,EAAA,UAAA,qBAAP,WACE,GAAe,UAAU,KAAK,kB,EAGzB,EAAA,UAAA,OAAP,eAAA,EAAA,KACE,OACE,gBAAC,GAAkB,SAAQ,MACxB,SAAC,GACA,IAAM,EAAe,GAAe,YAAY,EAAQ,EAAO,EAAQ,gBAGjE,EAAiB,EAAK,MAO5B,GAJI,EAAa,QAAyC,mBAAxB,EAAa,SAC7C,EAAa,OAAS,EAAa,OAAM,EAAA,GAAM,EAAiB,KAG9D,EAAc,CAChB,IAAM,EAAe,EAAgB,EAAa,OAAQ,EAAe,QACzE,OAAO,gBAAC,EAAiB,EAAA,GAAK,EAAkB,EAAc,CAAE,OAAQ,I,CAG1E,OAAO,gBAAC,EAAiB,EAAA,GAAK,EAAkB,G,KAMhD,EAAA,UAAA,kBAAR,WACE,KAAK,a,EAET,C,CA9CiB,CAA4C,cAC7C,YAAsB,aAAe,E,GA+CrD,OAAO,GAAa,EAAmB,E,CAE3C,CC5DA,SAAA,GAA0B,EAAoB,GAC5C,YAD4C,IAAA,OAAA,GACrC,IAAW,GCHpB,SAAiC,GAC/B,IAAI,ECD2B,EDK/B,OAHI,ICF2B,EDED,ICDQ,EAAS,WDE7C,EAAS,EAAM,SAAS,QAEnB,CACT,CDH2C,CAAiB,IAAY,EAAM,YAAe,EAAM,WACnG,CGFA,SAAA,GAAgC,EAA4B,EAA2B,QAAA,IAAA,OAAA,GACrF,IAAI,GAAc,EAClB,GAAI,GAAU,EACZ,GAAI,EAEF,IADA,GAAc,EACP,GAAO,CACZ,IAAI,EAAiC,GAAU,GAC/C,GAAI,IAAe,EAAQ,CACzB,GAAc,EACd,K,CAEF,EAAQ,C,MAED,EAAO,WAChB,EAAc,EAAO,SAAS,IAGlC,OAAO,CACT,CCnBA,SAAA,GAAqC,EAA6B,GAChE,OAAK,GAAW,IAAY,SAAS,KAG9B,EAAc,GAAW,EAAU,GAAqB,GAAU,GAAU,GAF1E,IAGX,C,YCZmB,EAA2B,EAAmB,EAA+B,GAG9F,OAFA,EAAQ,iBAAiB,EAAW,EAAU,GAEvC,WAAM,OAAA,EAAQ,oBAAoB,EAAW,EAAU,EAAQ,CACxE,CCJO,IAAM,GAAwB,sBCUrC,SAAA,GAAsC,EAAqB,GACzD,IAAM,EAAe,GACnB,GACA,SAAC,GAA6B,OAAA,IAAW,GAAe,EAAY,aAAa,GAAsB,IAEzG,OAAwB,OAAjB,GAAyB,EAAa,aAAa,GAC5D,CCfA,SAAA,GAA2B,GACzB,IAAM,EAAQ,IAAI,MAAM,eAExB,EAAM,UAAU,SAAS,GAAM,GAC/B,EAAO,cAAc,EACvB,CCDA,SAAA,GAA2D,EAAW,GACpE,IAAK,IAAI,KAAQ,EACX,EAAQ,eAAe,KAEzB,EAAO,GAAQ,GAAe,EAAQ,EAAO,GAAO,EAAQ,IAGlE,CCIA,SAAA,GACE,EACA,EACA,GAEA,OAAO,GACL,EACA,GACA,GACA,GACA,EACA,EAEJ,CAOA,SAAA,GACE,EACA,EACA,GAEA,OAAO,GACL,EACA,GACA,GACA,GACA,EACA,EAEJ,CAiEA,SAAA,GAAgC,GAC9B,IAAI,EAA8B,GAAe,EAAa,GAAa,GAAM,GAAO,GAAO,GAE/F,QAAI,IACF,GAAW,IACJ,EAGX,CAQA,SAAA,GACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAK,IAAoB,GAAkB,IAAmB,EAC5D,OAAO,KAGT,IAAI,EAA0B,GAAiB,GAG/C,GACE,GACA,IACC,IAAiC,GAAmB,KAAmB,GAAsB,IAC9F,CACA,IAAM,EAAa,GACjB,EACA,EAAe,kBACf,GACA,GACA,EACA,EACA,EACA,GAGF,GAAI,EAAY,CACd,GAAK,GAAY,GAAkB,GAAY,KAAW,EACxD,OAAO,EAGT,IAAM,EAAyB,GAC7B,EACA,EAAW,wBACX,GACA,GACA,EACA,EACA,EACA,GAEF,GAAI,EACF,OAAO,EAST,IANA,IAAI,EAAmB,EAAW,cAM3B,GAAoB,IAAqB,GAAgB,CAC9D,IAAM,EAAwB,GAC5B,EACA,EAAiB,wBACjB,GACA,GACA,EACA,EACA,EACA,GAGF,GAAI,EACF,OAAO,EAGT,EAAmB,EAAiB,a,GAM1C,GAAI,GAAa,GAA2B,GAAkB,EAAgB,GAC5E,OAAO,EAIT,IAAM,EAAe,GACnB,EACA,EAAe,wBACf,GACA,GACA,EACA,EACA,EACA,GAGF,OAAI,IAKC,EAaE,KAZE,GACL,EACA,EAAe,eACf,GACA,GACA,EACA,EACA,EACA,GAKN,CASA,SAAA,GACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAK,GAAmB,IAAmB,GAAe,IAA2B,EACnF,OAAO,KAGT,IAAI,EAA0B,GAAiB,GAG/C,GAAI,GAAa,GAA2B,GAAkB,EAAgB,GAC5E,OAAO,EAIT,IACG,GACD,IACC,IAAiC,GAAmB,KAAmB,GAAsB,IAC9F,CACA,IAAM,EAAa,GACjB,EACA,EAAe,mBACf,GACA,GACA,EACA,EACA,EACA,GAGF,GAAI,EACF,OAAO,C,CAIX,GAAI,IAAmB,EACrB,OAAO,KAIT,IAAM,EAAe,GACnB,EACA,EAAe,oBACf,GACA,GACA,EACA,EACA,EACA,GAGF,OAAI,IAIC,EAaE,KAZE,GACL,EACA,EAAe,eACf,GACA,GACA,EACA,EACA,EACA,GAKN,CAOA,SAAA,GAAiC,GAE/B,IAAK,IAAY,EAAQ,aACvB,OAAO,EAGT,IAAM,EAAsB,EAAQ,aAjVT,mBAoV3B,OAAI,QAC6B,SAAxB,EAKkB,IAAzB,EAAQ,cACiB,OAAzB,EAAQ,eAEuB,IAA9B,EAAgB,SAErB,CAQA,SAAA,GAAkC,EAAsB,GAEtD,IAAK,GAAY,EAA8B,SAC7C,OAAO,EAGT,IAAI,EAAW,EACX,EAAyB,KAEzB,GAAW,EAAQ,eACrB,EAAyB,EAAQ,aAAa,eAG5C,EAAW,SAAS,EAAwB,KAIhD,IAAI,EAAuB,EAAQ,aAAe,EAAQ,aAzX7B,qBAyXoE,KAC7F,EAA2C,OAA3B,GAAmC,GAAY,EAE7D,IACF,GACuB,UAAzB,IACqB,MAApB,EAAQ,SACa,WAApB,EAAQ,SACY,UAApB,EAAQ,SACY,aAApB,EAAQ,SACiB,SAAzB,GACA,GAEJ,OAAO,GAA8B,IAAd,GAAmB,EAAS,CACrD,CAOA,SAAA,GAAmC,GACjC,SAAU,GAAW,EAAQ,cAAkB,EAAQ,aA7Y1B,qBA8Y/B,CAOA,SAAA,GAAsC,GACpC,SAAU,IAAW,EAAQ,cAAkE,SAAlD,EAAQ,aArZvB,yBAsZhC,CAsBA,SAAA,GAAgC,EAAsB,GACpD,MAAkE,SC/apE,SAAyC,EAAsB,GAC7D,IAAI,EAAe,GAAqB,GAAS,SAAC,GAA6B,OAAA,EAAY,aAAa,EAAU,IAClH,OAAO,GAAgB,EAAa,aAAa,EACnD,CD4aS,CAAyB,EAAS,EAC3C,CAEA,IAAI,QAAqF,EAQzF,SAAA,GAA2B,GACzB,GAAI,EAAS,CAEX,GAAI,GAEF,YADA,GAA6B,GAI/B,GAA6B,EAE7B,IAAM,EAAM,GAAU,GAElB,GAEF,EAAI,uBAAsB,WACxB,IAA8B,GAA2B,QAGzD,QAA6B,C,IAIrC,CEvdA,IAAM,GAA6B,CACjC,WACA,SACA,qBACA,4BACA,oBACA,4BACA,mCACA,wBACA,sBACA,0BACA,6BACA,qBACA,wBCJF,SAAA,GAA0E,GACxE,GAAgB,EAAK,CACnB,kBAAmB,GACnB,mBAAoB,GACpB,qBAAsB,IAE1B,CAEA,SAAA,KACE,GAAiB,KAAK,MAAM,aAAc,KAC5C,CAEA,SAAA,GAAmB,GACb,EAAU,eAAiB,KAAK,MAAM,eAExC,GAAkB,EAAkB,aAAc,MAClD,GAAiB,KAAK,MAAM,aAAc,MAE9C,CAEA,SAAA,KACE,GAAiB,KAAK,MAAM,aAAc,KAC5C,CAEA,SAAA,GAAsC,EAA2C,GAC3E,IAC0B,iBAAjB,EACR,EAAgD,QAAU,EAC1B,mBAAjB,GACf,EAA0B,GAGjC,CCpCA,ICDI,GDCE,GAA+B,uEAM/B,GAA4B,gCAG5B,GAAqC,OAUrC,GAAiC,6MAsCvC,SAAA,GAA4B,EAAwC,EAAgB,GAClF,OAAK,GAIL,EAlBF,SAA4B,GAK1B,OAHA,GADA,EAAc,EAAY,QAAQ,GAAsB,KAC9B,QAAQ,GAA4B,MACpC,MAG5B,CAYgB,CAAmB,GAG7B,GAAuB,KAAK,KAAkB,GAAsB,GAAkB,KAAK,GACtF,GA5CX,SAA0B,EAAqB,GAC7C,IAAI,EAAW,GAET,EAAmB,EAAY,MAAM,KAY3C,OAVsB,IAAlB,EAAO,QACT,GAAY,EAAO,GAAG,OAAO,GAAG,cAChC,GAAY,EAAO,GAAG,OAAO,GAAG,eACL,IAAlB,EAAO,QAChB,GAAY,EAAO,GAAG,OAAO,GAAG,cAChC,GAAY,EAAO,GAAG,OAAO,GAAG,eACL,IAAlB,EAAO,SAChB,GAAY,EAAO,GAAG,OAAO,GAAG,eAG9B,GAAS,EAAS,OAAS,EACtB,EAAS,OAAO,GAAK,EAAS,OAAO,GAGvC,CACT,CA2BS,CAAiB,EAAa,IAV5B,EAWX,CEzEA,IAAM,GAAa,EAAW,cAE1B,IAAc,GAAW,SAC3B,EAAW,cAAc,SAgC3B,WACE,IACF,IAxBA,IAAI,GAAgB,EACd,GAAe,CAAE,OAAO,GACxB,GAAmB,GACrB,GAA8B,oBAAZ,QAA0B,KAAO,QAkEvD,SAAA,GAAkF,EAAO,GAEvF,QAFuF,IAAA,MAAA,MAElF,GACH,OAAO,EAGT,IAAI,EACA,EAAY,EACZ,EAAoB,GAGxB,OAAO,W,IAA0B,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,GAAA,UAAA,GAC/B,IAAI,EAAmB,QAEN,IAAb,GAA0B,IAAsB,IAAkB,EAAe,GAAK,EAAY,KACpG,EAAW,KACX,EAAY,EACZ,EAAoB,IAGtB,EAAc,EAGd,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAI,EAAM,GAAc,EAAK,IAExB,EAAY,IAAI,IAAI,IACvB,EAAY,IAAI,IAAI,EAAK,MAG3B,EAAc,EAAY,IAAI,IAAI,E,CAQpC,OALK,EAAY,eAAe,WAC9B,EAAY,MAAQ,EAAE,WAAA,EAAI,GAC1B,KAGK,EAAY,K,CAEvB,CAIA,SAAA,GAAuB,GACrB,OAAK,EAEqB,iBAAR,GAAmC,mBAAR,EACpC,GACG,GAAY,KACtB,GAAY,GAAO,CAAE,IAAG,IAGnB,GAAY,IAPV,EAQX,CAEA,SAAA,KACE,MAAO,CACL,IAAK,GAAW,IAAI,GAAa,KAErC,CC3IA,SAAA,GAA8B,G,IAAoB,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,GAAA,UAAA,GAChD,IAAkB,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAI,CACpB,GAAO,GAAU,GADL,EAAA,G,CAId,OAAO,CACT,CASA,SAAA,GAAmB,EAAW,EAAW,GAGvC,IAAK,IAAI,UAH8B,IAAA,MAAA,IACvC,EAAmB,KAAK,GAEP,EACf,GAAI,EAAO,eAAe,GAAO,CAC/B,IAAM,EAAQ,EAAO,GAErB,GAAqB,iBAAV,EAAoB,CAC7B,IAAM,EAAsB,EAAmB,QAAQ,IAAU,EAGhE,EAAe,GAAQ,EAAsB,EAAQ,GAAO,EAAO,IAAS,GAAI,EAAO,E,MAExF,EAAO,GAAQ,C,CAOrB,OAFA,EAAmB,MAEZ,CACT,CCrCO,ICJH,GDIS,GAAQ,WACnB,SAAK,QAAW,OAAO,WAAc,OAAO,UAAU,YAG/C,oBAAoB,KAAK,OAAO,UAAU,UACnD,ECHA,SAAA,GAAsB,GACpB,QAA2B,IAAhB,IAA+B,EAAO,CAC/C,IAAM,EAA8B,oBAAX,QAA0B,OAAO,UAAU,UACpE,KAAgB,IAAiD,IAApC,EAAU,QAAQ,Y,CAEjD,QAAS,EACX,CCLO,IA2MM,GA9HwB,CACnC,iBACA,eACA,SACA,gBACA,YACA,SACA,kBACA,oBACA,MACA,QACA,eACA,YACA,WACA,UACA,cACA,cACA,UACA,YACA,UACA,WACA,UACA,YACA,OACA,UACA,UACA,kBACA,cACA,WACA,SACA,cACA,OACA,WACA,UACA,QACA,MACA,WACA,YACA,UACA,OACA,aACA,cACA,aACA,iBACA,aACA,cACA,UACA,SACA,SACA,OACA,WACA,UACA,YACA,OACA,KACA,YACA,YACA,KACA,YACA,UACA,OACA,OACA,OACA,OACA,MACA,WACA,eACA,cACA,MACA,YACA,QACA,aACA,SACA,MACA,YACA,WACA,QACA,OACA,aACA,OACA,UACA,UACA,cACA,SACA,UACA,aACA,WACA,MACA,WACA,OACA,OACA,UACA,UACA,QACA,SACA,YACA,WACA,WACA,QACA,OACA,QACA,OACA,aACA,MACA,SACA,UACA,SACA,QACA,OACA,QACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,QACA,QAQyD,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","file":"/npm/enchoice-fabric-react-lib@1.0.2/dist/enchoice-fabric-react-lib.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/enchoice-fabric-react-lib@1.0.2/dist/enchoice-fabric-react-lib.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// A packages cache that makes sure that we don't inject the same packageName twice in the same bundle -\r\n// this cache is local to the module closure inside this bundle\r\nconst packagesCache: { [name: string]: string } = {};\r\nexport function setVersion(packageName: string, packageVersion: string): void {\r\n  if (typeof window !== 'undefined') {\r\n    // tslint:disable-next-line:no-any\r\n    const packages = ((window as any).__packages__ = (window as any).__packages__ || {});\r\n\r\n    // We allow either the global packages or local packages caches to invalidate so testing can just clear the global to set this state\r\n    if (!packages[packageName] || !packagesCache[packageName]) {\r\n      packagesCache[packageName] = packageVersion;\r\n      const versions = (packages[packageName] = packages[packageName] || []);\r\n      versions.push(packageVersion);\r\n    }\r\n  }\r\n}\r\n","import { setVersion } from './setVersion';\r\nexport { setVersion };\r\n\r\nsetVersion('@uifabric/set-version', '6.0.0');\r\n","// office-ui-fabric-react@6.167.2\n  // Do not modify this file, the file is generated as part of publish. The checked in version is a placeholder only.\n  import { setVersion } from '@uifabric/set-version';\n  setVersion('office-ui-fabric-react', '6.167.2');","declare function setTimeout(cb: Function, delay: number): number;\r\ndeclare function setInterval(cb: Function, delay: number): number;\r\n\r\n/**\r\n * Bugs often appear in async code when stuff gets disposed, but async operations don't get canceled.\r\n * This Async helper class solves these issues by tying async code to the lifetime of a disposable object.\r\n *\r\n * Usage: Anything class extending from BaseModel can access this helper via this.async. Otherwise create a\r\n * new instance of the class and remember to call dispose() during your code's dispose handler.\r\n *\r\n * @public\r\n */\r\nexport class Async {\r\n  private _timeoutIds: { [id: number]: boolean } | null = null;\r\n  private _immediateIds: { [id: number]: boolean } | null = null;\r\n  private _intervalIds: { [id: number]: boolean } | null = null;\r\n  private _animationFrameIds: { [id: number]: boolean } | null = null;\r\n  private _isDisposed: boolean;\r\n  private _parent: object | null;\r\n  // tslint:disable-next-line:no-any\r\n  private _onErrorHandler: ((e: any) => void) | undefined;\r\n  private _noop: () => void;\r\n  // tslint:disable-next-line:no-any\r\n  constructor(parent?: object, onError?: (e: any) => void) {\r\n    this._isDisposed = false;\r\n    this._parent = parent || null;\r\n    this._onErrorHandler = onError;\r\n    this._noop = () => {\r\n      /* do nothing */\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Dispose function, clears all async operations.\r\n   */\r\n  public dispose(): void {\r\n    let id;\r\n\r\n    this._isDisposed = true;\r\n    this._parent = null;\r\n\r\n    // Clear timeouts.\r\n    if (this._timeoutIds) {\r\n      for (id in this._timeoutIds) {\r\n        if (this._timeoutIds.hasOwnProperty(id)) {\r\n          this.clearTimeout(parseInt(id, 10));\r\n        }\r\n      }\r\n\r\n      this._timeoutIds = null;\r\n    }\r\n\r\n    // Clear immediates.\r\n    if (this._immediateIds) {\r\n      for (id in this._immediateIds) {\r\n        if (this._immediateIds.hasOwnProperty(id)) {\r\n          this.clearImmediate(parseInt(id, 10));\r\n        }\r\n      }\r\n\r\n      this._immediateIds = null;\r\n    }\r\n\r\n    // Clear intervals.\r\n    if (this._intervalIds) {\r\n      for (id in this._intervalIds) {\r\n        if (this._intervalIds.hasOwnProperty(id)) {\r\n          this.clearInterval(parseInt(id, 10));\r\n        }\r\n      }\r\n      this._intervalIds = null;\r\n    }\r\n\r\n    // Clear animation frames.\r\n    if (this._animationFrameIds) {\r\n      for (id in this._animationFrameIds) {\r\n        if (this._animationFrameIds.hasOwnProperty(id)) {\r\n          this.cancelAnimationFrame(parseInt(id, 10));\r\n        }\r\n      }\r\n\r\n      this._animationFrameIds = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * SetTimeout override, which will auto cancel the timeout during dispose.\r\n   * @param callback - Callback to execute.\r\n   * @param duration - Duration in milliseconds.\r\n   * @returns The setTimeout id.\r\n   */\r\n  public setTimeout(callback: () => void, duration: number): number {\r\n    let timeoutId = 0;\r\n\r\n    if (!this._isDisposed) {\r\n      if (!this._timeoutIds) {\r\n        this._timeoutIds = {};\r\n      }\r\n\r\n      /* tslint:disable:ban-native-functions */\r\n      timeoutId = setTimeout(() => {\r\n        // Time to execute the timeout, enqueue it as a foreground task to be executed.\r\n\r\n        try {\r\n          // Now delete the record and call the callback.\r\n          if (this._timeoutIds) {\r\n            delete this._timeoutIds[timeoutId];\r\n          }\r\n          callback.apply(this._parent);\r\n        } catch (e) {\r\n          if (this._onErrorHandler) {\r\n            this._onErrorHandler(e);\r\n          }\r\n        }\r\n      }, duration);\r\n      /* tslint:enable:ban-native-functions */\r\n\r\n      this._timeoutIds[timeoutId] = true;\r\n    }\r\n\r\n    return timeoutId;\r\n  }\r\n\r\n  /**\r\n   * Clears the timeout.\r\n   * @param id - Id to cancel.\r\n   */\r\n  public clearTimeout(id: number): void {\r\n    if (this._timeoutIds && this._timeoutIds[id]) {\r\n      /* tslint:disable:ban-native-functions */\r\n      clearTimeout(id);\r\n      delete this._timeoutIds[id];\r\n      /* tslint:enable:ban-native-functions */\r\n    }\r\n  }\r\n\r\n  /**\r\n   * SetImmediate override, which will auto cancel the immediate during dispose.\r\n   * @param callback - Callback to execute.\r\n   * @returns The setTimeout id.\r\n   */\r\n  public setImmediate(callback: () => void): number {\r\n    let immediateId = 0;\r\n\r\n    if (!this._isDisposed) {\r\n      if (!this._immediateIds) {\r\n        this._immediateIds = {};\r\n      }\r\n\r\n      /* tslint:disable:ban-native-functions */\r\n      let setImmediateCallback = () => {\r\n        // Time to execute the timeout, enqueue it as a foreground task to be executed.\r\n\r\n        try {\r\n          // Now delete the record and call the callback.\r\n          if (this._immediateIds) {\r\n            delete this._immediateIds[immediateId];\r\n          }\r\n          callback.apply(this._parent);\r\n        } catch (e) {\r\n          this._logError(e);\r\n        }\r\n      };\r\n\r\n      immediateId = window.setImmediate ? window.setImmediate(setImmediateCallback) : window.setTimeout(setImmediateCallback, 0);\r\n      /* tslint:enable:ban-native-functions */\r\n\r\n      this._immediateIds[immediateId] = true;\r\n    }\r\n\r\n    return immediateId;\r\n  }\r\n\r\n  /**\r\n   * Clears the immediate.\r\n   * @param id - Id to cancel.\r\n   */\r\n  public clearImmediate(id: number): void {\r\n    if (this._immediateIds && this._immediateIds[id]) {\r\n      /* tslint:disable:ban-native-functions */\r\n      window.clearImmediate ? window.clearImmediate(id) : window.clearTimeout(id);\r\n      delete this._immediateIds[id];\r\n      /* tslint:enable:ban-native-functions */\r\n    }\r\n  }\r\n\r\n  /**\r\n   * SetInterval override, which will auto cancel the timeout during dispose.\r\n   * @param callback - Callback to execute.\r\n   * @param duration - Duration in milliseconds.\r\n   * @returns The setTimeout id.\r\n   */\r\n  public setInterval(callback: () => void, duration: number): number {\r\n    let intervalId = 0;\r\n\r\n    if (!this._isDisposed) {\r\n      if (!this._intervalIds) {\r\n        this._intervalIds = {};\r\n      }\r\n\r\n      /* tslint:disable:ban-native-functions */\r\n      intervalId = setInterval(() => {\r\n        // Time to execute the interval callback, enqueue it as a foreground task to be executed.\r\n        try {\r\n          callback.apply(this._parent);\r\n        } catch (e) {\r\n          this._logError(e);\r\n        }\r\n      }, duration);\r\n      /* tslint:enable:ban-native-functions */\r\n\r\n      this._intervalIds[intervalId] = true;\r\n    }\r\n\r\n    return intervalId;\r\n  }\r\n\r\n  /**\r\n   * Clears the interval.\r\n   * @param id - Id to cancel.\r\n   */\r\n  public clearInterval(id: number): void {\r\n    if (this._intervalIds && this._intervalIds[id]) {\r\n      /* tslint:disable:ban-native-functions */\r\n      clearInterval(id);\r\n      delete this._intervalIds[id];\r\n      /* tslint:enable:ban-native-functions */\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates a function that, when executed, will only call the func function at most once per\r\n   * every wait milliseconds. Provide an options object to indicate that func should be invoked\r\n   * on the leading and/or trailing edge of the wait timeout. Subsequent calls to the throttled\r\n   * function will return the result of the last func call.\r\n   *\r\n   * Note: If leading and trailing options are true func will be called on the trailing edge of\r\n   * the timeout only if the the throttled function is invoked more than once during the wait timeout.\r\n   *\r\n   * @param func - The function to throttle.\r\n   * @param wait - The number of milliseconds to throttle executions to. Defaults to 0.\r\n   * @param options - The options object.\r\n   * @returns The new throttled function.\r\n   */\r\n  public throttle<T extends Function>(\r\n    func: T,\r\n    wait?: number,\r\n    options?: {\r\n      leading?: boolean;\r\n      trailing?: boolean;\r\n    }\r\n  ): T | (() => void) {\r\n    if (this._isDisposed) {\r\n      return this._noop;\r\n    }\r\n\r\n    let waitMS = wait || 0;\r\n    let leading = true;\r\n    let trailing = true;\r\n    let lastExecuteTime = 0;\r\n    let lastResult: T;\r\n    // tslint:disable-next-line:no-any\r\n    let lastArgs: any[];\r\n    let timeoutId: number | null = null;\r\n\r\n    if (options && typeof options.leading === 'boolean') {\r\n      leading = options.leading;\r\n    }\r\n\r\n    if (options && typeof options.trailing === 'boolean') {\r\n      trailing = options.trailing;\r\n    }\r\n\r\n    let callback = (userCall?: boolean) => {\r\n      let now = new Date().getTime();\r\n      let delta = now - lastExecuteTime;\r\n      let waitLength = leading ? waitMS - delta : waitMS;\r\n      if (delta >= waitMS && (!userCall || leading)) {\r\n        lastExecuteTime = now;\r\n        if (timeoutId) {\r\n          this.clearTimeout(timeoutId);\r\n          timeoutId = null;\r\n        }\r\n        lastResult = func.apply(this._parent, lastArgs);\r\n      } else if (timeoutId === null && trailing) {\r\n        timeoutId = this.setTimeout(callback, waitLength);\r\n      }\r\n\r\n      return lastResult;\r\n    };\r\n\r\n    // tslint:disable-next-line:no-any\r\n    let resultFunction: () => T = (...args: any[]) => {\r\n      lastArgs = args;\r\n      return callback(true);\r\n    };\r\n\r\n    return resultFunction;\r\n  }\r\n\r\n  /**\r\n   * Creates a function that will delay the execution of func until after wait milliseconds have\r\n   * elapsed since the last time it was invoked. Provide an options object to indicate that func\r\n   * should be invoked on the leading and/or trailing edge of the wait timeout. Subsequent calls\r\n   * to the debounced function will return the result of the last func call.\r\n   *\r\n   * Note: If leading and trailing options are true func will be called on the trailing edge of\r\n   * the timeout only if the the debounced function is invoked more than once during the wait\r\n   * timeout.\r\n   *\r\n   * @param func - The function to debounce.\r\n   * @param wait - The number of milliseconds to delay.\r\n   * @param options - The options object.\r\n   * @returns The new debounced function.\r\n   */\r\n  public debounce<T extends Function>(\r\n    func: T,\r\n    wait?: number,\r\n    options?: {\r\n      leading?: boolean;\r\n      maxWait?: number;\r\n      trailing?: boolean;\r\n    }\r\n  ): ICancelable<T> & (() => void) {\r\n    if (this._isDisposed) {\r\n      let noOpFunction: ICancelable<T> & (() => T) = (() => {\r\n        /** Do nothing */\r\n      }) as ICancelable<T> & (() => T);\r\n\r\n      noOpFunction.cancel = () => {\r\n        return;\r\n      };\r\n      /* tslint:disable:no-any */\r\n      noOpFunction.flush = (() => null) as any;\r\n      /* tslint:enable:no-any */\r\n      noOpFunction.pending = () => false;\r\n\r\n      return noOpFunction;\r\n    }\r\n\r\n    let waitMS = wait || 0;\r\n    let leading = false;\r\n    let trailing = true;\r\n    let maxWait: number | null = null;\r\n    let lastCallTime = 0;\r\n    let lastExecuteTime = new Date().getTime();\r\n    let lastResult: T;\r\n    // tslint:disable-next-line:no-any\r\n    let lastArgs: any[];\r\n    let timeoutId: number | null = null;\r\n\r\n    if (options && typeof options.leading === 'boolean') {\r\n      leading = options.leading;\r\n    }\r\n\r\n    if (options && typeof options.trailing === 'boolean') {\r\n      trailing = options.trailing;\r\n    }\r\n\r\n    if (options && typeof options.maxWait === 'number' && !isNaN(options.maxWait)) {\r\n      maxWait = options.maxWait;\r\n    }\r\n\r\n    let markExecuted = (time: number) => {\r\n      if (timeoutId) {\r\n        this.clearTimeout(timeoutId);\r\n        timeoutId = null;\r\n      }\r\n      lastExecuteTime = time;\r\n    };\r\n\r\n    let invokeFunction = (time: number) => {\r\n      markExecuted(time);\r\n      lastResult = func.apply(this._parent, lastArgs);\r\n    };\r\n\r\n    let callback = (userCall?: boolean) => {\r\n      let now = new Date().getTime();\r\n      let executeImmediately = false;\r\n      if (userCall) {\r\n        if (leading && now - lastCallTime >= waitMS) {\r\n          executeImmediately = true;\r\n        }\r\n        lastCallTime = now;\r\n      }\r\n      let delta = now - lastCallTime;\r\n      let waitLength = waitMS - delta;\r\n      let maxWaitDelta = now - lastExecuteTime;\r\n      let maxWaitExpired = false;\r\n\r\n      if (maxWait !== null) {\r\n        // maxWait only matters when there is a pending callback\r\n        if (maxWaitDelta >= maxWait && timeoutId) {\r\n          maxWaitExpired = true;\r\n        } else {\r\n          waitLength = Math.min(waitLength, maxWait - maxWaitDelta);\r\n        }\r\n      }\r\n\r\n      if (delta >= waitMS || maxWaitExpired || executeImmediately) {\r\n        invokeFunction(now);\r\n      } else if ((timeoutId === null || !userCall) && trailing) {\r\n        timeoutId = this.setTimeout(callback, waitLength);\r\n      }\r\n\r\n      return lastResult;\r\n    };\r\n\r\n    let pending = (): boolean => {\r\n      return !!timeoutId;\r\n    };\r\n\r\n    let cancel = (): void => {\r\n      if (pending()) {\r\n        // Mark the debounced function as having executed\r\n        markExecuted(new Date().getTime());\r\n      }\r\n    };\r\n\r\n    let flush = (): T => {\r\n      if (pending()) {\r\n        invokeFunction(new Date().getTime());\r\n      }\r\n\r\n      return lastResult;\r\n    };\r\n\r\n    // tslint:disable-next-line:no-any\r\n    let resultFunction: ICancelable<T> & (() => T) = ((...args: any[]) => {\r\n      lastArgs = args;\r\n      return callback(true);\r\n    }) as ICancelable<T> & (() => T);\r\n\r\n    resultFunction.cancel = cancel;\r\n    resultFunction.flush = flush;\r\n    resultFunction.pending = pending;\r\n\r\n    return resultFunction;\r\n  }\r\n\r\n  public requestAnimationFrame(callback: () => void): number {\r\n    let animationFrameId = 0;\r\n\r\n    if (!this._isDisposed) {\r\n      if (!this._animationFrameIds) {\r\n        this._animationFrameIds = {};\r\n      }\r\n\r\n      /* tslint:disable:ban-native-functions */\r\n      let animationFrameCallback = () => {\r\n        try {\r\n          // Now delete the record and call the callback.\r\n          if (this._animationFrameIds) {\r\n            delete this._animationFrameIds[animationFrameId];\r\n          }\r\n\r\n          callback.apply(this._parent);\r\n        } catch (e) {\r\n          this._logError(e);\r\n        }\r\n      };\r\n\r\n      animationFrameId = window.requestAnimationFrame\r\n        ? window.requestAnimationFrame(animationFrameCallback)\r\n        : window.setTimeout(animationFrameCallback, 0);\r\n      /* tslint:enable:ban-native-functions */\r\n\r\n      this._animationFrameIds[animationFrameId] = true;\r\n    }\r\n\r\n    return animationFrameId;\r\n  }\r\n\r\n  public cancelAnimationFrame(id: number): void {\r\n    if (this._animationFrameIds && this._animationFrameIds[id]) {\r\n      /* tslint:disable:ban-native-functions */\r\n      window.cancelAnimationFrame ? window.cancelAnimationFrame(id) : window.clearTimeout(id);\r\n      /* tslint:enable:ban-native-functions */\r\n      delete this._animationFrameIds[id];\r\n    }\r\n  }\r\n\r\n  // tslint:disable-next-line:no-any\r\n  protected _logError(e: any): void {\r\n    if (this._onErrorHandler) {\r\n      this._onErrorHandler(e);\r\n    }\r\n  }\r\n}\r\n\r\nexport type ICancelable<T> = {\r\n  flush: () => T;\r\n  cancel: () => void;\r\n  pending: () => boolean;\r\n};\r\n","import { IStyle } from './IStyle';\r\n\r\nexport const InjectionMode = {\r\n  /**\r\n   * Avoids style injection, use getRules() to read the styles.\r\n   */\r\n  none: 0 as 0,\r\n\r\n  /**\r\n   * Inserts rules using the insertRule api.\r\n   */\r\n  insertNode: 1 as 1,\r\n\r\n  /**\r\n   * Appends rules using appendChild.\r\n   */\r\n  appendChild: 2 as 2\r\n};\r\n\r\nexport type InjectionMode = typeof InjectionMode[keyof typeof InjectionMode];\r\n\r\n/**\r\n * CSP settings for the stylesheet\r\n */\r\nexport interface ICSPSettings {\r\n  /**\r\n   * Nonce to inject into script tag\r\n   */\r\n  nonce?: string;\r\n}\r\n\r\n/**\r\n * Stylesheet config.\r\n *\r\n * @public\r\n */\r\nexport interface IStyleSheetConfig {\r\n  /**\r\n   * Injection mode for how rules are inserted.\r\n   */\r\n  injectionMode?: InjectionMode;\r\n\r\n  /**\r\n   * Default 'displayName' to use for a className.\r\n   * @defaultvalue 'css'\r\n   */\r\n  defaultPrefix?: string;\r\n\r\n  /**\r\n   * Default 'namespace' to attach before the className.\r\n   */\r\n  namespace?: string;\r\n\r\n  /**\r\n   * CSP settings\r\n   */\r\n  cspSettings?: ICSPSettings;\r\n\r\n  /**\r\n   * Callback executed when a rule is inserted.\r\n   */\r\n  onInsertRule?: (rule: string) => void;\r\n}\r\n\r\nconst STYLESHEET_SETTING = '__stylesheet__';\r\n\r\n// tslint:disable-next-line:no-any\r\nconst _fileScopedGlobal: { [key: string]: any } = {};\r\nlet _stylesheet: Stylesheet;\r\n\r\n/**\r\n * Represents the state of styles registered in the page. Abstracts\r\n * the surface for adding styles to the stylesheet, exposes helpers\r\n * for reading the styles registered in server rendered scenarios.\r\n *\r\n * @public\r\n */\r\nexport class Stylesheet {\r\n  private _lastStyleElement?: HTMLStyleElement;\r\n  private _styleElement?: HTMLStyleElement;\r\n  private _rules: string[] = [];\r\n  private _preservedRules: string[] = [];\r\n  private _config: IStyleSheetConfig;\r\n  private _rulesToInsert: string[] = [];\r\n  private _counter = 0;\r\n  private _keyToClassName: { [key: string]: string } = {};\r\n  private _onResetCallbacks: (() => void)[] = [];\r\n\r\n  // tslint:disable-next-line:no-any\r\n  private _classNameToArgs: { [key: string]: { args: any; rules: string[] } } = {};\r\n\r\n  /**\r\n   * Gets the singleton instance.\r\n   */\r\n  public static getInstance(): Stylesheet {\r\n    // tslint:disable-next-line:no-any\r\n    const global: any = typeof window !== 'undefined' ? window : _fileScopedGlobal;\r\n    _stylesheet = global[STYLESHEET_SETTING] as Stylesheet;\r\n\r\n    if (!_stylesheet || (_stylesheet._lastStyleElement && _stylesheet._lastStyleElement.ownerDocument !== document)) {\r\n      // tslint:disable-next-line:no-string-literal\r\n      const fabricConfig = (global && global['FabricConfig']) || {};\r\n\r\n      _stylesheet = global[STYLESHEET_SETTING] = new Stylesheet(fabricConfig.mergeStyles);\r\n    }\r\n\r\n    return _stylesheet;\r\n  }\r\n\r\n  constructor(config?: IStyleSheetConfig) {\r\n    this._config = {\r\n      injectionMode: InjectionMode.insertNode,\r\n      defaultPrefix: 'css',\r\n      namespace: undefined,\r\n      cspSettings: undefined,\r\n      ...config\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Configures the stylesheet.\r\n   */\r\n  public setConfig(config?: IStyleSheetConfig): void {\r\n    this._config = {\r\n      ...this._config,\r\n      ...config\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Configures a reset callback.\r\n   *\r\n   * @param callback - A callback which will be called when the Stylesheet is reset.\r\n   */\r\n  public onReset(callback: () => void): void {\r\n    this._onResetCallbacks.push(callback);\r\n  }\r\n\r\n  /**\r\n   * Generates a unique classname.\r\n   *\r\n   * @param displayName - Optional value to use as a prefix.\r\n   */\r\n  public getClassName(displayName?: string): string {\r\n    const { namespace } = this._config;\r\n    const prefix = displayName || this._config.defaultPrefix;\r\n\r\n    return `${namespace ? namespace + '-' : ''}${prefix}-${this._counter++}`;\r\n  }\r\n\r\n  /**\r\n   * Used internally to cache information about a class which was\r\n   * registered with the stylesheet.\r\n   */\r\n  public cacheClassName(className: string, key: string, args: IStyle[], rules: string[]): void {\r\n    this._keyToClassName[key] = className;\r\n    this._classNameToArgs[className] = {\r\n      args,\r\n      rules\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Gets the appropriate classname given a key which was previously\r\n   * registered using cacheClassName.\r\n   */\r\n  public classNameFromKey(key: string): string | undefined {\r\n    return this._keyToClassName[key];\r\n  }\r\n\r\n  /**\r\n   * Gets the arguments associated with a given classname which was\r\n   * previously registered using cacheClassName.\r\n   */\r\n  public argsFromClassName(className: string): IStyle[] | undefined {\r\n    const entry = this._classNameToArgs[className];\r\n\r\n    return entry && entry.args;\r\n  }\r\n\r\n  /**\r\n   * Gets the arguments associated with a given classname which was\r\n   * previously registered using cacheClassName.\r\n   */\r\n  public insertedRulesFromClassName(className: string): string[] | undefined {\r\n    const entry = this._classNameToArgs[className];\r\n\r\n    return entry && entry.rules;\r\n  }\r\n\r\n  /**\r\n   * Inserts a css rule into the stylesheet.\r\n   * @param preserve - Preserves the rule beyond a reset boundary.\r\n   */\r\n  public insertRule(rule: string, preserve?: boolean): void {\r\n    const { injectionMode } = this._config;\r\n    const element = injectionMode !== InjectionMode.none ? this._getStyleElement() : undefined;\r\n\r\n    if (preserve) {\r\n      this._preservedRules.push(rule);\r\n    }\r\n\r\n    if (element) {\r\n      switch (this._config.injectionMode) {\r\n        case InjectionMode.insertNode:\r\n          const { sheet } = element!;\r\n\r\n          try {\r\n            (sheet as CSSStyleSheet).insertRule(rule, (sheet as CSSStyleSheet).cssRules.length);\r\n          } catch (e) {\r\n            // The browser will throw exceptions on unsupported rules (such as a moz prefix in webkit.)\r\n            // We need to swallow the exceptions for this scenario, otherwise we'd need to filter\r\n            // which could be slower and bulkier.\r\n          }\r\n          break;\r\n\r\n        case InjectionMode.appendChild:\r\n          element.appendChild(document.createTextNode(rule));\r\n          break;\r\n      }\r\n    } else {\r\n      this._rules.push(rule);\r\n    }\r\n\r\n    if (this._config.onInsertRule) {\r\n      this._config.onInsertRule(rule);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets all rules registered with the stylesheet; only valid when\r\n   * using InsertionMode.none.\r\n   */\r\n  public getRules(includePreservedRules?: boolean): string {\r\n    return (includePreservedRules ? this._preservedRules.join('') : '') + this._rules.join('') + this._rulesToInsert.join('');\r\n  }\r\n\r\n  /**\r\n   * Resets the internal state of the stylesheet. Only used in server\r\n   * rendered scenarios where we're using InsertionMode.none.\r\n   */\r\n  public reset(): void {\r\n    this._rules = [];\r\n    this._rulesToInsert = [];\r\n    this._counter = 0;\r\n    this._classNameToArgs = {};\r\n    this._keyToClassName = {};\r\n\r\n    this._onResetCallbacks.forEach((callback: () => void) => callback());\r\n  }\r\n\r\n  // Forces the regeneration of incoming styles without totally resetting the stylesheet.\r\n  public resetKeys(): void {\r\n    this._keyToClassName = {};\r\n  }\r\n\r\n  private _getStyleElement(): HTMLStyleElement | undefined {\r\n    if (!this._styleElement && typeof document !== 'undefined') {\r\n      this._styleElement = this._createStyleElement();\r\n\r\n      // Reset the style element on the next frame.\r\n      window.requestAnimationFrame(() => {\r\n        this._styleElement = undefined;\r\n      });\r\n    }\r\n    return this._styleElement;\r\n  }\r\n\r\n  private _createStyleElement(): HTMLStyleElement {\r\n    const styleElement = document.createElement('style');\r\n\r\n    styleElement.setAttribute('data-merge-styles', 'true');\r\n    styleElement.type = 'text/css';\r\n\r\n    const { cspSettings } = this._config;\r\n    if (cspSettings) {\r\n      if (cspSettings.nonce) {\r\n        styleElement.setAttribute('nonce', cspSettings.nonce);\r\n      }\r\n    }\r\n    if (this._lastStyleElement && this._lastStyleElement.nextElementSibling) {\r\n      document.head!.insertBefore(styleElement, this._lastStyleElement.nextElementSibling);\r\n    } else {\r\n      document.head!.appendChild(styleElement);\r\n    }\r\n    this._lastStyleElement = styleElement;\r\n\r\n    return styleElement;\r\n  }\r\n}\r\n","export interface IVendorSettings {\r\n  isWebkit?: boolean;\r\n  isMoz?: boolean;\r\n  isMs?: boolean;\r\n  isOpera?: boolean;\r\n}\r\n\r\nlet _vendorSettings: IVendorSettings | undefined;\r\n\r\nexport function getVendorSettings(): IVendorSettings {\r\n  if (!_vendorSettings) {\r\n    const doc = typeof document !== 'undefined' ? document : undefined;\r\n    const nav = typeof navigator !== 'undefined' ? navigator : undefined;\r\n    const userAgent = nav ? nav.userAgent.toLowerCase() : undefined;\r\n\r\n    if (!doc) {\r\n      _vendorSettings = {\r\n        isWebkit: true,\r\n        isMoz: true,\r\n        isOpera: true,\r\n        isMs: true\r\n      };\r\n    } else {\r\n      _vendorSettings = {\r\n        isWebkit: !!(doc && 'WebkitAppearance' in doc.documentElement.style),\r\n        isMoz: !!(userAgent && userAgent.indexOf('firefox') > -1),\r\n        isOpera: !!(userAgent && userAgent.indexOf('opera') > -1),\r\n        isMs: !!(nav && (/rv:11.0/i.test(nav.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)))\r\n      };\r\n    }\r\n  }\r\n\r\n  return _vendorSettings;\r\n}\r\n\r\n/**\r\n * Sets the vendor settings for prefixing and vendor specific operations.\r\n */\r\nexport function setVendorSettings(vendorSettings?: IVendorSettings): void {\r\n  _vendorSettings = vendorSettings;\r\n}\r\n","import { getVendorSettings } from '../getVendorSettings';\r\n\r\nconst autoPrefixNames: { [key: string]: number } = {\r\n  'user-select': 1\r\n};\r\n\r\nexport function prefixRules(rulePairs: (string | number)[], index: number): void {\r\n  const vendorSettings = getVendorSettings();\r\n\r\n  const name = rulePairs[index];\r\n\r\n  if (autoPrefixNames[name]) {\r\n    const value = rulePairs[index + 1];\r\n\r\n    if (autoPrefixNames[name]) {\r\n      if (vendorSettings.isWebkit) {\r\n        rulePairs.push('-webkit-' + name, value);\r\n      }\r\n      if (vendorSettings.isMoz) {\r\n        rulePairs.push('-moz-' + name, value);\r\n      }\r\n      if (vendorSettings.isMs) {\r\n        rulePairs.push('-ms-' + name, value);\r\n      }\r\n      if (vendorSettings.isOpera) {\r\n        rulePairs.push('-o-' + name, value);\r\n      }\r\n    }\r\n  }\r\n}\r\n","const NON_PIXEL_NUMBER_PROPS = [\r\n  'column-count',\r\n  'font-weight',\r\n  'flex-basis',\r\n  'flex',\r\n  'flex-grow',\r\n  'flex-shrink',\r\n  'fill-opacity',\r\n  'opacity',\r\n  'order',\r\n  'z-index',\r\n  'zoom'\r\n];\r\n\r\nexport function provideUnits(rulePairs: (string | number)[], index: number): void {\r\n  const name = rulePairs[index];\r\n  const value = rulePairs[index + 1];\r\n\r\n  if (typeof value === 'number') {\r\n    const unit = NON_PIXEL_NUMBER_PROPS.indexOf(name as string) === -1 ? 'px' : '';\r\n\r\n    rulePairs[index + 1] = `${value}${unit}`;\r\n  }\r\n}\r\n","import { Stylesheet } from '../Stylesheet';\r\n\r\nconst LEFT = 'left';\r\nconst RIGHT = 'right';\r\nconst NO_FLIP = '@noflip';\r\nconst NAME_REPLACEMENTS: { [key: string]: string } = {\r\n  [LEFT]: RIGHT,\r\n  [RIGHT]: LEFT\r\n};\r\nconst VALUE_REPLACEMENTS: { [key: string]: string } = {\r\n  'w-resize': 'e-resize',\r\n  'sw-resize': 'se-resize',\r\n  'nw-resize': 'ne-resize'\r\n};\r\n\r\nlet _rtl = getRTL();\r\n\r\n/**\r\n * Sets the current RTL value.\r\n */\r\nexport function setRTL(isRTL: boolean): void {\r\n  if (_rtl !== isRTL) {\r\n    Stylesheet.getInstance().resetKeys();\r\n    _rtl = isRTL;\r\n  }\r\n}\r\n\r\n/**\r\n * Gets the current RTL value.\r\n */\r\nexport function getRTL(): boolean {\r\n  if (_rtl === undefined) {\r\n    _rtl = typeof document !== 'undefined' && !!document.documentElement && document.documentElement.getAttribute('dir') === 'rtl';\r\n  }\r\n  return _rtl;\r\n}\r\n\r\n/**\r\n * RTLifies the rulePair in the array at the current index. This mutates the array for performance\r\n * reasons.\r\n */\r\nexport function rtlifyRules(rulePairs: (string | number)[], index: number): void {\r\n  if (getRTL()) {\r\n    const name = rulePairs[index] as string;\r\n\r\n    if (!name) {\r\n      return;\r\n    }\r\n\r\n    const value = rulePairs[index + 1] as string;\r\n\r\n    if (typeof value === 'string' && value.indexOf(NO_FLIP) >= 0) {\r\n      rulePairs[index + 1] = value.replace(/\\s*(?:\\/\\*\\s*)?\\@noflip\\b(?:\\s*\\*\\/)?\\s*?/g, '');\r\n    } else if (name.indexOf(LEFT) >= 0) {\r\n      rulePairs[index] = name.replace(LEFT, RIGHT);\r\n    } else if (name.indexOf(RIGHT) >= 0) {\r\n      rulePairs[index] = name.replace(RIGHT, LEFT);\r\n    } else if (String(value).indexOf(LEFT) >= 0) {\r\n      rulePairs[index + 1] = value.replace(LEFT, RIGHT);\r\n    } else if (String(value).indexOf(RIGHT) >= 0) {\r\n      rulePairs[index + 1] = value.replace(RIGHT, LEFT);\r\n    } else if (NAME_REPLACEMENTS[name]) {\r\n      rulePairs[index] = NAME_REPLACEMENTS[name];\r\n    } else if (VALUE_REPLACEMENTS[value]) {\r\n      rulePairs[index + 1] = VALUE_REPLACEMENTS[value];\r\n    } else {\r\n      switch (name) {\r\n        case 'margin':\r\n        case 'padding':\r\n          rulePairs[index + 1] = flipQuad(value);\r\n          break;\r\n        case 'box-shadow':\r\n          rulePairs[index + 1] = negateNum(value, 0);\r\n          break;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Given a string value in a space delimited format (e.g. \"1 2 3 4\"), negates a particular value.\r\n */\r\nfunction negateNum(value: string, partIndex: number): string {\r\n  const parts = value.split(' ');\r\n  const numberVal = parseInt(parts[partIndex], 10);\r\n\r\n  parts[0] = parts[0].replace(String(numberVal), String(numberVal * -1));\r\n\r\n  return parts.join(' ');\r\n}\r\n\r\n/**\r\n * Given a string quad, flips the left and right values.\r\n */\r\nfunction flipQuad(value: string): string {\r\n  if (typeof value === 'string') {\r\n    const parts = value.split(' ');\r\n\r\n    if (parts.length === 4) {\r\n      return `${parts[0]} ${parts[3]} ${parts[2]} ${parts[1]}`;\r\n    }\r\n  }\r\n\r\n  return value;\r\n}\r\n","import { IRawStyle, IStyle } from './IStyle';\r\n\r\nimport { Stylesheet } from './Stylesheet';\r\nimport { kebabRules } from './transforms/kebabRules';\r\nimport { prefixRules } from './transforms/prefixRules';\r\nimport { provideUnits } from './transforms/provideUnits';\r\nimport { rtlifyRules } from './transforms/rtlifyRules';\r\n\r\nconst DISPLAY_NAME = 'displayName';\r\n\r\n// tslint:disable-next-line:no-any\r\ntype IDictionary = { [key: string]: any };\r\n\r\ninterface IRuleSet {\r\n  __order: string[];\r\n  [key: string]: IDictionary;\r\n}\r\n\r\nfunction getDisplayName(rules?: { [key: string]: IRawStyle }): string | undefined {\r\n  const rootStyle: IStyle = rules && rules['&'];\r\n\r\n  return rootStyle ? (rootStyle as IRawStyle).displayName : undefined;\r\n}\r\n\r\nconst globalSelectorRegExp = /\\:global\\((.+?)\\)/g;\r\n\r\ntype ReplacementInfo = [number, number, string];\r\n\r\n/**\r\n * Finds comma separated selectors in a :global() e.g. \":global(.class1, .class2, .class3)\"\r\n * and wraps them each in their own global \":global(.class1), :global(.class2), :global(.class3)\"\r\n *\r\n * @param selectorWithGlobals The selector to process\r\n * @returns The updated selector\r\n */\r\nfunction expandCommaSeparatedGlobals(selectorWithGlobals: string): string {\r\n  // We the selector does not have a :global() we can shortcut\r\n  if (!globalSelectorRegExp.test(selectorWithGlobals)) {\r\n    return selectorWithGlobals;\r\n  }\r\n\r\n  const replacementInfo: ReplacementInfo[] = [];\r\n\r\n  const findGlobal = /\\:global\\((.+?)\\)/g;\r\n  let match = null;\r\n  // Create a result list for global selectors so we can replace them.\r\n  while ((match = findGlobal.exec(selectorWithGlobals))) {\r\n    // Only if the found selector is a comma separated list we'll process it.\r\n    if (match[1].indexOf(',') > -1) {\r\n      replacementInfo.push([\r\n        match.index,\r\n        match.index + match[0].length,\r\n        // Wrap each of the found selectors in :global()\r\n        match[1]\r\n          .split(',')\r\n          .map((v: string) => `:global(${v.trim()})`)\r\n          .join(', ')\r\n      ]);\r\n    }\r\n  }\r\n\r\n  // Replace the found selectors with their wrapped variants in reverse order\r\n  return replacementInfo.reverse().reduce((selector: string, [matchIndex, matchEndIndex, replacement]: ReplacementInfo) => {\r\n    const prefix = selector.slice(0, matchIndex);\r\n    const suffix = selector.slice(matchEndIndex);\r\n\r\n    return prefix + replacement + suffix;\r\n  }, selectorWithGlobals);\r\n}\r\n\r\nfunction expandSelector(newSelector: string, currentSelector: string): string {\r\n  if (newSelector.indexOf(':global(') >= 0) {\r\n    return newSelector.replace(globalSelectorRegExp, '$1');\r\n  } else if (newSelector.indexOf(':') === 0) {\r\n    return currentSelector + newSelector;\r\n  } else if (newSelector.indexOf('&') < 0) {\r\n    return currentSelector + ' ' + newSelector;\r\n  }\r\n\r\n  return newSelector;\r\n}\r\n\r\nfunction extractRules(args: IStyle[], rules: IRuleSet = { __order: [] }, currentSelector: string = '&'): IRuleSet {\r\n  const stylesheet = Stylesheet.getInstance();\r\n  let currentRules: IDictionary | undefined = rules[currentSelector] as IDictionary;\r\n\r\n  if (!currentRules) {\r\n    currentRules = {};\r\n    rules[currentSelector] = currentRules;\r\n    rules.__order.push(currentSelector);\r\n  }\r\n\r\n  for (const arg of args) {\r\n    // If the arg is a string, we need to look up the class map and merge.\r\n    if (typeof arg === 'string') {\r\n      const expandedRules = stylesheet.argsFromClassName(arg);\r\n\r\n      if (expandedRules) {\r\n        extractRules(expandedRules, rules, currentSelector);\r\n      }\r\n      // Else if the arg is an array, we need to recurse in.\r\n    } else if (Array.isArray(arg)) {\r\n      extractRules(arg, rules, currentSelector);\r\n    } else {\r\n      // tslint:disable-next-line:no-any\r\n      for (const prop in arg as any) {\r\n        if (prop === 'selectors') {\r\n          // tslint:disable-next-line:no-any\r\n          const selectors: { [key: string]: IStyle } = (arg as any).selectors;\r\n\r\n          for (let newSelector in selectors) {\r\n            if (selectors.hasOwnProperty(newSelector)) {\r\n              const selectorValue = selectors[newSelector];\r\n\r\n              if (newSelector.indexOf('@') === 0) {\r\n                newSelector = newSelector + '{' + currentSelector;\r\n                extractRules([selectorValue], rules, newSelector);\r\n              } else if (newSelector.indexOf(',') > -1) {\r\n                const commaSeparatedSelectors = expandCommaSeparatedGlobals(newSelector)\r\n                  .split(/,/g)\r\n                  .map((s: string) => s.trim());\r\n                extractRules(\r\n                  [selectorValue],\r\n                  rules,\r\n                  commaSeparatedSelectors\r\n                    .map((commaSeparatedSelector: string) => expandSelector(commaSeparatedSelector, currentSelector))\r\n                    .join(', ')\r\n                );\r\n              } else {\r\n                extractRules([selectorValue], rules, expandSelector(newSelector, currentSelector));\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          if ((arg as any)[prop] !== undefined) {\r\n            // Else, add the rule to the currentSelector.\r\n            if (prop === 'margin' || prop === 'padding') {\r\n              // tslint:disable-next-line:no-any\r\n              expandQuads(currentRules, prop, (arg as any)[prop]);\r\n            } else {\r\n              // tslint:disable-next-line:no-any\r\n              (currentRules as any)[prop] = (arg as any)[prop] as any;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return rules;\r\n}\r\n\r\nfunction expandQuads(currentRules: IDictionary, name: string, value: string): void {\r\n  const parts = typeof value === 'string' ? value.split(' ') : [value];\r\n\r\n  currentRules[name + 'Top'] = parts[0];\r\n  currentRules[name + 'Right'] = parts[1] || parts[0];\r\n  currentRules[name + 'Bottom'] = parts[2] || parts[0];\r\n  currentRules[name + 'Left'] = parts[3] || parts[1] || parts[0];\r\n}\r\n\r\nfunction getKeyForRules(rules: IRuleSet): string | undefined {\r\n  const serialized: string[] = [];\r\n  let hasProps = false;\r\n\r\n  for (const selector of rules.__order) {\r\n    serialized.push(selector);\r\n    const rulesForSelector = rules[selector];\r\n\r\n    for (const propName in rulesForSelector) {\r\n      if (rulesForSelector.hasOwnProperty(propName) && rulesForSelector[propName] !== undefined) {\r\n        hasProps = true;\r\n        serialized.push(propName, rulesForSelector[propName]);\r\n      }\r\n    }\r\n  }\r\n\r\n  return hasProps ? serialized.join('') : undefined;\r\n}\r\n\r\nexport function serializeRuleEntries(ruleEntries: { [key: string]: string | number }): string {\r\n  if (!ruleEntries) {\r\n    return '';\r\n  }\r\n\r\n  const allEntries: (string | number)[] = [];\r\n\r\n  for (const entry in ruleEntries) {\r\n    if (ruleEntries.hasOwnProperty(entry) && entry !== DISPLAY_NAME && ruleEntries[entry] !== undefined) {\r\n      allEntries.push(entry, ruleEntries[entry]);\r\n    }\r\n  }\r\n\r\n  // Apply transforms.\r\n  for (let i = 0; i < allEntries.length; i += 2) {\r\n    kebabRules(allEntries, i);\r\n    provideUnits(allEntries, i);\r\n    rtlifyRules(allEntries, i);\r\n    prefixRules(allEntries, i);\r\n  }\r\n\r\n  // Apply punctuation.\r\n  for (let i = 1; i < allEntries.length; i += 4) {\r\n    allEntries.splice(i, 1, ':', allEntries[i], ';');\r\n  }\r\n\r\n  return allEntries.join('');\r\n}\r\n\r\nexport interface IRegistration {\r\n  className: string;\r\n  key: string;\r\n  args: IStyle[];\r\n  rulesToInsert: string[];\r\n}\r\n\r\nexport function styleToRegistration(...args: IStyle[]): IRegistration | undefined {\r\n  const rules: IRuleSet = extractRules(args);\r\n  const key = getKeyForRules(rules);\r\n\r\n  if (key) {\r\n    const stylesheet = Stylesheet.getInstance();\r\n    const registration: Partial<IRegistration> = {\r\n      className: stylesheet.classNameFromKey(key),\r\n      key,\r\n      args\r\n    };\r\n\r\n    if (!registration.className) {\r\n      registration.className = stylesheet.getClassName(getDisplayName(rules));\r\n      const rulesToInsert: string[] = [];\r\n\r\n      for (const selector of rules.__order) {\r\n        rulesToInsert.push(selector, serializeRuleEntries(rules[selector]));\r\n      }\r\n      registration.rulesToInsert = rulesToInsert;\r\n    }\r\n\r\n    return registration as IRegistration;\r\n  }\r\n}\r\n\r\nexport function applyRegistration(registration: IRegistration, classMap?: { [key: string]: string }): void {\r\n  const stylesheet = Stylesheet.getInstance();\r\n  const { className, key, args, rulesToInsert } = registration;\r\n\r\n  if (rulesToInsert) {\r\n    // rulesToInsert is an ordered array of selector/rule pairs.\r\n    for (let i = 0; i < rulesToInsert.length; i += 2) {\r\n      const rules = rulesToInsert[i + 1];\r\n      if (rules) {\r\n        let selector = rulesToInsert[i];\r\n\r\n        // Fix selector using map.\r\n        selector = selector.replace(\r\n          /(&)|\\$([\\w-]+)\\b/g,\r\n          (match: string, amp: string, cn: string): string => {\r\n            if (amp) {\r\n              return '.' + registration.className;\r\n            } else if (cn) {\r\n              return '.' + ((classMap && classMap[cn]) || cn);\r\n            }\r\n            return '';\r\n          }\r\n        );\r\n\r\n        // Insert. Note if a media query, we must close the query with a final bracket.\r\n        const processedRule = `${selector}{${rules}}${selector.indexOf('@') === 0 ? '}' : ''}`;\r\n\r\n        stylesheet.insertRule(processedRule);\r\n      }\r\n    }\r\n    stylesheet.cacheClassName(className!, key!, args!, rulesToInsert);\r\n  }\r\n}\r\n\r\nexport function styleToClassName(...args: IStyle[]): string {\r\n  const registration = styleToRegistration(...args);\r\n  if (registration) {\r\n    applyRegistration(registration);\r\n\r\n    return registration.className;\r\n  }\r\n\r\n  return '';\r\n}\r\n","export function kebabRules(rulePairs: (string | number)[], index: number): void {\r\n  rulePairs[index] = (rulePairs[index] as string).replace(/([A-Z])/g, '-$1').toLowerCase();\r\n}\r\n","import { IStyle, IStyleBaseArray } from './IStyle';\r\nimport { Stylesheet } from './Stylesheet';\r\n\r\n/**\r\n * Separates the classes and style objects. Any classes that are pre-registered\r\n * args are auto expanded into objects.\r\n */\r\nexport function extractStyleParts(\r\n  ...args: (IStyle | IStyle[] | false | null | undefined)[]\r\n): { classes: string[]; objects: IStyleBaseArray } {\r\n  const classes: string[] = [];\r\n  const objects: {}[] = [];\r\n  const stylesheet = Stylesheet.getInstance();\r\n\r\n  function _processArgs(argsList: (IStyle | IStyle[])[]): void {\r\n    for (const arg of argsList) {\r\n      if (arg) {\r\n        if (typeof arg === 'string') {\r\n          if (arg.indexOf(' ') >= 0) {\r\n            _processArgs(arg.split(' '));\r\n          } else {\r\n            const translatedArgs = stylesheet.argsFromClassName(arg);\r\n\r\n            if (translatedArgs) {\r\n              _processArgs(translatedArgs);\r\n            } else {\r\n              // Avoid adding the same class twice.\r\n              if (classes.indexOf(arg) === -1) {\r\n                classes.push(arg);\r\n              }\r\n            }\r\n          }\r\n        } else if (Array.isArray(arg)) {\r\n          _processArgs(arg);\r\n        } else if (typeof arg === 'object') {\r\n          objects.push(arg);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  _processArgs(args);\r\n\r\n  return {\r\n    classes,\r\n    objects\r\n  };\r\n}\r\n","import { IStyle, IStyleBaseArray } from './IStyle';\r\nimport { styleToClassName } from './styleToClassName';\r\nimport { extractStyleParts } from './extractStyleParts';\r\n\r\n/**\r\n * Concatination helper, which can merge class names together. Skips over falsey values.\r\n *\r\n * @public\r\n */\r\nexport function mergeStyles(...args: (IStyle | IStyleBaseArray | false | null | undefined)[]): string {\r\n  const { classes, objects } = extractStyleParts(args);\r\n\r\n  if (objects.length) {\r\n    classes.push(styleToClassName(objects));\r\n  }\r\n\r\n  return classes.join(' ');\r\n}\r\n","import { IStyleSet, IConcatenatedStyleSet } from './IStyleSet';\r\nimport { IStyleBase, IStyle } from './IStyle';\r\nimport { IStyleFunctionOrObject } from './IStyleFunction';\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet - The first style set to be concatenated.\r\n */\r\nexport function concatStyleSets<TStyleSet extends IStyleSet<TStyleSet>>(\r\n  styleSet: TStyleSet | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet1 - The first style set to be concatenated.\r\n * @param styleSet2 - The second style set to be concatenated.\r\n */\r\nexport function concatStyleSets<TStyleSet1 extends IStyleSet<TStyleSet1>, TStyleSet2 extends IStyleSet<TStyleSet2>>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet1 & TStyleSet2>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet1 - The first style set to be concatenated.\r\n * @param styleSet2 - The second style set to be concatenated.\r\n * @param styleSet3 - The third style set to be concatenated.\r\n */\r\nexport function concatStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet1 - The first style set to be concatenated.\r\n * @param styleSet2 - The second style set to be concatenated.\r\n * @param styleSet3 - The third style set to be concatenated.\r\n * @param styleSet4 - The fourth style set to be concatenated.\r\n */\r\nexport function concatStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>,\r\n  TStyleSet4 extends IStyleSet<TStyleSet4>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined,\r\n  styleSet4: TStyleSet3 | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3 & TStyleSet4>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet1 - The first style set to be concatenated.\r\n * @param styleSet2 - The second style set to be concatenated.\r\n * @param styleSet3 - The third style set to be concatenated.\r\n * @param styleSet4 - The fourth style set to be concatenated.\r\n */\r\nexport function concatStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>,\r\n  TStyleSet4 extends IStyleSet<TStyleSet4>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined,\r\n  styleSet4: TStyleSet4 | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3 & TStyleSet4>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet1 - The first style set to be concatenated.\r\n * @param styleSet2 - The second style set to be concatenated.\r\n * @param styleSet3 - The third style set to be concatenated.\r\n * @param styleSet4 - The fourth style set to be concatenated.\r\n * @param styleSet5 - The fifth set to be concatenated.\r\n */\r\nexport function concatStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>,\r\n  TStyleSet4 extends IStyleSet<TStyleSet4>,\r\n  TStyleSet5 extends IStyleSet<TStyleSet5>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined,\r\n  styleSet4: TStyleSet4 | false | null | undefined,\r\n  styleSet5: TStyleSet5 | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3 & TStyleSet4 & TStyleSet5>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSet1 - The first style set to be concatenated.\r\n * @param styleSet2 - The second style set to be concatenated.\r\n * @param styleSet3 - The third style set to be concatenated.\r\n * @param styleSet4 - The fourth style set to be concatenated.\r\n * @param styleSet5 - The fifth set to be concatenated.\r\n * @param styleSet6 - The sixth set to be concatenated.\r\n */\r\nexport function concatStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>,\r\n  TStyleSet4 extends IStyleSet<TStyleSet4>,\r\n  TStyleSet5 extends IStyleSet<TStyleSet5>,\r\n  TStyleSet6 extends IStyleSet<TStyleSet6>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined,\r\n  styleSet4: TStyleSet4 | false | null | undefined,\r\n  styleSet5: TStyleSet5 | false | null | undefined,\r\n  styleSet6: TStyleSet6 | false | null | undefined\r\n): IConcatenatedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3 & TStyleSet4 & TStyleSet5 & TStyleSet6>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSets - One or more stylesets to be merged (each param can also be falsy).\r\n */\r\nexport function concatStyleSets(...styleSets: (IStyleSet<any> | false | null | undefined)[]): IConcatenatedStyleSet<any>;\r\n\r\n/**\r\n * Combine a set of styles together (but does not register css classes).\r\n * @param styleSets - One or more stylesets to be merged (each param can also be falsy).\r\n */\r\nexport function concatStyleSets(...styleSets: (IStyleSet<any> | false | null | undefined)[]): IConcatenatedStyleSet<any> {\r\n  const mergedSet: IConcatenatedStyleSet<any> = {};\r\n\r\n  // We process sub component styles in two phases. First we collect them, then we combine them into 1 style function.\r\n  const workingSubcomponentStyles: { [key: string]: Array<IStyleFunctionOrObject<any, any>> } = {};\r\n\r\n  for (const currentSet of styleSets) {\r\n    if (currentSet) {\r\n      for (const prop in currentSet) {\r\n        if (currentSet.hasOwnProperty(prop)) {\r\n          if (prop === 'subComponentStyles' && currentSet.subComponentStyles !== undefined) {\r\n            // subcomponent styles - style functions or objects\r\n\r\n            const currentComponentStyles = currentSet.subComponentStyles;\r\n            for (const subCompProp in currentComponentStyles) {\r\n              if (currentComponentStyles.hasOwnProperty(subCompProp)) {\r\n                if (workingSubcomponentStyles.hasOwnProperty(subCompProp)) {\r\n                  workingSubcomponentStyles[subCompProp].push(currentComponentStyles[subCompProp]);\r\n                } else {\r\n                  workingSubcomponentStyles[subCompProp] = [currentComponentStyles[subCompProp]];\r\n                }\r\n              }\r\n            }\r\n\r\n            continue;\r\n          }\r\n\r\n          // the as any casts below is a workaround for ts 2.8.\r\n          // todo: remove cast to any in ts 2.9.\r\n          const mergedValue: IStyle = (mergedSet as any)[prop];\r\n          const currentValue = (currentSet as any)[prop];\r\n\r\n          if (mergedValue === undefined) {\r\n            (mergedSet as any)[prop] = currentValue;\r\n          } else {\r\n            (mergedSet as any)[prop] = [\r\n              // https://github.com/Microsoft/TypeScript/issues/25474\r\n              ...(Array.isArray(mergedValue) ? mergedValue : [mergedValue as IStyleBase]),\r\n              ...(Array.isArray(currentValue) ? currentValue : [currentValue as IStyleBase])\r\n            ];\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (Object.keys(workingSubcomponentStyles).length > 0) {\r\n    mergedSet.subComponentStyles = {};\r\n    const mergedSubStyles = mergedSet.subComponentStyles;\r\n\r\n    // now we process the subcomponent styles if there are any\r\n    for (const subCompProp in workingSubcomponentStyles) {\r\n      if (workingSubcomponentStyles.hasOwnProperty(subCompProp)) {\r\n        const workingSet = workingSubcomponentStyles[subCompProp];\r\n        mergedSubStyles[subCompProp] = (styleProps: any) => {\r\n          return concatStyleSets(\r\n            ...workingSet.map(\r\n              (styleFunctionOrObject: IStyleFunctionOrObject<any, any>) =>\r\n                typeof styleFunctionOrObject === 'function' ? styleFunctionOrObject(styleProps) : styleFunctionOrObject\r\n            )\r\n          );\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  return mergedSet;\r\n}\r\n","import { extractStyleParts } from './extractStyleParts';\r\nimport { concatStyleSets } from './concatStyleSets';\r\nimport { IStyle } from './IStyle';\r\nimport { styleToRegistration, applyRegistration } from './styleToClassName';\r\nimport { IStyleSet, IProcessedStyleSet, IConcatenatedStyleSet } from './IStyleSet';\r\n\r\n/**\r\n * Takes in one or more style set objects, each consisting of a set of areas,\r\n * each which will produce a class name. Using this is analogous to calling\r\n * `mergeStyles` for each property in the object, but ensures we maintain the\r\n * set ordering when multiple style sets are merged.\r\n *\r\n * @param styleSet - The first style set to be merged and reigstered.\r\n */\r\nexport function mergeStyleSets<TStyleSet extends IStyleSet<TStyleSet>>(\r\n  styleSet: TStyleSet | false | null | undefined\r\n): IProcessedStyleSet<TStyleSet>;\r\n\r\n/**\r\n * Takes in one or more style set objects, each consisting of a set of areas,\r\n * each which will produce a class name. Using this is analogous to calling\r\n * `mergeStyles` for each property in the object, but ensures we maintain the\r\n * set ordering when multiple style sets are merged.\r\n *\r\n * @param styleSet1 - The first style set to be merged.\r\n * @param styleSet2 - The second style set to be merged.\r\n */\r\nexport function mergeStyleSets<TStyleSet1 extends IStyleSet<TStyleSet1>, TStyleSet2 extends IStyleSet<TStyleSet2>>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined\r\n): IProcessedStyleSet<TStyleSet1 & TStyleSet2>;\r\n\r\n/**\r\n * Takes in one or more style set objects, each consisting of a set of areas,\r\n * each which will produce a class name. Using this is analogous to calling\r\n * `mergeStyles` for each property in the object, but ensures we maintain the\r\n * set ordering when multiple style sets are merged.\r\n *\r\n * @param styleSet1 - The first style set to be merged.\r\n * @param styleSet2 - The second style set to be merged.\r\n * @param styleSet3 - The third style set to be merged.\r\n */\r\nexport function mergeStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined\r\n): IProcessedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3>;\r\n\r\n/**\r\n * Takes in one or more style set objects, each consisting of a set of areas,\r\n * each which will produce a class name. Using this is analogous to calling\r\n * `mergeStyles` for each property in the object, but ensures we maintain the\r\n * set ordering when multiple style sets are merged.\r\n *\r\n * @param styleSet1 - The first style set to be merged.\r\n * @param styleSet2 - The second style set to be merged.\r\n * @param styleSet3 - The third style set to be merged.\r\n * @param styleSet4 - The fourth style set to be merged.\r\n */\r\nexport function mergeStyleSets<\r\n  TStyleSet1 extends IStyleSet<TStyleSet1>,\r\n  TStyleSet2 extends IStyleSet<TStyleSet2>,\r\n  TStyleSet3 extends IStyleSet<TStyleSet3>,\r\n  TStyleSet4 extends IStyleSet<TStyleSet4>\r\n>(\r\n  styleSet1: TStyleSet1 | false | null | undefined,\r\n  styleSet2: TStyleSet2 | false | null | undefined,\r\n  styleSet3: TStyleSet3 | false | null | undefined,\r\n  styleSet4: TStyleSet4 | false | null | undefined\r\n): IProcessedStyleSet<TStyleSet1 & TStyleSet2 & TStyleSet3 & TStyleSet4>;\r\n\r\n/**\r\n * Takes in one or more style set objects, each consisting of a set of areas,\r\n * each which will produce a class name. Using this is analogous to calling\r\n * `mergeStyles` for each property in the object, but ensures we maintain the\r\n * set ordering when multiple style sets are merged.\r\n *\r\n * @param styleSets - One or more style sets to be merged.\r\n */\r\nexport function mergeStyleSets(...styleSets: Array<IStyleSet<any> | undefined | false | null>): IProcessedStyleSet<any>;\r\n\r\n/**\r\n * Takes in one or more style set objects, each consisting of a set of areas,\r\n * each which will produce a class name. Using this is analogous to calling\r\n * `mergeStyles` for each property in the object, but ensures we maintain the\r\n * set ordering when multiple style sets are merged.\r\n *\r\n * @param styleSets - One or more style sets to be merged.\r\n */\r\nexport function mergeStyleSets(...styleSets: Array<IStyleSet<any> | undefined | false | null>): IProcessedStyleSet<any> {\r\n  // tslint:disable-next-line:no-any\r\n  const classNameSet: IProcessedStyleSet<any> = { subComponentStyles: {} };\r\n  const classMap: { [key: string]: string } = {};\r\n\r\n  const styleSet = styleSets[0];\r\n\r\n  if (!styleSet && styleSets.length <= 1) {\r\n    return { subComponentStyles: {} };\r\n  }\r\n\r\n  let concatenatedStyleSet: IConcatenatedStyleSet<any> | IStyleSet<any> =\r\n    // we have guarded against falsey values just above.\r\n    styleSet!;\r\n\r\n  concatenatedStyleSet = concatStyleSets(...styleSets);\r\n\r\n  const registrations = [];\r\n\r\n  for (const styleSetArea in concatenatedStyleSet) {\r\n    if (concatenatedStyleSet.hasOwnProperty(styleSetArea)) {\r\n      if (styleSetArea === 'subComponentStyles') {\r\n        classNameSet.subComponentStyles = (concatenatedStyleSet as IConcatenatedStyleSet<any>).subComponentStyles || {};\r\n        continue;\r\n      }\r\n\r\n      const styles: IStyle = (concatenatedStyleSet as any)[styleSetArea];\r\n\r\n      const { classes, objects } = extractStyleParts(styles);\r\n      const registration = styleToRegistration({ displayName: styleSetArea }, objects);\r\n\r\n      registrations.push(registration);\r\n\r\n      if (registration) {\r\n        classMap[styleSetArea] = registration.className;\r\n        // as any cast not needed in ts >=2.9\r\n        (classNameSet as any)[styleSetArea] = classes.concat([registration.className]).join(' ');\r\n      }\r\n    }\r\n  }\r\n\r\n  for (const registration of registrations) {\r\n    if (registration) {\r\n      applyRegistration(registration, classMap);\r\n    }\r\n  }\r\n\r\n  return classNameSet;\r\n}\r\n","import { Stylesheet } from './Stylesheet';\r\nimport { IFontFace } from './IRawStyleBase';\r\nimport { serializeRuleEntries } from './styleToClassName';\r\n\r\n/**\r\n * Registers a font face.\r\n * @public\r\n */\r\nexport function fontFace(font: IFontFace): void {\r\n  Stylesheet.getInstance().insertRule(`@font-face{${serializeRuleEntries(font as {})}}`, true);\r\n}\r\n","import { Stylesheet } from './Stylesheet';\r\nimport { serializeRuleEntries } from './styleToClassName';\r\n\r\n/**\r\n * Registers keyframe definitions.\r\n *\r\n * @public\r\n */\r\nexport function keyframes(timeline: { [key: string]: {} }): string {\r\n  const stylesheet = Stylesheet.getInstance();\r\n  const name = stylesheet.getClassName();\r\n\r\n  const rulesArray: string[] = [];\r\n\r\n  for (const prop in timeline) {\r\n    if (timeline.hasOwnProperty(prop)) {\r\n      rulesArray.push(prop, '{', serializeRuleEntries(timeline[prop]), '}');\r\n    }\r\n  }\r\n  const rules = rulesArray.join('');\r\n\r\n  stylesheet.insertRule(`@keyframes ${name}{${rules}}`, true);\r\n\r\n  stylesheet.cacheClassName(name, rules, [], ['keyframes', rules]);\r\n\r\n  return name;\r\n}\r\n","// @uifabric/merge-styles@6.17.0\n  // Do not modify this file, the file is generated as part of publish. The checked in version is a placeholder only.\n  import { setVersion } from '@uifabric/set-version';\n  setVersion('@uifabric/merge-styles', '6.17.0');","import { Stylesheet } from '@uifabric/merge-styles';\r\n\r\n// Initialize global window id.\r\nconst CURRENT_ID_PROPERTY = '__currentId__';\r\nconst DEFAULT_ID_STRING = 'id__';\r\n\r\ndeclare const process: {};\r\n\r\n// tslint:disable-next-line:no-any\r\nlet _global: any = (typeof window !== 'undefined' && window) || process;\r\n\r\nif (_global[CURRENT_ID_PROPERTY] === undefined) {\r\n  _global[CURRENT_ID_PROPERTY] = 0;\r\n}\r\n\r\n// tslint:disable-next-line:no-any\r\nfunction checkProperties(a: any, b: any): boolean {\r\n  for (let propName in a) {\r\n    if (a.hasOwnProperty(propName)) {\r\n      if (!b.hasOwnProperty(propName) || b[propName] !== a[propName]) {\r\n        return false;\r\n      }\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\n/**\r\n * Compares a to b and b to a.\r\n *\r\n * @public\r\n */\r\nexport function shallowCompare<TA, TB>(a: TA, b: TB): boolean {\r\n  return checkProperties(a, b) && checkProperties(b, a);\r\n}\r\n\r\n/**\r\n * Makes a resulting merge of a bunch of objects. Pass in the target object followed by 1 or more\r\n * objects as arguments and they will be merged sequentially into the target. Note that this will\r\n * shallow merge; it will not create new cloned values for target members.\r\n *\r\n * @public\r\n * @param target - Target object to merge following object arguments into.\r\n * @param args - One or more objects that will be mixed into the target in the order they are provided.\r\n * @returns Resulting merged target.\r\n */\r\n// tslint:disable-next-line:no-any\r\nexport function assign(target: any, ...args: any[]): any {\r\n  return filteredAssign.apply(this, [null, target].concat(args));\r\n}\r\n\r\n/**\r\n * Makes a resulting merge of a bunch of objects, but allows a filter function to be passed in to filter\r\n * the resulting merges. This allows for scenarios where you want to merge \"everything except that one thing\"\r\n * or \"properties that start with data-\". Note that this will shallow merge; it will not create new cloned\r\n * values for target members.\r\n *\r\n * @public\r\n * @param isAllowed - Callback to determine if the given propName is allowed in the result.\r\n * @param target - Target object to merge following object arguments into.\r\n * @param args - One or more objects that will be mixed into the target in the order they are provided.\r\n * @returns Resulting merged target.\r\n */\r\n// tslint:disable-next-line:no-any\r\nexport function filteredAssign(isAllowed: (propName: string) => boolean, target: any, ...args: any[]): any {\r\n  target = target || {};\r\n\r\n  for (let sourceObject of args) {\r\n    if (sourceObject) {\r\n      for (let propName in sourceObject) {\r\n        if (sourceObject.hasOwnProperty(propName) && (!isAllowed || isAllowed(propName))) {\r\n          target[propName] = sourceObject[propName];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return target;\r\n}\r\n\r\n// Configure ids to reset on stylesheet resets.\r\nconst stylesheet = Stylesheet.getInstance();\r\n\r\nif (stylesheet && stylesheet.onReset) {\r\n  stylesheet.onReset(resetIds);\r\n}\r\n\r\n/**\r\n * Generates a unique id in the global scope (this spans across duplicate copies of the same library.)\r\n *\r\n * @public\r\n */\r\nexport function getId(prefix?: string): string {\r\n  let index = _global[CURRENT_ID_PROPERTY]++;\r\n\r\n  return (prefix || DEFAULT_ID_STRING) + index;\r\n}\r\n\r\n/**\r\n * Resets id counter to an (optional) number.\r\n *\r\n * @public\r\n */\r\nexport function resetIds(counter: number = 0): void {\r\n  _global[CURRENT_ID_PROPERTY] = counter;\r\n}\r\n\r\n/* Takes an enum and iterates over each value of the enum (as a string), running the callback on each, returning a mapped array.\r\n * The callback takes as a first parameter the string that represents the name of the entry, and the second parameter is the\r\n * value of that entry, which is the value you'd normally use when using the enum (usually a number).\r\n * */\r\nexport function mapEnumByName<T>(\r\n  // tslint:disable-next-line:no-any\r\n  theEnum: any,\r\n  callback: (name?: string, value?: string | number) => T | undefined\r\n): (T | undefined)[] | undefined {\r\n  // map<any> to satisfy compiler since it doesn't realize we strip out undefineds in the .filter() call\r\n  return Object.keys(theEnum)\r\n    .map<T | undefined>((p: string | number) => {\r\n      // map on each property name as a string\r\n      if (String(Number(p)) !== p) {\r\n        // if the property is not just a number (because enums in TypeScript will map both ways)\r\n        return callback(p as string, theEnum[p]);\r\n      }\r\n    })\r\n    .filter((v: T | undefined) => !!v); // only return elements with values\r\n}\r\n\r\n/**\r\n * Get all values in an object dictionary\r\n *\r\n * @param obj - The dictionary to get values for\r\n */\r\n// tslint:disable-next-line:no-any\r\nexport function values<T>(obj: any): T[] {\r\n  return Object.keys(obj).reduce((arr: T[], key: string): T[] => {\r\n    arr.push(obj[key]);\r\n    return arr;\r\n  }, []);\r\n}\r\n","/* tslint:disable:no-string-literal */\r\nimport { assign } from './object';\r\n\r\n/**\r\n * EventRecord interface.\r\n *\r\n * @internal\r\n */\r\n// tslint:disable:no-any\r\nexport interface IEventRecord {\r\n  target: any;\r\n  eventName: string;\r\n  parent: any;\r\n  callback: (args?: any) => void;\r\n  elementCallback?: (...args: any[]) => void;\r\n  objectCallback?: (args?: any) => void;\r\n  options?: boolean | AddEventListenerOptions;\r\n}\r\n// tslint:enable:no-any\r\n\r\n/**\r\n * EventRecordsByName interface.\r\n *\r\n * @internal\r\n */\r\nexport interface IEventRecordsByName {\r\n  [eventName: string]: IEventRecordList;\r\n}\r\n\r\n/**\r\n * EventRecordList interface.\r\n *\r\n * @internal\r\n */\r\nexport interface IEventRecordList {\r\n  [id: string]: IEventRecord[] | number;\r\n  count: number;\r\n}\r\n\r\n/**\r\n * DeclaredEventsByName interface.\r\n *\r\n * @internal\r\n */\r\nexport interface IDeclaredEventsByName {\r\n  [eventName: string]: boolean;\r\n}\r\n\r\n/** An instance of EventGroup allows anything with a handle to it to trigger events on it.\r\n *  If the target is an HTMLElement, the event will be attached to the element and can be\r\n *  triggered as usual (like clicking for onclick).\r\n *  The event can be triggered by calling EventGroup.raise() here. If the target is an\r\n *  HTMLElement, the event gets raised and is handled by the browser. Otherwise, it gets\r\n *  handled here in EventGroup, and the handler is called in the context of the parent\r\n *  (which is passed in in the constructor).\r\n *\r\n * @public\r\n * {@docCategory EventGroup}\r\n */\r\nexport class EventGroup {\r\n  // tslint:disable-next-line:no-inferrable-types\r\n  private static _uniqueId: number = 0;\r\n  // tslint:disable-next-line:no-any\r\n  private _parent: any;\r\n  private _eventRecords: IEventRecord[];\r\n  private _id: number = EventGroup._uniqueId++;\r\n  private _isDisposed: boolean;\r\n\r\n  /** For IE8, bubbleEvent is ignored here and must be dealt with by the handler.\r\n   *  Events raised here by default have bubbling set to false and cancelable set to true.\r\n   *  This applies also to built-in events being raised manually here on HTMLElements,\r\n   *  which may lead to unexpected behavior if it differs from the defaults.\r\n   *\r\n   */\r\n  public static raise(\r\n    // tslint:disable-next-line:no-any\r\n    target: any,\r\n    eventName: string,\r\n    // tslint:disable-next-line:no-any\r\n    eventArgs?: any,\r\n    bubbleEvent?: boolean\r\n  ): boolean | undefined {\r\n    let retVal;\r\n\r\n    if (EventGroup._isElement(target)) {\r\n      if (document.createEvent) {\r\n        let ev = document.createEvent('HTMLEvents');\r\n\r\n        ev.initEvent(eventName, bubbleEvent || false, true);\r\n\r\n        assign(ev, eventArgs);\r\n\r\n        retVal = target.dispatchEvent(ev);\r\n        // tslint:disable-next-line:no-any\r\n      } else if ((document as any)['createEventObject']) {\r\n        // IE8\r\n        // tslint:disable-next-line:no-any\r\n        let evObj = (document as any)['createEventObject'](eventArgs);\r\n        // cannot set cancelBubble on evObj, fireEvent will overwrite it\r\n        target.fireEvent('on' + eventName, evObj);\r\n      }\r\n    } else {\r\n      while (target && retVal !== false) {\r\n        let events = <IEventRecordsByName>target.__events__;\r\n        let eventRecords = events ? events[eventName] : null;\r\n\r\n        if (eventRecords) {\r\n          for (let id in eventRecords) {\r\n            if (eventRecords.hasOwnProperty(id)) {\r\n              let eventRecordList = <IEventRecord[]>eventRecords[id];\r\n\r\n              for (let listIndex = 0; retVal !== false && listIndex < eventRecordList.length; listIndex++) {\r\n                let record = eventRecordList[listIndex];\r\n\r\n                if (record.objectCallback) {\r\n                  retVal = record.objectCallback.call(record.parent, eventArgs);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        // If the target has a parent, bubble the event up.\r\n        target = bubbleEvent ? target.parent : null;\r\n      }\r\n    }\r\n\r\n    return retVal;\r\n  }\r\n\r\n  // tslint:disable-next-line:no-any\r\n  public static isObserved(target: any, eventName: string): boolean {\r\n    let events = target && <IEventRecordsByName>target.__events__;\r\n\r\n    return !!events && !!events[eventName];\r\n  }\r\n\r\n  /** Check to see if the target has declared support of the given event. */\r\n  // tslint:disable-next-line:no-any\r\n  public static isDeclared(target: any, eventName: string): boolean {\r\n    let declaredEvents = target && <IDeclaredEventsByName>target.__declaredEvents;\r\n\r\n    return !!declaredEvents && !!declaredEvents[eventName];\r\n  }\r\n\r\n  // tslint:disable-next-line:no-any\r\n  public static stopPropagation(event: any): void {\r\n    if (event.stopPropagation) {\r\n      event.stopPropagation();\r\n    } else {\r\n      // IE8\r\n      event.cancelBubble = true;\r\n    }\r\n  }\r\n\r\n  private static _isElement(target: HTMLElement): boolean {\r\n    return !!target && (!!target.addEventListener || (typeof HTMLElement !== 'undefined' && target instanceof HTMLElement));\r\n  }\r\n\r\n  /** parent: the context in which events attached to non-HTMLElements are called */\r\n  // tslint:disable-next-line:no-any\r\n  public constructor(parent: any) {\r\n    this._parent = parent;\r\n    this._eventRecords = [];\r\n  }\r\n\r\n  public dispose(): void {\r\n    if (!this._isDisposed) {\r\n      this._isDisposed = true;\r\n\r\n      this.off();\r\n      this._parent = null;\r\n    }\r\n  }\r\n\r\n  /** On the target, attach a set of events, where the events object is a name to function mapping. */\r\n  // tslint:disable-next-line:no-any\r\n  public onAll(target: any, events: { [key: string]: (args?: any) => void }, useCapture?: boolean): void {\r\n    for (let eventName in events) {\r\n      if (events.hasOwnProperty(eventName)) {\r\n        this.on(target, eventName, events[eventName], useCapture);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** On the target, attach an event whose handler will be called in the context of the parent\r\n   * of this instance of EventGroup.\r\n   */\r\n  // tslint:disable-next-line:no-any\r\n  public on(target: any, eventName: string, callback: (args?: any) => void, options?: boolean | AddEventListenerOptions): void {\r\n    if (eventName.indexOf(',') > -1) {\r\n      let events = eventName.split(/[ ,]+/);\r\n\r\n      for (let i = 0; i < events.length; i++) {\r\n        this.on(target, events[i], callback, options);\r\n      }\r\n    } else {\r\n      let parent = this._parent;\r\n      let eventRecord: IEventRecord = {\r\n        target: target,\r\n        eventName: eventName,\r\n        parent: parent,\r\n        callback: callback,\r\n        options\r\n      };\r\n\r\n      // Initialize and wire up the record on the target, so that it can call the callback if the event fires.\r\n      let events = <IEventRecordsByName>(target.__events__ = target.__events__ || {});\r\n      events[eventName] =\r\n        events[eventName] ||\r\n        <IEventRecordList>{\r\n          count: 0\r\n        };\r\n      events[eventName][this._id] = events[eventName][this._id] || [];\r\n      (<IEventRecord[]>events[eventName][this._id]).push(eventRecord);\r\n      events[eventName].count++;\r\n\r\n      if (EventGroup._isElement(target)) {\r\n        // tslint:disable-next-line:no-any\r\n        let processElementEvent = (...args: any[]) => {\r\n          if (this._isDisposed) {\r\n            return;\r\n          }\r\n\r\n          let result;\r\n          try {\r\n            result = callback.apply(parent, args);\r\n            if (result === false && args[0]) {\r\n              let e = args[0];\r\n\r\n              if (e.preventDefault) {\r\n                e.preventDefault();\r\n              }\r\n\r\n              if (e.stopPropagation) {\r\n                e.stopPropagation();\r\n              }\r\n\r\n              e.cancelBubble = true;\r\n            }\r\n          } catch (e) {\r\n            /* ErrorHelper.log(e); */\r\n          }\r\n\r\n          return result;\r\n        };\r\n\r\n        eventRecord.elementCallback = processElementEvent;\r\n\r\n        if (target.addEventListener) {\r\n          /* tslint:disable:ban-native-functions */\r\n          (<EventTarget>target).addEventListener(eventName, processElementEvent, options);\r\n          /* tslint:enable:ban-native-functions */\r\n        } else if (target.attachEvent) {\r\n          // IE8\r\n          target.attachEvent('on' + eventName, processElementEvent);\r\n        }\r\n      } else {\r\n        // tslint:disable-next-line:no-any\r\n        let processObjectEvent = (...args: any[]) => {\r\n          if (this._isDisposed) {\r\n            return;\r\n          }\r\n\r\n          return callback.apply(parent, args);\r\n        };\r\n\r\n        eventRecord.objectCallback = processObjectEvent;\r\n      }\r\n\r\n      // Remember the record locally, so that it can be removed.\r\n      this._eventRecords.push(eventRecord);\r\n    }\r\n  }\r\n\r\n  // tslint:disable-next-line:no-any\r\n  public off(target?: any, eventName?: string, callback?: (args?: any) => void, options?: boolean | AddEventListenerOptions): void {\r\n    for (let i = 0; i < this._eventRecords.length; i++) {\r\n      let eventRecord = this._eventRecords[i];\r\n      if (\r\n        (!target || target === eventRecord.target) &&\r\n        (!eventName || eventName === eventRecord.eventName) &&\r\n        (!callback || callback === eventRecord.callback) &&\r\n        (typeof options !== 'boolean' || options === eventRecord.options)\r\n      ) {\r\n        let events = <IEventRecordsByName>eventRecord.target.__events__;\r\n        let targetArrayLookup = events[eventRecord.eventName];\r\n        let targetArray = targetArrayLookup ? <IEventRecord[]>targetArrayLookup[this._id] : null;\r\n\r\n        // We may have already target's entries, so check for null.\r\n        if (targetArray) {\r\n          if (targetArray.length === 1 || !callback) {\r\n            targetArrayLookup.count -= targetArray.length;\r\n            delete events[eventRecord.eventName][this._id];\r\n          } else {\r\n            targetArrayLookup.count--;\r\n            targetArray.splice(targetArray.indexOf(eventRecord), 1);\r\n          }\r\n\r\n          if (!targetArrayLookup.count) {\r\n            delete events[eventRecord.eventName];\r\n          }\r\n        }\r\n\r\n        if (eventRecord.elementCallback) {\r\n          if (eventRecord.target.removeEventListener) {\r\n            eventRecord.target.removeEventListener(eventRecord.eventName, eventRecord.elementCallback, eventRecord.options);\r\n          } else if (eventRecord.target.detachEvent) {\r\n            // IE8\r\n            eventRecord.target.detachEvent('on' + eventRecord.eventName, eventRecord.elementCallback);\r\n          }\r\n        }\r\n\r\n        this._eventRecords.splice(i--, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Trigger the given event in the context of this instance of EventGroup. */\r\n  // tslint:disable-next-line:no-any\r\n  public raise(eventName: string, eventArgs?: any, bubbleEvent?: boolean): boolean | undefined {\r\n    return EventGroup.raise(this._parent, eventName, eventArgs, bubbleEvent);\r\n  }\r\n\r\n  /** Declare an event as being supported by this instance of EventGroup. */\r\n  public declare(event: string | string[]): void {\r\n    let declaredEvents = (this._parent.__declaredEvents = this._parent.__declaredEvents || {});\r\n\r\n    if (typeof event === 'string') {\r\n      declaredEvents[event] = true;\r\n    } else {\r\n      for (let i = 0; i < event.length; i++) {\r\n        declaredEvents[event[i]] = true;\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { getDocument } from './dom/getDocument';\r\nimport { mergeStyles } from '@uifabric/merge-styles';\r\nimport { EventGroup } from './EventGroup';\r\n\r\nlet _scrollbarWidth: number;\r\nlet _bodyScrollDisabledCount = 0;\r\n\r\nconst DisabledScrollClassName = mergeStyles({\r\n  overflow: 'hidden !important' as 'hidden'\r\n});\r\n\r\n/**\r\n * Placing this attribute on scrollable divs optimizes detection to know\r\n * if the div is scrollable or not (given we can avoid expensive operations\r\n * like getComputedStyle.)\r\n *\r\n * @public\r\n */\r\nexport const DATA_IS_SCROLLABLE_ATTRIBUTE = 'data-is-scrollable';\r\n\r\nconst _makeElementScrollAllower = () => {\r\n  let _previousClientY = 0;\r\n  let _element: Element | null = null;\r\n\r\n  // remember the clientY for future calls of _preventOverscrolling\r\n  const _saveClientY = (event: TouchEvent): void => {\r\n    if (event.targetTouches.length === 1) {\r\n      _previousClientY = event.targetTouches[0].clientY;\r\n    }\r\n  };\r\n\r\n  // prevent the body from scrolling when the user attempts\r\n  // to scroll past the top or bottom of the element\r\n  const _preventOverscrolling = (event: TouchEvent): void => {\r\n    // only respond to a single-finger touch\r\n    if (event.targetTouches.length !== 1) {\r\n      return;\r\n    }\r\n\r\n    // prevent the body touchmove handler from firing\r\n    // so that scrolling is allowed within the element\r\n    event.stopPropagation();\r\n\r\n    if (!_element) {\r\n      return;\r\n    }\r\n\r\n    const clientY = event.targetTouches[0].clientY - _previousClientY;\r\n\r\n    const scrollableParent = findScrollableParent(event.target as HTMLElement);\r\n    if (scrollableParent) {\r\n      _element = scrollableParent;\r\n    }\r\n\r\n    // if the element is scrolled to the top,\r\n    // prevent the user from scrolling up\r\n    if (_element.scrollTop === 0 && clientY > 0) {\r\n      event.preventDefault();\r\n    }\r\n\r\n    // if the element is scrolled to the bottom,\r\n    // prevent the user from scrolling down\r\n    if (_element.scrollHeight - _element.scrollTop <= _element.clientHeight && clientY < 0) {\r\n      event.preventDefault();\r\n    }\r\n  };\r\n\r\n  return (element: HTMLElement | null, events: EventGroup): void => {\r\n    if (!element) {\r\n      return;\r\n    }\r\n\r\n    events.on(element, 'touchstart', _saveClientY, { passive: false });\r\n    events.on(element, 'touchmove', _preventOverscrolling, { passive: false });\r\n\r\n    _element = element;\r\n  };\r\n};\r\n\r\n/**\r\n * Allows the user to scroll within a element,\r\n * while preventing the user from scrolling the body\r\n */\r\nexport const allowScrollOnElement = _makeElementScrollAllower();\r\n\r\nconst _disableIosBodyScroll = (event: TouchEvent) => {\r\n  event.preventDefault();\r\n};\r\n\r\n/**\r\n * Disables the body scrolling.\r\n *\r\n * @public\r\n */\r\nexport function disableBodyScroll(): void {\r\n  let doc = getDocument();\r\n\r\n  if (doc && doc.body && !_bodyScrollDisabledCount) {\r\n    doc.body.classList.add(DisabledScrollClassName);\r\n    doc.body.addEventListener('touchmove', _disableIosBodyScroll, { passive: false, capture: false });\r\n  }\r\n\r\n  _bodyScrollDisabledCount++;\r\n}\r\n\r\n/**\r\n * Enables the body scrolling.\r\n *\r\n * @public\r\n */\r\nexport function enableBodyScroll(): void {\r\n  if (_bodyScrollDisabledCount > 0) {\r\n    let doc = getDocument();\r\n\r\n    if (doc && doc.body && _bodyScrollDisabledCount === 1) {\r\n      doc.body.classList.remove(DisabledScrollClassName);\r\n      doc.body.removeEventListener('touchmove', _disableIosBodyScroll);\r\n    }\r\n\r\n    _bodyScrollDisabledCount--;\r\n  }\r\n}\r\n\r\n/**\r\n * Calculates the width of a scrollbar for the browser/os.\r\n *\r\n * @public\r\n */\r\nexport function getScrollbarWidth(): number {\r\n  if (_scrollbarWidth === undefined) {\r\n    let scrollDiv: HTMLElement = document.createElement('div');\r\n    scrollDiv.style.setProperty('width', '100px');\r\n    scrollDiv.style.setProperty('height', '100px');\r\n    scrollDiv.style.setProperty('overflow', 'scroll');\r\n    scrollDiv.style.setProperty('position', 'absolute');\r\n    scrollDiv.style.setProperty('top', '-9999px');\r\n    document.body.appendChild(scrollDiv);\r\n    // Get the scrollbar width\r\n    _scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n\r\n    // Delete the DIV\r\n    document.body.removeChild(scrollDiv);\r\n  }\r\n\r\n  return _scrollbarWidth;\r\n}\r\n\r\n/**\r\n * Traverses up the DOM for the element with the data-is-scrollable=true attribute, or returns\r\n * document.body.\r\n *\r\n * @public\r\n */\r\nexport function findScrollableParent(startingElement: HTMLElement | null): HTMLElement | null {\r\n  let el: HTMLElement | null = startingElement;\r\n\r\n  // First do a quick scan for the scrollable attribute.\r\n  while (el && el !== document.body) {\r\n    if (el.getAttribute(DATA_IS_SCROLLABLE_ATTRIBUTE) === 'true') {\r\n      return el;\r\n    }\r\n    el = el.parentElement;\r\n  }\r\n\r\n  // If we haven't found it, the use the slower method: compute styles to evaluate if overflow is set.\r\n  el = startingElement;\r\n\r\n  while (el && el !== document.body) {\r\n    if (el.getAttribute(DATA_IS_SCROLLABLE_ATTRIBUTE) !== 'false') {\r\n      const computedStyles = getComputedStyle(el);\r\n      let overflowY = computedStyles ? computedStyles.getPropertyValue('overflow-y') : '';\r\n\r\n      if (overflowY && (overflowY === 'scroll' || overflowY === 'auto')) {\r\n        return el;\r\n      }\r\n    }\r\n\r\n    el = el.parentElement;\r\n  }\r\n\r\n  // Fall back to window scroll.\r\n  if (!el || el === document.body) {\r\n    // tslint:disable-next-line:no-any\r\n    el = window as any;\r\n  }\r\n\r\n  return el;\r\n}\r\n","import { _isSSR } from './setSSR';\r\n/**\r\n * Helper to get the document object. Note that in popup window cases, document\r\n * might be the wrong document, which is why we look at ownerDocument for the\r\n * truth. Also note that the SSR flag is used to test ssr scenarios even if\r\n * document is defined (from JSDOM for example.)\r\n *\r\n * @public\r\n */\r\nexport function getDocument(rootElement?: HTMLElement | null): Document | undefined {\r\n  if (_isSSR || typeof document === 'undefined') {\r\n    return undefined;\r\n  } else {\r\n    return rootElement && rootElement.ownerDocument ? rootElement.ownerDocument : document;\r\n  }\r\n}\r\n","import { IRectangle } from '../IRectangle';\r\n/**\r\n * Helper to get bounding client rect. Passing in window will get the window size.\r\n *\r\n * @public\r\n */\r\nexport function getRect(element: HTMLElement | Window | null): IRectangle | undefined {\r\n  let rect: IRectangle | undefined;\r\n  if (element) {\r\n    if (element === window) {\r\n      rect = {\r\n        left: 0,\r\n        top: 0,\r\n        width: window.innerWidth,\r\n        height: window.innerHeight,\r\n        right: window.innerWidth,\r\n        bottom: window.innerHeight\r\n      };\r\n    } else if ((element as HTMLElement).getBoundingClientRect) {\r\n      rect = (element as HTMLElement).getBoundingClientRect();\r\n    }\r\n  }\r\n  return rect;\r\n}\r\n","let _warningCallback: ((message: string) => void) | undefined = undefined;\r\n\r\nexport type ISettingsMap<T> = { [P in keyof T]?: string };\r\n\r\n/**\r\n * Sends a warning to console, if the api is present.\r\n *\r\n * @public\r\n * @param message - Warning message.\r\n */\r\nexport function warn(message: string): void {\r\n  if (_warningCallback && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n    _warningCallback(message);\r\n  } else if (console && console.warn) {\r\n    console.warn(message);\r\n  }\r\n}\r\n\r\n/**\r\n * Configures the warning callback. Passing in undefined will reset it to use the default\r\n * console.warn function.\r\n *\r\n * @public\r\n * @param warningCallback - Callback to override the generated warnings.\r\n */\r\nexport function setWarningCallback(warningCallback?: (message: string) => void): void {\r\n  _warningCallback = warningCallback;\r\n}\r\n","import { ISettingsMap, warn } from './warn';\r\n/**\r\n * Warns when two props which are mutually exclusive are both being used.\r\n *\r\n * @public\r\n * @param componentName - The name of the component being used.\r\n * @param props - The props passed into the component.\r\n * @param exclusiveMap - A map where the key is a parameter, and the value is the other parameter.\r\n */\r\nexport function warnMutuallyExclusive<P>(componentName: string, props: P, exclusiveMap: ISettingsMap<P>): void {\r\n  if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n    for (const propName in exclusiveMap) {\r\n      if (props && propName in props) {\r\n        let propInExclusiveMapValue = exclusiveMap[propName];\r\n        if (propInExclusiveMapValue && propInExclusiveMapValue in props) {\r\n          warn(`${componentName} property '${propName}' is mutually exclusive with '${exclusiveMap[propName]}'. Use one or the other.`);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { ISettingsMap, warn } from './warn';\r\n/**\r\n * Warns when a deprecated props are being used.\r\n *\r\n * @public\r\n * @param componentName - The name of the component being used.\r\n * @param props - The props passed into the component.\r\n * @param deprecationMap - The map of deprecations, where key is the prop name and the value is\r\n * either null or a replacement prop name.\r\n */\r\nexport function warnDeprecations<P>(componentName: string, props: P, deprecationMap: ISettingsMap<P>): void {\r\n  if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n    for (const propName in deprecationMap) {\r\n      if (props && propName in props) {\r\n        let deprecationMessage = `${componentName} property '${propName}' was used but has been deprecated.`;\r\n        const replacementPropName = deprecationMap[propName];\r\n        if (replacementPropName) {\r\n          deprecationMessage += ` Use '${replacementPropName}' instead.`;\r\n        }\r\n        warn(deprecationMessage);\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { _isSSR } from './setSSR';\r\n/**\r\n * Helper to get the window object. Note that in popup scenarios the window object\r\n * may not be the window use ex\r\n *\r\n * @public\r\n */\r\nexport function getWindow(rootElement?: Element | null): Window | undefined {\r\n  if (_isSSR || typeof window === 'undefined') {\r\n    return undefined;\r\n  } else {\r\n    return rootElement && rootElement.ownerDocument && rootElement.ownerDocument.defaultView\r\n      ? rootElement.ownerDocument.defaultView\r\n      : window;\r\n  }\r\n}\r\n","/**\r\n * Simulated enum for keycodes. These will get inlined by uglify when used much like an enum\r\n *\r\n * @public\r\n * {@docCategory KeyCodes}\r\n */\r\nexport const KeyCodes = {\r\n  backspace: 8 as 8,\r\n  tab: 9 as 9,\r\n  enter: 13 as 13,\r\n  shift: 16 as 16,\r\n  ctrl: 17 as 17,\r\n  alt: 18 as 18,\r\n  pauseBreak: 19 as 19,\r\n  capslock: 20 as 20,\r\n  escape: 27 as 27,\r\n  space: 32 as 32,\r\n  pageUp: 33 as 33,\r\n  pageDown: 34 as 34,\r\n  end: 35 as 35,\r\n  home: 36 as 36,\r\n  left: 37 as 37,\r\n  up: 38 as 38,\r\n  right: 39 as 39,\r\n  down: 40 as 40,\r\n  insert: 45 as 45,\r\n  del: 46 as 46,\r\n  zero: 48 as 48,\r\n  one: 49 as 49,\r\n  two: 50 as 50,\r\n  three: 51 as 51,\r\n  four: 52 as 52,\r\n  five: 53 as 53,\r\n  six: 54 as 54,\r\n  seven: 55 as 55,\r\n  eight: 56 as 56,\r\n  nine: 57 as 57,\r\n  a: 65 as 65,\r\n  b: 66 as 66,\r\n  c: 67 as 67,\r\n  d: 68 as 68,\r\n  e: 69 as 69,\r\n  f: 70 as 70,\r\n  g: 71 as 71,\r\n  h: 72 as 72,\r\n  i: 73 as 73,\r\n  j: 74 as 74,\r\n  k: 75 as 75,\r\n  l: 76 as 76,\r\n  m: 77 as 77,\r\n  n: 78 as 78,\r\n  o: 79 as 79,\r\n  p: 80 as 80,\r\n  q: 81 as 81,\r\n  r: 82 as 82,\r\n  s: 83 as 83,\r\n  t: 84 as 84,\r\n  u: 85 as 85,\r\n  v: 86 as 86,\r\n  w: 87 as 87,\r\n  x: 88 as 88,\r\n  y: 89 as 89,\r\n  z: 90 as 90,\r\n  leftWindow: 91 as 91,\r\n  rightWindow: 92 as 92,\r\n  select: 93 as 93,\r\n  zero_numpad: 96 as 96,\r\n  one_numpad: 97 as 97,\r\n  two_numpad: 98 as 98,\r\n  three_numpad: 99 as 99,\r\n  four_numpad: 100 as 100,\r\n  five_numpad: 101 as 101,\r\n  six_numpad: 102 as 102,\r\n  seven_numpad: 103 as 103,\r\n  eight_numpad: 104 as 104,\r\n  nine_numpad: 105 as 105,\r\n  multiply: 106 as 106,\r\n  add: 107 as 107,\r\n  subtract: 109 as 109,\r\n  decimalPoint: 110 as 110,\r\n  divide: 111 as 111,\r\n  f1: 112 as 112,\r\n  f2: 113 as 113,\r\n  f3: 114 as 114,\r\n  f4: 115 as 115,\r\n  f5: 116 as 116,\r\n  f6: 117 as 117,\r\n  f7: 118 as 118,\r\n  f8: 119 as 119,\r\n  f9: 120 as 120,\r\n  f10: 121 as 121,\r\n  f11: 122 as 122,\r\n  f12: 123 as 123,\r\n  numlock: 144 as 144,\r\n  scrollLock: 145 as 145,\r\n  semicolon: 186 as 186,\r\n  equalSign: 187 as 187,\r\n  comma: 188 as 188,\r\n  dash: 189 as 189,\r\n  period: 190 as 190,\r\n  forwardSlash: 191 as 191,\r\n  graveAccent: 192 as 192,\r\n  openBracket: 219 as 219,\r\n  backSlash: 220 as 220,\r\n  closeBracket: 221 as 221,\r\n  singleQuote: 222 as 222\r\n};\r\nexport type KeyCodes = number;\r\n","import { KeyCodes } from './KeyCodes';\r\n\r\nconst DirectionalKeyCodes: { [key: number]: number } = {\r\n  [KeyCodes.up]: 1,\r\n  [KeyCodes.down]: 1,\r\n  [KeyCodes.left]: 1,\r\n  [KeyCodes.right]: 1,\r\n  [KeyCodes.home]: 1,\r\n  [KeyCodes.end]: 1,\r\n  [KeyCodes.tab]: 1,\r\n  [KeyCodes.pageUp]: 1,\r\n  [KeyCodes.pageDown]: 1\r\n};\r\n\r\n/**\r\n * Returns true if the keycode is a directional keyboard key.\r\n */\r\nexport function isDirectionalKeyCode(which: number): boolean {\r\n  return !!DirectionalKeyCodes[which];\r\n}\r\n\r\n/**\r\n * Adds a keycode to the list of keys that, when pressed, should cause the focus outlines to be visible.\r\n * This can be used to add global shortcut keys that directionally move from section to section within\r\n * an app or between focus trap zones.\r\n */\r\nexport function addDirectionalKeyCode(which: number): void {\r\n  DirectionalKeyCodes[which] = 1;\r\n}\r\n","import { getWindow } from './dom/getWindow';\r\nimport { isDirectionalKeyCode } from './keyboard';\r\n\r\nexport const IsFocusVisibleClassName = 'ms-Fabric--isFocusVisible';\r\n\r\n/**\r\n * Initializes the logic which:\r\n *\r\n * 1. Subscribes keydown and mousedown events. (It will only do it once per window,\r\n *    so it's safe to call this method multiple times.)\r\n * 2. When the user presses directional keyboard keys, adds the 'ms-Fabric--isFocusVisible' classname\r\n *    to the document body.\r\n * 3. When the user clicks a mouse button, we remove the classname if it exists.\r\n *\r\n * This logic allows components on the page to conditionally render focus treatments only\r\n * if the global classname exists, which simplifies logic overall.\r\n *\r\n * @param window - the window used to add the event listeners\r\n */\r\nexport function initializeFocusRects(window?: Window): void {\r\n  const win = (window || getWindow()) as Window & { __hasInitializeFocusRects__: boolean };\r\n\r\n  if (win && !win.__hasInitializeFocusRects__) {\r\n    win.__hasInitializeFocusRects__ = true;\r\n    win.addEventListener('mousedown', _onMouseDown, true);\r\n    win.addEventListener('keydown', _onKeyDown as () => void, true);\r\n  }\r\n}\r\n\r\nfunction _onMouseDown(ev: MouseEvent): void {\r\n  const win = getWindow(ev.target as Element);\r\n\r\n  if (win) {\r\n    const { classList } = win.document.body;\r\n\r\n    if (classList.contains(IsFocusVisibleClassName)) {\r\n      classList.remove(IsFocusVisibleClassName);\r\n    }\r\n  }\r\n}\r\n\r\nfunction _onKeyDown(ev: KeyboardEvent): void {\r\n  const win = getWindow(ev.target as Element);\r\n\r\n  if (win) {\r\n    const { classList } = win.document.body;\r\n\r\n    if (isDirectionalKeyCode(ev.which) && !classList.contains(IsFocusVisibleClassName)) {\r\n      classList.add(IsFocusVisibleClassName);\r\n    }\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { Async } from './Async';\r\nimport { EventGroup } from './EventGroup';\r\nimport { IDisposable } from './IDisposable';\r\nimport { ISettingsMap } from './warn/warn';\r\nimport { warnConditionallyRequiredProps } from './warn/warnConditionallyRequiredProps';\r\nimport { warnMutuallyExclusive } from './warn/warnMutuallyExclusive';\r\nimport { warnDeprecations } from './warn/warnDeprecations';\r\nimport { initializeFocusRects } from './initializeFocusRects';\r\nimport { initializeDir } from './initializeDir';\r\nimport { IRefObject } from './createRef';\r\nimport { IBaseProps } from './BaseComponent.types';\r\n\r\n/**\r\n * BaseComponent class, which provides basic helpers for all components.\r\n *\r\n * @public\r\n * {@docCategory BaseComponent}\r\n */\r\nexport class BaseComponent<TProps extends IBaseProps = {}, TState = {}> extends React.Component<TProps, TState> {\r\n  /**\r\n   * @deprecated Use React's error boundaries instead.\r\n   */\r\n  // tslint:disable-next-line:no-any\r\n  public static onError: (errorMessage?: string, ex?: any) => void;\r\n\r\n  /**\r\n   * Controls whether the componentRef prop will be resolved by this component instance. If you are\r\n   * implementing a passthrough (higher-order component), you would set this to false and pass through\r\n   * the props to the inner component, allowing it to resolve the componentRef.\r\n   */\r\n  protected _skipComponentRefResolution: boolean;\r\n\r\n  // tslint:disable:variable-name\r\n  private __async: Async;\r\n  private __events: EventGroup;\r\n  private __disposables: IDisposable[] | null;\r\n  private __resolves: { [name: string]: (ref: React.ReactNode) => React.ReactNode };\r\n  private __className: string;\r\n  // tslint:enable:variable-name\r\n\r\n  /**\r\n   * BaseComponent constructor\r\n   * @param props - The props for the component.\r\n   * @param context - The context for the component.\r\n   */\r\n  // tslint:disable-next-line:no-any\r\n  constructor(props: TProps, context?: any) {\r\n    super(props, context);\r\n\r\n    // Ensure basic assumptions about the environment.\r\n    initializeFocusRects();\r\n    initializeDir();\r\n\r\n    _makeAllSafe(this, BaseComponent.prototype, [\r\n      'componentDidMount',\r\n      'shouldComponentUpdate',\r\n      'getSnapshotBeforeUpdate',\r\n      'render',\r\n      'componentDidUpdate',\r\n      'componentWillUnmount'\r\n    ]);\r\n  }\r\n\r\n  /**\r\n   * When the component receives props, make sure the componentRef is updated.\r\n   */\r\n  public componentDidUpdate(prevProps: TProps, prevState: TState): void {\r\n    this._updateComponentRef(prevProps, this.props);\r\n  }\r\n\r\n  /**\r\n   * When the component has mounted, update the componentRef.\r\n   */\r\n  public componentDidMount(): void {\r\n    this._setComponentRef(this.props.componentRef, this);\r\n  }\r\n\r\n  /**\r\n   * If we have disposables, dispose them automatically on unmount.\r\n   */\r\n  public componentWillUnmount(): void {\r\n    this._setComponentRef(this.props.componentRef, null);\r\n\r\n    if (this.__disposables) {\r\n      for (let i = 0, len = this._disposables.length; i < len; i++) {\r\n        let disposable = this.__disposables[i];\r\n\r\n        if (disposable.dispose) {\r\n          disposable.dispose();\r\n        }\r\n      }\r\n      this.__disposables = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the object's class name.\r\n   */\r\n  public get className(): string {\r\n    if (!this.__className) {\r\n      let funcNameRegex = /function (.{1,})\\(/;\r\n      let results = funcNameRegex.exec(this.constructor.toString());\r\n\r\n      this.__className = results && results.length > 1 ? results[1] : '';\r\n    }\r\n\r\n    return this.__className;\r\n  }\r\n\r\n  /**\r\n   * Allows subclasses to push things to this._disposables to be auto disposed.\r\n   */\r\n  protected get _disposables(): IDisposable[] {\r\n    if (!this.__disposables) {\r\n      this.__disposables = [];\r\n    }\r\n    return this.__disposables;\r\n  }\r\n\r\n  /**\r\n   * Gets the async instance associated with the component, created on demand. The async instance gives\r\n   * subclasses a way to execute setTimeout/setInterval async calls safely, where the callbacks\r\n   * will be cleared/ignored automatically after unmounting. The helpers within the async object also\r\n   * preserve the this pointer so that you don't need to \"bind\" the callbacks.\r\n   */\r\n  protected get _async(): Async {\r\n    if (!this.__async) {\r\n      this.__async = new Async(this);\r\n      this._disposables.push(this.__async);\r\n    }\r\n\r\n    return this.__async;\r\n  }\r\n\r\n  /**\r\n   * Gets the event group instance assocaited with the component, created on demand. The event instance\r\n   * provides on/off methods for listening to DOM (or regular javascript object) events. The event callbacks\r\n   * will be automatically disconnected after unmounting. The helpers within the events object also\r\n   * preserve the this reference so that you don't need to \"bind\" the callbacks.\r\n   */\r\n  protected get _events(): EventGroup {\r\n    if (!this.__events) {\r\n      this.__events = new EventGroup(this);\r\n      this._disposables.push(this.__events);\r\n    }\r\n\r\n    return this.__events;\r\n  }\r\n\r\n  /**\r\n   * Helper to return a memoized ref resolver function.\r\n   * @param refName - Name of the member to assign the ref to.\r\n   * @returns A function instance keyed from the given refname.\r\n   * @deprecated Use `createRef` from React.createRef.\r\n   */\r\n  protected _resolveRef(refName: string): (ref: React.ReactNode) => React.ReactNode {\r\n    if (!this.__resolves) {\r\n      this.__resolves = {};\r\n    }\r\n\r\n    if (!this.__resolves[refName]) {\r\n      // tslint:disable-next-line:no-any\r\n      this.__resolves[refName] = (ref: React.ReactNode) => {\r\n        // tslint:disable-next-line:no-any\r\n        return ((this as any)[refName] = ref);\r\n      };\r\n    }\r\n\r\n    return this.__resolves[refName];\r\n  }\r\n\r\n  /**\r\n   * Updates the componentRef (by calling it with \"this\" when necessary.)\r\n   */\r\n  protected _updateComponentRef(currentProps: IBaseProps, newProps: IBaseProps = {}): void {\r\n    // currentProps *should* always be defined, but verify that just in case a subclass is manually\r\n    // calling a lifecycle method with no parameters (which has happened) or other odd usage.\r\n    if (currentProps && newProps && currentProps.componentRef !== newProps.componentRef) {\r\n      this._setComponentRef(currentProps.componentRef, null);\r\n      this._setComponentRef(newProps.componentRef, this);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Warns when a deprecated props are being used.\r\n   *\r\n   * @param deprecationMap - The map of deprecations, where key is the prop name and the value is\r\n   * either null or a replacement prop name.\r\n   */\r\n  protected _warnDeprecations(deprecationMap: ISettingsMap<TProps>): void {\r\n    warnDeprecations(this.className, this.props, deprecationMap);\r\n  }\r\n\r\n  /**\r\n   * Warns when props which are mutually exclusive with each other are both used.\r\n   *\r\n   * @param mutuallyExclusiveMap - The map of mutually exclusive props.\r\n   */\r\n  protected _warnMutuallyExclusive(mutuallyExclusiveMap: ISettingsMap<TProps>): void {\r\n    warnMutuallyExclusive(this.className, this.props, mutuallyExclusiveMap);\r\n  }\r\n\r\n  /**\r\n   * Warns when props are required if a condition is met.\r\n   *\r\n   * @param requiredProps - The name of the props that are required when the condition is met.\r\n   * @param conditionalPropName - The name of the prop that the condition is based on.\r\n   * @param condition - Whether the condition is met.\r\n   */\r\n  protected _warnConditionallyRequiredProps(requiredProps: string[], conditionalPropName: string, condition: boolean): void {\r\n    warnConditionallyRequiredProps(this.className, this.props, requiredProps, conditionalPropName, condition);\r\n  }\r\n\r\n  private _setComponentRef<TRefInterface>(ref: IRefObject<TRefInterface> | undefined, value: TRefInterface | null): void {\r\n    if (!this._skipComponentRefResolution && ref) {\r\n      if (typeof ref === 'function') {\r\n        ref(value);\r\n      }\r\n\r\n      if (typeof ref === 'object') {\r\n        // tslint:disable:no-any\r\n        (ref as any).current = value;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to override a given method with a wrapper method that can try/catch the original, but also\r\n * ensures that the BaseComponent's methods are called before the subclass's. This ensures that\r\n * componentWillUnmount in the base is called and that things in the _disposables array are disposed.\r\n */\r\nfunction _makeAllSafe(obj: BaseComponent<{}, {}>, prototype: Object, methodNames: string[]): void {\r\n  for (let i = 0, len = methodNames.length; i < len; i++) {\r\n    _makeSafe(obj, prototype, methodNames[i]);\r\n  }\r\n}\r\n\r\nfunction _makeSafe(obj: BaseComponent<{}, {}>, prototype: Object, methodName: string): void {\r\n  // tslint:disable:no-any\r\n  let classMethod = (obj as any)[methodName];\r\n  let prototypeMethod = (prototype as any)[methodName];\r\n  // tslint:enable:no-any\r\n\r\n  if (classMethod || prototypeMethod) {\r\n    // tslint:disable-next-line:no-any\r\n    (obj as any)[methodName] = function(): any {\r\n      let retVal;\r\n\r\n      if (prototypeMethod) {\r\n        retVal = prototypeMethod.apply(this, arguments);\r\n      }\r\n      if (classMethod !== prototypeMethod) {\r\n        retVal = classMethod.apply(this, arguments);\r\n      }\r\n\r\n      return retVal;\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Simple constant function for returning null, used to render empty templates in JSX.\r\n *\r\n * @public\r\n */\r\nexport function nullRender(): JSX.Element | null {\r\n  return null;\r\n}\r\n","import { getWindow } from './dom/getWindow';\r\n\r\nexport function initializeDir(window?: Window): void {\r\n  const win = (window || getWindow()) as Window & { __hasInitializedDir__: boolean };\r\n\r\n  if (win && !win.__hasInitializedDir__) {\r\n    win.__hasInitializedDir__ = true;\r\n\r\n    // Ensure that the documentElement has a 'dir' attribute.\r\n    const { documentElement } = win.document;\r\n\r\n    if (!documentElement.hasAttribute('dir')) {\r\n      documentElement.setAttribute('dir', 'ltr');\r\n    }\r\n  }\r\n}\r\n","import { warn } from './warn';\r\n/**\r\n * Warns when props are required if a condition is met.\r\n *\r\n * @public\r\n * @param componentName - The name of the component being used.\r\n * @param props - The props passed into the component.\r\n * @param requiredProps - The name of the props that are required when the condition is met.\r\n * @param conditionalPropName - The name of the prop that the condition is based on.\r\n * @param condition - Whether the condition is met.\r\n */\r\nexport function warnConditionallyRequiredProps<P>(\r\n  componentName: string,\r\n  props: P,\r\n  requiredProps: string[],\r\n  conditionalPropName: string,\r\n  condition: boolean\r\n): void {\r\n  if (condition === true && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n    for (const requiredPropName of requiredProps) {\r\n      if (!(requiredPropName in props)) {\r\n        warn(`${componentName} property '${requiredPropName}' is required when '${conditionalPropName}' is used.'`);\r\n      }\r\n    }\r\n  }\r\n}\r\n","import * as React from 'react';\r\n\r\n/**\r\n * DelayedRender component props.\r\n *\r\n * @public\r\n */\r\nexport interface IDelayedRenderProps extends React.Props<{}> {\r\n  /**\r\n   * Number of milliseconds to delay rendering children.\r\n   */\r\n  delay?: number;\r\n}\r\n\r\n/**\r\n * DelayedRender component state.\r\n *\r\n * @internal\r\n */\r\nexport interface IDelayedRenderState {\r\n  /**\r\n   * Whether the component is rendered or not.\r\n   */\r\n  isRendered: boolean;\r\n}\r\n\r\n/**\r\n * Utility component for delaying the render of a child component after a given delay. This component\r\n * requires a single child component; don't pass in many components. Wrap multiple components in a DIV\r\n * if necessary.\r\n *\r\n * @public\r\n * {@docCategory DelayedRender}\r\n */\r\nexport class DelayedRender extends React.Component<IDelayedRenderProps, IDelayedRenderState> {\r\n  public static defaultProps = {\r\n    delay: 0\r\n  };\r\n\r\n  private _timeoutId: number | undefined;\r\n\r\n  constructor(props: IDelayedRenderProps) {\r\n    super(props);\r\n    this.state = {\r\n      isRendered: false\r\n    };\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    let { delay } = this.props;\r\n    this._timeoutId = setTimeout(() => {\r\n      this.setState({\r\n        isRendered: true\r\n      });\r\n    }, delay);\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    if (this._timeoutId) {\r\n      clearTimeout(this._timeoutId);\r\n    }\r\n  }\r\n\r\n  public render(): React.ReactElement<{}> | null {\r\n    return this.state.isRendered ? React.Children.only(this.props.children) : null;\r\n  }\r\n}\r\n","/**\r\n * Storing global state in local module variables has issues when more than one copy\r\n * if the module gets loaded on the page (due to a bundling error or simply by consuming\r\n * a prebundled script.)\r\n *\r\n * This file contains helpers to deal with the getting and setting local state, and allows\r\n * callers to get called back when it mutates.\r\n */\r\n\r\n// tslint:disable:no-any\r\n\r\nconst GLOBAL_SETTINGS_PROP_NAME = '__globalSettings__';\r\nconst CALLBACK_STATE_PROP_NAME = '__callbacks__';\r\n\r\nlet _counter = 0;\r\n\r\n/**\r\n * Change description used for change callbacks in GlobalSettings.\r\n *\r\n * @public\r\n * {@docCategory IChangeDescription}\r\n */\r\nexport interface IChangeDescription {\r\n  key: string;\r\n  // tslint:disable-next-line:no-any\r\n  oldValue: any;\r\n  // tslint:disable-next-line:no-any\r\n  value: any;\r\n}\r\n\r\n/**\r\n * Change event callback.\r\n *\r\n * @public\r\n * {@docCategory IChangeEventCallback}\r\n */\r\nexport interface IChangeEventCallback {\r\n  __id__?: string;\r\n  (changeDescription?: IChangeDescription): void;\r\n}\r\n\r\n/**\r\n * Global settings helper, which stores settings in the global (window) namespace.\r\n * If window is not provided, it will store settings in module scope. Provides a\r\n * way to observe changes as well when their values change.\r\n *\r\n * @public\r\n * {@docCategory GlobalSettings}\r\n */\r\nexport class GlobalSettings {\r\n  public static getValue<T>(key: string, defaultValue?: T | (() => T)): T {\r\n    const globalSettings = _getGlobalSettings();\r\n\r\n    if (globalSettings[key] === undefined) {\r\n      globalSettings[key] = typeof defaultValue === 'function' ? (defaultValue as Function)() : defaultValue;\r\n    }\r\n\r\n    return globalSettings[key];\r\n  }\r\n\r\n  public static setValue<T>(key: string, value: T): T {\r\n    const globalSettings = _getGlobalSettings();\r\n    const callbacks = globalSettings[CALLBACK_STATE_PROP_NAME];\r\n    let oldValue = globalSettings[key];\r\n\r\n    if (value !== oldValue) {\r\n      globalSettings[key] = value;\r\n\r\n      let changeDescription = {\r\n        oldValue,\r\n        value,\r\n        key\r\n      };\r\n\r\n      for (let id in callbacks) {\r\n        if (callbacks.hasOwnProperty(id)) {\r\n          callbacks[id](changeDescription);\r\n        }\r\n      }\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  public static addChangeListener(cb: IChangeEventCallback): void {\r\n    // Note: we use generated ids on the callbacks to create a map of the callbacks, which optimizes removal.\r\n    // (It's faster to delete a key than it is to look up the index of an object and splice an array.)\r\n    let id = cb.__id__;\r\n    const callbacks = _getCallbacks();\r\n\r\n    if (!id) {\r\n      id = cb.__id__ = String(_counter++);\r\n    }\r\n\r\n    callbacks[id] = cb;\r\n  }\r\n\r\n  public static removeChangeListener(cb: IChangeEventCallback): void {\r\n    const callbacks = _getCallbacks();\r\n    delete callbacks[cb.__id__ as string];\r\n  }\r\n}\r\n\r\nfunction _getGlobalSettings(): { [key: string]: any } {\r\n  const globalObj: { [key: string]: any } = typeof window !== 'undefined' ? window : {};\r\n\r\n  if (!globalObj[GLOBAL_SETTINGS_PROP_NAME]) {\r\n    globalObj[GLOBAL_SETTINGS_PROP_NAME] = {\r\n      [CALLBACK_STATE_PROP_NAME]: {}\r\n    };\r\n  }\r\n\r\n  return globalObj[GLOBAL_SETTINGS_PROP_NAME];\r\n}\r\n\r\nfunction _getCallbacks(): { [key: string]: () => void } {\r\n  const globalSettings = _getGlobalSettings();\r\n  return globalSettings[CALLBACK_STATE_PROP_NAME];\r\n}\r\n","/**\r\n * Rectangle helper class.\r\n *\r\n * @public\r\n * {@docCategory Rectangle}\r\n */\r\nexport class Rectangle {\r\n  public top: number;\r\n  public bottom: number;\r\n  public left: number;\r\n  public right: number;\r\n\r\n  constructor(left: number = 0, right: number = 0, top: number = 0, bottom: number = 0) {\r\n    this.top = top;\r\n    this.bottom = bottom;\r\n    this.left = left;\r\n    this.right = right;\r\n  }\r\n\r\n  /**\r\n   * Calculated automatically by subtracting the right from left\r\n   */\r\n  get width(): number {\r\n    return this.right - this.left;\r\n  }\r\n\r\n  /**\r\n   * Calculated automatically by subtracting the bottom from top.\r\n   */\r\n  get height(): number {\r\n    return this.bottom - this.top;\r\n  }\r\n\r\n  /**\r\n   * Tests if another rect is approximately equal to this rect (within 4 decimal places.)\r\n   */\r\n  public equals(rect: Rectangle): boolean {\r\n    // I'm fixing it to 4 decimal places because it allows enough precision and will handle cases when something should be rounded,\r\n    // like .999999 should round to 1.\r\n    return (\r\n      parseFloat(this.top.toFixed(4)) === parseFloat(rect.top.toFixed(4)) &&\r\n      parseFloat(this.bottom.toFixed(4)) === parseFloat(rect.bottom.toFixed(4)) &&\r\n      parseFloat(this.left.toFixed(4)) === parseFloat(rect.left.toFixed(4)) &&\r\n      parseFloat(this.right.toFixed(4)) === parseFloat(rect.right.toFixed(4))\r\n    );\r\n  }\r\n}\r\n","// tslint:disable:no-any\r\n\r\n/**\r\n * Returns a single function which will call each of the given functions in the context of the\r\n * parent.\r\n */\r\nexport function appendFunction(parent: any, ...functions: (any)[]): () => void {\r\n  if (functions.length < 2) {\r\n    return functions[0] as () => void;\r\n  }\r\n\r\n  return (...args: any[]): void => {\r\n    functions.forEach((f: () => void) => f && f.apply(parent, args));\r\n  };\r\n}\r\n","/**\r\n * ARIA helper to concatenate attributes, returning undefined if all attributes\r\n * are undefined. (Empty strings are not a valid ARIA attribute value.)\r\n *\r\n * @param ariaAttributes - ARIA attributes to merge\r\n */\r\nexport function mergeAriaAttributeValues(...ariaAttributes: (string | undefined)[]): string | undefined {\r\n  const mergedAttribute = ariaAttributes\r\n    .filter((arg: string | undefined) => arg !== undefined && arg !== null)\r\n    .join(' ')\r\n    .trim();\r\n  return mergedAttribute === '' ? undefined : mergedAttribute;\r\n}\r\n","/**\r\n * Helper to find the index of an item within an array, using a callback to\r\n * determine the match.\r\n *\r\n * @public\r\n * @param array - Array to search.\r\n * @param cb - Callback which returns true on matches.\r\n */\r\nexport function findIndex<T>(array: T[], cb: (item: T, index: number) => boolean): number {\r\n  let index = -1;\r\n\r\n  for (let i = 0; array && i < array.length; i++) {\r\n    if (cb(array[i], i)) {\r\n      index = i;\r\n      break;\r\n    }\r\n  }\r\n\r\n  return index;\r\n}\r\n\r\n/**\r\n * Helper to find the first item within an array that satisfies the callback.\r\n * @param array - Array to search\r\n * @param cb - Callback which returns true on matches\r\n */\r\nexport function find<T>(array: T[], cb: (item: T, index: number) => boolean): T | undefined {\r\n  let index = findIndex(array, cb);\r\n\r\n  if (index < 0) {\r\n    return undefined;\r\n  }\r\n\r\n  return array[index];\r\n}\r\n\r\n/**\r\n * Creates an array of a given size and helper method to populate.\r\n *\r\n * @public\r\n * @param size - Size of array.\r\n * @param getItem - Callback to populate given cell index.\r\n */\r\nexport function createArray<T>(size: number, getItem: (index: number) => T): T[] {\r\n  let array: T[] = [];\r\n\r\n  for (let i = 0; i < size; i++) {\r\n    array.push(getItem(i));\r\n  }\r\n\r\n  return array;\r\n}\r\n\r\n/**\r\n * Convert the given array to a matrix with columnCount number\r\n * of columns.\r\n *\r\n * @public\r\n * @param items - The array to convert\r\n * @param columnCount - The number of columns for the resulting matrix\r\n * @returns A matrix of items\r\n */\r\nexport function toMatrix<T>(items: T[], columnCount: number): T[][] {\r\n  return items.reduce(\r\n    (rows: T[][], currentValue: T, index: number) => {\r\n      if (index % columnCount === 0) {\r\n        rows.push([currentValue]);\r\n      } else {\r\n        rows[rows.length - 1].push(currentValue);\r\n      }\r\n      return rows;\r\n    },\r\n    [] as T[][]\r\n  );\r\n}\r\n\r\n/**\r\n * Given an array, it returns a new array that does not contain the item at the given index.\r\n * @param array - The array to operate on\r\n * @param index - The index of the element to remove\r\n */\r\nexport function removeIndex<T>(array: T[], index: number): T[] {\r\n  return array.filter((_: T, i: number) => index !== i);\r\n}\r\n\r\n/**\r\n * Given an array, this function returns a new array where the element at a given index has been replaced.\r\n * @param array - The array to operate on\r\n * @param newElement - The element that will be placed in the new array\r\n * @param index - The index of the element that should be replaced\r\n */\r\nexport function replaceElement<T>(array: T[], newElement: T, index: number): T[] {\r\n  const copy = array.slice();\r\n  copy[index] = newElement;\r\n  return copy;\r\n}\r\n\r\n/**\r\n * Given an array, this function returns a new array where an element has been inserted at the given index.\r\n * @param array - The array to operate on\r\n * @param index - The index where an element should be inserted\r\n * @param itemToAdd - The element to insert\r\n */\r\nexport function addElementAtIndex<T>(array: T[], index: number, itemToAdd: T): T[] {\r\n  const copy = array.slice();\r\n  copy.splice(index, 0, itemToAdd);\r\n  return copy;\r\n}\r\n\r\n/**\r\n * Given an array where each element is of type T or T[], flatten it into an array of T\r\n * @param array - The array where each element can optionally also be an array\r\n */\r\nexport function flatten<T>(array: (T | T[])[]): T[] {\r\n  let result: T[] = [];\r\n  array.forEach((item: T | T[]): T[] => (result = result.concat(item)));\r\n  return result;\r\n}\r\n\r\n/**\r\n * Returns a boolean indicating if the two given arrays are equal in length and values.\r\n *\r\n * @param array1 - First array to compare\r\n * @param array2 - Second array to compare\r\n * @returns True if the arrays are the same length and have the same values in the same positions, false otherwise.\r\n */\r\nexport function arraysEqual<T>(array1: T[], array2: T[]): boolean {\r\n  if (array1.length !== array2.length) {\r\n    return false;\r\n  }\r\n  for (let i = 0; i < array1.length; i++) {\r\n    if (array1[i] !== array2[i]) {\r\n      return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n","/**\r\n * Autobind is a utility for binding methods in a class. This simplifies tagging methods as being \"bound\" to the this pointer\r\n * so that they can be used in scenarios that simply require a function callback.\r\n * @deprecated This has been deprecated in favor of using arrow function properties\r\n */\r\nexport function autobind<T extends Function>(\r\n  // tslint:disable-next-line:no-any\r\n  target: any,\r\n  key: string,\r\n  descriptor: TypedPropertyDescriptor<T>\r\n): {\r\n  configurable: boolean;\r\n  get(): T;\r\n  // tslint:disable-next-line:no-any\r\n  set(newValue: any): void;\r\n} | void {\r\n  let fn = descriptor.value;\r\n\r\n  let defining = false;\r\n\r\n  return {\r\n    configurable: true,\r\n\r\n    get(): T {\r\n      if (defining || (fn && this === fn.prototype) || this.hasOwnProperty(key)) {\r\n        return fn as T;\r\n      }\r\n\r\n      // Bind method only once, and update the property to return the bound value from now on\r\n      let fnBound = fn && fn.bind(this);\r\n\r\n      defining = true;\r\n      Object.defineProperty(this, key, {\r\n        configurable: true,\r\n        writable: true,\r\n        enumerable: true,\r\n        value: fnBound\r\n      });\r\n      defining = false;\r\n\r\n      return fnBound;\r\n    },\r\n\r\n    // tslint:disable-next-line:no-any\r\n    set(newValue: any): void {\r\n      Object.defineProperty(this, key, {\r\n        configurable: true,\r\n        writable: true,\r\n        enumerable: true,\r\n        value: newValue\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { mergeStyleSets, IStyle, IStyleSet, IProcessedStyleSet } from '@uifabric/merge-styles';\r\nimport { IStyleFunctionOrObject } from '@uifabric/merge-styles';\r\n\r\n/**\r\n * Creates a getClassNames function which calls getStyles given the props, and injects them\r\n * into mergeStyleSets.\r\n */\r\nexport function classNamesFunction<TStyleProps extends {}, TStyleSet extends IStyleSet<TStyleSet>>(): (\r\n  getStyles: IStyleFunctionOrObject<TStyleProps, TStyleSet> | undefined,\r\n  styleProps?: TStyleProps\r\n) => IProcessedStyleSet<TStyleSet> {\r\n  // TODO: memoize.\r\n\r\n  const getClassNames = (\r\n    styleFunctionOrObject: IStyleFunctionOrObject<TStyleProps, TStyleSet> | undefined,\r\n    styleProps: TStyleProps = {} as TStyleProps\r\n  ): IProcessedStyleSet<TStyleSet> => {\r\n    // styleSet might be undefined if styleFunctionOrObject is undefined, but getStyles should never\r\n    // ordinarily be undefined (it would hardly make any sense).\r\n    // However, because we usually use `props.styles` as the argument to an invocation of this method, and\r\n    // `props.styles` itself is defined as optional, this avoids the need to use `!` at all invocation points.\r\n    if (styleFunctionOrObject === undefined) {\r\n      return {} as IProcessedStyleSet<TStyleSet>;\r\n    }\r\n\r\n    const styleSet =\r\n      styleFunctionOrObject && (typeof styleFunctionOrObject === 'function' ? styleFunctionOrObject(styleProps!) : styleFunctionOrObject);\r\n\r\n    return mergeStyleSets(styleSet as TStyleSet);\r\n  };\r\n\r\n  return getClassNames;\r\n}\r\n","import * as React from 'react';\r\n\r\nexport type IRefObject<T> = React.RefObject<T> | RefObject<T> | ((ref: T | null) => void);\r\n\r\nexport type RefObject<T> = {\r\n  (component: T | null): void;\r\n  current: T | null;\r\n\r\n  /**\r\n   * @deprecated Use .current as that is consistent the official React Api.\r\n   */\r\n  value: T | null;\r\n};\r\n\r\n/**\r\n * @deprecated Use React.createRef.\r\n * May be removed in 6 months (Jan '19).\r\n */\r\nexport function createRef<T>(): RefObject<T> {\r\n  const refObject = ((element: T | null): void => {\r\n    refObject.current = element;\r\n  }) as RefObject<T>;\r\n\r\n  // This getter is here to support the deprecated value prop on the refObject.\r\n  Object.defineProperty(refObject, 'value', {\r\n    get(): T | null {\r\n      return refObject.current;\r\n    }\r\n  });\r\n\r\n  refObject.current = null;\r\n\r\n  return refObject;\r\n}\r\n","/**\r\n * Dictionary of booleans.\r\n *\r\n * @internal\r\n */\r\nexport interface IDictionary {\r\n  [className: string]: boolean;\r\n}\r\n\r\n/**\r\n * Serializable object.\r\n *\r\n * @internal\r\n */\r\nexport interface ISerializableObject {\r\n  toString?: () => string;\r\n}\r\n\r\n/**\r\n * css input type.\r\n *\r\n * @internal\r\n */\r\nexport type ICssInput = string | ISerializableObject | IDictionary | null | undefined | boolean;\r\n\r\n/**\r\n * Concatination helper, which can merge class names together. Skips over falsey values.\r\n *\r\n * @public\r\n */\r\nexport function css(...args: ICssInput[]): string {\r\n  let classes = [];\r\n\r\n  for (let arg of args) {\r\n    if (arg) {\r\n      if (typeof arg === 'string') {\r\n        classes.push(arg);\r\n      } else if (arg.hasOwnProperty('toString') && typeof arg.toString === 'function') {\r\n        classes.push(arg.toString());\r\n      } else {\r\n        // tslint:disable-next-line:no-any\r\n        for (let key in arg as any) {\r\n          // tslint:disable-next-line:no-any\r\n          if ((arg as any)[key]) {\r\n            classes.push(key);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return classes.join(' ');\r\n}\r\n","import { GlobalSettings } from '../GlobalSettings';\r\n\r\n// tslint:disable-next-line:no-any\r\nexport type ISettings = { [key: string]: any };\r\nexport type ISettingsFunction = (settings: ISettings) => ISettings;\r\n\r\n/**\r\n * @deprecated Use ISettings.\r\n */\r\nexport type Settings = ISettings;\r\n\r\n/**\r\n * @deprecated Use ISettingsFunction.\r\n */\r\nexport type SettingsFunction = ISettingsFunction;\r\n\r\nexport interface ICustomizations {\r\n  settings: ISettings;\r\n  scopedSettings: { [key: string]: ISettings };\r\n  inCustomizerContext?: boolean;\r\n}\r\n\r\nconst CustomizationsGlobalKey = 'customizations';\r\nconst NO_CUSTOMIZATIONS = { settings: {}, scopedSettings: {}, inCustomizerContext: false };\r\n\r\nlet _allSettings = GlobalSettings.getValue<ICustomizations>(CustomizationsGlobalKey, {\r\n  settings: {},\r\n  scopedSettings: {},\r\n  inCustomizerContext: false\r\n});\r\n\r\nlet _events: (() => void)[] = [];\r\n\r\nexport class Customizations {\r\n  public static reset(): void {\r\n    _allSettings.settings = {};\r\n    _allSettings.scopedSettings = {};\r\n  }\r\n\r\n  // tslint:disable-next-line:no-any\r\n  public static applySettings(settings: ISettings): void {\r\n    _allSettings.settings = { ..._allSettings.settings, ...settings };\r\n    Customizations._raiseChange();\r\n  }\r\n\r\n  // tslint:disable-next-line:no-any\r\n  public static applyScopedSettings(scopeName: string, settings: ISettings): void {\r\n    _allSettings.scopedSettings[scopeName] = { ..._allSettings.scopedSettings[scopeName], ...settings };\r\n    Customizations._raiseChange();\r\n  }\r\n\r\n  public static getSettings(\r\n    properties: string[],\r\n    scopeName?: string,\r\n    localSettings: ICustomizations = NO_CUSTOMIZATIONS\r\n    // tslint:disable-next-line:no-any\r\n  ): any {\r\n    // tslint:disable-next-line:no-any\r\n    const settings: ISettings = {};\r\n    const localScopedSettings = (scopeName && localSettings.scopedSettings[scopeName]) || {};\r\n    const globalScopedSettings = (scopeName && _allSettings.scopedSettings[scopeName]) || {};\r\n\r\n    for (let property of properties) {\r\n      settings[property] =\r\n        localScopedSettings[property] ||\r\n        localSettings.settings[property] ||\r\n        globalScopedSettings[property] ||\r\n        _allSettings.settings[property];\r\n    }\r\n\r\n    return settings;\r\n  }\r\n\r\n  public static observe(onChange: () => void): void {\r\n    _events.push(onChange);\r\n  }\r\n\r\n  public static unobserve(onChange: () => void): void {\r\n    _events = _events.filter((cb: () => void) => cb !== onChange);\r\n  }\r\n\r\n  private static _raiseChange(): void {\r\n    _events.forEach((cb: () => void) => cb());\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { ICustomizations } from './Customizations';\r\n\r\nexport interface ICustomizerContext {\r\n  customizations: ICustomizations;\r\n}\r\n\r\nexport const CustomizerContext = React.createContext<ICustomizerContext>({\r\n  customizations: {\r\n    inCustomizerContext: false,\r\n    settings: {},\r\n    scopedSettings: {}\r\n  }\r\n});\r\n","import { ISettings, ISettingsFunction } from './Customizations';\r\n\r\n/**\r\n * Merge new and old settings, giving priority to new settings.\r\n * New settings is optional in which case oldSettings is returned as-is.\r\n * @param oldSettings - Old settings to fall back to.\r\n * @param newSettings - New settings that will be merged over oldSettings.\r\n * @returns Merged settings.\r\n */\r\nexport function mergeSettings(oldSettings: ISettings = {}, newSettings?: ISettings | ISettingsFunction): ISettings {\r\n  const mergeSettingsWith = _isSettingsFunction(newSettings) ? newSettings : _settingsMergeWith(newSettings);\r\n\r\n  return mergeSettingsWith(oldSettings);\r\n}\r\n\r\nexport function mergeScopedSettings(oldSettings: ISettings = {}, newSettings?: ISettings | ISettingsFunction): ISettings {\r\n  const mergeSettingsWith = _isSettingsFunction(newSettings) ? newSettings : _scopedSettingsMergeWith(newSettings);\r\n\r\n  return mergeSettingsWith(oldSettings);\r\n}\r\n\r\nfunction _isSettingsFunction(settings?: ISettings | ISettingsFunction): settings is ISettingsFunction {\r\n  return typeof settings === 'function';\r\n}\r\n\r\nfunction _settingsMergeWith(newSettings?: object): (settings: ISettings) => ISettings {\r\n  return (settings: ISettings) => (newSettings ? { ...settings, ...newSettings } : settings);\r\n}\r\n\r\nfunction _scopedSettingsMergeWith(scopedSettingsFromProps: ISettings = {}): (scopedSettings: ISettings) => ISettings {\r\n  return (oldScopedSettings: ISettings): ISettings => {\r\n    const newScopedSettings: ISettings = { ...oldScopedSettings };\r\n\r\n    for (let scopeName in scopedSettingsFromProps) {\r\n      if (scopedSettingsFromProps.hasOwnProperty(scopeName)) {\r\n        newScopedSettings[scopeName] = { ...oldScopedSettings[scopeName], ...scopedSettingsFromProps[scopeName] };\r\n      }\r\n    }\r\n\r\n    return newScopedSettings;\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { Customizations } from './Customizations';\r\nimport { CustomizerContext, ICustomizerContext } from './CustomizerContext';\r\nimport { mergeCustomizations } from './mergeCustomizations';\r\nimport { ICustomizerProps } from './Customizer.types';\r\n\r\n/**\r\n * The Customizer component allows for default props to be mixed into components which\r\n * are decorated with the customizable() decorator, or use the styled HOC. This enables\r\n * injection scenarios like:\r\n *\r\n * 1. render svg icons instead of the icon font within all buttons\r\n * 2. inject a custom theme object into a component\r\n *\r\n * Props are provided via the settings prop which should be one of the following:\r\n * - A json map which contains 1 or more name/value pairs representing injectable props.\r\n * - A function that receives the current settings and returns the new ones that apply to the scope\r\n *\r\n * @public\r\n */\r\nexport class Customizer extends React.Component<ICustomizerProps> {\r\n  public componentDidMount(): void {\r\n    Customizations.observe(this._onCustomizationChange);\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    Customizations.unobserve(this._onCustomizationChange);\r\n  }\r\n\r\n  public render(): React.ReactElement<{}> {\r\n    const { contextTransform } = this.props;\r\n    return (\r\n      <CustomizerContext.Consumer>\r\n        {(parentContext: ICustomizerContext) => {\r\n          let newContext = mergeCustomizations(this.props, parentContext);\r\n\r\n          if (contextTransform) {\r\n            newContext = contextTransform(newContext);\r\n          }\r\n\r\n          return <CustomizerContext.Provider value={newContext}>{this.props.children}</CustomizerContext.Provider>;\r\n        }}\r\n      </CustomizerContext.Consumer>\r\n    );\r\n  }\r\n\r\n  private _onCustomizationChange = () => this.forceUpdate();\r\n}\r\n","import { mergeSettings, mergeScopedSettings } from './mergeSettings';\r\nimport { ICustomizerProps } from './Customizer.types';\r\nimport { ICustomizerContext } from './CustomizerContext';\r\n\r\n/**\r\n * Merge props and customizations giving priority to props over context.\r\n * NOTE: This function will always perform multiple merge operations. Use with caution.\r\n * @param props - New settings to merge in.\r\n * @param parentContext - Context containing current settings.\r\n * @returns Merged customizations.\r\n */\r\nexport function mergeCustomizations(props: ICustomizerProps, parentContext: ICustomizerContext): ICustomizerContext {\r\n  const { customizations = { settings: {}, scopedSettings: {} } } = parentContext || {};\r\n\r\n  return {\r\n    customizations: {\r\n      settings: mergeSettings(customizations.settings, props.settings),\r\n      scopedSettings: mergeScopedSettings(customizations.scopedSettings, props.scopedSettings),\r\n      inCustomizerContext: true\r\n    }\r\n  };\r\n}\r\n","/**\r\n * Allows you to hoist static functions in components.\r\n * Created for the purpose of fixing broken static functions in classes\r\n * that utilize decorators.\r\n *\r\n * @public\r\n * @param source - The object where the methods are hoisted from.\r\n * @param dest - The object to hoist the methods onto.\r\n * @returns The dest object with methods added\r\n */\r\n\r\nexport function hoistStatics<TSource, TDest>(source: TSource, dest: TDest): TDest {\r\n  for (const name in source) {\r\n    if (source.hasOwnProperty(name)) {\r\n      // tslint:disable-next-line:no-any\r\n      (dest as any)[name] = source[name];\r\n    }\r\n  }\r\n\r\n  return dest;\r\n}\r\n","import * as React from 'react';\r\nimport { Customizations } from './Customizations';\r\nimport { hoistStatics } from '../hoistStatics';\r\nimport { CustomizerContext, ICustomizerContext } from './CustomizerContext';\r\nimport { concatStyleSets } from '@uifabric/merge-styles';\r\n\r\nexport function customizable(\r\n  scope: string,\r\n  fields: string[],\r\n  concatStyles?: boolean\r\n  // tslint:disable-next-line:no-any\r\n): <P>(ComposedComponent: React.ComponentType<P>) => any {\r\n  // tslint:disable-next-line:no-shadowed-variable\r\n  return function customizableFactory<P>(\r\n    // tslint:disable-next-line:no-any\r\n    ComposedComponent: React.ComponentType<P>\r\n    // tslint:disable-next-line:no-any\r\n  ): any {\r\n    const resultClass = class ComponentWithInjectedProps extends React.Component<P, {}> {\r\n      public static displayName: string = 'Customized' + scope;\r\n\r\n      // tslint:disable-next-line:no-any\r\n      constructor(props: P) {\r\n        super(props);\r\n\r\n        this._onSettingChanged = this._onSettingChanged.bind(this);\r\n      }\r\n\r\n      public componentDidMount(): void {\r\n        Customizations.observe(this._onSettingChanged);\r\n      }\r\n\r\n      public componentWillUnmount(): void {\r\n        Customizations.unobserve(this._onSettingChanged);\r\n      }\r\n\r\n      public render(): JSX.Element {\r\n        return (\r\n          <CustomizerContext.Consumer>\r\n            {(context: ICustomizerContext) => {\r\n              const defaultProps = Customizations.getSettings(fields, scope, context.customizations);\r\n\r\n              // tslint:disable-next-line:no-any\r\n              const componentProps = this.props as any;\r\n\r\n              // If defaultProps.styles is a function, evaluate it before calling concatStyleSets\r\n              if (defaultProps.styles && typeof defaultProps.styles === 'function') {\r\n                defaultProps.styles = defaultProps.styles({ ...defaultProps, ...componentProps });\r\n              }\r\n\r\n              if (concatStyles) {\r\n                const mergedStyles = concatStyleSets(defaultProps.styles, componentProps.styles);\r\n                return <ComposedComponent {...defaultProps} {...componentProps} styles={mergedStyles} />;\r\n              }\r\n\r\n              return <ComposedComponent {...defaultProps} {...componentProps} />;\r\n            }}\r\n          </CustomizerContext.Consumer>\r\n        );\r\n      }\r\n\r\n      private _onSettingChanged(): void {\r\n        this.forceUpdate();\r\n      }\r\n    };\r\n\r\n    return hoistStatics(ComposedComponent, resultClass);\r\n  };\r\n}\r\n","import { getVirtualParent } from './getVirtualParent';\r\n/**\r\n * Gets the element which is the parent of a given element.\r\n * If `allowVirtuaParents` is `true`, this method prefers the virtual parent over\r\n * real DOM parent when present.\r\n *\r\n * @public\r\n */\r\nexport function getParent(child: HTMLElement, allowVirtualParents: boolean = true): HTMLElement | null {\r\n  return child && ((allowVirtualParents && getVirtualParent(child)) || (child.parentNode && (child.parentNode as HTMLElement)));\r\n}\r\n","import { isVirtualElement } from './isVirtualElement';\r\n/**\r\n * Gets the virtual parent given the child element, if it exists.\r\n *\r\n * @public\r\n */\r\nexport function getVirtualParent(child: HTMLElement): HTMLElement | undefined {\r\n  let parent: HTMLElement | undefined;\r\n  if (child && isVirtualElement(child)) {\r\n    parent = child._virtual.parent;\r\n  }\r\n  return parent;\r\n}\r\n","import { IVirtualElement } from './IVirtualElement';\r\n/**\r\n * Determines whether or not an element has the virtual hierarchy extension.\r\n *\r\n * @public\r\n */\r\nexport function isVirtualElement(element: HTMLElement | IVirtualElement): element is IVirtualElement {\r\n  return element && !!(<IVirtualElement>element)._virtual;\r\n}\r\n","import { getParent } from './getParent';\r\n/**\r\n * Determines whether or not a parent element contains a given child element.\r\n * If `allowVirtualParents` is true, this method may return `true` if the child\r\n * has the parent in its virtual element hierarchy.\r\n *\r\n * @public\r\n */\r\nexport function elementContains(parent: HTMLElement | null, child: HTMLElement | null, allowVirtualParents: boolean = true): boolean {\r\n  let isContained = false;\r\n  if (parent && child) {\r\n    if (allowVirtualParents) {\r\n      isContained = false;\r\n      while (child) {\r\n        let nextParent: HTMLElement | null = getParent(child);\r\n        if (nextParent === parent) {\r\n          isContained = true;\r\n          break;\r\n        }\r\n        child = nextParent;\r\n      }\r\n    } else if (parent.contains) {\r\n      isContained = parent.contains(child);\r\n    }\r\n  }\r\n  return isContained;\r\n}\r\n","import { getParent } from './getParent';\r\n/**\r\n * Finds the first parent element where the matchFunction returns true\r\n * @param element - element to start searching at\r\n * @param matchFunction - the function that determines if the element is a match\r\n * @returns the matched element or null no match was found\r\n */\r\nexport function findElementRecursive(element: HTMLElement | null, matchFunction: (element: HTMLElement) => boolean): HTMLElement | null {\r\n  if (!element || element === document.body) {\r\n    return null;\r\n  }\r\n  return matchFunction(element) ? element : findElementRecursive(getParent(element), matchFunction);\r\n}\r\n","export function on(element: Element | Window, eventName: string, callback: (ev: Event) => void, options?: boolean): () => void {\r\n  element.addEventListener(eventName, callback, options);\r\n\r\n  return () => element.removeEventListener(eventName, callback, options);\r\n}\r\n","export const DATA_PORTAL_ATTRIBUTE = 'data-portal-element';\r\n\r\n/**\r\n * Identify element as a portal by setting an attribute.\r\n * @param element - Element to mark as a portal.\r\n */\r\nexport function setPortalAttribute(element: HTMLElement): void {\r\n  element.setAttribute(DATA_PORTAL_ATTRIBUTE, 'true');\r\n}\r\n","import { findElementRecursive } from './findElementRecursive';\r\nimport { DATA_PORTAL_ATTRIBUTE } from './setPortalAttribute';\r\n\r\n/**\r\n * Determine whether a target is within a portal from perspective of root or optional parent.\r\n * This function only works against portal components that use the setPortalAttribute function.\r\n * If both parent and child are within the same portal this function will return false.\r\n * @param target - Element to query portal containment status of.\r\n * @param parent - Optional parent perspective. Search for containing portal stops at parent (or root if parent is undefined or invalid.)\r\n */\r\nexport function portalContainsElement(target: HTMLElement, parent?: HTMLElement): boolean {\r\n  const elementMatch = findElementRecursive(\r\n    target,\r\n    (testElement: HTMLElement) => parent === testElement || testElement.hasAttribute(DATA_PORTAL_ATTRIBUTE)\r\n  );\r\n  return elementMatch !== null && elementMatch.hasAttribute(DATA_PORTAL_ATTRIBUTE);\r\n}\r\n","/** Raises a click event. */\r\nexport function raiseClick(target: Element): void {\r\n  const event = new Event('MouseEvents');\r\n\r\n  event.initEvent('click', true, true);\r\n  target.dispatchEvent(event);\r\n}\r\n","import { appendFunction } from './appendFunction';\r\n\r\n/**\r\n * Extends a component's lifetime methods by appending new functions to the existing lifetime functions.\r\n */\r\nexport function extendComponent<T extends React.Component>(parent: T, methods: { [key in keyof T]?: T[key] }): void {\r\n  for (let name in methods) {\r\n    if (methods.hasOwnProperty(name)) {\r\n      // tslint:disable-next-line:no-any\r\n      parent[name] = appendFunction(parent, parent[name], methods[name]) as any;\r\n    }\r\n  }\r\n}\r\n","import { elementContainsAttribute } from './dom/elementContainsAttribute';\r\nimport { elementContains } from './dom/elementContains';\r\nimport { getParent } from './dom/getParent';\r\nimport { getWindow } from './dom/getWindow';\r\nimport { getDocument } from './dom/getDocument';\r\n\r\nconst IS_FOCUSABLE_ATTRIBUTE = 'data-is-focusable';\r\nconst IS_VISIBLE_ATTRIBUTE = 'data-is-visible';\r\nconst FOCUSZONE_ID_ATTRIBUTE = 'data-focuszone-id';\r\nconst FOCUSZONE_SUB_ATTRIBUTE = 'data-is-sub-focuszone';\r\n\r\n/**\r\n * Gets the first focusable element.\r\n *\r\n * @public\r\n */\r\nexport function getFirstFocusable(\r\n  rootElement: HTMLElement,\r\n  currentElement: HTMLElement,\r\n  includeElementsInFocusZones?: boolean\r\n): HTMLElement | null {\r\n  return getNextElement(\r\n    rootElement,\r\n    currentElement,\r\n    true /*checkNode*/,\r\n    false /*suppressParentTraversal*/,\r\n    false /*suppressChildTraversal*/,\r\n    includeElementsInFocusZones\r\n  );\r\n}\r\n\r\n/**\r\n * Gets the last focusable element.\r\n *\r\n * @public\r\n */\r\nexport function getLastFocusable(\r\n  rootElement: HTMLElement,\r\n  currentElement: HTMLElement,\r\n  includeElementsInFocusZones?: boolean\r\n): HTMLElement | null {\r\n  return getPreviousElement(\r\n    rootElement,\r\n    currentElement,\r\n    true /*checkNode*/,\r\n    false /*suppressParentTraversal*/,\r\n    true /*traverseChildren*/,\r\n    includeElementsInFocusZones\r\n  );\r\n}\r\n\r\n/**\r\n * Gets the first tabbable element.\r\n * The difference between focusable and tabbable is that tabbable elements are focusable elements that also have tabIndex != -1.\r\n * @param rootElement - The parent element to search beneath.\r\n * @param currentElement - The descendant of rootElement to start the search at.  This element is the first one checked,\r\n * and iteration continues forward.  Typical use passes rootElement.firstChild.\r\n * @param includeElementsInFocusZones - true if traversal should go into FocusZone descendants.\r\n * @param checkNode - Include currentElement in search when true. Defaults to true.\r\n * @public\r\n */\r\nexport function getFirstTabbable(\r\n  rootElement: HTMLElement,\r\n  currentElement: HTMLElement,\r\n  includeElementsInFocusZones?: boolean,\r\n  checkNode: boolean = true\r\n): HTMLElement | null {\r\n  return getNextElement(\r\n    rootElement,\r\n    currentElement,\r\n    checkNode,\r\n    false /*suppressParentTraversal*/,\r\n    false /*suppressChildTraversal*/,\r\n    includeElementsInFocusZones,\r\n    false /*allowFocusRoot*/,\r\n    true /*tabbable*/\r\n  );\r\n}\r\n\r\n/**\r\n * Gets the last tabbable element.\r\n * The difference between focusable and tabbable is that tabbable elements are focusable elements that also have tabIndex != -1.\r\n * @param rootElement - The parent element to search beneath.\r\n * @param currentElement - The descendant of rootElement to start the search at.  This element is the first one checked,\r\n * and iteration continues in reverse.  Typical use passes rootElement.lastChild.\r\n * @param includeElementsInFocusZones - true if traversal should go into FocusZone descendants.\r\n * @param checkNode - Include currentElement in search when true. Defaults to true.\r\n * @public\r\n */\r\nexport function getLastTabbable(\r\n  rootElement: HTMLElement,\r\n  currentElement: HTMLElement,\r\n  includeElementsInFocusZones?: boolean,\r\n  checkNode: boolean = true\r\n): HTMLElement | null {\r\n  return getPreviousElement(\r\n    rootElement,\r\n    currentElement,\r\n    checkNode,\r\n    false /*suppressParentTraversal*/,\r\n    true /*traverseChildren*/,\r\n    includeElementsInFocusZones,\r\n    false /*allowFocusRoot*/,\r\n    true /*tabbable*/\r\n  );\r\n}\r\n\r\n/**\r\n * Attempts to focus the first focusable element that is a child or child's child of the rootElement.\r\n *\r\n * @public\r\n * @param rootElement - Element to start the search for a focusable child.\r\n * @returns True if focus was set, false if it was not.\r\n */\r\nexport function focusFirstChild(rootElement: HTMLElement): boolean {\r\n  let element: HTMLElement | null = getNextElement(rootElement, rootElement, true, false, false, true);\r\n\r\n  if (element) {\r\n    focusAsync(element);\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\n/**\r\n * Traverse to find the previous element.\r\n * If tabbable is true, the element must have tabIndex != -1.\r\n *\r\n * @public\r\n */\r\nexport function getPreviousElement(\r\n  rootElement: HTMLElement,\r\n  currentElement: HTMLElement | null,\r\n  checkNode?: boolean,\r\n  suppressParentTraversal?: boolean,\r\n  traverseChildren?: boolean,\r\n  includeElementsInFocusZones?: boolean,\r\n  allowFocusRoot?: boolean,\r\n  tabbable?: boolean\r\n): HTMLElement | null {\r\n  if (!currentElement || (!allowFocusRoot && currentElement === rootElement)) {\r\n    return null;\r\n  }\r\n\r\n  let isCurrentElementVisible = isElementVisible(currentElement);\r\n\r\n  // Check its children.\r\n  if (\r\n    traverseChildren &&\r\n    isCurrentElementVisible &&\r\n    (includeElementsInFocusZones || !(isElementFocusZone(currentElement) || isElementFocusSubZone(currentElement)))\r\n  ) {\r\n    const childMatch = getPreviousElement(\r\n      rootElement,\r\n      currentElement.lastElementChild as HTMLElement,\r\n      true,\r\n      true,\r\n      true,\r\n      includeElementsInFocusZones,\r\n      allowFocusRoot,\r\n      tabbable\r\n    );\r\n\r\n    if (childMatch) {\r\n      if ((tabbable && isElementTabbable(childMatch, true)) || !tabbable) {\r\n        return childMatch;\r\n      }\r\n\r\n      const childMatchSiblingMatch = getPreviousElement(\r\n        rootElement,\r\n        childMatch.previousElementSibling as HTMLElement,\r\n        true,\r\n        true,\r\n        true,\r\n        includeElementsInFocusZones,\r\n        allowFocusRoot,\r\n        tabbable\r\n      );\r\n      if (childMatchSiblingMatch) {\r\n        return childMatchSiblingMatch;\r\n      }\r\n\r\n      let childMatchParent = childMatch.parentElement;\r\n\r\n      // At this point if we have not found any potential matches\r\n      // start looking at the rest of the subtree under the currentParent.\r\n      // NOTE: We do not want to recurse here because doing so could\r\n      // cause elements to get skipped.\r\n      while (childMatchParent && childMatchParent !== currentElement) {\r\n        const childMatchParentMatch = getPreviousElement(\r\n          rootElement,\r\n          childMatchParent.previousElementSibling as HTMLElement,\r\n          true,\r\n          true,\r\n          true,\r\n          includeElementsInFocusZones,\r\n          allowFocusRoot,\r\n          tabbable\r\n        );\r\n\r\n        if (childMatchParentMatch) {\r\n          return childMatchParentMatch;\r\n        }\r\n\r\n        childMatchParent = childMatchParent.parentElement;\r\n      }\r\n    }\r\n  }\r\n\r\n  // Check the current node, if it's not the first traversal.\r\n  if (checkNode && isCurrentElementVisible && isElementTabbable(currentElement, tabbable)) {\r\n    return currentElement;\r\n  }\r\n\r\n  // Check its previous sibling.\r\n  const siblingMatch = getPreviousElement(\r\n    rootElement,\r\n    currentElement.previousElementSibling as HTMLElement,\r\n    true,\r\n    true,\r\n    true,\r\n    includeElementsInFocusZones,\r\n    allowFocusRoot,\r\n    tabbable\r\n  );\r\n\r\n  if (siblingMatch) {\r\n    return siblingMatch;\r\n  }\r\n\r\n  // Check its parent.\r\n  if (!suppressParentTraversal) {\r\n    return getPreviousElement(\r\n      rootElement,\r\n      currentElement.parentElement,\r\n      true,\r\n      false,\r\n      false,\r\n      includeElementsInFocusZones,\r\n      allowFocusRoot,\r\n      tabbable\r\n    );\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\n/**\r\n * Traverse to find the next focusable element.\r\n * If tabbable is true, the element must have tabIndex != -1.\r\n *\r\n * @public\r\n * @param checkNode - Include currentElement in search when true.\r\n */\r\nexport function getNextElement(\r\n  rootElement: HTMLElement,\r\n  currentElement: HTMLElement | null,\r\n  checkNode?: boolean,\r\n  suppressParentTraversal?: boolean,\r\n  suppressChildTraversal?: boolean,\r\n  includeElementsInFocusZones?: boolean,\r\n  allowFocusRoot?: boolean,\r\n  tabbable?: boolean\r\n): HTMLElement | null {\r\n  if (!currentElement || (currentElement === rootElement && suppressChildTraversal && !allowFocusRoot)) {\r\n    return null;\r\n  }\r\n\r\n  let isCurrentElementVisible = isElementVisible(currentElement);\r\n\r\n  // Check the current node, if it's not the first traversal.\r\n  if (checkNode && isCurrentElementVisible && isElementTabbable(currentElement, tabbable)) {\r\n    return currentElement;\r\n  }\r\n\r\n  // Check its children.\r\n  if (\r\n    !suppressChildTraversal &&\r\n    isCurrentElementVisible &&\r\n    (includeElementsInFocusZones || !(isElementFocusZone(currentElement) || isElementFocusSubZone(currentElement)))\r\n  ) {\r\n    const childMatch = getNextElement(\r\n      rootElement,\r\n      currentElement.firstElementChild as HTMLElement,\r\n      true,\r\n      true,\r\n      false,\r\n      includeElementsInFocusZones,\r\n      allowFocusRoot,\r\n      tabbable\r\n    );\r\n\r\n    if (childMatch) {\r\n      return childMatch;\r\n    }\r\n  }\r\n\r\n  if (currentElement === rootElement) {\r\n    return null;\r\n  }\r\n\r\n  // Check its sibling.\r\n  const siblingMatch = getNextElement(\r\n    rootElement,\r\n    currentElement.nextElementSibling as HTMLElement,\r\n    true,\r\n    true,\r\n    false,\r\n    includeElementsInFocusZones,\r\n    allowFocusRoot,\r\n    tabbable\r\n  );\r\n\r\n  if (siblingMatch) {\r\n    return siblingMatch;\r\n  }\r\n\r\n  if (!suppressParentTraversal) {\r\n    return getNextElement(\r\n      rootElement,\r\n      currentElement.parentElement,\r\n      false,\r\n      false,\r\n      true,\r\n      includeElementsInFocusZones,\r\n      allowFocusRoot,\r\n      tabbable\r\n    );\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\n/**\r\n * Determines if an element is visible.\r\n *\r\n * @public\r\n */\r\nexport function isElementVisible(element: HTMLElement | undefined | null): boolean {\r\n  // If the element is not valid, return false.\r\n  if (!element || !element.getAttribute) {\r\n    return false;\r\n  }\r\n\r\n  const visibilityAttribute = element.getAttribute(IS_VISIBLE_ATTRIBUTE);\r\n\r\n  // If the element is explicitly marked with the visibility attribute, return that value as boolean.\r\n  if (visibilityAttribute !== null && visibilityAttribute !== undefined) {\r\n    return visibilityAttribute === 'true';\r\n  }\r\n\r\n  // Fallback to other methods of determining actual visibility.\r\n  return (\r\n    element.offsetHeight !== 0 ||\r\n    element.offsetParent !== null ||\r\n    // tslint:disable-next-line:no-any\r\n    (element as any).isVisible === true\r\n  ); // used as a workaround for testing.\r\n}\r\n\r\n/**\r\n * Determines if an element can receive focus programmatically or via a mouse click.\r\n * If checkTabIndex is true, additionally checks to ensure the element can be focused with the tab key, meaning tabIndex != -1.\r\n *\r\n * @public\r\n */\r\nexport function isElementTabbable(element: HTMLElement, checkTabIndex?: boolean): boolean {\r\n  // If this element is null or is disabled, it is not considered tabbable.\r\n  if (!element || (element as HTMLButtonElement).disabled) {\r\n    return false;\r\n  }\r\n\r\n  let tabIndex = 0;\r\n  let tabIndexAttributeValue = null;\r\n\r\n  if (element && element.getAttribute) {\r\n    tabIndexAttributeValue = element.getAttribute('tabIndex');\r\n\r\n    if (tabIndexAttributeValue) {\r\n      tabIndex = parseInt(tabIndexAttributeValue, 10);\r\n    }\r\n  }\r\n\r\n  let isFocusableAttribute = element.getAttribute ? element.getAttribute(IS_FOCUSABLE_ATTRIBUTE) : null;\r\n  let isTabIndexSet = tabIndexAttributeValue !== null && tabIndex >= 0;\r\n\r\n  const result =\r\n    !!element &&\r\n    isFocusableAttribute !== 'false' &&\r\n    (element.tagName === 'A' ||\r\n      element.tagName === 'BUTTON' ||\r\n      element.tagName === 'INPUT' ||\r\n      element.tagName === 'TEXTAREA' ||\r\n      isFocusableAttribute === 'true' ||\r\n      isTabIndexSet);\r\n\r\n  return checkTabIndex ? tabIndex !== -1 && result : result;\r\n}\r\n\r\n/**\r\n * Determines if a given element is a focus zone.\r\n *\r\n * @public\r\n */\r\nexport function isElementFocusZone(element?: HTMLElement): boolean {\r\n  return !!(element && element.getAttribute && !!element.getAttribute(FOCUSZONE_ID_ATTRIBUTE));\r\n}\r\n\r\n/**\r\n * Determines if a given element is a focus sub zone.\r\n *\r\n * @public\r\n */\r\nexport function isElementFocusSubZone(element?: HTMLElement): boolean {\r\n  return !!(element && element.getAttribute && element.getAttribute(FOCUSZONE_SUB_ATTRIBUTE) === 'true');\r\n}\r\n\r\n/**\r\n * Determines if an element, or any of its children, contain focus.\r\n *\r\n * @public\r\n */\r\nexport function doesElementContainFocus(element: HTMLElement): boolean {\r\n  let document = getDocument(element);\r\n  let currentActiveElement: HTMLElement | undefined = document && (document.activeElement as HTMLElement);\r\n  if (currentActiveElement && elementContains(element, currentActiveElement)) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\n/**\r\n * Determines if an, or any of its ancestors, sepcificies that it doesn't want focus to wrap\r\n * @param element - element to start searching from\r\n * @param noWrapDataAttribute - the no wrap data attribute to match (either)\r\n * @returns true if focus should wrap, false otherwise\r\n */\r\nexport function shouldWrapFocus(element: HTMLElement, noWrapDataAttribute: 'data-no-vertical-wrap' | 'data-no-horizontal-wrap'): boolean {\r\n  return elementContainsAttribute(element, noWrapDataAttribute) === 'true' ? false : true;\r\n}\r\n\r\nlet targetToFocusOnNextRepaint: HTMLElement | { focus: () => void } | null | undefined = undefined;\r\n\r\n/**\r\n * Sets focus to an element asynchronously. The focus will be set at the next browser repaint,\r\n * meaning it won't cause any extra recalculations. If more than one focusAsync is called during one frame,\r\n * only the latest called focusAsync element will actually be focused\r\n * @param element - The element to focus\r\n */\r\nexport function focusAsync(element: HTMLElement | { focus: () => void } | undefined | null): void {\r\n  if (element) {\r\n    // An element was already queued to be focused, so replace that one with the new element\r\n    if (targetToFocusOnNextRepaint) {\r\n      targetToFocusOnNextRepaint = element;\r\n      return;\r\n    }\r\n\r\n    targetToFocusOnNextRepaint = element;\r\n\r\n    const win = getWindow(element as Element);\r\n\r\n    if (win) {\r\n      // element.focus() is a no-op if the element is no longer in the DOM, meaning this is always safe\r\n      win.requestAnimationFrame(() => {\r\n        targetToFocusOnNextRepaint && targetToFocusOnNextRepaint.focus();\r\n\r\n        // We are done focusing for this frame, so reset the queued focus element\r\n        targetToFocusOnNextRepaint = undefined;\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Finds the closest focusable element via an index path from a parent. See\r\n * `getElementIndexPath` for getting an index path from an element to a child.\r\n */\r\nexport function getFocusableByIndexPath(parent: HTMLElement, path: number[]): HTMLElement | undefined {\r\n  let element = parent;\r\n\r\n  for (const index of path) {\r\n    const nextChild = element.children[Math.min(index, element.children.length - 1)] as HTMLElement;\r\n\r\n    if (!nextChild) {\r\n      break;\r\n    }\r\n    element = nextChild;\r\n  }\r\n\r\n  element =\r\n    isElementTabbable(element) && isElementVisible(element)\r\n      ? element\r\n      : getNextElement(parent, element, true) || getPreviousElement(parent, element)!;\r\n\r\n  return element as HTMLElement;\r\n}\r\n\r\n/**\r\n * Finds the element index path from a parent element to a child element.\r\n *\r\n * If you had this node structure: \"A has children [B, C] and C has child D\",\r\n * the index path from A to D would be [1, 0], or `parent.chidren[1].children[0]`.\r\n */\r\nexport function getElementIndexPath(fromElement: HTMLElement, toElement: HTMLElement): number[] {\r\n  const path: number[] = [];\r\n\r\n  while (toElement && fromElement && toElement !== fromElement) {\r\n    const parent = getParent(toElement, true);\r\n\r\n    if (parent === null) {\r\n      return [];\r\n    }\r\n\r\n    path.unshift(Array.prototype.indexOf.call(parent.children, toElement));\r\n    toElement = parent;\r\n  }\r\n\r\n  return path;\r\n}\r\n","import { findElementRecursive } from './findElementRecursive';\r\n/**\r\n * Determines if an element, or any of its ancestors, contain the given attribute\r\n * @param element - element to start searching at\r\n * @param attribute - the attribute to search for\r\n * @returns the value of the first instance found\r\n */\r\nexport function elementContainsAttribute(element: HTMLElement, attribute: string): string | null {\r\n  let elementMatch = findElementRecursive(element, (testElement: HTMLElement) => testElement.hasAttribute(attribute));\r\n  return elementMatch && elementMatch.getAttribute(attribute);\r\n}\r\n","const REACT_LIFECYCLE_EXCLUSIONS = [\r\n  'setState',\r\n  'render',\r\n  'componentWillMount',\r\n  'UNSAFE_componentWillMount',\r\n  'componentDidMount',\r\n  'componentWillReceiveProps',\r\n  'UNSAFE_componentWillReceiveProps',\r\n  'shouldComponentUpdate',\r\n  'componentWillUpdate',\r\n  'getSnapshotBeforeUpdate',\r\n  'UNSAFE_componentWillUpdate',\r\n  'componentDidUpdate',\r\n  'componentWillUnmount'\r\n];\r\n\r\n/**\r\n * Allows you to hoist methods, except those in an exclusion set from a source object into a destination object.\r\n *\r\n * @public\r\n * @param destination - The instance of the object to hoist the methods onto.\r\n * @param source - The instance of the object where the methods are hoisted from.\r\n * @param exclusions - (Optional) What methods to exclude from being hoisted.\r\n * @returns An array of names of methods that were hoisted.\r\n */\r\nexport function hoistMethods(\r\n  // tslint:disable-next-line:no-any\r\n  destination: any,\r\n  // tslint:disable-next-line:no-any\r\n  source: any,\r\n  exclusions: string[] = REACT_LIFECYCLE_EXCLUSIONS\r\n): string[] {\r\n  let hoisted: string[] = [];\r\n  for (let methodName in source) {\r\n    if (\r\n      typeof source[methodName] === 'function' &&\r\n      destination[methodName] === undefined &&\r\n      (!exclusions || exclusions.indexOf(methodName) === -1)\r\n    ) {\r\n      hoisted.push(methodName);\r\n      /* tslint:disable:no-function-expression */\r\n      destination[methodName] = function(): void {\r\n        source[methodName].apply(source, arguments);\r\n      };\r\n      /* tslint:enable */\r\n    }\r\n  }\r\n\r\n  return hoisted;\r\n}\r\n\r\n/**\r\n * Provides a method for convenience to unhoist hoisted methods.\r\n *\r\n * @public\r\n * @param source - The source object upon which methods were hoisted.\r\n * @param methodNames - An array of method names to unhoist.\r\n */\r\n// tslint:disable-next-line:no-any\r\nexport function unhoistMethods(source: any, methodNames: string[]): void {\r\n  methodNames.forEach((methodName: string) => delete source[methodName]);\r\n}\r\n","import { IBaseProps } from './BaseComponent.types';\r\nimport { extendComponent } from './extendComponent';\r\n\r\n/**\r\n * Helper to manage componentRef resolution. Internally appends logic to\r\n * lifetime methods to resolve componentRef to the passed in object.\r\n *\r\n * Usage: call initializeComponentRef(this) in the constructor,\r\n */\r\nexport function initializeComponentRef<TProps extends IBaseProps, TState>(obj: React.Component<TProps, TState>): void {\r\n  extendComponent(obj, {\r\n    componentDidMount: _onMount,\r\n    componentDidUpdate: _onUpdate,\r\n    componentWillUnmount: _onUnmount\r\n  });\r\n}\r\n\r\nfunction _onMount(): void {\r\n  _setComponentRef(this.props.componentRef, this);\r\n}\r\n\r\nfunction _onUpdate(prevProps: IBaseProps): void {\r\n  if (prevProps.componentRef !== this.props.componentRef) {\r\n    // tslint:disable-next-line:no-any\r\n    _setComponentRef((prevProps as any).componentRef, null);\r\n    _setComponentRef(this.props.componentRef, this);\r\n  }\r\n}\r\n\r\nfunction _onUnmount(): void {\r\n  _setComponentRef(this.props.componentRef, null);\r\n}\r\n\r\nfunction _setComponentRef<TInterface>(componentRef: React.RefObject<TInterface>, value: TInterface | null): void {\r\n  if (componentRef) {\r\n    if (typeof componentRef === 'object') {\r\n      (componentRef as { current: TInterface | null }).current = value;\r\n    } else if (typeof componentRef === 'function') {\r\n      (componentRef as Function)(value);\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Regular expression matching characters to ignore when calculating the initials.\r\n * The first part matches characters within parenthesis, including the parenthesis.\r\n * The second part matches special ASCII characters except space, plus some unicode special characters.\r\n */\r\nconst UNWANTED_CHARS_REGEX: RegExp = /\\([^)]*\\)|[\\0-\\u001F\\!-/:-@\\[-`\\{-\\u00BF\\u0250-\\u036F\\uD800-\\uFFFF]/g;\r\n\r\n/**\r\n * Regular expression matching phone numbers. Applied after chars matching UNWANTED_CHARS_REGEX have been removed\r\n * and number has been trimmed for whitespaces\r\n */\r\nconst PHONENUMBER_REGEX: RegExp = /^\\d+[\\d\\s]*(:?ext|x|)\\s*\\d+$/i;\r\n\r\n/** Regular expression matching one or more spaces. */\r\nconst MULTIPLE_WHITESPACES_REGEX: RegExp = /\\s+/g;\r\n\r\n/**\r\n * Regular expression matching languages for which we currently don't support initials.\r\n * Arabic:   Arabic, Arabic Supplement, Arabic Extended-A.\r\n * Korean:   Hangul Jamo, Hangul Compatibility Jamo, Hangul Jamo Extended-A, Hangul Syllables, Hangul Jamo Extended-B.\r\n * Japanese: Hiragana, Katakana.\r\n * CJK:      CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs, CJK Unified Ideographs Extension B\r\n */\r\n/* tslint:disable:max-line-length */\r\nconst UNSUPPORTED_TEXT_REGEX: RegExp = /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3040-\\u309F\\u30A0-\\u30FF\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]|[\\uD840-\\uD869][\\uDC00-\\uDED6]/;\r\n/* tslint:enable:max-line-length */\r\n\r\nfunction getInitialsLatin(displayName: string, isRtl: boolean): string {\r\n  let initials = '';\r\n\r\n  const splits: string[] = displayName.split(' ');\r\n\r\n  if (splits.length === 2) {\r\n    initials += splits[0].charAt(0).toUpperCase();\r\n    initials += splits[1].charAt(0).toUpperCase();\r\n  } else if (splits.length === 3) {\r\n    initials += splits[0].charAt(0).toUpperCase();\r\n    initials += splits[2].charAt(0).toUpperCase();\r\n  } else if (splits.length !== 0) {\r\n    initials += splits[0].charAt(0).toUpperCase();\r\n  }\r\n\r\n  if (isRtl && initials.length > 1) {\r\n    return initials.charAt(1) + initials.charAt(0);\r\n  }\r\n\r\n  return initials;\r\n}\r\n\r\nfunction cleanupDisplayName(displayName: string): string {\r\n  displayName = displayName.replace(UNWANTED_CHARS_REGEX, '');\r\n  displayName = displayName.replace(MULTIPLE_WHITESPACES_REGEX, ' ');\r\n  displayName = displayName.trim();\r\n\r\n  return displayName;\r\n}\r\n\r\n/**\r\n * Get (up to 2 characters) initials based on display name of the persona.\r\n *\r\n * @public\r\n */\r\nexport function getInitials(displayName: string | undefined | null, isRtl: boolean, allowPhoneInitials?: boolean): string {\r\n  if (!displayName) {\r\n    return '';\r\n  }\r\n\r\n  displayName = cleanupDisplayName(displayName);\r\n\r\n  // For names containing CJK characters, and phone numbers, we don't display initials\r\n  if (UNSUPPORTED_TEXT_REGEX.test(displayName) || (!allowPhoneInitials && PHONENUMBER_REGEX.test(displayName))) {\r\n    return '';\r\n  }\r\n\r\n  return getInitialsLatin(displayName, isRtl);\r\n}\r\n","import { getDocument } from './dom/getDocument';\r\nimport { getItem, setItem } from './localStorage';\r\n\r\n// Default to undefined so that we initialize on first read.\r\nlet _language: string | null;\r\n\r\n/**\r\n * Gets the rtl state of the page (returns true if in rtl.)\r\n *\r\n * @public\r\n */\r\nexport function getLanguage(): string | null {\r\n  if (_language === undefined) {\r\n    let doc = getDocument();\r\n    const savedLanguage = getItem('language');\r\n\r\n    if (savedLanguage !== null) {\r\n      _language = savedLanguage;\r\n    }\r\n\r\n    if (_language === undefined && doc) {\r\n      _language = doc.documentElement.getAttribute('lang');\r\n    }\r\n\r\n    if (_language === undefined) {\r\n      _language = 'en';\r\n    }\r\n  }\r\n\r\n  return _language;\r\n}\r\n\r\n/**\r\n * Sets the rtl state of the page (by adjusting the dir attribute of the html element.)\r\n *\r\n * @public\r\n */\r\nexport function setLanguage(language: string, avoidPersisting: boolean = false): void {\r\n  let doc = getDocument();\r\n\r\n  if (doc) {\r\n    doc.documentElement.setAttribute('lang', language);\r\n  }\r\n\r\n  if (!avoidPersisting) {\r\n    setItem('language', language);\r\n  }\r\n\r\n  _language = language;\r\n}\r\n","import { Stylesheet } from '@uifabric/merge-styles';\r\n\r\nconst stylesheet = Stylesheet.getInstance();\r\n\r\nif (stylesheet && stylesheet.onReset) {\r\n  Stylesheet.getInstance().onReset(resetMemoizations);\r\n}\r\n\r\n// tslint:disable:no-any\r\ndeclare class WeakMap {\r\n  public get(key: any): any;\r\n  public set(key: any, value: any): void;\r\n  public has(key: any): boolean;\r\n}\r\n\r\nlet _resetCounter = 0;\r\nconst _emptyObject = { empty: true };\r\nconst _dictionary: any = {};\r\nlet _weakMap = typeof WeakMap === 'undefined' ? null : WeakMap;\r\n\r\ninterface IMemoizeNode {\r\n  map: WeakMap | null;\r\n  value?: any;\r\n}\r\n\r\n/**\r\n *  Test utility for providing a custom weakmap.\r\n *\r\n * @internal\r\n * */\r\nexport function setMemoizeWeakMap(weakMap: any): void {\r\n  _weakMap = weakMap;\r\n}\r\n\r\n/**\r\n * Reset memoizations.\r\n */\r\nexport function resetMemoizations(): void {\r\n  _resetCounter++;\r\n}\r\n\r\n/**\r\n * Memoize decorator to be used on class methods. WARNING: the `this` reference\r\n * will be inaccessible within a memoized method, given that a cached method's `this`\r\n * would not be instance-specific.\r\n *\r\n * @public\r\n */\r\nexport function memoize<T extends Function>(\r\n  target: any,\r\n  key: string,\r\n  descriptor: TypedPropertyDescriptor<T>\r\n): {\r\n  configurable: boolean;\r\n  get(): T;\r\n} {\r\n  // We bind to \"null\" to prevent people from inadvertently pulling values from \"this\",\r\n  // rather than passing them in as input values which can be memoized.\r\n  let fn = memoizeFunction(descriptor.value && descriptor.value.bind(null));\r\n\r\n  return {\r\n    configurable: true,\r\n    get(): T {\r\n      return fn;\r\n    }\r\n  };\r\n}\r\n\r\n/**\r\n * Memoizes a function; when you pass in the same parameters multiple times, it returns a cached result.\r\n * Be careful when passing in objects, you need to pass in the same INSTANCE for caching to work. Otherwise\r\n * it will grow the cache unnecessarily. Also avoid using default values that evaluate functions; passing in\r\n * undefined for a value and relying on a default function will execute it the first time, but will not\r\n * re-evaluate subsequent times which may have been unexpected.\r\n *\r\n * By default, the cache will reset after 100 permutations, to avoid abuse cases where the function is\r\n * unintendedly called with unique objects. Without a reset, the cache could grow infinitely, so we safeguard\r\n * by resetting. To override this behavior, pass a value of 0 to the maxCacheSize parameter.\r\n *\r\n * @public\r\n * @param cb - The function to memoize.\r\n * @param maxCacheSize - Max results to cache. If the cache exceeds this value, it will reset on the next call.\r\n * @returns A memoized version of the function.\r\n */\r\nexport function memoizeFunction<T extends (...args: any[]) => RET_TYPE, RET_TYPE>(cb: T, maxCacheSize: number = 100): T {\r\n  // Avoid breaking scenarios which don't have weak map.\r\n  if (!_weakMap) {\r\n    return cb;\r\n  }\r\n\r\n  let rootNode: any;\r\n  let cacheSize = 0;\r\n  let localResetCounter = _resetCounter;\r\n\r\n  // tslint:disable-next-line:no-function-expression\r\n  return function memoizedFunction(...args: any[]): RET_TYPE {\r\n    let currentNode: any = rootNode;\r\n\r\n    if (rootNode === undefined || localResetCounter !== _resetCounter || (maxCacheSize > 0 && cacheSize > maxCacheSize)) {\r\n      rootNode = _createNode();\r\n      cacheSize = 0;\r\n      localResetCounter = _resetCounter;\r\n    }\r\n\r\n    currentNode = rootNode;\r\n\r\n    // Traverse the tree until we find the match.\r\n    for (let i = 0; i < args.length; i++) {\r\n      let arg = _normalizeArg(args[i]);\r\n\r\n      if (!currentNode.map.has(arg)) {\r\n        currentNode.map.set(arg, _createNode());\r\n      }\r\n\r\n      currentNode = currentNode.map.get(arg);\r\n    }\r\n\r\n    if (!currentNode.hasOwnProperty('value')) {\r\n      currentNode.value = cb(...args);\r\n      cacheSize++;\r\n    }\r\n\r\n    return currentNode.value;\r\n  } as any;\r\n}\r\n\r\nfunction _normalizeArg(val: null | undefined): { empty: boolean } | any;\r\nfunction _normalizeArg(val: object): any;\r\nfunction _normalizeArg(val: any): any {\r\n  if (!val) {\r\n    return _emptyObject;\r\n  } else if (typeof val === 'object' || typeof val === 'function') {\r\n    return val;\r\n  } else if (!_dictionary[val]) {\r\n    _dictionary[val] = { val };\r\n  }\r\n\r\n  return _dictionary[val];\r\n}\r\n\r\nfunction _createNode(): IMemoizeNode {\r\n  return {\r\n    map: _weakMap ? new _weakMap() : null\r\n  };\r\n}\r\n","/**\r\n * Simple deep merge function. Takes all arguments and returns a deep copy of the objects merged\r\n * together in the order provided. If an object creates a circular reference, it will assign the\r\n * original reference.\r\n */\r\nexport function merge<T = {}>(target: Partial<T>, ...args: (Partial<T> | null | undefined | false)[]): T {\r\n  for (const arg of args) {\r\n    _merge(target || {}, arg);\r\n  }\r\n\r\n  return target as T;\r\n}\r\n\r\n/**\r\n * The _merge helper iterates through all props on source and assigns them to target.\r\n * When the value is an object, we will create a deep clone of the object. However if\r\n * there is a circular reference, the value will not be deep cloned and will persist\r\n * the reference.\r\n */\r\n// tslint:disable-next-line:no-any\r\nfunction _merge<T>(target: T, source: T, circularReferences: any[] = []): T {\r\n  circularReferences.push(source);\r\n\r\n  for (let name in source) {\r\n    if (source.hasOwnProperty(name)) {\r\n      const value = source[name];\r\n\r\n      if (typeof value === 'object') {\r\n        const isCircularReference = circularReferences.indexOf(value) > -1;\r\n\r\n        // tslint:disable-next-line:no-any\r\n        (target as any)[name] = isCircularReference ? value : _merge(target[name] || {}, value, circularReferences);\r\n      } else {\r\n        target[name] = value;\r\n      }\r\n    }\r\n  }\r\n\r\n  circularReferences.pop();\r\n\r\n  return target;\r\n}\r\n","/**\r\n * Returns true if and only if the user is on a iOS device.\r\n * Used to determine whether iOS-specific behavior should be applied.\r\n */\r\nexport const isIOS = (): boolean => {\r\n  if (!window || !window.navigator || !window.navigator.userAgent) {\r\n    return false;\r\n  }\r\n  return /iPad|iPhone|iPod/i.test(window.navigator.userAgent);\r\n};\r\n","let isMacResult: boolean | undefined;\r\n\r\n/**\r\n * Returns true if the user is on a Mac. Caches the result value.\r\n * @param reset - Reset the cached result value (mainly for testing).\r\n */\r\nexport function isMac(reset?: boolean): boolean {\r\n  if (typeof isMacResult === 'undefined' || reset) {\r\n    const userAgent = typeof window !== 'undefined' && window.navigator.userAgent;\r\n    isMacResult = !!userAgent && userAgent.indexOf('Macintosh') !== -1;\r\n  }\r\n  return !!isMacResult;\r\n}\r\n","import { filteredAssign } from './object';\r\n\r\n/**\r\n * An array of events that are allowed on every html element type.\r\n *\r\n * @public\r\n */\r\nexport const baseElementEvents = [\r\n  'onCopy',\r\n  'onCut',\r\n  'onPaste',\r\n  'onCompositionEnd',\r\n  'onCompositionStart',\r\n  'onCompositionUpdate',\r\n  'onFocus',\r\n  'onFocusCapture',\r\n  'onBlur',\r\n  'onBlurCapture',\r\n  'onChange',\r\n  'onInput',\r\n  'onSubmit',\r\n  'onLoad',\r\n  'onError',\r\n  'onKeyDown',\r\n  'onKeyDownCapture',\r\n  'onKeyPress',\r\n  'onKeyUp',\r\n  'onAbort',\r\n  'onCanPlay',\r\n  'onCanPlayThrough',\r\n  'onDurationChange',\r\n  'onEmptied',\r\n  'onEncrypted',\r\n  'onEnded',\r\n  'onLoadedData',\r\n  'onLoadedMetadata',\r\n  'onLoadStart',\r\n  'onPause',\r\n  'onPlay',\r\n  'onPlaying',\r\n  'onProgress',\r\n  'onRateChange',\r\n  'onSeeked',\r\n  'onSeeking',\r\n  'onStalled',\r\n  'onSuspend',\r\n  'onTimeUpdate',\r\n  'onVolumeChange',\r\n  'onWaiting',\r\n  'onClick',\r\n  'onClickCapture',\r\n  'onContextMenu',\r\n  'onDoubleClick',\r\n  'onDrag',\r\n  'onDragEnd',\r\n  'onDragEnter',\r\n  'onDragExit',\r\n  'onDragLeave',\r\n  'onDragOver',\r\n  'onDragStart',\r\n  'onDrop',\r\n  'onMouseDown',\r\n  'onMouseDownCapture',\r\n  'onMouseEnter',\r\n  'onMouseLeave',\r\n  'onMouseMove',\r\n  'onMouseOut',\r\n  'onMouseOver',\r\n  'onMouseUp',\r\n  'onMouseUpCapture',\r\n  'onSelect',\r\n  'onTouchCancel',\r\n  'onTouchEnd',\r\n  'onTouchMove',\r\n  'onTouchStart',\r\n  'onScroll',\r\n  'onWheel'\r\n];\r\n\r\n/**\r\n * An array of element attributes which are allowed on every html element type.\r\n *\r\n * @public\r\n */\r\nexport const baseElementProperties = [\r\n  'defaultChecked',\r\n  'defaultValue',\r\n  'accept',\r\n  'acceptCharset',\r\n  'accessKey',\r\n  'action',\r\n  'allowFullScreen',\r\n  'allowTransparency',\r\n  'alt',\r\n  'async',\r\n  'autoComplete',\r\n  'autoFocus',\r\n  'autoPlay',\r\n  'capture',\r\n  'cellPadding',\r\n  'cellSpacing',\r\n  'charSet',\r\n  'challenge',\r\n  'checked',\r\n  'children',\r\n  'classID',\r\n  'className',\r\n  'cols',\r\n  'colSpan',\r\n  'content',\r\n  'contentEditable',\r\n  'contextMenu',\r\n  'controls',\r\n  'coords',\r\n  'crossOrigin',\r\n  'data',\r\n  'dateTime',\r\n  'default',\r\n  'defer',\r\n  'dir',\r\n  'download',\r\n  'draggable',\r\n  'encType',\r\n  'form',\r\n  'formAction',\r\n  'formEncType',\r\n  'formMethod',\r\n  'formNoValidate',\r\n  'formTarget',\r\n  'frameBorder',\r\n  'headers',\r\n  'height',\r\n  'hidden',\r\n  'high',\r\n  'hrefLang',\r\n  'htmlFor',\r\n  'httpEquiv',\r\n  'icon',\r\n  'id',\r\n  'inputMode',\r\n  'integrity',\r\n  'is',\r\n  'keyParams',\r\n  'keyType',\r\n  'kind',\r\n  'lang',\r\n  'list',\r\n  'loop',\r\n  'low',\r\n  'manifest',\r\n  'marginHeight',\r\n  'marginWidth',\r\n  'max',\r\n  'maxLength',\r\n  'media',\r\n  'mediaGroup',\r\n  'method',\r\n  'min',\r\n  'minLength',\r\n  'multiple',\r\n  'muted',\r\n  'name',\r\n  'noValidate',\r\n  'open',\r\n  'optimum',\r\n  'pattern',\r\n  'placeholder',\r\n  'poster',\r\n  'preload',\r\n  'radioGroup',\r\n  'readOnly',\r\n  'rel',\r\n  'required',\r\n  'role',\r\n  'rows',\r\n  'rowSpan',\r\n  'sandbox',\r\n  'scope',\r\n  'scoped',\r\n  'scrolling',\r\n  'seamless',\r\n  'selected',\r\n  'shape',\r\n  'size',\r\n  'sizes',\r\n  'span',\r\n  'spellCheck',\r\n  'src',\r\n  'srcDoc',\r\n  'srcLang',\r\n  'srcSet',\r\n  'start',\r\n  'step',\r\n  'style',\r\n  'summary',\r\n  'tabIndex',\r\n  'title',\r\n  'type',\r\n  'useMap',\r\n  'value',\r\n  'width',\r\n  'wmode',\r\n  'wrap'\r\n];\r\n\r\n/**\r\n * An array of HTML element properties and events.\r\n *\r\n * @public\r\n */\r\nexport const htmlElementProperties = baseElementProperties.concat(baseElementEvents);\r\n\r\n/**\r\n * An array of A tag properties and events.\r\n *\r\n * @public\r\n */\r\nexport const anchorProperties = htmlElementProperties.concat(['href', 'target']);\r\n\r\n/**\r\n * An array of BUTTON tag properties and events.\r\n *\r\n * @public\r\n */\r\nexport const buttonProperties = htmlElementProperties.concat(['disabled']);\r\n\r\n/**\r\n * An array of DIV tag properties and events.\r\n *\r\n * @public\r\n */\r\nexport const divProperties = htmlElementProperties.concat(['align', 'noWrap']);\r\n\r\n/**\r\n * An array of INPUT tag properties and events.\r\n *\r\n * @public\r\n */\r\nexport const inputProperties = buttonProperties;\r\n\r\n/**\r\n * An array of TEXTAREA tag properties and events.\r\n *\r\n * @public\r\n */\r\nexport const textAreaProperties = buttonProperties;\r\n\r\n/**\r\n * An array of IMAGE tag properties and events.\r\n *\r\n * @public\r\n */\r\nexport const imageProperties = divProperties;\r\n\r\n/**\r\n * Gets native supported props for an html element provided the allowance set. Use one of the property\r\n * sets defined (divProperties, buttonPropertes, etc) to filter out supported properties from a given\r\n * props set. Note that all data- and aria- prefixed attributes will be allowed.\r\n * NOTE: getNativeProps should always be applied first when adding props to a react component. The\r\n * non-native props should be applied second. This will prevent getNativeProps from overriding your custom props.\r\n * For example, if props passed to getNativeProps has an onClick function and getNativeProps is added to\r\n * the component after an onClick function is added, then the getNativeProps onClick will override it.\r\n *\r\n * @public\r\n * @param props - The unfiltered input props\r\n * @param allowedPropsNames-  The array of allowed propnames.\r\n * @returns The filtered props\r\n */\r\nexport function getNativeProps<T>(props: {}, allowedPropNames: string[], excludedPropNames?: string[]): T {\r\n  return filteredAssign(\r\n    (propName: string) => {\r\n      return (\r\n        (!excludedPropNames || excludedPropNames.indexOf(propName) < 0) &&\r\n        (propName.indexOf('data-') === 0 || propName.indexOf('aria-') === 0 || allowedPropNames.indexOf(propName) >= 0)\r\n      );\r\n    },\r\n    {},\r\n    props\r\n  ) as T;\r\n}\r\n","import { KeyCodes } from './KeyCodes';\r\nimport { getDocument } from './dom/getDocument';\r\nimport { getItem, setItem } from './sessionStorage';\r\nimport { setRTL as mergeStylesSetRTL } from '@uifabric/merge-styles';\r\n\r\nconst RTL_LOCAL_STORAGE_KEY = 'isRTL';\r\n\r\n// Default to undefined so that we initialize on first read.\r\nlet _isRTL: boolean | undefined;\r\n\r\n/**\r\n * Gets the rtl state of the page (returns true if in rtl.)\r\n */\r\nexport function getRTL(): boolean {\r\n  if (_isRTL === undefined) {\r\n    // Fabric supports persisting the RTL setting between page refreshes via session storage\r\n    let savedRTL = getItem(RTL_LOCAL_STORAGE_KEY);\r\n    if (savedRTL !== null) {\r\n      _isRTL = savedRTL === '1';\r\n      setRTL(_isRTL);\r\n    }\r\n\r\n    let doc = getDocument();\r\n    if (_isRTL === undefined && doc) {\r\n      _isRTL = ((doc.body && doc.body.getAttribute('dir')) || doc.documentElement.getAttribute('dir')) === 'rtl';\r\n      mergeStylesSetRTL(_isRTL);\r\n    }\r\n  }\r\n\r\n  return !!_isRTL;\r\n}\r\n\r\n/**\r\n * Sets the rtl state of the page (by adjusting the dir attribute of the html element.)\r\n */\r\nexport function setRTL(isRTL: boolean, persistSetting: boolean = false): void {\r\n  let doc = getDocument();\r\n  if (doc) {\r\n    doc.documentElement.setAttribute('dir', isRTL ? 'rtl' : 'ltr');\r\n  }\r\n\r\n  if (persistSetting) {\r\n    setItem(RTL_LOCAL_STORAGE_KEY, isRTL ? '1' : '0');\r\n  }\r\n\r\n  _isRTL = isRTL;\r\n  mergeStylesSetRTL(_isRTL);\r\n}\r\n\r\n/**\r\n * Returns the given key, but flips right/left arrows if necessary.\r\n */\r\nexport function getRTLSafeKeyCode(key: number): number {\r\n  if (getRTL()) {\r\n    if (key === KeyCodes.left) {\r\n      key = KeyCodes.right;\r\n    } else if (key === KeyCodes.right) {\r\n      key = KeyCodes.left;\r\n    }\r\n  }\r\n\r\n  return key;\r\n}\r\n","/**\r\n * Fetches an item from session storage without throwing an exception\r\n * @param key The key of the item to fetch from session storage\r\n */\r\nexport function getItem(key: string): string | null {\r\n  let result = null;\r\n  try {\r\n    result = window.sessionStorage.getItem(key);\r\n  } catch (e) {\r\n    /* Eat the exception */\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * Inserts an item into session storage without throwing an exception\r\n * @param key The key of the item to add to session storage\r\n * @param data The data to put into session storage\r\n */\r\nexport function setItem(key: string, data: string): void {\r\n  try {\r\n    window.sessionStorage.setItem(key, data);\r\n  } catch (e) {\r\n    /* Eat the exception */\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { extendComponent } from './extendComponent';\r\n\r\n/**\r\n * Generates a function to be attached to a React component, which can be called\r\n * as a replacement to RAF. In-flight async calls will be auto canceled if the component\r\n * is unmounting before the async code is executed, preventing bugs where code\r\n * accesses things within the component after being unmounted.\r\n */\r\nexport const safeRequestAnimationFrame = (component: React.Component): ((cb: Function) => void) => {\r\n  let activeTimeouts: Set<number>;\r\n\r\n  return (cb: Function) => {\r\n    if (!activeTimeouts) {\r\n      activeTimeouts = new Set<number>();\r\n\r\n      extendComponent(component, {\r\n        componentWillUnmount: () => {\r\n          activeTimeouts.forEach((id: number) => cancelAnimationFrame(id));\r\n        }\r\n      });\r\n    }\r\n\r\n    const timeoutId = requestAnimationFrame(() => {\r\n      activeTimeouts.delete(timeoutId);\r\n      cb();\r\n    });\r\n\r\n    activeTimeouts.add(timeoutId);\r\n  };\r\n};\r\n","// Regex that finds { and } so they can be removed on a lookup for string format\r\nconst FORMAT_ARGS_REGEX = /[\\{\\}]/g;\r\n\r\n// Regex that finds {#} so it can be replaced by the arguments in string format\r\nconst FORMAT_REGEX = /\\{\\d+\\}/g;\r\n\r\n/**\r\n * String format method, used for scenarios where at runtime you\r\n * need to evaluate a formatted string given a tokenized string. This\r\n * usually only is needed in localization scenarios.\r\n\r\n * @example\r\n * ```tsx\r\n * \"I love {0} every {1}\".format(\"CXP\")\r\n * ```\r\n * will result in a Debug Exception.\r\n *\r\n * @public\r\n */\r\n// tslint:disable-next-line:no-any\r\nexport function format(s: string, ...values: any[]): string {\r\n  'use strict';\r\n\r\n  let args = values;\r\n  // Callback match function\r\n  function replace_func(match: string): string {\r\n    // looks up in the args\r\n    // tslint:disable-next-line:no-any\r\n    let replacement = args[match.replace(FORMAT_ARGS_REGEX, '') as any];\r\n\r\n    // catches undefined in nondebug and null in debug and nondebug\r\n    if (replacement === null || replacement === undefined) {\r\n      replacement = '';\r\n    }\r\n\r\n    return replacement;\r\n  }\r\n  return s.replace(FORMAT_REGEX, replace_func);\r\n}\r\n","import * as React from 'react';\r\nimport { concatStyleSets, IStyleSet, IStyleFunctionOrObject, IConcatenatedStyleSet } from '@uifabric/merge-styles';\r\nimport { Customizations } from './customizations/Customizations';\r\nimport { CustomizerContext, ICustomizerContext } from './customizations/CustomizerContext';\r\n\r\nexport interface IPropsWithStyles<TStyleProps, TStyleSet extends IStyleSet<TStyleSet>> {\r\n  styles?: IStyleFunctionOrObject<TStyleProps, TStyleSet>;\r\n}\r\n\r\nexport interface ICustomizableProps {\r\n  /**\r\n   * Name of scope, which can be targeted using the Customizer.\r\n   */\r\n  scope: string;\r\n\r\n  /**\r\n   * List of fields which can be customized.\r\n   * @defaultvalue [ 'theme', 'styles' ]\r\n   */\r\n  fields?: string[];\r\n}\r\n\r\nconst DefaultFields = ['theme', 'styles'];\r\n\r\n/**\r\n * The styled HOC wrapper allows you to create a functional wrapper around a given component which will resolve\r\n * getStyles functional props, and mix customized props passed in using concatStyleSets.\r\n *\r\n * @example\r\n * ```tsx\r\n * export const Toggle = styled(\r\n *   ToggleBase,\r\n *   props => ({ root: { background: 'red' }})\r\n * );\r\n * ```\r\n * @param Component - The unstyled base component to render, which receives styles.\r\n * @param baseStyles - The styles which should be curried with the component.\r\n * @param getProps - A helper which provides default props.\r\n * @param customizable - An object which defines which props can be customized using the Customizer.\r\n */\r\nexport function styled<\r\n  TComponentProps extends IPropsWithStyles<TStyleProps, TStyleSet>,\r\n  TStyleProps,\r\n  TStyleSet extends IStyleSet<TStyleSet>\r\n>(\r\n  Component: React.ComponentClass<TComponentProps> | React.StatelessComponent<TComponentProps>,\r\n  baseStyles: IStyleFunctionOrObject<TStyleProps, TStyleSet>,\r\n  getProps?: (props: TComponentProps) => Partial<TComponentProps>,\r\n  customizable?: ICustomizableProps\r\n): React.StatelessComponent<TComponentProps> {\r\n  customizable = customizable || { scope: '', fields: undefined };\r\n\r\n  const { scope, fields = DefaultFields } = customizable;\r\n\r\n  class Wrapped extends React.Component<TComponentProps, {}> {\r\n    // Function.prototype.name is an ES6 feature, so the cast to any is required until we're\r\n    // able to drop IE 11 support and compile with ES6 libs\r\n    // tslint:disable-next-line:no-any\r\n    public static displayName = `Styled${Component.displayName || (Component as any).name}`;\r\n\r\n    private _inCustomizerContext = false;\r\n\r\n    public render(): JSX.Element {\r\n      return <CustomizerContext.Consumer>{this._renderContent}</CustomizerContext.Consumer>;\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n      if (!this._inCustomizerContext) {\r\n        Customizations.observe(this._onSettingsChanged);\r\n      }\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n      if (!this._inCustomizerContext) {\r\n        Customizations.unobserve(this._onSettingsChanged);\r\n      }\r\n    }\r\n\r\n    private _renderContent = (context: ICustomizerContext): JSX.Element => {\r\n      this._inCustomizerContext = !!context.customizations.inCustomizerContext;\r\n\r\n      const settings = Customizations.getSettings(fields, scope, context.customizations);\r\n      const { styles: customizedStyles, ...rest } = settings;\r\n      const styles = (styleProps: TStyleProps) => _resolve(styleProps, baseStyles, customizedStyles, this.props.styles);\r\n\r\n      const additionalProps = getProps ? getProps(this.props) : undefined;\r\n      return <Component {...rest} {...additionalProps} {...this.props} styles={styles} />;\r\n    };\r\n\r\n    private _onSettingsChanged = () => this.forceUpdate();\r\n  }\r\n\r\n  // This preserves backwards compatibility.\r\n  // tslint:disable-next-line:no-any\r\n  return Wrapped as any;\r\n}\r\n\r\nfunction _resolve<TStyleProps, TStyleSet extends IStyleSet<TStyleSet>>(\r\n  styleProps: TStyleProps,\r\n  ...allStyles: (IStyleFunctionOrObject<TStyleProps, TStyleSet> | undefined)[]\r\n): IConcatenatedStyleSet<TStyleSet> | undefined {\r\n  const result: Partial<TStyleSet>[] = [];\r\n\r\n  for (const styles of allStyles) {\r\n    if (styles) {\r\n      result.push(typeof styles === 'function' ? styles(styleProps) : styles);\r\n    }\r\n  }\r\n  if (result.length === 1) {\r\n    return result[0] as IConcatenatedStyleSet<TStyleSet>;\r\n  } else if (result.length) {\r\n    // cliffkoh: I cannot figure out how to avoid the cast to any here.\r\n    // It is something to do with the use of Omit in IStyleSet.\r\n    // It might not be necessary once  Omit becomes part of lib.d.ts (when we remove our own Omit and rely on\r\n    // the official version).\r\n    // tslint:disable-next-line:no-any\r\n    return concatStyleSets(...(result as any)) as IConcatenatedStyleSet<TStyleSet>;\r\n  }\r\n\r\n  return undefined;\r\n}\r\n","import * as React from 'react';\r\nimport { IImageProps } from '../Image/Image.types';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IBaseProps, IStyleFunctionOrObject } from '../../Utilities';\r\n\r\n// Please keep alphabetized\r\nexport enum IconType {\r\n  /**\r\n   * Render using the fabric icon font.\r\n   */\r\n  default = 0,\r\n\r\n  /**\r\n   * Render using an image, where imageProps would be used.\r\n   */\r\n  image = 1,\r\n\r\n  /**\r\n   * Deprecated, use `default`.\r\n   * @deprecated Use `default`.\r\n   */\r\n  Default = 100000,\r\n\r\n  /**\r\n   * Deprecated, use `image`.\r\n   * @deprecated Use `image`.\r\n   */\r\n  Image = 100001\r\n}\r\n\r\n/**\r\n * {@docCategory Icon}\r\n */\r\nexport interface IIconProps extends IBaseProps, React.HTMLAttributes<HTMLElement> {\r\n  /**\r\n   * The name of the icon to use from the icon font. If string is empty, a placeholder icon will be rendered the same width as an icon\r\n   */\r\n  iconName?: string;\r\n\r\n  /**\r\n   * The aria label of the button for the benefit of screen readers.\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * The type of icon to render (image or icon font).\r\n   */\r\n  iconType?: IconType;\r\n\r\n  /**\r\n   * If rendering an image icon, these props will be passed to the Image component.\r\n   */\r\n  imageProps?: IImageProps;\r\n\r\n  /**\r\n   * If rendering an image icon, this function callback will be invoked in the event loading the image errors.\r\n   */\r\n  imageErrorAs?: React.StatelessComponent<IImageProps> | React.ComponentClass<IImageProps>;\r\n\r\n  /**\r\n   * Gets the styles for an Icon.\r\n   */\r\n  styles?: IStyleFunctionOrObject<IIconStyleProps, IIconStyles>;\r\n  theme?: ITheme;\r\n}\r\n\r\n/**\r\n * {@docCategory Icon}\r\n */\r\nexport interface IIconStyleProps {\r\n  className?: string;\r\n  iconClassName?: string;\r\n  isPlaceholder: boolean;\r\n  isImage: boolean;\r\n  styles?: Partial<IIconStyles>;\r\n  theme?: ITheme;\r\n}\r\n\r\n/**\r\n * {@docCategory Icon}\r\n */\r\nexport interface IIconStyles {\r\n  root?: IStyle;\r\n\r\n  /**\r\n   * Deprecated. Use `root`.\r\n   * @deprecated Use `root`.\r\n   */\r\n  imageContainer?: IStyle;\r\n}\r\n","import * as React from 'react';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\r\n\r\n/**\r\n * {@docCategory Image}\r\n */\r\nexport interface IImage {}\r\n\r\n/**\r\n * {@docCategory Image}\r\n */\r\nexport interface IImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\r\n  /**\r\n   * Optional callback to access the ICheckbox interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IImage>;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules\r\n   */\r\n  styles?: IStyleFunctionOrObject<IImageStyleProps, IImageStyles>;\r\n\r\n  /**\r\n   * Theme provided by HOC.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Additional css class to apply to the Component\r\n   * @defaultvalue undefined\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * If true, fades the image in when loaded.\r\n   * @defaultvalue true\r\n   */\r\n  shouldFadeIn?: boolean;\r\n\r\n  /**\r\n   * If true, the image starts as visible and is hidden on error. Otherwise, the image is hidden until\r\n   * it is successfully loaded. This disables shouldFadeIn.\r\n   * @defaultvalue false;\r\n   */\r\n  shouldStartVisible?: boolean;\r\n\r\n  /**\r\n   * Used to determine how the image is scaled and cropped to fit the frame.\r\n   *\r\n   * @defaultvalue If both dimensions are provided, then the image is fit using ImageFit.scale.\r\n   * Otherwise, the image won't be scaled or cropped.\r\n   */\r\n  imageFit?: ImageFit;\r\n\r\n  /**\r\n   * Deprecated at v1.3.6, to replace the src in case of errors, use `onLoadingStateChange` instead and\r\n   * rerender the Image with a difference src.\r\n   * @deprecated Use `onLoadingStateChange` instead and\r\n   * rerender the Image with a difference src.\r\n   */\r\n  errorSrc?: string;\r\n\r\n  /**\r\n   * If true, the image frame will expand to fill its parent container.\r\n   */\r\n  maximizeFrame?: boolean;\r\n\r\n  /**\r\n   * Optional callback method for when the image load state has changed.\r\n   * The 'loadState' parameter indicates the current state of the Image.\r\n   */\r\n  onLoadingStateChange?: (loadState: ImageLoadState) => void;\r\n\r\n  /**\r\n   * Specifies the cover style to be used for this image. If not\r\n   * specified, this will be dynamically calculated based on the\r\n   * aspect ratio for the image.\r\n   */\r\n  coverStyle?: ImageCoverStyle;\r\n}\r\n\r\n/**\r\n * The possible methods that can be used to fit the image.\r\n * {@docCategory Image}\r\n */\r\nexport enum ImageFit {\r\n  /**\r\n   * The image is not scaled. The image is centered and cropped within the content box.\r\n   */\r\n  center = 0,\r\n\r\n  /**\r\n   * The image is scaled to maintain its aspect ratio while being fully contained within the frame. The image will\r\n   * be centered horizontally and vertically within the frame. The space in the top and bottom or in the sides of\r\n   * the frame will be empty depending on the difference in aspect ratio between the image and the frame.\r\n   */\r\n  contain = 1,\r\n\r\n  /**\r\n   * The image is scaled to maintain its aspect ratio while filling the frame. Portions of the image will be cropped from\r\n   * the top and bottom, or from the sides, depending on the difference in aspect ratio between the image and the frame.\r\n   */\r\n  cover = 2,\r\n\r\n  /**\r\n   * Neither the image nor the frame are scaled. If their sizes do not match, the image will either be cropped or the\r\n   * frame will have empty space.\r\n   */\r\n  none = 3,\r\n\r\n  /**\r\n   * The image will be centered horizontally and vertically within the frame and maintains its aspect ratio. It will\r\n   * behave as ImageFit.center if the image's natural height or width is less than the Image frame's height or width,\r\n   * but if both natural height and width are larger than the frame it will behave as ImageFit.cover.\r\n   */\r\n  centerCover = 4\r\n}\r\n\r\n/**\r\n * The cover style to be used on the image\r\n * {@docCategory Image}\r\n */\r\nexport enum ImageCoverStyle {\r\n  /**\r\n   * The image will be shown at 100% height of container and the width will be scaled accordingly\r\n   */\r\n  landscape = 0,\r\n\r\n  /**\r\n   * The image will be shown at 100% width of container and the height will be scaled accordingly\r\n   */\r\n  portrait = 1\r\n}\r\n\r\n/**\r\n * {@docCategory Image}\r\n */\r\nexport enum ImageLoadState {\r\n  /**\r\n   * The image has not yet been loaded, and there is no error yet.\r\n   */\r\n  notLoaded = 0,\r\n\r\n  /**\r\n   * The image has been loaded successfully.\r\n   */\r\n  loaded = 1,\r\n\r\n  /**\r\n   * An error has been encountered while loading the image.\r\n   */\r\n  error = 2,\r\n\r\n  /**\r\n   * Deprecated at v1.3.6, to replace the src in case of errors, use `onLoadingStateChange` instead\r\n   * and rerender the Image with a difference src.\r\n   * @deprecated Use `onLoadingStateChange` instead\r\n   * and rerender the Image with a difference src.\r\n   */\r\n  errorLoaded = 3\r\n}\r\n\r\n/**\r\n * {@docCategory Image}\r\n */\r\nexport interface IImageStyleProps {\r\n  /**\r\n   * Accept theme prop.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Accept custom classNames\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * If true, the image frame will expand to fill its parent container.\r\n   */\r\n  maximizeFrame?: boolean;\r\n\r\n  /**\r\n   * If true, the image is loaded\r\n   */\r\n  isLoaded?: boolean;\r\n\r\n  /**\r\n   * If true, fades the image in when loaded.\r\n   * @defaultvalue true\r\n   */\r\n  shouldFadeIn?: boolean;\r\n\r\n  /**\r\n   * If true, the image starts as visible and is hidden on error. Otherwise, the image is hidden until\r\n   * it is successfully loaded. This disables shouldFadeIn.\r\n   * @defaultvalue false;\r\n   */\r\n  shouldStartVisible?: boolean;\r\n\r\n  /**\r\n   * If true the image is coverStyle landscape instead of portrait\r\n   */\r\n  isLandscape?: boolean;\r\n\r\n  /**\r\n   * ImageFit booleans for center, cover, contain, centerCover, none\r\n   */\r\n  isCenter?: boolean;\r\n  isContain?: boolean;\r\n  isCover?: boolean;\r\n  isCenterCover?: boolean;\r\n  isNone?: boolean;\r\n\r\n  /**\r\n   * if true image load is in error\r\n   */\r\n  isError?: boolean;\r\n\r\n  /**\r\n   * if true, imageFit is undefined\r\n   */\r\n  isNotImageFit?: boolean;\r\n\r\n  /**\r\n   * Image width value\r\n   */\r\n  width?: number | string;\r\n\r\n  /**\r\n   * Image height value\r\n   */\r\n  height?: number | string;\r\n}\r\n\r\n/**\r\n * {@docCategory Image}\r\n */\r\nexport interface IImageStyles {\r\n  /**\r\n   * Style set for the root div element.\r\n   */\r\n  root: IStyle;\r\n  /**\r\n   * Style set for the img element.\r\n   */\r\n  image: IStyle;\r\n}\r\n","// @uifabric/utilities@6.35.6\n  // Do not modify this file, the file is generated as part of publish. The checked in version is a placeholder only.\n  import { setVersion } from '@uifabric/set-version';\n  setVersion('@uifabric/utilities', '6.35.6');","import * as React from 'react';\r\nimport { classNamesFunction, getNativeProps, imageProperties } from '../../Utilities';\r\nimport { IImageProps, IImageStyleProps, IImageStyles, ImageCoverStyle, ImageFit, ImageLoadState } from './Image.types';\r\n\r\nconst getClassNames = classNamesFunction<IImageStyleProps, IImageStyles>();\r\n\r\nexport interface IImageState {\r\n  loadState?: ImageLoadState;\r\n}\r\n\r\nconst KEY_PREFIX = 'fabricImage';\r\n\r\nexport class ImageBase extends React.Component<IImageProps, IImageState> {\r\n  public static defaultProps = {\r\n    shouldFadeIn: true\r\n  };\r\n\r\n  private static _svgRegex = /\\.svg$/i;\r\n\r\n  // Make an initial assumption about the image layout until we can\r\n  // check the rendered element. The value here only takes effect when\r\n  // shouldStartVisible is true.\r\n  private _coverStyle: ImageCoverStyle = ImageCoverStyle.portrait;\r\n  private _imageElement = React.createRef<HTMLImageElement>();\r\n  private _frameElement = React.createRef<HTMLDivElement>();\r\n\r\n  constructor(props: IImageProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      loadState: ImageLoadState.notLoaded\r\n    };\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: IImageProps): void {\r\n    if (nextProps.src !== this.props.src) {\r\n      this.setState({\r\n        loadState: ImageLoadState.notLoaded\r\n      });\r\n    } else if (this.state.loadState === ImageLoadState.loaded) {\r\n      this._computeCoverStyle(nextProps);\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IImageProps, prevState: IImageState) {\r\n    this._checkImageLoaded();\r\n    if (this.props.onLoadingStateChange && prevState.loadState !== this.state.loadState) {\r\n      this.props.onLoadingStateChange(this.state.loadState!);\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const imageProps = getNativeProps(this.props, imageProperties, ['width', 'height']);\r\n    const {\r\n      src,\r\n      alt,\r\n      width,\r\n      height,\r\n      shouldFadeIn,\r\n      shouldStartVisible,\r\n      className,\r\n      imageFit,\r\n      role,\r\n      maximizeFrame,\r\n      styles,\r\n      theme\r\n    } = this.props;\r\n    const { loadState } = this.state;\r\n    const coverStyle = this.props.coverStyle !== undefined ? this.props.coverStyle : this._coverStyle;\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      width,\r\n      height,\r\n      maximizeFrame,\r\n      shouldFadeIn,\r\n      shouldStartVisible,\r\n      isLoaded: loadState === ImageLoadState.loaded || (loadState === ImageLoadState.notLoaded && this.props.shouldStartVisible),\r\n      isLandscape: coverStyle === ImageCoverStyle.landscape,\r\n      isCenter: imageFit === ImageFit.center,\r\n      isCenterCover: imageFit === ImageFit.centerCover,\r\n      isContain: imageFit === ImageFit.contain,\r\n      isCover: imageFit === ImageFit.cover,\r\n      isNone: imageFit === ImageFit.none,\r\n      isError: loadState === ImageLoadState.error,\r\n      isNotImageFit: imageFit === undefined\r\n    });\r\n\r\n    // If image dimensions aren't specified, the natural size of the image is used.\r\n    return (\r\n      <div className={classNames.root} style={{ width: width, height: height }} ref={this._frameElement}>\r\n        <img\r\n          {...imageProps}\r\n          onLoad={this._onImageLoaded}\r\n          onError={this._onImageError}\r\n          key={KEY_PREFIX + this.props.src || ''}\r\n          className={classNames.image}\r\n          ref={this._imageElement}\r\n          src={src}\r\n          alt={alt}\r\n          role={role}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onImageLoaded = (ev: React.SyntheticEvent<HTMLImageElement>): void => {\r\n    const { src, onLoad } = this.props;\r\n    if (onLoad) {\r\n      onLoad(ev);\r\n    }\r\n\r\n    this._computeCoverStyle(this.props);\r\n\r\n    if (src) {\r\n      this.setState({\r\n        loadState: ImageLoadState.loaded\r\n      });\r\n    }\r\n  };\r\n\r\n  private _checkImageLoaded(): void {\r\n    const { src } = this.props;\r\n    const { loadState } = this.state;\r\n\r\n    if (loadState === ImageLoadState.notLoaded) {\r\n      // testing if naturalWidth and naturalHeight are greater than zero is better than checking\r\n      // .complete, because .complete will also be set to true if the image breaks. However,\r\n      // for some browsers, SVG images do not have a naturalWidth or naturalHeight, so fall back\r\n      // to checking .complete for these images.\r\n      const isLoaded: boolean = this._imageElement.current\r\n        ? (src && (this._imageElement.current.naturalWidth > 0 && this._imageElement.current.naturalHeight > 0)) ||\r\n          (this._imageElement.current.complete && ImageBase._svgRegex.test(src!))\r\n        : false;\r\n\r\n      if (isLoaded) {\r\n        this._computeCoverStyle(this.props);\r\n        this.setState({\r\n          loadState: ImageLoadState.loaded\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  private _computeCoverStyle(props: IImageProps): void {\r\n    const { imageFit, width, height } = props;\r\n\r\n    // Do not compute cover style if it was already specified in props\r\n    if (\r\n      (imageFit === ImageFit.cover || imageFit === ImageFit.contain || imageFit === ImageFit.centerCover) &&\r\n      this.props.coverStyle === undefined &&\r\n      this._imageElement.current &&\r\n      this._frameElement.current\r\n    ) {\r\n      // Determine the desired ratio using the width and height props.\r\n      // If those props aren't available, measure measure the frame.\r\n      let desiredRatio;\r\n      if (!!width && !!height && imageFit !== ImageFit.centerCover) {\r\n        desiredRatio = (width as number) / (height as number);\r\n      } else {\r\n        desiredRatio = this._frameElement.current.clientWidth / this._frameElement.current.clientHeight;\r\n      }\r\n\r\n      // Examine the source image to determine its original ratio.\r\n      const naturalRatio = this._imageElement.current.naturalWidth / this._imageElement.current.naturalHeight;\r\n\r\n      // Should we crop from the top or the sides?\r\n      if (naturalRatio > desiredRatio) {\r\n        this._coverStyle = ImageCoverStyle.landscape;\r\n      } else {\r\n        this._coverStyle = ImageCoverStyle.portrait;\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onImageError = (ev: React.SyntheticEvent<HTMLImageElement>): void => {\r\n    if (this.props.onError) {\r\n      this.props.onError(ev);\r\n    }\r\n    this.setState({\r\n      loadState: ImageLoadState.error\r\n    });\r\n  };\r\n}\r\n","import { mergeStyles } from '../MergeStyles';\r\n\r\n/**\r\n * Builds a class names object from a given map.\r\n *\r\n * @param styles - Map of unprocessed styles.\r\n * @returns Map of property name to class name.\r\n */\r\nexport function buildClassMap<T>(styles: T): { [key in keyof T]?: string } {\r\n  let classes: { [key in keyof T]?: string } = {};\r\n\r\n  for (let styleName in styles) {\r\n    if (styles.hasOwnProperty(styleName)) {\r\n      let className: string;\r\n\r\n      Object.defineProperty(classes, styleName, {\r\n        get: (): string => {\r\n          if (className === undefined) {\r\n            // tslint:disable-next-line:no-any\r\n            className = mergeStyles(styles[styleName] as any).toString();\r\n          }\r\n          return className;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n      });\r\n    }\r\n  }\r\n\r\n  return classes;\r\n}\r\n","import { GlobalSettings, warn } from '@uifabric/utilities';\r\nimport { IRawStyle, IFontFace, fontFace, mergeStyles, Stylesheet } from '@uifabric/merge-styles';\r\n\r\nexport interface IIconSubset {\r\n  fontFace?: IFontFace;\r\n  icons: {\r\n    [key: string]: string | JSX.Element;\r\n  };\r\n\r\n  style?: IRawStyle;\r\n}\r\n\r\nexport interface IIconSubsetRecord extends IIconSubset {\r\n  isRegistered?: boolean;\r\n  className?: string;\r\n}\r\n\r\nexport interface IIconRecord {\r\n  code: string | undefined;\r\n  subset: IIconSubsetRecord;\r\n}\r\n\r\nexport interface IIconOptions {\r\n  /**\r\n   * By default, registering the same set of icons will generate a console warning per duplicate icon\r\n   * registered, because this scenario can create unexpected consequences.\r\n   *\r\n   * Some scenarios include:\r\n   *\r\n   * Icon set was previously registered using a different base url.\r\n   * Icon set was previously registered but a different version was provided.\r\n   * Icons in a previous registered set overlap with a new set.\r\n   *\r\n   * To simply ignore previously registered icons, you can specify to disable warnings. This means\r\n   * that if an icon which was previous registered is registered again, it will be silently ignored.\r\n   * However, consider whether the problems listed above will cause issues.\r\n   **/\r\n  disableWarnings: boolean;\r\n\r\n  /**\r\n   * @deprecated\r\n   * Use 'disableWarnings' instead.\r\n   */\r\n  warnOnMissingIcons?: boolean;\r\n}\r\n\r\nexport interface IIconRecords {\r\n  __options: IIconOptions;\r\n  __remapped: { [key: string]: string };\r\n  [key: string]: IIconRecord | {};\r\n}\r\n\r\nconst ICON_SETTING_NAME = 'icons';\r\n\r\nconst _iconSettings = GlobalSettings.getValue<IIconRecords>(ICON_SETTING_NAME, {\r\n  __options: {\r\n    disableWarnings: false,\r\n    warnOnMissingIcons: true\r\n  },\r\n  __remapped: {}\r\n});\r\n\r\n// Reset icon registration on stylesheet resets.\r\nconst stylesheet = Stylesheet.getInstance();\r\n\r\nif (stylesheet && stylesheet.onReset) {\r\n  stylesheet.onReset(() => {\r\n    for (const name in _iconSettings) {\r\n      if (_iconSettings.hasOwnProperty(name) && !!(_iconSettings[name] as IIconRecord).subset) {\r\n        (_iconSettings[name] as IIconRecord).subset.className = undefined;\r\n      }\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * Normalizes an icon name for consistent mapping.\r\n * Current implementation is to convert the icon name to lower case.\r\n *\r\n * @param name - Icon name to normalize.\r\n * @returns {string} Normalized icon name to use for indexing and mapping.\r\n */\r\nconst normalizeIconName = (name: string): string => name.toLowerCase();\r\n\r\n/**\r\n * Registers a given subset of icons.\r\n *\r\n * @param iconSubset - the icon subset definition.\r\n */\r\nexport function registerIcons(iconSubset: IIconSubset, options?: Partial<IIconOptions>): void {\r\n  let subset = {\r\n    ...iconSubset,\r\n    isRegistered: false,\r\n    className: undefined\r\n  };\r\n  let { icons } = iconSubset;\r\n\r\n  // Grab options, optionally mix user provided ones on top.\r\n  options = options ? { ..._iconSettings.__options, ...options } : _iconSettings.__options;\r\n\r\n  for (const iconName in icons) {\r\n    if (icons.hasOwnProperty(iconName)) {\r\n      const code = icons[iconName];\r\n      const normalizedIconName = normalizeIconName(iconName);\r\n\r\n      if (_iconSettings[normalizedIconName]) {\r\n        _warnDuplicateIcon(iconName);\r\n      } else {\r\n        _iconSettings[normalizedIconName] = {\r\n          code,\r\n          subset\r\n        };\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Unregisters icons by name.\r\n *\r\n * @param iconNames - List of icons to unregister.\r\n */\r\nexport function unregisterIcons(iconNames: string[]): void {\r\n  const options = _iconSettings.__options;\r\n\r\n  for (const iconName of iconNames) {\r\n    const normalizedIconName = normalizeIconName(iconName);\r\n    if (_iconSettings[normalizedIconName]) {\r\n      delete _iconSettings[normalizedIconName];\r\n    } else {\r\n      // Warn that we are trying to delete an icon that doesn't exist\r\n      if (!options.disableWarnings) {\r\n        warn(`The icon \"${iconName}\" tried to unregister but was not registered.`);\r\n      }\r\n    }\r\n\r\n    // Delete any aliases for this iconName\r\n    if (_iconSettings.__remapped[normalizedIconName]) {\r\n      delete _iconSettings.__remapped[normalizedIconName];\r\n    }\r\n\r\n    // Delete any items that were an alias for this iconName\r\n    Object.keys(_iconSettings.__remapped).forEach((key: string) => {\r\n      if (_iconSettings.__remapped[key] === normalizedIconName) {\r\n        delete _iconSettings.__remapped[key];\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n/**\r\n * Remaps one icon name to another.\r\n */\r\nexport function registerIconAlias(iconName: string, mappedToName: string): void {\r\n  _iconSettings.__remapped[normalizeIconName(iconName)] = normalizeIconName(mappedToName);\r\n}\r\n\r\n/**\r\n * Gets an icon definition. If an icon is requested but the subset has yet to be registered,\r\n * it will get registered immediately.\r\n *\r\n * @public\r\n * @param name - Name of icon.\r\n */\r\nexport function getIcon(name?: string): IIconRecord | undefined {\r\n  let icon: IIconRecord | undefined = undefined;\r\n  const options = _iconSettings.__options;\r\n\r\n  name = name ? normalizeIconName(name) : '';\r\n  name = _iconSettings.__remapped[name] || name;\r\n\r\n  if (name) {\r\n    icon = _iconSettings[name!] as IIconRecord;\r\n\r\n    if (icon) {\r\n      let { subset } = icon;\r\n      if (subset && subset.fontFace) {\r\n        if (!subset.isRegistered) {\r\n          fontFace(subset.fontFace);\r\n          subset.isRegistered = true;\r\n        }\r\n\r\n        if (!subset.className) {\r\n          subset.className = mergeStyles(subset.style, {\r\n            fontFamily: subset.fontFace.fontFamily,\r\n            fontWeight: subset.fontFace.fontWeight || 'normal',\r\n            fontStyle: subset.fontFace.fontStyle || 'normal'\r\n          });\r\n        }\r\n      }\r\n    } else {\r\n      if (!options.disableWarnings && options.warnOnMissingIcons) {\r\n        warn(`The icon \"${name}\" was used but not registered. See http://aka.ms/fabric-icon-usage for more information.`);\r\n      }\r\n    }\r\n  }\r\n\r\n  return icon;\r\n}\r\n\r\n/**\r\n * Sets the icon options.\r\n *\r\n * @public\r\n */\r\nexport function setIconOptions(options: Partial<IIconOptions>): void {\r\n  _iconSettings.__options = {\r\n    ..._iconSettings.__options,\r\n    ...options\r\n  };\r\n}\r\n\r\nlet _missingIcons: string[] = [];\r\nlet _missingIconsTimer: number | undefined = undefined;\r\n\r\nfunction _warnDuplicateIcon(iconName: string): void {\r\n  const options = _iconSettings.__options;\r\n  const warningDelay = 2000;\r\n  const maxIconsInMessage = 10;\r\n\r\n  if (!options.disableWarnings) {\r\n    _missingIcons.push(iconName);\r\n    if (_missingIconsTimer === undefined) {\r\n      _missingIconsTimer = setTimeout(() => {\r\n        warn(\r\n          `Some icons were re-registered. Applications should only call registerIcons for any given ` +\r\n            `icon once. Redefining what an icon is may have unintended consequences. Duplicates ` +\r\n            `include: \\n` +\r\n            _missingIcons.slice(0, maxIconsInMessage).join(', ') +\r\n            (_missingIcons.length > maxIconsInMessage ? ` (+ ${_missingIcons.length - maxIconsInMessage} more)` : '')\r\n        );\r\n        _missingIconsTimer = undefined;\r\n        _missingIcons = [];\r\n      }, warningDelay);\r\n    }\r\n  }\r\n}\r\n","import { IAnimationStyles, IAnimationVariables } from '../interfaces/index';\r\nimport { IRawStyle, keyframes } from '@uifabric/merge-styles';\r\n\r\n/* Register the keyframes */\r\n\r\nconst EASING_FUNCTION_1 = 'cubic-bezier(.1,.9,.2,1)';\r\nconst EASING_FUNCTION_2 = 'cubic-bezier(.1,.25,.75,.9)';\r\nconst DURATION_1 = '0.167s';\r\nconst DURATION_2 = '0.267s';\r\nconst DURATION_3 = '0.367s';\r\nconst DURATION_4 = '0.467s';\r\n\r\nconst FADE_IN: string = keyframes({\r\n  from: { opacity: 0 },\r\n  to: { opacity: 1 }\r\n});\r\n\r\nconst FADE_OUT: string = keyframes({\r\n  from: { opacity: 1 },\r\n  to: { opacity: 0 }\r\n});\r\n\r\nconst SLIDE_RIGHT_IN10: string = _createSlideInX(-10);\r\nconst SLIDE_RIGHT_IN20: string = _createSlideInX(-20);\r\nconst SLIDE_RIGHT_IN40: string = _createSlideInX(-40);\r\nconst SLIDE_RIGHT_IN400: string = _createSlideInX(-400);\r\nconst SLIDE_LEFT_IN10: string = _createSlideInX(10);\r\nconst SLIDE_LEFT_IN20: string = _createSlideInX(20);\r\nconst SLIDE_LEFT_IN40: string = _createSlideInX(40);\r\nconst SLIDE_LEFT_IN400: string = _createSlideInX(400);\r\nconst SLIDE_UP_IN10: string = _createSlideInY(10);\r\nconst SLIDE_UP_IN20: string = _createSlideInY(20);\r\nconst SLIDE_DOWN_IN10: string = _createSlideInY(-10);\r\nconst SLIDE_DOWN_IN20: string = _createSlideInY(-20);\r\n\r\nconst SLIDE_RIGHT_OUT10: string = _createSlideOutX(10);\r\nconst SLIDE_RIGHT_OUT20: string = _createSlideOutX(20);\r\nconst SLIDE_RIGHT_OUT40: string = _createSlideOutX(40);\r\nconst SLIDE_RIGHT_OUT400: string = _createSlideOutX(400);\r\nconst SLIDE_LEFT_OUT10: string = _createSlideOutX(-10);\r\nconst SLIDE_LEFT_OUT20: string = _createSlideOutX(-20);\r\nconst SLIDE_LEFT_OUT40: string = _createSlideOutX(-40);\r\nconst SLIDE_LEFT_OUT400: string = _createSlideOutX(-400);\r\nconst SLIDE_UP_OUT10: string = _createSlideOutY(-10);\r\nconst SLIDE_UP_OUT20: string = _createSlideOutY(-20);\r\nconst SLIDE_DOWN_OUT10: string = _createSlideOutY(10);\r\nconst SLIDE_DOWN_OUT20: string = _createSlideOutY(20);\r\n\r\nconst SCALE_UP100: string = keyframes({\r\n  from: { transform: 'scale3d(.98,.98,1)' },\r\n  to: { transform: 'scale3d(1,1,1)' }\r\n});\r\n\r\nconst SCALE_DOWN98: string = keyframes({\r\n  from: { transform: 'scale3d(1,1,1)' },\r\n  to: { transform: 'scale3d(.98,.98,1)' }\r\n});\r\n\r\nconst SCALE_DOWN100: string = keyframes({\r\n  from: { transform: 'scale3d(1.03,1.03,1)' },\r\n  to: { transform: 'scale3d(1,1,1)' }\r\n});\r\n\r\nconst SCALE_UP103: string = keyframes({\r\n  from: { transform: 'scale3d(1,1,1)' },\r\n  to: { transform: 'scale3d(1.03,1.03,1)' }\r\n});\r\n\r\nconst ROTATE90: string = keyframes({\r\n  from: { transform: 'rotateZ(0deg)' },\r\n  to: { transform: 'rotateZ(90deg)' }\r\n});\r\n\r\nconst ROTATE_N90: string = keyframes({\r\n  from: { transform: 'rotateZ(0deg)' },\r\n  to: { transform: 'rotateZ(-90deg)' }\r\n});\r\n\r\n/**\r\n * Exporting raw duraction values and easing functions to be used in custom animations\r\n */\r\nexport const AnimationVariables: IAnimationVariables = {\r\n  easeFunction1: EASING_FUNCTION_1,\r\n  easeFunction2: EASING_FUNCTION_2,\r\n  durationValue1: DURATION_1,\r\n  durationValue2: DURATION_2,\r\n  durationValue3: DURATION_3,\r\n  durationValue4: DURATION_4\r\n};\r\n\r\n/**\r\n * All Fabric standard animations, exposed as json objects referencing predefined\r\n * keyframes. These objects can be mixed in with other class definitions.\r\n */\r\nexport const AnimationStyles: IAnimationStyles = {\r\n  slideRightIn10: _createAnimation(`${FADE_IN},${SLIDE_RIGHT_IN10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideRightIn20: _createAnimation(`${FADE_IN},${SLIDE_RIGHT_IN20}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideRightIn40: _createAnimation(`${FADE_IN},${SLIDE_RIGHT_IN40}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideRightIn400: _createAnimation(`${FADE_IN},${SLIDE_RIGHT_IN400}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftIn10: _createAnimation(`${FADE_IN},${SLIDE_LEFT_IN10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftIn20: _createAnimation(`${FADE_IN},${SLIDE_LEFT_IN20}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftIn40: _createAnimation(`${FADE_IN},${SLIDE_LEFT_IN40}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftIn400: _createAnimation(`${FADE_IN},${SLIDE_LEFT_IN400}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideUpIn10: _createAnimation(`${FADE_IN},${SLIDE_UP_IN10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideUpIn20: _createAnimation(`${FADE_IN},${SLIDE_UP_IN20}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideDownIn10: _createAnimation(`${FADE_IN},${SLIDE_DOWN_IN10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideDownIn20: _createAnimation(`${FADE_IN},${SLIDE_DOWN_IN20}`, DURATION_3, EASING_FUNCTION_1),\r\n\r\n  slideRightOut10: _createAnimation(`${FADE_OUT},${SLIDE_RIGHT_OUT10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideRightOut20: _createAnimation(`${FADE_OUT},${SLIDE_RIGHT_OUT20}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideRightOut40: _createAnimation(`${FADE_OUT},${SLIDE_RIGHT_OUT40}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideRightOut400: _createAnimation(`${FADE_OUT},${SLIDE_RIGHT_OUT400}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftOut10: _createAnimation(`${FADE_OUT},${SLIDE_LEFT_OUT10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftOut20: _createAnimation(`${FADE_OUT},${SLIDE_LEFT_OUT20}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftOut40: _createAnimation(`${FADE_OUT},${SLIDE_LEFT_OUT40}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideLeftOut400: _createAnimation(`${FADE_OUT},${SLIDE_LEFT_OUT400}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideUpOut10: _createAnimation(`${FADE_OUT},${SLIDE_UP_OUT10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideUpOut20: _createAnimation(`${FADE_OUT},${SLIDE_UP_OUT20}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideDownOut10: _createAnimation(`${FADE_OUT},${SLIDE_DOWN_OUT10}`, DURATION_3, EASING_FUNCTION_1),\r\n  slideDownOut20: _createAnimation(`${FADE_OUT},${SLIDE_DOWN_OUT20}`, DURATION_3, EASING_FUNCTION_1),\r\n\r\n  scaleUpIn100: _createAnimation(`${FADE_IN},${SCALE_UP100}`, DURATION_3, EASING_FUNCTION_1),\r\n  scaleDownIn100: _createAnimation(`${FADE_IN},${SCALE_DOWN100}`, DURATION_3, EASING_FUNCTION_1),\r\n  scaleUpOut103: _createAnimation(`${FADE_OUT},${SCALE_UP103}`, DURATION_1, EASING_FUNCTION_2),\r\n  scaleDownOut98: _createAnimation(`${FADE_OUT},${SCALE_DOWN98}`, DURATION_1, EASING_FUNCTION_2),\r\n\r\n  fadeIn100: _createAnimation(FADE_IN, DURATION_1, EASING_FUNCTION_2),\r\n  fadeIn200: _createAnimation(FADE_IN, DURATION_2, EASING_FUNCTION_2),\r\n  fadeIn400: _createAnimation(FADE_IN, DURATION_3, EASING_FUNCTION_2),\r\n  fadeIn500: _createAnimation(FADE_IN, DURATION_4, EASING_FUNCTION_2),\r\n\r\n  fadeOut100: _createAnimation(FADE_OUT, DURATION_1, EASING_FUNCTION_2),\r\n  fadeOut200: _createAnimation(FADE_OUT, DURATION_2, EASING_FUNCTION_2),\r\n  fadeOut400: _createAnimation(FADE_OUT, DURATION_3, EASING_FUNCTION_2),\r\n  fadeOut500: _createAnimation(FADE_OUT, DURATION_4, EASING_FUNCTION_2),\r\n\r\n  rotate90deg: _createAnimation(ROTATE90, '0.1s', EASING_FUNCTION_2),\r\n  rotateN90deg: _createAnimation(ROTATE_N90, '0.1s', EASING_FUNCTION_2)\r\n\r\n  // expandCollapse 100/200/400, delay 100/200\r\n};\r\n\r\nfunction _createAnimation(animationName: string, animationDuration: string, animationTimingFunction: string): IRawStyle {\r\n  return {\r\n    animationName,\r\n    animationDuration,\r\n    animationTimingFunction,\r\n    animationFillMode: 'both'\r\n  };\r\n}\r\n\r\nfunction _createSlideInX(fromX: number): string {\r\n  return keyframes({\r\n    from: { transform: `translate3d(${fromX}px,0,0)` },\r\n    to: { transform: `translate3d(0,0,0)` }\r\n  });\r\n}\r\n\r\nfunction _createSlideInY(fromY: number): string {\r\n  return keyframes({\r\n    from: { transform: `translate3d(0,${fromY}px,0)` },\r\n    to: { transform: `translate3d(0,0,0)` }\r\n  });\r\n}\r\n\r\nfunction _createSlideOutX(toX: number): string {\r\n  return keyframes({\r\n    from: { transform: `translate3d(0,0,0)` },\r\n    to: { transform: `translate3d(${toX}px,0,0)` }\r\n  });\r\n}\r\n\r\nfunction _createSlideOutY(toY: number): string {\r\n  return keyframes({\r\n    from: { transform: `translate3d(0,0,0)` },\r\n    to: { transform: `translate3d(0,${toY}px,0)` }\r\n  });\r\n}\r\n","import { IPalette } from '../interfaces/index';\r\n\r\n// When adding or removing a color, make sure you keep this consistent with IColorClassNames by adding the color variants.\r\nexport const DefaultPalette: IPalette = {\r\n  themeDarker: '#004578',\r\n  themeDark: '#005a9e',\r\n  themeDarkAlt: '#106ebe',\r\n  themePrimary: '#0078d4',\r\n  themeSecondary: '#2b88d8',\r\n  themeTertiary: '#71afe5',\r\n  themeLight: '#c7e0f4',\r\n  themeLighter: '#deecf9',\r\n  themeLighterAlt: '#eff6fc',\r\n  black: '#000000',\r\n  blackTranslucent40: 'rgba(0,0,0,.4)',\r\n  neutralDark: '#212121',\r\n  neutralPrimary: '#333333',\r\n  neutralPrimaryAlt: '#3c3c3c',\r\n  neutralSecondary: '#666666',\r\n  neutralSecondaryAlt: '#767676',\r\n  neutralTertiary: '#a6a6a6',\r\n  neutralTertiaryAlt: '#c8c8c8',\r\n  neutralQuaternary: '#d0d0d0',\r\n  neutralQuaternaryAlt: '#dadada',\r\n  neutralLight: '#eaeaea',\r\n  neutralLighter: '#f4f4f4',\r\n  neutralLighterAlt: '#f8f8f8',\r\n  accent: '#0078d4',\r\n  white: '#ffffff',\r\n  whiteTranslucent40: 'rgba(255,255,255,.4)',\r\n  yellowDark: '#d29200',\r\n  yellow: '#ffb900',\r\n  yellowLight: '#fff100',\r\n  orange: '#d83b01',\r\n  orangeLight: '#ea4300',\r\n  orangeLighter: '#ff8c00',\r\n  redDark: '#a80000',\r\n  red: '#e81123',\r\n  magentaDark: '#5c005c',\r\n  magenta: '#b4009e',\r\n  magentaLight: '#e3008c',\r\n  purpleDark: '#32145a',\r\n  purple: '#5c2d91',\r\n  purpleLight: '#b4a0ff',\r\n  blueDark: '#002050',\r\n  blueMid: '#00188f',\r\n  blue: '#0078d4',\r\n  blueLight: '#00bcf2',\r\n  tealDark: '#004b50',\r\n  teal: '#008272',\r\n  tealLight: '#00b294',\r\n  greenDark: '#004b1c',\r\n  green: '#107c10',\r\n  greenLight: '#bad80a'\r\n};\r\n","import { IRawStyle, IFontWeight } from '@uifabric/merge-styles';\r\nimport { IFontStyles } from '../interfaces/index';\r\n\r\n// Fallback fonts, if specified system or web fonts are unavailable.\r\nconst FontFamilyFallbacks = `'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif`;\r\n\r\n// Font face names to be registered.\r\nexport namespace LocalizedFontNames {\r\n  export const Arabic = 'Segoe UI Web (Arabic)';\r\n  export const Cyrillic = 'Segoe UI Web (Cyrillic)';\r\n  export const EastEuropean = 'Segoe UI Web (East European)';\r\n  export const Greek = 'Segoe UI Web (Greek)';\r\n  export const Hebrew = 'Segoe UI Web (Hebrew)';\r\n  export const Thai = 'Leelawadee UI Web';\r\n  export const Vietnamese = 'Segoe UI Web (Vietnamese)';\r\n  export const WestEuropean = 'Segoe UI Web (West European)';\r\n  export const Selawik = 'Selawik Web';\r\n}\r\n\r\n// Font families with fallbacks, for the general regions.\r\nexport namespace LocalizedFontFamilies {\r\n  export const Arabic = `'${LocalizedFontNames.Arabic}'`;\r\n  export const ChineseSimplified = `'Microsoft Yahei UI', Verdana, Simsun`;\r\n  export const ChineseTraditional = `'Microsoft Jhenghei UI', Pmingliu`;\r\n  export const Cyrillic = `'${LocalizedFontNames.Cyrillic}'`;\r\n  export const EastEuropean = `'${LocalizedFontNames.EastEuropean}'`;\r\n  export const Greek = `'${LocalizedFontNames.Greek}'`;\r\n  export const Hebrew = `'${LocalizedFontNames.Hebrew}'`;\r\n  export const Hindi = `'Nirmala UI'`;\r\n  export const Japanese = `'Yu Gothic UI', 'Meiryo UI', Meiryo, 'MS Pgothic', Osaka`;\r\n  export const Korean = `'Malgun Gothic', Gulim`;\r\n  export const Selawik = `'${LocalizedFontNames.Selawik}'`;\r\n  export const Thai = `'Leelawadee UI Web', 'Kmer UI'`;\r\n  export const Vietnamese = `'${LocalizedFontNames.Vietnamese}'`;\r\n  export const WestEuropean = `'${LocalizedFontNames.WestEuropean}'`;\r\n}\r\n\r\n// By default, we favor system fonts for the default.\r\n// All localized fonts use a web font and never use the system font.\r\nconst defaultFontFamily = `'Segoe UI', '${LocalizedFontNames.WestEuropean}'`;\r\n\r\n// Mapping of language prefix to to font family.\r\nconst LanguageToFontMap = {\r\n  ar: LocalizedFontFamilies.Arabic,\r\n  bg: LocalizedFontFamilies.Cyrillic,\r\n  cs: LocalizedFontFamilies.EastEuropean,\r\n  el: LocalizedFontFamilies.Greek,\r\n  et: LocalizedFontFamilies.EastEuropean,\r\n  he: LocalizedFontFamilies.Hebrew,\r\n  hi: LocalizedFontFamilies.Hindi,\r\n  hr: LocalizedFontFamilies.EastEuropean,\r\n  hu: LocalizedFontFamilies.EastEuropean,\r\n  ja: LocalizedFontFamilies.Japanese,\r\n  kk: LocalizedFontFamilies.EastEuropean,\r\n  ko: LocalizedFontFamilies.Korean,\r\n  lt: LocalizedFontFamilies.EastEuropean,\r\n  lv: LocalizedFontFamilies.EastEuropean,\r\n  pl: LocalizedFontFamilies.EastEuropean,\r\n  ru: LocalizedFontFamilies.Cyrillic,\r\n  sk: LocalizedFontFamilies.EastEuropean,\r\n  'sr-latn': LocalizedFontFamilies.EastEuropean,\r\n  th: LocalizedFontFamilies.Thai,\r\n  tr: LocalizedFontFamilies.EastEuropean,\r\n  uk: LocalizedFontFamilies.Cyrillic,\r\n  vi: LocalizedFontFamilies.Vietnamese,\r\n  'zh-hans': LocalizedFontFamilies.ChineseSimplified,\r\n  'zh-hant': LocalizedFontFamilies.ChineseTraditional\r\n};\r\n\r\n// Standard font sizes.\r\nexport namespace FontSizes {\r\n  export const mini: string = '10px';\r\n  export const xSmall: string = '11px';\r\n  export const small: string = '12px';\r\n  export const smallPlus: string = '13px';\r\n  export const medium: string = '14px';\r\n  export const mediumPlus: string = '15px';\r\n  export const icon: string = '16px';\r\n  export const large: string = '17px';\r\n  export const xLarge: string = '21px';\r\n  export const xxLarge: string = '28px';\r\n  export const superLarge: string = '42px';\r\n  export const mega: string = '72px';\r\n}\r\n\r\n// Standard font weights.\r\nexport namespace FontWeights {\r\n  export const light: IFontWeight = 100;\r\n  export const semilight: IFontWeight = 300;\r\n  export const regular: IFontWeight = 400;\r\n  export const semibold: IFontWeight = 600;\r\n  export const bold: IFontWeight = 700;\r\n}\r\n\r\n// Standard Icon Sizes.\r\nexport namespace IconFontSizes {\r\n  export const xSmall: string = '10px';\r\n  export const small: string = '12px';\r\n  export const medium: string = '16px';\r\n  export const large: string = '20px';\r\n}\r\n\r\nfunction _fontFamilyWithFallbacks(fontFamily: string): string {\r\n  return `${fontFamily}, ${FontFamilyFallbacks}`;\r\n}\r\n\r\nexport function createFontStyles(localeCode: string | null): IFontStyles {\r\n  const localizedFont = _getLocalizedFontFamily(localeCode);\r\n  let fontFamilyWithFallback = _fontFamilyWithFallbacks(localizedFont);\r\n  let semilightFontFamilyWithFallback = fontFamilyWithFallback;\r\n\r\n  // Chrome has a bug where it does not render Segoe UI Semilight correctly, so we force the webfont to be used in that case\r\n  if (localizedFont === defaultFontFamily) {\r\n    semilightFontFamilyWithFallback = _fontFamilyWithFallbacks(LocalizedFontFamilies.WestEuropean);\r\n  }\r\n\r\n  const fontStyles = {\r\n    tiny: _createFont(FontSizes.mini, FontWeights.semibold, fontFamilyWithFallback),\r\n    xSmall: _createFont(FontSizes.xSmall, FontWeights.regular, fontFamilyWithFallback),\r\n    small: _createFont(FontSizes.small, FontWeights.regular, fontFamilyWithFallback),\r\n    smallPlus: _createFont(FontSizes.smallPlus, FontWeights.regular, fontFamilyWithFallback),\r\n    medium: _createFont(FontSizes.medium, FontWeights.regular, fontFamilyWithFallback),\r\n    mediumPlus: _createFont(FontSizes.mediumPlus, FontWeights.regular, fontFamilyWithFallback),\r\n    large: _createFont(FontSizes.large, FontWeights.semilight, semilightFontFamilyWithFallback),\r\n    xLarge: _createFont(FontSizes.xLarge, FontWeights.light, fontFamilyWithFallback),\r\n    xxLarge: _createFont(FontSizes.xxLarge, FontWeights.light, fontFamilyWithFallback),\r\n    superLarge: _createFont(FontSizes.superLarge, FontWeights.light, fontFamilyWithFallback),\r\n    mega: _createFont(FontSizes.mega, FontWeights.light, fontFamilyWithFallback)\r\n  };\r\n\r\n  return fontStyles;\r\n}\r\n\r\n/**\r\n * If there is a localized font for this language, return that. Returns undefined if there is no localized font for that language.\r\n */\r\nfunction _getLocalizedFontFamily(language: string | null): string {\r\n  for (let lang in LanguageToFontMap) {\r\n    if (LanguageToFontMap.hasOwnProperty(lang) && language && lang.indexOf(language) === 0) {\r\n      // tslint:disable-next-line:no-any\r\n      return (LanguageToFontMap as any)[lang];\r\n    }\r\n  }\r\n\r\n  return defaultFontFamily;\r\n}\r\n\r\nfunction _createFont(size: string, weight: IFontWeight, fontFamily: string): IRawStyle {\r\n  return {\r\n    fontFamily: fontFamily,\r\n    MozOsxFontSmoothing: 'grayscale',\r\n    WebkitFontSmoothing: 'antialiased',\r\n    fontSize: size,\r\n    fontWeight: weight\r\n  };\r\n}\r\n","import { fontFace, IFontWeight } from '@uifabric/merge-styles';\r\nimport { IFontStyles } from '../interfaces/index';\r\nimport { createFontStyles, FontWeights, LocalizedFontFamilies, LocalizedFontNames } from './fonts';\r\nimport { getLanguage } from '@uifabric/utilities';\r\nimport { IFabricConfig } from '../interfaces/IFabricConfig';\r\n\r\n// Default urls.\r\nconst DefaultBaseUrl = 'https://static2.sharepointonline.com/files/fabric/assets';\r\n\r\n// Standard font styling.\r\nexport const DefaultFontStyles: IFontStyles = createFontStyles(getLanguage());\r\n\r\nfunction _registerFontFace(fontFamily: string, url: string, fontWeight?: IFontWeight, localFontName?: string): void {\r\n  fontFamily = `'${fontFamily}'`;\r\n\r\n  const localFontSrc = localFontName !== undefined ? `local('${localFontName}'),` : '';\r\n\r\n  fontFace({\r\n    fontFamily,\r\n    src: localFontSrc + `url('${url}.woff2') format('woff2'),` + `url('${url}.woff') format('woff')`,\r\n    fontWeight,\r\n    fontStyle: 'normal'\r\n  });\r\n}\r\n\r\nfunction _registerFontFaceSet(\r\n  baseUrl: string,\r\n  fontFamily: string,\r\n  cdnFolder: string,\r\n  cdnFontName: string = 'segoeui',\r\n  localFontName?: string\r\n): void {\r\n  const urlBase = `${baseUrl}/${cdnFolder}/${cdnFontName}`;\r\n\r\n  _registerFontFace(fontFamily, urlBase + '-light', FontWeights.light, localFontName && localFontName + ' Light');\r\n  _registerFontFace(fontFamily, urlBase + '-semilight', FontWeights.semilight, localFontName && localFontName + ' SemiLight');\r\n  _registerFontFace(fontFamily, urlBase + '-regular', FontWeights.regular, localFontName);\r\n  _registerFontFace(fontFamily, urlBase + '-semibold', FontWeights.semibold, localFontName && localFontName + ' SemiBold');\r\n}\r\n\r\nexport function registerDefaultFontFaces(baseUrl: string): void {\r\n  if (baseUrl) {\r\n    const fontUrl = `${baseUrl}/fonts`;\r\n\r\n    // Produce @font-face definitions for all supported web fonts.\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.Thai, 'leelawadeeui-thai', 'leelawadeeui');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.Arabic, 'segoeui-arabic');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.Cyrillic, 'segoeui-cyrillic');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.EastEuropean, 'segoeui-easteuropean');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.Greek, 'segoeui-greek');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.Hebrew, 'segoeui-hebrew');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.Vietnamese, 'segoeui-vietnamese');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontNames.WestEuropean, 'segoeui-westeuropean', 'segoeui', 'Segoe UI');\r\n    _registerFontFaceSet(fontUrl, LocalizedFontFamilies.Selawik, 'selawik', 'selawik');\r\n\r\n    // Leelawadee UI (Thai) does not have a 'light' weight, so we override\r\n    // the font-face generated above to use the 'semilight' weight instead.\r\n    _registerFontFace('Leelawadee UI Web', `${fontUrl}/leelawadeeui-thai/leelawadeeui-semilight`, FontWeights.light);\r\n\r\n    // Leelawadee UI (Thai) does not have a 'semibold' weight, so we override\r\n    // the font-face generated above to use the 'bold' weight instead.\r\n    _registerFontFace('Leelawadee UI Web', `${fontUrl}/leelawadeeui-thai/leelawadeeui-bold`, FontWeights.semibold);\r\n  }\r\n}\r\n\r\n/**\r\n * Reads the fontBaseUrl from window.FabricConfig.fontBaseUrl or falls back to a default.\r\n */\r\nfunction _getFontBaseUrl(): string {\r\n  let win = typeof window !== 'undefined' ? window : undefined;\r\n\r\n  // tslint:disable-next-line:no-string-literal no-any\r\n  let fabricConfig: IFabricConfig = win ? win['FabricConfig'] : undefined;\r\n\r\n  return fabricConfig && fabricConfig.fontBaseUrl !== undefined ? fabricConfig.fontBaseUrl : DefaultBaseUrl;\r\n}\r\n\r\n/**\r\n * Register the font faces.\r\n */\r\nregisterDefaultFontFaces(_getFontBaseUrl());\r\n","/**\r\n * Fetches an item from local storage without throwing an exception\r\n * @param key The key of the item to fetch from local storage\r\n */\r\nexport function getItem(key: string): string | null {\r\n  let result = null;\r\n  try {\r\n    result = window.localStorage.getItem(key);\r\n  } catch (e) {\r\n    /* Eat the exception */\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * Inserts an item into local storage without throwing an exception\r\n * @param key The key of the item to add to local storage\r\n * @param data The data to put into local storage\r\n */\r\nexport function setItem(key: string, data: string): void {\r\n  try {\r\n    window.localStorage.setItem(key, data);\r\n  } catch (e) {\r\n    /* Eat the exception */\r\n  }\r\n}\r\n","export const HighContrastSelector = '@media screen and (-ms-high-contrast: active)';\r\nexport const HighContrastSelectorWhite = '@media screen and (-ms-high-contrast: black-on-white)';\r\nexport const HighContrastSelectorBlack = '@media screen and (-ms-high-contrast: white-on-black)';\r\n\r\nexport const ScreenWidthMinSmall = 320;\r\nexport const ScreenWidthMinMedium = 480;\r\nexport const ScreenWidthMinLarge = 640;\r\nexport const ScreenWidthMinXLarge = 1024;\r\nexport const ScreenWidthMinXXLarge = 1366;\r\nexport const ScreenWidthMinXXXLarge = 1920;\r\nexport const ScreenWidthMaxSmall = ScreenWidthMinMedium - 1;\r\nexport const ScreenWidthMaxMedium = ScreenWidthMinLarge - 1;\r\nexport const ScreenWidthMaxLarge = ScreenWidthMinXLarge - 1;\r\nexport const ScreenWidthMaxXLarge = ScreenWidthMinXXLarge - 1;\r\nexport const ScreenWidthMaxXXLarge = ScreenWidthMinXXXLarge - 1;\r\n\r\nexport const ScreenWidthMinUhfMobile = 768;\r\n\r\nexport function getScreenSelector(min: number, max: number): string {\r\n  return `@media only screen and (min-width: ${min}px) and (max-width: ${max}px)`;\r\n}\r\n","export namespace ZIndexes {\r\n  export const Nav: number = 1;\r\n  export const ScrollablePane: number = 1;\r\n  export const FocusStyle: number = 1;\r\n  export const Coachmark: number = 1000;\r\n  export const Layer: number = 1000000;\r\n  export const KeytipLayer: number = 1000001;\r\n}\r\n","import { IRawStyle } from '@uifabric/merge-styles';\r\nimport { ITheme } from '../interfaces/index';\r\nimport { HighContrastSelector } from './CommonStyles';\r\nimport { IsFocusVisibleClassName } from '@uifabric/utilities';\r\nimport { ZIndexes } from './zIndexes';\r\n\r\n/**\r\n * Generates a focus style which can be used to define an :after focus border.\r\n *\r\n * @param theme - The theme object to use.\r\n * @param inset - The number of pixels to inset the border.\r\n * @param position - The positioning applied to the container. Must\r\n * be 'relative' or 'absolute' so that the focus border can live around it.\r\n * @param highContrastStyle - Style for high contrast mode.\r\n * @param borderColor - Color of the border.\r\n * @param outlineColor - Color of the outline.\r\n * @param isFocusedOnly - If the styles should apply on focus or not.\r\n * @returns The style object.\r\n */\r\nexport function getFocusStyle(\r\n  theme: ITheme,\r\n  inset: number = 0,\r\n  position: 'relative' | 'absolute' = 'relative',\r\n  highContrastStyle: IRawStyle | undefined = undefined,\r\n  borderColor: string = theme.palette.white,\r\n  outlineColor: string = theme.palette.neutralSecondary,\r\n  isFocusedOnly: boolean = true\r\n): IRawStyle {\r\n  return {\r\n    outline: 'transparent',\r\n    position,\r\n\r\n    selectors: {\r\n      '::-moz-focus-inner': {\r\n        border: '0'\r\n      },\r\n\r\n      [`.${IsFocusVisibleClassName} &${isFocusedOnly ? ':focus' : ''}:after`]: {\r\n        content: '\"\"',\r\n        position: 'absolute',\r\n        left: inset + 1,\r\n        top: inset + 1,\r\n        bottom: inset + 1,\r\n        right: inset + 1,\r\n        border: '1px solid ' + borderColor,\r\n        outline: '1px solid ' + outlineColor,\r\n        zIndex: ZIndexes.FocusStyle,\r\n        selectors: {\r\n          [HighContrastSelector]: highContrastStyle\r\n        }\r\n      }\r\n    }\r\n  };\r\n}\r\n\r\n/**\r\n * Generates style to clear browser specific focus styles.\r\n */\r\nexport function focusClear(): IRawStyle {\r\n  return {\r\n    selectors: {\r\n      '&::-moz-focus-inner': {\r\n        // Clear the focus border in Firefox. Reference: http://stackoverflow.com/a/199319/1436671\r\n        border: 0\r\n      },\r\n      '&': {\r\n        // Clear browser specific focus styles and use transparent as placeholder for focus style\r\n        outline: 'transparent'\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { IRawStyle } from '@uifabric/merge-styles';\r\n\r\nexport const hiddenContentStyle: IRawStyle = {\r\n  position: 'absolute',\r\n  width: 1,\r\n  height: 1,\r\n  margin: -1,\r\n  padding: 0,\r\n  border: 0,\r\n  overflow: 'hidden'\r\n};\r\n","import { ITheme } from '../interfaces/index';\r\nimport { Stylesheet } from '@uifabric/merge-styles';\r\nimport { memoizeFunction } from '@uifabric/utilities';\r\n\r\nexport type GlobalClassNames<IStyles> = Record<keyof IStyles, string>;\r\n\r\n/**\r\n * Internal memoized function which simply takes in the class map and the\r\n * disable boolean. These immutable values can be memoized.\r\n */\r\nconst _getGlobalClassNames = memoizeFunction(\r\n  <T>(classNames: GlobalClassNames<T>, disableGlobalClassNames?: boolean): Partial<GlobalClassNames<T>> => {\r\n    const styleSheet = Stylesheet.getInstance();\r\n\r\n    if (disableGlobalClassNames) {\r\n      // disable global classnames\r\n      return Object.keys(classNames).reduce((acc: {}, className: string) => {\r\n        acc[className] = styleSheet.getClassName(classNames[className]);\r\n        return acc;\r\n      }, {});\r\n    }\r\n\r\n    // use global classnames\r\n    return classNames;\r\n  }\r\n);\r\n\r\n/**\r\n * Checks for the `disableGlobalClassNames` property on the `theme` to determine if it should return `classNames`\r\n * Note that calls to this function are memoized.\r\n *\r\n * @param classNames - The collection of global class names that apply when the flag is false. Make sure to pass in\r\n * the same instance on each call to benefit from memoization.\r\n * @param theme - The theme to check the flag on\r\n * @param disableGlobalClassNames - Optional. Explicitly opt in/out of disabling global classnames. Defaults to false.\r\n */\r\nexport function getGlobalClassNames<T>(\r\n  classNames: GlobalClassNames<T>,\r\n  theme: ITheme,\r\n  disableGlobalClassNames?: boolean\r\n): Partial<GlobalClassNames<T>> {\r\n  return _getGlobalClassNames(classNames, disableGlobalClassNames !== undefined ? disableGlobalClassNames : theme.disableGlobalClassNames);\r\n}\r\n","import { ISpacing } from '../interfaces/index';\r\n\r\nexport const DefaultSpacing: ISpacing = {\r\n  s2: '4px',\r\n  s1: '8px',\r\n  m: '16px',\r\n  l1: '20px',\r\n  l2: '32px'\r\n};\r\n","/**\r\n * An IThemingInstruction can specify a rawString to be preserved or a theme slot and a default value\r\n * to use if that slot is not specified by the theme.\r\n */\r\n\r\n// Declaring a global here in case that the execution environment is Node.js (without importing the\r\n// entire node.js d.ts for now)\r\ndeclare var global: any; // tslint:disable-line:no-any\r\n\r\nexport interface IThemingInstruction {\r\n  theme?: string;\r\n  defaultValue?: string;\r\n  rawString?: string;\r\n}\r\n\r\nexport type ThemableArray = Array<IThemingInstruction>;\r\n\r\nexport interface ITheme {\r\n  [key: string]: string;\r\n}\r\n\r\ninterface IStyleSheet {\r\n  cssText: string;\r\n}\r\n\r\ninterface IExtendedHtmlStyleElement extends HTMLStyleElement {\r\n  styleSheet: IStyleSheet;\r\n}\r\n\r\n/**\r\n * Performance Measurement of loading styles\r\n */\r\ninterface IMeasurement {\r\n  /**\r\n   * Count of style element injected, which is the slow operation in IE\r\n   */\r\n  count: number;\r\n  /**\r\n   * Total duration of all loadStyles exections\r\n   */\r\n  duration: number;\r\n}\r\n\r\ninterface IRunState {\r\n  mode: Mode;\r\n  buffer: ThemableArray[];\r\n  flushTimer: number;\r\n}\r\n\r\ninterface IThemeState {\r\n  theme: ITheme | undefined;\r\n  lastStyleElement: IExtendedHtmlStyleElement;\r\n  registeredStyles: IStyleRecord[];  // records of already registered non-themable styles\r\n  registeredThemableStyles: IStyleRecord[];  // records of already registered themable styles\r\n  loadStyles: ((processedStyles: string, rawStyles?: string | ThemableArray) => void) | undefined;\r\n  perf: IMeasurement;\r\n  runState: IRunState;\r\n}\r\n\r\ninterface IStyleRecord {\r\n  styleElement: Element;\r\n  themableStyle: ThemableArray;\r\n}\r\n\r\n/**\r\n * object returned from resolveThemableArray function\r\n */\r\ninterface IThemableArrayResolveResult {\r\n  /** this string is the processed styles in string */\r\n  styleString: string;\r\n\r\n  /** this boolean indicates if this style array is themable */\r\n  themable: boolean;\r\n}\r\n\r\n/**\r\n * In sync mode, styles are registered as style elements synchronously with loadStyles() call.\r\n * In async mode, styles are buffered and registered as batch in async timer for performance purpose.\r\n */\r\nexport const enum Mode {\r\n  sync,\r\n  async\r\n}\r\n\r\n/**\r\n * Themable styles and non-themable styles are tracked separately\r\n * Specify ClearStyleOptions when calling clearStyles API to specify which group of registered styles should be cleared.\r\n */\r\nexport const enum ClearStyleOptions {\r\n  /** only themable styles will be cleared */\r\n  onlyThemable = 1,\r\n  /** only non-themable styles will be cleared */\r\n  onlyNonThemable = 2,\r\n  /** both themable and non-themable styles will be cleared */\r\n  all = 3\r\n}\r\n\r\n// IE needs to inject styles using cssText. However, we need to evaluate this lazily, so this\r\n// value will initialize as undefined, and later will be set once on first loadStyles injection.\r\nlet _injectStylesWithCssText: boolean;\r\n\r\n// Store the theming state in __themeState__ global scope for reuse in the case of duplicate\r\n// load-themed-styles hosted on the page.\r\nconst _root: any = (typeof window === 'undefined') ? global : window; // tslint:disable-line:no-any\r\n\r\nconst _themeState: IThemeState = initializeThemeState();\r\n\r\n/**\r\n * Matches theming tokens. For example, \"[theme: themeSlotName, default: #FFF]\" (including the quotes).\r\n */\r\n// tslint:disable-next-line:max-line-length\r\nconst _themeTokenRegex: RegExp = /[\\'\\\"]\\[theme:\\s*(\\w+)\\s*(?:\\,\\s*default:\\s*([\\\\\"\\']?[\\.\\,\\(\\)\\#\\-\\s\\w]*[\\.\\,\\(\\)\\#\\-\\w][\\\"\\']?))?\\s*\\][\\'\\\"]/g;\r\n\r\n/** Maximum style text length, for supporting IE style restrictions. */\r\nconst MAX_STYLE_CONTENT_SIZE: number = 10000;\r\n\r\nconst now: () => number =\r\n  () => (typeof performance !== 'undefined' && !!performance.now) ? performance.now() : Date.now();\r\n\r\nfunction measure(func: () => void): void {\r\n  const start: number = now();\r\n  func();\r\n  const end: number = now();\r\n  _themeState.perf.duration += end - start;\r\n}\r\n\r\n/**\r\n * initialize global state object\r\n */\r\nfunction initializeThemeState(): IThemeState {\r\n  let state: IThemeState = _root.__themeState__ || {\r\n    theme: undefined,\r\n    lastStyleElement: undefined,\r\n    registeredStyles: []\r\n  };\r\n\r\n  if (!state.runState) {\r\n    state = {\r\n      ...(state),\r\n      perf: {\r\n        count: 0,\r\n        duration: 0\r\n      },\r\n      runState: {\r\n        flushTimer: 0,\r\n        mode: Mode.sync,\r\n        buffer: []\r\n      }\r\n    };\r\n  }\r\n  if (!state.registeredThemableStyles) {\r\n    state = {\r\n      ...(state),\r\n      registeredThemableStyles: []\r\n    };\r\n  }\r\n  _root.__themeState__ = state;\r\n  return state;\r\n}\r\n\r\n/**\r\n * Loads a set of style text. If it is registered too early, we will register it when the window.load\r\n * event is fired.\r\n * @param {string | ThemableArray} styles Themable style text to register.\r\n * @param {boolean} loadAsync When true, always load styles in async mode, irrespective of current sync mode.\r\n */\r\nexport function loadStyles(styles: string | ThemableArray, loadAsync: boolean = false): void {\r\n  measure(() => {\r\n    const styleParts: ThemableArray = Array.isArray(styles) ? styles : splitStyles(styles);\r\n    if (_injectStylesWithCssText === undefined) {\r\n      _injectStylesWithCssText = shouldUseCssText();\r\n    }\r\n    const {\r\n      mode,\r\n      buffer,\r\n      flushTimer\r\n    } = _themeState.runState;\r\n    if (loadAsync || mode === Mode.async) {\r\n      buffer.push(styleParts);\r\n      if (!flushTimer) {\r\n        _themeState.runState.flushTimer = asyncLoadStyles();\r\n      }\r\n    } else {\r\n      applyThemableStyles(styleParts);\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * Allows for customizable loadStyles logic. e.g. for server side rendering application\r\n * @param {(processedStyles: string, rawStyles?: string | ThemableArray) => void}\r\n * a loadStyles callback that gets called when styles are loaded or reloaded\r\n */\r\nexport function configureLoadStyles(\r\n  loadStylesFn: ((processedStyles: string, rawStyles?: string | ThemableArray) => void) | undefined\r\n): void {\r\n  _themeState.loadStyles = loadStylesFn;\r\n}\r\n\r\n/**\r\n * Configure run mode of load-themable-styles\r\n * @param mode load-themable-styles run mode, async or sync\r\n */\r\nexport function configureRunMode(mode: Mode): void {\r\n  _themeState.runState.mode = mode;\r\n}\r\n\r\n/**\r\n * external code can call flush to synchronously force processing of currently buffered styles\r\n */\r\nexport function flush(): void {\r\n  measure(() => {\r\n    const styleArrays: ThemableArray[] = _themeState.runState.buffer.slice();\r\n    _themeState.runState.buffer = [];\r\n    const mergedStyleArray: ThemableArray = [].concat.apply([], styleArrays);\r\n    if (mergedStyleArray.length > 0) {\r\n      applyThemableStyles(mergedStyleArray);\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * register async loadStyles\r\n */\r\nfunction asyncLoadStyles(): number {\r\n  return setTimeout(() => {\r\n    _themeState.runState.flushTimer = 0;\r\n    flush();\r\n  }, 0);\r\n}\r\n\r\n/**\r\n * Loads a set of style text. If it is registered too early, we will register it when the window.load event\r\n * is fired.\r\n * @param {string} styleText Style to register.\r\n * @param {IStyleRecord} styleRecord Existing style record to re-apply.\r\n */\r\nfunction applyThemableStyles(stylesArray: ThemableArray, styleRecord?: IStyleRecord): void {\r\n  if (_themeState.loadStyles) {\r\n    _themeState.loadStyles(resolveThemableArray(stylesArray).styleString, stylesArray);\r\n  } else {\r\n    _injectStylesWithCssText ?\r\n      registerStylesIE(stylesArray, styleRecord) :\r\n      registerStyles(stylesArray);\r\n  }\r\n}\r\n\r\n/**\r\n * Registers a set theme tokens to find and replace. If styles were already registered, they will be\r\n * replaced.\r\n * @param {theme} theme JSON object of theme tokens to values.\r\n */\r\nexport function loadTheme(theme: ITheme | undefined): void {\r\n  _themeState.theme = theme;\r\n\r\n  // reload styles.\r\n  reloadStyles();\r\n}\r\n\r\n/**\r\n * Clear already registered style elements and style records in theme_State object\r\n * @param option - specify which group of registered styles should be cleared.\r\n * Default to be both themable and non-themable styles will be cleared\r\n */\r\nexport function clearStyles(option: ClearStyleOptions = ClearStyleOptions.all): void {\r\n  if (option === ClearStyleOptions.all || option === ClearStyleOptions.onlyNonThemable) {\r\n    clearStylesInternal(_themeState.registeredStyles);\r\n    _themeState.registeredStyles = [];\r\n  }\r\n  if (option === ClearStyleOptions.all || option === ClearStyleOptions.onlyThemable) {\r\n    clearStylesInternal(_themeState.registeredThemableStyles);\r\n    _themeState.registeredThemableStyles = [];\r\n  }\r\n}\r\n\r\nfunction clearStylesInternal(records: IStyleRecord[]): void {\r\n  records.forEach((styleRecord: IStyleRecord) => {\r\n    const styleElement: HTMLStyleElement = styleRecord && styleRecord.styleElement as HTMLStyleElement;\r\n    if (styleElement && styleElement.parentElement) {\r\n      styleElement.parentElement.removeChild(styleElement);\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * Reloads styles.\r\n */\r\nfunction reloadStyles(): void {\r\n  if (_themeState.theme) {\r\n    const themableStyles: ThemableArray[] = [];\r\n    for (const styleRecord of _themeState.registeredThemableStyles) {\r\n      themableStyles.push(styleRecord.themableStyle);\r\n    }\r\n    if (themableStyles.length > 0) {\r\n      clearStyles(ClearStyleOptions.onlyThemable);\r\n      applyThemableStyles([].concat.apply([], themableStyles));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Find theme tokens and replaces them with provided theme values.\r\n * @param {string} styles Tokenized styles to fix.\r\n */\r\nexport function detokenize(styles: string | undefined): string | undefined {\r\n  if (styles) {\r\n    styles = resolveThemableArray(splitStyles(styles)).styleString;\r\n  }\r\n\r\n  return styles;\r\n}\r\n\r\n/**\r\n * Resolves ThemingInstruction objects in an array and joins the result into a string.\r\n * @param {ThemableArray} splitStyleArray ThemableArray to resolve and join.\r\n */\r\nfunction resolveThemableArray(splitStyleArray: ThemableArray): IThemableArrayResolveResult {\r\n  const { theme }: IThemeState = _themeState;\r\n  let themable: boolean = false;\r\n  // Resolve the array of theming instructions to an array of strings.\r\n  // Then join the array to produce the final CSS string.\r\n  const resolvedArray: (string | undefined)[] = (splitStyleArray || []).map((currentValue: IThemingInstruction) => {\r\n    const themeSlot: string | undefined = currentValue.theme;\r\n    if (themeSlot) {\r\n      themable = true;\r\n      // A theming annotation. Resolve it.\r\n      const themedValue: string | undefined = theme ? theme[themeSlot] : undefined;\r\n      const defaultValue: string = currentValue.defaultValue || 'inherit';\r\n\r\n      // Warn to console if we hit an unthemed value even when themes are provided, but only if \"DEBUG\" is true.\r\n      // Allow the themedValue to be undefined to explicitly request the default value.\r\n      if (theme && !themedValue && console && !(themeSlot in theme) && typeof DEBUG !== 'undefined' && DEBUG) {\r\n        console.warn(`Theming value not provided for \"${themeSlot}\". Falling back to \"${defaultValue}\".`);\r\n      }\r\n\r\n      return themedValue || defaultValue;\r\n    } else {\r\n      // A non-themable string. Preserve it.\r\n      return currentValue.rawString;\r\n    }\r\n  });\r\n\r\n  return {\r\n    styleString: resolvedArray.join(''),\r\n    themable: themable\r\n  };\r\n}\r\n\r\n/**\r\n * Split tokenized CSS into an array of strings and theme specification objects\r\n * @param {string} styles Tokenized styles to split.\r\n */\r\nexport function splitStyles(styles: string): ThemableArray {\r\n  const result: ThemableArray = [];\r\n  if (styles) {\r\n    let pos: number = 0; // Current position in styles.\r\n    let tokenMatch: RegExpExecArray | null; // tslint:disable-line:no-null-keyword\r\n    while (tokenMatch = _themeTokenRegex.exec(styles)) {\r\n      const matchIndex: number = tokenMatch.index;\r\n      if (matchIndex > pos) {\r\n        result.push({\r\n          rawString: styles.substring(pos, matchIndex)\r\n        });\r\n      }\r\n\r\n      result.push({\r\n        theme: tokenMatch[1],\r\n        defaultValue: tokenMatch[2] // May be undefined\r\n      });\r\n\r\n      // index of the first character after the current match\r\n      pos = _themeTokenRegex.lastIndex;\r\n    }\r\n\r\n    // Push the rest of the string after the last match.\r\n    result.push({\r\n      rawString: styles.substring(pos)\r\n    });\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * Registers a set of style text. If it is registered too early, we will register it when the\r\n * window.load event is fired.\r\n * @param {ThemableArray} styleArray Array of IThemingInstruction objects to register.\r\n * @param {IStyleRecord} styleRecord May specify a style Element to update.\r\n */\r\nfunction registerStyles(styleArray: ThemableArray): void {\r\n  if (typeof document === 'undefined') {\r\n    return;\r\n  }\r\n  const head: HTMLHeadElement = document.getElementsByTagName('head')[0];\r\n  const styleElement: HTMLStyleElement = document.createElement('style');\r\n  const {\r\n    styleString,\r\n    themable\r\n  } = resolveThemableArray(styleArray);\r\n\r\n  styleElement.type = 'text/css';\r\n  styleElement.appendChild(document.createTextNode(styleString));\r\n  _themeState.perf.count++;\r\n  head.appendChild(styleElement);\r\n\r\n  const record: IStyleRecord = {\r\n    styleElement: styleElement,\r\n    themableStyle: styleArray\r\n  };\r\n\r\n  if (themable) {\r\n    _themeState.registeredThemableStyles.push(record);\r\n  } else {\r\n    _themeState.registeredStyles.push(record);\r\n  }\r\n}\r\n\r\n/**\r\n * Registers a set of style text, for IE 9 and below, which has a ~30 style element limit so we need\r\n * to register slightly differently.\r\n * @param {ThemableArray} styleArray Array of IThemingInstruction objects to register.\r\n * @param {IStyleRecord} styleRecord May specify a style Element to update.\r\n */\r\nfunction registerStylesIE(styleArray: ThemableArray, styleRecord?: IStyleRecord): void {\r\n  if (typeof document === 'undefined') {\r\n    return;\r\n  }\r\n  const head: HTMLHeadElement = document.getElementsByTagName('head')[0];\r\n  const registeredStyles: IStyleRecord[] = _themeState.registeredStyles;\r\n  let lastStyleElement: IExtendedHtmlStyleElement = _themeState.lastStyleElement;\r\n\r\n  const stylesheet: IStyleSheet | undefined = lastStyleElement ? lastStyleElement.styleSheet : undefined;\r\n  const lastStyleContent: string = stylesheet ? stylesheet.cssText : '';\r\n  let lastRegisteredStyle: IStyleRecord = registeredStyles[registeredStyles.length - 1];\r\n  const resolvedStyleText: string = resolveThemableArray(styleArray).styleString;\r\n\r\n  if (!lastStyleElement || (lastStyleContent.length + resolvedStyleText.length) > MAX_STYLE_CONTENT_SIZE) {\r\n    lastStyleElement = document.createElement('style') as IExtendedHtmlStyleElement;\r\n    lastStyleElement.type = 'text/css';\r\n\r\n    if (styleRecord) {\r\n      head.replaceChild(lastStyleElement, styleRecord.styleElement);\r\n      styleRecord.styleElement = lastStyleElement;\r\n    } else {\r\n      head.appendChild(lastStyleElement);\r\n    }\r\n\r\n    if (!styleRecord) {\r\n      lastRegisteredStyle = {\r\n        styleElement: lastStyleElement,\r\n        themableStyle: styleArray\r\n      };\r\n      registeredStyles.push(lastRegisteredStyle);\r\n    }\r\n  }\r\n\r\n  lastStyleElement.styleSheet.cssText += detokenize(resolvedStyleText);\r\n  Array.prototype.push.apply(lastRegisteredStyle.themableStyle, styleArray); // concat in-place\r\n\r\n  // Preserve the theme state.\r\n  _themeState.lastStyleElement = lastStyleElement;\r\n}\r\n\r\n/**\r\n * Checks to see if styleSheet exists as a property off of a style element.\r\n * This will determine if style registration should be done via cssText (<= IE9) or not\r\n */\r\nfunction shouldUseCssText(): boolean {\r\n  let useCSSText: boolean = false;\r\n\r\n  if (typeof document !== 'undefined') {\r\n    const emptyStyle: IExtendedHtmlStyleElement = document.createElement('style') as IExtendedHtmlStyleElement;\r\n\r\n    emptyStyle.type = 'text/css';\r\n    useCSSText = !!emptyStyle.styleSheet;\r\n  }\r\n\r\n  return useCSSText;\r\n}\r\n","import { IEffects } from '../interfaces/index';\r\n\r\nexport const DefaultEffects: IEffects = {\r\n  // commented values are the defaults for Fluent\r\n  elevation4: '0 0 5px 0 rgba(0,0,0,.4)', // '0 1.6px 3.6px 0 rgba(0, 0, 0, 0.132), 0 0.3px 0.9px 0 rgba(0, 0, 0, 0.108)'\r\n  elevation8: '0 0 5px 0 rgba(0,0,0,.4)', // '0 3.2px 7.2px 0 rgba(0, 0, 0, 0.132), 0 0.6px 1.8px 0 rgba(0, 0, 0, 0.108)'\r\n  elevation16: '0 0 5px 0 rgba(0,0,0,.4)', // '0 6.4px 14.4px 0 rgba(0, 0, 0, 0.132), 0 1.2px 3.6px 0 rgba(0, 0, 0, 0.108)'\r\n  elevation64: '0 0 5px 0 rgba(0,0,0,.4)', // '0 25.6px 57.6px 0 rgba(0, 0, 0, 0.22), 0 4.8px 14.4px 0 rgba(0, 0, 0, 0.18)'\r\n\r\n  roundedCorner2: '0px' // 2\r\n};\r\n","import { Customizations, merge } from '@uifabric/utilities';\r\nimport { IPalette, ISemanticColors, ITheme, IPartialTheme, IFontStyles } from '../interfaces/index';\r\nimport { DefaultFontStyles } from './DefaultFontStyles';\r\nimport { DefaultPalette } from './DefaultPalette';\r\nimport { DefaultSpacing } from './DefaultSpacing';\r\nimport { loadTheme as legacyLoadTheme } from '@microsoft/load-themed-styles';\r\nimport { DefaultEffects } from './DefaultEffects';\r\n\r\nlet _theme: ITheme = createTheme({\r\n  palette: DefaultPalette,\r\n  semanticColors: _makeSemanticColorsFromPalette(DefaultPalette, false, false),\r\n  fonts: DefaultFontStyles,\r\n  isInverted: false,\r\n  disableGlobalClassNames: false\r\n});\r\nlet _onThemeChangeCallbacks: Array<(theme: ITheme) => void> = [];\r\n\r\nexport const ThemeSettingName = 'theme';\r\n\r\nif (!Customizations.getSettings([ThemeSettingName]).theme) {\r\n  let win = typeof window !== 'undefined' ? window : undefined;\r\n\r\n  // tslint:disable:no-string-literal no-any\r\n  if (win && (win as any)['FabricConfig'] && (win as any)['FabricConfig'].theme) {\r\n    _theme = createTheme((win as any)['FabricConfig'].theme);\r\n  }\r\n  // tslint:enable:no-string-literal no-any\r\n\r\n  // Set the default theme.\r\n  Customizations.applySettings({ [ThemeSettingName]: _theme });\r\n}\r\n\r\n/**\r\n * Gets the theme object\r\n * @param depComments - Whether to include deprecated tags as comments for deprecated slots.\r\n */\r\nexport function getTheme(depComments: boolean = false): ITheme {\r\n  if (depComments === true) {\r\n    _theme = createTheme({}, depComments);\r\n  }\r\n  return _theme;\r\n}\r\n\r\n/**\r\n * Registers a callback that gets called whenever the theme changes.\r\n * This should only be used when the component cannot automatically get theme changes through its state.\r\n * This will not register duplicate callbacks.\r\n */\r\nexport function registerOnThemeChangeCallback(callback: (theme: ITheme) => void): void {\r\n  if (_onThemeChangeCallbacks.indexOf(callback) === -1) {\r\n    _onThemeChangeCallbacks.push(callback);\r\n  }\r\n}\r\n\r\n/**\r\n * See registerOnThemeChangeCallback().\r\n * Removes previously registered callbacks.\r\n */\r\nexport function removeOnThemeChangeCallback(callback: (theme: ITheme) => void): void {\r\n  const i = _onThemeChangeCallbacks.indexOf(callback);\r\n  if (i === -1) {\r\n    return;\r\n  }\r\n\r\n  _onThemeChangeCallbacks.splice(i, 1);\r\n}\r\n\r\n/**\r\n * Applies the theme, while filling in missing slots.\r\n * @param theme - Partial theme object.\r\n * @param depComments - Whether to include deprecated tags as comments for deprecated slots.\r\n */\r\nexport function loadTheme(theme: IPartialTheme, depComments: boolean = false): ITheme {\r\n  _theme = createTheme(theme, depComments);\r\n\r\n  // Invoke the legacy method of theming the page as well.\r\n  legacyLoadTheme({ ..._theme.palette, ..._theme.semanticColors, ..._loadFonts(_theme) });\r\n\r\n  Customizations.applySettings({ [ThemeSettingName]: _theme });\r\n\r\n  _onThemeChangeCallbacks.forEach((callback: (theme: ITheme) => void) => {\r\n    try {\r\n      callback(_theme);\r\n    } catch (e) {\r\n      // don't let a bad callback break everything else\r\n    }\r\n  });\r\n\r\n  return _theme;\r\n}\r\n\r\n/**\r\n * Loads font variables into a JSON object.\r\n * @param theme - The theme object\r\n */\r\nfunction _loadFonts(theme: ITheme): { [name: string]: string } {\r\n  const lines = {};\r\n\r\n  for (const fontName of Object.keys(theme.fonts)) {\r\n    const font = theme.fonts[fontName];\r\n    for (const propName of Object.keys(font)) {\r\n      const name = 'ms-font-' + fontName + '-' + propName;\r\n      lines[name] = `\"[theme:${name}, default: ${font[propName]}]\"`;\r\n    }\r\n  }\r\n  return lines;\r\n}\r\n\r\n/**\r\n * Creates a custom theme definition which can be used with the Customizer.\r\n * @param theme - Partial theme object.\r\n * @param depComments - Whether to include deprecated tags as comments for deprecated slots.\r\n */\r\nexport function createTheme(theme: IPartialTheme, depComments: boolean = false): ITheme {\r\n  let newPalette = { ...DefaultPalette, ...theme.palette };\r\n\r\n  if (!theme.palette || !theme.palette.accent) {\r\n    newPalette.accent = newPalette.themePrimary;\r\n  }\r\n\r\n  // mix in custom overrides with good slots first, since custom overrides might be used in fixing deprecated slots\r\n  let newSemanticColors = {\r\n    ..._makeSemanticColorsFromPalette(newPalette, !!theme.isInverted, depComments),\r\n    ...theme.semanticColors\r\n  };\r\n\r\n  let defaultFontStyles: IFontStyles = { ...DefaultFontStyles };\r\n\r\n  if (theme.defaultFontStyle) {\r\n    for (const fontStyle of Object.keys(defaultFontStyles)) {\r\n      defaultFontStyles[fontStyle] = merge({}, defaultFontStyles[fontStyle], theme.defaultFontStyle);\r\n    }\r\n  }\r\n\r\n  if (theme.fonts) {\r\n    for (const fontStyle of Object.keys(theme.fonts)) {\r\n      defaultFontStyles[fontStyle] = merge({}, defaultFontStyles[fontStyle], theme.fonts[fontStyle]);\r\n    }\r\n  }\r\n\r\n  return {\r\n    palette: newPalette,\r\n    fonts: {\r\n      ...defaultFontStyles\r\n    },\r\n    semanticColors: newSemanticColors,\r\n    isInverted: !!theme.isInverted,\r\n    disableGlobalClassNames: !!theme.disableGlobalClassNames,\r\n    spacing: {\r\n      ...DefaultSpacing,\r\n      ...theme.spacing\r\n    },\r\n    effects: {\r\n      ...DefaultEffects,\r\n      ...theme.effects\r\n    }\r\n  };\r\n}\r\n\r\n/**\r\n * Helper to pull a given property name from a given set of sources, in order, if available. Otherwise returns the property name.\r\n */\r\nfunction _expandFrom<TRetVal, TMapType>(propertyName: string | TRetVal | undefined, ...maps: TMapType[]): TRetVal {\r\n  if (propertyName) {\r\n    for (const map of maps) {\r\n      if (map[propertyName as string]) {\r\n        return map[propertyName as string];\r\n      }\r\n    }\r\n  }\r\n\r\n  return propertyName as TRetVal;\r\n}\r\n\r\n// Generates all the semantic slot colors based on the Fabric palette.\r\n// We'll use these as fallbacks for semantic slots that the passed in theme did not define.\r\nfunction _makeSemanticColorsFromPalette(p: IPalette, isInverted: boolean, depComments: boolean): ISemanticColors {\r\n  let toReturn: ISemanticColors = {\r\n    bodyBackground: p.white,\r\n    bodyStandoutBackground: p.neutralLighterAlt,\r\n    bodyFrameBackground: p.white,\r\n    bodyFrameDivider: p.neutralLight,\r\n    bodyText: p.neutralPrimary,\r\n    bodyTextChecked: p.black,\r\n    bodySubtext: p.neutralSecondary,\r\n    bodyDivider: p.neutralLight,\r\n\r\n    disabledBackground: p.neutralLighter,\r\n    disabledText: p.neutralTertiary,\r\n    disabledBodyText: p.neutralTertiary,\r\n    disabledSubtext: p.neutralQuaternary,\r\n    disabledBodySubtext: p.neutralTertiaryAlt,\r\n\r\n    focusBorder: p.neutralSecondary,\r\n    variantBorder: p.neutralLight,\r\n    variantBorderHovered: p.neutralTertiary,\r\n    defaultStateBackground: p.neutralLighterAlt,\r\n\r\n    errorText: !isInverted ? p.redDark : '#ff5f5f',\r\n    warningText: !isInverted ? '#333333' : '#ffffff',\r\n    errorBackground: !isInverted ? 'rgba(232, 17, 35, .2)' : 'rgba(232, 17, 35, .5)',\r\n    blockingBackground: !isInverted ? 'rgba(234, 67, 0, .2)' : 'rgba(234, 67, 0, .5)',\r\n    warningBackground: !isInverted ? 'rgba(255, 185, 0, .2)' : 'rgba(255, 251, 0, .6)',\r\n    warningHighlight: !isInverted ? '#ffb900' : '#fff100',\r\n    successBackground: !isInverted ? 'rgba(186, 216, 10, .2)' : 'rgba(186, 216, 10, .4)',\r\n\r\n    inputBorder: p.neutralTertiary,\r\n    inputBorderHovered: p.neutralPrimary,\r\n    inputBackground: p.white,\r\n    inputBackgroundChecked: p.themePrimary,\r\n    inputBackgroundCheckedHovered: p.themeDarkAlt,\r\n    inputForegroundChecked: p.white,\r\n    inputFocusBorderAlt: p.themePrimary,\r\n    smallInputBorder: p.neutralSecondary,\r\n    inputText: p.neutralPrimary,\r\n    inputTextHovered: p.neutralDark,\r\n    inputPlaceholderText: p.neutralSecondary,\r\n\r\n    buttonBackground: p.neutralLighter,\r\n    buttonBackgroundChecked: p.neutralTertiaryAlt,\r\n    buttonBackgroundHovered: p.neutralLight,\r\n    buttonBackgroundCheckedHovered: p.neutralLight,\r\n    buttonBackgroundPressed: p.neutralLight,\r\n    buttonBackgroundDisabled: p.neutralLighter,\r\n    buttonBorder: 'transparent',\r\n    buttonText: p.neutralPrimary,\r\n    buttonTextHovered: p.neutralDark,\r\n    buttonTextChecked: p.neutralDark,\r\n    buttonTextCheckedHovered: p.black,\r\n    buttonTextPressed: p.neutralDark,\r\n    buttonTextDisabled: p.neutralTertiary,\r\n    buttonBorderDisabled: 'transparent',\r\n\r\n    primaryButtonBackground: p.themePrimary,\r\n    primaryButtonBackgroundHovered: p.themeDarkAlt,\r\n    primaryButtonBackgroundPressed: p.themeDark,\r\n    primaryButtonBackgroundDisabled: p.neutralLighter,\r\n    primaryButtonBorder: 'transparent',\r\n    primaryButtonText: p.white,\r\n    primaryButtonTextHovered: p.white,\r\n    primaryButtonTextPressed: p.white,\r\n    primaryButtonTextDisabled: p.neutralQuaternary,\r\n\r\n    accentButtonBackground: p.accent,\r\n    accentButtonText: p.white,\r\n\r\n    menuBackground: p.white,\r\n    menuDivider: p.neutralTertiaryAlt,\r\n    menuIcon: p.themePrimary,\r\n    menuHeader: p.themePrimary,\r\n    menuItemBackgroundHovered: p.neutralLighter,\r\n    menuItemBackgroundPressed: p.neutralLight,\r\n    menuItemText: p.neutralPrimary,\r\n    menuItemTextHovered: p.neutralDark,\r\n\r\n    listBackground: p.white,\r\n    listText: p.neutralPrimary,\r\n    listItemBackgroundHovered: p.neutralLighter,\r\n    listItemBackgroundChecked: p.neutralLight,\r\n    listItemBackgroundCheckedHovered: p.neutralQuaternaryAlt,\r\n\r\n    listHeaderBackgroundHovered: p.neutralLighter,\r\n    listHeaderBackgroundPressed: p.neutralLight,\r\n\r\n    actionLink: p.neutralPrimary,\r\n    actionLinkHovered: p.neutralDark,\r\n    link: p.themePrimary,\r\n    linkHovered: p.themeDarker,\r\n\r\n    // Deprecated slots, second pass by _fixDeprecatedSlots() later for self-referential slots\r\n    listTextColor: '',\r\n    menuItemBackgroundChecked: p.neutralLight\r\n  };\r\n\r\n  return _fixDeprecatedSlots(toReturn, depComments!);\r\n}\r\n\r\nfunction _fixDeprecatedSlots(s: ISemanticColors, depComments: boolean): ISemanticColors {\r\n  // Add @deprecated tag as comment if enabled\r\n  let dep = '';\r\n  if (depComments === true) {\r\n    dep = ' /* @deprecated */';\r\n  }\r\n\r\n  s.listTextColor = s.listText + dep;\r\n  s.menuItemBackgroundChecked += dep;\r\n  return s;\r\n}\r\n","// This file mimics styles and mixins from _General.Mixins.scss\r\n\r\nimport { IRawStyle } from '@uifabric/merge-styles';\r\n\r\nexport const normalize: IRawStyle = {\r\n  boxShadow: 'none',\r\n  margin: 0,\r\n  padding: 0,\r\n  boxSizing: 'border-box'\r\n};\r\n\r\nexport const noWrap: IRawStyle = {\r\n  overflow: 'hidden',\r\n  textOverflow: 'ellipsis',\r\n  whiteSpace: 'nowrap'\r\n};\r\n","import { buildClassMap } from '../utilities/index';\r\nimport { AnimationStyles } from '../styles/index';\r\nimport { IAnimationStyles } from '../interfaces/index';\r\n\r\n/**\r\n * {@docCategory AnimationClassNames}\r\n */\r\nexport const AnimationClassNames: { [key in keyof IAnimationStyles]?: string } = buildClassMap(AnimationStyles);\r\n","import { IRawStyle, mergeStyles } from '@uifabric/merge-styles';\r\nimport { DefaultPalette } from '../styles/DefaultPalette';\r\nimport { getTheme } from '../styles/index';\r\n\r\n/**\r\n * {@docCategory IColorClassNames}\r\n */\r\nexport interface IColorClassNames {\r\n  themeDarker: string;\r\n  themeDarkerHover: string;\r\n  themeDarkerBackground: string;\r\n  themeDarkerBackgroundHover: string;\r\n  themeDarkerBorder: string;\r\n  themeDarkerBorderHover: string;\r\n  themeDark: string;\r\n  themeDarkHover: string;\r\n  themeDarkBackground: string;\r\n  themeDarkBackgroundHover: string;\r\n  themeDarkBorder: string;\r\n  themeDarkBorderHover: string;\r\n  themeDarkAlt: string;\r\n  themeDarkAltHover: string;\r\n  themeDarkAltBackground: string;\r\n  themeDarkAltBackgroundHover: string;\r\n  themeDarkAltBorder: string;\r\n  themeDarkAltBorderHover: string;\r\n  themePrimary: string;\r\n  themePrimaryHover: string;\r\n  themePrimaryBackground: string;\r\n  themePrimaryBackgroundHover: string;\r\n  themePrimaryBorder: string;\r\n  themePrimaryBorderHover: string;\r\n  themeSecondary: string;\r\n  themeSecondaryHover: string;\r\n  themeSecondaryBackground: string;\r\n  themeSecondaryBackgroundHover: string;\r\n  themeSecondaryBorder: string;\r\n  themeSecondaryBorderHover: string;\r\n  themeTertiary: string;\r\n  themeTertiaryHover: string;\r\n  themeTertiaryBackground: string;\r\n  themeTertiaryBackgroundHover: string;\r\n  themeTertiaryBorder: string;\r\n  themeTertiaryBorderHover: string;\r\n  themeLight: string;\r\n  themeLightHover: string;\r\n  themeLightBackground: string;\r\n  themeLightBackgroundHover: string;\r\n  themeLightBorder: string;\r\n  themeLightBorderHover: string;\r\n  themeLighter: string;\r\n  themeLighterHover: string;\r\n  themeLighterBackground: string;\r\n  themeLighterBackgroundHover: string;\r\n  themeLighterBorder: string;\r\n  themeLighterBorderHover: string;\r\n  themeLighterAlt: string;\r\n  themeLighterAltHover: string;\r\n  themeLighterAltBackground: string;\r\n  themeLighterAltBackgroundHover: string;\r\n  themeLighterAltBorder: string;\r\n  themeLighterAltBorderHover: string;\r\n  black: string;\r\n  blackHover: string;\r\n  blackBackground: string;\r\n  blackBackgroundHover: string;\r\n  blackBorder: string;\r\n  blackBorderHover: string;\r\n  blackTranslucent40: string;\r\n  blackTranslucent40Hover: string;\r\n  blackTranslucent40Background: string;\r\n  blackTranslucent40BackgroundHover: string;\r\n  blackTranslucent40Border: string;\r\n  blackTranslucent40BorderHover: string;\r\n  neutralDark: string;\r\n  neutralDarkHover: string;\r\n  neutralDarkBackground: string;\r\n  neutralDarkBackgroundHover: string;\r\n  neutralDarkBorder: string;\r\n  neutralDarkBorderHover: string;\r\n  neutralPrimary: string;\r\n  neutralPrimaryHover: string;\r\n  neutralPrimaryBackground: string;\r\n  neutralPrimaryBackgroundHover: string;\r\n  neutralPrimaryBorder: string;\r\n  neutralPrimaryBorderHover: string;\r\n  neutralPrimaryAlt: string;\r\n  neutralPrimaryAltHover: string;\r\n  neutralPrimaryAltBackground: string;\r\n  neutralPrimaryAltBackgroundHover: string;\r\n  neutralPrimaryAltBorder: string;\r\n  neutralPrimaryAltBorderHover: string;\r\n  neutralSecondary: string;\r\n  neutralSecondaryHover: string;\r\n  neutralSecondaryBackground: string;\r\n  neutralSecondaryBackgroundHover: string;\r\n  neutralSecondaryBorder: string;\r\n  neutralSecondaryBorderHover: string;\r\n  neutralSecondaryAlt: string;\r\n  neutralSecondaryAltHover: string;\r\n  neutralSecondaryAltBackground: string;\r\n  neutralSecondaryAltBackgroundHover: string;\r\n  neutralSecondaryAltBorder: string;\r\n  neutralSecondaryAltBorderHover: string;\r\n  neutralTertiary: string;\r\n  neutralTertiaryHover: string;\r\n  neutralTertiaryBackground: string;\r\n  neutralTertiaryBackgroundHover: string;\r\n  neutralTertiaryBorder: string;\r\n  neutralTertiaryBorderHover: string;\r\n  neutralTertiaryAlt: string;\r\n  neutralTertiaryAltHover: string;\r\n  neutralTertiaryAltBackground: string;\r\n  neutralTertiaryAltBackgroundHover: string;\r\n  neutralTertiaryAltBorder: string;\r\n  neutralTertiaryAltBorderHover: string;\r\n  neutralQuaternary: string;\r\n  neutralQuaternaryHover: string;\r\n  neutralQuaternaryBackground: string;\r\n  neutralQuaternaryBackgroundHover: string;\r\n  neutralQuaternaryBorder: string;\r\n  neutralQuaternaryBorderHover: string;\r\n  neutralQuaternaryAlt: string;\r\n  neutralQuaternaryAltHover: string;\r\n  neutralQuaternaryAltBackground: string;\r\n  neutralQuaternaryAltBackgroundHover: string;\r\n  neutralQuaternaryAltBorder: string;\r\n  neutralQuaternaryAltBorderHover: string;\r\n  neutralLight: string;\r\n  neutralLightHover: string;\r\n  neutralLightBackground: string;\r\n  neutralLightBackgroundHover: string;\r\n  neutralLightBorder: string;\r\n  neutralLightBorderHover: string;\r\n  neutralLighter: string;\r\n  neutralLighterHover: string;\r\n  neutralLighterBackground: string;\r\n  neutralLighterBackgroundHover: string;\r\n  neutralLighterBorder: string;\r\n  neutralLighterBorderHover: string;\r\n  neutralLighterAlt: string;\r\n  neutralLighterAltHover: string;\r\n  neutralLighterAltBackground: string;\r\n  neutralLighterAltBackgroundHover: string;\r\n  neutralLighterAltBorder: string;\r\n  neutralLighterAltBorderHover: string;\r\n  white: string;\r\n  whiteHover: string;\r\n  whiteBackground: string;\r\n  whiteBackgroundHover: string;\r\n  whiteBorder: string;\r\n  whiteBorderHover: string;\r\n  whiteTranslucent40: string;\r\n  whiteTranslucent40Hover: string;\r\n  whiteTranslucent40Background: string;\r\n  whiteTranslucent40BackgroundHover: string;\r\n  whiteTranslucent40Border: string;\r\n  whiteTranslucent40BorderHover: string;\r\n  yellow: string;\r\n  yellowHover: string;\r\n  yellowBackground: string;\r\n  yellowBackgroundHover: string;\r\n  yellowBorder: string;\r\n  yellowBorderHover: string;\r\n  yellowLight: string;\r\n  yellowLightHover: string;\r\n  yellowLightBackground: string;\r\n  yellowLightBackgroundHover: string;\r\n  yellowLightBorder: string;\r\n  yellowLightBorderHover: string;\r\n  orange: string;\r\n  orangeHover: string;\r\n  orangeBackground: string;\r\n  orangeBackgroundHover: string;\r\n  orangeBorder: string;\r\n  orangeBorderHover: string;\r\n  orangeLight: string;\r\n  orangeLightHover: string;\r\n  orangeLightBackground: string;\r\n  orangeLightBackgroundHover: string;\r\n  orangeLightBorder: string;\r\n  orangeLightBorderHover: string;\r\n  orangeLighter: string;\r\n  orangeLighterHover: string;\r\n  orangeLighterBackground: string;\r\n  orangeLighterBackgroundHover: string;\r\n  orangeLighterBorder: string;\r\n  orangeLighterBorderHover: string;\r\n  redDark: string;\r\n  redDarkHover: string;\r\n  redDarkBackground: string;\r\n  redDarkBackgroundHover: string;\r\n  redDarkBorder: string;\r\n  redDarkBorderHover: string;\r\n  red: string;\r\n  redHover: string;\r\n  redBackground: string;\r\n  redBackgroundHover: string;\r\n  redBorder: string;\r\n  redBorderHover: string;\r\n  magentaDark: string;\r\n  magentaDarkHover: string;\r\n  magentaDarkBackground: string;\r\n  magentaDarkBackgroundHover: string;\r\n  magentaDarkBorder: string;\r\n  magentaDarkBorderHover: string;\r\n  magenta: string;\r\n  magentaHover: string;\r\n  magentaBackground: string;\r\n  magentaBackgroundHover: string;\r\n  magentaBorder: string;\r\n  magentaBorderHover: string;\r\n  magentaLight: string;\r\n  magentaLightHover: string;\r\n  magentaLightBackground: string;\r\n  magentaLightBackgroundHover: string;\r\n  magentaLightBorder: string;\r\n  magentaLightBorderHover: string;\r\n  purpleDark: string;\r\n  purpleDarkHover: string;\r\n  purpleDarkBackground: string;\r\n  purpleDarkBackgroundHover: string;\r\n  purpleDarkBorder: string;\r\n  purpleDarkBorderHover: string;\r\n  purple: string;\r\n  purpleHover: string;\r\n  purpleBackground: string;\r\n  purpleBackgroundHover: string;\r\n  purpleBorder: string;\r\n  purpleBorderHover: string;\r\n  purpleLight: string;\r\n  purpleLightHover: string;\r\n  purpleLightBackground: string;\r\n  purpleLightBackgroundHover: string;\r\n  purpleLightBorder: string;\r\n  purpleLightBorderHover: string;\r\n  blueDark: string;\r\n  blueDarkHover: string;\r\n  blueDarkBackground: string;\r\n  blueDarkBackgroundHover: string;\r\n  blueDarkBorder: string;\r\n  blueDarkBorderHover: string;\r\n  blueMid: string;\r\n  blueMidHover: string;\r\n  blueMidBackground: string;\r\n  blueMidBackgroundHover: string;\r\n  blueMidBorder: string;\r\n  blueMidBorderHover: string;\r\n  blue: string;\r\n  blueHover: string;\r\n  blueBackground: string;\r\n  blueBackgroundHover: string;\r\n  blueBorder: string;\r\n  blueBorderHover: string;\r\n  blueLight: string;\r\n  blueLightHover: string;\r\n  blueLightBackground: string;\r\n  blueLightBackgroundHover: string;\r\n  blueLightBorder: string;\r\n  blueLightBorderHover: string;\r\n  tealDark: string;\r\n  tealDarkHover: string;\r\n  tealDarkBackground: string;\r\n  tealDarkBackgroundHover: string;\r\n  tealDarkBorder: string;\r\n  tealDarkBorderHover: string;\r\n  teal: string;\r\n  tealHover: string;\r\n  tealBackground: string;\r\n  tealBackgroundHover: string;\r\n  tealBorder: string;\r\n  tealBorderHover: string;\r\n  tealLight: string;\r\n  tealLightHover: string;\r\n  tealLightBackground: string;\r\n  tealLightBackgroundHover: string;\r\n  tealLightBorder: string;\r\n  tealLightBorderHover: string;\r\n  greenDark: string;\r\n  greenDarkHover: string;\r\n  greenDarkBackground: string;\r\n  greenDarkBackgroundHover: string;\r\n  greenDarkBorder: string;\r\n  greenDarkBorderHover: string;\r\n  green: string;\r\n  greenHover: string;\r\n  greenBackground: string;\r\n  greenBackgroundHover: string;\r\n  greenBorder: string;\r\n  greenBorderHover: string;\r\n  greenLight: string;\r\n  greenLightHover: string;\r\n  greenLightBackground: string;\r\n  greenLightBackgroundHover: string;\r\n  greenLightBorder: string;\r\n  greenLightBorderHover: string;\r\n}\r\n\r\nexport const ColorClassNames: IColorClassNames = {} as IColorClassNames;\r\n\r\nfor (const colorName in DefaultPalette) {\r\n  if (DefaultPalette.hasOwnProperty(colorName)) {\r\n    // Foreground color\r\n    _defineGetter(ColorClassNames, colorName, '', false, 'color');\r\n\r\n    // Hover color\r\n    _defineGetter(ColorClassNames, colorName, 'Hover', true, 'color');\r\n\r\n    // Background color\r\n    _defineGetter(ColorClassNames, colorName, 'Background', false, 'background');\r\n\r\n    // Background hover\r\n    _defineGetter(ColorClassNames, colorName, 'BackgroundHover', true, 'background');\r\n\r\n    // Border color\r\n    _defineGetter(ColorClassNames, colorName, 'Border', false, 'borderColor');\r\n\r\n    // Border hover color\r\n    _defineGetter(ColorClassNames, colorName, 'BorderHover', true, 'borderColor');\r\n  }\r\n}\r\n\r\n/**\r\n * Defines a getter for the given class configuration.\r\n */\r\nfunction _defineGetter(obj: IColorClassNames, colorName: string, suffix: string, isHover: boolean, cssProperty: string): void {\r\n  Object.defineProperty(obj, colorName + suffix, {\r\n    get: (): string => {\r\n      // tslint:disable-next-line:no-any\r\n      const style: IRawStyle = { [cssProperty]: (getTheme().palette as any)[colorName] };\r\n\r\n      return mergeStyles(isHover ? { selectors: { ':hover': style } } : style).toString();\r\n    },\r\n    enumerable: true,\r\n    configurable: true\r\n  });\r\n}\r\n","import { buildClassMap } from '../utilities/buildClassMap';\r\nimport { IFontStyles } from '../interfaces/IFontStyles';\r\nimport { DefaultFontStyles } from '../styles/DefaultFontStyles';\r\n\r\n/**\r\n * {@docCategory FontClassNames}\r\n */\r\nexport const FontClassNames: { [key in keyof IFontStyles]?: string } = buildClassMap(DefaultFontStyles);\r\n","// @uifabric/styling@6.46.0\n  // Do not modify this file, the file is generated as part of publish. The checked in version is a placeholder only.\n  import { setVersion } from '@uifabric/set-version';\n  setVersion('@uifabric/styling', '6.46.0');","import { AnimationClassNames, getGlobalClassNames, IStyle } from '../../Styling';\r\nimport { IImageStyleProps, IImageStyles } from './Image.types';\r\nimport { getWindow } from '../../Utilities';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Image',\r\n  rootMaximizeFrame: 'ms-Image--maximizeFrame',\r\n  image: 'ms-Image-image',\r\n  imageCenter: 'ms-Image-image--center',\r\n  imageContain: 'ms-Image-image--contain',\r\n  imageCover: 'ms-Image-image--cover',\r\n  imageCenterCover: 'ms-Image-image--centerCover',\r\n  imageNone: 'ms-Image-image--none',\r\n  imageLandscape: 'ms-Image-image--landscape',\r\n  imagePortrait: 'ms-Image-image--portrait'\r\n};\r\n\r\nexport const getStyles = (props: IImageStyleProps): IImageStyles => {\r\n  const {\r\n    className,\r\n    width,\r\n    height,\r\n    maximizeFrame,\r\n    isLoaded,\r\n    shouldFadeIn,\r\n    shouldStartVisible,\r\n    isLandscape,\r\n    isCenter,\r\n    isContain,\r\n    isCover,\r\n    isCenterCover,\r\n    isNone,\r\n    isError,\r\n    isNotImageFit,\r\n    theme\r\n  } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const ImageFitStyles: IStyle = {\r\n    position: 'absolute',\r\n    left: '50% /* @noflip */',\r\n    top: '50%',\r\n    transform: 'translate(-50%,-50%)' // @todo test RTL renders transform: translate(50%,-50%);\r\n  };\r\n\r\n  // Cut the mustard using msMaxTouchPoints to detect IE11 which does not support CSS object-fit\r\n  const window: Window | undefined = getWindow();\r\n  const supportsObjectFit: boolean = window !== undefined && window.navigator.msMaxTouchPoints === undefined;\r\n  const fallbackObjectFitStyles =\r\n    (isContain && isLandscape) || (isCover && !isLandscape) ? { width: '100%', height: 'auto' } : { width: 'auto', height: '100%' };\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        overflow: 'hidden'\r\n      },\r\n      maximizeFrame && [\r\n        classNames.rootMaximizeFrame,\r\n        {\r\n          height: '100%',\r\n          width: '100%'\r\n        }\r\n      ],\r\n      isLoaded && shouldFadeIn && !shouldStartVisible && AnimationClassNames.fadeIn400,\r\n      (isCenter || isContain || isCover || isCenterCover) && {\r\n        position: 'relative'\r\n      },\r\n      className\r\n    ],\r\n    image: [\r\n      classNames.image,\r\n      {\r\n        display: 'block',\r\n        opacity: 0\r\n      },\r\n      isLoaded && [\r\n        'is-loaded',\r\n        {\r\n          opacity: 1\r\n        }\r\n      ],\r\n      isCenter && [classNames.imageCenter, ImageFitStyles],\r\n      isContain && [\r\n        classNames.imageContain,\r\n        supportsObjectFit && {\r\n          width: '100%',\r\n          height: '100%',\r\n          objectFit: 'contain'\r\n        },\r\n        !supportsObjectFit && fallbackObjectFitStyles,\r\n        ImageFitStyles\r\n      ],\r\n      isCover && [\r\n        classNames.imageCover,\r\n        supportsObjectFit && {\r\n          width: '100%',\r\n          height: '100%',\r\n          objectFit: 'cover'\r\n        },\r\n        !supportsObjectFit && fallbackObjectFitStyles,\r\n        ImageFitStyles\r\n      ],\r\n      isCenterCover && [\r\n        classNames.imageCenterCover,\r\n        isLandscape && {\r\n          maxHeight: '100%'\r\n        },\r\n        !isLandscape && {\r\n          maxWidth: '100%'\r\n        },\r\n        ImageFitStyles\r\n      ],\r\n      isNone && [\r\n        classNames.imageNone,\r\n        {\r\n          width: 'auto',\r\n          height: 'auto'\r\n        }\r\n      ],\r\n      isNotImageFit && [\r\n        !!width &&\r\n          !height && {\r\n            height: 'auto',\r\n            width: '100%'\r\n          },\r\n        !width &&\r\n          !!height && {\r\n            height: '100%',\r\n            width: 'auto'\r\n          },\r\n        !!width &&\r\n          !!height && {\r\n            height: '100%',\r\n            width: '100%'\r\n          }\r\n      ],\r\n      isLandscape && classNames.imageLandscape,\r\n      !isLandscape && classNames.imagePortrait,\r\n      !isLoaded && 'is-notLoaded',\r\n      shouldFadeIn && 'is-fadeIn',\r\n      isError && 'is-error'\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { IFocusZoneProps } from '../../FocusZone';\r\nimport { IIconProps } from '../Icon/Icon.types';\r\nimport { ICalloutProps, ICalloutContentStyleProps } from '../../Callout';\r\nimport { ITheme, IStyle } from '../../Styling';\r\nimport { IButtonStyles } from '../../Button';\r\nimport { IRefObject, IBaseProps, IPoint, IRectangle, IRenderFunction, IStyleFunctionOrObject } from '../../Utilities';\r\nimport { IWithResponsiveModeState } from '../../utilities/decorators/withResponsiveMode';\r\nimport { IContextualMenuClassNames, IMenuItemClassNames } from './ContextualMenu.classNames';\r\nexport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { IVerticalDividerClassNames } from '../Divider/VerticalDivider.types';\r\nimport { IContextualMenuItemProps, IContextualMenuRenderItem, IContextualMenuItemStyleProps } from './ContextualMenuItem.types';\r\nimport { IKeytipProps } from '../../Keytip';\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport enum ContextualMenuItemType {\r\n  Normal = 0,\r\n  Divider = 1,\r\n  Header = 2,\r\n  Section = 3\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenu {}\r\n\r\n/**\r\n * React.Props is deprecated and we're removing it in 6.0. Usage of 'any' should go away with it.\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuProps extends IBaseProps<IContextualMenu>, IWithResponsiveModeState {\r\n  /**\r\n   * Optional callback to access the IContextualMenu interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IContextualMenu>;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules.\r\n   */\r\n  styles?: IStyleFunctionOrObject<IContextualMenuStyleProps, IContextualMenuStyles>;\r\n\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Additional css class to apply to the ContextualMenu\r\n   * @defaultvalue undefined\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * The target that the ContextualMenu should try to position itself based on.\r\n   * It can be either an Element a querySelector string of a valid Element\r\n   * or a MouseEvent. If MouseEvent is given then the origin point of the event will be used.\r\n   */\r\n  target?: Element | string | MouseEvent | IPoint | null;\r\n\r\n  /**\r\n   * How the element should be positioned\r\n   * @defaultvalue DirectionalHint.bottomAutoEdge\r\n   */\r\n  directionalHint?: DirectionalHint;\r\n\r\n  /**\r\n   * How the element should be positioned in RTL layouts.\r\n   * If not specified, a mirror of `directionalHint` will be used instead\r\n   */\r\n  directionalHintForRTL?: DirectionalHint;\r\n\r\n  /**\r\n   * The gap between the ContextualMenu and the target\r\n   * @defaultvalue 0\r\n   */\r\n  gapSpace?: number;\r\n\r\n  /**\r\n   * The width of the beak.\r\n   * @defaultvalue 16\r\n   */\r\n  beakWidth?: number;\r\n\r\n  /**\r\n   * If true the context menu will render as the same width as the target element\r\n   * @defaultvalue false\r\n   */\r\n  useTargetWidth?: boolean;\r\n\r\n  /**\r\n   * If true the context menu will have a minimum width equal to the width of the target element\r\n   * @defaultvalue false\r\n   */\r\n  useTargetAsMinWidth?: boolean;\r\n\r\n  /**\r\n   * The bounding rectangle for which the contextual menu can appear in.\r\n   */\r\n  bounds?: IRectangle;\r\n\r\n  /**\r\n   * If true then the beak is visible. If false it will not be shown.\r\n   */\r\n  isBeakVisible?: boolean;\r\n\r\n  /**\r\n   * If true the position returned will have the menu element cover the target.\r\n   * If false then it will position next to the target;\r\n   * @defaultvalue false\r\n   */\r\n\r\n  coverTarget?: boolean;\r\n\r\n  /**\r\n   * If true the positioning logic will prefer to flip edges rather than to nudge the rectangle to fit within bounds,\r\n   * thus making sure the element aligns perfectly with target's alignment edge\r\n   */\r\n  alignTargetEdge?: boolean;\r\n\r\n  /**\r\n   * Collection of menu items.\r\n   * @defaultvalue []\r\n   */\r\n  items: IContextualMenuItem[];\r\n\r\n  /**\r\n   * Aria Labelled by labelElementId\r\n   * @defaultvalue null\r\n   */\r\n  labelElementId?: string;\r\n\r\n  /**\r\n   * Whether to focus on the menu when mounted.\r\n   * @defaultvalue true\r\n   */\r\n  shouldFocusOnMount?: boolean;\r\n\r\n  /**\r\n   * Whether to focus on the contextual menu container (as opposed to the first menu item).\r\n   * @defaultvalue null\r\n   */\r\n  shouldFocusOnContainer?: boolean;\r\n\r\n  /**\r\n   * Callback when the ContextualMenu tries to close. If dismissAll is true then all\r\n   * submenus will be dismissed.\r\n   */\r\n  onDismiss?: (ev?: any, dismissAll?: boolean) => void;\r\n\r\n  /**\r\n   * Click handler which is invoked if onClick is not passed for individual contextual\r\n   * menu item.\r\n   * Returning true will dismiss the menu even if ev.preventDefault() was called.\r\n   */\r\n  onItemClick?: (ev?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, item?: IContextualMenuItem) => boolean | void;\r\n\r\n  /**\r\n   * Whether this menu is a submenu of another menu or not.\r\n   */\r\n  isSubMenu?: boolean;\r\n\r\n  /**\r\n   * DOM id to tag the ContextualMenu with, for reference.\r\n   * Should be used for 'aria-owns' and other such uses, rather than direct reference for programmatic purposes.\r\n   */\r\n  id?: string;\r\n\r\n  /**\r\n   * Aria label for accessibility for the ContextualMenu.\r\n   * If none specified no aria label will be applied to the ContextualMenu.\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * If true do not render on a new layer. If false render on a new layer.\r\n   * @defaultvalue false\r\n   */\r\n  doNotLayer?: boolean;\r\n\r\n  /**\r\n   * If true the position will not change sides in an attempt to fit the ContextualMenu within bounds.\r\n   * It will still attempt to align it to whatever bounds are given.\r\n   * @defaultvalue false\r\n   */\r\n  directionalHintFixed?: boolean;\r\n\r\n  /**\r\n   * Callback for when the contextualmenu has been opened.\r\n   */\r\n  onMenuOpened?: (contextualMenu?: IContextualMenuProps) => void;\r\n\r\n  /**\r\n   * Callback for when the contextualmenu is being closed (removing from the DOM)\r\n   */\r\n  onMenuDismissed?: (contextualMenu?: IContextualMenuProps) => void;\r\n\r\n  /**\r\n   * Pass in custom callout props\r\n   */\r\n  calloutProps?: ICalloutProps;\r\n\r\n  /**\r\n   * Optional title to be displayed on top of the menu.\r\n   */\r\n  title?: string;\r\n\r\n  /**\r\n   * Method to provide the classnames to style the contextual menu. Default value is the getMenuClassnames func\r\n   * defined in ContextualMenu.classnames.\r\n   * Deprecated, use `styles` prop of `IContextualMenuProps` to leverage mergeStyles API.\r\n   * @deprecated Use `styles` prop of `IContextualMenuProps` to leverage mergeStyles API.\r\n   */\r\n  getMenuClassNames?: (theme: ITheme, className?: string) => IContextualMenuClassNames;\r\n\r\n  /** Method to call when trying to render a submenu. */\r\n  onRenderSubMenu?: IRenderFunction<IContextualMenuProps>;\r\n\r\n  /**\r\n   * Method to override the render of the list of menu items.\r\n   */\r\n  onRenderMenuList?: IRenderFunction<IContextualMenuListProps>;\r\n\r\n  /**\r\n   * Delay (in milliseconds) to wait before expanding / dismissing a submenu on mouseEnter or mouseLeave\r\n   */\r\n  subMenuHoverDelay?: number;\r\n\r\n  /**\r\n   * Method to override the render of the individual menu items\r\n   * @defaultvalue ContextualMenuItem\r\n   */\r\n  contextualMenuItemAs?: React.ComponentClass<IContextualMenuItemProps> | React.StatelessComponent<IContextualMenuItemProps>;\r\n\r\n  /**\r\n   * Props to pass down to the FocusZone.\r\n   * NOTE: the default FocusZoneDirection will be used unless a direction\r\n   * is specified in the focusZoneProps (even if other focusZoneProps are defined)\r\n   * @defaultvalue \\{direction: FocusZoneDirection.vertical\\}\r\n   */\r\n  focusZoneProps?: IFocusZoneProps;\r\n\r\n  /**\r\n   * If specified, renders the ContextualMenu in a hidden state.\r\n   * Use this flag, rather than rendering a ContextualMenu conditionally based on visibility,\r\n   * to improve rendering performance when it becomes visible.\r\n   * Note: When ContextualMenu is hidden its content will not be rendered. It will only render\r\n   * once the ContextualMenu is visible.\r\n   */\r\n  hidden?: boolean;\r\n\r\n  /**\r\n   * If true, the contextual menu will not be updated until\r\n   * focus enters the menu via other means. This will only result\r\n   * in different behavior when shouldFocusOnMount = false\r\n   * @defaultvalue null\r\n   */\r\n  delayUpdateFocusOnHover?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuListProps {\r\n  items: IContextualMenuItem[];\r\n  totalItemCount: number;\r\n  hasCheckmarks: boolean;\r\n  hasIcons: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuItem {\r\n  /**\r\n   * Optional callback to access the IContextualMenuRenderItem interface. This will get passed down to ContextualMenuItem.\r\n   */\r\n  componentRef?: IRefObject<IContextualMenuRenderItem>;\r\n\r\n  /**\r\n   * Unique id to identify the item\r\n   */\r\n  key: string;\r\n\r\n  /**\r\n   * Text description for the menu item to display\r\n   */\r\n  text?: string;\r\n\r\n  /**\r\n   * Seconday description for the menu item to display\r\n   */\r\n  secondaryText?: string;\r\n\r\n  itemType?: ContextualMenuItemType;\r\n\r\n  /**\r\n   * Props that go to the IconComponent\r\n   */\r\n  iconProps?: IIconProps;\r\n\r\n  /**\r\n   * Custom render function for the menu item icon\r\n   */\r\n  onRenderIcon?: IRenderFunction<IContextualMenuItemProps>;\r\n\r\n  /**\r\n   * Props that go to the IconComponent used for the chevron.\r\n   */\r\n  submenuIconProps?: IIconProps;\r\n\r\n  /**\r\n   * Whether the menu item is disabled\r\n   * @defaultvalue false\r\n   */\r\n  disabled?: boolean;\r\n\r\n  /**\r\n   * If the menu item is a split button, this prop disables purely the primary action of the button.\r\n   * @defaultvalue false\r\n   */\r\n  primaryDisabled?: boolean;\r\n\r\n  /**\r\n   * [TODO] Not Yet Implemented\r\n   */\r\n  shortCut?: string;\r\n\r\n  /**\r\n   * Whether or not this menu item can be checked\r\n   * @defaultvalue false\r\n   */\r\n  canCheck?: boolean;\r\n\r\n  /**\r\n   * Whether or not this menu item is currently checked.\r\n   * @defaultvalue false\r\n   */\r\n  checked?: boolean;\r\n\r\n  /**\r\n   * Whether or not this menu item is a splitButton.\r\n   * @defaultvalue false\r\n   */\r\n  split?: boolean;\r\n\r\n  /**\r\n   * Any custom data the developer wishes to associate with the menu item.\r\n   */\r\n  data?: any;\r\n\r\n  /**\r\n   * Callback issued when the menu item is invoked. If ev.preventDefault() is called in onClick, click will not close menu.\r\n   * Returning true will dismiss the menu even if ev.preventDefault() was called.\r\n   */\r\n  onClick?: (ev?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, item?: IContextualMenuItem) => boolean | void;\r\n\r\n  /**\r\n   * An optional URL to navigate to upon selection\r\n   */\r\n  href?: string;\r\n\r\n  /**\r\n   * An optional target when using href\r\n   */\r\n  target?: string;\r\n\r\n  /**\r\n   * An optional rel when using href. If target is _blank rel is defaulted to a value to prevent clickjacking.\r\n   */\r\n  rel?: string;\r\n\r\n  /**\r\n   * Properties to apply to a submenu to this item.\r\n   *\r\n   * The ContextualMenu will provide default values for `target`, `onDismiss`, `isSubMenu`,\r\n   * `id`, `shouldFocusOnMount`, `directionalHint`, `className`, and `gapSpace`, all of which\r\n   * can be overridden.\r\n   */\r\n  subMenuProps?: IContextualMenuProps;\r\n\r\n  /**\r\n   * Method to provide the classnames to style the individual items inside a menu.\r\n   * Deprecated, use `styles` prop of `IContextualMenuItemProps` to leverage mergeStyles API.\r\n   * @deprecated Use `styles` prop of `IContextualMenuItemProps` to leverage mergeStyles API.\r\n   */\r\n  getItemClassNames?: (\r\n    theme: ITheme,\r\n    disabled: boolean,\r\n    expanded: boolean,\r\n    checked: boolean,\r\n    isAnchorLink: boolean,\r\n    knownIcon: boolean,\r\n    itemClassName?: string,\r\n    dividerClassName?: string,\r\n    iconClassName?: string,\r\n    subMenuClassName?: string,\r\n    primaryDisabled?: boolean\r\n  ) => IMenuItemClassNames;\r\n\r\n  /**\r\n   * Optional IContextualMenuItemProps overrides to customize behaviors such as item styling via `styles`.\r\n   */\r\n  itemProps?: Partial<IContextualMenuItemProps>;\r\n\r\n  /**\r\n   * Method to provide the classnames to style the Vertical Divider of a split button inside a menu.\r\n   * Default value is the getVerticalDividerClassnames func defined in ContextualMenu.classnames\r\n   * @defaultvalue getSplitButtonVerticalDividerClassNames\r\n   */\r\n  getSplitButtonVerticalDividerClassNames?: (theme: ITheme) => IVerticalDividerClassNames;\r\n\r\n  /**\r\n   *  Properties to apply to render this item as a section.\r\n   *  This prop is mutually exclusive with subMenuProps.\r\n   */\r\n  sectionProps?: IContextualMenuSection;\r\n\r\n  /**\r\n   * Additional css class to apply to the menu item\r\n   * @defaultvalue undefined\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Additional styles to apply to the menu item\r\n   * Deprecated, use `styles` instead.\r\n   * @defaultvalue undefined\r\n   * @deprecated in favor of the `styles` prop to leverage mergeStyles API.\r\n   */\r\n  style?: React.CSSProperties;\r\n\r\n  /**\r\n   * Optional accessibility label (aria-label) attribute that will be stamped on to the element.\r\n   * If none is specified, the aria-label attribute will contain the item name\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * Optional title for displaying text when hovering over an item.\r\n   */\r\n  title?: string;\r\n\r\n  /**\r\n   * Method to custom render this menu item.\r\n   * For keyboard accessibility, the top-level rendered item should be a focusable element\r\n   * (like an anchor or a button) or have the `data-is-focusable` property set to true.\r\n   *\r\n   * The function receives a function that can be called to dismiss the menu as a second argument.\r\n   *  This can be used to make sure that a custom menu item click dismisses the menu.\r\n   * @defaultvalue undefined\r\n   */\r\n  onRender?: (item: any, dismissMenu: (ev?: any, dismissAll?: boolean) => void) => React.ReactNode;\r\n\r\n  /**\r\n   * A function to be executed onMouseDown. This is executed before an onClick event and can\r\n   * be used to interrupt native on click events as well. The click event should still handle\r\n   * the commands. This should only be used in special cases when react and non-react are mixed.\r\n   */\r\n  onMouseDown?: (item: IContextualMenuItem, event: React.MouseEvent<HTMLElement>) => void;\r\n\r\n  /**\r\n   * Optional override for the role attribute on the menu button. If one is not provided, it will\r\n   * have a value of menuitem or menuitemcheckbox.\r\n   */\r\n  role?: string;\r\n\r\n  /**\r\n   * When rendering a custom component that is passed in, the component might also be a list of\r\n   * elements. We want to keep track of the correct index our menu is using based off of\r\n   * the length of the custom list. It is up to the user to increment the count for their list.\r\n   */\r\n  customOnRenderListLength?: number;\r\n\r\n  /**\r\n   * Keytip for this contextual menu item\r\n   */\r\n  keytipProps?: IKeytipProps;\r\n\r\n  /**\r\n   * Any additional properties to use when custom rendering menu items.\r\n   */\r\n  [propertyName: string]: any;\r\n\r\n  /**\r\n   * This prop is no longer used. All contextual menu items are now focusable when disabled.\r\n   * @deprecated in 6.38.2 will be removed in 7.0.0\r\n   */\r\n  inactive?: boolean;\r\n\r\n  /**\r\n   * Text description for the menu item to display\r\n   * Deprecated, use `text` instead.\r\n   * @deprecated Use `text` instead.\r\n   */\r\n  name?: string;\r\n}\r\n\r\n/**\r\n * React.Props is deprecated and we're removing it in 6.0. Usage of 'any' should go away with it.\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuSection extends React.ClassAttributes<any> {\r\n  /**\r\n   * The items to include inside the section.\r\n   */\r\n  items: IContextualMenuItem[];\r\n\r\n  /**\r\n   * The optional section title.\r\n   */\r\n  title?: string;\r\n\r\n  /**\r\n   * If set to true, the section will display a divider at the top of the section.\r\n   */\r\n  topDivider?: boolean;\r\n\r\n  /**\r\n   * If set to true, the section will display a divider at the bottom of the section.\r\n   */\r\n  bottomDivider?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IMenuItemStyles extends IButtonStyles {\r\n  /**\r\n   * Styles for a menu item that is an anchor link.\r\n   */\r\n  item: IStyle;\r\n\r\n  /**\r\n   * Styles for the content inside the button/link of the menuItem.\r\n   */\r\n  linkContent: IStyle;\r\n\r\n  /**\r\n   * Styles for a menu item that is an anchor link.\r\n   */\r\n  anchorLink: IStyle;\r\n\r\n  /**\r\n   * Default icon color style for known icons.\r\n   */\r\n  iconColor: IStyle;\r\n\r\n  /**\r\n   * Default style for checkmark icons.\r\n   */\r\n  checkmarkIcon: IStyle;\r\n\r\n  /**\r\n   * Styles for the submenu icon of a menu item.\r\n   */\r\n  subMenuIcon: IStyle;\r\n\r\n  /**\r\n   * Styles for a divider item of a ConextualMenu.\r\n   */\r\n  divider: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuStyleProps {\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Accept custom classNames\r\n   */\r\n  className?: string;\r\n\r\n  // Insert ContextualMenu style props below\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuStyles {\r\n  /**\r\n   * Style override for the contextual menu title.\r\n   */\r\n  title: IStyle;\r\n\r\n  /**\r\n   * Style for the container which parents all menu items.\r\n   */\r\n  container: IStyle;\r\n\r\n  /**\r\n   * Base styles for the root element of all ContextualMenus.\r\n   */\r\n  root: IStyle;\r\n\r\n  /**\r\n   * Styles for the header item of a ContextualMenu\r\n   */\r\n  header: IStyle;\r\n\r\n  /**\r\n   * Styles for the list that contains all menuItems.\r\n   */\r\n  list: IStyle;\r\n\r\n  /**\r\n   * SubComponent styles.\r\n   */\r\n  subComponentStyles: IContextualMenuSubComponentStyles;\r\n}\r\n\r\n/**\r\n * {@docCategory ContextualMenu}\r\n */\r\nexport interface IContextualMenuSubComponentStyles {\r\n  /** Refers to the callout that hosts the ContextualMenu options */\r\n  callout: IStyleFunctionOrObject<ICalloutContentStyleProps, any>;\r\n\r\n  /** Refers to the item in the list */\r\n  menuItem: IStyleFunctionOrObject<IContextualMenuItemStyleProps, any>;\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { IImageProps, IImageStyleProps, IImageStyles } from './Image.types';\r\nimport { ImageBase } from './Image.base';\r\nimport { getStyles } from './Image.styles';\r\n\r\nexport const Image: React.StatelessComponent<IImageProps> = styled<IImageProps, IImageStyleProps, IImageStyles>(\r\n  ImageBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Image'\r\n  }\r\n);\r\n","import * as React from 'react';\r\n\r\nimport { IIconProps, IconType, IIconStyleProps, IIconStyles } from './Icon.types';\r\nimport { Image } from '../Image/Image';\r\nimport { ImageLoadState } from '../Image/Image.types';\r\nimport { getNativeProps, htmlElementProperties, classNamesFunction } from '../../Utilities';\r\nimport { getIcon } from '../../Styling';\r\n\r\nexport interface IIconState {\r\n  imageLoadError: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IIconStyleProps, IIconStyles>();\r\n\r\nexport class IconBase extends React.PureComponent<IIconProps, IIconState> {\r\n  constructor(props: IIconProps) {\r\n    super(props);\r\n    this.state = {\r\n      imageLoadError: false\r\n    };\r\n  }\r\n\r\n  public render() {\r\n    const { ariaLabel, className, styles, iconName, imageErrorAs, theme } = this.props;\r\n    const isPlaceholder = typeof iconName === 'string' && iconName.length === 0;\r\n    const isImage = this.props.iconType === IconType.image || this.props.iconType === IconType.Image;\r\n    const { iconClassName, children } = this._getIconContent(iconName);\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className,\r\n      iconClassName,\r\n      isImage,\r\n      isPlaceholder\r\n    });\r\n\r\n    const containerProps = ariaLabel\r\n      ? {\r\n          'aria-label': ariaLabel\r\n        }\r\n      : {\r\n          role: 'presentation'\r\n        };\r\n\r\n    const RootType = isImage ? 'div' : 'i';\r\n    const nativeProps = getNativeProps(this.props, htmlElementProperties);\r\n    const { imageLoadError } = this.state;\r\n    const imageProps = {\r\n      ...this.props.imageProps,\r\n      onLoadingStateChange: this.onImageLoadingStateChange\r\n    };\r\n    const ImageType = (imageLoadError && imageErrorAs) || Image;\r\n\r\n    return (\r\n      <RootType data-icon-name={iconName} {...nativeProps} {...containerProps} className={classNames.root}>\r\n        {isImage ? <ImageType {...imageProps} /> : children}\r\n      </RootType>\r\n    );\r\n  }\r\n\r\n  private onImageLoadingStateChange = (state: ImageLoadState): void => {\r\n    if (this.props.imageProps && this.props.imageProps.onLoadingStateChange) {\r\n      this.props.imageProps.onLoadingStateChange(state);\r\n    }\r\n    if (state === ImageLoadState.error) {\r\n      this.setState({ imageLoadError: true });\r\n    }\r\n  };\r\n\r\n  private _getIconContent(name?: string) {\r\n    const iconDefinition = getIcon(name) || {\r\n      subset: {\r\n        className: undefined\r\n      },\r\n      code: undefined\r\n    };\r\n\r\n    return {\r\n      children: iconDefinition.code,\r\n      iconClassName: iconDefinition.subset.className\r\n    };\r\n  }\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { IIconProps, IIconStyleProps, IIconStyles } from './Icon.types';\r\nimport { IconBase } from './Icon.base';\r\nimport { getStyles } from './Icon.styles';\r\n\r\n/**\r\n * Icons are used for rendering an individual's avatar, presence and details.\r\n * They are used within the PeoplePicker components.\r\n */\r\nexport const Icon: React.StatelessComponent<IIconProps> = styled<IIconProps, IIconStyleProps, IIconStyles>(IconBase, getStyles, undefined, {\r\n  scope: 'Icon'\r\n});\r\n","import { IIconStyleProps, IIconStyles } from './Icon.types';\r\n\r\nexport const getStyles = (props: IIconStyleProps): IIconStyles => {\r\n  const { className, iconClassName, isPlaceholder, isImage, styles } = props;\r\n\r\n  return {\r\n    root: [\r\n      isImage && 'ms-Icon-imageContainer',\r\n      isPlaceholder && 'ms-Icon-placeHolder',\r\n      {\r\n        display: 'inline-block'\r\n      },\r\n      isPlaceholder && {\r\n        width: '1em'\r\n      },\r\n      isImage && {\r\n        overflow: 'hidden'\r\n      },\r\n      iconClassName,\r\n      className,\r\n      styles && styles.root,\r\n      styles && styles.imageContainer\r\n    ]\r\n  };\r\n};\r\n","export const DirectionalHint = {\r\n  /**\r\n   * Appear above the target element, with the left edges of the callout and target aligning.\r\n   */\r\n  topLeftEdge: 0 as 0,\r\n\r\n  /**\r\n   * Appear above the target element, with the centers of the callout and target aligning.\r\n   */\r\n  topCenter: 1 as 1,\r\n\r\n  /**\r\n   * Appear above the target element, with the right edges of the callout and target aligning.\r\n   */\r\n  topRightEdge: 2 as 2,\r\n\r\n  /**\r\n   * Appear above the target element, aligning with the target element such that the callout tends toward the center of the screen.\r\n   */\r\n  topAutoEdge: 3 as 3,\r\n\r\n  /**\r\n   * Appear below the target element, with the left edges of the callout and target aligning.\r\n   */\r\n  bottomLeftEdge: 4 as 4,\r\n\r\n  /**\r\n   * Appear below the target element, with the centers of the callout and target aligning.\r\n   */\r\n  bottomCenter: 5 as 5,\r\n\r\n  /**\r\n   * Appear below the target element, with the right edges of the callout and target aligning.\r\n   */\r\n  bottomRightEdge: 6 as 6,\r\n\r\n  /**\r\n   * Appear below the target element, aligning with the target element such that the callout tends toward the center of the screen.\r\n   */\r\n  bottomAutoEdge: 7 as 7,\r\n\r\n  /**\r\n   * Appear to the left of the target element, with the top edges of the callout and target aligning.\r\n   */\r\n  leftTopEdge: 8 as 8,\r\n\r\n  /**\r\n   * Appear to the left of the target element, with the centers of the callout and target aligning.\r\n   */\r\n  leftCenter: 9 as 9,\r\n\r\n  /**\r\n   * Appear to the left of the target element, with the bottom edges of the callout and target aligning.\r\n   */\r\n  leftBottomEdge: 10 as 10,\r\n\r\n  /**\r\n   * Appear to the right of the target element, with the top edges of the callout and target aligning.\r\n   */\r\n  rightTopEdge: 11 as 11,\r\n\r\n  /**\r\n   * Appear to the right of the target element, with the centers of the callout and target aligning.\r\n   */\r\n  rightCenter: 12 as 12,\r\n\r\n  /**\r\n   * Appear to the right of the target element, with the bottom edges of the callout and target aligning.\r\n   */\r\n  rightBottomEdge: 13 as 13\r\n};\r\n\r\nexport type DirectionalHint = typeof DirectionalHint[keyof typeof DirectionalHint];\r\n","import * as React from 'react';\r\nimport { FocusZone } from './FocusZone';\r\nimport { IRefObject } from '../../Utilities';\r\n\r\n/**\r\n * FocusZone component class interface.\r\n * {@docCategory FocusZone}\r\n */\r\nexport interface IFocusZone {\r\n  /**\r\n   * Sets focus to the first tabbable item in the zone.\r\n   * @param forceIntoFirstElement - If true, focus will be forced into the first element, even\r\n   * if focus is already in the focus zone.\r\n   * @returns True if focus could be set to an active element, false if no operation was taken.\r\n   */\r\n  focus(forceIntoFirstElement?: boolean): boolean;\r\n\r\n  /**\r\n   * Sets focus to a specific child element within the zone. This can be used in conjunction with\r\n   * onBeforeFocus to created delayed focus scenarios (like animate the scroll position to the correct\r\n   * location and then focus.)\r\n   * @param element - The child element within the zone to focus.\r\n   * @returns True if focus could be set to an active element, false if no operation was taken.\r\n   */\r\n  focusElement(childElement?: HTMLElement): boolean;\r\n}\r\n\r\n/**\r\n * FocusZone component props.\r\n * {@docCategory FocusZone}\r\n */\r\nexport interface IFocusZoneProps extends React.HTMLAttributes<HTMLElement | FocusZone> {\r\n  /**\r\n   * Optional callback to access the IFocusZone interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IFocusZone>;\r\n\r\n  /**\r\n   * Additional class name to provide on the root element, in addition to the ms-FocusZone class.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Defines which arrows to react to.\r\n   * @defaultvalue FocusZoneDirection.bidirectional\r\n   */\r\n  direction?: FocusZoneDirection;\r\n\r\n  /**\r\n   * Optionally provide a selector for identifying the intial active element.\r\n   */\r\n  defaultActiveElement?: string;\r\n\r\n  /**\r\n   * If set, the FocusZone will not be tabbable and keyboard navigation will be disabled.\r\n   * This does not affect disabled attribute of any child.\r\n   */\r\n  disabled?: boolean;\r\n\r\n  /**\r\n   * Element type the root element will use. Default is \"div\".\r\n   * @deprecated Use 'as' instead.\r\n   */\r\n  elementType?: keyof React.ReactHTML;\r\n\r\n  /**\r\n   * A component that should be used as the root element of the FocusZone component.\r\n   */\r\n  as?: React.ReactType;\r\n\r\n  /**\r\n   * If set, will cycle to the beginning of the targets once the user navigates to the\r\n   * next target while at the end, and to the end when navigate to the previous at the beginning.\r\n   */\r\n  isCircularNavigation?: boolean;\r\n\r\n  /**\r\n   * If provided, this callback will be executed on keypresses to determine if the user\r\n   * intends to navigate into the inner zone. Returning true will ask the first inner zone to\r\n   * set focus.\r\n   */\r\n  isInnerZoneKeystroke?: (ev: React.KeyboardEvent<HTMLElement>) => boolean;\r\n\r\n  /**\r\n   * Sets the aria-labelledby attribute.\r\n   */\r\n  ariaLabelledBy?: string;\r\n\r\n  /**\r\n   * Sets the aria-describedby attribute.\r\n   */\r\n  ariaDescribedBy?: string;\r\n\r\n  /**\r\n   * Callback for when one of immediate children elements gets active by getting focused\r\n   * or by having one of its respective children elements focused.\r\n   */\r\n  onActiveElementChanged?: (element?: HTMLElement, ev?: React.FocusEvent<HTMLElement>) => void;\r\n\r\n  /**\r\n   * Deprecated at v1.12.1. DIV props provided to the FocusZone will be mixed into the root element.\r\n   * @deprecated DIV props provided to the FocusZone will be mixed into the root element.\r\n   */\r\n  rootProps?: React.HTMLAttributes<HTMLDivElement>;\r\n\r\n  /**\r\n   * Callback method for determining if focus should indeed be set on the given element.\r\n   * @param element - The child element within the zone to focus.\r\n   * @returns True if focus should be set to the given element, false to avoid setting focus.\r\n   */\r\n  onBeforeFocus?: (childElement?: HTMLElement) => boolean;\r\n\r\n  /** Allow focus to move to root */\r\n  allowFocusRoot?: boolean;\r\n\r\n  /**\r\n   * Allows tab key to be handled to tab through a list of items in the focus zone,\r\n   * an unfortunate side effect is that users will not be able to tab out of the focus zone\r\n   * and have to hit escape or some other key.\r\n   * @deprecated Use `handleTabKey` instead.\r\n   *\r\n   */\r\n  allowTabKey?: boolean;\r\n\r\n  /**\r\n   * Allows tab key to be handled to tab through a list of items in the focus zone,\r\n   * an unfortunate side effect is that users will not be able to tab out of the focus zone\r\n   * and have to hit escape or some other key.\r\n   */\r\n  handleTabKey?: FocusZoneTabbableElements;\r\n\r\n  /**\r\n   * A callback method to determine if the input element should lose focus on arrow keys\r\n   *  @param inputElement - The input element which is to loose focus.\r\n   *  @returns True if input element should loose focus or false otherwise.\r\n   */\r\n  shouldInputLoseFocusOnArrowKey?: (inputElement: HTMLInputElement) => boolean;\r\n\r\n  /**\r\n   * Whether the to check for data-no-horizontal-wrap or data-no-vertical-wrap attributes\r\n   * when determining how to move focus\r\n   * @defaultvalue false\r\n   */\r\n  checkForNoWrap?: boolean;\r\n\r\n  /**\r\n   * Whether the FocusZone should allow focus events to propagate past the FocusZone\r\n   */\r\n  doNotAllowFocusEventToPropagate?: boolean;\r\n\r\n  /**\r\n   * Callback to notify creators that focus has been set on the FocusZone\r\n   */\r\n  onFocusNotification?: () => void;\r\n}\r\n\r\n/**\r\n * {@docCategory FocusZone}\r\n */\r\nexport const FocusZoneTabbableElements = {\r\n  /** Tabbing is not allowed */\r\n  none: 0 as 0,\r\n\r\n  /** All tabbing action is allowed */\r\n  all: 1 as 1,\r\n\r\n  /** Tabbing is allowed only on input elements */\r\n  inputOnly: 2 as 2\r\n};\r\n\r\n/**\r\n * {@docCategory FocusZone}\r\n */\r\nexport type FocusZoneTabbableElements = typeof FocusZoneTabbableElements[keyof typeof FocusZoneTabbableElements];\r\n\r\n/**\r\n * {@docCategory FocusZone}\r\n */\r\nexport enum FocusZoneDirection {\r\n  /** Only react to up/down arrows. */\r\n  vertical = 0,\r\n\r\n  /** Only react to left/right arrows. */\r\n  horizontal = 1,\r\n\r\n  /** React to all arrows. */\r\n  bidirectional = 2\r\n}\r\n","import * as React from 'react';\r\nimport { FocusZoneDirection, FocusZoneTabbableElements, IFocusZone, IFocusZoneProps } from './FocusZone.types';\r\nimport {\r\n  KeyCodes,\r\n  css,\r\n  elementContains,\r\n  getDocument,\r\n  getElementIndexPath,\r\n  getFocusableByIndexPath,\r\n  getId,\r\n  getNativeProps,\r\n  getNextElement,\r\n  getParent,\r\n  getPreviousElement,\r\n  getRTL,\r\n  htmlElementProperties,\r\n  initializeComponentRef,\r\n  isElementFocusSubZone,\r\n  isElementFocusZone,\r\n  isElementTabbable,\r\n  on,\r\n  raiseClick,\r\n  shouldWrapFocus,\r\n  warnDeprecations\r\n} from '../../Utilities';\r\n\r\nconst IS_FOCUSABLE_ATTRIBUTE = 'data-is-focusable';\r\nconst IS_ENTER_DISABLED_ATTRIBUTE = 'data-disable-click-on-enter';\r\nconst FOCUSZONE_ID_ATTRIBUTE = 'data-focuszone-id';\r\nconst TABINDEX = 'tabindex';\r\nconst NO_VERTICAL_WRAP = 'data-no-vertical-wrap';\r\nconst NO_HORIZONTAL_WRAP = 'data-no-horizontal-wrap';\r\nconst LARGE_DISTANCE_FROM_CENTER = 999999999;\r\nconst LARGE_NEGATIVE_DISTANCE_FROM_CENTER = -999999999;\r\n\r\nconst _allInstances: {\r\n  [key: string]: FocusZone;\r\n} = {};\r\nconst _outerZones: Set<FocusZone> = new Set();\r\n\r\ninterface IPoint {\r\n  left: number;\r\n  top: number;\r\n}\r\nconst ALLOWED_INPUT_TYPES = ['text', 'number', 'password', 'email', 'tel', 'url', 'search'];\r\n\r\nconst ALLOW_VIRTUAL_ELEMENTS = false;\r\n\r\nexport class FocusZone extends React.Component<IFocusZoneProps, {}> implements IFocusZone {\r\n  public static defaultProps: IFocusZoneProps = {\r\n    isCircularNavigation: false,\r\n    direction: FocusZoneDirection.bidirectional\r\n  };\r\n\r\n  private _disposables: Function[] = [];\r\n  private _root = React.createRef<HTMLElement>();\r\n  private _id: string;\r\n\r\n  /** The most recently focused child element. */\r\n  private _activeElement: HTMLElement | null;\r\n\r\n  /**\r\n   * The index path to the last focused child element.\r\n   */\r\n  private _lastIndexPath: number[] | undefined;\r\n\r\n  /**\r\n   * Flag to define when we've intentionally parked focus on the root element to temporarily\r\n   * hold focus until items appear within the zone.\r\n   */\r\n  private _isParked: boolean;\r\n\r\n  /** The child element with tabindex=0. */\r\n  private _defaultFocusElement: HTMLElement | null;\r\n  private _focusAlignment: IPoint;\r\n  private _isInnerZone: boolean;\r\n  private _parkedTabIndex: string | null | undefined;\r\n\r\n  /** Used to allow us to move to next focusable element even when we're focusing on a input element when pressing tab */\r\n  private _processingTabKey: boolean;\r\n\r\n  /** Used for testing purposes only. */\r\n  public static getOuterZones(): number {\r\n    return _outerZones.size;\r\n  }\r\n\r\n  constructor(props: IFocusZoneProps) {\r\n    super(props);\r\n\r\n    // Manage componentRef resolution.\r\n    initializeComponentRef(this);\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnDeprecations('FocusZone', props, {\r\n        rootProps: undefined,\r\n        allowTabKey: 'handleTabKey',\r\n        elementType: 'as'\r\n      });\r\n    }\r\n\r\n    this._id = getId('FocusZone');\r\n\r\n    this._focusAlignment = {\r\n      left: 0,\r\n      top: 0\r\n    };\r\n\r\n    this._processingTabKey = false;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    const { current: root } = this._root;\r\n\r\n    _allInstances[this._id] = this;\r\n\r\n    if (root) {\r\n      const windowElement = root.ownerDocument!.defaultView;\r\n\r\n      let parentElement = getParent(root, ALLOW_VIRTUAL_ELEMENTS);\r\n\r\n      while (parentElement && parentElement !== document.body && parentElement.nodeType === 1) {\r\n        if (isElementFocusZone(parentElement)) {\r\n          this._isInnerZone = true;\r\n          break;\r\n        }\r\n        parentElement = getParent(parentElement, ALLOW_VIRTUAL_ELEMENTS);\r\n      }\r\n\r\n      if (!this._isInnerZone) {\r\n        _outerZones.add(this);\r\n      }\r\n\r\n      if (windowElement && _outerZones.size === 1) {\r\n        this._disposables.push(on(windowElement, 'keydown', this._onKeyDownCapture, true));\r\n      }\r\n      this._disposables.push(on(root, 'blur', this._onBlur, true));\r\n\r\n      // Assign initial tab indexes so that we can set initial focus as appropriate.\r\n      this._updateTabIndexes();\r\n\r\n      if (this.props.defaultActiveElement) {\r\n        this._activeElement = getDocument()!.querySelector(this.props.defaultActiveElement) as HTMLElement;\r\n        this.focus();\r\n      }\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(): void {\r\n    const { current: root } = this._root;\r\n    const doc = getDocument(root);\r\n\r\n    if (doc && this._lastIndexPath && (doc.activeElement === doc.body || doc.activeElement === root)) {\r\n      // The element has been removed after the render, attempt to restore focus.\r\n      const elementToFocus = getFocusableByIndexPath(root as HTMLElement, this._lastIndexPath);\r\n\r\n      if (elementToFocus) {\r\n        this._setActiveElement(elementToFocus, true);\r\n        elementToFocus.focus();\r\n        this._setParkedFocus(false);\r\n      } else {\r\n        // We had a focus path to restore, but now that path is unresolvable. Park focus\r\n        // on the container until we can try again.\r\n        this._setParkedFocus(true);\r\n      }\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    delete _allInstances[this._id];\r\n\r\n    if (!this._isInnerZone) {\r\n      _outerZones.delete(this);\r\n    }\r\n\r\n    // Dispose all events.\r\n    this._disposables.forEach(d => d());\r\n  }\r\n\r\n  public render() {\r\n    const { rootProps, ariaDescribedBy, ariaLabelledBy, className } = this.props;\r\n    const divProps = getNativeProps(this.props, htmlElementProperties);\r\n\r\n    const Tag = this.props.as || this.props.elementType || 'div';\r\n\r\n    // Note, right before rendering/reconciling proceeds, we need to record if focus\r\n    // was in the zone before the update. This helper will track this and, if focus\r\n    // was actually in the zone, what the index path to the element is at this time.\r\n    // Then, later in componentDidUpdate, we can evaluate if we need to restore it in\r\n    // the case the element was removed.\r\n    this._evaluateFocusBeforeRender();\r\n\r\n    return (\r\n      <Tag\r\n        role=\"presentation\"\r\n        {...divProps}\r\n        {\r\n          // root props has been deprecated and should get removed.\r\n          // it needs to be marked as \"any\" since root props expects a div element, but really Tag can\r\n          // be any native element so typescript rightly flags this as a problem.\r\n          ...rootProps as any\r\n        }\r\n        className={css('ms-FocusZone', className)}\r\n        ref={this._root}\r\n        data-focuszone-id={this._id}\r\n        aria-labelledby={ariaLabelledBy}\r\n        aria-describedby={ariaDescribedBy}\r\n        onKeyDown={this._onKeyDown}\r\n        onFocus={this._onFocus}\r\n        onMouseDownCapture={this._onMouseDown}\r\n      >\r\n        {this.props.children}\r\n      </Tag>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Sets focus to the first tabbable item in the zone.\r\n   * @param forceIntoFirstElement - If true, focus will be forced into the first element, even\r\n   * if focus is already in the focus zone.\r\n   * @returns True if focus could be set to an active element, false if no operation was taken.\r\n   */\r\n  public focus(forceIntoFirstElement: boolean = false): boolean {\r\n    if (this._root.current) {\r\n      if (!forceIntoFirstElement && this._root.current.getAttribute(IS_FOCUSABLE_ATTRIBUTE) === 'true' && this._isInnerZone) {\r\n        const ownerZoneElement = this._getOwnerZone(this._root.current) as HTMLElement;\r\n\r\n        if (ownerZoneElement !== this._root.current) {\r\n          const ownerZone = _allInstances[ownerZoneElement.getAttribute(FOCUSZONE_ID_ATTRIBUTE) as string];\r\n\r\n          return !!ownerZone && ownerZone.focusElement(this._root.current);\r\n        }\r\n\r\n        return false;\r\n      } else if (\r\n        !forceIntoFirstElement &&\r\n        this._activeElement &&\r\n        elementContains(this._root.current, this._activeElement) &&\r\n        isElementTabbable(this._activeElement)\r\n      ) {\r\n        this._activeElement.focus();\r\n        return true;\r\n      } else {\r\n        const firstChild = this._root.current.firstChild as HTMLElement;\r\n\r\n        return this.focusElement(getNextElement(this._root.current, firstChild, true) as HTMLElement);\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Sets focus to a specific child element within the zone. This can be used in conjunction with\r\n   * onBeforeFocus to created delayed focus scenarios (like animate the scroll position to the correct\r\n   * location and then focus.)\r\n   * @param element - The child element within the zone to focus.\r\n   * @returns True if focus could be set to an active element, false if no operation was taken.\r\n   */\r\n  public focusElement(element: HTMLElement): boolean {\r\n    const { onBeforeFocus } = this.props;\r\n\r\n    if (onBeforeFocus && !onBeforeFocus(element)) {\r\n      return false;\r\n    }\r\n\r\n    if (element) {\r\n      this._setActiveElement(element);\r\n      if (this._activeElement) {\r\n        this._activeElement.focus();\r\n      }\r\n\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _evaluateFocusBeforeRender(): void {\r\n    const { current: root } = this._root;\r\n    const doc = getDocument(root);\r\n\r\n    if (doc) {\r\n      const focusedElement = doc.activeElement as HTMLElement;\r\n\r\n      // Only update the index path if we are not parked on the root.\r\n      if (focusedElement !== root) {\r\n        const shouldRestoreFocus = elementContains(root, focusedElement, false);\r\n\r\n        this._lastIndexPath = shouldRestoreFocus ? getElementIndexPath(root as HTMLElement, doc.activeElement as HTMLElement) : undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onFocus = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    const { onActiveElementChanged, doNotAllowFocusEventToPropagate, onFocusNotification } = this.props;\r\n    const isImmediateDescendant = this._isImmediateDescendantOfZone(ev.target as HTMLElement);\r\n    let newActiveElement: HTMLElement | undefined;\r\n\r\n    if (onFocusNotification) {\r\n      onFocusNotification();\r\n    }\r\n\r\n    if (isImmediateDescendant) {\r\n      newActiveElement = ev.target as HTMLElement;\r\n    } else {\r\n      let parentElement = ev.target as HTMLElement;\r\n\r\n      while (parentElement && parentElement !== this._root.current) {\r\n        if (isElementTabbable(parentElement) && this._isImmediateDescendantOfZone(parentElement)) {\r\n          newActiveElement = parentElement;\r\n          break;\r\n        }\r\n        parentElement = getParent(parentElement, ALLOW_VIRTUAL_ELEMENTS) as HTMLElement;\r\n      }\r\n    }\r\n\r\n    const initialElementFocused = !this._activeElement;\r\n\r\n    // If the new active element is a child of this zone and received focus,\r\n    // update alignment an immediate descendant\r\n    if (newActiveElement && newActiveElement !== this._activeElement) {\r\n      if (isImmediateDescendant || initialElementFocused) {\r\n        this._setFocusAlignment(newActiveElement, initialElementFocused);\r\n      }\r\n\r\n      this._activeElement = newActiveElement;\r\n\r\n      if (initialElementFocused) {\r\n        this._updateTabIndexes();\r\n      }\r\n    }\r\n\r\n    if (onActiveElementChanged) {\r\n      onActiveElementChanged(this._activeElement as HTMLElement, ev);\r\n    }\r\n\r\n    if (doNotAllowFocusEventToPropagate) {\r\n      ev.stopPropagation();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * When focus is in the zone at render time but then all focusable elements are removed,\r\n   * we \"park\" focus temporarily on the root. Once we update with focusable children, we restore\r\n   * focus to the closest path from previous. If the user tabs away from the parked container,\r\n   * we restore focusability to the pre-parked state.\r\n   */\r\n  private _setParkedFocus(isParked: boolean): void {\r\n    const { current: root } = this._root;\r\n\r\n    if (root && this._isParked !== isParked) {\r\n      this._isParked = isParked;\r\n\r\n      if (isParked) {\r\n        if (!this.props.allowFocusRoot) {\r\n          this._parkedTabIndex = root.getAttribute('tabindex');\r\n          root.setAttribute('tabindex', '-1');\r\n        }\r\n        root.focus();\r\n      } else {\r\n        if (!this.props.allowFocusRoot) {\r\n          if (this._parkedTabIndex) {\r\n            root.setAttribute('tabindex', this._parkedTabIndex);\r\n            this._parkedTabIndex = undefined;\r\n          } else {\r\n            root.removeAttribute('tabindex');\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onBlur = (): void => {\r\n    this._setParkedFocus(false);\r\n  };\r\n\r\n  /**\r\n   * Handle global tab presses so that we can patch tabindexes on the fly.\r\n   */\r\n  private _onKeyDownCapture = (ev: KeyboardEvent): void => {\r\n    if (ev.which === KeyCodes.tab) {\r\n      _outerZones.forEach(zone => zone._updateTabIndexes());\r\n    }\r\n  };\r\n\r\n  private _onMouseDown = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { disabled } = this.props;\r\n\r\n    if (disabled) {\r\n      return;\r\n    }\r\n\r\n    let target = ev.target as HTMLElement;\r\n    const path = [];\r\n\r\n    while (target && target !== this._root.current) {\r\n      path.push(target);\r\n      target = getParent(target, ALLOW_VIRTUAL_ELEMENTS) as HTMLElement;\r\n    }\r\n\r\n    while (path.length) {\r\n      target = path.pop() as HTMLElement;\r\n\r\n      if (target && isElementTabbable(target)) {\r\n        this._setActiveElement(target, true);\r\n      }\r\n\r\n      if (isElementFocusZone(target)) {\r\n        // Stop here since the focus zone will take care of its own children.\r\n        break;\r\n      }\r\n    }\r\n  };\r\n\r\n  private _setActiveElement(element: HTMLElement, forceAlignemnt?: boolean): void {\r\n    const previousActiveElement = this._activeElement;\r\n\r\n    this._activeElement = element;\r\n\r\n    if (previousActiveElement) {\r\n      if (isElementFocusZone(previousActiveElement)) {\r\n        this._updateTabIndexes(previousActiveElement);\r\n      }\r\n\r\n      previousActiveElement.tabIndex = -1;\r\n    }\r\n\r\n    if (this._activeElement) {\r\n      if (!this._focusAlignment || forceAlignemnt) {\r\n        this._setFocusAlignment(element, true, true);\r\n      }\r\n\r\n      this._activeElement.tabIndex = 0;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle the keystrokes.\r\n   */\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>): boolean | undefined => {\r\n    const { direction, disabled, isInnerZoneKeystroke } = this.props;\r\n\r\n    if (disabled) {\r\n      return;\r\n    }\r\n\r\n    if (this.props.onKeyDown) {\r\n      this.props.onKeyDown(ev);\r\n    }\r\n\r\n    // If the default has been prevented, do not process keyboard events.\r\n    if (ev.isDefaultPrevented()) {\r\n      return;\r\n    }\r\n\r\n    if (document.activeElement === this._root.current && this._isInnerZone) {\r\n      // If this element has focus, it is being controlled by a parent.\r\n      // Ignore the keystroke.\r\n      return;\r\n    }\r\n\r\n    if (isInnerZoneKeystroke && isInnerZoneKeystroke(ev) && this._isImmediateDescendantOfZone(ev.target as HTMLElement)) {\r\n      // Try to focus\r\n      const innerZone = this._getFirstInnerZone();\r\n\r\n      if (innerZone) {\r\n        if (!innerZone.focus(true)) {\r\n          return;\r\n        }\r\n      } else if (isElementFocusSubZone(ev.target as HTMLElement)) {\r\n        if (\r\n          !this.focusElement(getNextElement(\r\n            ev.target as HTMLElement,\r\n            (ev.target as HTMLElement).firstChild as HTMLElement,\r\n            true\r\n          ) as HTMLElement)\r\n        ) {\r\n          return;\r\n        }\r\n      } else {\r\n        return;\r\n      }\r\n    } else if (ev.altKey) {\r\n      return;\r\n    } else {\r\n      switch (ev.which) {\r\n        case KeyCodes.space:\r\n          if (this._tryInvokeClickForFocusable(ev.target as HTMLElement)) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.left:\r\n          if (direction !== FocusZoneDirection.vertical && this._moveFocusLeft()) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.right:\r\n          if (direction !== FocusZoneDirection.vertical && this._moveFocusRight()) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.up:\r\n          if (direction !== FocusZoneDirection.horizontal && this._moveFocusUp()) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.down:\r\n          if (direction !== FocusZoneDirection.horizontal && this._moveFocusDown()) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.tab:\r\n          if (\r\n            this.props.allowTabKey ||\r\n            this.props.handleTabKey === FocusZoneTabbableElements.all ||\r\n            (this.props.handleTabKey === FocusZoneTabbableElements.inputOnly && this._isElementInput(ev.target as HTMLElement))\r\n          ) {\r\n            let focusChanged = false;\r\n            this._processingTabKey = true;\r\n            if (\r\n              direction === FocusZoneDirection.vertical ||\r\n              !this._shouldWrapFocus(this._activeElement as HTMLElement, NO_HORIZONTAL_WRAP)\r\n            ) {\r\n              focusChanged = ev.shiftKey ? this._moveFocusUp() : this._moveFocusDown();\r\n            } else if (direction === FocusZoneDirection.horizontal || direction === FocusZoneDirection.bidirectional) {\r\n              const tabWithDirection = getRTL() ? !ev.shiftKey : ev.shiftKey;\r\n              focusChanged = tabWithDirection ? this._moveFocusLeft() : this._moveFocusRight();\r\n            }\r\n            this._processingTabKey = false;\r\n            if (focusChanged) {\r\n              break;\r\n            }\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.home:\r\n          if (this._isElementInput(ev.target as HTMLElement) && !this._shouldInputLoseFocus(ev.target as HTMLInputElement, false)) {\r\n            return false;\r\n          }\r\n          const firstChild = this._root.current && (this._root.current.firstChild as HTMLElement | null);\r\n          if (this._root.current && firstChild && this.focusElement(getNextElement(this._root.current, firstChild, true) as HTMLElement)) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.end:\r\n          if (this._isElementInput(ev.target as HTMLElement) && !this._shouldInputLoseFocus(ev.target as HTMLInputElement, true)) {\r\n            return false;\r\n          }\r\n\r\n          const lastChild = this._root.current && (this._root.current.lastChild as HTMLElement | null);\r\n          if (this._root.current && this.focusElement(getPreviousElement(this._root.current, lastChild, true, true, true) as HTMLElement)) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        case KeyCodes.enter:\r\n          if (this._tryInvokeClickForFocusable(ev.target as HTMLElement)) {\r\n            break;\r\n          }\r\n          return;\r\n\r\n        default:\r\n          return;\r\n      }\r\n    }\r\n\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n  };\r\n\r\n  /**\r\n   * Walk up the dom try to find a focusable element.\r\n   */\r\n  private _tryInvokeClickForFocusable(target: HTMLElement): boolean {\r\n    if (target === this._root.current) {\r\n      return false;\r\n    }\r\n\r\n    do {\r\n      if (target.tagName === 'BUTTON' || target.tagName === 'A' || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\r\n        return false;\r\n      }\r\n\r\n      if (\r\n        this._isImmediateDescendantOfZone(target) &&\r\n        target.getAttribute(IS_FOCUSABLE_ATTRIBUTE) === 'true' &&\r\n        target.getAttribute(IS_ENTER_DISABLED_ATTRIBUTE) !== 'true'\r\n      ) {\r\n        raiseClick(target);\r\n        return true;\r\n      }\r\n\r\n      target = getParent(target, ALLOW_VIRTUAL_ELEMENTS) as HTMLElement;\r\n    } while (target !== this._root.current);\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Traverse to find first child zone.\r\n   */\r\n  private _getFirstInnerZone(rootElement?: HTMLElement | null): FocusZone | null {\r\n    rootElement = rootElement || this._activeElement || this._root.current;\r\n\r\n    if (!rootElement) {\r\n      return null;\r\n    }\r\n\r\n    if (isElementFocusZone(rootElement)) {\r\n      return _allInstances[rootElement.getAttribute(FOCUSZONE_ID_ATTRIBUTE) as string];\r\n    }\r\n\r\n    let child = rootElement.firstElementChild as HTMLElement | null;\r\n\r\n    while (child) {\r\n      if (isElementFocusZone(child)) {\r\n        return _allInstances[child.getAttribute(FOCUSZONE_ID_ATTRIBUTE) as string];\r\n      }\r\n      const match = this._getFirstInnerZone(child);\r\n\r\n      if (match) {\r\n        return match;\r\n      }\r\n\r\n      child = child.nextElementSibling as HTMLElement | null;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private _moveFocus(\r\n    isForward: boolean,\r\n    getDistanceFromCenter: (activeRect: ClientRect, targetRect: ClientRect) => number,\r\n    ev?: Event,\r\n    useDefaultWrap: boolean = true\r\n  ): boolean {\r\n    let element = this._activeElement;\r\n    let candidateDistance = -1;\r\n    let candidateElement: HTMLElement | undefined = undefined;\r\n    let changedFocus = false;\r\n    const isBidirectional = this.props.direction === FocusZoneDirection.bidirectional;\r\n\r\n    if (!element || !this._root.current) {\r\n      return false;\r\n    }\r\n\r\n    if (this._isElementInput(element)) {\r\n      if (!this._shouldInputLoseFocus(element as HTMLInputElement, isForward)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    const activeRect = isBidirectional ? element.getBoundingClientRect() : null;\r\n\r\n    do {\r\n      element = (isForward ? getNextElement(this._root.current, element) : getPreviousElement(this._root.current, element)) as HTMLElement;\r\n\r\n      if (isBidirectional) {\r\n        if (element) {\r\n          const targetRect = element.getBoundingClientRect();\r\n          const elementDistance = getDistanceFromCenter(activeRect as ClientRect, targetRect);\r\n\r\n          if (elementDistance === -1 && candidateDistance === -1) {\r\n            candidateElement = element;\r\n            break;\r\n          }\r\n\r\n          if (elementDistance > -1 && (candidateDistance === -1 || elementDistance < candidateDistance)) {\r\n            candidateDistance = elementDistance;\r\n            candidateElement = element;\r\n          }\r\n\r\n          if (candidateDistance >= 0 && elementDistance < 0) {\r\n            break;\r\n          }\r\n        }\r\n      } else {\r\n        candidateElement = element;\r\n        break;\r\n      }\r\n    } while (element);\r\n\r\n    // Focus the closest candidate\r\n    if (candidateElement && candidateElement !== this._activeElement) {\r\n      changedFocus = true;\r\n      this.focusElement(candidateElement);\r\n    } else if (this.props.isCircularNavigation && useDefaultWrap) {\r\n      if (isForward) {\r\n        return this.focusElement(getNextElement(\r\n          this._root.current,\r\n          this._root.current.firstElementChild as HTMLElement,\r\n          true\r\n        ) as HTMLElement);\r\n      } else {\r\n        return this.focusElement(getPreviousElement(\r\n          this._root.current,\r\n          this._root.current.lastElementChild as HTMLElement,\r\n          true,\r\n          true,\r\n          true\r\n        ) as HTMLElement);\r\n      }\r\n    }\r\n\r\n    return changedFocus;\r\n  }\r\n\r\n  private _moveFocusDown(): boolean {\r\n    let targetTop = -1;\r\n    const leftAlignment = this._focusAlignment.left;\r\n\r\n    if (\r\n      this._moveFocus(true, (activeRect: ClientRect, targetRect: ClientRect) => {\r\n        let distance = -1;\r\n        // ClientRect values can be floats that differ by very small fractions of a decimal.\r\n        // If the difference between top and bottom are within a pixel then we should treat\r\n        // them as equivalent by using Math.floor. For instance 5.2222 and 5.222221 should be equivalent,\r\n        // but without Math.Floor they will be handled incorrectly.\r\n        const targetRectTop = Math.floor(targetRect.top);\r\n        const activeRectBottom = Math.floor(activeRect.bottom);\r\n\r\n        if (targetRectTop < activeRectBottom) {\r\n          if (!this._shouldWrapFocus(this._activeElement as HTMLElement, NO_VERTICAL_WRAP)) {\r\n            return LARGE_NEGATIVE_DISTANCE_FROM_CENTER;\r\n          }\r\n\r\n          return LARGE_DISTANCE_FROM_CENTER;\r\n        }\r\n\r\n        if ((targetTop === -1 && targetRectTop >= activeRectBottom) || targetRectTop === targetTop) {\r\n          targetTop = targetRectTop;\r\n          if (leftAlignment >= targetRect.left && leftAlignment <= targetRect.left + targetRect.width) {\r\n            distance = 0;\r\n          } else {\r\n            distance = Math.abs(targetRect.left + targetRect.width / 2 - leftAlignment);\r\n          }\r\n        }\r\n\r\n        return distance;\r\n      })\r\n    ) {\r\n      this._setFocusAlignment(this._activeElement as HTMLElement, false, true);\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _moveFocusUp(): boolean {\r\n    let targetTop = -1;\r\n    const leftAlignment = this._focusAlignment.left;\r\n\r\n    if (\r\n      this._moveFocus(false, (activeRect: ClientRect, targetRect: ClientRect) => {\r\n        let distance = -1;\r\n        // ClientRect values can be floats that differ by very small fractions of a decimal.\r\n        // If the difference between top and bottom are within a pixel then we should treat\r\n        // them as equivalent by using Math.floor. For instance 5.2222 and 5.222221 should be equivalent,\r\n        // but without Math.Floor they will be handled incorrectly.\r\n        const targetRectBottom = Math.floor(targetRect.bottom);\r\n        const targetRectTop = Math.floor(targetRect.top);\r\n        const activeRectTop = Math.floor(activeRect.top);\r\n\r\n        if (targetRectBottom > activeRectTop) {\r\n          if (!this._shouldWrapFocus(this._activeElement as HTMLElement, NO_VERTICAL_WRAP)) {\r\n            return LARGE_NEGATIVE_DISTANCE_FROM_CENTER;\r\n          }\r\n          return LARGE_DISTANCE_FROM_CENTER;\r\n        }\r\n\r\n        if ((targetTop === -1 && targetRectBottom <= activeRectTop) || targetRectTop === targetTop) {\r\n          targetTop = targetRectTop;\r\n          if (leftAlignment >= targetRect.left && leftAlignment <= targetRect.left + targetRect.width) {\r\n            distance = 0;\r\n          } else {\r\n            distance = Math.abs(targetRect.left + targetRect.width / 2 - leftAlignment);\r\n          }\r\n        }\r\n\r\n        return distance;\r\n      })\r\n    ) {\r\n      this._setFocusAlignment(this._activeElement as HTMLElement, false, true);\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _moveFocusLeft(): boolean {\r\n    const shouldWrap = this._shouldWrapFocus(this._activeElement as HTMLElement, NO_HORIZONTAL_WRAP);\r\n    if (\r\n      this._moveFocus(\r\n        getRTL(),\r\n        (activeRect: ClientRect, targetRect: ClientRect) => {\r\n          let distance = -1;\r\n          let topBottomComparison;\r\n\r\n          if (getRTL()) {\r\n            // When in RTL, this comparison should be the same as the one in _moveFocusRight for LTR.\r\n            // Going left at a leftmost rectangle will go down a line instead of up a line like in LTR.\r\n            // This is important, because we want to be comparing the top of the target rect\r\n            // with the bottom of the active rect.\r\n            topBottomComparison = targetRect.top.toFixed(3) < activeRect.bottom.toFixed(3);\r\n          } else {\r\n            topBottomComparison = targetRect.bottom.toFixed(3) > activeRect.top.toFixed(3);\r\n          }\r\n\r\n          if (topBottomComparison && targetRect.right <= activeRect.right && this.props.direction !== FocusZoneDirection.vertical) {\r\n            distance = activeRect.right - targetRect.right;\r\n          } else {\r\n            if (!shouldWrap) {\r\n              distance = LARGE_NEGATIVE_DISTANCE_FROM_CENTER;\r\n            }\r\n          }\r\n\r\n          return distance;\r\n        },\r\n        undefined /*ev*/,\r\n        shouldWrap\r\n      )\r\n    ) {\r\n      this._setFocusAlignment(this._activeElement as HTMLElement, true, false);\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _moveFocusRight(): boolean {\r\n    const shouldWrap = this._shouldWrapFocus(this._activeElement as HTMLElement, NO_HORIZONTAL_WRAP);\r\n    if (\r\n      this._moveFocus(\r\n        !getRTL(),\r\n        (activeRect: ClientRect, targetRect: ClientRect) => {\r\n          let distance = -1;\r\n          let topBottomComparison;\r\n\r\n          if (getRTL()) {\r\n            // When in RTL, this comparison should be the same as the one in _moveFocusLeft for LTR.\r\n            // Going right at a rightmost rectangle will go up a line instead of down a line like in LTR.\r\n            // This is important, because we want to be comparing the bottom of the target rect\r\n            // with the top of the active rect.\r\n            topBottomComparison = targetRect.bottom.toFixed(3) > activeRect.top.toFixed(3);\r\n          } else {\r\n            topBottomComparison = targetRect.top.toFixed(3) < activeRect.bottom.toFixed(3);\r\n          }\r\n\r\n          if (topBottomComparison && targetRect.left >= activeRect.left && this.props.direction !== FocusZoneDirection.vertical) {\r\n            distance = targetRect.left - activeRect.left;\r\n          } else if (!shouldWrap) {\r\n            distance = LARGE_NEGATIVE_DISTANCE_FROM_CENTER;\r\n          }\r\n\r\n          return distance;\r\n        },\r\n        undefined /*ev*/,\r\n        shouldWrap\r\n      )\r\n    ) {\r\n      this._setFocusAlignment(this._activeElement as HTMLElement, true, false);\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _setFocusAlignment(element: HTMLElement, isHorizontal?: boolean, isVertical?: boolean) {\r\n    if (this.props.direction === FocusZoneDirection.bidirectional && (!this._focusAlignment || isHorizontal || isVertical)) {\r\n      const rect = element.getBoundingClientRect();\r\n      const left = rect.left + rect.width / 2;\r\n      const top = rect.top + rect.height / 2;\r\n\r\n      if (!this._focusAlignment) {\r\n        this._focusAlignment = { left, top };\r\n      }\r\n\r\n      if (isHorizontal) {\r\n        this._focusAlignment.left = left;\r\n      }\r\n\r\n      if (isVertical) {\r\n        this._focusAlignment.top = top;\r\n      }\r\n    }\r\n  }\r\n\r\n  private _isImmediateDescendantOfZone(element?: HTMLElement): boolean {\r\n    return this._getOwnerZone(element) === this._root.current;\r\n  }\r\n\r\n  private _getOwnerZone(element?: HTMLElement): HTMLElement | null {\r\n    let parentElement = getParent(element as HTMLElement, ALLOW_VIRTUAL_ELEMENTS);\r\n\r\n    while (parentElement && parentElement !== this._root.current && parentElement !== document.body) {\r\n      if (isElementFocusZone(parentElement)) {\r\n        return parentElement;\r\n      }\r\n\r\n      parentElement = getParent(parentElement, ALLOW_VIRTUAL_ELEMENTS);\r\n    }\r\n\r\n    return this._root.current;\r\n  }\r\n\r\n  private _updateTabIndexes(element?: HTMLElement) {\r\n    if (!element && this._root.current) {\r\n      this._defaultFocusElement = null;\r\n      element = this._root.current;\r\n      if (this._activeElement && !elementContains(element, this._activeElement)) {\r\n        this._activeElement = null;\r\n      }\r\n    }\r\n\r\n    // If active element changes state to disabled, set it to null.\r\n    // Otherwise, we lose keyboard accessibility to other elements in focus zone.\r\n    if (this._activeElement && !isElementTabbable(this._activeElement)) {\r\n      this._activeElement = null;\r\n    }\r\n\r\n    const childNodes = element && element.children;\r\n\r\n    for (let childIndex = 0; childNodes && childIndex < childNodes.length; childIndex++) {\r\n      const child = childNodes[childIndex] as HTMLElement;\r\n\r\n      if (!isElementFocusZone(child)) {\r\n        // If the item is explicitly set to not be focusable then TABINDEX needs to be set to -1.\r\n        if (child.getAttribute && child.getAttribute(IS_FOCUSABLE_ATTRIBUTE) === 'false') {\r\n          child.setAttribute(TABINDEX, '-1');\r\n        }\r\n\r\n        if (isElementTabbable(child)) {\r\n          if (this.props.disabled) {\r\n            child.setAttribute(TABINDEX, '-1');\r\n          } else if (!this._isInnerZone && ((!this._activeElement && !this._defaultFocusElement) || this._activeElement === child)) {\r\n            this._defaultFocusElement = child;\r\n            if (child.getAttribute(TABINDEX) !== '0') {\r\n              child.setAttribute(TABINDEX, '0');\r\n            }\r\n          } else if (child.getAttribute(TABINDEX) !== '-1') {\r\n            child.setAttribute(TABINDEX, '-1');\r\n          }\r\n        } else if (child.tagName === 'svg' && child.getAttribute('focusable') !== 'false') {\r\n          // Disgusting IE hack. Sad face.\r\n          child.setAttribute('focusable', 'false');\r\n        }\r\n      } else if (child.getAttribute(IS_FOCUSABLE_ATTRIBUTE) === 'true') {\r\n        if (!this._isInnerZone && ((!this._activeElement && !this._defaultFocusElement) || this._activeElement === child)) {\r\n          this._defaultFocusElement = child;\r\n          if (child.getAttribute(TABINDEX) !== '0') {\r\n            child.setAttribute(TABINDEX, '0');\r\n          }\r\n        } else if (child.getAttribute(TABINDEX) !== '-1') {\r\n          child.setAttribute(TABINDEX, '-1');\r\n        }\r\n      }\r\n\r\n      this._updateTabIndexes(child);\r\n    }\r\n  }\r\n\r\n  private _isElementInput(element: HTMLElement): boolean {\r\n    if (element && element.tagName && (element.tagName.toLowerCase() === 'input' || element.tagName.toLowerCase() === 'textarea')) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  private _shouldInputLoseFocus(element: HTMLInputElement, isForward?: boolean) {\r\n    // If a tab was used, we want to focus on the next element.\r\n    if (!this._processingTabKey && element && element.type && ALLOWED_INPUT_TYPES.indexOf(element.type.toLowerCase()) > -1) {\r\n      const selectionStart = element.selectionStart;\r\n      const selectionEnd = element.selectionEnd;\r\n      const isRangeSelected = selectionStart !== selectionEnd;\r\n      const inputValue = element.value;\r\n\r\n      // We shouldn't lose focus in the following cases:\r\n      // 1. There is range selected.\r\n      // 2. When selection start is larger than 0 and it is backward.\r\n      // 3. when selection start is not the end of length and it is forward.\r\n      // 4. We press any of the arrow keys when our handleTabKey isn't none or undefined (only losing focus if we hit tab)\r\n      // and if shouldInputLoseFocusOnArrowKey is defined, if scenario prefers to not loose the focus which is determined by calling the\r\n      // callback shouldInputLoseFocusOnArrowKey\r\n      if (\r\n        isRangeSelected ||\r\n        (selectionStart! > 0 && !isForward) ||\r\n        (selectionStart !== inputValue.length && isForward) ||\r\n        (!!this.props.handleTabKey && !(this.props.shouldInputLoseFocusOnArrowKey && this.props.shouldInputLoseFocusOnArrowKey(element)))\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private _shouldWrapFocus(element: HTMLElement, noWrapDataAttribute: 'data-no-vertical-wrap' | 'data-no-horizontal-wrap'): boolean {\r\n    return !!this.props.checkForNoWrap ? shouldWrapFocus(element, noWrapDataAttribute) : true;\r\n  }\r\n}\r\n","import { IContextualMenuItem } from '../../index';\r\n\r\n/**\r\n * Determines the effective checked state of a menu item.\r\n *\r\n * @param item {IContextualMenuItem} to get the check state of.\r\n * @returns {true} if the item is checked.\r\n * @returns {false} if the item is unchecked.\r\n * @returns {null} if the item is not checkable.\r\n */\r\nexport function getIsChecked(item: IContextualMenuItem): boolean | null {\r\n  if (item.canCheck) {\r\n    return !!(item.isChecked || item.checked);\r\n  }\r\n\r\n  if (typeof item.isChecked === 'boolean') {\r\n    return item.isChecked;\r\n  }\r\n\r\n  if (typeof item.checked === 'boolean') {\r\n    return item.checked;\r\n  }\r\n\r\n  // Item is not checkable.\r\n  return null;\r\n}\r\n\r\nexport function hasSubmenu(item: IContextualMenuItem): boolean {\r\n  return !!(item.subMenuProps || item.items);\r\n}\r\n\r\nexport function isItemDisabled(item: IContextualMenuItem): boolean {\r\n  return !!(item.isDisabled || item.disabled);\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, hoistMethods, unhoistMethods } from '../../Utilities';\r\n\r\nexport class BaseDecorator<TProps, TState> extends BaseComponent<TProps, TState> {\r\n  // tslint:disable-next-line:typedef\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  protected _composedComponentInstance: React.Component<TProps, TState>;\r\n\r\n  private _hoisted: string[];\r\n\r\n  constructor(props: TProps) {\r\n    super(props);\r\n    this._updateComposedComponentRef = this._updateComposedComponentRef.bind(this);\r\n  }\r\n\r\n  /**\r\n   * Updates the ref to the component composed by the decorator, which will also take care of hoisting\r\n   * (and unhoisting as appropriate) methods from said component.\r\n   *\r\n   * Pass this method as the argument to the 'ref' property of the composed component.\r\n   */\r\n  protected _updateComposedComponentRef(composedComponentInstance: React.Component<TProps, TState>): void {\r\n    this._composedComponentInstance = composedComponentInstance;\r\n    if (composedComponentInstance) {\r\n      this._hoisted = hoistMethods(this, composedComponentInstance);\r\n    } else if (this._hoisted) {\r\n      unhoistMethods(this, this._hoisted);\r\n    }\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { BaseDecorator } from './BaseDecorator';\r\nimport { getWindow, hoistStatics } from '../../Utilities';\r\n\r\nexport interface IWithResponsiveModeState {\r\n  responsiveMode?: ResponsiveMode;\r\n}\r\n\r\nexport enum ResponsiveMode {\r\n  small = 0,\r\n  medium = 1,\r\n  large = 2,\r\n  xLarge = 3,\r\n  xxLarge = 4,\r\n  xxxLarge = 5\r\n}\r\n\r\nconst RESPONSIVE_MAX_CONSTRAINT = [479, 639, 1023, 1365, 1919, 99999999];\r\n\r\nlet _defaultMode: ResponsiveMode | undefined;\r\n\r\n/**\r\n * Allows a server rendered scenario to provide a default responsive mode.\r\n */\r\nexport function setResponsiveMode(responsiveMode: ResponsiveMode | undefined): void {\r\n  _defaultMode = responsiveMode;\r\n}\r\n\r\nexport function withResponsiveMode<TProps extends { responsiveMode?: ResponsiveMode }, TState>(\r\n  ComposedComponent: new (props: TProps, ...args: any[]) => React.Component<TProps, TState>\r\n): any {\r\n  const resultClass = class WithResponsiveMode extends BaseDecorator<TProps, IWithResponsiveModeState> {\r\n    constructor(props: TProps) {\r\n      super(props);\r\n      this._updateComposedComponentRef = this._updateComposedComponentRef.bind(this);\r\n\r\n      this.state = {\r\n        responsiveMode: this._getResponsiveMode()\r\n      };\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n      this._events.on(window, 'resize', () => {\r\n        const responsiveMode = this._getResponsiveMode();\r\n\r\n        if (responsiveMode !== this.state.responsiveMode) {\r\n          this.setState({\r\n            responsiveMode: responsiveMode\r\n          });\r\n        }\r\n      });\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n      this._events.dispose();\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const { responsiveMode } = this.state;\r\n\r\n      return <ComposedComponent ref={this._updateComposedComponentRef} responsiveMode={responsiveMode} {...this.props as any} />;\r\n    }\r\n\r\n    private _getResponsiveMode(): ResponsiveMode {\r\n      let responsiveMode = ResponsiveMode.small;\r\n      const win = getWindow();\r\n\r\n      if (typeof win !== 'undefined') {\r\n        try {\r\n          while (win.innerWidth > RESPONSIVE_MAX_CONSTRAINT[responsiveMode]) {\r\n            responsiveMode++;\r\n          }\r\n        } catch (e) {\r\n          // Return a best effort result in cases where we're in the browser but it throws on getting innerWidth.\r\n          responsiveMode = ResponsiveMode.large;\r\n        }\r\n      } else {\r\n        if (_defaultMode !== undefined) {\r\n          responsiveMode = _defaultMode;\r\n        } else {\r\n          throw new Error(\r\n            'Content was rendered in a server environment without providing a default responsive mode. ' +\r\n              'Call setResponsiveMode to define what the responsive mode is.'\r\n          );\r\n        }\r\n      }\r\n\r\n      return responsiveMode;\r\n    }\r\n  };\r\n  return hoistStatics(ComposedComponent, resultClass);\r\n}\r\n","import { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { IPoint } from './positioning.types';\r\nimport { IRectangle } from '../../Utilities';\r\n\r\nexport enum RectangleEdge {\r\n  top = 1,\r\n  bottom = -1,\r\n  left = 2,\r\n  right = -2\r\n}\r\n\r\nexport enum Position {\r\n  top = 0,\r\n  bottom = 1,\r\n  start = 2,\r\n  end = 3\r\n}\r\nexport interface IPositionProps {\r\n  target?: Element | MouseEvent | IPoint;\r\n  /** how the element should be positioned */\r\n  directionalHint?: DirectionalHint;\r\n  /**\r\n   * How the element should be positioned in RTL layouts.\r\n   * If not specified, a mirror of `directionalHint` will be used instead\r\n   */\r\n  directionalHintForRTL?: DirectionalHint;\r\n  /** The gap between the callout and the target */\r\n  gapSpace?: number;\r\n  /**\r\n   * The bounding rectangle for which  the contextual menu can appear in.\r\n   */\r\n  bounds?: IRectangle;\r\n  /**\r\n   * If true the position returned will have the menu element cover the target.\r\n   * If false then it will position next to the target;\r\n   */\r\n  coverTarget?: boolean;\r\n  /**\r\n   * If true the position will not change edges in an attempt to fit the rectangle within bounds.\r\n   * It will still attempt to align it to whatever bounds are given.\r\n   * @defaultvalue false\r\n   */\r\n  directionalHintFixed?: boolean;\r\n\r\n  /**\r\n   * If true the positioning logic will prefer flipping edges over nudging the rectangle to fit within bounds,\r\n   * thus making sure the the element align perfectly with target.\r\n   */\r\n  alignTargetEdge?: boolean;\r\n}\r\n\r\nexport interface ICalloutPositionProps extends IPositionProps {\r\n  /**\r\n   * The width of the beak.\r\n   */\r\n  beakWidth?: number;\r\n\r\n  /**\r\n   * Whether or not the beak is visible\r\n   */\r\n  isBeakVisible?: boolean;\r\n}\r\n\r\nexport interface IPositionedData {\r\n  /**\r\n   * The new position of the element.\r\n   */\r\n  elementPosition: IPosition;\r\n  /**\r\n   * The finalized target edge that element is aligning to. For instance RectangleEdge.bottom would mean\r\n   * that the bottom edge of the target is being aligned to by the RectangleEdge.top of the element\r\n   * that is being positioned.\r\n   */\r\n  targetEdge: RectangleEdge;\r\n  /**\r\n   * The finalized alignment edge that the element is aligning too. For instance, RectangleEdge.left means\r\n   * that the left edge of the target should be in line with the left edge of the element being positioned.\r\n   */\r\n  alignmentEdge?: RectangleEdge;\r\n}\r\n\r\nexport interface ICalloutPositionedInfo extends IPositionedData {\r\n  beakPosition: ICalloutBeakPositionedInfo;\r\n}\r\n\r\nexport interface ICalloutBeakPositionedInfo extends IPositionedData {\r\n  closestEdge: RectangleEdge;\r\n}\r\n\r\n/**\r\n * Gives the position of some element on the page. Only a pair of vertical and horizontal edges need to be\r\n * given. So top/left or bottom/left is sufficient.\r\n * The number given is the distance in pixels from whatever host was given..\r\n * So bottom: 100 would be 100px up from the bottom of the host while top: 100px from the top.\r\n */\r\nexport interface IPosition {\r\n  top?: number;\r\n  left?: number;\r\n  bottom?: number;\r\n  right?: number;\r\n  [key: string]: number | undefined;\r\n}\r\n\r\nexport interface IPoint {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\nexport interface IPositionDirectionalHintData {\r\n  targetEdge: RectangleEdge;\r\n  alignmentEdge?: RectangleEdge;\r\n  isAuto?: boolean;\r\n  alignTargetEdge?: boolean;\r\n}\r\n\r\nexport interface IRelativePositions {\r\n  calloutPosition: IPosition;\r\n  beakPosition: { position: IPosition | undefined; display: 'block' };\r\n  directionalClassName: string;\r\n  submenuDirection: DirectionalHint;\r\n}\r\n","import { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { getScrollbarWidth, getRTL, Rectangle as FullRectangle, IRectangle } from '../../Utilities';\r\nimport {\r\n  IPositionDirectionalHintData,\r\n  IPositionedData,\r\n  IPoint,\r\n  ICalloutPositionedInfo,\r\n  ICalloutBeakPositionedInfo,\r\n  IPositionProps,\r\n  ICalloutPositionProps,\r\n  RectangleEdge\r\n} from './positioning.types';\r\n\r\nexport class Rectangle extends FullRectangle {\r\n  [key: string]: number | boolean | any;\r\n}\r\n\r\nfunction _createPositionData(targetEdge: RectangleEdge, alignmentEdge?: RectangleEdge, isAuto?: boolean): IPositionDirectionalHintData {\r\n  return {\r\n    targetEdge: targetEdge,\r\n    alignmentEdge: alignmentEdge,\r\n    isAuto: isAuto\r\n  };\r\n}\r\n\r\n// Currently the beakPercent is set to 50 for all positions meaning that it should tend to the center of the target\r\nconst DirectionalDictionary: { [key: number]: IPositionDirectionalHintData } = {\r\n  [DirectionalHint.topLeftEdge]: _createPositionData(RectangleEdge.top, RectangleEdge.left),\r\n  [DirectionalHint.topCenter]: _createPositionData(RectangleEdge.top),\r\n  [DirectionalHint.topRightEdge]: _createPositionData(RectangleEdge.top, RectangleEdge.right),\r\n  [DirectionalHint.topAutoEdge]: _createPositionData(RectangleEdge.top, undefined, true),\r\n  [DirectionalHint.bottomLeftEdge]: _createPositionData(RectangleEdge.bottom, RectangleEdge.left),\r\n  [DirectionalHint.bottomCenter]: _createPositionData(RectangleEdge.bottom),\r\n  [DirectionalHint.bottomRightEdge]: _createPositionData(RectangleEdge.bottom, RectangleEdge.right),\r\n  [DirectionalHint.bottomAutoEdge]: _createPositionData(RectangleEdge.bottom, undefined, true),\r\n  [DirectionalHint.leftTopEdge]: _createPositionData(RectangleEdge.left, RectangleEdge.top),\r\n  [DirectionalHint.leftCenter]: _createPositionData(RectangleEdge.left),\r\n  [DirectionalHint.leftBottomEdge]: _createPositionData(RectangleEdge.left, RectangleEdge.bottom),\r\n  [DirectionalHint.rightTopEdge]: _createPositionData(RectangleEdge.right, RectangleEdge.top),\r\n  [DirectionalHint.rightCenter]: _createPositionData(RectangleEdge.right),\r\n  [DirectionalHint.rightBottomEdge]: _createPositionData(RectangleEdge.right, RectangleEdge.bottom)\r\n};\r\n\r\n/**\r\n * Do not call methods from this directly, use either positionCallout or positionElement or make another function that\r\n * utilizes them.\r\n * START Private functions and interfaces\r\n */\r\n\r\nexport interface IElementPosition {\r\n  elementRectangle: Rectangle;\r\n  targetEdge: RectangleEdge;\r\n  alignmentEdge: RectangleEdge | undefined;\r\n}\r\n\r\nexport interface IElementPositionInfo extends IElementPosition {\r\n  targetRectangle: Rectangle;\r\n}\r\n\r\ntype PartialIRectangle = Partial<IRectangle>;\r\n\r\ninterface IPartialIRectangle extends PartialIRectangle {\r\n  [key: string]: number | undefined;\r\n}\r\n\r\nfunction _isRectangleWithinBounds(rect: Rectangle, boundingRect: Rectangle): boolean {\r\n  if (rect.top < boundingRect.top) {\r\n    return false;\r\n  }\r\n  if (rect.bottom > boundingRect.bottom) {\r\n    return false;\r\n  }\r\n  if (rect.left < boundingRect.left) {\r\n    return false;\r\n  }\r\n  if (rect.right > boundingRect.right) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\n/**\r\n * Gets all of the edges of a rectangle that are outside of the given bounds.\r\n * If there are no out of bounds edges it returns an empty array.\r\n */\r\nfunction _getOutOfBoundsEdges(rect: Rectangle, boundingRect: Rectangle): RectangleEdge[] {\r\n  const outOfBounds: RectangleEdge[] = new Array<RectangleEdge>();\r\n\r\n  if (rect.top < boundingRect.top) {\r\n    outOfBounds.push(RectangleEdge.top);\r\n  }\r\n  if (rect.bottom > boundingRect.bottom) {\r\n    outOfBounds.push(RectangleEdge.bottom);\r\n  }\r\n  if (rect.left < boundingRect.left) {\r\n    outOfBounds.push(RectangleEdge.left);\r\n  }\r\n  if (rect.right > boundingRect.right) {\r\n    outOfBounds.push(RectangleEdge.right);\r\n  }\r\n\r\n  return outOfBounds;\r\n}\r\n\r\nfunction _getEdgeValue(rect: Rectangle, edge: RectangleEdge): number {\r\n  return rect[RectangleEdge[edge]];\r\n}\r\n\r\nfunction _setEdgeValue(rect: Rectangle, edge: RectangleEdge, value: number) {\r\n  rect[RectangleEdge[edge]] = value;\r\n  return rect;\r\n}\r\n\r\n/**\r\n * Returns the middle value of an edge. Only returns 1 value rather than xy coordinates as\r\n * the itself already contains the other coordinate.\r\n * For instance, a bottom edge's current value is it's y coordinate, so the number returned is the x.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {RectangleEdge} edge\r\n * @returns {number}\r\n */\r\nfunction _getCenterValue(rect: Rectangle, edge: RectangleEdge): number {\r\n  const edges = _getFlankingEdges(edge);\r\n  return (_getEdgeValue(rect, edges.positiveEdge) + _getEdgeValue(rect, edges.negativeEdge)) / 2;\r\n}\r\n\r\n/**\r\n * Flips the value depending on the edge.\r\n * If the edge is a \"positive\" edge, Top or Left, then the value should stay as it is.\r\n * If the edge is a \"negative\" edge, Bottom or Right, then the value should be flipped.\r\n * This is to account for the fact that the coordinates are effectively reveserved in certain cases for the \"negative\" edges.\r\n * For example, when testing to see if a bottom edge 1 is within the bounds of another bottom edge 2.\r\n * If edge 1 is greater than edge 2 then it is out of bounds. This is reversed for top edge 1 and top edge 2.\r\n * If top edge 1 is less than edge 2 then it is out of bounds.\r\n *\r\n *\r\n * @param {RectangleEdge} edge\r\n * @param {number} value\r\n * @returns {number}\r\n */\r\nfunction _getRelativeEdgeValue(edge: RectangleEdge, value: number): number {\r\n  if (edge > 0) {\r\n    return value;\r\n  } else {\r\n    return value * -1;\r\n  }\r\n}\r\n\r\nfunction _getRelativeRectEdgeValue(edge: RectangleEdge, rect: Rectangle): number {\r\n  return _getRelativeEdgeValue(edge, _getEdgeValue(rect, edge));\r\n}\r\n\r\nfunction _getRelativeEdgeDifference(rect: Rectangle, hostRect: Rectangle, edge: RectangleEdge): number {\r\n  const edgeDifference = _getEdgeValue(rect, edge) - _getEdgeValue(hostRect, edge);\r\n  return _getRelativeEdgeValue(edge, edgeDifference);\r\n}\r\n\r\n/**\r\n * Moves the edge of a rectangle to the value given. It only moves the edge in a linear direction based on that edge.\r\n * For example, if it's a bottom edge it will only change y coordinates.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {RectangleEdge} edge\r\n * @param {number} newValue\r\n * @returns {Rectangle}\r\n */\r\nfunction _moveEdge(rect: Rectangle, edge: RectangleEdge, newValue: number): Rectangle {\r\n  const difference = _getEdgeValue(rect, edge) - newValue;\r\n  rect = _setEdgeValue(rect, edge, newValue);\r\n  rect = _setEdgeValue(rect, edge * -1, _getEdgeValue(rect, edge * -1) - difference);\r\n  return rect;\r\n}\r\n\r\n/**\r\n * Aligns the edge on the passed in rect to the target. If there is a gap then it will have that space between the two.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {Rectangle} target\r\n * @param {RectangleEdge} edge\r\n * @param {number} [gap=0]\r\n * @returns {Rectangle}\r\n */\r\nfunction _alignEdges(rect: Rectangle, target: Rectangle, edge: RectangleEdge, gap: number = 0): Rectangle {\r\n  return _moveEdge(rect, edge, _getEdgeValue(target, edge) + _getRelativeEdgeValue(edge, gap));\r\n}\r\n\r\n/**\r\n * Aligns the targetEdge on the passed in target to the rects corresponding opposite edge.\r\n * For instance if targetEdge is bottom, then the rects top will be moved to match it.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {Rectangle} target\r\n * @param {RectangleEdge} targetEdge\r\n * @param {number} [gap=0]\r\n * @returns {Rectangle}\r\n */\r\nfunction _alignOppositeEdges(rect: Rectangle, target: Rectangle, targetEdge: RectangleEdge, gap: number = 0): Rectangle {\r\n  const oppositeEdge = targetEdge * -1;\r\n  const adjustedGap = _getRelativeEdgeValue(oppositeEdge, gap);\r\n  return _moveEdge(rect, targetEdge * -1, _getEdgeValue(target, targetEdge) + adjustedGap);\r\n}\r\n\r\n/**\r\n * Tests to see if the given edge is within the bounds of the given rectangle.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {Rectangle} bounds\r\n * @param {RectangleEdge} edge\r\n * @returns {boolean}\r\n */\r\nfunction _isEdgeInBounds(rect: Rectangle, bounds: Rectangle, edge: RectangleEdge): boolean {\r\n  const adjustedRectValue = _getRelativeRectEdgeValue(edge, rect);\r\n  return adjustedRectValue > _getRelativeRectEdgeValue(edge, bounds);\r\n}\r\n\r\n/**\r\n * Attempts to move the rectangle through various sides of the target to find a place to fit.\r\n * If no fit is found, the original position should be returned.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {Rectangle} target\r\n * @param {Rectangle} bounding\r\n * @param {IPositionDirectionalHintData} positionData\r\n * @param {number} [gap=0]\r\n * @returns {IElementPosition}\r\n */\r\nfunction _flipToFit(\r\n  rect: Rectangle,\r\n  target: Rectangle,\r\n  bounding: Rectangle,\r\n  positionData: IPositionDirectionalHintData,\r\n  gap: number = 0\r\n): IElementPosition {\r\n  const directions: RectangleEdge[] = [RectangleEdge.left, RectangleEdge.right, RectangleEdge.bottom, RectangleEdge.top];\r\n  let currentEstimate = rect;\r\n  let currentEdge = positionData.targetEdge;\r\n  let currentAlignment = positionData.alignmentEdge;\r\n  // Keep switching sides until one is found with enough space. If all sides don't fit then return the unmodified element.\r\n  for (let i = 0; i < 4; i++) {\r\n    if (!_isEdgeInBounds(currentEstimate, bounding, currentEdge)) {\r\n      directions.splice(directions.indexOf(currentEdge), 1);\r\n      if (directions.indexOf(currentEdge * -1) > -1) {\r\n        currentEdge = currentEdge * -1;\r\n      } else {\r\n        currentAlignment = currentEdge;\r\n        currentEdge = directions.slice(-1)[0];\r\n      }\r\n      currentEstimate = _estimatePosition(rect, target, { targetEdge: currentEdge, alignmentEdge: currentAlignment }, gap);\r\n    } else {\r\n      return {\r\n        elementRectangle: currentEstimate,\r\n        targetEdge: currentEdge,\r\n        alignmentEdge: currentAlignment\r\n      };\r\n    }\r\n  }\r\n  return {\r\n    elementRectangle: rect,\r\n    targetEdge: positionData.targetEdge,\r\n    alignmentEdge: currentAlignment\r\n  };\r\n}\r\n\r\n/**\r\n * Flips only the alignment edge of an element rectangle. This is used instead of nudging the alignment edges into position,\r\n * when alignTargetEdge is specified.\r\n * @param elementEstimate\r\n * @param target\r\n * @param bounding\r\n * @param gap\r\n */\r\nfunction _flipAlignmentEdge(elementEstimate: IElementPosition, target: Rectangle, gap: number, coverTarget?: boolean): IElementPosition {\r\n  const { alignmentEdge, targetEdge, elementRectangle } = elementEstimate;\r\n  const oppositeEdge = alignmentEdge! * -1;\r\n  const newEstimate = _estimatePosition(\r\n    elementRectangle,\r\n    target,\r\n    { targetEdge: targetEdge, alignmentEdge: oppositeEdge },\r\n    gap,\r\n    coverTarget\r\n  );\r\n\r\n  return {\r\n    elementRectangle: newEstimate,\r\n    targetEdge: targetEdge,\r\n    alignmentEdge: oppositeEdge\r\n  };\r\n}\r\n\r\n/**\r\n * Adjusts a element rectangle to fit within the bounds given. If directionalHintFixed or covertarget is passed in\r\n * then the element will not flip sides on the target. They will, however, be nudged to fit within the bounds given.\r\n *\r\n * @param {Rectangle} element\r\n * @param {Rectangle} target\r\n * @param {Rectangle} bounding\r\n * @param {IPositionDirectionalHintData} positionData\r\n * @param {number} [gap=0]\r\n * @param {boolean} [directionalHintFixed]\r\n * @param {boolean} [coverTarget]\r\n * @returns {IElementPosition}\r\n */\r\nfunction _adjustFitWithinBounds(\r\n  element: Rectangle,\r\n  target: Rectangle,\r\n  bounding: Rectangle,\r\n  positionData: IPositionDirectionalHintData,\r\n  gap: number = 0,\r\n  directionalHintFixed?: boolean,\r\n  coverTarget?: boolean\r\n): IElementPosition {\r\n  const { alignmentEdge, alignTargetEdge } = positionData;\r\n  let elementEstimate: IElementPosition = {\r\n    elementRectangle: element,\r\n    targetEdge: positionData.targetEdge,\r\n    alignmentEdge: alignmentEdge\r\n  };\r\n\r\n  if (!directionalHintFixed && !coverTarget) {\r\n    elementEstimate = _flipToFit(element, target, bounding, positionData, gap);\r\n  }\r\n\r\n  const outOfBounds = _getOutOfBoundsEdges(element, bounding);\r\n\r\n  if (alignTargetEdge) {\r\n    // The edge opposite to the alignment edge might be out of bounds. Flip alignment to see if we can get it within bounds.\r\n    if (elementEstimate.alignmentEdge && outOfBounds.indexOf(elementEstimate.alignmentEdge * -1) > -1) {\r\n      const flippedElementEstimate = _flipAlignmentEdge(elementEstimate, target, gap, coverTarget);\r\n      if (_isRectangleWithinBounds(flippedElementEstimate.elementRectangle, bounding)) {\r\n        return flippedElementEstimate;\r\n      }\r\n    }\r\n  } else {\r\n    for (const direction of outOfBounds) {\r\n      elementEstimate.elementRectangle = _alignEdges(elementEstimate.elementRectangle, bounding, direction);\r\n    }\r\n  }\r\n\r\n  return elementEstimate;\r\n}\r\n\r\n/**\r\n * Moves the middle point on an edge to the point given.\r\n * Only moves in one direction. For instance if a bottom edge is passed in, then\r\n * the bottom edge will be moved in the x axis to match the point.\r\n *\r\n * @param {Rectangle} rect\r\n * @param {RectangleEdge} edge\r\n * @param {number} point\r\n * @returns {Rectangle}\r\n */\r\nfunction _centerEdgeToPoint(rect: Rectangle, edge: RectangleEdge, point: number): Rectangle {\r\n  const { positiveEdge } = _getFlankingEdges(edge);\r\n  const elementMiddle = _getCenterValue(rect, edge);\r\n  const distanceToMiddle = elementMiddle - _getEdgeValue(rect, positiveEdge);\r\n  return _moveEdge(rect, positiveEdge, point - distanceToMiddle);\r\n}\r\n\r\n/**\r\n * Moves the element rectangle to be appropriately positioned relative to a given target.\r\n * Does not flip or adjust the element.\r\n *\r\n * @param {Rectangle} elementToPosition\r\n * @param {Rectangle} target\r\n * @param {IPositionDirectionalHintData} positionData\r\n * @param {number} [gap=0]\r\n * @param {boolean} [coverTarget]\r\n * @returns {Rectangle}\r\n */\r\nfunction _estimatePosition(\r\n  elementToPosition: Rectangle,\r\n  target: Rectangle,\r\n  positionData: IPositionDirectionalHintData,\r\n  gap: number = 0,\r\n  coverTarget?: boolean\r\n): Rectangle {\r\n  let estimatedElementPosition: Rectangle;\r\n  const { alignmentEdge, targetEdge } = positionData;\r\n  const elementEdge = coverTarget ? targetEdge : targetEdge * -1;\r\n  estimatedElementPosition = coverTarget\r\n    ? _alignEdges(elementToPosition, target, targetEdge, gap)\r\n    : _alignOppositeEdges(elementToPosition, target, targetEdge, gap);\r\n  // if no alignment edge is provided it's supposed to be centered.\r\n  if (!alignmentEdge) {\r\n    const targetMiddlePoint = _getCenterValue(target, targetEdge);\r\n    estimatedElementPosition = _centerEdgeToPoint(estimatedElementPosition, elementEdge, targetMiddlePoint);\r\n  } else {\r\n    estimatedElementPosition = _alignEdges(estimatedElementPosition, target, alignmentEdge);\r\n  }\r\n\r\n  return estimatedElementPosition;\r\n}\r\n\r\n/**\r\n * Returns the non-opposite edges of the target edge.\r\n * For instance if bottom is passed in then left and right will be returned.\r\n *\r\n * @param {RectangleEdge} edge\r\n * @returns {{ firstEdge: RectangleEdge, secondEdge: RectangleEdge }}\r\n */\r\nfunction _getFlankingEdges(edge: RectangleEdge): { positiveEdge: RectangleEdge; negativeEdge: RectangleEdge } {\r\n  if (edge === RectangleEdge.top || edge === RectangleEdge.bottom) {\r\n    return {\r\n      positiveEdge: RectangleEdge.left,\r\n      negativeEdge: RectangleEdge.right\r\n    };\r\n  } else {\r\n    return {\r\n      positiveEdge: RectangleEdge.top,\r\n      negativeEdge: RectangleEdge.bottom\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Retrieve the final value for the return edge of elementRectangle.\r\n * If the elementRectangle is closer to one side of the bounds versus the other, the return edge is flipped to grow inward.\r\n *\r\n * @param elementRectangle\r\n * @param targetEdge\r\n * @param bounds\r\n */\r\nfunction _finalizeReturnEdge(elementRectangle: Rectangle, returnEdge: RectangleEdge, bounds?: Rectangle): RectangleEdge {\r\n  if (\r\n    bounds &&\r\n    Math.abs(_getRelativeEdgeDifference(elementRectangle, bounds, returnEdge)) >\r\n      Math.abs(_getRelativeEdgeDifference(elementRectangle, bounds, returnEdge * -1))\r\n  ) {\r\n    return returnEdge * -1;\r\n  }\r\n\r\n  return returnEdge;\r\n}\r\n\r\n/**\r\n * Finalizes the element positon based on the hostElement. Only returns the\r\n * rectangle values to position such that they are anchored to the target.\r\n * This helps prevent resizing from looking very strange.\r\n * For instance, if the target edge is top and aligned with the left side then\r\n * the bottom and left values are returned so as the callou shrinks it shrinks towards that corner.\r\n *\r\n * @param {Rectangle} elementRectangle\r\n * @param {HTMLElement} hostElement\r\n * @param {RectangleEdge} targetEdge\r\n * @param {RectangleEdge} bounds\r\n * @param {RectangleEdge} [alignmentEdge]\r\n * @param {boolean} coverTarget\r\n * @returns {IPartialIRectangle}\r\n */\r\nfunction _finalizeElementPosition(\r\n  elementRectangle: Rectangle,\r\n  hostElement: HTMLElement,\r\n  targetEdge: RectangleEdge,\r\n  bounds?: Rectangle,\r\n  alignmentEdge?: RectangleEdge,\r\n  coverTarget?: boolean\r\n): IPartialIRectangle {\r\n  const returnValue: IPartialIRectangle = {};\r\n\r\n  const hostRect: Rectangle = _getRectangleFromElement(hostElement);\r\n  const elementEdge = coverTarget ? targetEdge : targetEdge * -1;\r\n  const elementEdgeString = RectangleEdge[elementEdge];\r\n  const returnEdge = _finalizeReturnEdge(\r\n    elementRectangle,\r\n    alignmentEdge ? alignmentEdge : _getFlankingEdges(targetEdge).positiveEdge,\r\n    bounds\r\n  );\r\n\r\n  returnValue[elementEdgeString] = _getRelativeEdgeDifference(elementRectangle, hostRect, elementEdge);\r\n  returnValue[RectangleEdge[returnEdge]] = _getRelativeEdgeDifference(elementRectangle, hostRect, returnEdge);\r\n\r\n  return returnValue;\r\n}\r\n\r\n// Since the beak is rotated 45 degrees the actual height/width is the length of the diagonal.\r\n// We still want to position the beak based on it's midpoint which does not change. It will\r\n// be at (beakwidth / 2, beakwidth / 2)\r\nfunction _calculateActualBeakWidthInPixels(beakWidth: number): number {\r\n  return Math.sqrt(beakWidth * beakWidth * 2);\r\n}\r\n\r\n/**\r\n * Returns the appropriate IPositionData based on the props altered for RTL.\r\n * If directionalHintForRTL is passed in that is used if the page is RTL.\r\n * If a directionalHint is specified and no directionalHintForRTL is available and the page is RTL the hint will be flipped.\r\n * For instance bottomLeftEdge would become bottomRightEdge.\r\n * If there is no directionalHint passed in bottomAutoEdge is chosen automatically.\r\n *\r\n * @param {IPositionProps} props\r\n * @returns {IPositionDirectionalHintData}\r\n */\r\nfunction _getPositionData(\r\n  directionalHint: DirectionalHint = DirectionalHint.bottomAutoEdge,\r\n  directionalHintForRTL?: DirectionalHint,\r\n  previousPositions?: IPositionDirectionalHintData\r\n): IPositionDirectionalHintData {\r\n  if (previousPositions) {\r\n    return {\r\n      alignmentEdge: previousPositions.alignmentEdge,\r\n      isAuto: previousPositions.isAuto,\r\n      targetEdge: previousPositions.targetEdge\r\n    };\r\n  }\r\n  const positionInformation: IPositionDirectionalHintData = { ...DirectionalDictionary[directionalHint] };\r\n  if (getRTL()) {\r\n    // If alignment edge exists and that alignment edge is -2 or 2, right or left, then flip it.\r\n    if (positionInformation.alignmentEdge && positionInformation.alignmentEdge % 2 === 0) {\r\n      positionInformation.alignmentEdge = positionInformation.alignmentEdge * -1;\r\n    }\r\n\r\n    return directionalHintForRTL !== undefined ? DirectionalDictionary[directionalHintForRTL] : positionInformation;\r\n  }\r\n  return positionInformation;\r\n}\r\n\r\n/**\r\n * Get's the alignment data for the given information. This only really matters if the positioning is Auto.\r\n * If it is auto then the alignmentEdge should be chosen based on the target edge's position relative to\r\n * the center of the page.\r\n *\r\n * @param {IPositionDirectionalHintData} positionData\r\n * @param {Rectangle} target\r\n * @param {Rectangle} boundingRect\r\n * @param {boolean} [coverTarget]\r\n * @returns {IPositionDirectionalHintData}\r\n */\r\nfunction _getAlignmentData(\r\n  positionData: IPositionDirectionalHintData,\r\n  target: Rectangle,\r\n  boundingRect: Rectangle,\r\n  coverTarget?: boolean,\r\n  alignTargetEdge?: boolean\r\n): IPositionDirectionalHintData {\r\n  if (positionData.isAuto) {\r\n    positionData.alignmentEdge = getClosestEdge(positionData.targetEdge, target, boundingRect);\r\n  }\r\n\r\n  positionData.alignTargetEdge = alignTargetEdge;\r\n  return positionData;\r\n}\r\n\r\nfunction getClosestEdge(targetEdge: RectangleEdge, target: Rectangle, boundingRect: Rectangle): RectangleEdge {\r\n  const targetCenter: number = _getCenterValue(target, targetEdge);\r\n  const boundingCenter: number = _getCenterValue(boundingRect, targetEdge);\r\n  const { positiveEdge, negativeEdge } = _getFlankingEdges(targetEdge);\r\n  if (targetCenter <= boundingCenter) {\r\n    return positiveEdge;\r\n  } else {\r\n    return negativeEdge;\r\n  }\r\n}\r\n\r\nfunction _positionElementWithinBounds(\r\n  elementToPosition: Rectangle,\r\n  target: Rectangle,\r\n  bounding: Rectangle,\r\n  positionData: IPositionDirectionalHintData,\r\n  gap: number,\r\n  directionalHintFixed?: boolean,\r\n  coverTarget?: boolean\r\n): IElementPosition {\r\n  const estimatedElementPosition: Rectangle = _estimatePosition(elementToPosition, target, positionData, gap, coverTarget);\r\n  if (_isRectangleWithinBounds(estimatedElementPosition, bounding)) {\r\n    return {\r\n      elementRectangle: estimatedElementPosition,\r\n      targetEdge: positionData.targetEdge,\r\n      alignmentEdge: positionData.alignmentEdge\r\n    };\r\n  } else {\r\n    return _adjustFitWithinBounds(elementToPosition, target, bounding, positionData, gap, directionalHintFixed, coverTarget);\r\n  }\r\n}\r\n\r\nfunction _finalizeBeakPosition(\r\n  elementPosition: IElementPosition,\r\n  positionedBeak: Rectangle,\r\n  bounds?: Rectangle\r\n): ICalloutBeakPositionedInfo {\r\n  const targetEdge = elementPosition.targetEdge * -1;\r\n  // The \"host\" element that we will use to help position the beak.\r\n  const actualElement = new Rectangle(0, elementPosition.elementRectangle.width, 0, elementPosition.elementRectangle.height);\r\n  const returnValue: IPartialIRectangle = {};\r\n  const returnEdge = _finalizeReturnEdge(\r\n    elementPosition.elementRectangle,\r\n    elementPosition.alignmentEdge ? elementPosition.alignmentEdge : _getFlankingEdges(targetEdge).positiveEdge,\r\n    bounds\r\n  );\r\n\r\n  returnValue[RectangleEdge[targetEdge]] = _getEdgeValue(positionedBeak, targetEdge);\r\n  returnValue[RectangleEdge[returnEdge]] = _getRelativeEdgeDifference(positionedBeak, actualElement, returnEdge);\r\n\r\n  return {\r\n    elementPosition: { ...returnValue },\r\n    closestEdge: getClosestEdge(elementPosition.targetEdge, positionedBeak, actualElement),\r\n    targetEdge: targetEdge\r\n  };\r\n}\r\n\r\nfunction _positionBeak(beakWidth: number, elementPosition: IElementPositionInfo): Rectangle {\r\n  const target = elementPosition.targetRectangle;\r\n  /**\r\n   * Note about beak positioning: The actual beak width only matters for getting the gap between the callout and\r\n   * target, it does not impact the beak placement within the callout. For example example, if the beakWidth is 8,\r\n   * then the actual beakWidth is sqrroot(8^2 + 8^2) = 11.31x11.31. So the callout will need to be an extra 3 pixels\r\n   * away from its target. While the beak is being positioned in the callout it still acts as though it were 8x8.\r\n   * */\r\n  const { positiveEdge, negativeEdge } = _getFlankingEdges(elementPosition.targetEdge);\r\n  const beakTargetPoint = _getCenterValue(target, elementPosition.targetEdge);\r\n  const elementBounds = new Rectangle(\r\n    beakWidth / 2,\r\n    elementPosition.elementRectangle.width - beakWidth / 2,\r\n    beakWidth / 2,\r\n    elementPosition.elementRectangle.height - beakWidth / 2\r\n  );\r\n\r\n  let beakPositon: Rectangle = new Rectangle(0, beakWidth, 0, beakWidth);\r\n\r\n  beakPositon = _moveEdge(beakPositon, elementPosition.targetEdge * -1, -beakWidth / 2);\r\n\r\n  beakPositon = _centerEdgeToPoint(\r\n    beakPositon,\r\n    elementPosition.targetEdge * -1,\r\n    beakTargetPoint - _getRelativeRectEdgeValue(positiveEdge, elementPosition.elementRectangle)\r\n  );\r\n\r\n  if (!_isEdgeInBounds(beakPositon, elementBounds, positiveEdge)) {\r\n    beakPositon = _alignEdges(beakPositon, elementBounds, positiveEdge);\r\n  } else if (!_isEdgeInBounds(beakPositon, elementBounds, negativeEdge)) {\r\n    beakPositon = _alignEdges(beakPositon, elementBounds, negativeEdge);\r\n  }\r\n\r\n  return beakPositon;\r\n}\r\n\r\nfunction _getRectangleFromElement(element: Element): Rectangle {\r\n  const clientRect: ClientRect = element.getBoundingClientRect();\r\n\r\n  return new Rectangle(clientRect.left, clientRect.right, clientRect.top, clientRect.bottom);\r\n}\r\n\r\nfunction _getRectangleFromIRect(rect: IRectangle): Rectangle {\r\n  return new Rectangle(rect.left, rect.right, rect.top, rect.bottom);\r\n}\r\n\r\nfunction _getTargetRect(bounds: Rectangle, target: Element | MouseEvent | IPoint | undefined): Rectangle {\r\n  let targetRectangle: Rectangle;\r\n  if (target) {\r\n    if ((target as MouseEvent).preventDefault) {\r\n      const ev = target as MouseEvent;\r\n      targetRectangle = new Rectangle(ev.clientX, ev.clientX, ev.clientY, ev.clientY);\r\n    } else if ((target as Element).getBoundingClientRect) {\r\n      targetRectangle = _getRectangleFromElement(target as Element);\r\n      // HTMLImgElements can have x and y values. The check for it being a point must go last.\r\n    } else {\r\n      const point: IPoint = target as IPoint;\r\n      targetRectangle = new Rectangle(point.x, point.x, point.y, point.y);\r\n    }\r\n\r\n    if (!_isRectangleWithinBounds(targetRectangle, bounds)) {\r\n      const outOfBounds: RectangleEdge[] = _getOutOfBoundsEdges(targetRectangle, bounds);\r\n\r\n      for (const direction of outOfBounds) {\r\n        (targetRectangle as any)[RectangleEdge[direction]] = (bounds as any)[RectangleEdge[direction]];\r\n      }\r\n    }\r\n  } else {\r\n    targetRectangle = new Rectangle(0, 0, 0, 0);\r\n  }\r\n\r\n  return targetRectangle;\r\n}\r\n\r\n/**\r\n * If max height is less than zero it returns the bounds height instead.\r\n */\r\nfunction _getMaxHeightFromTargetRectangle(\r\n  targetRectangle: Rectangle,\r\n  targetEdge: DirectionalHint,\r\n  gapSpace: number,\r\n  bounds: Rectangle,\r\n  coverTarget?: boolean\r\n) {\r\n  let maxHeight = 0;\r\n  const directionalHint = DirectionalDictionary[targetEdge];\r\n\r\n  // If cover target is set, then the max height should be calculated using the opposite of the target edge since\r\n  // that's the direction that the callout will expand in.\r\n  // For instance, if the directionalhint is bottomLeftEdge then the callout will position so it's bottom edge\r\n  // is aligned with the bottom of the target and expand up towards the top of the screen and the calculated max height\r\n  // is (bottom of target) - (top of screen) - gapSpace.\r\n  const target = coverTarget ? directionalHint.targetEdge * -1 : directionalHint.targetEdge;\r\n\r\n  if (target === RectangleEdge.top) {\r\n    maxHeight = _getEdgeValue(targetRectangle, directionalHint.targetEdge) - bounds.top - gapSpace;\r\n  } else if (target === RectangleEdge.bottom) {\r\n    maxHeight = bounds.bottom - _getEdgeValue(targetRectangle, directionalHint.targetEdge) - gapSpace;\r\n  } else {\r\n    maxHeight = bounds.bottom - targetRectangle.top - gapSpace;\r\n  }\r\n\r\n  return maxHeight > 0 ? maxHeight : bounds.height;\r\n}\r\n\r\nfunction _positionElementRelative(\r\n  props: IPositionProps,\r\n  elementToPosition: HTMLElement,\r\n  boundingRect: Rectangle,\r\n  previousPositions?: IPositionedData\r\n): IElementPositionInfo {\r\n  const gap: number = props.gapSpace ? props.gapSpace : 0;\r\n  const targetRect: Rectangle = _getTargetRect(boundingRect, props.target);\r\n  const positionData: IPositionDirectionalHintData = _getAlignmentData(\r\n    _getPositionData(props.directionalHint, props.directionalHintForRTL, previousPositions)!,\r\n    targetRect,\r\n    boundingRect,\r\n    props.coverTarget,\r\n    props.alignTargetEdge\r\n  );\r\n  const positionedElement: IElementPosition = _positionElementWithinBounds(\r\n    _getRectangleFromElement(elementToPosition),\r\n    targetRect,\r\n    boundingRect,\r\n    positionData,\r\n    gap,\r\n    props.directionalHintFixed,\r\n    props.coverTarget\r\n  );\r\n  return { ...positionedElement, targetRectangle: targetRect };\r\n}\r\n\r\nfunction _finalizePositionData(\r\n  positionedElement: IElementPosition,\r\n  hostElement: HTMLElement,\r\n  bounds?: Rectangle,\r\n  coverTarget?: boolean\r\n): IPositionedData {\r\n  const finalizedElement: IPartialIRectangle = _finalizeElementPosition(\r\n    positionedElement.elementRectangle,\r\n    hostElement,\r\n    positionedElement.targetEdge,\r\n    bounds,\r\n    positionedElement.alignmentEdge,\r\n    coverTarget\r\n  );\r\n  return {\r\n    elementPosition: finalizedElement,\r\n    targetEdge: positionedElement.targetEdge,\r\n    alignmentEdge: positionedElement.alignmentEdge\r\n  };\r\n}\r\n\r\nfunction _positionElement(\r\n  props: IPositionProps,\r\n  hostElement: HTMLElement,\r\n  elementToPosition: HTMLElement,\r\n  previousPositions?: IPositionedData\r\n): IPositionedData {\r\n  const boundingRect: Rectangle = props.bounds\r\n    ? _getRectangleFromIRect(props.bounds)\r\n    : new Rectangle(0, window.innerWidth - getScrollbarWidth(), 0, window.innerHeight);\r\n  const positionedElement: IElementPosition = _positionElementRelative(props, elementToPosition, boundingRect, previousPositions);\r\n  return _finalizePositionData(positionedElement, hostElement, boundingRect, props.coverTarget);\r\n}\r\n\r\nfunction _positionCallout(\r\n  props: ICalloutPositionProps,\r\n  hostElement: HTMLElement,\r\n  callout: HTMLElement,\r\n  previousPositions?: ICalloutPositionedInfo\r\n): ICalloutPositionedInfo {\r\n  const beakWidth: number = props.isBeakVisible ? props.beakWidth || 0 : 0;\r\n  const gap: number = _calculateActualBeakWidthInPixels(beakWidth) / 2 + (props.gapSpace ? props.gapSpace : 0);\r\n  const positionProps: IPositionProps = props;\r\n  positionProps.gapSpace = gap;\r\n  const boundingRect: Rectangle = props.bounds\r\n    ? _getRectangleFromIRect(props.bounds)\r\n    : new Rectangle(0, window.innerWidth - getScrollbarWidth(), 0, window.innerHeight);\r\n  const positionedElement: IElementPositionInfo = _positionElementRelative(positionProps, callout, boundingRect, previousPositions);\r\n  const beakPositioned: Rectangle = _positionBeak(beakWidth, positionedElement);\r\n  const finalizedBeakPosition: ICalloutBeakPositionedInfo = _finalizeBeakPosition(positionedElement, beakPositioned, boundingRect);\r\n  return {\r\n    ..._finalizePositionData(positionedElement, hostElement, boundingRect, props.coverTarget),\r\n    beakPosition: finalizedBeakPosition\r\n  };\r\n}\r\n// END PRIVATE FUNCTIONS\r\n\r\n/* tslint:disable:variable-name */\r\nexport const __positioningTestPackage = {\r\n  _finalizePositionData,\r\n  _finalizeBeakPosition,\r\n  _calculateActualBeakWidthInPixels,\r\n  _positionElementWithinBounds,\r\n  _positionBeak,\r\n  _getPositionData,\r\n  _getMaxHeightFromTargetRectangle\r\n};\r\n/* tslint:enable:variable-name */\r\n\r\n/**\r\n * Used to position an element relative to the given positioning props.\r\n * If positioning has been completed before, previousPositioningData\r\n * can be passed to ensure that the positioning element repositions based on\r\n * its previous targets rather than starting with directionalhint.\r\n *\r\n * @export\r\n * @param {IPositionProps} props\r\n * @param {HTMLElement} hostElement\r\n * @param {HTMLElement} elementToPosition\r\n * @param {IPositionedData} previousPositions\r\n * @returns\r\n */\r\nexport function positionElement(\r\n  props: IPositionProps,\r\n  hostElement: HTMLElement,\r\n  elementToPosition: HTMLElement,\r\n  previousPositions?: IPositionedData\r\n): IPositionedData {\r\n  return _positionElement(props, hostElement, elementToPosition, previousPositions);\r\n}\r\n\r\nexport function positionCallout(\r\n  props: IPositionProps,\r\n  hostElement: HTMLElement,\r\n  elementToPosition: HTMLElement,\r\n  previousPositions?: ICalloutPositionedInfo\r\n): ICalloutPositionedInfo {\r\n  return _positionCallout(props, hostElement, elementToPosition, previousPositions);\r\n}\r\n\r\n/**\r\n * Get's the maximum height that a rectangle can have in order to fit below or above a target.\r\n * If the directional hint specifies a left or right edge (i.e. leftCenter) it will limit the height to the topBorder\r\n * of the target given.\r\n * If no bounds are provided then the window is treated as the bounds.\r\n */\r\nexport function getMaxHeight(\r\n  target: Element | MouseEvent | IPoint,\r\n  targetEdge: DirectionalHint,\r\n  gapSpace: number = 0,\r\n  bounds?: IRectangle,\r\n  coverTarget?: boolean\r\n): number {\r\n  const mouseTarget: MouseEvent = target as MouseEvent;\r\n  const elementTarget: Element = target as Element;\r\n  const pointTarget: IPoint = target as IPoint;\r\n  let targetRect: Rectangle;\r\n  const boundingRectangle = bounds\r\n    ? _getRectangleFromIRect(bounds)\r\n    : new Rectangle(0, window.innerWidth - getScrollbarWidth(), 0, window.innerHeight);\r\n\r\n  if (mouseTarget.stopPropagation) {\r\n    targetRect = new Rectangle(mouseTarget.clientX, mouseTarget.clientX, mouseTarget.clientY, mouseTarget.clientY);\r\n  } else if (pointTarget.x !== undefined && pointTarget.y !== undefined) {\r\n    targetRect = new Rectangle(pointTarget.x, pointTarget.x, pointTarget.y, pointTarget.y);\r\n  } else {\r\n    targetRect = _getRectangleFromElement(elementTarget);\r\n  }\r\n\r\n  return _getMaxHeightFromTargetRectangle(targetRect, targetEdge, gapSpace, boundingRectangle, coverTarget);\r\n}\r\n\r\n/**\r\n * Returns the opposite edge of the given RectangleEdge.\r\n */\r\nexport function getOppositeEdge(edge: RectangleEdge): RectangleEdge {\r\n  return edge * -1;\r\n}\r\n","import * as React from 'react';\r\nimport { Async, KeyCodes, divProperties, doesElementContainFocus, getDocument, getNativeProps, on } from '../../Utilities';\r\nimport { IPopupProps } from './Popup.types';\r\n\r\nexport interface IPopupState {\r\n  needsVerticalScrollBar?: boolean;\r\n}\r\n\r\n/**\r\n * This adds accessibility to Dialog and Panel controls\r\n */\r\nexport class Popup extends React.Component<IPopupProps, IPopupState> {\r\n  public static defaultProps: IPopupProps = {\r\n    shouldRestoreFocus: true\r\n  };\r\n\r\n  public _root = React.createRef<HTMLDivElement>();\r\n  private _disposables: (() => void)[] = [];\r\n  private _originalFocusedElement: HTMLElement;\r\n  private _containsFocus: boolean;\r\n  private _async: Async;\r\n\r\n  public constructor(props: IPopupProps) {\r\n    super(props);\r\n    this._async = new Async(this);\r\n    this.state = { needsVerticalScrollBar: false };\r\n  }\r\n\r\n  public componentWillMount(): void {\r\n    this._originalFocusedElement = getDocument()!.activeElement as HTMLElement;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    if (this._root.current) {\r\n      this._disposables.push(on(this._root.current, 'focus', this._onFocus, true), on(this._root.current, 'blur', this._onBlur, true));\r\n      if (doesElementContainFocus(this._root.current)) {\r\n        this._containsFocus = true;\r\n      }\r\n    }\r\n\r\n    this._updateScrollBarAsync();\r\n  }\r\n\r\n  public componentDidUpdate() {\r\n    this._updateScrollBarAsync();\r\n    this._async.dispose();\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    this._disposables.forEach((dispose: () => void) => dispose());\r\n    if (\r\n      this.props.shouldRestoreFocus &&\r\n      this._originalFocusedElement &&\r\n      this._containsFocus &&\r\n      (this._originalFocusedElement as any) !== window\r\n    ) {\r\n      // This slight delay is required so that we can unwind the stack, let react try to mess with focus, and then\r\n      // apply the correct focus. Without the setTimeout, we end up focusing the correct thing, and then React wants\r\n      // to reset the focus back to the thing it thinks should have been focused.\r\n      if (this._originalFocusedElement) {\r\n        this._originalFocusedElement.focus();\r\n      }\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { role, className, ariaLabel, ariaLabelledBy, ariaDescribedBy, style } = this.props;\r\n\r\n    return (\r\n      <div\r\n        ref={this._root}\r\n        {...getNativeProps(this.props, divProperties)}\r\n        className={className}\r\n        role={role}\r\n        aria-label={ariaLabel}\r\n        aria-labelledby={ariaLabelledBy}\r\n        aria-describedby={ariaDescribedBy}\r\n        onKeyDown={this._onKeyDown}\r\n        style={{ overflowY: this.state.needsVerticalScrollBar ? 'scroll' : undefined, outline: 'none', ...style }}\r\n      >\r\n        {this.props.children}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    switch (ev.which) {\r\n      case KeyCodes.escape:\r\n        if (this.props.onDismiss) {\r\n          this.props.onDismiss(ev);\r\n\r\n          ev.preventDefault();\r\n          ev.stopPropagation();\r\n        }\r\n\r\n        break;\r\n    }\r\n  };\r\n\r\n  private _updateScrollBarAsync(): void {\r\n    this._async.requestAnimationFrame(() => {\r\n      this._getScrollBar();\r\n    });\r\n  }\r\n\r\n  private _getScrollBar(): void {\r\n    // If overflowY is overriden, don't waste time calculating whether the scrollbar is necessary.\r\n    if (this.props.style && this.props.style.overflowY) {\r\n      return;\r\n    }\r\n\r\n    let needsVerticalScrollBar = false;\r\n    if (this._root && this._root.current && this._root.current.firstElementChild) {\r\n      // ClientHeight returns the client height of an element rounded to an\r\n      // integer. On some browsers at different zoom levels this rounding\r\n      // can generate different results for the root container and child even\r\n      // though they are the same height. This causes us to show a scroll bar\r\n      // when not needed. Ideally we would use BoundingClientRect().height\r\n      // instead however seems that the API is 90% slower than using ClientHeight.\r\n      // Therefore instead we will calculate the difference between heights and\r\n      // allow for a 1px difference to still be considered ok and not show the\r\n      // scroll bar.\r\n      const rootHeight = this._root.current.clientHeight;\r\n      const firstChildHeight = this._root.current.firstElementChild.clientHeight;\r\n      if (rootHeight > 0 && firstChildHeight > rootHeight) {\r\n        needsVerticalScrollBar = firstChildHeight - rootHeight > 1;\r\n      }\r\n    }\r\n    if (this.state.needsVerticalScrollBar !== needsVerticalScrollBar) {\r\n      this.setState({\r\n        needsVerticalScrollBar: needsVerticalScrollBar\r\n      });\r\n    }\r\n  }\r\n\r\n  private _onFocus = (): void => {\r\n    this._containsFocus = true;\r\n  };\r\n\r\n  private _onBlur = (ev: FocusEvent): void => {\r\n    if (this._root.current && this._root.current.contains(ev.relatedTarget as HTMLElement)) {\r\n      this._containsFocus = false;\r\n    }\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { ICalloutProps, ICalloutContentStyleProps, ICalloutContentStyles } from './Callout.types';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport {\r\n  Async,\r\n  IPoint,\r\n  IRectangle,\r\n  assign,\r\n  css,\r\n  divProperties,\r\n  elementContains,\r\n  focusFirstChild,\r\n  getDocument,\r\n  getNativeProps,\r\n  getWindow,\r\n  on,\r\n  shallowCompare\r\n} from '../../Utilities';\r\nimport {\r\n  positionCallout,\r\n  ICalloutPositionedInfo,\r\n  IPositionProps,\r\n  getMaxHeight,\r\n  IPosition,\r\n  RectangleEdge\r\n} from '../../utilities/positioning';\r\nimport { Popup } from '../../Popup';\r\nimport { classNamesFunction } from '../../Utilities';\r\nimport { AnimationClassNames } from '../../Styling';\r\n\r\nconst ANIMATIONS: { [key: number]: string | undefined } = {\r\n  [RectangleEdge.top]: AnimationClassNames.slideUpIn10,\r\n  [RectangleEdge.bottom]: AnimationClassNames.slideDownIn10,\r\n  [RectangleEdge.left]: AnimationClassNames.slideLeftIn10,\r\n  [RectangleEdge.right]: AnimationClassNames.slideRightIn10\r\n};\r\n\r\nconst getClassNames = classNamesFunction<ICalloutContentStyleProps, ICalloutContentStyles>();\r\nconst BORDER_WIDTH = 1;\r\nconst BEAK_ORIGIN_POSITION = { top: 0, left: 0 };\r\n// Microsoft Edge will overwrite inline styles if there is an animation pertaining to that style.\r\n// To help ensure that edge will respect the offscreen style opacity\r\n// filter needs to be added as an additional way to set opacity.\r\nconst OFF_SCREEN_STYLE = { opacity: 0, filter: 'opacity(0)' };\r\n\r\nexport interface ICalloutState {\r\n  positions?: ICalloutPositionedInfo;\r\n  slideDirectionalClassName?: string;\r\n  calloutElementRect?: ClientRect;\r\n  heightOffset?: number;\r\n}\r\n\r\nexport class CalloutContentBase extends React.Component<ICalloutProps, ICalloutState> {\r\n  public static defaultProps = {\r\n    preventDismissOnLostFocus: false,\r\n    preventDismissOnScroll: false,\r\n    preventDismissOnResize: false,\r\n    isBeakVisible: true,\r\n    beakWidth: 16,\r\n    gapSpace: 0,\r\n    minPagePadding: 8,\r\n    directionalHint: DirectionalHint.bottomAutoEdge\r\n  };\r\n\r\n  private _classNames: { [key in keyof ICalloutContentStyles]: string };\r\n  private _didSetInitialFocus: boolean;\r\n  private _hostElement = React.createRef<HTMLDivElement>();\r\n  private _calloutElement = React.createRef<HTMLDivElement>();\r\n  private _targetWindow: Window;\r\n  private _bounds: IRectangle | undefined;\r\n  private _positionAttempts: number;\r\n  private _target: Element | MouseEvent | IPoint | null;\r\n  private _setHeightOffsetTimer: number;\r\n  private _hasListeners = false;\r\n  private _maxHeight: number | undefined;\r\n  private _blockResetHeight: boolean;\r\n\r\n  private _async: Async;\r\n  private _disposables: (() => void)[] = [];\r\n\r\n  constructor(props: ICalloutProps) {\r\n    super(props);\r\n\r\n    this._async = new Async(this);\r\n    this._didSetInitialFocus = false;\r\n    this.state = {\r\n      positions: undefined,\r\n      slideDirectionalClassName: undefined,\r\n      // @TODO it looks like this is not even being used anymore.\r\n      calloutElementRect: undefined,\r\n      heightOffset: 0\r\n    };\r\n    this._positionAttempts = 0;\r\n  }\r\n\r\n  public componentDidUpdate() {\r\n    if (!this.props.hidden) {\r\n      this._setInitialFocus();\r\n      if (!this._hasListeners) {\r\n        this._addListeners();\r\n      }\r\n      this._updateAsyncPosition();\r\n    } else {\r\n      if (this._hasListeners) {\r\n        this._removeListeners();\r\n      }\r\n    }\r\n  }\r\n\r\n  public shouldComponentUpdate(newProps: ICalloutProps, newState: ICalloutState): boolean {\r\n    if (this.props.hidden && newProps.hidden) {\r\n      // Do not update when hidden.\r\n      return false;\r\n    }\r\n\r\n    return !shallowCompare(this.props, newProps) || !shallowCompare(this.state, newState);\r\n  }\r\n\r\n  public componentWillMount() {\r\n    this._setTargetWindowAndElement(this._getTarget());\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    this._async.dispose();\r\n    this._disposables.forEach((dispose: () => void) => dispose());\r\n  }\r\n\r\n  public componentWillUpdate(newProps: ICalloutProps): void {\r\n    // If the target element changed, find the new one. If we are tracking target with class name, always find element because we\r\n    // do not know if fabric has rendered a new element and disposed the old element.\r\n    const newTarget = this._getTarget(newProps);\r\n    const oldTarget = this._getTarget();\r\n    if ((newTarget !== oldTarget || typeof newTarget === 'string' || newTarget instanceof String) && !this._blockResetHeight) {\r\n      this._maxHeight = undefined;\r\n      this._setTargetWindowAndElement(newTarget!);\r\n    }\r\n    if (newProps.gapSpace !== this.props.gapSpace || this.props.beakWidth !== newProps.beakWidth) {\r\n      this._maxHeight = undefined;\r\n    }\r\n\r\n    if (newProps.finalHeight !== this.props.finalHeight) {\r\n      this._setHeightOffsetEveryFrame();\r\n    }\r\n\r\n    // Ensure positioning is recalculated when we are about to show a persisted menu.\r\n    if (!newProps.hidden && newProps.hidden !== this.props.hidden) {\r\n      this._maxHeight = undefined;\r\n      // Target might have been updated while hidden.\r\n      this._setTargetWindowAndElement(newTarget);\r\n      this.setState({\r\n        positions: undefined\r\n      });\r\n      this._didSetInitialFocus = false;\r\n      this._bounds = undefined;\r\n    }\r\n\r\n    this._blockResetHeight = false;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    if (!this.props.hidden) {\r\n      this._onComponentDidMount();\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    // If there is no target window then we are likely in server side rendering and we should not render anything.\r\n    if (!this._targetWindow) {\r\n      return null;\r\n    }\r\n    let { target } = this.props;\r\n    const {\r\n      styles,\r\n      style,\r\n      role,\r\n      ariaLabel,\r\n      ariaDescribedBy,\r\n      ariaLabelledBy,\r\n      className,\r\n      isBeakVisible,\r\n      children,\r\n      beakWidth,\r\n      calloutWidth,\r\n      calloutMaxWidth,\r\n      finalHeight,\r\n      hideOverflow = !!finalHeight,\r\n      backgroundColor,\r\n      calloutMaxHeight,\r\n      onScroll\r\n    } = this.props;\r\n    target = this._getTarget();\r\n    const { positions } = this.state;\r\n\r\n    const getContentMaxHeight: number | undefined = this._getMaxHeight() ? this._getMaxHeight()! + this.state.heightOffset! : undefined;\r\n    const contentMaxHeight: number | undefined =\r\n      calloutMaxHeight! && getContentMaxHeight && calloutMaxHeight! < getContentMaxHeight ? calloutMaxHeight! : getContentMaxHeight!;\r\n    const overflowYHidden = hideOverflow;\r\n\r\n    const beakVisible = isBeakVisible && !!target;\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: this.props.theme!,\r\n      className,\r\n      overflowYHidden: overflowYHidden,\r\n      calloutWidth,\r\n      positions,\r\n      beakWidth,\r\n      backgroundColor,\r\n      calloutMaxWidth\r\n    });\r\n\r\n    const overflowStyle: React.CSSProperties = {\r\n      ...style,\r\n      maxHeight: contentMaxHeight,\r\n      ...(overflowYHidden && { overflowY: 'hidden' })\r\n    };\r\n\r\n    const visibilityStyle: React.CSSProperties | undefined = this.props.hidden ? { visibility: 'hidden' } : undefined;\r\n    // React.CSSProperties does not understand IRawStyle, so the inline animations will need to be cast as any for now.\r\n    const content = (\r\n      <div ref={this._hostElement} className={this._classNames.container} style={visibilityStyle}>\r\n        <div\r\n          {...getNativeProps(this.props, divProperties)}\r\n          className={css(this._classNames.root, positions && positions.targetEdge && ANIMATIONS[positions.targetEdge!])}\r\n          style={positions ? positions.elementPosition : OFF_SCREEN_STYLE}\r\n          tabIndex={-1} // Safari and Firefox on Mac OS requires this to back-stop click events so focus remains in the Callout.\r\n          // See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus\r\n          ref={this._calloutElement}\r\n        >\r\n          {beakVisible && <div className={this._classNames.beak} style={this._getBeakPosition()} />}\r\n          {beakVisible && <div className={this._classNames.beakCurtain} />}\r\n          <Popup\r\n            role={role}\r\n            ariaLabel={ariaLabel}\r\n            ariaDescribedBy={ariaDescribedBy}\r\n            ariaLabelledBy={ariaLabelledBy}\r\n            className={this._classNames.calloutMain}\r\n            onDismiss={this.dismiss}\r\n            onScroll={onScroll}\r\n            shouldRestoreFocus={true}\r\n            style={overflowStyle}\r\n          >\r\n            {children}\r\n          </Popup>\r\n        </div>\r\n      </div>\r\n    );\r\n\r\n    return content;\r\n  }\r\n\r\n  public dismiss = (ev?: Event | React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>): void => {\r\n    const { onDismiss } = this.props;\r\n\r\n    if (onDismiss) {\r\n      onDismiss(ev);\r\n    }\r\n  };\r\n\r\n  protected _dismissOnScroll = (ev: Event) => {\r\n    const { preventDismissOnScroll } = this.props;\r\n    if (this.state.positions && !preventDismissOnScroll) {\r\n      this._dismissOnLostFocus(ev);\r\n    }\r\n  };\r\n\r\n  protected _dismissOnResize = (ev: Event) => {\r\n    const { preventDismissOnResize } = this.props;\r\n    if (!preventDismissOnResize) {\r\n      this.dismiss(ev);\r\n    }\r\n  };\r\n\r\n  protected _dismissOnLostFocus = (ev: Event) => {\r\n    const target = ev.target as HTMLElement;\r\n    const clickedOutsideCallout = this._hostElement.current && !elementContains(this._hostElement.current, target);\r\n    const { preventDismissOnLostFocus } = this.props;\r\n\r\n    if (\r\n      !preventDismissOnLostFocus &&\r\n      ((!this._target && clickedOutsideCallout) ||\r\n        (ev.target !== this._targetWindow &&\r\n          clickedOutsideCallout &&\r\n          ((this._target as MouseEvent).stopPropagation ||\r\n            (!this._target || (target !== this._target && !elementContains(this._target as HTMLElement, target))))))\r\n    ) {\r\n      this.dismiss(ev);\r\n    }\r\n  };\r\n\r\n  protected _setInitialFocus = (): void => {\r\n    if (this.props.setInitialFocus && !this._didSetInitialFocus && this.state.positions && this._calloutElement.current) {\r\n      this._didSetInitialFocus = true;\r\n      this._async.requestAnimationFrame(() => focusFirstChild(this._calloutElement.current!));\r\n    }\r\n  };\r\n\r\n  protected _onComponentDidMount = (): void => {\r\n    this._addListeners();\r\n\r\n    if (this.props.onLayerMounted) {\r\n      this.props.onLayerMounted();\r\n    }\r\n\r\n    this._updateAsyncPosition();\r\n    this._setHeightOffsetEveryFrame();\r\n  };\r\n\r\n  private _addListeners() {\r\n    // This is added so the callout will dismiss when the window is scrolled\r\n    // but not when something inside the callout is scrolled. The delay seems\r\n    // to be required to avoid React firing an async focus event in IE from\r\n    // the target changing focus quickly prior to rendering the callout.\r\n    this._async.setTimeout(() => {\r\n      this._disposables.push(\r\n        on(this._targetWindow, 'scroll', this._dismissOnScroll, true),\r\n        on(this._targetWindow, 'resize', this._dismissOnResize, true),\r\n        on(this._targetWindow.document.documentElement, 'focus', this._dismissOnLostFocus, true),\r\n        on(this._targetWindow.document.documentElement, 'click', this._dismissOnLostFocus, true)\r\n      );\r\n      this._hasListeners = true;\r\n    }, 0);\r\n  }\r\n\r\n  private _removeListeners() {\r\n    this._disposables.forEach((dispose: () => void) => dispose());\r\n    this._disposables = [];\r\n    this._hasListeners = false;\r\n  }\r\n\r\n  private _updateAsyncPosition(): void {\r\n    this._async.requestAnimationFrame(() => this._updatePosition());\r\n  }\r\n\r\n  private _getBeakPosition(): React.CSSProperties {\r\n    const { positions } = this.state;\r\n    const beakPostionStyle: React.CSSProperties = {\r\n      ...(positions && positions.beakPosition ? positions.beakPosition.elementPosition : null)\r\n    };\r\n\r\n    if (!beakPostionStyle.top && !beakPostionStyle.bottom && !beakPostionStyle.left && !beakPostionStyle.right) {\r\n      beakPostionStyle.left = BEAK_ORIGIN_POSITION.left;\r\n      beakPostionStyle.top = BEAK_ORIGIN_POSITION.top;\r\n    }\r\n\r\n    return beakPostionStyle;\r\n  }\r\n\r\n  private _updatePosition(): void {\r\n    // Try to update the target, page might have changed\r\n    this._setTargetWindowAndElement(this._getTarget());\r\n\r\n    const { positions } = this.state;\r\n    const hostElement: HTMLElement | null = this._hostElement.current;\r\n    const calloutElement: HTMLElement | null = this._calloutElement.current;\r\n\r\n    // If we expect a target element to position against, we need to wait until `this._target` is resolved. Otherwise\r\n    // we can try to position.\r\n    const expectsTarget = !!this.props.target;\r\n\r\n    if (hostElement && calloutElement && (!expectsTarget || this._target)) {\r\n      let currentProps: IPositionProps | undefined;\r\n      currentProps = assign(currentProps, this.props);\r\n      currentProps!.bounds = this._getBounds();\r\n      currentProps!.target = this._target!;\r\n      const newPositions: ICalloutPositionedInfo = positionCallout(currentProps!, hostElement, calloutElement, positions);\r\n\r\n      // Set the new position only when the positions are not exists or one of the new callout positions are different.\r\n      // The position should not change if the position is within 2 decimal places.\r\n      if (\r\n        (!positions && newPositions) ||\r\n        (positions && newPositions && !this._arePositionsEqual(positions, newPositions) && this._positionAttempts < 5)\r\n      ) {\r\n        // We should not reposition the callout more than a few times, if it is then the content is likely resizing\r\n        // and we should stop trying to reposition to prevent a stack overflow.\r\n        this._positionAttempts++;\r\n        this.setState({\r\n          positions: newPositions\r\n        });\r\n      } else if (this._positionAttempts > 0) {\r\n        // Only call the onPositioned callback if the callout has been re-positioned at least once.\r\n        this._positionAttempts = 0;\r\n        if (this.props.onPositioned) {\r\n          this.props.onPositioned(this.state.positions);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getBounds(): IRectangle {\r\n    if (!this._bounds) {\r\n      let currentBounds = this.props.bounds;\r\n\r\n      if (!currentBounds) {\r\n        currentBounds = {\r\n          top: 0 + this.props.minPagePadding!,\r\n          left: 0 + this.props.minPagePadding!,\r\n          right: this._targetWindow.innerWidth - this.props.minPagePadding!,\r\n          bottom: this._targetWindow.innerHeight - this.props.minPagePadding!,\r\n          width: this._targetWindow.innerWidth - this.props.minPagePadding! * 2,\r\n          height: this._targetWindow.innerHeight - this.props.minPagePadding! * 2\r\n        };\r\n      }\r\n      this._bounds = currentBounds;\r\n    }\r\n    return this._bounds;\r\n  }\r\n\r\n  // Max height should remain as synchronous as possible, which is why it is not done using set state.\r\n  // It needs to be synchronous since it will impact the ultimate position of the callout.\r\n  private _getMaxHeight(): number | undefined {\r\n    if (!this._maxHeight) {\r\n      if (this.props.directionalHintFixed && this._target) {\r\n        const beakWidth = this.props.isBeakVisible ? this.props.beakWidth : 0;\r\n        const gapSpace = this.props.gapSpace ? this.props.gapSpace : 0;\r\n        // Since the callout cannot measure it's border size it must be taken into account here. Otherwise it will\r\n        // overlap with the target.\r\n        const totalGap = gapSpace + beakWidth! + BORDER_WIDTH * 2;\r\n        this._async.requestAnimationFrame(() => {\r\n          if (this._target) {\r\n            this._maxHeight = getMaxHeight(this._target, this.props.directionalHint!, totalGap, this._getBounds(), this.props.coverTarget);\r\n            this._blockResetHeight = true;\r\n            this.forceUpdate();\r\n          }\r\n        });\r\n      } else {\r\n        this._maxHeight = this._getBounds().height! - BORDER_WIDTH * 2;\r\n      }\r\n    }\r\n    return this._maxHeight!;\r\n  }\r\n\r\n  private _arePositionsEqual(positions: ICalloutPositionedInfo, newPosition: ICalloutPositionedInfo): boolean {\r\n    return (\r\n      this._comparePositions(positions.elementPosition, newPosition.elementPosition) &&\r\n      this._comparePositions(positions.beakPosition.elementPosition, newPosition.beakPosition.elementPosition)\r\n    );\r\n  }\r\n\r\n  private _comparePositions(oldPositions: IPosition, newPositions: IPosition): boolean {\r\n    for (const key in newPositions) {\r\n      // This needs to be checked here and below because there is a linting error if for in does not immediately have an if statement\r\n      if (newPositions.hasOwnProperty(key)) {\r\n        const oldPositionEdge = oldPositions[key];\r\n        const newPositionEdge = newPositions[key];\r\n\r\n        if (oldPositionEdge !== undefined && newPositionEdge !== undefined) {\r\n          if (oldPositionEdge.toFixed(2) !== newPositionEdge.toFixed(2)) {\r\n            return false;\r\n          }\r\n        } else {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  private _setTargetWindowAndElement(target: Element | string | MouseEvent | IPoint | null): void {\r\n    if (target) {\r\n      if (typeof target === 'string') {\r\n        const currentDoc: Document = getDocument()!;\r\n        this._target = currentDoc ? (currentDoc.querySelector(target) as Element) : null;\r\n        this._targetWindow = getWindow()!;\r\n      } else if ((target as MouseEvent).stopPropagation) {\r\n        this._targetWindow = getWindow((target as MouseEvent).toElement as HTMLElement)!;\r\n        this._target = target;\r\n      } else if ((target as Element).getBoundingClientRect) {\r\n        const targetElement: Element = target as Element;\r\n        this._targetWindow = getWindow(targetElement)!;\r\n        this._target = target;\r\n        // HTMLImgElements can have x and y values. The check for it being a point must go last.\r\n      } else {\r\n        this._targetWindow = getWindow()!;\r\n        this._target = target;\r\n      }\r\n    } else {\r\n      this._targetWindow = getWindow()!;\r\n    }\r\n  }\r\n\r\n  private _setHeightOffsetEveryFrame(): void {\r\n    if (this._calloutElement.current && this.props.finalHeight) {\r\n      this._setHeightOffsetTimer = this._async.requestAnimationFrame(() => {\r\n        const calloutMainElem = this._calloutElement.current && (this._calloutElement.current.lastChild as HTMLElement);\r\n\r\n        if (!calloutMainElem) {\r\n          return;\r\n        }\r\n\r\n        const cardScrollHeight: number = calloutMainElem.scrollHeight;\r\n        const cardCurrHeight: number = calloutMainElem.offsetHeight;\r\n        const scrollDiff: number = cardScrollHeight - cardCurrHeight;\r\n\r\n        this.setState({\r\n          heightOffset: this.state.heightOffset! + scrollDiff\r\n        });\r\n\r\n        if (calloutMainElem.offsetHeight < this.props.finalHeight!) {\r\n          this._setHeightOffsetEveryFrame();\r\n        } else {\r\n          this._async.cancelAnimationFrame(this._setHeightOffsetTimer);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  private _getTarget(props: ICalloutProps = this.props): Element | string | MouseEvent | IPoint | null {\r\n    const { target } = props;\r\n    return target!;\r\n  }\r\n}\r\n","import { HighContrastSelector, IRawStyle, focusClear, getGlobalClassNames } from '../../Styling';\r\nimport { ICalloutContentStyleProps, ICalloutContentStyles } from './Callout.types';\r\n\r\nfunction getBeakStyle(beakWidth?: number): IRawStyle {\r\n  return {\r\n    height: beakWidth,\r\n    width: beakWidth\r\n  };\r\n}\r\n\r\nconst GlobalClassNames = {\r\n  container: 'ms-Callout-container',\r\n  root: 'ms-Callout',\r\n  beak: 'ms-Callout-beak',\r\n  beakCurtain: 'ms-Callout-beakCurtain',\r\n  calloutMain: 'ms-Callout-main'\r\n};\r\n\r\nexport const getStyles = (props: ICalloutContentStyleProps): ICalloutContentStyles => {\r\n  const { theme, className, overflowYHidden, calloutWidth, beakWidth, backgroundColor, calloutMaxWidth } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const { palette } = theme;\r\n  return {\r\n    container: [\r\n      classNames.container,\r\n      {\r\n        position: 'relative'\r\n      }\r\n    ],\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        position: 'absolute',\r\n        boxSizing: 'border-box',\r\n        borderWidth: 1,\r\n        borderStyle: 'solid',\r\n        borderColor: palette.neutralLight,\r\n        boxShadow: '0 0 5px 0px rgba(0,0,0,0.4)',\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderWidth: 1,\r\n            borderStyle: 'solid',\r\n            borderColor: 'WindowText'\r\n          }\r\n        }\r\n      },\r\n      focusClear(),\r\n      className,\r\n      !!calloutWidth && { width: calloutWidth },\r\n      !!calloutMaxWidth && { maxWidth: calloutMaxWidth }\r\n    ],\r\n    beak: [\r\n      classNames.beak,\r\n      {\r\n        position: 'absolute',\r\n        backgroundColor: palette.white,\r\n        boxShadow: 'inherit',\r\n        border: 'inherit',\r\n        boxSizing: 'border-box',\r\n        transform: 'rotate(45deg)'\r\n      },\r\n      getBeakStyle(beakWidth),\r\n      backgroundColor && {\r\n        backgroundColor: backgroundColor\r\n      }\r\n    ],\r\n    beakCurtain: [\r\n      classNames.beakCurtain,\r\n      {\r\n        position: 'absolute',\r\n        top: 0,\r\n        right: 0,\r\n        bottom: 0,\r\n        left: 0,\r\n        backgroundColor: palette.white\r\n      }\r\n    ],\r\n    calloutMain: [\r\n      classNames.calloutMain,\r\n      {\r\n        backgroundColor: palette.white,\r\n        overflowX: 'hidden',\r\n        overflowY: 'auto',\r\n        position: 'relative'\r\n      },\r\n      overflowYHidden && {\r\n        overflowY: 'hidden'\r\n      },\r\n      backgroundColor && {\r\n        backgroundColor: backgroundColor\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { ICalloutProps, ICalloutContentStyles, ICalloutContentStyleProps } from './Callout.types';\r\nimport { CalloutContentBase } from './CalloutContent.base';\r\nimport { getStyles } from './CalloutContent.styles';\r\n\r\nexport const CalloutContent: React.StatelessComponent<ICalloutProps> = styled<\r\n  ICalloutProps,\r\n  ICalloutContentStyleProps,\r\n  ICalloutContentStyles\r\n>(CalloutContentBase, getStyles, undefined, { scope: 'CalloutContent' });\r\n","import { getGlobalClassNames } from '../../Styling';\r\nimport { IFabricStyleProps, IFabricStyles } from './Fabric.types';\r\n\r\nconst inheritFont = { fontFamily: 'inherit' };\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Fabric'\r\n};\r\n\r\nexport interface IFabricClassNames {\r\n  root: string;\r\n}\r\n\r\nexport const getStyles = (props: IFabricStyleProps): IFabricStyles => {\r\n  const { theme, className, isFocusVisible } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      isFocusVisible && 'is-focusVisible',\r\n      theme.fonts.medium,\r\n      {\r\n        color: theme.palette.neutralPrimary,\r\n        selectors: {\r\n          '& button': inheritFont,\r\n          '& input': inheritFont,\r\n          '& textarea': inheritFont,\r\n          ':global(button)': {\r\n            overflow: 'visible',\r\n            margin: 0\r\n          }\r\n        }\r\n      },\r\n      className\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { getNativeProps, on, divProperties, classNamesFunction, getWindow, isDirectionalKeyCode } from '../../Utilities';\r\nimport { getStyles } from './Fabric.styles';\r\nimport { IFabricProps, IFabricStyleProps, IFabricStyles } from './Fabric.types';\r\n\r\nconst getClassNames = classNamesFunction<IFabricStyleProps, IFabricStyles>();\r\n\r\nexport class FabricBase extends React.Component<\r\n  IFabricProps,\r\n  {\r\n    isFocusVisible: boolean;\r\n  }\r\n> {\r\n  private _rootElement = React.createRef<HTMLDivElement>();\r\n  private _disposables: (() => void)[] = [];\r\n\r\n  constructor(props: IFabricProps) {\r\n    super(props);\r\n    this.state = { isFocusVisible: false };\r\n  }\r\n\r\n  public render() {\r\n    const classNames = getClassNames(getStyles, {\r\n      ...(this.props as IFabricStyleProps),\r\n      ...this.state\r\n    });\r\n    const divProps = getNativeProps(this.props, divProperties);\r\n\r\n    return <div {...divProps} className={classNames.root} ref={this._rootElement} />;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    const win = getWindow(this._rootElement.current);\r\n\r\n    if (win) {\r\n      this._disposables.push(on(win, 'mousedown', this._onMouseDown, true), on(win, 'keydown', this._onKeyDown, true));\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    this._disposables.forEach((dispose: () => void) => dispose());\r\n  }\r\n\r\n  private _onMouseDown = (ev: MouseEvent): void => {\r\n    this.setState({ isFocusVisible: false });\r\n  };\r\n\r\n  private _onKeyDown = (ev: KeyboardEvent): void => {\r\n    if (isDirectionalKeyCode(ev.which)) {\r\n      this.setState({ isFocusVisible: true });\r\n    }\r\n  };\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { FabricBase } from './Fabric.base';\r\nimport { getStyles } from './Fabric.styles';\r\nimport { IFabricProps, IFabricStyleProps, IFabricStyles } from './Fabric.types';\r\n\r\nexport const Fabric: React.StatelessComponent<IFabricProps> = styled<IFabricProps, IFabricStyleProps, IFabricStyles>(\r\n  FabricBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Fabric'\r\n  }\r\n);\r\n","const _layersByHostId: { [hostId: string]: React.Component[] } = {};\r\n\r\nlet _defaultHostSelector: string | undefined;\r\n\r\n/**\r\n * Register a layer for a given host id\r\n * @param hostId Id of the layer host\r\n * @param layer Layer instance\r\n */\r\nexport function registerLayer(hostId: string, layer: React.Component) {\r\n  if (!_layersByHostId[hostId]) {\r\n    _layersByHostId[hostId] = [];\r\n  }\r\n\r\n  _layersByHostId[hostId].push(layer);\r\n}\r\n\r\n/**\r\n * Unregister a layer for a given host id\r\n * @param hostId Id of the layer host\r\n * @param layer Layer instance\r\n */\r\nexport function unregisterLayer(hostId: string, layer: React.Component) {\r\n  if (_layersByHostId[hostId]) {\r\n    const idx = _layersByHostId[hostId].indexOf(layer);\r\n    if (idx >= 0) {\r\n      _layersByHostId[hostId].splice(idx, 1);\r\n      if (_layersByHostId[hostId].length === 0) {\r\n        delete _layersByHostId[hostId];\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Used for notifying applicable Layers that a host is available/unavailable and to re-evaluate Layers that\r\n * care about the specific host.\r\n */\r\nexport function notifyHostChanged(id: string) {\r\n  if (_layersByHostId[id]) {\r\n    _layersByHostId[id].forEach(layer => layer.forceUpdate());\r\n  }\r\n}\r\n\r\n/**\r\n * Sets the default target selector to use when determining the host in which\r\n * Layered content will be injected into. If not provided, an element will be\r\n * created at the end of the document body.\r\n *\r\n * Passing in a falsey value will clear the default target and reset back to\r\n * using a created element at the end of document body.\r\n */\r\nexport function setDefaultTarget(selector?: string) {\r\n  _defaultHostSelector = selector;\r\n}\r\n\r\n/**\r\n * Get the default target selector when determining a host\r\n */\r\nexport function getDefaultTarget(): string | undefined {\r\n  return _defaultHostSelector;\r\n}\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\n\r\nimport { Fabric } from '../../Fabric';\r\nimport { ILayerProps, ILayerStyleProps, ILayerStyles } from './Layer.types';\r\nimport {\r\n  classNamesFunction,\r\n  customizable,\r\n  getDocument,\r\n  createRef,\r\n  setPortalAttribute,\r\n  setVirtualParent,\r\n  warnDeprecations\r\n} from '../../Utilities';\r\nimport { registerLayer, getDefaultTarget, unregisterLayer } from './Layer.notification';\r\n\r\nexport type ILayerBaseState = {\r\n  hasMounted: boolean;\r\n};\r\n\r\nconst getClassNames = classNamesFunction<ILayerStyleProps, ILayerStyles>();\r\n\r\n@customizable('Layer', ['theme', 'hostId'])\r\nexport class LayerBase extends React.Component<ILayerProps, ILayerBaseState> {\r\n  public static defaultProps: ILayerProps = {\r\n    onLayerDidMount: () => undefined,\r\n    onLayerWillUnmount: () => undefined\r\n  };\r\n\r\n  private _host: Node;\r\n  private _layerElement: HTMLElement | undefined;\r\n  private _rootElement = createRef<HTMLDivElement>();\r\n\r\n  constructor(props: ILayerProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      hasMounted: false\r\n    };\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnDeprecations('Layer', props, {\r\n        onLayerMounted: 'onLayerDidMount'\r\n      });\r\n    }\r\n\r\n    if (this.props.hostId) {\r\n      registerLayer(this.props.hostId, this);\r\n    }\r\n  }\r\n\r\n  public componentWillMount(): void {\r\n    this._layerElement = this._getLayerElement();\r\n  }\r\n\r\n  public componentWillUpdate(): void {\r\n    if (!this._layerElement) {\r\n      this._layerElement = this._getLayerElement();\r\n    }\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    // We can safely set state immediately because the ref wrapper will make sure the virtual\r\n    //    parent has been set before componentDidMount is called.\r\n    this.setState({ hasMounted: true });\r\n\r\n    this._setVirtualParent();\r\n\r\n    const { onLayerDidMount, onLayerMounted } = this.props;\r\n    if (onLayerMounted) {\r\n      onLayerMounted();\r\n    }\r\n\r\n    if (onLayerDidMount) {\r\n      onLayerDidMount();\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    this._removeLayerElement();\r\n\r\n    const { onLayerWillUnmount, hostId } = this.props;\r\n    if (onLayerWillUnmount) {\r\n      onLayerWillUnmount();\r\n    }\r\n\r\n    if (hostId) {\r\n      unregisterLayer(hostId, this);\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(): void {\r\n    this._setVirtualParent();\r\n  }\r\n\r\n  public render(): React.ReactNode {\r\n    const classNames = this._getClassNames();\r\n    const { eventBubblingEnabled } = this.props;\r\n    const { hasMounted } = this.state;\r\n\r\n    return (\r\n      <span className=\"ms-layer\" ref={this._handleRootElementRef}>\r\n        {this._layerElement &&\r\n          hasMounted &&\r\n          ReactDOM.createPortal(\r\n            eventBubblingEnabled ? (\r\n              <Fabric className={classNames.content}>{this.props.children}</Fabric>\r\n            ) : (\r\n              <Fabric\r\n                className={classNames.content}\r\n                onClick={this._filterEvent}\r\n                onContextMenu={this._filterEvent}\r\n                onDoubleClick={this._filterEvent}\r\n                onDrag={this._filterEvent}\r\n                onDragEnd={this._filterEvent}\r\n                onDragEnter={this._filterEvent}\r\n                onDragExit={this._filterEvent}\r\n                onDragLeave={this._filterEvent}\r\n                onDragOver={this._filterEvent}\r\n                onDragStart={this._filterEvent}\r\n                onDrop={this._filterEvent}\r\n                onMouseDown={this._filterEvent}\r\n                onMouseEnter={this._filterEvent}\r\n                onMouseLeave={this._filterEvent}\r\n                onMouseMove={this._filterEvent}\r\n                onMouseOver={this._filterEvent}\r\n                onMouseOut={this._filterEvent}\r\n                onMouseUp={this._filterEvent}\r\n                onKeyDown={this._filterEvent}\r\n                onKeyPress={this._filterEvent}\r\n                onKeyUp={this._filterEvent}\r\n                onFocus={this._filterEvent}\r\n                onBlur={this._filterEvent}\r\n                onChange={this._filterEvent}\r\n                onInput={this._filterEvent}\r\n                onInvalid={this._filterEvent}\r\n                onSubmit={this._filterEvent}\r\n              >\r\n                {this.props.children}\r\n              </Fabric>\r\n            ),\r\n            this._layerElement\r\n          )}\r\n      </span>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * rootElement wrapper for setting virtual parent as soon as root element ref is available.\r\n   */\r\n  private _handleRootElementRef = (ref: HTMLDivElement): void => {\r\n    this._rootElement(ref);\r\n    if (ref) {\r\n      // TODO: Calling _setVirtualParent in this ref wrapper SHOULD allow us to remove\r\n      //    other calls to _setVirtualParent throughout this class. However,\r\n      //    as this is an immediate fix for a P0 issue the existing _setVirtualParent\r\n      //    calls are left for now to minimize potential regression.\r\n      this._setVirtualParent();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Helper to stop events from bubbling up out of Layer.\r\n   */\r\n  private _filterEvent = (ev: React.SyntheticEvent<HTMLElement>): void => {\r\n    // We should just be able to check ev.bubble here and only stop events that are bubbling up. However, even though mouseenter and\r\n    //    mouseleave do NOT bubble up, they are showing up as bubbling. Therefore we stop events based on event name rather than ev.bubble.\r\n    if (ev.eventPhase === Event.BUBBLING_PHASE && ev.type !== 'mouseenter' && ev.type !== 'mouseleave') {\r\n      ev.stopPropagation();\r\n    }\r\n  };\r\n\r\n  private _getClassNames() {\r\n    const { className, styles, theme } = this.props;\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      isNotHost: !this.props.hostId\r\n    });\r\n\r\n    return classNames;\r\n  }\r\n\r\n  private _setVirtualParent() {\r\n    if (this._rootElement && this._rootElement.current && this._layerElement) {\r\n      setVirtualParent(this._layerElement, this._rootElement.current);\r\n    }\r\n  }\r\n\r\n  private _getLayerElement(): HTMLElement | undefined {\r\n    const host = this._getHost();\r\n\r\n    const classNames = this._getClassNames();\r\n\r\n    if (host !== this._host) {\r\n      this._removeLayerElement();\r\n    }\r\n\r\n    if (host) {\r\n      this._host = host;\r\n\r\n      if (!this._layerElement) {\r\n        const doc = getDocument();\r\n        if (!doc) {\r\n          return;\r\n        }\r\n\r\n        this._layerElement = doc.createElement('div');\r\n        this._layerElement.className = classNames.root!;\r\n        setPortalAttribute(this._layerElement);\r\n\r\n        this.props.insertFirst ? host.insertBefore(this._layerElement, host.firstChild) : host.appendChild(this._layerElement);\r\n      }\r\n    }\r\n\r\n    return this._layerElement;\r\n  }\r\n\r\n  private _removeLayerElement(): void {\r\n    if (this._layerElement) {\r\n      this.props.onLayerWillUnmount!();\r\n\r\n      const parentNode = this._layerElement.parentNode;\r\n      if (parentNode) {\r\n        parentNode.removeChild(this._layerElement);\r\n      }\r\n      this._layerElement = undefined;\r\n    }\r\n  }\r\n\r\n  private _getHost(): Node | undefined {\r\n    const { hostId } = this.props;\r\n\r\n    const doc = getDocument();\r\n    if (!doc) {\r\n      return undefined;\r\n    }\r\n\r\n    if (hostId) {\r\n      return doc.getElementById(hostId) as Node;\r\n    } else {\r\n      const defaultHostSelector = getDefaultTarget();\r\n      return defaultHostSelector ? (doc.querySelector(defaultHostSelector) as Node) : doc.body;\r\n    }\r\n  }\r\n}\r\n","export const KTP_PREFIX = 'ktp';\r\nexport const KTP_SEPARATOR = '-';\r\nexport const KTP_FULL_PREFIX = KTP_PREFIX + KTP_SEPARATOR;\r\nexport const DATAKTP_TARGET = 'data-ktp-target';\r\nexport const DATAKTP_EXECUTE_TARGET = 'data-ktp-execute-target';\r\nexport const KTP_LAYER_ID = 'ktp-layer-id';\r\nexport const KTP_ARIA_SEPARATOR = ', ';\r\n\r\n// Events\r\nexport namespace KeytipEvents {\r\n  export const KEYTIP_ADDED = 'keytipAdded';\r\n  export const KEYTIP_REMOVED = 'keytipRemoved';\r\n  export const KEYTIP_UPDATED = 'keytipUpdated';\r\n  export const PERSISTED_KEYTIP_ADDED = 'persistedKeytipAdded';\r\n  export const PERSISTED_KEYTIP_REMOVED = 'persistedKeytipRemoved';\r\n  export const PERSISTED_KEYTIP_EXECUTE = 'persistedKeytipExecute';\r\n  export const ENTER_KEYTIP_MODE = 'enterKeytipMode';\r\n  export const EXIT_KEYTIP_MODE = 'exitKeytipMode';\r\n}\r\n","import { IVirtualElement } from './IVirtualElement';\r\n/**\r\n * Sets the virtual parent of an element.\r\n * Pass `undefined` as the `parent` to clear the virtual parent.\r\n *\r\n * @public\r\n */\r\nexport function setVirtualParent(child: HTMLElement, parent: HTMLElement): void {\r\n  let virtualChild = <IVirtualElement>child;\r\n  let virtualParent = <IVirtualElement>parent;\r\n  if (!virtualChild._virtual) {\r\n    virtualChild._virtual = {\r\n      children: []\r\n    };\r\n  }\r\n  let oldParent = virtualChild._virtual.parent;\r\n  if (oldParent && oldParent !== parent) {\r\n    // Remove the child from its old parent.\r\n    let index = oldParent._virtual.children.indexOf(virtualChild);\r\n    if (index > -1) {\r\n      oldParent._virtual.children.splice(index, 1);\r\n    }\r\n  }\r\n  virtualChild._virtual.parent = virtualParent || undefined;\r\n  if (virtualParent) {\r\n    if (!virtualParent._virtual) {\r\n      virtualParent._virtual = {\r\n        children: []\r\n      };\r\n    }\r\n    virtualParent._virtual.children.push(virtualChild);\r\n  }\r\n}\r\n","import { ILayerStyleProps, ILayerStyles } from './Layer.types';\r\nimport { ZIndexes, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Layer',\r\n  rootNoHost: 'ms-Layer--fixed',\r\n  content: 'ms-Layer-content'\r\n};\r\n\r\nexport const getStyles = (props: ILayerStyleProps): ILayerStyles => {\r\n  const { className, isNotHost, theme } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      isNotHost && [\r\n        classNames.rootNoHost,\r\n        {\r\n          position: 'fixed',\r\n          zIndex: ZIndexes.Layer,\r\n          top: 0,\r\n          left: 0,\r\n          width: '100vw',\r\n          height: '100vh',\r\n          visibility: 'hidden'\r\n        }\r\n      ],\r\n      className\r\n    ],\r\n    content: [\r\n      classNames.content,\r\n      {\r\n        visibility: 'visible'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { ILayerProps, ILayerStyleProps, ILayerStyles } from './Layer.types';\r\nimport { LayerBase } from './Layer.base';\r\nimport { getStyles } from './Layer.styles';\r\n\r\nexport const Layer: React.StatelessComponent<ILayerProps> = styled<ILayerProps, ILayerStyleProps, ILayerStyles>(\r\n  LayerBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Layer',\r\n    fields: ['hostId', 'theme', 'styles']\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { ICalloutProps } from './Callout.types';\r\nimport { ICalloutState } from './CalloutContent.base';\r\nimport { CalloutContent } from './CalloutContent';\r\nimport { Layer } from '../../Layer';\r\n\r\nexport class Callout extends React.Component<ICalloutProps, ICalloutState> {\r\n  public render(): JSX.Element {\r\n    const { layerProps, ...rest } = this.props;\r\n    const content = <CalloutContent {...rest} />;\r\n    return this.props.doNotLayer ? content : <Layer {...layerProps}>{content}</Layer>;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { css } from '../../Utilities';\r\nimport { ILayerHostProps } from './LayerHost.types';\r\nimport { notifyHostChanged } from './Layer.notification';\r\n\r\nexport class LayerHost extends React.Component<ILayerHostProps> {\r\n  public shouldComponentUpdate() {\r\n    return false;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    notifyHostChanged(this.props.id!);\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    notifyHostChanged(this.props.id!);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    return <div {...this.props} className={css('ms-LayerHost', this.props.className)} />;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport {\r\n  elementContains,\r\n  getNativeProps,\r\n  divProperties,\r\n  getFirstTabbable,\r\n  getLastTabbable,\r\n  getNextElement,\r\n  focusAsync,\r\n  initializeComponentRef,\r\n  on\r\n} from '../../Utilities';\r\nimport { IFocusTrapZone, IFocusTrapZoneProps } from './FocusTrapZone.types';\r\n\r\nexport class FocusTrapZone extends React.Component<IFocusTrapZoneProps, {}> implements IFocusTrapZone {\r\n  private static _focusStack: FocusTrapZone[] = [];\r\n\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _firstBumper = React.createRef<HTMLDivElement>();\r\n  private _lastBumper = React.createRef<HTMLDivElement>();\r\n  private _hasFocus: boolean = false;\r\n\r\n  private _previouslyFocusedElementOutsideTrapZone: HTMLElement;\r\n  private _previouslyFocusedElementInTrapZone?: HTMLElement;\r\n  private _disposeFocusHandler: (() => void) | undefined;\r\n  private _disposeClickHandler: (() => void) | undefined;\r\n\r\n  public constructor(props: IFocusTrapZoneProps) {\r\n    super(props);\r\n    initializeComponentRef(this);\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    this._bringFocusIntoZone();\r\n    this._updateEventHandlers(this.props);\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: IFocusTrapZoneProps): void {\r\n    const { elementToFocusOnDismiss } = nextProps;\r\n    if (elementToFocusOnDismiss && this._previouslyFocusedElementOutsideTrapZone !== elementToFocusOnDismiss) {\r\n      this._previouslyFocusedElementOutsideTrapZone = elementToFocusOnDismiss;\r\n    }\r\n\r\n    this._updateEventHandlers(nextProps);\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IFocusTrapZoneProps) {\r\n    const prevForceFocusInsideTrap = prevProps.forceFocusInsideTrap !== undefined ? prevProps.forceFocusInsideTrap : true;\r\n    const newForceFocusInsideTrap = this.props.forceFocusInsideTrap !== undefined ? this.props.forceFocusInsideTrap : true;\r\n\r\n    if (!prevForceFocusInsideTrap && newForceFocusInsideTrap) {\r\n      // Transition from forceFocusInsideTrap disabled to enabled. Emulate what happens when a FocusTrapZone gets mounted\r\n      this._bringFocusIntoZone();\r\n    } else if (prevForceFocusInsideTrap && !newForceFocusInsideTrap) {\r\n      // Transition from forceFocusInsideTrap enabled to disabled. Emulate what happens when a FocusTrapZone gets unmounted\r\n      this._returnFocusToInitiator();\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    this._returnFocusToInitiator();\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, ariaLabelledBy } = this.props;\r\n    const divProps = getNativeProps(this.props, divProperties);\r\n\r\n    const bumperProps = {\r\n      style: {\r\n        pointerEvents: 'none',\r\n        position: 'fixed' // 'fixed' prevents browsers from scrolling to bumpers when viewport does not contain them\r\n      },\r\n      tabIndex: 0,\r\n      'aria-hidden': true,\r\n      'data-is-visible': true\r\n    } as React.HTMLAttributes<HTMLDivElement>;\r\n\r\n    return (\r\n      <div\r\n        {...divProps}\r\n        className={className}\r\n        ref={this._root}\r\n        aria-labelledby={ariaLabelledBy}\r\n        onFocusCapture={this._onFocusCapture}\r\n        onFocus={this._onRootFocus}\r\n        onBlur={this._onRootBlur}\r\n      >\r\n        <div {...bumperProps} ref={this._firstBumper} onFocus={this._onFirstBumperFocus} />\r\n        {this.props.children}\r\n        <div {...bumperProps} ref={this._lastBumper} onFocus={this._onLastBumperFocus} />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    const { focusPreviouslyFocusedInnerElement, firstFocusableSelector } = this.props;\r\n\r\n    if (\r\n      focusPreviouslyFocusedInnerElement &&\r\n      this._previouslyFocusedElementInTrapZone &&\r\n      elementContains(this._root.current, this._previouslyFocusedElementInTrapZone)\r\n    ) {\r\n      // focus on the last item that had focus in the zone before we left the zone\r\n      this._focusAsync(this._previouslyFocusedElementInTrapZone);\r\n      return;\r\n    }\r\n\r\n    const focusSelector =\r\n      typeof firstFocusableSelector === 'string' ? firstFocusableSelector : firstFocusableSelector && firstFocusableSelector();\r\n\r\n    let _firstFocusableChild;\r\n\r\n    if (this._root.current) {\r\n      if (focusSelector) {\r\n        _firstFocusableChild = this._root.current.querySelector('.' + focusSelector);\r\n      }\r\n\r\n      // Fall back to first element if query selector did not match any elements.\r\n      if (!_firstFocusableChild) {\r\n        _firstFocusableChild = getNextElement(this._root.current, this._root.current.firstChild as HTMLElement, false, false, false, true);\r\n      }\r\n    }\r\n    if (_firstFocusableChild) {\r\n      this._focusAsync(_firstFocusableChild);\r\n    }\r\n  }\r\n\r\n  private _focusAsync(element: HTMLElement): void {\r\n    if (!this._isBumper(element)) {\r\n      focusAsync(element);\r\n    }\r\n  }\r\n\r\n  private _onRootFocus = (ev: React.FocusEvent<HTMLDivElement>) => {\r\n    if (this.props.onFocus) {\r\n      this.props.onFocus(ev);\r\n    }\r\n\r\n    this._hasFocus = true;\r\n  };\r\n\r\n  private _onRootBlur = (ev: React.FocusEvent<HTMLDivElement>) => {\r\n    if (this.props.onBlur) {\r\n      this.props.onBlur(ev);\r\n    }\r\n\r\n    let relatedTarget = ev.relatedTarget;\r\n    if (ev.relatedTarget === null) {\r\n      // In IE11, due to lack of support, event.relatedTarget is always\r\n      // null making every onBlur call to be \"outside\" of the ComboBox\r\n      // even when it's not. Using document.activeElement is another way\r\n      // for us to be able to get what the relatedTarget without relying\r\n      // on the event\r\n      relatedTarget = document.activeElement as Element;\r\n    }\r\n\r\n    if (!elementContains(this._root.current, relatedTarget as HTMLElement)) {\r\n      this._hasFocus = false;\r\n    }\r\n  };\r\n\r\n  private _onFirstBumperFocus = () => {\r\n    this._onBumperFocus(true);\r\n  };\r\n\r\n  private _onLastBumperFocus = () => {\r\n    this._onBumperFocus(false);\r\n  };\r\n\r\n  private _onBumperFocus = (isFirstBumper: boolean) => {\r\n    const currentBumper = (isFirstBumper === this._hasFocus ? this._lastBumper.current : this._firstBumper.current) as HTMLElement;\r\n    if (this._root.current) {\r\n      const nextFocusable =\r\n        isFirstBumper === this._hasFocus\r\n          ? getLastTabbable(this._root.current, currentBumper, true, false)\r\n          : getFirstTabbable(this._root.current, currentBumper, true, false);\r\n\r\n      if (nextFocusable) {\r\n        if (this._isBumper(nextFocusable)) {\r\n          // This can happen when FTZ contains no tabbable elements. focus will take care of finding a focusable element in FTZ.\r\n          this.focus();\r\n        } else {\r\n          nextFocusable.focus();\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  private _bringFocusIntoZone(): void {\r\n    const { elementToFocusOnDismiss, disableFirstFocus = false } = this.props;\r\n\r\n    FocusTrapZone._focusStack.push(this);\r\n\r\n    this._previouslyFocusedElementOutsideTrapZone = elementToFocusOnDismiss\r\n      ? elementToFocusOnDismiss\r\n      : (document.activeElement as HTMLElement);\r\n    if (!disableFirstFocus && !elementContains(this._root.current, this._previouslyFocusedElementOutsideTrapZone)) {\r\n      this.focus();\r\n    }\r\n  }\r\n\r\n  private _returnFocusToInitiator(): void {\r\n    const { ignoreExternalFocusing } = this.props;\r\n\r\n    FocusTrapZone._focusStack = FocusTrapZone._focusStack.filter((value: FocusTrapZone) => {\r\n      return this !== value;\r\n    });\r\n\r\n    const activeElement = document.activeElement as HTMLElement;\r\n    if (\r\n      !ignoreExternalFocusing &&\r\n      this._previouslyFocusedElementOutsideTrapZone &&\r\n      typeof this._previouslyFocusedElementOutsideTrapZone.focus === 'function' &&\r\n      (elementContains(this._root.current, activeElement) || activeElement === document.body)\r\n    ) {\r\n      this._focusAsync(this._previouslyFocusedElementOutsideTrapZone);\r\n    }\r\n  }\r\n\r\n  private _updateEventHandlers(newProps: IFocusTrapZoneProps): void {\r\n    const { isClickableOutsideFocusTrap = false, forceFocusInsideTrap = true } = newProps;\r\n\r\n    if (forceFocusInsideTrap && !this._disposeFocusHandler) {\r\n      this._disposeFocusHandler = on(window, 'focus', this._forceFocusInTrap, true);\r\n    } else if (!forceFocusInsideTrap && this._disposeFocusHandler) {\r\n      this._disposeFocusHandler();\r\n      this._disposeFocusHandler = undefined;\r\n    }\r\n\r\n    if (!isClickableOutsideFocusTrap && !this._disposeClickHandler) {\r\n      this._disposeClickHandler = on(window, 'click', this._forceClickInTrap, true);\r\n    } else if (isClickableOutsideFocusTrap && this._disposeClickHandler) {\r\n      this._disposeClickHandler();\r\n      this._disposeClickHandler = undefined;\r\n    }\r\n  }\r\n\r\n  private _onFocusCapture = (ev: React.FocusEvent<HTMLDivElement>) => {\r\n    if (this.props.onFocusCapture) {\r\n      this.props.onFocusCapture(ev);\r\n    }\r\n\r\n    if (ev.target !== ev.currentTarget && !this._isBumper(ev.target)) {\r\n      // every time focus changes within the trap zone, remember the focused element so that\r\n      // it can be restored if focus leaves the pane and returns via keystroke (i.e. via a call to this.focus(true))\r\n      this._previouslyFocusedElementInTrapZone = ev.target as HTMLElement;\r\n    }\r\n  };\r\n\r\n  private _isBumper(element: HTMLElement): boolean {\r\n    return element === this._firstBumper.current || element === this._lastBumper.current;\r\n  }\r\n\r\n  private _forceFocusInTrap = (ev: FocusEvent): void => {\r\n    if (FocusTrapZone._focusStack.length && this === FocusTrapZone._focusStack[FocusTrapZone._focusStack.length - 1]) {\r\n      const focusedElement = document.activeElement as HTMLElement;\r\n\r\n      if (!elementContains(this._root.current, focusedElement)) {\r\n        this.focus();\r\n        this._hasFocus = true; // set focus here since we stop event propagation\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  };\r\n\r\n  private _forceClickInTrap = (ev: MouseEvent): void => {\r\n    if (FocusTrapZone._focusStack.length && this === FocusTrapZone._focusStack[FocusTrapZone._focusStack.length - 1]) {\r\n      const clickedElement = ev.target as HTMLElement;\r\n\r\n      if (clickedElement && !elementContains(this._root.current, clickedElement)) {\r\n        this.focus();\r\n        this._hasFocus = true; // set focus here since we stop event propagation\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { hasSubmenu, getIsChecked } from '../../utilities/contextualMenu/index';\r\nimport { BaseComponent, getRTL } from '../../Utilities';\r\nimport { Icon } from '../../Icon';\r\nimport { IContextualMenuItemProps } from './ContextualMenuItem.types';\r\n\r\nconst renderItemIcon = (props: IContextualMenuItemProps) => {\r\n  const { item, hasIcons, classNames } = props;\r\n\r\n  const { iconProps } = item;\r\n\r\n  if (!hasIcons) {\r\n    return null;\r\n  }\r\n\r\n  if (item.onRenderIcon) {\r\n    return item.onRenderIcon(props);\r\n  }\r\n\r\n  return <Icon {...iconProps} className={classNames.icon} />;\r\n};\r\n\r\nconst renderCheckMarkIcon = ({ onCheckmarkClick, item, classNames }: IContextualMenuItemProps) => {\r\n  const isItemChecked = getIsChecked(item);\r\n  if (onCheckmarkClick) {\r\n    // Ensures that the item is passed as the first argument to the checkmark click callback.\r\n    const onClick = (e: React.MouseEvent<HTMLElement>) => onCheckmarkClick(item, e);\r\n\r\n    return <Icon iconName={isItemChecked ? 'CheckMark' : ''} className={classNames.checkmarkIcon} onClick={onClick} />;\r\n  }\r\n  return null;\r\n};\r\n\r\nconst renderItemName = ({ item, classNames }: IContextualMenuItemProps) => {\r\n  if (item.text || item.name) {\r\n    return <span className={classNames.label}>{item.text || item.name}</span>;\r\n  }\r\n  return null;\r\n};\r\n\r\nconst renderSecondaryText = ({ item, classNames }: IContextualMenuItemProps) => {\r\n  if (item.secondaryText) {\r\n    return <span className={classNames.secondaryText}>{item.secondaryText}</span>;\r\n  }\r\n  return null;\r\n};\r\n\r\nconst renderSubMenuIcon = ({ item, classNames }: IContextualMenuItemProps) => {\r\n  if (hasSubmenu(item)) {\r\n    return <Icon iconName={getRTL() ? 'ChevronLeft' : 'ChevronRight'} {...item.submenuIconProps} className={classNames.subMenuIcon} />;\r\n  }\r\n  return null;\r\n};\r\n\r\nexport class ContextualMenuItemBase extends BaseComponent<IContextualMenuItemProps, {}> {\r\n  public render() {\r\n    const { item, classNames } = this.props;\r\n\r\n    return (\r\n      <div className={item.split ? classNames.linkContentMenu : classNames.linkContent}>\r\n        {renderCheckMarkIcon(this.props)}\r\n        {renderItemIcon(this.props)}\r\n        {renderItemName(this.props)}\r\n        {renderSecondaryText(this.props)}\r\n        {renderSubMenuIcon(this.props)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public openSubMenu = (): void => {\r\n    const { item, openSubMenu, getSubmenuTarget } = this.props;\r\n    if (getSubmenuTarget) {\r\n      const submenuTarget = getSubmenuTarget();\r\n      if (hasSubmenu(item) && openSubMenu && submenuTarget) {\r\n        openSubMenu(item, submenuTarget);\r\n      }\r\n    }\r\n  };\r\n\r\n  public dismissSubMenu = (): void => {\r\n    const { item, dismissSubMenu } = this.props;\r\n    if (hasSubmenu(item) && dismissSubMenu) {\r\n      dismissSubMenu();\r\n    }\r\n  };\r\n\r\n  public dismissMenu = (dismissAll?: boolean): void => {\r\n    const { dismissMenu } = this.props;\r\n    if (dismissMenu) {\r\n      dismissMenu(undefined /* ev */, dismissAll);\r\n    }\r\n  };\r\n}\r\n","import { memoizeFunction } from '../../Utilities';\r\nimport { mergeStyleSets, ITheme } from '../../Styling';\r\nimport { IVerticalDividerClassNames } from './VerticalDivider.types';\r\n\r\nexport const getDividerClassNames = memoizeFunction(\r\n  (theme: ITheme): IVerticalDividerClassNames => {\r\n    return mergeStyleSets({\r\n      wrapper: {\r\n        display: 'inline-flex',\r\n        height: '100%',\r\n        alignItems: 'center'\r\n      },\r\n      divider: {\r\n        width: 1,\r\n        height: '100%',\r\n        backgroundColor: theme.palette.neutralTertiaryAlt\r\n      }\r\n    });\r\n  }\r\n);\r\n","import {\r\n  concatStyleSets,\r\n  FontSizes,\r\n  getFocusStyle,\r\n  HighContrastSelector,\r\n  IRawStyle,\r\n  ITheme,\r\n  getScreenSelector,\r\n  ScreenWidthMaxMedium\r\n} from '../../Styling';\r\nimport { IMenuItemStyles } from './ContextualMenu.types';\r\nimport { memoizeFunction } from '../../Utilities';\r\n\r\nexport const CONTEXTUAL_MENU_ITEM_HEIGHT = '32px';\r\n\r\nconst MediumScreenSelector = getScreenSelector(0, ScreenWidthMaxMedium);\r\n\r\nconst getItemHighContrastStyles = memoizeFunction(\r\n  (): IRawStyle => {\r\n    return {\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          backgroundColor: 'Highlight',\r\n          borderColor: 'Highlight',\r\n          color: 'HighlightText',\r\n          MsHighContrastAdjust: 'none'\r\n        }\r\n      }\r\n    };\r\n  }\r\n);\r\n\r\nexport const getMenuItemStyles = memoizeFunction(\r\n  (theme: ITheme): IMenuItemStyles => {\r\n    const { semanticColors, fonts } = theme;\r\n    const ContextualMenuItemBackgroundHoverColor = semanticColors.menuItemBackgroundHovered;\r\n    const ContextualMenuItemBackgroundSelectedColor = semanticColors.menuItemBackgroundChecked;\r\n    const ContextualMenuItemDividerColor = semanticColors.bodyDivider;\r\n\r\n    const menuItemStyles: IMenuItemStyles = {\r\n      item: [\r\n        fonts.medium,\r\n        {\r\n          color: semanticColors.bodyText,\r\n          position: 'relative',\r\n          boxSizing: 'border-box'\r\n        }\r\n      ],\r\n      divider: {\r\n        display: 'block',\r\n        height: '1px',\r\n        backgroundColor: ContextualMenuItemDividerColor,\r\n        position: 'relative'\r\n      },\r\n      root: [\r\n        getFocusStyle(theme),\r\n        fonts.medium,\r\n        {\r\n          color: semanticColors.bodyText,\r\n          backgroundColor: 'transparent',\r\n          border: 'none',\r\n          width: '100%',\r\n          height: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n          lineHeight: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n          display: 'block',\r\n          cursor: 'pointer',\r\n          padding: '0px 8px 0 4px', // inner elements have a margin of 4px (4 + 4 = 8px as on right side)\r\n          textAlign: 'left'\r\n        }\r\n      ],\r\n      rootDisabled: {\r\n        color: semanticColors.disabledBodyText,\r\n        cursor: 'default',\r\n        pointerEvents: 'none',\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'GrayText',\r\n            opacity: 1\r\n          }\r\n        }\r\n      },\r\n      rootHovered: {\r\n        backgroundColor: ContextualMenuItemBackgroundHoverColor,\r\n        ...getItemHighContrastStyles()\r\n      },\r\n      rootFocused: {\r\n        backgroundColor: ContextualMenuItemBackgroundHoverColor,\r\n        ...getItemHighContrastStyles()\r\n      },\r\n      rootChecked: {\r\n        ...getItemHighContrastStyles()\r\n      },\r\n      rootPressed: {\r\n        backgroundColor: ContextualMenuItemBackgroundSelectedColor,\r\n        ...getItemHighContrastStyles()\r\n      },\r\n      rootExpanded: {\r\n        backgroundColor: ContextualMenuItemBackgroundSelectedColor,\r\n        color: semanticColors.bodyTextChecked,\r\n        ...getItemHighContrastStyles()\r\n      },\r\n      linkContent: {\r\n        whiteSpace: 'nowrap',\r\n        height: 'inherit',\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        maxWidth: '100%'\r\n      },\r\n      anchorLink: {\r\n        padding: '0px 8px 0 4px', // inner elements have a margin of 4px (4 + 4 = 8px as on right side)\r\n        textRendering: 'auto',\r\n        color: 'inherit',\r\n        letterSpacing: 'normal',\r\n        wordSpacing: 'normal',\r\n        textTransform: 'none',\r\n        textIndent: '0px',\r\n        textShadow: 'none',\r\n        textDecoration: 'none',\r\n        boxSizing: 'border-box'\r\n      },\r\n      label: {\r\n        margin: '0 4px',\r\n        verticalAlign: 'middle',\r\n        display: 'inline-block',\r\n        flexGrow: '1',\r\n        textOverflow: 'ellipsis',\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap'\r\n      },\r\n      secondaryText: {\r\n        color: theme.palette.neutralSecondary,\r\n        paddingLeft: '20px',\r\n        textAlign: 'right'\r\n      },\r\n      icon: {\r\n        display: 'inline-block',\r\n        minHeight: '1px',\r\n        maxHeight: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n        width: '14px',\r\n        margin: '0 4px',\r\n        verticalAlign: 'middle',\r\n        flexShrink: '0'\r\n      },\r\n      iconColor: {\r\n        color: semanticColors.menuIcon,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'inherit'\r\n          },\r\n          ['$root:hover &']: {\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                color: 'HighlightText'\r\n              }\r\n            }\r\n          },\r\n          ['$root:focus &']: {\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                color: 'HighlightText'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n      iconDisabled: {\r\n        color: semanticColors.disabledBodyText\r\n      },\r\n      checkmarkIcon: {\r\n        color: semanticColors.bodySubtext,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'HighlightText'\r\n          }\r\n        }\r\n      },\r\n      subMenuIcon: {\r\n        height: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n        lineHeight: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n        textAlign: 'center',\r\n        display: 'inline-block',\r\n        verticalAlign: 'middle',\r\n        flexShrink: '0',\r\n        fontSize: FontSizes.small, // 12px\r\n        selectors: {\r\n          [MediumScreenSelector]: {\r\n            fontSize: FontSizes.icon // 16px\r\n          }\r\n        }\r\n      },\r\n      splitButtonFlexContainer: [\r\n        getFocusStyle(theme),\r\n        {\r\n          display: 'flex',\r\n          height: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n          flexWrap: 'nowrap',\r\n          justifyContent: 'center',\r\n          alignItems: 'center'\r\n        }\r\n      ]\r\n    };\r\n\r\n    return concatStyleSets(menuItemStyles);\r\n  }\r\n);\r\n","import { getDividerClassNames } from '../Divider/VerticalDivider.classNames';\r\nimport { getMenuItemStyles } from './ContextualMenu.cnstyles';\r\nimport { ITheme, mergeStyleSets, getGlobalClassNames, getScreenSelector, ScreenWidthMaxMedium } from '../../Styling';\r\nimport { IVerticalDividerClassNames } from '../Divider/VerticalDivider.types';\r\nimport { memoizeFunction, IsFocusVisibleClassName } from '../../Utilities';\r\nimport { IContextualMenuItemStyles, IContextualMenuItemStyleProps } from './ContextualMenuItem.types';\r\nimport { IContextualMenuSubComponentStyles } from './ContextualMenu.types';\r\n\r\n/**\r\n * @deprecated in favor of mergeStyles API.\r\n */\r\nexport interface IContextualMenuClassNames {\r\n  container: string;\r\n  root: string;\r\n  list: string;\r\n  header: string;\r\n  title: string;\r\n  subComponentStyles?: IContextualMenuSubComponentStyles;\r\n}\r\n\r\n/**\r\n * @deprecated in favor of mergeStyles API.\r\n */\r\nexport interface IMenuItemClassNames {\r\n  item: string;\r\n  divider: string;\r\n  root: string;\r\n  linkContent: string;\r\n  icon: string;\r\n  checkmarkIcon: string;\r\n  subMenuIcon: string;\r\n  label: string;\r\n  secondaryText: string;\r\n  splitContainer: string;\r\n  splitPrimary: string;\r\n  splitMenu: string;\r\n  linkContentMenu: string;\r\n}\r\n\r\nconst MediumScreenSelector = getScreenSelector(0, ScreenWidthMaxMedium);\r\n\r\nexport const getSplitButtonVerticalDividerClassNames = memoizeFunction(\r\n  (theme: ITheme): IVerticalDividerClassNames => {\r\n    return mergeStyleSets(getDividerClassNames(theme), {\r\n      wrapper: {\r\n        position: 'absolute',\r\n        right: 28, // width of the splitMenu based on the padding plus icon fontSize\r\n        selectors: {\r\n          [MediumScreenSelector]: {\r\n            right: 32 // fontSize of the icon increased from 12px to 16px\r\n          }\r\n        }\r\n      },\r\n      divider: {\r\n        height: 16,\r\n        width: 1\r\n      }\r\n    });\r\n  }\r\n);\r\n\r\nconst GlobalClassNames = {\r\n  item: 'ms-ContextualMenu-item',\r\n  divider: 'ms-ContextualMenu-divider',\r\n  root: 'ms-ContextualMenu-link',\r\n  isChecked: 'is-checked',\r\n  isExpanded: 'is-expanded',\r\n  isDisabled: 'is-disabled',\r\n  linkContent: 'ms-ContextualMenu-linkContent',\r\n  linkContentMenu: 'ms-ContextualMenu-linkContent',\r\n  icon: 'ms-ContextualMenu-icon',\r\n  iconColor: 'ms-ContextualMenu-iconColor',\r\n  checkmarkIcon: 'ms-ContextualMenu-checkmarkIcon',\r\n  subMenuIcon: 'ms-ContextualMenu-submenuIcon',\r\n  label: 'ms-ContextualMenu-itemText',\r\n  secondaryText: 'ms-ContextualMenu-secondaryText'\r\n};\r\n\r\n/**\r\n * @deprecated To be removed in 7.0.\r\n * @internal\r\n * This is a package-internal method that has been depended on.\r\n * It is being kept in this form for backwards compatibility.\r\n * It should be cleaned up in 7.0.\r\n *\r\n * TODO: Audit perf. impact of and potentially remove memoizeFunction.\r\n * https://github.com/OfficeDev/office-ui-fabric-react/issues/5534\r\n */\r\nexport const getItemClassNames = memoizeFunction(\r\n  (\r\n    theme: ITheme,\r\n    disabled: boolean,\r\n    expanded: boolean,\r\n    checked: boolean,\r\n    isAnchorLink: boolean,\r\n    knownIcon: boolean,\r\n    itemClassName?: string,\r\n    dividerClassName?: string,\r\n    iconClassName?: string,\r\n    subMenuClassName?: string,\r\n    primaryDisabled?: boolean,\r\n    className?: string\r\n  ): IContextualMenuItemStyles => {\r\n    const styles = getMenuItemStyles(theme);\r\n    const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n    return mergeStyleSets({\r\n      item: [classNames.item, styles.item, itemClassName],\r\n      divider: [classNames.divider, styles.divider, dividerClassName],\r\n      root: [\r\n        classNames.root,\r\n        styles.root,\r\n        checked && [classNames.isChecked, styles.rootChecked],\r\n        isAnchorLink && styles.anchorLink,\r\n        expanded && [classNames.isExpanded, styles.rootExpanded],\r\n        disabled && [classNames.isDisabled, styles.rootDisabled],\r\n        !disabled &&\r\n          !expanded && [\r\n            {\r\n              selectors: {\r\n                ':hover': styles.rootHovered,\r\n                ':active': styles.rootPressed,\r\n                [`.${IsFocusVisibleClassName} &:focus, .${IsFocusVisibleClassName} &:focus:hover`]: styles.rootFocused,\r\n                [`.${IsFocusVisibleClassName} &:hover`]: { background: 'inherit;' }\r\n              }\r\n            }\r\n          ],\r\n        className\r\n      ],\r\n      splitPrimary: [\r\n        styles.root,\r\n        checked && ['is-checked', styles.rootChecked],\r\n        (disabled || primaryDisabled) && ['is-disabled', styles.rootDisabled],\r\n        !(disabled || primaryDisabled) &&\r\n          !checked && [\r\n            {\r\n              selectors: {\r\n                ':hover': styles.rootHovered,\r\n                ':hover ~ $splitMenu': styles.rootHovered, // when hovering over the splitPrimary also affect the splitMenu\r\n                ':active': styles.rootPressed,\r\n                [`.${IsFocusVisibleClassName} &:focus, .${IsFocusVisibleClassName} &:focus:hover`]: styles.rootFocused,\r\n                [`.${IsFocusVisibleClassName} &:hover`]: { background: 'inherit;' }\r\n              }\r\n            }\r\n          ]\r\n      ],\r\n      splitMenu: [\r\n        styles.root,\r\n        {\r\n          flexBasis: '0',\r\n          padding: '0 8px',\r\n          minWidth: 28\r\n        },\r\n        expanded && ['is-expanded', styles.rootExpanded],\r\n        disabled && ['is-disabled', styles.rootDisabled],\r\n        !disabled &&\r\n          !expanded && [\r\n            {\r\n              selectors: {\r\n                ':hover': styles.rootHovered,\r\n                ':active': styles.rootPressed,\r\n                [`.${IsFocusVisibleClassName} &:focus, .${IsFocusVisibleClassName} &:focus:hover`]: styles.rootFocused,\r\n                [`.${IsFocusVisibleClassName} &:hover`]: { background: 'inherit;' }\r\n              }\r\n            }\r\n          ]\r\n      ],\r\n      anchorLink: styles.anchorLink,\r\n      linkContent: [classNames.linkContent, styles.linkContent],\r\n      linkContentMenu: [\r\n        classNames.linkContentMenu,\r\n        styles.linkContent,\r\n        {\r\n          justifyContent: 'center'\r\n        }\r\n      ],\r\n      icon: [\r\n        classNames.icon,\r\n        knownIcon && styles.iconColor,\r\n        styles.icon,\r\n        iconClassName,\r\n        disabled && [classNames.isDisabled, styles.iconDisabled]\r\n      ],\r\n      iconColor: styles.iconColor,\r\n      checkmarkIcon: [classNames.checkmarkIcon, knownIcon && styles.checkmarkIcon, styles.icon, iconClassName],\r\n      subMenuIcon: [classNames.subMenuIcon, styles.subMenuIcon, subMenuClassName],\r\n      label: [classNames.label, styles.label],\r\n      secondaryText: [classNames.secondaryText, styles.secondaryText],\r\n      splitContainer: [\r\n        styles.splitButtonFlexContainer,\r\n        {\r\n          alignItems: 'flex-start'\r\n        },\r\n        !disabled &&\r\n          !checked && [\r\n            {\r\n              selectors: {\r\n                [`.${IsFocusVisibleClassName} &:focus, .${IsFocusVisibleClassName} &:focus:hover`]: styles.rootFocused\r\n              }\r\n            }\r\n          ]\r\n      ]\r\n    });\r\n  }\r\n);\r\n\r\n/**\r\n * Wrapper function for generating ContextualMenuItem classNames which adheres to\r\n * the getStyles API, but invokes memoized className generator function with\r\n * primitive values.\r\n *\r\n * @param props the ContextualMenuItem style props used to generate its styles.\r\n */\r\nexport const getItemStyles = (props: IContextualMenuItemStyleProps): IContextualMenuItemStyles => {\r\n  const {\r\n    theme,\r\n    disabled,\r\n    expanded,\r\n    checked,\r\n    isAnchorLink,\r\n    knownIcon,\r\n    itemClassName,\r\n    dividerClassName,\r\n    iconClassName,\r\n    subMenuClassName,\r\n    primaryDisabled,\r\n    className\r\n  } = props;\r\n\r\n  return getItemClassNames(\r\n    theme,\r\n    disabled,\r\n    expanded,\r\n    checked,\r\n    isAnchorLink,\r\n    knownIcon,\r\n    itemClassName,\r\n    dividerClassName,\r\n    iconClassName,\r\n    subMenuClassName,\r\n    primaryDisabled,\r\n    className\r\n  );\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IContextualMenuItemProps, IContextualMenuItemStyleProps, IContextualMenuItemStyles } from './ContextualMenuItem.types';\r\nimport { ContextualMenuItemBase } from './ContextualMenuItem.base';\r\nimport { getItemStyles } from './ContextualMenu.classNames';\r\n\r\n/**\r\n * ContextualMenuItem description\r\n */\r\nexport const ContextualMenuItem: React.StatelessComponent<IContextualMenuItemProps> = styled<\r\n  IContextualMenuItemProps,\r\n  IContextualMenuItemStyleProps,\r\n  IContextualMenuItemStyles\r\n>(ContextualMenuItemBase, getItemStyles, undefined, { scope: 'ContextualMenuItem' });\r\n","import * as React from 'react';\r\nimport { BaseComponent, shallowCompare } from '../../../Utilities';\r\nimport { IContextualMenuItemWrapperProps } from './ContextualMenuItemWrapper.types';\r\nimport { IContextualMenuItem } from '../../../ContextualMenu';\r\n\r\nexport class ContextualMenuItemWrapper extends BaseComponent<IContextualMenuItemWrapperProps> {\r\n  public shouldComponentUpdate(newProps: IContextualMenuItemWrapperProps): boolean {\r\n    return !shallowCompare(newProps, this.props);\r\n  }\r\n\r\n  protected _onItemMouseEnter = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseEnter } = this.props;\r\n    if (onItemMouseEnter) {\r\n      onItemMouseEnter(item, ev, ev.currentTarget as HTMLElement);\r\n    }\r\n  };\r\n\r\n  protected _onItemClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemClickBase } = this.props;\r\n    if (onItemClickBase) {\r\n      onItemClickBase(item, ev, ev.currentTarget as HTMLElement);\r\n    }\r\n  };\r\n\r\n  protected _onItemMouseLeave = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseLeave } = this.props;\r\n    if (onItemMouseLeave) {\r\n      onItemMouseLeave(item, ev);\r\n    }\r\n  };\r\n\r\n  protected _onItemKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    const { item, onItemKeyDown } = this.props;\r\n    if (onItemKeyDown) {\r\n      onItemKeyDown(item, ev);\r\n    }\r\n  };\r\n\r\n  protected _onItemMouseMove = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseMove } = this.props;\r\n    if (onItemMouseMove) {\r\n      onItemMouseMove(item, ev, ev.currentTarget as HTMLElement);\r\n    }\r\n  };\r\n\r\n  protected _getSubMenuId = (item: IContextualMenuItem): string | undefined => {\r\n    const { getSubMenuId } = this.props;\r\n    if (getSubMenuId) {\r\n      return getSubMenuId(item);\r\n    }\r\n  };\r\n\r\n  protected _getSubmenuTarget = (): HTMLElement | undefined => {\r\n    return undefined;\r\n  };\r\n}\r\n","import { IKeytipProps } from '../../Keytip';\r\nimport { arraysEqual, replaceElement, findIndex, find, EventGroup, getId } from '../../Utilities';\r\nimport { KeytipEvents } from '../../utilities/keytips/KeytipConstants';\r\n\r\nexport interface IUniqueKeytip {\r\n  uniqueID: string;\r\n  keytip: IKeytipProps;\r\n}\r\n\r\n/**\r\n * This class is responsible for handling registering, updating, and unregistering of keytips\r\n */\r\nexport class KeytipManager {\r\n  private static _instance: KeytipManager = new KeytipManager();\r\n\r\n  public keytips: IUniqueKeytip[] = [];\r\n  public persistedKeytips: IUniqueKeytip[] = [];\r\n\r\n  // This is (and should be) updated and kept in sync\r\n  // with the inKeytipMode in KeytipLayer.\r\n  public inKeytipMode = false;\r\n\r\n  // Boolean that gets checked before entering keytip mode by the KeytipLayer\r\n  // Used for an override in special cases (e.g. Disable entering keytip mode when a modal is shown)\r\n  public shouldEnterKeytipMode = true;\r\n\r\n  /**\r\n   * Static function to get singleton KeytipManager instance\r\n   *\r\n   * @returns {KeytipManager} Singleton KeytipManager instance\r\n   */\r\n  public static getInstance(): KeytipManager {\r\n    return this._instance;\r\n  }\r\n\r\n  /**\r\n   * Registers a keytip\r\n   *\r\n   * @param keytipProps - Keytip to register\r\n   * @param persisted - T/F if this keytip should be persisted, default is false\r\n   * @returns {string} Unique ID for this keytip\r\n   */\r\n  public register(keytipProps: IKeytipProps, persisted: boolean = false): string {\r\n    let props: IKeytipProps = keytipProps;\r\n    if (!persisted) {\r\n      // Add the overflowSetSequence if necessary\r\n      props = this.addParentOverflow(keytipProps);\r\n    }\r\n    // Create a unique keytip\r\n    const uniqueKeytip: IUniqueKeytip = this._getUniqueKtp(props);\r\n    // Add to array\r\n    persisted ? this.persistedKeytips.push(uniqueKeytip) : this.keytips.push(uniqueKeytip);\r\n\r\n    const event = persisted ? KeytipEvents.PERSISTED_KEYTIP_ADDED : KeytipEvents.KEYTIP_ADDED;\r\n    EventGroup.raise(this, event, {\r\n      keytip: props,\r\n      uniqueID: uniqueKeytip.uniqueID\r\n    });\r\n\r\n    return uniqueKeytip.uniqueID;\r\n  }\r\n\r\n  /**\r\n   * Update a keytip\r\n   *\r\n   * @param keytipProps - Keytip to update\r\n   * @param uniqueID - Unique ID of this keytip\r\n   */\r\n  public update(keytipProps: IKeytipProps, uniqueID: string): void {\r\n    const newKeytipProps = this.addParentOverflow(keytipProps);\r\n    const uniqueKeytip = this._getUniqueKtp(newKeytipProps, uniqueID);\r\n    const keytipIndex = findIndex(this.keytips, (ktp: IUniqueKeytip) => {\r\n      return ktp.uniqueID === uniqueID;\r\n    });\r\n    if (keytipIndex >= 0) {\r\n      // Update everything except 'visible'\r\n      uniqueKeytip.keytip.visible = this.keytips[keytipIndex].keytip.visible;\r\n      // Update keytip in this.keytips\r\n      this.keytips = replaceElement(this.keytips, uniqueKeytip, keytipIndex);\r\n      // Raise event\r\n      EventGroup.raise(this, KeytipEvents.KEYTIP_UPDATED, {\r\n        keytip: uniqueKeytip.keytip,\r\n        uniqueID: uniqueKeytip.uniqueID\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unregisters a keytip\r\n   *\r\n   * @param keytipToRemove - IKeytipProps of the keytip to remove\r\n   * @param uniqueID - Unique ID of this keytip\r\n   * @param persisted - T/F if this keytip should be persisted, default is false\r\n   */\r\n  public unregister(keytipToRemove: IKeytipProps, uniqueID: string, persisted: boolean = false): void {\r\n    if (persisted) {\r\n      // Remove keytip from this.persistedKeytips\r\n      this.persistedKeytips = this.persistedKeytips.filter((uniqueKtp: IUniqueKeytip) => {\r\n        return uniqueKtp.uniqueID !== uniqueID;\r\n      });\r\n    } else {\r\n      // Remove keytip from this.keytips\r\n      this.keytips = this.keytips.filter((uniqueKtp: IUniqueKeytip) => {\r\n        return uniqueKtp.uniqueID !== uniqueID;\r\n      });\r\n    }\r\n\r\n    const event = persisted ? KeytipEvents.PERSISTED_KEYTIP_REMOVED : KeytipEvents.KEYTIP_REMOVED;\r\n    EventGroup.raise(this, event, {\r\n      keytip: keytipToRemove,\r\n      uniqueID: uniqueID\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Manual call to enter keytip mode\r\n   */\r\n  public enterKeytipMode(): void {\r\n    EventGroup.raise(this, KeytipEvents.ENTER_KEYTIP_MODE);\r\n  }\r\n\r\n  /**\r\n   * Manual call to exit keytip mode\r\n   */\r\n  public exitKeytipMode(): void {\r\n    EventGroup.raise(this, KeytipEvents.EXIT_KEYTIP_MODE);\r\n  }\r\n\r\n  /**\r\n   * Gets all IKeytipProps from this.keytips\r\n   *\r\n   * @returns {IKeytipProps[]} All keytips stored in the manager\r\n   */\r\n  public getKeytips(): IKeytipProps[] {\r\n    return this.keytips.map((uniqueKeytip: IUniqueKeytip) => {\r\n      return uniqueKeytip.keytip;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Adds the overflowSetSequence to the keytipProps if its parent keytip also has it\r\n   *\r\n   * @param keytipProps - Keytip props to add overflowSetSequence to if necessary\r\n   * @returns {IKeytipProps} - Modified keytip props, if needed to be modified\r\n   */\r\n  public addParentOverflow(keytipProps: IKeytipProps): IKeytipProps {\r\n    const fullSequence = [...keytipProps.keySequences];\r\n    fullSequence.pop();\r\n    if (fullSequence.length !== 0) {\r\n      const parentKeytip = find(this.getKeytips(), (keytip: IKeytipProps) => {\r\n        return arraysEqual(fullSequence, keytip.keySequences);\r\n      });\r\n      if (parentKeytip && parentKeytip.overflowSetSequence) {\r\n        return {\r\n          ...keytipProps,\r\n          overflowSetSequence: parentKeytip.overflowSetSequence\r\n        };\r\n      }\r\n    }\r\n    return keytipProps;\r\n  }\r\n\r\n  /**\r\n   * Public function to bind for overflow items that have a submenu\r\n   *\r\n   * @param overflowButtonSequences\r\n   * @param keytipSequences\r\n   */\r\n  public menuExecute(overflowButtonSequences: string[], keytipSequences: string[]) {\r\n    EventGroup.raise(this, KeytipEvents.PERSISTED_KEYTIP_EXECUTE, {\r\n      overflowButtonSequences,\r\n      keytipSequences\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Creates an IUniqueKeytip object\r\n   *\r\n   * @param keytipProps - IKeytipProps\r\n   * @param uniqueID - Unique ID, will default to the next unique ID if not passed\r\n   * @returns {IUniqueKeytip} IUniqueKeytip object\r\n   */\r\n  private _getUniqueKtp(keytipProps: IKeytipProps, uniqueID: string = getId()): IUniqueKeytip {\r\n    return { keytip: { ...keytipProps }, uniqueID };\r\n  }\r\n}\r\n","import { KTP_SEPARATOR, KTP_PREFIX, DATAKTP_TARGET, DATAKTP_EXECUTE_TARGET, KTP_LAYER_ID } from './KeytipConstants';\r\nimport { addElementAtIndex } from '../../Utilities';\r\n\r\n/**\r\n * Converts a whole set of KeySequences into one keytip ID, which will be the ID for the last keytip sequence specified\r\n * keySequences should not include the initial keytip 'start' sequence.\r\n *\r\n * @param keySequences - Full path of IKeySequences for one keytip.\r\n * @returns {string} String to use for the keytip ID.\r\n */\r\nexport function sequencesToID(keySequences: string[]): string {\r\n  return keySequences.reduce((prevValue: string, keySequence: string): string => {\r\n    return prevValue + KTP_SEPARATOR + keySequence.split('').join(KTP_SEPARATOR);\r\n  }, KTP_PREFIX);\r\n}\r\n\r\n/**\r\n * Merges an overflow sequence with a key sequence.\r\n *\r\n * @param keySequences - Full sequence for one keytip.\r\n * @param overflowKeySequences - Full overflow keytip sequence.\r\n * @returns {string[]} Sequence that will be used by the keytip when in the overflow.\r\n */\r\nexport function mergeOverflows(keySequences: string[], overflowKeySequences: string[]): string[] {\r\n  const overflowSequenceLen = overflowKeySequences.length;\r\n  const overflowSequence = [...overflowKeySequences].pop();\r\n  const newKeySequences = [...keySequences];\r\n  return addElementAtIndex(newKeySequences, overflowSequenceLen - 1, overflowSequence!);\r\n}\r\n\r\n/**\r\n * Constructs the data-ktp-target attribute selector from a full key sequence.\r\n *\r\n * @param keySequences - Full string[] for a Keytip.\r\n * @returns {string} String selector to use to query for the keytip target.\r\n */\r\nexport function ktpTargetFromSequences(keySequences: string[]): string {\r\n  return '[' + DATAKTP_TARGET + '=\"' + sequencesToID(keySequences) + '\"]';\r\n}\r\n\r\n/**\r\n * Constructs the data-ktp-execute-target attribute selector from a keytip ID.\r\n *\r\n * @param keytipId - ID of the Keytip.\r\n * @returns {string} String selector to use to query for the keytip execute target.\r\n */\r\nexport function ktpTargetFromId(keytipId: string): string {\r\n  return '[' + DATAKTP_EXECUTE_TARGET + '=\"' + keytipId + '\"]';\r\n}\r\n\r\n/**\r\n * Gets the aria-describedby value to put on the component with this keytip.\r\n *\r\n * @param keySequences - KeySequences of the keytip.\r\n * @returns {string} The aria-describedby value to set on the component with this keytip.\r\n */\r\nexport function getAriaDescribedBy(keySequences: string[]): string {\r\n  const describedby = ' ' + KTP_LAYER_ID;\r\n  if (!keySequences.length) {\r\n    // Return just the layer ID\r\n    return describedby;\r\n  }\r\n\r\n  return describedby + ' ' + sequencesToID(keySequences);\r\n}\r\n","import * as React from 'react';\r\nimport { IRenderComponent, mergeAriaAttributeValues } from '../../Utilities';\r\nimport { IKeytipDataProps } from './KeytipData.types';\r\nimport { IKeytipProps } from '../../Keytip';\r\nimport { KeytipManager } from '../../utilities/keytips/KeytipManager';\r\nimport { mergeOverflows, sequencesToID, getAriaDescribedBy } from '../../utilities/keytips/KeytipUtils';\r\n\r\n/**\r\n * A small element to help the target component correctly read out its aria-describedby for its Keytip\r\n */\r\nexport class KeytipData extends React.Component<IKeytipDataProps & IRenderComponent<{}>, {}> {\r\n  private _uniqueId: string;\r\n  private _keytipManager: KeytipManager = KeytipManager.getInstance();\r\n\r\n  public componentDidMount() {\r\n    // Register Keytip in KeytipManager\r\n    if (this.props.keytipProps) {\r\n      this._uniqueId = this._keytipManager.register(this._getKtpProps());\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    // Unregister Keytip in KeytipManager\r\n    this.props.keytipProps && this._keytipManager.unregister(this._getKtpProps(), this._uniqueId);\r\n  }\r\n\r\n  public componentDidUpdate() {\r\n    // Update Keytip in KeytipManager\r\n    this.props.keytipProps && this._keytipManager.update(this._getKtpProps(), this._uniqueId);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { children, keytipProps, ariaDescribedBy } = this.props;\r\n    let nativeKeytipProps: any = {};\r\n    if (keytipProps) {\r\n      nativeKeytipProps = this._getKtpAttrs(keytipProps, ariaDescribedBy);\r\n    }\r\n    return children(nativeKeytipProps);\r\n  }\r\n\r\n  private _getKtpProps(): IKeytipProps {\r\n    return {\r\n      disabled: this.props.disabled,\r\n      ...this.props.keytipProps!\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Gets the aria- and data- attributes to attach to the component\r\n   * @param keytipProps - props for Keytip\r\n   * @param describedByPrepend - ariaDescribedBy value to prepend\r\n   */\r\n  private _getKtpAttrs(keytipProps: IKeytipProps, describedByPrepend?: string): any {\r\n    if (keytipProps) {\r\n      // Add the parent overflow sequence if necessary\r\n      const newKeytipProps = this._keytipManager.addParentOverflow(keytipProps);\r\n\r\n      // Construct aria-describedby and data-ktp-id attributes and return\r\n      const ariaDescribedBy = getAriaDescribedBy(newKeytipProps.keySequences);\r\n      let keySequences = [...newKeytipProps.keySequences];\r\n      if (newKeytipProps.overflowSetSequence) {\r\n        keySequences = mergeOverflows(keySequences, newKeytipProps.overflowSetSequence);\r\n      }\r\n      const ktpId = sequencesToID(keySequences);\r\n\r\n      return {\r\n        'aria-describedby': mergeAriaAttributeValues(describedByPrepend, ariaDescribedBy),\r\n        'data-ktp-target': ktpId,\r\n        'data-ktp-execute-target': ktpId\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { anchorProperties, getNativeProps } from '../../../Utilities';\r\nimport { ContextualMenuItemWrapper } from './ContextualMenuItemWrapper';\r\nimport { KeytipData } from '../../../KeytipData';\r\nimport { isItemDisabled, hasSubmenu } from '../../../utilities/contextualMenu/index';\r\nimport { ContextualMenuItem } from '../ContextualMenuItem';\r\nimport { IKeytipDataProps } from '../../KeytipData/KeytipData.types';\r\n\r\nexport class ContextualMenuAnchor extends ContextualMenuItemWrapper {\r\n  private _anchor = React.createRef<HTMLAnchorElement>();\r\n\r\n  public render() {\r\n    const {\r\n      item,\r\n      classNames,\r\n      index,\r\n      focusableElementIndex,\r\n      totalItemCount,\r\n      hasCheckmarks,\r\n      hasIcons,\r\n      contextualMenuItemAs: ChildrenRenderer = ContextualMenuItem,\r\n      expandedMenuItemKey,\r\n      onItemClick,\r\n      openSubMenu,\r\n      dismissSubMenu,\r\n      dismissMenu\r\n    } = this.props;\r\n\r\n    let anchorRel = item.rel;\r\n    if (item.target && item.target.toLowerCase() === '_blank') {\r\n      anchorRel = anchorRel ? anchorRel : 'nofollow noopener noreferrer'; // Safe default to prevent tabjacking\r\n    }\r\n\r\n    const subMenuId = this._getSubMenuId(item);\r\n    const itemHasSubmenu = hasSubmenu(item);\r\n    const nativeProps = getNativeProps<React.HTMLAttributes<HTMLAnchorElement>>(item, anchorProperties);\r\n    const disabled = isItemDisabled(item);\r\n    const { itemProps } = item;\r\n\r\n    let { keytipProps } = item;\r\n    if (keytipProps && itemHasSubmenu) {\r\n      keytipProps = {\r\n        ...keytipProps,\r\n        hasMenu: true\r\n      };\r\n    }\r\n\r\n    return (\r\n      <div>\r\n        <KeytipData keytipProps={item.keytipProps} ariaDescribedBy={nativeProps['aria-describedby']} disabled={disabled}>\r\n          {(keytipAttributes: IKeytipDataProps): JSX.Element => (\r\n            <a\r\n              {...nativeProps}\r\n              {...keytipAttributes}\r\n              ref={this._anchor}\r\n              href={item.href}\r\n              target={item.target}\r\n              rel={anchorRel}\r\n              className={classNames.root}\r\n              role=\"menuitem\"\r\n              aria-owns={item.key === expandedMenuItemKey ? subMenuId : undefined}\r\n              aria-haspopup={itemHasSubmenu || undefined}\r\n              aria-expanded={itemHasSubmenu ? item.key === expandedMenuItemKey : undefined}\r\n              aria-posinset={focusableElementIndex + 1}\r\n              aria-setsize={totalItemCount}\r\n              aria-disabled={isItemDisabled(item)}\r\n              style={item.style}\r\n              onClick={this._onItemClick}\r\n              onMouseEnter={this._onItemMouseEnter}\r\n              onMouseLeave={this._onItemMouseLeave}\r\n              onMouseMove={this._onItemMouseMove}\r\n              onKeyDown={itemHasSubmenu ? this._onItemKeyDown : undefined}\r\n            >\r\n              <ChildrenRenderer\r\n                componentRef={item.componentRef}\r\n                item={item}\r\n                classNames={classNames}\r\n                index={index}\r\n                onCheckmarkClick={hasCheckmarks && onItemClick ? onItemClick : undefined}\r\n                hasIcons={hasIcons}\r\n                openSubMenu={openSubMenu}\r\n                dismissSubMenu={dismissSubMenu}\r\n                dismissMenu={dismissMenu}\r\n                getSubmenuTarget={this._getSubmenuTarget}\r\n                {...itemProps}\r\n              />\r\n            </a>\r\n          )}\r\n        </KeytipData>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  protected _getSubmenuTarget = (): HTMLElement | undefined => {\r\n    return this._anchor.current ? this._anchor.current : undefined;\r\n  };\r\n\r\n  protected _onItemClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemClick } = this.props;\r\n    if (onItemClick) {\r\n      onItemClick(item, ev);\r\n    }\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { buttonProperties, getNativeProps } from '../../../Utilities';\r\nimport { ContextualMenuItemWrapper } from './ContextualMenuItemWrapper';\r\nimport { KeytipData } from '../../../KeytipData';\r\nimport { getIsChecked, isItemDisabled, hasSubmenu } from '../../../utilities/contextualMenu/index';\r\nimport { ContextualMenuItem } from '../ContextualMenuItem';\r\nimport { IKeytipDataProps } from '../../KeytipData/KeytipData.types';\r\n\r\nexport class ContextualMenuButton extends ContextualMenuItemWrapper {\r\n  private _btn = React.createRef<HTMLButtonElement>();\r\n\r\n  public render() {\r\n    const {\r\n      item,\r\n      classNames,\r\n      index,\r\n      focusableElementIndex,\r\n      totalItemCount,\r\n      hasCheckmarks,\r\n      hasIcons,\r\n      contextualMenuItemAs: ChildrenRenderer = ContextualMenuItem,\r\n      expandedMenuItemKey,\r\n      onItemMouseDown,\r\n      onItemClick,\r\n      openSubMenu,\r\n      dismissSubMenu,\r\n      dismissMenu\r\n    } = this.props;\r\n\r\n    const subMenuId = this._getSubMenuId(item);\r\n\r\n    const isChecked: boolean | null | undefined = getIsChecked(item);\r\n    const canCheck: boolean = isChecked !== null;\r\n    const defaultRole = canCheck ? 'menuitemcheckbox' : 'menuitem';\r\n    const itemHasSubmenu = hasSubmenu(item);\r\n    const { itemProps, ariaLabel } = item;\r\n\r\n    const buttonNativeProperties = getNativeProps<React.ButtonHTMLAttributes<HTMLButtonElement>>(item, buttonProperties);\r\n    // Do not add the disabled attribute to the button so that it is focusable\r\n    delete buttonNativeProperties.disabled;\r\n\r\n    const itemButtonProperties = {\r\n      className: classNames.root,\r\n      onClick: this._onItemClick,\r\n      onKeyDown: itemHasSubmenu ? this._onItemKeyDown : undefined,\r\n      onMouseEnter: this._onItemMouseEnter,\r\n      onMouseLeave: this._onItemMouseLeave,\r\n      onMouseDown: (ev: React.MouseEvent<HTMLButtonElement>) => (onItemMouseDown ? onItemMouseDown(item, ev) : undefined),\r\n      onMouseMove: this._onItemMouseMove,\r\n      href: item.href,\r\n      title: item.title,\r\n      'aria-label': ariaLabel,\r\n      'aria-haspopup': itemHasSubmenu || undefined,\r\n      'aria-owns': item.key === expandedMenuItemKey ? subMenuId : undefined,\r\n      'aria-expanded': itemHasSubmenu ? item.key === expandedMenuItemKey : undefined,\r\n      'aria-checked': canCheck ? !!isChecked : undefined,\r\n      'aria-posinset': focusableElementIndex + 1,\r\n      'aria-setsize': totalItemCount,\r\n      'aria-disabled': isItemDisabled(item),\r\n      role: item.role || defaultRole,\r\n      style: item.style\r\n    };\r\n\r\n    let { keytipProps } = item;\r\n    if (keytipProps && itemHasSubmenu) {\r\n      keytipProps = {\r\n        ...keytipProps,\r\n        hasMenu: true\r\n      };\r\n    }\r\n\r\n    return (\r\n      <KeytipData keytipProps={keytipProps} ariaDescribedBy={buttonNativeProperties['aria-describedby']} disabled={isItemDisabled(item)}>\r\n        {(keytipAttributes: IKeytipDataProps): JSX.Element => (\r\n          <button ref={this._btn} {...buttonNativeProperties} {...itemButtonProperties} {...keytipAttributes}>\r\n            <ChildrenRenderer\r\n              componentRef={item.componentRef}\r\n              item={item}\r\n              classNames={classNames}\r\n              index={index}\r\n              onCheckmarkClick={hasCheckmarks && onItemClick ? onItemClick : undefined}\r\n              hasIcons={hasIcons}\r\n              openSubMenu={openSubMenu}\r\n              dismissSubMenu={dismissSubMenu}\r\n              dismissMenu={dismissMenu}\r\n              getSubmenuTarget={this._getSubmenuTarget}\r\n              {...itemProps}\r\n            />\r\n          </button>\r\n        )}\r\n      </KeytipData>\r\n    );\r\n  }\r\n\r\n  protected _getSubmenuTarget = (): HTMLElement | undefined => {\r\n    return this._btn.current ? this._btn.current : undefined;\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { getDividerClassNames } from './VerticalDivider.classNames';\r\nimport { IVerticalDividerProps } from './VerticalDivider.types';\r\nimport { getTheme } from '../../Styling';\r\n\r\nexport const VerticalDivider = (props: IVerticalDividerProps) => {\r\n  const theme = getTheme();\r\n  const classNames = props.getClassNames ? props.getClassNames(theme) : getDividerClassNames(theme);\r\n\r\n  return (\r\n    <span className={classNames.wrapper}>\r\n      <span className={classNames.divider} />\r\n    </span>\r\n  );\r\n};\r\n","import * as React from 'react';\r\nimport { buttonProperties, getNativeProps, KeyCodes, mergeAriaAttributeValues } from '../../../Utilities';\r\nimport { ContextualMenuItem } from '../ContextualMenuItem';\r\nimport { IContextualMenuItem } from '../ContextualMenu.types';\r\nimport { IMenuItemClassNames, getSplitButtonVerticalDividerClassNames } from '../ContextualMenu.classNames';\r\nimport { KeytipData } from '../../../KeytipData';\r\nimport { isItemDisabled, hasSubmenu } from '../../../utilities/contextualMenu/index';\r\nimport { VerticalDivider } from '../../../Divider';\r\nimport { ContextualMenuItemWrapper } from './ContextualMenuItemWrapper';\r\n\r\nexport interface IContextualMenuSplitButtonState {}\r\n\r\nconst TouchIdleDelay = 500; /* ms */\r\n\r\nexport class ContextualMenuSplitButton extends ContextualMenuItemWrapper {\r\n  private _splitButton: HTMLDivElement;\r\n  private _lastTouchTimeoutId: number | undefined;\r\n  private _processingTouch: boolean;\r\n\r\n  public componentDidMount() {\r\n    if (this._splitButton && 'onpointerdown' in this._splitButton) {\r\n      this._events.on(this._splitButton, 'pointerdown', this._onPointerDown, true);\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    const {\r\n      item,\r\n      classNames,\r\n      index,\r\n      focusableElementIndex,\r\n      totalItemCount,\r\n      hasCheckmarks,\r\n      hasIcons,\r\n      onItemMouseLeave,\r\n      expandedMenuItemKey\r\n    } = this.props;\r\n\r\n    const itemHasSubmenu = hasSubmenu(item);\r\n\r\n    let { keytipProps } = item;\r\n    if (keytipProps) {\r\n      keytipProps = {\r\n        ...keytipProps,\r\n        hasMenu: true\r\n      };\r\n    }\r\n\r\n    return (\r\n      <KeytipData keytipProps={keytipProps} disabled={isItemDisabled(item)}>\r\n        {(keytipAttributes: any): JSX.Element => (\r\n          <div\r\n            data-ktp-target={keytipAttributes['data-ktp-target']}\r\n            ref={(splitButton: HTMLDivElement) => (this._splitButton = splitButton)}\r\n            role={'menuitem'}\r\n            aria-label={item.ariaLabel}\r\n            className={classNames.splitContainer}\r\n            aria-disabled={isItemDisabled(item)}\r\n            aria-expanded={itemHasSubmenu ? item.key === expandedMenuItemKey : undefined}\r\n            aria-haspopup={true}\r\n            aria-describedby={mergeAriaAttributeValues(item.ariaDescription, keytipAttributes['aria-describedby'])}\r\n            aria-checked={item.isChecked || item.checked}\r\n            aria-posinset={focusableElementIndex + 1}\r\n            aria-setsize={totalItemCount}\r\n            onMouseEnter={this._onItemMouseEnterPrimary}\r\n            onMouseLeave={onItemMouseLeave ? onItemMouseLeave.bind(this, { ...item, subMenuProps: null, items: null }) : undefined}\r\n            onMouseMove={this._onItemMouseMovePrimary}\r\n            onKeyDown={this._onItemKeyDown}\r\n            onClick={this._executeItemClick}\r\n            onTouchStart={this._onTouchStart}\r\n            tabIndex={0}\r\n            data-is-focusable={true}\r\n            aria-roledescription={item['aria-roledescription']}\r\n          >\r\n            {this._renderSplitPrimaryButton(item, classNames, index, hasCheckmarks!, hasIcons!)}\r\n            {this._renderSplitDivider(item)}\r\n            {this._renderSplitIconButton(item, classNames, index, keytipAttributes)}\r\n          </div>\r\n        )}\r\n      </KeytipData>\r\n    );\r\n  }\r\n\r\n  protected _onItemKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    const { item, onItemKeyDown } = this.props;\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._executeItemClick(ev);\r\n      ev.preventDefault();\r\n      ev.stopPropagation();\r\n    } else if (onItemKeyDown) {\r\n      onItemKeyDown(item, ev);\r\n    }\r\n  };\r\n\r\n  protected _getSubmenuTarget = (): HTMLElement | undefined => {\r\n    return this._splitButton;\r\n  };\r\n\r\n  private _renderSplitPrimaryButton(\r\n    item: IContextualMenuItem,\r\n    classNames: IMenuItemClassNames,\r\n    index: number,\r\n    hasCheckmarks: boolean,\r\n    hasIcons: boolean\r\n  ) {\r\n    const { contextualMenuItemAs: ChildrenRenderer = ContextualMenuItem, onItemClick } = this.props;\r\n\r\n    const itemProps: IContextualMenuItem = {\r\n      key: item.key,\r\n      disabled: isItemDisabled(item) || item.primaryDisabled,\r\n      name: item.name,\r\n      text: item.text || item.name,\r\n      className: classNames.splitPrimary,\r\n      canCheck: item.canCheck,\r\n      isChecked: item.isChecked,\r\n      checked: item.checked,\r\n      iconProps: item.iconProps,\r\n      'data-is-focusable': false,\r\n      'aria-hidden': true\r\n    };\r\n\r\n    const { itemProps: itemComponentProps } = item;\r\n\r\n    return (\r\n      <button {...getNativeProps(itemProps, buttonProperties)}>\r\n        <ChildrenRenderer\r\n          data-is-focusable={false}\r\n          item={itemProps}\r\n          classNames={classNames}\r\n          index={index}\r\n          onCheckmarkClick={hasCheckmarks && onItemClick ? onItemClick : undefined}\r\n          hasIcons={hasIcons}\r\n          {...itemComponentProps}\r\n        />\r\n      </button>\r\n    );\r\n  }\r\n\r\n  private _renderSplitDivider(item: IContextualMenuItem) {\r\n    const getDividerClassNames = item.getSplitButtonVerticalDividerClassNames || getSplitButtonVerticalDividerClassNames;\r\n    return <VerticalDivider getClassNames={getDividerClassNames} />;\r\n  }\r\n\r\n  private _renderSplitIconButton(item: IContextualMenuItem, classNames: IMenuItemClassNames, index: number, keytipAttributes: any) {\r\n    const {\r\n      contextualMenuItemAs: ChildrenRenderer = ContextualMenuItem,\r\n      onItemMouseLeave,\r\n      onItemMouseDown,\r\n      openSubMenu,\r\n      dismissSubMenu,\r\n      dismissMenu\r\n    } = this.props;\r\n\r\n    const itemProps: IContextualMenuItem = {\r\n      onClick: this._onIconItemClick,\r\n      disabled: isItemDisabled(item),\r\n      className: classNames.splitMenu,\r\n      subMenuProps: item.subMenuProps,\r\n      submenuIconProps: item.submenuIconProps,\r\n      split: true,\r\n      key: item.key\r\n    };\r\n\r\n    const buttonProps = {\r\n      ...getNativeProps<React.ButtonHTMLAttributes<HTMLButtonElement>>(itemProps, buttonProperties),\r\n      ...{\r\n        onMouseEnter: this._onItemMouseEnterIcon,\r\n        onMouseLeave: onItemMouseLeave ? onItemMouseLeave.bind(this, item) : undefined,\r\n        onMouseDown: (ev: React.MouseEvent<HTMLButtonElement>) => (onItemMouseDown ? onItemMouseDown(item, ev) : undefined),\r\n        onMouseMove: this._onItemMouseMoveIcon,\r\n        'data-is-focusable': false,\r\n        'data-ktp-execute-target': keytipAttributes['data-ktp-execute-target'],\r\n        'aria-hidden': true\r\n      }\r\n    };\r\n\r\n    const { itemProps: itemComponentProps } = item;\r\n\r\n    return (\r\n      <button {...buttonProps}>\r\n        <ChildrenRenderer\r\n          componentRef={item.componentRef}\r\n          item={itemProps}\r\n          classNames={classNames}\r\n          index={index}\r\n          hasIcons={false}\r\n          openSubMenu={openSubMenu}\r\n          dismissSubMenu={dismissSubMenu}\r\n          dismissMenu={dismissMenu}\r\n          getSubmenuTarget={this._getSubmenuTarget}\r\n          {...itemComponentProps}\r\n        />\r\n      </button>\r\n    );\r\n  }\r\n\r\n  private _onItemMouseEnterPrimary = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseEnter } = this.props;\r\n    if (onItemMouseEnter) {\r\n      onItemMouseEnter({ ...item, subMenuProps: undefined, items: undefined }, ev, this._splitButton);\r\n    }\r\n  };\r\n\r\n  private _onItemMouseEnterIcon = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseEnter } = this.props;\r\n    if (onItemMouseEnter) {\r\n      onItemMouseEnter(item, ev, this._splitButton);\r\n    }\r\n  };\r\n\r\n  private _onItemMouseMovePrimary = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseMove } = this.props;\r\n    if (onItemMouseMove) {\r\n      onItemMouseMove({ ...item, subMenuProps: undefined, items: undefined }, ev, this._splitButton);\r\n    }\r\n  };\r\n\r\n  private _onItemMouseMoveIcon = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemMouseMove } = this.props;\r\n    if (onItemMouseMove) {\r\n      onItemMouseMove(item, ev, this._splitButton);\r\n    }\r\n  };\r\n\r\n  private _onIconItemClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { item, onItemClickBase } = this.props;\r\n    if (onItemClickBase) {\r\n      onItemClickBase(item, ev, (this._splitButton ? this._splitButton : ev.currentTarget) as HTMLElement);\r\n    }\r\n  };\r\n\r\n  private _executeItemClick = (ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>): void => {\r\n    const { item, executeItemClick, onItemClick } = this.props;\r\n\r\n    if (item.disabled || item.isDisabled) {\r\n      return;\r\n    }\r\n\r\n    if (this._processingTouch && onItemClick) {\r\n      return onItemClick(item, ev);\r\n    }\r\n\r\n    if (executeItemClick) {\r\n      executeItemClick(item, ev);\r\n    }\r\n  };\r\n\r\n  private _onTouchStart = (ev: React.TouchEvent<HTMLElement>): void => {\r\n    if (this._splitButton && !('onpointerdown' in this._splitButton)) {\r\n      this._handleTouchAndPointerEvent(ev);\r\n    }\r\n  };\r\n\r\n  private _onPointerDown = (ev: PointerEvent): void => {\r\n    if (ev.pointerType === 'touch') {\r\n      this._handleTouchAndPointerEvent(ev);\r\n      ev.preventDefault();\r\n      ev.stopImmediatePropagation();\r\n    }\r\n  };\r\n\r\n  private _handleTouchAndPointerEvent(ev: React.TouchEvent<HTMLElement> | PointerEvent) {\r\n    const { onTap } = this.props;\r\n\r\n    if (onTap) {\r\n      onTap(ev);\r\n    }\r\n    // If we already have an existing timeout from a previous touch/pointer event\r\n    // cancel that timeout so we can set a new one.\r\n    if (this._lastTouchTimeoutId) {\r\n      this._async.clearTimeout(this._lastTouchTimeoutId);\r\n      this._lastTouchTimeoutId = undefined;\r\n    }\r\n    this._processingTouch = true;\r\n    this._lastTouchTimeoutId = this._async.setTimeout(() => {\r\n      this._processingTouch = false;\r\n      this._lastTouchTimeoutId = undefined;\r\n    }, TouchIdleDelay);\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport {\r\n  IContextualMenuProps,\r\n  IContextualMenuItem,\r\n  ContextualMenuItemType,\r\n  IContextualMenuListProps,\r\n  IContextualMenuStyleProps,\r\n  IContextualMenuStyles\r\n} from './ContextualMenu.types';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { FocusZone, FocusZoneDirection, IFocusZoneProps, FocusZoneTabbableElements } from '../../FocusZone';\r\nimport { IMenuItemClassNames, IContextualMenuClassNames } from './ContextualMenu.classNames';\r\nimport { divProperties, getNativeProps } from '../../Utilities';\r\n\r\nimport {\r\n  assign,\r\n  BaseComponent,\r\n  classNamesFunction,\r\n  css,\r\n  getDocument,\r\n  getFirstFocusable,\r\n  getId,\r\n  getLastFocusable,\r\n  getRTL,\r\n  getWindow,\r\n  IRenderFunction,\r\n  IPoint,\r\n  KeyCodes,\r\n  shouldWrapFocus,\r\n  IStyleFunctionOrObject,\r\n  isIOS,\r\n  isMac\r\n} from '../../Utilities';\r\nimport { hasSubmenu, getIsChecked, isItemDisabled } from '../../utilities/contextualMenu/index';\r\nimport { withResponsiveMode, ResponsiveMode } from '../../utilities/decorators/withResponsiveMode';\r\nimport { Callout, ICalloutContentStyleProps, ICalloutContentStyles } from '../../Callout';\r\nimport { ContextualMenu } from './ContextualMenu';\r\nimport { ContextualMenuItem } from './ContextualMenuItem';\r\nimport { ContextualMenuSplitButton, ContextualMenuButton, ContextualMenuAnchor } from './ContextualMenuItemWrapper/index';\r\nimport { IProcessedStyleSet, mergeStyleSets } from '../../Styling';\r\nimport { IContextualMenuItemStyleProps, IContextualMenuItemStyles } from './ContextualMenuItem.types';\r\n\r\nimport { getItemStyles } from './ContextualMenu.classNames';\r\n\r\nconst getClassNames = classNamesFunction<IContextualMenuStyleProps, IContextualMenuStyles>();\r\nconst getContextualMenuItemClassNames = classNamesFunction<IContextualMenuItemStyleProps, IContextualMenuItemStyles>();\r\n\r\nexport interface IContextualMenuState {\r\n  expandedMenuItemKey?: string;\r\n  /** True if the menu was expanded by mouse click OR hover (as opposed to by keyboard) */\r\n  expandedByMouseClick?: boolean;\r\n  dismissedMenuItemKey?: string;\r\n  contextualMenuItems?: IContextualMenuItem[];\r\n  contextualMenuTarget?: Element;\r\n  submenuTarget?: Element;\r\n  positions?: any;\r\n  slideDirectionalClassName?: string;\r\n  subMenuId?: string;\r\n  submenuDirection?: DirectionalHint;\r\n}\r\n\r\nexport function getSubmenuItems(item: IContextualMenuItem): IContextualMenuItem[] | undefined {\r\n  return item.subMenuProps ? item.subMenuProps.items : item.items;\r\n}\r\n\r\n/**\r\n * Returns true if a list of menu items can contain a checkbox\r\n */\r\nexport function canAnyMenuItemsCheck(items: IContextualMenuItem[]): boolean {\r\n  return items.some(item => {\r\n    if (item.canCheck) {\r\n      return true;\r\n    }\r\n\r\n    // If the item is a section, check if any of the items in the section can check.\r\n    if (item.sectionProps && item.sectionProps.items.some(submenuItem => submenuItem.canCheck === true)) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  });\r\n}\r\n\r\nconst NavigationIdleDelay = 250 /* ms */;\r\n\r\n@withResponsiveMode\r\nexport class ContextualMenuBase extends BaseComponent<IContextualMenuProps, IContextualMenuState> {\r\n  // The default ContextualMenu properties have no items and beak, the default submenu direction is right and top.\r\n  public static defaultProps: IContextualMenuProps = {\r\n    items: [],\r\n    shouldFocusOnMount: true,\r\n    gapSpace: 0,\r\n    directionalHint: DirectionalHint.bottomAutoEdge,\r\n    beakWidth: 16\r\n  };\r\n\r\n  private _host: HTMLElement;\r\n  private _previousActiveElement: HTMLElement | null;\r\n  private _isFocusingPreviousElement: boolean;\r\n  private _enterTimerId: number | undefined;\r\n  private _targetWindow: Window;\r\n  private _target: Element | MouseEvent | IPoint | null;\r\n  private _isScrollIdle: boolean;\r\n  private _scrollIdleTimeoutId: number | undefined;\r\n  /** True if the most recent keydown event was for alt (option) or meta (command). */\r\n  private _lastKeyDownWasAltOrMeta: boolean | undefined;\r\n  private _shouldUpdateFocusOnMouseEvent: boolean;\r\n  private _gotMouseMove: boolean;\r\n  private _mounted = false;\r\n\r\n  private _adjustedFocusZoneProps: IFocusZoneProps;\r\n\r\n  private _classNames: IProcessedStyleSet<IContextualMenuStyles> | IContextualMenuClassNames;\r\n\r\n  constructor(props: IContextualMenuProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      contextualMenuItems: undefined,\r\n      subMenuId: getId('ContextualMenu')\r\n    };\r\n\r\n    this._warnDeprecations({\r\n      getMenuClassNames: 'styles'\r\n    });\r\n\r\n    this._isFocusingPreviousElement = false;\r\n    this._isScrollIdle = true;\r\n    this._shouldUpdateFocusOnMouseEvent = !this.props.delayUpdateFocusOnHover;\r\n    this._gotMouseMove = false;\r\n  }\r\n\r\n  public dismiss = (ev?: any, dismissAll?: boolean) => {\r\n    const { onDismiss } = this.props;\r\n\r\n    if (onDismiss) {\r\n      onDismiss(ev, dismissAll);\r\n    }\r\n  };\r\n\r\n  public componentWillUpdate(newProps: IContextualMenuProps): void {\r\n    if (newProps.target !== this.props.target) {\r\n      const newTarget = newProps.target;\r\n      this._setTargetWindowAndElement(newTarget!);\r\n    }\r\n    if (newProps.hidden !== this.props.hidden) {\r\n      if (newProps.hidden) {\r\n        this._onMenuClosed();\r\n      } else {\r\n        this._onMenuOpened();\r\n        this._previousActiveElement = this._targetWindow ? (this._targetWindow.document.activeElement as HTMLElement) : null;\r\n      }\r\n    }\r\n    if (newProps.delayUpdateFocusOnHover !== this.props.delayUpdateFocusOnHover) {\r\n      // update shouldUpdateFocusOnMouseEvent to follow what was passed in\r\n      this._shouldUpdateFocusOnMouseEvent = !newProps.delayUpdateFocusOnHover;\r\n\r\n      // If shouldUpdateFocusOnMouseEvent is false, we need to reset gotMouseMove to false\r\n      this._gotMouseMove = this._shouldUpdateFocusOnMouseEvent && this._gotMouseMove;\r\n    }\r\n  }\r\n\r\n  // Invoked once, both on the client and server, immediately before the initial rendering occurs.\r\n  public componentWillMount() {\r\n    const target = this.props.target;\r\n    this._setTargetWindowAndElement(target!);\r\n    if (!this.props.hidden) {\r\n      this._previousActiveElement = this._targetWindow ? (this._targetWindow.document.activeElement as HTMLElement) : null;\r\n    }\r\n  }\r\n\r\n  // Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.\r\n  public componentDidMount(): void {\r\n    if (!this.props.hidden) {\r\n      this._onMenuOpened();\r\n    }\r\n\r\n    this._mounted = true;\r\n  }\r\n\r\n  // Invoked immediately before a component is unmounted from the DOM.\r\n  public componentWillUnmount() {\r\n    if (this._isFocusingPreviousElement && this._previousActiveElement) {\r\n      // This slight delay is required so that we can unwind the stack, const react try to mess with focus, and then\r\n      // apply the correct focus. Without the setTimeout, we end up focusing the correct thing, and then React wants\r\n      // to reset the focus back to the thing it thinks should have been focused.\r\n      // Note: Cannot be replaced by this._async.setTimout because those will be removed by the time this is called.\r\n      setTimeout(() => {\r\n        this._previousActiveElement && this._previousActiveElement!.focus();\r\n      }, 0);\r\n    }\r\n\r\n    if (this.props.onMenuDismissed) {\r\n      this.props.onMenuDismissed(this.props);\r\n    }\r\n\r\n    this._events.dispose();\r\n    this._async.dispose();\r\n    this._mounted = false;\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    let { isBeakVisible } = this.props;\r\n\r\n    const {\r\n      items,\r\n      labelElementId,\r\n      id,\r\n      className,\r\n      beakWidth,\r\n      directionalHint,\r\n      directionalHintForRTL,\r\n      alignTargetEdge,\r\n      gapSpace,\r\n      coverTarget,\r\n      ariaLabel,\r\n      doNotLayer,\r\n      target,\r\n      bounds,\r\n      useTargetWidth,\r\n      useTargetAsMinWidth,\r\n      directionalHintFixed,\r\n      shouldFocusOnMount,\r\n      shouldFocusOnContainer,\r\n      title,\r\n      styles,\r\n      theme,\r\n      calloutProps,\r\n      onRenderSubMenu = this._onRenderSubMenu,\r\n      onRenderMenuList = this._onRenderMenuList,\r\n      focusZoneProps,\r\n      getMenuClassNames\r\n    } = this.props;\r\n\r\n    this._classNames = getMenuClassNames\r\n      ? getMenuClassNames(theme!, className)\r\n      : getClassNames(styles, {\r\n          theme: theme!,\r\n          className: className\r\n        });\r\n\r\n    const hasIcons = itemsHaveIcons(items);\r\n\r\n    function itemsHaveIcons(contextualMenuItems: IContextualMenuItem[]): boolean {\r\n      for (const item of contextualMenuItems) {\r\n        if (!!item.iconProps) {\r\n          return true;\r\n        }\r\n\r\n        if (item.itemType === ContextualMenuItemType.Section && item.sectionProps && itemsHaveIcons(item.sectionProps.items)) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    this._adjustedFocusZoneProps = { ...focusZoneProps, direction: this._getFocusZoneDirection() };\r\n\r\n    const hasCheckmarks = canAnyMenuItemsCheck(items);\r\n    const submenuProps = this.state.expandedMenuItemKey && this.props.hidden !== true ? this._getSubmenuProps() : null;\r\n\r\n    isBeakVisible = isBeakVisible === undefined ? this.props.responsiveMode! <= ResponsiveMode.medium : isBeakVisible;\r\n    /**\r\n     * When useTargetWidth is true, get the width of the target element and apply it for the context menu container\r\n     */\r\n    let contextMenuStyle;\r\n    const targetAsHtmlElement = this._target as HTMLElement;\r\n    if ((useTargetWidth || useTargetAsMinWidth) && targetAsHtmlElement && targetAsHtmlElement.offsetWidth) {\r\n      const targetBoundingRect = targetAsHtmlElement.getBoundingClientRect();\r\n      const targetWidth = targetBoundingRect.width - 2 /* Accounts for 1px border */;\r\n\r\n      if (useTargetWidth) {\r\n        contextMenuStyle = {\r\n          width: targetWidth\r\n        };\r\n      } else if (useTargetAsMinWidth) {\r\n        contextMenuStyle = {\r\n          minWidth: targetWidth\r\n        };\r\n      }\r\n    }\r\n\r\n    // The menu should only return if items were provided, if no items were provided then it should not appear.\r\n    if (items && items.length > 0) {\r\n      let totalItemCount = 0;\r\n      for (const item of items) {\r\n        if (item.itemType !== ContextualMenuItemType.Divider && item.itemType !== ContextualMenuItemType.Header) {\r\n          const itemCount = item.customOnRenderListLength ? item.customOnRenderListLength : 1;\r\n          totalItemCount += itemCount;\r\n        }\r\n      }\r\n\r\n      const calloutStyles =\r\n        !getMenuClassNames && this._classNames.subComponentStyles\r\n          ? (this._classNames.subComponentStyles.callout as IStyleFunctionOrObject<ICalloutContentStyleProps, ICalloutContentStyles>)\r\n          : undefined;\r\n\r\n      return (\r\n        <Callout\r\n          styles={calloutStyles}\r\n          {...calloutProps}\r\n          target={target}\r\n          isBeakVisible={isBeakVisible}\r\n          beakWidth={beakWidth}\r\n          directionalHint={directionalHint}\r\n          directionalHintForRTL={directionalHintForRTL}\r\n          gapSpace={gapSpace}\r\n          coverTarget={coverTarget}\r\n          doNotLayer={doNotLayer}\r\n          className={css('ms-ContextualMenu-Callout', calloutProps && calloutProps.className)}\r\n          setInitialFocus={shouldFocusOnMount}\r\n          onDismiss={this.props.onDismiss}\r\n          onScroll={this._onScroll}\r\n          bounds={bounds}\r\n          directionalHintFixed={directionalHintFixed}\r\n          alignTargetEdge={alignTargetEdge}\r\n          hidden={this.props.hidden}\r\n        >\r\n          <div\r\n            aria-label={ariaLabel}\r\n            aria-labelledby={labelElementId}\r\n            style={contextMenuStyle}\r\n            ref={(host: HTMLDivElement) => (this._host = host)}\r\n            id={id}\r\n            className={this._classNames.container}\r\n            tabIndex={shouldFocusOnContainer ? 0 : -1}\r\n            onKeyDown={this._onMenuKeyDown}\r\n            onKeyUp={this._onKeyUp}\r\n            onFocusCapture={this._onMenuFocusCapture}\r\n          >\r\n            {title && <div className={this._classNames.title}> {title} </div>}\r\n            {items && items.length ? (\r\n              <FocusZone\r\n                {...this._adjustedFocusZoneProps}\r\n                className={this._classNames.root}\r\n                isCircularNavigation={true}\r\n                handleTabKey={FocusZoneTabbableElements.all}\r\n              >\r\n                {onRenderMenuList(\r\n                  {\r\n                    items,\r\n                    totalItemCount,\r\n                    hasCheckmarks,\r\n                    hasIcons\r\n                  },\r\n                  this._onRenderMenuList\r\n                )}\r\n              </FocusZone>\r\n            ) : null}\r\n            {submenuProps && onRenderSubMenu(submenuProps, this._onRenderSubMenu)}\r\n          </div>\r\n        </Callout>\r\n      );\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private _onMenuOpened() {\r\n    this._events.on(this._targetWindow, 'resize', this.dismiss);\r\n    this._shouldUpdateFocusOnMouseEvent = !this.props.delayUpdateFocusOnHover;\r\n    this._gotMouseMove = false;\r\n    this.props.onMenuOpened && this.props.onMenuOpened(this.props);\r\n  }\r\n\r\n  private _onMenuClosed() {\r\n    this._events.off(this._targetWindow, 'resize', this.dismiss);\r\n    this._previousActiveElement &&\r\n      this._async.setTimeout(() => {\r\n        this._previousActiveElement && this._previousActiveElement!.focus();\r\n      }, 0);\r\n    this._shouldUpdateFocusOnMouseEvent = !this.props.delayUpdateFocusOnHover;\r\n\r\n    // We need to dismiss any submenu related state properties,\r\n    // so that when the menu is shown again, the submenu is collapsed\r\n    this.setState({\r\n      expandedByMouseClick: undefined,\r\n      dismissedMenuItemKey: undefined,\r\n      expandedMenuItemKey: undefined,\r\n      submenuTarget: undefined\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Gets the focusZoneDirection by using the arrowDirection if specified,\r\n   * the direction specificed in the focusZoneProps, or defaults to FocusZoneDirection.vertical\r\n   */\r\n  private _getFocusZoneDirection() {\r\n    const { focusZoneProps } = this.props;\r\n    return focusZoneProps && focusZoneProps.direction !== undefined ? focusZoneProps.direction : FocusZoneDirection.vertical;\r\n  }\r\n\r\n  private _onRenderSubMenu(subMenuProps: IContextualMenuProps) {\r\n    return <ContextualMenu {...subMenuProps} />;\r\n  }\r\n\r\n  private _onRenderMenuList = (\r\n    menuListProps: IContextualMenuListProps,\r\n    defaultRender?: IRenderFunction<IContextualMenuListProps>\r\n  ): JSX.Element => {\r\n    let indexCorrection = 0;\r\n    return (\r\n      <ul className={this._classNames.list} onKeyDown={this._onKeyDown} onKeyUp={this._onKeyUp} role=\"menu\">\r\n        {menuListProps.items.map((item, index) => {\r\n          const menuItem = this._renderMenuItem(\r\n            item,\r\n            index,\r\n            indexCorrection,\r\n            menuListProps.totalItemCount,\r\n            menuListProps.hasCheckmarks,\r\n            menuListProps.hasIcons\r\n          );\r\n          if (item.itemType !== ContextualMenuItemType.Divider && item.itemType !== ContextualMenuItemType.Header) {\r\n            const indexIncrease = item.customOnRenderListLength ? item.customOnRenderListLength : 1;\r\n            indexCorrection += indexIncrease;\r\n          }\r\n          return menuItem;\r\n        })}\r\n      </ul>\r\n    );\r\n  };\r\n\r\n  private _renderMenuItem(\r\n    item: IContextualMenuItem,\r\n    index: number,\r\n    focusableElementIndex: number,\r\n    totalItemCount: number,\r\n    hasCheckmarks: boolean,\r\n    hasIcons: boolean\r\n  ): React.ReactNode {\r\n    const renderedItems: React.ReactNode[] = [];\r\n    const iconProps = item.iconProps || { iconName: 'None' };\r\n    const { getItemClassNames, itemProps } = item;\r\n    const styles = itemProps ? itemProps.styles : undefined;\r\n\r\n    // We only send a dividerClassName when the item to be rendered is a divider. For all other cases, the default divider style is used.\r\n    const dividerClassName = item.itemType === ContextualMenuItemType.Divider ? item.className : undefined;\r\n    const subMenuIconClassName = item.submenuIconProps ? item.submenuIconProps.className : '';\r\n\r\n    let itemClassNames: IMenuItemClassNames;\r\n\r\n    // IContextualMenuItem#getItemClassNames for backwards compatibility\r\n    // otherwise uses mergeStyles for class names.\r\n    if (getItemClassNames) {\r\n      itemClassNames = getItemClassNames(\r\n        this.props.theme!,\r\n        isItemDisabled(item),\r\n        this.state.expandedMenuItemKey === item.key,\r\n        !!getIsChecked(item),\r\n        !!item.href,\r\n        iconProps.iconName !== 'None',\r\n        item.className,\r\n        dividerClassName,\r\n        iconProps.className,\r\n        subMenuIconClassName,\r\n        item.primaryDisabled\r\n      );\r\n    } else {\r\n      const itemStyleProps: IContextualMenuItemStyleProps = {\r\n        theme: this.props.theme!,\r\n        disabled: isItemDisabled(item),\r\n        expanded: this.state.expandedMenuItemKey === item.key,\r\n        checked: !!getIsChecked(item),\r\n        isAnchorLink: !!item.href,\r\n        knownIcon: iconProps.iconName !== 'None',\r\n        itemClassName: item.className,\r\n        dividerClassName,\r\n        iconClassName: iconProps.className,\r\n        subMenuClassName: subMenuIconClassName,\r\n        primaryDisabled: item.primaryDisabled\r\n      };\r\n\r\n      const menuItemStyles = this._classNames.subComponentStyles\r\n        ? (this._classNames.subComponentStyles.menuItem as IStyleFunctionOrObject<IContextualMenuItemStyleProps, IContextualMenuItemStyles>)\r\n        : undefined;\r\n\r\n      // We need to generate default styles then override if styles are provided\r\n      // since the ContextualMenu currently handles item classNames.\r\n      itemClassNames = mergeStyleSets(\r\n        getContextualMenuItemClassNames(getItemStyles, itemStyleProps),\r\n        getContextualMenuItemClassNames(menuItemStyles, itemStyleProps),\r\n        getContextualMenuItemClassNames(styles, itemStyleProps)\r\n      );\r\n    }\r\n\r\n    if (item.text === '-' || item.name === '-') {\r\n      item.itemType = ContextualMenuItemType.Divider;\r\n    }\r\n    switch (item.itemType) {\r\n      case ContextualMenuItemType.Divider:\r\n        renderedItems.push(this._renderSeparator(index, itemClassNames));\r\n        break;\r\n      case ContextualMenuItemType.Header:\r\n        renderedItems.push(this._renderSeparator(index, itemClassNames));\r\n        const headerItem = this._renderHeaderMenuItem(item, itemClassNames, index, hasCheckmarks, hasIcons);\r\n        renderedItems.push(this._renderListItem(headerItem, item.key || index, itemClassNames, item.title));\r\n        break;\r\n      case ContextualMenuItemType.Section:\r\n        renderedItems.push(this._renderSectionItem(item, itemClassNames, index, hasCheckmarks, hasIcons));\r\n        break;\r\n      default:\r\n        const menuItem = this._renderNormalItem(\r\n          item,\r\n          itemClassNames,\r\n          index,\r\n          focusableElementIndex,\r\n          totalItemCount,\r\n          hasCheckmarks,\r\n          hasIcons\r\n        );\r\n        renderedItems.push(this._renderListItem(menuItem, item.key || index, itemClassNames, item.title));\r\n        break;\r\n    }\r\n\r\n    return renderedItems;\r\n  }\r\n\r\n  private _renderSectionItem(\r\n    sectionItem: IContextualMenuItem,\r\n    menuClassNames: IMenuItemClassNames,\r\n    index: number,\r\n    hasCheckmarks: boolean,\r\n    hasIcons: boolean\r\n  ) {\r\n    const sectionProps = sectionItem.sectionProps;\r\n    if (!sectionProps) {\r\n      return;\r\n    }\r\n\r\n    let headerItem;\r\n    if (sectionProps.title) {\r\n      const headerContextualMenuItem: IContextualMenuItem = {\r\n        key: `section-${sectionProps.title}-title`,\r\n        itemType: ContextualMenuItemType.Header,\r\n        text: sectionProps.title\r\n      };\r\n      headerItem = this._renderHeaderMenuItem(headerContextualMenuItem, menuClassNames, index, hasCheckmarks, hasIcons);\r\n    }\r\n\r\n    if (sectionProps.items && sectionProps.items.length > 0) {\r\n      return (\r\n        <li role=\"presentation\" key={sectionProps.key || sectionItem.key || `section-${index}`}>\r\n          <div role=\"group\">\r\n            <ul className={this._classNames.list}>\r\n              {sectionProps.topDivider && this._renderSeparator(index, menuClassNames, true, true)}\r\n              {headerItem && this._renderListItem(headerItem, sectionItem.key || index, menuClassNames, sectionItem.title)}\r\n              {sectionProps.items.map((contextualMenuItem, itemsIndex) =>\r\n                this._renderMenuItem(contextualMenuItem, itemsIndex, itemsIndex, sectionProps.items.length, hasCheckmarks, hasIcons)\r\n              )}\r\n              {sectionProps.bottomDivider && this._renderSeparator(index, menuClassNames, false, true)}\r\n            </ul>\r\n          </div>\r\n        </li>\r\n      );\r\n    }\r\n  }\r\n\r\n  private _renderListItem(content: React.ReactNode, key: string | number, classNames: IMenuItemClassNames, title?: string) {\r\n    return (\r\n      <li role=\"presentation\" title={title} key={key} className={classNames.item}>\r\n        {content}\r\n      </li>\r\n    );\r\n  }\r\n\r\n  private _renderSeparator(index: number, classNames: IMenuItemClassNames, top?: boolean, fromSection?: boolean): React.ReactNode {\r\n    if (fromSection || index > 0) {\r\n      return (\r\n        <li\r\n          role=\"separator\"\r\n          key={'separator-' + index + (top === undefined ? '' : top ? '-top' : '-bottom')}\r\n          className={classNames.divider}\r\n          aria-hidden=\"true\"\r\n        />\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _renderNormalItem(\r\n    item: IContextualMenuItem,\r\n    classNames: IMenuItemClassNames,\r\n    index: number,\r\n    focusableElementIndex: number,\r\n    totalItemCount: number,\r\n    hasCheckmarks: boolean,\r\n    hasIcons: boolean\r\n  ): React.ReactNode {\r\n    if (item.onRender) {\r\n      return item.onRender({ 'aria-posinset': focusableElementIndex + 1, 'aria-setsize': totalItemCount, ...item }, this.dismiss);\r\n    }\r\n    if (item.href) {\r\n      return this._renderAnchorMenuItem(item, classNames, index, focusableElementIndex, totalItemCount, hasCheckmarks, hasIcons);\r\n    }\r\n\r\n    if (item.split && hasSubmenu(item)) {\r\n      return this._renderSplitButton(item, classNames, index, focusableElementIndex, totalItemCount, hasCheckmarks, hasIcons);\r\n    }\r\n\r\n    return this._renderButtonItem(item, classNames, index, focusableElementIndex, totalItemCount, hasCheckmarks, hasIcons);\r\n  }\r\n\r\n  private _renderHeaderMenuItem(\r\n    item: IContextualMenuItem,\r\n    classNames: IMenuItemClassNames,\r\n    index: number,\r\n    hasCheckmarks: boolean,\r\n    hasIcons: boolean\r\n  ): React.ReactNode {\r\n    const { contextualMenuItemAs: ChildrenRenderer = ContextualMenuItem } = this.props;\r\n    const { itemProps } = item;\r\n    const divHtmlProperties = itemProps && getNativeProps(itemProps, divProperties);\r\n    return (\r\n      <div className={this._classNames.header} {...divHtmlProperties} style={item.style}>\r\n        <ChildrenRenderer\r\n          item={item}\r\n          classNames={classNames}\r\n          index={index}\r\n          onCheckmarkClick={hasCheckmarks ? this._onItemClick : undefined}\r\n          hasIcons={hasIcons}\r\n          {...itemProps}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderAnchorMenuItem(\r\n    item: IContextualMenuItem,\r\n    classNames: IMenuItemClassNames,\r\n    index: number,\r\n    focusableElementIndex: number,\r\n    totalItemCount: number,\r\n    hasCheckmarks: boolean,\r\n    hasIcons: boolean\r\n  ): React.ReactNode {\r\n    const { contextualMenuItemAs } = this.props;\r\n    const { expandedMenuItemKey } = this.state;\r\n    return (\r\n      <ContextualMenuAnchor\r\n        item={item}\r\n        classNames={classNames}\r\n        index={index}\r\n        focusableElementIndex={focusableElementIndex}\r\n        totalItemCount={totalItemCount}\r\n        hasCheckmarks={hasCheckmarks}\r\n        hasIcons={hasIcons}\r\n        contextualMenuItemAs={contextualMenuItemAs}\r\n        onItemMouseEnter={this._onItemMouseEnterBase}\r\n        onItemMouseLeave={this._onMouseItemLeave}\r\n        onItemMouseMove={this._onItemMouseMoveBase}\r\n        onItemMouseDown={this._onItemMouseDown}\r\n        executeItemClick={this._executeItemClick}\r\n        onItemClick={this._onAnchorClick}\r\n        onItemKeyDown={this._onItemKeyDown}\r\n        getSubMenuId={this._getSubMenuId}\r\n        expandedMenuItemKey={expandedMenuItemKey}\r\n        openSubMenu={this._onItemSubMenuExpand}\r\n        dismissSubMenu={this._onSubMenuDismiss}\r\n        dismissMenu={this.dismiss}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _renderButtonItem(\r\n    item: IContextualMenuItem,\r\n    classNames: IMenuItemClassNames,\r\n    index: number,\r\n    focusableElementIndex: number,\r\n    totalItemCount: number,\r\n    hasCheckmarks?: boolean,\r\n    hasIcons?: boolean\r\n  ) {\r\n    const { contextualMenuItemAs } = this.props;\r\n    const { expandedMenuItemKey } = this.state;\r\n\r\n    return (\r\n      <ContextualMenuButton\r\n        item={item}\r\n        classNames={classNames}\r\n        index={index}\r\n        focusableElementIndex={focusableElementIndex}\r\n        totalItemCount={totalItemCount}\r\n        hasCheckmarks={hasCheckmarks}\r\n        hasIcons={hasIcons}\r\n        contextualMenuItemAs={contextualMenuItemAs}\r\n        onItemMouseEnter={this._onItemMouseEnterBase}\r\n        onItemMouseLeave={this._onMouseItemLeave}\r\n        onItemMouseMove={this._onItemMouseMoveBase}\r\n        onItemMouseDown={this._onItemMouseDown}\r\n        executeItemClick={this._executeItemClick}\r\n        onItemClick={this._onItemClick}\r\n        onItemClickBase={this._onItemClickBase}\r\n        onItemKeyDown={this._onItemKeyDown}\r\n        getSubMenuId={this._getSubMenuId}\r\n        expandedMenuItemKey={expandedMenuItemKey}\r\n        openSubMenu={this._onItemSubMenuExpand}\r\n        dismissSubMenu={this._onSubMenuDismiss}\r\n        dismissMenu={this.dismiss}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _renderSplitButton(\r\n    item: IContextualMenuItem,\r\n    classNames: IMenuItemClassNames,\r\n    index: number,\r\n    focusableElementIndex: number,\r\n    totalItemCount: number,\r\n    hasCheckmarks?: boolean,\r\n    hasIcons?: boolean\r\n  ): JSX.Element {\r\n    const { contextualMenuItemAs } = this.props;\r\n    const { expandedMenuItemKey } = this.state;\r\n\r\n    return (\r\n      <ContextualMenuSplitButton\r\n        item={item}\r\n        classNames={classNames}\r\n        index={index}\r\n        focusableElementIndex={focusableElementIndex}\r\n        totalItemCount={totalItemCount}\r\n        hasCheckmarks={hasCheckmarks}\r\n        hasIcons={hasIcons}\r\n        contextualMenuItemAs={contextualMenuItemAs}\r\n        onItemMouseEnter={this._onItemMouseEnterBase}\r\n        onItemMouseLeave={this._onMouseItemLeave}\r\n        onItemMouseMove={this._onItemMouseMoveBase}\r\n        onItemMouseDown={this._onItemMouseDown}\r\n        executeItemClick={this._executeItemClick}\r\n        onItemClick={this._onItemClick}\r\n        onItemClickBase={this._onItemClickBase}\r\n        onItemKeyDown={this._onItemKeyDown}\r\n        openSubMenu={this._onItemSubMenuExpand}\r\n        dismissSubMenu={this._onSubMenuDismiss}\r\n        dismissMenu={this.dismiss}\r\n        expandedMenuItemKey={expandedMenuItemKey}\r\n        onTap={this._onPointerAndTouchEvent}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>): boolean => {\r\n    // Take note if we are processing an alt (option) or meta (command) keydown.\r\n    // See comment in _shouldHandleKeyUp for reasoning.\r\n    this._lastKeyDownWasAltOrMeta = this._isAltOrMeta(ev);\r\n\r\n    // On Mac, pressing escape dismisses all levels of native context menus\r\n    const dismissAllMenus = ev.which === KeyCodes.escape && (isMac() || isIOS());\r\n\r\n    return this._keyHandler(ev, this._shouldHandleKeyDown, dismissAllMenus);\r\n  };\r\n\r\n  private _shouldHandleKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    return ev.which === KeyCodes.escape || this._shouldCloseSubMenu(ev) || (ev.which === KeyCodes.up && (ev.altKey || ev.metaKey));\r\n  };\r\n\r\n  private _onMenuFocusCapture = (ev: React.FocusEvent<HTMLElement>) => {\r\n    if (this.props.delayUpdateFocusOnHover) {\r\n      this._shouldUpdateFocusOnMouseEvent = true;\r\n    }\r\n  };\r\n\r\n  private _onKeyUp = (ev: React.KeyboardEvent<HTMLElement>): boolean => {\r\n    return this._keyHandler(ev, this._shouldHandleKeyUp, true /* dismissAllMenus */);\r\n  };\r\n\r\n  /**\r\n   * We close the menu on key up only if ALL of the following are true:\r\n   * - Most recent key down was alt or meta (command)\r\n   * - The alt/meta key down was NOT followed by some other key (such as down/up arrow to\r\n   *   expand/collapse the menu)\r\n   * - We're not on a Mac (or iOS)\r\n   *\r\n   * This is because on Windows, pressing alt moves focus to the application menu bar or similar,\r\n   * closing any open context menus. There is not a similar behavior on Macs.\r\n   */\r\n  private _shouldHandleKeyUp = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    const keyPressIsAltOrMetaAlone = this._lastKeyDownWasAltOrMeta && this._isAltOrMeta(ev);\r\n    this._lastKeyDownWasAltOrMeta = false;\r\n    return !!keyPressIsAltOrMetaAlone && !(isIOS() || isMac());\r\n  };\r\n\r\n  /**\r\n   * Returns true if the key for the event is alt (Mac option) or meta (Mac command).\r\n   */\r\n  private _isAltOrMeta(ev: React.KeyboardEvent<HTMLElement>): boolean {\r\n    return ev.which === KeyCodes.alt || ev.key === 'Meta';\r\n  }\r\n\r\n  /**\r\n   * Calls `shouldHandleKey` to determine whether the keyboard event should be handled;\r\n   * if so, stops event propagation and dismisses menu(s).\r\n   * @param ev - The keyboard event.\r\n   * @param shouldHandleKey - Returns whether we should handle this keyboard event.\r\n   * @param dismissAllMenus - If true, dismiss all menus. Otherwise, dismiss only the current menu.\r\n   * Only does anything if `shouldHandleKey` returns true.\r\n   * @returns Whether the event was handled.\r\n   */\r\n  private _keyHandler = (\r\n    ev: React.KeyboardEvent<HTMLElement>,\r\n    shouldHandleKey: (ev: React.KeyboardEvent<HTMLElement>) => boolean,\r\n    dismissAllMenus?: boolean\r\n  ): boolean => {\r\n    let handled = false;\r\n\r\n    if (shouldHandleKey(ev)) {\r\n      this._isFocusingPreviousElement = true;\r\n      ev.preventDefault();\r\n      ev.stopPropagation();\r\n      this.dismiss(ev, dismissAllMenus);\r\n      handled = true;\r\n    }\r\n\r\n    return handled;\r\n  };\r\n\r\n  /**\r\n   * Checks if the submenu should be closed\r\n   */\r\n  private _shouldCloseSubMenu = (ev: React.KeyboardEvent<HTMLElement>): boolean => {\r\n    const submenuCloseKey = getRTL() ? KeyCodes.right : KeyCodes.left;\r\n\r\n    if (ev.which !== submenuCloseKey || !this.props.isSubMenu) {\r\n      return false;\r\n    }\r\n\r\n    return (\r\n      this._adjustedFocusZoneProps.direction === FocusZoneDirection.vertical ||\r\n      (!!this._adjustedFocusZoneProps.checkForNoWrap && !shouldWrapFocus(ev.target as HTMLElement, 'data-no-horizontal-wrap'))\r\n    );\r\n  };\r\n\r\n  private _onMenuKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    // Mark as handled if onKeyDown returns true (for handling collapse cases)\r\n    // or if we are attempting to expand a submenu\r\n    const handled = this._onKeyDown(ev);\r\n\r\n    if (handled || !this._host) {\r\n      return;\r\n    }\r\n\r\n    // If we have a modifier key being pressed, we do not want to move focus.\r\n    // Otherwise, handle up and down keys.\r\n    const hasModifier = !!(ev.altKey || ev.metaKey);\r\n    const isUp = ev.which === KeyCodes.up;\r\n    const isDown = ev.which === KeyCodes.down;\r\n    if (!hasModifier && (isUp || isDown)) {\r\n      const elementToFocus = isUp\r\n        ? getLastFocusable(this._host, this._host.lastChild as HTMLElement, true)\r\n        : getFirstFocusable(this._host, this._host.firstChild as HTMLElement, true);\r\n\r\n      if (elementToFocus) {\r\n        elementToFocus.focus();\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Scroll handler for the callout to make sure the mouse events\r\n   * for updating focus are not interacting during scroll\r\n   */\r\n  private _onScroll = (): void => {\r\n    if (!this._isScrollIdle && this._scrollIdleTimeoutId !== undefined) {\r\n      this._async.clearTimeout(this._scrollIdleTimeoutId);\r\n      this._scrollIdleTimeoutId = undefined;\r\n    } else {\r\n      this._isScrollIdle = false;\r\n    }\r\n\r\n    this._scrollIdleTimeoutId = this._async.setTimeout(() => {\r\n      this._isScrollIdle = true;\r\n    }, NavigationIdleDelay);\r\n  };\r\n\r\n  private _onItemMouseEnterBase = (item: any, ev: React.MouseEvent<HTMLElement>, target?: HTMLElement): void => {\r\n    if (this._shouldIgnoreMouseEvent()) {\r\n      return;\r\n    }\r\n\r\n    this._updateFocusOnMouseEvent(item, ev, target);\r\n  };\r\n\r\n  private _onItemMouseMoveBase = (item: any, ev: React.MouseEvent<HTMLElement>, target: HTMLElement): void => {\r\n    const targetElement = ev.currentTarget as HTMLElement;\r\n\r\n    // Always do this check to make sure we record a mouseMove if needed (even if we are timed out)\r\n    if (this._shouldUpdateFocusOnMouseEvent) {\r\n      this._gotMouseMove = true;\r\n    } else {\r\n      return;\r\n    }\r\n\r\n    if (\r\n      !this._isScrollIdle ||\r\n      this._enterTimerId !== undefined ||\r\n      targetElement === (this._targetWindow.document.activeElement as HTMLElement)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this._updateFocusOnMouseEvent(item, ev, target);\r\n  };\r\n\r\n  private _shouldIgnoreMouseEvent(): boolean {\r\n    return !this._isScrollIdle || !this._gotMouseMove;\r\n  }\r\n\r\n  private _onMouseItemLeave = (item: any, ev: React.MouseEvent<HTMLElement>): void => {\r\n    if (this._shouldIgnoreMouseEvent()) {\r\n      return;\r\n    }\r\n\r\n    if (this._enterTimerId !== undefined) {\r\n      this._async.clearTimeout(this._enterTimerId);\r\n      this._enterTimerId = undefined;\r\n    }\r\n\r\n    if (this.state.expandedMenuItemKey !== undefined) {\r\n      return;\r\n    }\r\n\r\n    /**\r\n     * IE11 focus() method forces parents to scroll to top of element.\r\n     * Edge and IE expose a setActive() function for focusable divs that\r\n     * sets the page focus but does not scroll the parent element.\r\n     */\r\n    if ((this._host as any).setActive) {\r\n      try {\r\n        (this._host as any).setActive();\r\n      } catch (e) {\r\n        /* no-op */\r\n      }\r\n    } else {\r\n      this._host.focus();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Handles updating focus when mouseEnter or mouseMove fire.\r\n   * As part of updating focus, This function will also update\r\n   * the expand/collapse state accordingly.\r\n   */\r\n  private _updateFocusOnMouseEvent(item: IContextualMenuItem, ev: React.MouseEvent<HTMLElement>, target?: HTMLElement) {\r\n    const targetElement = target ? target : (ev.currentTarget as HTMLElement);\r\n    const { subMenuHoverDelay: timeoutDuration = NavigationIdleDelay } = this.props;\r\n\r\n    if (item.key === this.state.expandedMenuItemKey) {\r\n      return;\r\n    }\r\n\r\n    if (this._enterTimerId !== undefined) {\r\n      this._async.clearTimeout(this._enterTimerId);\r\n      this._enterTimerId = undefined;\r\n    }\r\n\r\n    // If the menu is not expanded we can update focus without any delay\r\n    if (this.state.expandedMenuItemKey === undefined) {\r\n      targetElement.focus();\r\n    }\r\n\r\n    // Delay updating expanding/dismissing the submenu\r\n    // and only set focus if we have not already done so\r\n    if (hasSubmenu(item)) {\r\n      ev.stopPropagation();\r\n      this._enterTimerId = this._async.setTimeout(() => {\r\n        targetElement.focus();\r\n        this.setState({\r\n          expandedByMouseClick: true\r\n        });\r\n        this._onItemSubMenuExpand(item, targetElement);\r\n        this._enterTimerId = undefined;\r\n      }, timeoutDuration);\r\n    } else {\r\n      this._enterTimerId = this._async.setTimeout(() => {\r\n        this._onSubMenuDismiss(ev);\r\n        targetElement.focus();\r\n        this._enterTimerId = undefined;\r\n      }, timeoutDuration);\r\n    }\r\n  }\r\n\r\n  private _onItemMouseDown = (item: IContextualMenuItem, ev: React.MouseEvent<HTMLElement>): void => {\r\n    if (item.onMouseDown) {\r\n      item.onMouseDown(item, ev);\r\n    }\r\n  };\r\n\r\n  private _onItemClick = (item: IContextualMenuItem, ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>): void => {\r\n    this._onItemClickBase(item, ev, ev.currentTarget as HTMLElement);\r\n  };\r\n\r\n  private _onItemClickBase = (\r\n    item: IContextualMenuItem,\r\n    ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\r\n    target: HTMLElement\r\n  ): void => {\r\n    const items = getSubmenuItems(item);\r\n\r\n    // Cancel a async menu item hover timeout action from being taken and instead\r\n    // just trigger the click event instead.\r\n    this._cancelSubMenuTimer();\r\n\r\n    if (!hasSubmenu(item) && (!items || !items.length)) {\r\n      // This is an item without a menu. Click it.\r\n      this._executeItemClick(item, ev);\r\n    } else {\r\n      if (item.key !== this.state.expandedMenuItemKey) {\r\n        // This has a collapsed sub menu. Expand it.\r\n        this.setState({\r\n          // When Edge + Narrator are used together (regardless of if the button is in a form or not), pressing\r\n          // \"Enter\" fires this method and not _onMenuKeyDown. Checking ev.nativeEvent.detail differentiates\r\n          // between a real click event and a keypress event (detail should be the number of mouse clicks).\r\n          // ...Plot twist! For a real click event in IE 11, detail is always 0 (Edge sets it properly to 1).\r\n          // So we also check the pointerType property, which both Edge and IE set to \"mouse\" for real clicks\r\n          // and \"\" for pressing \"Enter\" with Narrator on.\r\n          expandedByMouseClick: ev.nativeEvent.detail !== 0 || (ev.nativeEvent as PointerEvent).pointerType === 'mouse'\r\n        });\r\n        this._onItemSubMenuExpand(item, target);\r\n      }\r\n    }\r\n\r\n    ev.stopPropagation();\r\n    ev.preventDefault();\r\n  };\r\n\r\n  private _onAnchorClick = (item: IContextualMenuItem, ev: React.MouseEvent<HTMLElement>) => {\r\n    this._executeItemClick(item, ev);\r\n    ev.stopPropagation();\r\n  };\r\n\r\n  private _executeItemClick = (item: IContextualMenuItem, ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>): void => {\r\n    if (item.disabled || item.isDisabled) {\r\n      return;\r\n    }\r\n\r\n    let dismiss = false;\r\n    if (item.onClick) {\r\n      dismiss = !!item.onClick(ev, item);\r\n    } else if (this.props.onItemClick) {\r\n      dismiss = !!this.props.onItemClick(ev, item);\r\n    }\r\n\r\n    (dismiss || !ev.defaultPrevented) && this.dismiss(ev, true);\r\n  };\r\n\r\n  private _onItemKeyDown = (item: any, ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    const openKey = getRTL() ? KeyCodes.left : KeyCodes.right;\r\n\r\n    if (\r\n      !item.disabled &&\r\n      (ev.which === openKey || ev.which === KeyCodes.enter || (ev.which === KeyCodes.down && (ev.altKey || ev.metaKey)))\r\n    ) {\r\n      this.setState({\r\n        expandedByMouseClick: false\r\n      });\r\n      this._onItemSubMenuExpand(item, ev.currentTarget as HTMLElement);\r\n      ev.preventDefault();\r\n    }\r\n  };\r\n\r\n  // Cancel a async menu item hover timeout action from being taken and instead\r\n  // do new upcoming behavior\r\n  private _cancelSubMenuTimer = () => {\r\n    if (this._enterTimerId !== undefined) {\r\n      this._async.clearTimeout(this._enterTimerId);\r\n      this._enterTimerId = undefined;\r\n    }\r\n  };\r\n\r\n  private _onItemSubMenuExpand = (item: IContextualMenuItem, target: HTMLElement): void => {\r\n    if (this.state.expandedMenuItemKey !== item.key) {\r\n      if (this.state.expandedMenuItemKey) {\r\n        this._onSubMenuDismiss();\r\n      }\r\n\r\n      // Focus the target to ensure when we close it, we're focusing on the correct element.\r\n      target.focus();\r\n      this.setState({\r\n        expandedMenuItemKey: item.key,\r\n        submenuTarget: target\r\n      });\r\n    }\r\n  };\r\n\r\n  private _getSubmenuProps() {\r\n    const { submenuTarget, expandedMenuItemKey } = this.state;\r\n    const item = this._findItemByKey(expandedMenuItemKey!);\r\n    let submenuProps: IContextualMenuProps | null = null;\r\n\r\n    if (item) {\r\n      submenuProps = {\r\n        items: getSubmenuItems(item)!,\r\n        target: submenuTarget,\r\n        onDismiss: this._onSubMenuDismiss,\r\n        isSubMenu: true,\r\n        id: this.state.subMenuId,\r\n        shouldFocusOnMount: true,\r\n        shouldFocusOnContainer: this.state.expandedByMouseClick,\r\n        directionalHint: getRTL() ? DirectionalHint.leftTopEdge : DirectionalHint.rightTopEdge,\r\n        className: this.props.className,\r\n        gapSpace: 0,\r\n        isBeakVisible: false\r\n      };\r\n\r\n      if (item.subMenuProps) {\r\n        assign(submenuProps, item.subMenuProps);\r\n      }\r\n    }\r\n    return submenuProps;\r\n  }\r\n\r\n  private _findItemByKey(key: string): IContextualMenuItem | undefined {\r\n    const { items } = this.props;\r\n    return this._findItemByKeyFromItems(key, items);\r\n  }\r\n\r\n  /**\r\n   * Returns the item that mathes a given key if any.\r\n   * @param key - The key of the item to match\r\n   * @param items - The items to look for the key\r\n   */\r\n  private _findItemByKeyFromItems(key: string, items: IContextualMenuItem[]): IContextualMenuItem | undefined {\r\n    for (const item of items) {\r\n      if (item.itemType === ContextualMenuItemType.Section && item.sectionProps) {\r\n        const match = this._findItemByKeyFromItems(key, item.sectionProps.items);\r\n        if (match) {\r\n          return match;\r\n        }\r\n      } else if (item.key && item.key === key) {\r\n        return item;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This function is called ASYNCHRONOUSLY, and so there is a chance it is called\r\n   * after the component is unmounted. The _mounted property is added to prevent\r\n   * from calling setState() after unmount. Do NOT copy this pattern in synchronous\r\n   * code.\r\n   */\r\n  private _onSubMenuDismiss = (ev?: any, dismissAll?: boolean): void => {\r\n    if (dismissAll) {\r\n      this.dismiss(ev, dismissAll);\r\n    } else if (this._mounted) {\r\n      this.setState({\r\n        dismissedMenuItemKey: this.state.expandedMenuItemKey,\r\n        expandedMenuItemKey: undefined,\r\n        submenuTarget: undefined\r\n      });\r\n    }\r\n  };\r\n\r\n  private _setTargetWindowAndElement(target: Element | string | MouseEvent | IPoint): void {\r\n    if (target) {\r\n      if (typeof target === 'string') {\r\n        const currentDoc: Document = getDocument()!;\r\n        this._target = currentDoc ? (currentDoc.querySelector(target) as Element) : null;\r\n        this._targetWindow = getWindow()!;\r\n      } else if ((target as MouseEvent).stopPropagation) {\r\n        this._targetWindow = getWindow((target as MouseEvent).toElement as HTMLElement)!;\r\n        this._target = target;\r\n      } else if ((target as IPoint).x !== undefined && (target as IPoint).y !== undefined) {\r\n        this._targetWindow = getWindow()!;\r\n        this._target = target;\r\n      } else {\r\n        const targetElement: Element = target as Element;\r\n        this._targetWindow = getWindow(targetElement)!;\r\n        this._target = target;\r\n      }\r\n    } else {\r\n      this._targetWindow = getWindow()!;\r\n    }\r\n  }\r\n\r\n  private _getSubMenuId = (item: IContextualMenuItem): string | undefined => {\r\n    let { subMenuId } = this.state;\r\n\r\n    if (item.subMenuProps && item.subMenuProps.id) {\r\n      subMenuId = item.subMenuProps.id;\r\n    }\r\n\r\n    return subMenuId;\r\n  };\r\n\r\n  private _onPointerAndTouchEvent = (ev: React.TouchEvent<HTMLElement> | PointerEvent) => {\r\n    this._cancelSubMenuTimer();\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { BaseButton } from './BaseButton';\r\nimport { Button } from './Button';\r\nimport { IButtonClassNames } from './BaseButton.classNames';\r\nimport { ISplitButtonClassNames } from './SplitButton/SplitButton.classNames';\r\nimport { IRefObject, IRenderFunction, KeyCodes, IComponentAs } from '../../Utilities';\r\nimport { IContextualMenuProps } from '../../ContextualMenu';\r\nimport { IIconProps } from '../../Icon';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IKeytipProps } from '../../Keytip';\r\n\r\n/**\r\n * {@docCategory Button}\r\n */\r\nexport interface IButton {\r\n  /**\r\n   * Sets focus to the button.\r\n   */\r\n  focus: () => void;\r\n\r\n  /**\r\n   * If there is a menu associated with this button and it is visible, this will dismiss the menu\r\n   */\r\n  dismissMenu: () => void;\r\n\r\n  /**\r\n   * If there is a menu associated with this button and it is visible, this will open the menu.\r\n   * Params are optional overrides to the ones defined in 'menuProps' to apply to just this instance of opening the menu.\r\n   *\r\n   * @param shouldFocusOnContainer - override to the ContextualMenu shouldFocusOnContainer prop.\r\n   * BaseButton implementation defaults to 'undefined'.\r\n   * @param shouldFocusOnMount - override to the ContextualMenu shouldFocusOnMount prop. BaseButton implementation defaults to 'true'.\r\n   */\r\n  openMenu: (shouldFocusOnContainer?: boolean, shouldFocusOnMount?: boolean) => void;\r\n}\r\n\r\n/**\r\n * {@docCategory Button}\r\n */\r\nexport interface IButtonProps\r\n  extends React.AllHTMLAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLDivElement | BaseButton | Button> {\r\n  /**\r\n   * Optional callback to access the IButton interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IButton>;\r\n\r\n  /**\r\n   * If provided, this component will be rendered as an anchor.\r\n   * @defaultvalue ElementType.anchor\r\n   */\r\n  href?: string;\r\n\r\n  /**\r\n   * Changes the visual presentation of the button to be emphasized (if defined)\r\n   * @defaultvalue false\r\n   */\r\n  primary?: boolean;\r\n\r\n  /**\r\n   * Unique id to identify the item. Typically a duplicate of key value.\r\n   */\r\n  uniqueId?: string | number;\r\n\r\n  /**\r\n   * Whether the button is disabled\r\n   */\r\n  disabled?: boolean;\r\n\r\n  /**\r\n   * Whether the button can have focus in disabled mode\r\n   */\r\n  allowDisabledFocus?: boolean;\r\n\r\n  /**\r\n   * If set to true and if this is a splitButton (split == true) then the primary action of a split button is disabled.\r\n   */\r\n  primaryDisabled?: boolean;\r\n\r\n  /**\r\n   * Custom styling for individual elements within the button DOM.\r\n   */\r\n  styles?: IButtonStyles;\r\n\r\n  /**\r\n   * Theme provided by HOC.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Whether the button is checked\r\n   */\r\n  checked?: boolean;\r\n\r\n  /**\r\n   * Whether button is a toggle button with distinct on and off states. This should be true for buttons that permanently\r\n   * change state when a press event finishes, such as a volume mute button.\r\n   */\r\n  toggle?: boolean;\r\n\r\n  /**\r\n   * If provided, additional class name to provide on the root element.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * The aria label of the button for the benefit of screen readers.\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * Detailed description of the button for the benefit of screen readers.\r\n   *\r\n   * Besides the compound button, other button types will need more information provided to screen reader.\r\n   */\r\n  ariaDescription?: string;\r\n\r\n  /**\r\n   * If provided and is true it adds an 'aria-hidden' attribute instructing screen readers to ignore the element.\r\n   */\r\n  ariaHidden?: boolean;\r\n\r\n  /**\r\n   * Text to render button label. If text is supplied, it will override any string in button children.\r\n   * Other children components will be passed through after the text.\r\n   */\r\n  text?: string;\r\n\r\n  /**\r\n   * The props for the icon shown in the button.\r\n   */\r\n  iconProps?: IIconProps;\r\n\r\n  /**\r\n   * Props for button menu. Providing this will default to showing the menu icon. See menuIconProps for overriding\r\n   * how the default icon looks. Providing this in addition of onClick and setting the split property to true will render a SplitButton.\r\n   */\r\n  menuProps?: IContextualMenuProps;\r\n\r\n  /**\r\n   * Callback that runs after Button's contextualmenu was closed (removed from the DOM)\r\n   */\r\n  onAfterMenuDismiss?: () => void;\r\n\r\n  /**\r\n   * If set to true, and if menuProps and onClick are provided, the button will render as a SplitButton. Defaults to false.\r\n   */\r\n  split?: boolean;\r\n\r\n  /**\r\n   * The props for the icon shown when providing a menu dropdown.\r\n   */\r\n  menuIconProps?: IIconProps;\r\n\r\n  /**\r\n   * Accessible label for the dropdown chevron button if this button is split.\r\n   */\r\n  splitButtonAriaLabel?: string;\r\n\r\n  /**\r\n   * Optional callback when menu is clicked.\r\n   */\r\n  onMenuClick?: (ev?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, button?: IButtonProps) => void;\r\n\r\n  /**\r\n   * Custom render function for the icon\r\n   */\r\n  onRenderIcon?: IRenderFunction<IButtonProps>;\r\n\r\n  /**\r\n   * Custom render function for the label text.\r\n   */\r\n  onRenderText?: IRenderFunction<IButtonProps>;\r\n\r\n  /**\r\n   * Custom render function for the desciption text.\r\n   */\r\n  onRenderDescription?: IRenderFunction<IButtonProps>;\r\n\r\n  /**\r\n   * Custom render function for the aria description element.\r\n   */\r\n  onRenderAriaDescription?: IRenderFunction<IButtonProps>;\r\n\r\n  /**\r\n   * Custom render function for rendering the button children.\r\n   */\r\n  onRenderChildren?: IRenderFunction<IButtonProps>;\r\n\r\n  /**\r\n   * Custom render function for button menu icon\r\n   */\r\n  onRenderMenuIcon?: IRenderFunction<IButtonProps>;\r\n\r\n  /**\r\n   * Deprecated at v6.3.2, to be removed at \\>= v7.0.0. Use `menuAs` instead.\r\n   * @deprecated Use `menuAs` instead.\r\n   */\r\n  onRenderMenu?: IRenderFunction<IContextualMenuProps>;\r\n\r\n  /**\r\n   * Render a custom menu in place of the normal one.\r\n   */\r\n  menuAs?: IComponentAs<IContextualMenuProps>;\r\n\r\n  /**\r\n   * Description of the action this button takes.\r\n   * Only used for compound buttons\r\n   */\r\n  secondaryText?: string;\r\n\r\n  /**\r\n   * Deprecated at v1.2.3, to be removed at \\>= v2.0.0. Use specific button component instead.\r\n   * @defaultvalue ButtonType.default\r\n   * @deprecated Use specific button component instead.\r\n   */\r\n\r\n  buttonType?: ButtonType;\r\n\r\n  /**\r\n   * Deprecated at v0.56.2, to be removed at \\>= v1.0.0. Just pass in button props instead.\r\n   * they will be mixed into the button/anchor element rendered by the component.\r\n   * @deprecated Use button props instead.\r\n   */\r\n  rootProps?: React.ButtonHTMLAttributes<HTMLButtonElement> | React.AnchorHTMLAttributes<HTMLAnchorElement>;\r\n\r\n  /**\r\n   * Any custom data the developer wishes to associate with the menu item.\r\n   * Deprecated, use `checked` if setting state.\r\n   * @deprecated unused, use `checked` if setting state.\r\n   */\r\n  toggled?: boolean;\r\n\r\n  /**\r\n   * Any custom data the developer wishes to associate with the menu item.\r\n   */\r\n  data?: any;\r\n\r\n  /**\r\n   * Method to provide the classnames to style a button.\r\n   * The default value for this prop is the getClassnames func\r\n   * defined in BaseButton.classnames.\r\n   * @defaultvalue getBaseButtonClassNames\r\n   */\r\n  getClassNames?: (\r\n    theme: ITheme,\r\n    className: string,\r\n    variantClassName: string,\r\n    iconClassName: string | undefined,\r\n    menuIconClassName: string | undefined,\r\n    disabled: boolean,\r\n    checked: boolean,\r\n    expanded: boolean,\r\n    isSplit: boolean | undefined,\r\n    allowDisabledFocus: boolean\r\n  ) => IButtonClassNames;\r\n\r\n  /**\r\n   * Method to provide the classnames to style a button.\r\n   * The default value for this prop is the getClassnames func\r\n   * defined in BaseButton.classnames.\r\n   * @defaultvalue getBaseSplitButtonClassNames\r\n   */\r\n  getSplitButtonClassNames?: (\r\n    disabled: boolean,\r\n    expanded: boolean,\r\n    checked: boolean,\r\n    allowDisabledFocus: boolean\r\n  ) => ISplitButtonClassNames;\r\n\r\n  /**\r\n   * Provides a custom KeyCode that can be used to open the button menu.\r\n   * The default KeyCode is the down arrow. A value of null can be provided to disable the key codes for opening the button menu.\r\n   */\r\n  menuTriggerKeyCode?: KeyCodes | null;\r\n\r\n  /**\r\n   * Optional keytip for this button\r\n   */\r\n  keytipProps?: IKeytipProps;\r\n\r\n  /**\r\n   * Menu will not be created or destroyed when opened or closed, instead it\r\n   * will be hidden. This will improve perf of the menu opening but could potentially\r\n   * impact overall perf by having more elemnts in the dom. Should only be used\r\n   * when perf is important.\r\n   * Note: This may increase the amount of time it takes for the button itself to mount.\r\n   */\r\n  persistMenu?: boolean;\r\n\r\n  /**\r\n   * Style for the description text if applicable (for compound buttons.)\r\n   * Deprecated, use `secondaryText` instead.\r\n   * @deprecated Use `secondaryText` instead.\r\n   */\r\n  description?: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory Button}\r\n */\r\nexport enum ElementType {\r\n  /** <button> element. */\r\n  button = 0,\r\n  /** <a> element. */\r\n  anchor = 1\r\n}\r\n\r\n/**\r\n * {@docCategory Button}\r\n */\r\nexport enum ButtonType {\r\n  normal = 0,\r\n  primary = 1,\r\n  hero = 2,\r\n  compound = 3,\r\n  command = 4,\r\n  icon = 5,\r\n  default = 6\r\n}\r\n\r\n/**\r\n * {@docCategory Button}\r\n */\r\nexport interface IButtonStyles {\r\n  /**\r\n   * Style for the root element in the default enabled, non-toggled state.\r\n   */\r\n  root?: IStyle;\r\n\r\n  /**\r\n   * Style override for the root element in a checked state, layered on top of the root style.\r\n   */\r\n  rootChecked?: IStyle;\r\n\r\n  /**\r\n   * Style override for the root element in a disabled state, layered on top of the root style.\r\n   */\r\n  rootDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on hover in the default, enabled, non-toggled state.\r\n   */\r\n  rootHovered?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on focus in the default, enabled, non-toggled state.\r\n   */\r\n  rootFocused?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on pressed in the default, enabled, non-toggled state.\r\n   */\r\n  rootPressed?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on when menu is expanded in the default, enabled, non-toggled state.\r\n   */\r\n  rootExpanded?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on hover in a checked, enabled state\r\n   */\r\n  rootCheckedHovered?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on pressed in a checked, enabled state\r\n   */\r\n  rootCheckedPressed?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on hover in a checked, disabled state\r\n   */\r\n  rootCheckedDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override applied to the root on hover in a expanded state on hover\r\n   */\r\n  rootExpandedHovered?: IStyle;\r\n\r\n  /**\r\n   * Style for the flexbox container within the root element.\r\n   */\r\n  flexContainer?: IStyle;\r\n\r\n  /**\r\n   * Style for the text container within the flexbox container element (and contains the text and description).\r\n   */\r\n  textContainer?: IStyle;\r\n\r\n  /**\r\n   * Style for the icon on the near side of the label.\r\n   */\r\n  icon?: IStyle;\r\n\r\n  /**\r\n   * Style for the icon on the near side of the label on hover.\r\n   */\r\n  iconHovered?: IStyle;\r\n\r\n  /**\r\n   * Style for the icon on the near side of the label when pressed.\r\n   */\r\n  iconPressed?: IStyle;\r\n\r\n  /**\r\n   * Style for the icon on the near side of the label when expanded.\r\n   */\r\n  iconExpanded?: IStyle;\r\n\r\n  /**\r\n   * Style for the icon on the near side of the label when expanded and hovered.\r\n   */\r\n  iconExpandedHovered?: IStyle;\r\n\r\n  /**\r\n   * Style override for the icon when the button is disabled.\r\n   */\r\n  iconDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the icon when the button is checked.\r\n   */\r\n  iconChecked?: IStyle;\r\n\r\n  /**\r\n   * Style for the text content of the button.\r\n   */\r\n  label?: IStyle;\r\n\r\n  /**\r\n   * Style override for the text content when the button is hovered.\r\n   */\r\n  labelHovered?: IStyle;\r\n\r\n  /**\r\n   * Style override for the text content when the button is disabled.\r\n   */\r\n  labelDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the text content when the button is checked.\r\n   */\r\n  labelChecked?: IStyle;\r\n\r\n  /**\r\n   * Style for the menu chevron.\r\n   */\r\n  menuIcon?: IStyle;\r\n\r\n  /**\r\n   * Style for the menu chevron on hover.\r\n   */\r\n  menuIconHovered?: IStyle;\r\n\r\n  /**\r\n   * Style for the menu chevron when pressed.\r\n   */\r\n  menuIconPressed?: IStyle;\r\n\r\n  /**\r\n   * Style for the menu chevron when expanded.\r\n   */\r\n  menuIconExpanded?: IStyle;\r\n\r\n  /**\r\n   * Style for the menu chevron when expanded and hovered.\r\n   */\r\n  menuIconExpandedHovered?: IStyle;\r\n\r\n  /**\r\n   * Style override for the menu chevron when the button is disabled.\r\n   */\r\n  menuIconDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the menu chevron when the button is checked.\r\n   */\r\n  menuIconChecked?: IStyle;\r\n\r\n  /**\r\n   * Style for the description text if applicable (for compound buttons.)\r\n   */\r\n  description?: IStyle;\r\n\r\n  /**\r\n   * Style for the description text if applicable (for compound buttons.)\r\n   */\r\n  secondaryText?: IStyle;\r\n\r\n  /**\r\n   * Style override for the description text when the button is hovered.\r\n   */\r\n  descriptionHovered?: IStyle;\r\n\r\n  /**\r\n   * Style for the description text when the button is pressed.\r\n   */\r\n  descriptionPressed?: IStyle;\r\n\r\n  /**\r\n   * Style override for the description text when the button is disabled.\r\n   */\r\n  descriptionDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the description text when the button is checked.\r\n   */\r\n  descriptionChecked?: IStyle;\r\n\r\n  /**\r\n   * Style override for the screen reader text.\r\n   */\r\n  screenReaderText?: IStyle;\r\n\r\n  /**\r\n   * Style override for the container div around a SplitButton element\r\n   */\r\n  splitButtonContainer?: IStyle;\r\n\r\n  /**\r\n   * Style for container div around a SplitButton element when the button is hovered.\r\n   */\r\n  splitButtonContainerHovered?: IStyle;\r\n\r\n  /**\r\n   * Style for container div around a SplitButton element when the button is focused.\r\n   */\r\n  splitButtonContainerFocused?: IStyle;\r\n\r\n  /**\r\n   * Style for container div around a SplitButton element when the button is checked.\r\n   */\r\n  splitButtonContainerChecked?: IStyle;\r\n\r\n  /**\r\n   * Style for container div around a SplitButton element when the button is checked and hovered.\r\n   */\r\n  splitButtonContainerCheckedHovered?: IStyle;\r\n\r\n  /**\r\n   * Style override for the container div around a SplitButton element in a disabled state\r\n   */\r\n  splitButtonContainerDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the divider element that appears between the button and menu button\r\n   * for a split button.\r\n   */\r\n  splitButtonDivider?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton menu button\r\n   */\r\n  splitButtonMenuButton?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton menu button element in a disabled state.\r\n   */\r\n  splitButtonMenuButtonDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton menu button element in a checked state\r\n   */\r\n  splitButtonMenuButtonChecked?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton menu button element in an expanded state\r\n   */\r\n  splitButtonMenuButtonExpanded?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton menu icon element\r\n   */\r\n  splitButtonMenuIcon?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton menu icon element in a disabled state\r\n   */\r\n  splitButtonMenuIconDisabled?: IStyle;\r\n\r\n  /**\r\n   * Style override for the SplitButton FlexContainer.\r\n   */\r\n  splitButtonFlexContainer?: IStyle;\r\n}\r\n","import { IContextualMenuStyleProps, IContextualMenuStyles } from './ContextualMenu.types';\r\nimport { getGlobalClassNames, FontWeights } from '../../Styling';\r\nimport { CONTEXTUAL_MENU_ITEM_HEIGHT } from './ContextualMenu.cnstyles';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-ContextualMenu',\r\n  container: 'ms-ContextualMenu-container',\r\n  list: 'ms-ContextualMenu-list',\r\n  header: 'ms-ContextualMenu-header',\r\n  title: 'ms-ContextualMenu-title',\r\n  isopen: 'is-open'\r\n};\r\n\r\nexport const getStyles = (props: IContextualMenuStyleProps): IContextualMenuStyles => {\r\n  const { className, theme } = props;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const { palette, fonts, semanticColors } = theme;\r\n\r\n  return {\r\n    root: [\r\n      theme.fonts.medium,\r\n      classNames.root,\r\n      classNames.isopen,\r\n      {\r\n        backgroundColor: semanticColors.bodyBackground,\r\n        minWidth: '180px'\r\n      },\r\n      className\r\n    ],\r\n    container: [\r\n      classNames.container,\r\n      {\r\n        selectors: {\r\n          ':focus': { outline: 0 }\r\n        }\r\n      }\r\n    ],\r\n    list: [\r\n      classNames.list,\r\n      classNames.isopen,\r\n      {\r\n        listStyleType: 'none',\r\n        margin: '0',\r\n        padding: '0'\r\n      }\r\n    ],\r\n    header: [\r\n      classNames.header,\r\n      fonts.small,\r\n      {\r\n        fontWeight: FontWeights.semibold,\r\n        color: semanticColors.menuHeader,\r\n        background: 'none',\r\n        backgroundColor: 'transparent',\r\n        border: 'none',\r\n        height: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n        lineHeight: CONTEXTUAL_MENU_ITEM_HEIGHT,\r\n        cursor: 'default',\r\n        padding: '0px 6px',\r\n        userSelect: 'none',\r\n        textAlign: 'left'\r\n      }\r\n    ],\r\n    title: [\r\n      classNames.title,\r\n      {\r\n        fontSize: '16px',\r\n        paddingRight: '14px',\r\n        paddingLeft: '14px',\r\n        paddingBottom: '5px',\r\n        paddingTop: '5px',\r\n        backgroundColor: palette.neutralLight\r\n      }\r\n    ],\r\n    subComponentStyles: { callout: {}, menuItem: {} }\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IContextualMenuProps, IContextualMenuStyleProps, IContextualMenuStyles } from './ContextualMenu.types';\r\nimport { ContextualMenuBase } from './ContextualMenu.base';\r\nimport { getStyles } from './ContextualMenu.styles';\r\n\r\n/**\r\n * ContextualMenu description\r\n */\r\nexport const ContextualMenu: React.StatelessComponent<IContextualMenuProps> = styled<\r\n  IContextualMenuProps,\r\n  IContextualMenuStyleProps,\r\n  IContextualMenuStyles\r\n>(ContextualMenuBase, getStyles, undefined, { scope: 'ContextualMenu' });\r\n","import { memoizeFunction } from '../../Utilities';\r\nimport { ITheme, mergeStyleSets } from '../../Styling';\r\nimport { IButtonStyles } from './Button.types';\r\nimport { getGlobalClassNames } from '../../Styling';\r\n\r\nexport interface IButtonClassNames {\r\n  root?: string;\r\n  flexContainer?: string;\r\n  textContainer?: string;\r\n  icon?: string;\r\n  label?: string;\r\n  menuIcon?: string;\r\n  description?: string;\r\n  screenReaderText?: string;\r\n}\r\n\r\nexport const ButtonGlobalClassNames = {\r\n  msButton: 'ms-Button',\r\n  msButtonIcon: 'ms-Button-icon',\r\n  msButtonMenuIcon: 'ms-Button-menuIcon',\r\n  msButtonLabel: 'ms-Button-label',\r\n  msButtonDescription: 'ms-Button-description',\r\n  msButtonScreenReaderText: 'ms-Button-screenReaderText',\r\n  msButtonFlexContainer: 'ms-Button-flexContainer',\r\n  msButtonTextContainer: 'ms-Button-textContainer'\r\n};\r\n\r\nexport const getBaseButtonClassNames = memoizeFunction(\r\n  (\r\n    theme: ITheme,\r\n    styles: IButtonStyles,\r\n    className: string,\r\n    variantClassName: string,\r\n    iconClassName: string | undefined,\r\n    menuIconClassName: string | undefined,\r\n    disabled: boolean,\r\n    checked: boolean,\r\n    expanded: boolean,\r\n    isSplit: boolean | undefined\r\n  ): IButtonClassNames => {\r\n    const classNames = getGlobalClassNames(ButtonGlobalClassNames, theme || {});\r\n\r\n    const isExpanded = expanded && !isSplit;\r\n    return mergeStyleSets({\r\n      root: [\r\n        classNames.msButton,\r\n        styles.root,\r\n        variantClassName,\r\n        checked && ['is-checked', styles.rootChecked],\r\n        isExpanded && [\r\n          'is-expanded',\r\n          styles.rootExpanded,\r\n          {\r\n            selectors: {\r\n              [`:hover .${classNames.msButtonIcon}`]: styles.iconExpandedHovered,\r\n              // menuIcon falls back to rootExpandedHovered to support original behavior\r\n              [`:hover .${classNames.msButtonMenuIcon}`]: styles.menuIconExpandedHovered || styles.rootExpandedHovered,\r\n              ':hover': styles.rootExpandedHovered\r\n            }\r\n          }\r\n        ],\r\n        disabled && ['is-disabled', styles.rootDisabled],\r\n        !disabled &&\r\n          !isExpanded &&\r\n          !checked && {\r\n            selectors: {\r\n              ':hover': styles.rootHovered,\r\n              [`:hover .${classNames.msButtonLabel}`]: styles.labelHovered,\r\n              [`:hover .${classNames.msButtonIcon}`]: styles.iconHovered,\r\n              [`:hover .${classNames.msButtonDescription}`]: styles.descriptionHovered,\r\n              [`:hover .${classNames.msButtonMenuIcon}`]: styles.menuIconHovered,\r\n              ':focus': styles.rootFocused,\r\n              ':active': styles.rootPressed,\r\n              [`:active .${classNames.msButtonIcon}`]: styles.iconPressed,\r\n              [`:active .${classNames.msButtonDescription}`]: styles.descriptionPressed,\r\n              [`:active .${classNames.msButtonMenuIcon}`]: styles.menuIconPressed\r\n            }\r\n          },\r\n        disabled && checked && [styles.rootCheckedDisabled],\r\n        !disabled &&\r\n          checked && {\r\n            selectors: {\r\n              ':hover': styles.rootCheckedHovered,\r\n              ':active': styles.rootCheckedPressed\r\n            }\r\n          },\r\n        className\r\n      ],\r\n      flexContainer: [classNames.msButtonFlexContainer, styles.flexContainer],\r\n      textContainer: [classNames.msButtonTextContainer, styles.textContainer],\r\n      icon: [\r\n        classNames.msButtonIcon,\r\n        iconClassName,\r\n        styles.icon,\r\n        isExpanded && styles.iconExpanded,\r\n        checked && styles.iconChecked,\r\n        disabled && styles.iconDisabled\r\n      ],\r\n      label: [classNames.msButtonLabel, styles.label, checked && styles.labelChecked, disabled && styles.labelDisabled],\r\n      menuIcon: [\r\n        classNames.msButtonMenuIcon,\r\n        menuIconClassName,\r\n        styles.menuIcon,\r\n        checked && styles.menuIconChecked,\r\n        disabled && styles.menuIconDisabled,\r\n        !disabled &&\r\n          !isExpanded &&\r\n          !checked && {\r\n            selectors: {\r\n              ':hover': styles.menuIconHovered,\r\n              ':active': styles.menuIconPressed\r\n            }\r\n          },\r\n        isExpanded && ['is-expanded', styles.menuIconExpanded]\r\n      ],\r\n      description: [\r\n        classNames.msButtonDescription,\r\n        styles.description,\r\n        checked && styles.descriptionChecked,\r\n        disabled && styles.descriptionDisabled\r\n      ],\r\n      screenReaderText: [classNames.msButtonScreenReaderText, styles.screenReaderText]\r\n    });\r\n  }\r\n);\r\n","import { memoizeFunction } from '../../../Utilities';\r\nimport { mergeStyles } from '../../../Styling';\r\nimport { IButtonStyles } from '../Button.types';\r\n\r\nexport interface ISplitButtonClassNames {\r\n  root?: string;\r\n  icon?: string;\r\n  splitButtonContainer?: string;\r\n  flexContainer?: string;\r\n  divider?: string;\r\n}\r\n\r\nexport const getClassNames = memoizeFunction(\r\n  (styles: IButtonStyles, disabled: boolean, expanded: boolean, checked: boolean): ISplitButtonClassNames => {\r\n    return {\r\n      root: mergeStyles(\r\n        styles.splitButtonMenuButton,\r\n        expanded && [styles.splitButtonMenuButtonExpanded],\r\n        disabled && [styles.splitButtonMenuButtonDisabled],\r\n        checked && !disabled && [styles.splitButtonMenuButtonChecked]\r\n      ),\r\n\r\n      splitButtonContainer: mergeStyles(\r\n        styles.splitButtonContainer,\r\n        checked &&\r\n          !disabled && [\r\n            styles.splitButtonContainerChecked,\r\n            {\r\n              selectors: {\r\n                ':hover': styles.splitButtonContainerCheckedHovered\r\n              }\r\n            }\r\n          ],\r\n        !disabled &&\r\n          !checked && [\r\n            {\r\n              selectors: {\r\n                ':hover': styles.splitButtonContainerHovered,\r\n                ':focus': styles.splitButtonContainerFocused\r\n              }\r\n            }\r\n          ],\r\n        disabled && styles.splitButtonContainerDisabled\r\n      ),\r\n\r\n      icon: mergeStyles(styles.splitButtonMenuIcon, disabled && styles.splitButtonMenuIconDisabled),\r\n\r\n      flexContainer: mergeStyles(styles.splitButtonFlexContainer),\r\n\r\n      divider: mergeStyles(styles.splitButtonDivider)\r\n    };\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport {\r\n  BaseComponent,\r\n  IRenderFunction,\r\n  anchorProperties,\r\n  assign,\r\n  buttonProperties,\r\n  getId,\r\n  getNativeProps,\r\n  KeyCodes,\r\n  css,\r\n  mergeAriaAttributeValues,\r\n  portalContainsElement\r\n} from '../../Utilities';\r\nimport { Icon } from '../../Icon';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { ContextualMenu, IContextualMenuProps } from '../../ContextualMenu';\r\nimport { IButtonProps, IButton } from './Button.types';\r\nimport { IButtonClassNames, getBaseButtonClassNames } from './BaseButton.classNames';\r\nimport { getClassNames as getBaseSplitButtonClassNames, ISplitButtonClassNames } from './SplitButton/SplitButton.classNames';\r\nimport { KeytipData } from '../../KeytipData';\r\n\r\nexport interface IBaseButtonProps extends IButtonProps {\r\n  baseClassName?: string;\r\n  variantClassName?: string;\r\n}\r\n\r\nexport interface IBaseButtonState {\r\n  menuProps?: IContextualMenuProps | null;\r\n}\r\n\r\nconst TouchIdleDelay = 500; /* ms */\r\n\r\nexport class BaseButton extends BaseComponent<IBaseButtonProps, IBaseButtonState> implements IButton {\r\n  private get _isSplitButton(): boolean {\r\n    return !!this.props.menuProps && !!this.props.onClick && this.props.split === true;\r\n  }\r\n\r\n  private get _isExpanded(): boolean {\r\n    const { menuProps } = this.state;\r\n    if (this.props.persistMenu) {\r\n      return !!menuProps && !menuProps.hidden;\r\n    }\r\n    return !!menuProps;\r\n  }\r\n\r\n  public static defaultProps: Partial<IBaseButtonProps> = {\r\n    baseClassName: 'ms-Button',\r\n    styles: {},\r\n    split: false\r\n  };\r\n\r\n  private _buttonElement = React.createRef<HTMLElement>();\r\n  private _splitButtonContainer = React.createRef<HTMLDivElement>();\r\n  private _labelId: string;\r\n  private _descriptionId: string;\r\n  private _ariaDescriptionId: string;\r\n  private _classNames: IButtonClassNames;\r\n  private _processingTouch: boolean;\r\n  private _lastTouchTimeoutId: number | undefined;\r\n\r\n  constructor(props: IBaseButtonProps, rootClassName: string) {\r\n    super(props);\r\n\r\n    this._warnConditionallyRequiredProps(['menuProps', 'onClick'], 'split', this.props.split!);\r\n\r\n    this._warnDeprecations({\r\n      rootProps: undefined,\r\n      description: 'secondaryText',\r\n      toggled: 'checked'\r\n    });\r\n    this._labelId = getId();\r\n    this._descriptionId = getId();\r\n    this._ariaDescriptionId = getId();\r\n    let menuProps = null;\r\n    if (props.persistMenu && props.menuProps) {\r\n      // Clone props so we don't mutate them.\r\n      menuProps = { ...props.menuProps, hidden: true };\r\n    }\r\n    this.state = {\r\n      menuProps: menuProps\r\n    };\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      ariaDescription,\r\n      ariaLabel,\r\n      ariaHidden,\r\n      className,\r\n      disabled,\r\n      allowDisabledFocus,\r\n      primaryDisabled,\r\n      secondaryText = this.props.description,\r\n      href,\r\n      iconProps,\r\n      menuIconProps,\r\n      styles,\r\n      checked,\r\n      variantClassName,\r\n      theme,\r\n      toggle,\r\n      getClassNames\r\n    } = this.props;\r\n\r\n    // Button is disabled if the whole button (in case of splitbutton is disabled) or if the primary action is disabled\r\n    const isPrimaryButtonDisabled = disabled || primaryDisabled;\r\n\r\n    this._classNames = getClassNames\r\n      ? getClassNames(\r\n          theme!,\r\n          className!,\r\n          variantClassName!,\r\n          iconProps && iconProps.className,\r\n          menuIconProps && menuIconProps.className,\r\n          isPrimaryButtonDisabled!,\r\n          checked!,\r\n          this._isExpanded,\r\n          this.props.split,\r\n          !!allowDisabledFocus\r\n        )\r\n      : getBaseButtonClassNames(\r\n          theme!,\r\n          styles!,\r\n          className!,\r\n          variantClassName!,\r\n          iconProps && iconProps.className,\r\n          menuIconProps && menuIconProps.className,\r\n          isPrimaryButtonDisabled!,\r\n          checked!,\r\n          this._isExpanded,\r\n          this.props.split\r\n        );\r\n\r\n    const { _ariaDescriptionId, _labelId, _descriptionId } = this;\r\n    // Anchor tag cannot be disabled hence in disabled state rendering\r\n    // anchor button as normal button\r\n    const renderAsAnchor: boolean = !isPrimaryButtonDisabled && !!href;\r\n    const tag = renderAsAnchor ? 'a' : 'button';\r\n\r\n    const nativeProps = getNativeProps(\r\n      assign(renderAsAnchor ? {} : { type: 'button' }, this.props.rootProps, this.props),\r\n      renderAsAnchor ? anchorProperties : buttonProperties,\r\n      [\r\n        'disabled' // let disabled buttons be focused and styled as disabled.\r\n      ]\r\n    );\r\n\r\n    // Check for ariaLabel passed in via Button props, and fall back to aria-label passed in via native props\r\n    const resolvedAriaLabel = ariaLabel || (nativeProps as any)['aria-label'];\r\n\r\n    // Check for ariaDescription, secondaryText or aria-describedby in the native props to determine source of aria-describedby\r\n    // otherwise default to undefined so property does not appear in output.\r\n    let ariaDescribedBy = undefined;\r\n    if (ariaDescription) {\r\n      ariaDescribedBy = _ariaDescriptionId;\r\n    } else if (secondaryText) {\r\n      ariaDescribedBy = _descriptionId;\r\n    } else if ((nativeProps as any)['aria-describedby']) {\r\n      ariaDescribedBy = (nativeProps as any)['aria-describedby'];\r\n    }\r\n\r\n    // If an explicit ariaLabel is given, use that as the label and we're done.\r\n    // If an explicit aria-labelledby is given, use that and we're done.\r\n    // If any kind of description is given (which will end up as an aria-describedby attribute),\r\n    // set the labelledby element. Otherwise, the button is labeled implicitly by the descendent\r\n    // text on the button (if it exists). Never set both aria-label and aria-labelledby.\r\n    let ariaLabelledBy = undefined;\r\n    if (!resolvedAriaLabel) {\r\n      if ((nativeProps as any)['aria-labelledby']) {\r\n        ariaLabelledBy = (nativeProps as any)['aria-labelledby'];\r\n      } else if (ariaDescribedBy) {\r\n        ariaLabelledBy = this._hasText() ? _labelId : undefined;\r\n      }\r\n    }\r\n\r\n    const dataIsFocusable =\r\n      (this.props as any)['data-is-focusable'] === false || (disabled && !allowDisabledFocus) || this._isSplitButton ? false : true;\r\n\r\n    const buttonProps = assign(nativeProps, {\r\n      className: this._classNames.root,\r\n      ref: this._buttonElement,\r\n      disabled: isPrimaryButtonDisabled && !allowDisabledFocus,\r\n      onKeyDown: this._onKeyDown,\r\n      onKeyPress: this._onKeyPress,\r\n      onKeyUp: this._onKeyUp,\r\n      onMouseDown: this._onMouseDown,\r\n      onMouseUp: this._onMouseUp,\r\n      onClick: this._onClick,\r\n      'aria-label': resolvedAriaLabel,\r\n      'aria-labelledby': ariaLabelledBy,\r\n      'aria-describedby': ariaDescribedBy,\r\n      'aria-disabled': isPrimaryButtonDisabled,\r\n      'data-is-focusable': dataIsFocusable,\r\n      'aria-pressed': toggle ? !!checked : undefined // aria-pressed attribute should only be present for toggle buttons\r\n    });\r\n\r\n    if (ariaHidden) {\r\n      buttonProps['aria-hidden'] = true;\r\n    }\r\n\r\n    if (this._isSplitButton) {\r\n      return this._onRenderSplitButtonContent(tag, buttonProps);\r\n    } else if (this.props.menuProps) {\r\n      assign(buttonProps, {\r\n        'aria-expanded': this._isExpanded,\r\n        'aria-owns': this.state.menuProps ? this._labelId + '-menu' : null,\r\n        'aria-haspopup': true\r\n      });\r\n    }\r\n\r\n    return this._onRenderContent(tag, buttonProps);\r\n  }\r\n\r\n  public componentDidMount() {\r\n    // For split buttons, touching anywhere in the button should drop the dropdown, which should contain the primary action.\r\n    // This gives more hit target space for touch environments. We're setting the onpointerdown here, because React\r\n    // does not support Pointer events yet.\r\n    if (this._isSplitButton && this._splitButtonContainer.current && 'onpointerdown' in this._splitButtonContainer.current) {\r\n      this._events.on(this._splitButtonContainer.current, 'pointerdown', this._onPointerDown, true);\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IBaseButtonProps, prevState: IBaseButtonState) {\r\n    // If Button's menu was closed, run onAfterMenuDismiss. If the menu is being persisted\r\n    // this condition is tested by checking on a change on the menuProps hidden value.\r\n    if (this.props.onAfterMenuDismiss && prevState.menuProps) {\r\n      if (!this.state.menuProps || (this.props.persistMenu && !prevState.menuProps.hidden && this.state.menuProps.hidden)) {\r\n        this.props.onAfterMenuDismiss();\r\n      }\r\n    }\r\n  }\r\n\r\n  public focus(): void {\r\n    if (this._isSplitButton && this._splitButtonContainer.current) {\r\n      this._splitButtonContainer.current.focus();\r\n    } else if (this._buttonElement.current) {\r\n      this._buttonElement.current.focus();\r\n    }\r\n  }\r\n\r\n  public dismissMenu(): void {\r\n    this._dismissMenu();\r\n  }\r\n\r\n  public openMenu(shouldFocusOnContainer?: boolean, shouldFocusOnMount?: boolean): void {\r\n    this._openMenu(shouldFocusOnContainer, shouldFocusOnMount);\r\n  }\r\n\r\n  private _onRenderContent(tag: any, buttonProps: IButtonProps): JSX.Element {\r\n    const props = this.props;\r\n    const Tag = tag;\r\n    const {\r\n      menuIconProps,\r\n      menuProps,\r\n      onRenderIcon = this._onRenderIcon,\r\n      onRenderAriaDescription = this._onRenderAriaDescription,\r\n      onRenderChildren = this._onRenderChildren,\r\n      onRenderMenu = this._onRenderMenu,\r\n      onRenderMenuIcon = this._onRenderMenuIcon,\r\n      disabled\r\n    } = props;\r\n    let { keytipProps } = props;\r\n    if (keytipProps && menuProps) {\r\n      keytipProps = {\r\n        ...keytipProps,\r\n        hasMenu: true\r\n      };\r\n    }\r\n\r\n    const Content = (\r\n      // If we're making a split button, we won't put the keytip here\r\n      <KeytipData\r\n        keytipProps={!this._isSplitButton ? keytipProps : undefined}\r\n        ariaDescribedBy={(buttonProps as any)['aria-describedby']}\r\n        disabled={disabled}\r\n      >\r\n        {(keytipAttributes: any): JSX.Element => (\r\n          <Tag {...buttonProps} {...keytipAttributes}>\r\n            <div className={this._classNames.flexContainer}>\r\n              {onRenderIcon(props, this._onRenderIcon)}\r\n              {this._onRenderTextContents()}\r\n              {onRenderAriaDescription(props, this._onRenderAriaDescription)}\r\n              {onRenderChildren(props, this._onRenderChildren)}\r\n              {!this._isSplitButton &&\r\n                (menuProps || menuIconProps || this.props.onRenderMenuIcon) &&\r\n                onRenderMenuIcon(this.props, this._onRenderMenuIcon)}\r\n              {this.state.menuProps && !this.state.menuProps.doNotLayer && onRenderMenu(menuProps, this._onRenderMenu)}\r\n            </div>\r\n          </Tag>\r\n        )}\r\n      </KeytipData>\r\n    );\r\n\r\n    if (menuProps && menuProps.doNotLayer) {\r\n      return (\r\n        <div style={{ display: 'inline-block' }}>\r\n          {Content}\r\n          {this.state.menuProps && onRenderMenu(menuProps, this._onRenderMenu)}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return Content;\r\n  }\r\n\r\n  private _onRenderIcon = (buttonProps?: IButtonProps, defaultRender?: IRenderFunction<IButtonProps>): JSX.Element | null => {\r\n    const { iconProps } = this.props;\r\n\r\n    if (iconProps) {\r\n      const { className, ...rest } = iconProps;\r\n\r\n      return <Icon className={css(this._classNames.icon, className)} {...rest} />;\r\n    }\r\n    return null;\r\n  };\r\n\r\n  private _onRenderTextContents = (): JSX.Element | (JSX.Element | null)[] => {\r\n    const {\r\n      text,\r\n      children,\r\n      secondaryText = this.props.description,\r\n      onRenderText = this._onRenderText,\r\n      onRenderDescription = this._onRenderDescription\r\n    } = this.props;\r\n\r\n    if (text || typeof children === 'string' || secondaryText) {\r\n      return (\r\n        <div className={this._classNames.textContainer}>\r\n          {onRenderText(this.props, this._onRenderText)}\r\n          {onRenderDescription(this.props, this._onRenderDescription)}\r\n        </div>\r\n      );\r\n    }\r\n    return [onRenderText(this.props, this._onRenderText), onRenderDescription(this.props, this._onRenderDescription)];\r\n  };\r\n\r\n  private _onRenderText = (): JSX.Element | null => {\r\n    let { text } = this.props;\r\n    const { children } = this.props;\r\n\r\n    // For backwards compat, we should continue to take in the text content from children.\r\n    if (text === undefined && typeof children === 'string') {\r\n      text = children;\r\n    }\r\n\r\n    if (this._hasText()) {\r\n      return (\r\n        <div key={this._labelId} className={this._classNames.label} id={this._labelId}>\r\n          {text}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return null;\r\n  };\r\n\r\n  private _hasText(): boolean {\r\n    // _onRenderTextContents and _onRenderText do not perform the same checks. Below is parity with what _onRenderText used to have\r\n    // before the refactor that introduced this function. _onRenderTextContents does not require props.text to be undefined in order\r\n    // for props.children to be used as a fallback. Purely a code maintainability/reuse issue, but logged as Issue #4979\r\n    return this.props.text !== null && (this.props.text !== undefined || typeof this.props.children === 'string');\r\n  }\r\n\r\n  private _onRenderChildren = (): JSX.Element | null => {\r\n    const { children } = this.props;\r\n\r\n    // If children is just a string, either it or the text will be rendered via onRenderLabel\r\n    // If children is another component, it will be rendered after text\r\n    if (typeof children === 'string') {\r\n      return null;\r\n    }\r\n\r\n    return children as any;\r\n  };\r\n\r\n  private _onRenderDescription = (props: IButtonProps) => {\r\n    const { secondaryText = this.props.description } = props;\r\n\r\n    // ms-Button-description is only shown when the button type is compound.\r\n    // In other cases it will not be displayed.\r\n    return secondaryText ? (\r\n      <div key={this._descriptionId} className={this._classNames.description} id={this._descriptionId}>\r\n        {secondaryText}\r\n      </div>\r\n    ) : null;\r\n  };\r\n\r\n  private _onRenderAriaDescription = () => {\r\n    const { ariaDescription } = this.props;\r\n\r\n    // If ariaDescription is given, descriptionId will be assigned to ariaDescriptionSpan,\r\n    // otherwise it will be assigned to descriptionSpan.\r\n    return ariaDescription ? (\r\n      <span className={this._classNames.screenReaderText} id={this._ariaDescriptionId}>\r\n        {ariaDescription}\r\n      </span>\r\n    ) : null;\r\n  };\r\n\r\n  private _onRenderMenuIcon = (props: IButtonProps): JSX.Element | null => {\r\n    const { menuIconProps } = this.props;\r\n\r\n    return <Icon iconName=\"ChevronDown\" {...menuIconProps} className={this._classNames.menuIcon} />;\r\n  };\r\n\r\n  private _onRenderMenu = (menuProps: IContextualMenuProps): JSX.Element => {\r\n    const { onDismiss = this._dismissMenu } = menuProps;\r\n\r\n    const MenuType = this.props.menuAs || (ContextualMenu as React.ReactType<IContextualMenuProps>);\r\n\r\n    // the accessible menu label (accessible name) has a relationship to the button.\r\n    // If the menu props do not specify an explicit value for aria-label or aria-labelledBy,\r\n    // AND the button has text, we'll set the menu aria-labelledBy to the text element id.\r\n    if (!menuProps.ariaLabel && !menuProps.labelElementId && this._hasText()) {\r\n      menuProps = { ...menuProps, labelElementId: this._labelId };\r\n    }\r\n\r\n    return (\r\n      <MenuType\r\n        id={this._labelId + '-menu'}\r\n        directionalHint={DirectionalHint.bottomLeftEdge}\r\n        {...menuProps}\r\n        shouldFocusOnContainer={this.state.menuProps ? this.state.menuProps.shouldFocusOnContainer : undefined}\r\n        shouldFocusOnMount={this.state.menuProps ? this.state.menuProps.shouldFocusOnMount : undefined}\r\n        hidden={this.state.menuProps ? this.state.menuProps.hidden : undefined}\r\n        className={css('ms-BaseButton-menuhost', menuProps.className)}\r\n        target={this._isSplitButton ? this._splitButtonContainer.current : this._buttonElement.current}\r\n        onDismiss={onDismiss}\r\n      />\r\n    );\r\n  };\r\n\r\n  private _dismissMenu = (): void => {\r\n    let menuProps = null;\r\n    if (this.props.persistMenu && this.state.menuProps) {\r\n      // Create a new object to trigger componentDidUpdate\r\n      menuProps = { ...this.state.menuProps, hidden: true };\r\n    }\r\n    this.setState({ menuProps: menuProps });\r\n  };\r\n\r\n  private _openMenu = (shouldFocusOnContainer?: boolean, shouldFocusOnMount: boolean = true): void => {\r\n    if (this.props.menuProps) {\r\n      const menuProps = { ...this.props.menuProps, shouldFocusOnContainer, shouldFocusOnMount };\r\n      if (this.props.persistMenu) {\r\n        menuProps.hidden = false;\r\n      }\r\n      this.setState({ menuProps: menuProps });\r\n    }\r\n  };\r\n\r\n  private _onToggleMenu = (shouldFocusOnContainer: boolean): void => {\r\n    const currentMenuProps = this.state.menuProps;\r\n    let shouldFocusOnMount = true;\r\n    if (this.props.menuProps && this.props.menuProps.shouldFocusOnMount === false) {\r\n      shouldFocusOnMount = false;\r\n    }\r\n    if (this.props.persistMenu) {\r\n      currentMenuProps && currentMenuProps.hidden ? this._openMenu(shouldFocusOnContainer, shouldFocusOnMount) : this._dismissMenu();\r\n    } else {\r\n      currentMenuProps ? this._dismissMenu() : this._openMenu(shouldFocusOnContainer, shouldFocusOnMount);\r\n    }\r\n  };\r\n\r\n  private _onRenderSplitButtonContent(tag: any, buttonProps: IButtonProps): JSX.Element {\r\n    const { styles = {}, disabled, allowDisabledFocus, checked, getSplitButtonClassNames, primaryDisabled, menuProps, toggle } = this.props;\r\n    let { keytipProps } = this.props;\r\n\r\n    const classNames = getSplitButtonClassNames\r\n      ? getSplitButtonClassNames(!!disabled, this._isExpanded, !!checked, !!allowDisabledFocus)\r\n      : styles && getBaseSplitButtonClassNames(styles!, !!disabled, this._isExpanded, !!checked);\r\n\r\n    assign(buttonProps, {\r\n      onClick: undefined,\r\n      tabIndex: -1,\r\n      'data-is-focusable': false\r\n    });\r\n    const ariaDescribedBy = buttonProps.ariaDescription;\r\n\r\n    if (keytipProps && menuProps) {\r\n      keytipProps = {\r\n        ...keytipProps,\r\n        hasMenu: true\r\n      };\r\n    }\r\n\r\n    const containerProps = getNativeProps(buttonProps, [], ['disabled']);\r\n    return (\r\n      <KeytipData keytipProps={keytipProps} disabled={disabled}>\r\n        {(keytipAttributes: any): JSX.Element => (\r\n          <div\r\n            {...containerProps}\r\n            data-ktp-target={keytipAttributes['data-ktp-target']}\r\n            role={'button'}\r\n            aria-disabled={disabled}\r\n            aria-haspopup={true}\r\n            aria-expanded={this._isExpanded}\r\n            aria-pressed={toggle ? !!checked : undefined} // aria-pressed attribute should only be present for toggle buttons\r\n            aria-describedby={mergeAriaAttributeValues(ariaDescribedBy, keytipAttributes['aria-describedby'])}\r\n            className={classNames && classNames.splitButtonContainer}\r\n            onKeyDown={this._onSplitButtonContainerKeyDown}\r\n            onTouchStart={this._onTouchStart}\r\n            ref={this._splitButtonContainer}\r\n            data-is-focusable={true}\r\n            onClick={!disabled && !primaryDisabled ? this._onSplitButtonPrimaryClick : undefined}\r\n            tabIndex={!disabled || allowDisabledFocus ? 0 : undefined}\r\n            aria-roledescription={buttonProps['aria-roledescription']}\r\n            onFocusCapture={this._onSplitContainerFocusCapture}\r\n          >\r\n            <span style={{ display: 'flex' }}>\r\n              {this._onRenderContent(tag, buttonProps)}\r\n              {this._onRenderSplitButtonMenuButton(classNames, keytipAttributes)}\r\n              {this._onRenderSplitButtonDivider(classNames)}\r\n            </span>\r\n          </div>\r\n        )}\r\n      </KeytipData>\r\n    );\r\n  }\r\n\r\n  private _onSplitContainerFocusCapture = (ev: React.FocusEvent<HTMLDivElement>) => {\r\n    const container = this._splitButtonContainer.current;\r\n\r\n    // If the target is coming from the portal we do not need to set focus on the container.\r\n    if (!container || (ev.target && portalContainsElement(ev.target, container))) {\r\n      return;\r\n    }\r\n\r\n    // We should never be able to focus the individual buttons in a split button. Focus\r\n    // should always remain on the container.\r\n    container.focus();\r\n  };\r\n\r\n  private _onSplitButtonPrimaryClick = (ev: React.MouseEvent<HTMLDivElement>) => {\r\n    if (this._isExpanded) {\r\n      this._dismissMenu();\r\n    }\r\n\r\n    if (!this._processingTouch && this.props.onClick) {\r\n      this.props.onClick(ev);\r\n    } else if (this._processingTouch) {\r\n      this._onMenuClick(ev);\r\n    }\r\n  };\r\n\r\n  private _onRenderSplitButtonDivider(classNames: ISplitButtonClassNames | undefined): JSX.Element | null {\r\n    if (classNames && classNames.divider) {\r\n      return <span className={classNames.divider} />;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _onRenderSplitButtonMenuButton(classNames: ISplitButtonClassNames | undefined, keytipAttributes: any): JSX.Element {\r\n    const { allowDisabledFocus, checked, disabled } = this.props;\r\n    let menuIconProps = this.props.menuIconProps;\r\n\r\n    const { splitButtonAriaLabel } = this.props;\r\n\r\n    if (menuIconProps === undefined) {\r\n      menuIconProps = {\r\n        iconName: 'ChevronDown'\r\n      };\r\n    }\r\n\r\n    const splitButtonProps = {\r\n      styles: classNames,\r\n      checked: checked,\r\n      disabled: disabled,\r\n      allowDisabledFocus: allowDisabledFocus,\r\n      onClick: this._onMenuClick,\r\n      menuProps: undefined,\r\n      iconProps: { ...menuIconProps, className: this._classNames.menuIcon },\r\n      ariaLabel: splitButtonAriaLabel,\r\n      'aria-haspopup': true,\r\n      'aria-expanded': this._isExpanded,\r\n      'data-is-focusable': false\r\n    };\r\n\r\n    // Add data-ktp-execute-target to the split button if the keytip is defined\r\n    return (\r\n      <BaseButton\r\n        {...splitButtonProps}\r\n        data-ktp-execute-target={keytipAttributes['data-ktp-execute-target']}\r\n        onMouseDown={this._onMouseDown}\r\n        tabIndex={-1}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    // explicity cancelling event so click won't fire after this\r\n    if (this.props.disabled && (ev.which === KeyCodes.enter || ev.which === KeyCodes.space)) {\r\n      ev.preventDefault();\r\n      ev.stopPropagation();\r\n    } else if (!this.props.disabled) {\r\n      if (this.props.menuProps) {\r\n        this._onMenuKeyDown(ev);\r\n      } else if (this.props.onKeyDown !== undefined) {\r\n        this.props.onKeyDown(ev); // not cancelling event because it's not disabled\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onKeyUp = (ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    if (!this.props.disabled && this.props.onKeyUp !== undefined) {\r\n      this.props.onKeyUp(ev); // not cancelling event because it's not disabled\r\n    }\r\n  };\r\n\r\n  private _onKeyPress = (ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    if (!this.props.disabled && this.props.onKeyPress !== undefined) {\r\n      this.props.onKeyPress(ev); // not cancelling event because it's not disabled\r\n    }\r\n  };\r\n\r\n  private _onMouseUp = (ev: React.MouseEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    if (!this.props.disabled && this.props.onMouseUp !== undefined) {\r\n      this.props.onMouseUp(ev); // not cancelling event because it's not disabled\r\n    }\r\n  };\r\n\r\n  private _onMouseDown = (ev: React.MouseEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    if (!this.props.disabled && this.props.onMouseDown !== undefined) {\r\n      this.props.onMouseDown(ev); // not cancelling event because it's not disabled\r\n    }\r\n  };\r\n\r\n  private _onClick = (ev: React.MouseEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    if (!this.props.disabled) {\r\n      if (this.props.menuProps) {\r\n        this._onMenuClick(ev);\r\n      } else if (this.props.onClick !== undefined) {\r\n        this.props.onClick(ev); // not cancelling event because it's not disabled\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onSplitButtonContainerKeyDown = (ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      if (this._buttonElement.current) {\r\n        this._buttonElement.current.click();\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    } else {\r\n      this._onMenuKeyDown(ev);\r\n    }\r\n  };\r\n\r\n  private _onMenuKeyDown = (ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>) => {\r\n    if (this.props.disabled) {\r\n      return;\r\n    }\r\n\r\n    if (this.props.onKeyDown) {\r\n      this.props.onKeyDown(ev);\r\n    }\r\n\r\n    const isUp = ev.which === KeyCodes.up;\r\n    const isDown = ev.which === KeyCodes.down;\r\n\r\n    if (!ev.defaultPrevented && this._isValidMenuOpenKey(ev)) {\r\n      const { onMenuClick } = this.props;\r\n      if (onMenuClick) {\r\n        onMenuClick(ev, this);\r\n      }\r\n\r\n      this._onToggleMenu(false);\r\n      ev.preventDefault();\r\n      ev.stopPropagation();\r\n    }\r\n\r\n    if (!(ev.altKey || ev.metaKey) && (isUp || isDown)) {\r\n      this.setState(state => {\r\n        if (state.menuProps && !state.menuProps.shouldFocusOnMount) {\r\n          return { menuProps: { ...state.menuProps, shouldFocusOnMount: true } };\r\n        }\r\n        return state;\r\n      });\r\n\r\n      // This should be done in the setStateCallback but because preventDefault\r\n      // needs to be called, we have to evaluate the current state, even though\r\n      // it might not be 100% accurate;\r\n      if (this.state.menuProps && !this.state.menuProps.shouldFocusOnMount) {\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onTouchStart: () => void = () => {\r\n    if (this._isSplitButton && this._splitButtonContainer.current && !('onpointerdown' in this._splitButtonContainer.current)) {\r\n      this._handleTouchAndPointerEvent();\r\n    }\r\n  };\r\n\r\n  private _onPointerDown(ev: PointerEvent) {\r\n    if (ev.pointerType === 'touch') {\r\n      this._handleTouchAndPointerEvent();\r\n\r\n      ev.preventDefault();\r\n      ev.stopImmediatePropagation();\r\n    }\r\n  }\r\n\r\n  private _handleTouchAndPointerEvent() {\r\n    // If we already have an existing timeeout from a previous touch and pointer event\r\n    // cancel that timeout so we can set a nwe one.\r\n    if (this._lastTouchTimeoutId !== undefined) {\r\n      this._async.clearTimeout(this._lastTouchTimeoutId);\r\n      this._lastTouchTimeoutId = undefined;\r\n    }\r\n    this._processingTouch = true;\r\n\r\n    this._lastTouchTimeoutId = this._async.setTimeout(() => {\r\n      this._processingTouch = false;\r\n      this._lastTouchTimeoutId = undefined;\r\n    }, TouchIdleDelay);\r\n  }\r\n\r\n  /**\r\n   * Returns if the user hits a valid keyboard key to open the menu\r\n   * @param ev - the keyboard event\r\n   * @returns True if user clicks on custom trigger key if enabled or alt + down arrow if not. False otherwise.\r\n   */\r\n  private _isValidMenuOpenKey(ev: React.KeyboardEvent<HTMLDivElement | HTMLAnchorElement | HTMLButtonElement>): boolean {\r\n    if (this.props.menuTriggerKeyCode) {\r\n      return ev.which === this.props.menuTriggerKeyCode;\r\n    } else if (this.props.menuProps) {\r\n      return ev.which === KeyCodes.down && (ev.altKey || ev.metaKey);\r\n    }\r\n\r\n    // Note: When enter is pressed, we will let the event continue to propagate\r\n    // to trigger the onClick event on the button\r\n    return false;\r\n  }\r\n\r\n  private _onMenuClick = (ev: React.MouseEvent<HTMLDivElement | HTMLButtonElement | HTMLAnchorElement>) => {\r\n    const { onMenuClick } = this.props;\r\n    if (onMenuClick) {\r\n      onMenuClick(ev, this);\r\n    }\r\n\r\n    if (!ev.defaultPrevented) {\r\n      // When Edge + Narrator are used together (regardless of if the button is in a form or not), pressing\r\n      // \"Enter\" fires this method and not _onMenuKeyDown. Checking ev.nativeEvent.detail differentiates\r\n      // between a real click event and a keypress event (detail should be the number of mouse clicks).\r\n      // ...Plot twist! For a real click event in IE 11, detail is always 0 (Edge sets it properly to 1).\r\n      // So we also check the pointerType property, which both Edge and IE set to \"mouse\" for real clicks\r\n      // and \"\" for pressing \"Enter\" with Narrator on.\r\n      const shouldFocusOnContainer = ev.nativeEvent.detail !== 0 || (ev.nativeEvent as PointerEvent).pointerType === 'mouse';\r\n      this._onToggleMenu(shouldFocusOnContainer);\r\n      ev.preventDefault();\r\n      ev.stopPropagation();\r\n    }\r\n  };\r\n}\r\n","import { IButtonStyles } from './Button.types';\r\nimport { memoizeFunction } from '../../Utilities';\r\nimport { HighContrastSelector, ITheme, IRawStyle, getFocusStyle, FontSizes, hiddenContentStyle } from '../../Styling';\r\n\r\nconst noOutline: IRawStyle = {\r\n  outline: 0\r\n};\r\n\r\nconst iconStyle = {\r\n  fontSize: FontSizes.icon,\r\n  margin: '0 4px',\r\n  height: '16px',\r\n  lineHeight: '16px',\r\n  textAlign: 'center',\r\n  verticalAlign: 'middle',\r\n  flexShrink: 0\r\n};\r\n\r\n/**\r\n * Gets the base button styles. Note: because it is a base class to be used with the `mergeRules`\r\n * helper, it should have values for all class names in the interface. This let `mergeRules` optimize\r\n * mixing class names together.\r\n */\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme): IButtonStyles => {\r\n    const { semanticColors } = theme;\r\n\r\n    const border = semanticColors.buttonBorder;\r\n    const disabledBackground = semanticColors.disabledBackground;\r\n    const disabledText = semanticColors.disabledText;\r\n    const buttonHighContrastFocus = {\r\n      left: -2,\r\n      top: -2,\r\n      bottom: -2,\r\n      right: -2,\r\n      border: 'none',\r\n      outlineColor: 'ButtonText'\r\n    };\r\n\r\n    return {\r\n      root: [\r\n        getFocusStyle(theme, -1, 'relative', buttonHighContrastFocus),\r\n        theme.fonts.medium,\r\n        {\r\n          boxSizing: 'border-box',\r\n          border: '1px solid ' + border,\r\n          userSelect: 'none',\r\n          display: 'inline-block',\r\n          textDecoration: 'none',\r\n          textAlign: 'center',\r\n          cursor: 'pointer',\r\n          verticalAlign: 'top',\r\n          padding: '0 16px',\r\n          borderRadius: 0,\r\n\r\n          selectors: {\r\n            // IE11 workaround for preventing shift of child elements of a button when active.\r\n            ':active > *': {\r\n              position: 'relative',\r\n              left: 0,\r\n              top: 0\r\n            }\r\n          }\r\n        }\r\n      ],\r\n\r\n      rootDisabled: [\r\n        getFocusStyle(theme, -1, 'relative', buttonHighContrastFocus),\r\n        {\r\n          backgroundColor: disabledBackground,\r\n          color: disabledText,\r\n          cursor: 'default',\r\n          pointerEvents: 'none',\r\n          selectors: {\r\n            ':hover': noOutline,\r\n            ':focus': noOutline,\r\n            [HighContrastSelector]: {\r\n              color: 'grayText',\r\n              bordercolor: 'grayText'\r\n            }\r\n          }\r\n        }\r\n      ],\r\n\r\n      iconDisabled: {\r\n        color: disabledText\r\n      },\r\n\r\n      menuIconDisabled: {\r\n        color: disabledText\r\n      },\r\n\r\n      flexContainer: {\r\n        display: 'flex',\r\n        height: '100%',\r\n        flexWrap: 'nowrap',\r\n        justifyContent: 'center',\r\n        alignItems: 'center'\r\n      },\r\n\r\n      textContainer: {\r\n        flexGrow: 1\r\n      },\r\n\r\n      icon: iconStyle,\r\n\r\n      menuIcon: [\r\n        iconStyle,\r\n        {\r\n          fontSize: FontSizes.small\r\n        }\r\n      ],\r\n\r\n      label: {\r\n        margin: '0 4px',\r\n        lineHeight: '100%'\r\n      },\r\n\r\n      screenReaderText: hiddenContentStyle\r\n    };\r\n  }\r\n);\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets, getFocusStyle } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles): IButtonStyles => {\r\n    const buttonHighContrastFocus = {\r\n      left: -2,\r\n      top: -2,\r\n      bottom: -2,\r\n      right: -2,\r\n      border: 'none'\r\n    };\r\n\r\n    const splitButtonStyles: IButtonStyles = {\r\n      splitButtonContainer: [\r\n        getFocusStyle(theme, 0, 'relative', buttonHighContrastFocus),\r\n        {\r\n          display: 'inline-flex'\r\n        }\r\n      ],\r\n      splitButtonContainerFocused: {\r\n        outline: 'none!important'\r\n      },\r\n      splitButtonMenuButton: {\r\n        padding: 6,\r\n        height: 'auto',\r\n        boxSizing: 'border-box',\r\n        border: 0,\r\n        borderRadius: 0,\r\n        outline: 'transparent',\r\n        userSelect: 'none',\r\n        display: 'inline-block',\r\n        textDecoration: 'none',\r\n        textAlign: 'center',\r\n        cursor: 'pointer',\r\n        verticalAlign: 'top',\r\n        width: 32,\r\n        marginLeft: -1\r\n      },\r\n\r\n      splitButtonDivider: {\r\n        position: 'absolute',\r\n        width: 1,\r\n        right: 31,\r\n        top: 8,\r\n        bottom: 8\r\n      },\r\n\r\n      splitButtonMenuButtonDisabled: {\r\n        pointerEvents: 'none',\r\n        selectors: {\r\n          ':hover': {\r\n            cursor: 'default'\r\n          }\r\n        }\r\n      },\r\n\r\n      splitButtonFlexContainer: {\r\n        display: 'flex',\r\n        height: '100%',\r\n        flexWrap: 'nowrap',\r\n        justifyContent: 'center',\r\n        alignItems: 'center'\r\n      },\r\n\r\n      splitButtonContainerDisabled: {\r\n        outline: 'none',\r\n        border: 'none'\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(splitButtonStyles, customStyles)!;\r\n  }\r\n);\r\n","import { IButtonStyles } from './Button.types';\r\nimport { ITheme, HighContrastSelector } from '../../Styling';\r\n\r\nexport function standardStyles(theme: ITheme): IButtonStyles {\r\n  const s = theme.semanticColors;\r\n\r\n  const buttonBackground = s.buttonBackground;\r\n  const buttonBackgroundChecked = s.buttonBackgroundChecked;\r\n  const buttonBackgroundHovered = s.buttonBackgroundHovered;\r\n\r\n  const buttonText = s.buttonText;\r\n  const buttonTextHovered = s.buttonTextHovered;\r\n  const buttonTextChecked = s.buttonTextChecked;\r\n  const buttonTextCheckedHovered = s.buttonTextCheckedHovered;\r\n\r\n  return {\r\n    root: {\r\n      backgroundColor: buttonBackground,\r\n      color: buttonText\r\n    },\r\n\r\n    rootHovered: {\r\n      backgroundColor: buttonBackgroundHovered,\r\n      color: buttonTextHovered,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          borderColor: 'Highlight',\r\n          color: 'Highlight'\r\n        }\r\n      }\r\n    },\r\n\r\n    rootPressed: {\r\n      backgroundColor: buttonBackgroundChecked,\r\n      color: buttonTextChecked\r\n    },\r\n\r\n    rootExpanded: {\r\n      backgroundColor: buttonBackgroundChecked,\r\n      color: buttonTextChecked\r\n    },\r\n\r\n    rootChecked: {\r\n      backgroundColor: buttonBackgroundChecked,\r\n      color: buttonTextChecked\r\n    },\r\n\r\n    rootCheckedHovered: {\r\n      backgroundColor: theme.palette.neutralLight,\r\n      color: buttonTextCheckedHovered\r\n    },\r\n\r\n    // Split button styles\r\n    splitButtonContainer: {\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          border: 'none'\r\n        }\r\n      }\r\n    },\r\n\r\n    splitButtonMenuButton: {\r\n      color: theme.palette.white,\r\n      backgroundColor: theme.palette.neutralLighter,\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: theme.palette.neutralLight,\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              color: 'Highlight'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n\r\n    splitButtonMenuButtonDisabled: {\r\n      backgroundColor: theme.palette.neutralLighter,\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: theme.palette.neutralLighter\r\n        }\r\n      }\r\n    },\r\n\r\n    splitButtonDivider: {\r\n      backgroundColor: theme.palette.neutralTertiaryAlt\r\n    },\r\n\r\n    splitButtonMenuButtonChecked: {\r\n      backgroundColor: theme.palette.themePrimary\r\n    },\r\n\r\n    splitButtonMenuButtonExpanded: {\r\n      backgroundColor: theme.palette.neutralLight\r\n    },\r\n\r\n    splitButtonMenuIcon: {\r\n      color: theme.palette.neutralPrimary\r\n    },\r\n\r\n    splitButtonMenuIconDisabled: {\r\n      color: theme.palette.neutralTertiary\r\n    }\r\n  };\r\n}\r\n\r\nexport function primaryStyles(theme: ITheme): IButtonStyles {\r\n  return {\r\n    root: {\r\n      backgroundColor: theme.palette.themePrimary,\r\n      color: theme.palette.white,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          color: 'Window',\r\n          backgroundColor: 'WindowText',\r\n          MsHighContrastAdjust: 'none'\r\n        }\r\n      }\r\n    },\r\n\r\n    rootHovered: {\r\n      backgroundColor: theme.palette.themeDarkAlt,\r\n      color: theme.palette.white,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          color: 'Window',\r\n          backgroundColor: 'Highlight'\r\n        }\r\n      }\r\n    },\r\n\r\n    rootPressed: {\r\n      backgroundColor: theme.palette.themeDark,\r\n      color: theme.palette.white,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          color: 'Window',\r\n          backgroundColor: 'WindowText',\r\n          MsHighContrastAdjust: 'none'\r\n        }\r\n      }\r\n    },\r\n\r\n    rootExpanded: {\r\n      backgroundColor: theme.palette.themeDark,\r\n      color: theme.palette.white\r\n    },\r\n\r\n    rootChecked: {\r\n      backgroundColor: theme.palette.themeDark,\r\n      color: theme.palette.white\r\n    },\r\n\r\n    rootCheckedHovered: {\r\n      backgroundColor: theme.palette.themePrimary,\r\n      color: theme.palette.white\r\n    },\r\n\r\n    rootDisabled: {\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          color: 'GrayText',\r\n          borderColor: 'GrayText',\r\n          backgroundColor: 'Window'\r\n        }\r\n      }\r\n    },\r\n\r\n    // Split button styles\r\n    splitButtonContainer: {\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          border: 'none'\r\n        }\r\n      }\r\n    },\r\n\r\n    splitButtonDivider: {\r\n      backgroundColor: theme.palette.themeLighter\r\n    },\r\n\r\n    splitButtonMenuButton: {\r\n      backgroundColor: theme.palette.themePrimary,\r\n      color: theme.palette.white,\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: theme.palette.themeDark,\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              color: 'Highlight'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n\r\n    splitButtonMenuButtonDisabled: {\r\n      backgroundColor: theme.palette.neutralLighter,\r\n      selectors: {\r\n        ':hover': {\r\n          backgroundColor: theme.palette.neutralLighter\r\n        }\r\n      }\r\n    },\r\n\r\n    splitButtonMenuButtonChecked: {\r\n      backgroundColor: theme.palette.themeDark\r\n    },\r\n\r\n    splitButtonMenuButtonExpanded: {\r\n      backgroundColor: theme.palette.themeDark\r\n    },\r\n\r\n    splitButtonMenuIcon: {\r\n      color: theme.palette.white\r\n    },\r\n\r\n    splitButtonMenuIconDisabled: {\r\n      color: theme.palette.neutralTertiary\r\n    }\r\n  };\r\n}\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets, FontWeights } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\r\nimport { getStyles as getSplitButtonStyles } from '../SplitButton/SplitButton.styles';\r\n\r\nimport { primaryStyles, standardStyles } from '../ButtonThemes';\r\n\r\nconst DEFAULT_BUTTON_HEIGHT = '32px';\r\nconst DEFAULT_BUTTON_MINWIDTH = '80px';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles, primary?: boolean): IButtonStyles => {\r\n    const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\r\n    const splitButtonStyles: IButtonStyles = getSplitButtonStyles(theme);\r\n    const defaultButtonStyles: IButtonStyles = {\r\n      root: {\r\n        minWidth: DEFAULT_BUTTON_MINWIDTH,\r\n        height: DEFAULT_BUTTON_HEIGHT\r\n      },\r\n      label: {\r\n        fontWeight: FontWeights.semibold\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(\r\n      baseButtonStyles,\r\n      defaultButtonStyles,\r\n      primary ? primaryStyles(theme) : standardStyles(theme),\r\n      splitButtonStyles,\r\n      customStyles\r\n    )!;\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { BaseButton } from '../BaseButton';\r\nimport { BaseComponent, customizable, nullRender } from '../../../Utilities';\r\nimport { IButtonProps } from '../Button.types';\r\nimport { getStyles } from './DefaultButton.styles';\r\n\r\n@customizable('DefaultButton', ['theme', 'styles'], true)\r\nexport class DefaultButton extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Tell BaseComponent to bypass resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  public render(): JSX.Element {\r\n    const { primary = false, styles, theme } = this.props;\r\n\r\n    return (\r\n      <BaseButton\r\n        {...this.props}\r\n        variantClassName={primary ? 'ms-Button--primary' : 'ms-Button--default'}\r\n        styles={getStyles(theme!, styles, primary)}\r\n        onRenderDescription={nullRender}\r\n      />\r\n    );\r\n  }\r\n}\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets, HighContrastSelector } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\r\n\r\nconst DEFAULT_BUTTON_HEIGHT = '40px';\r\nconst DEFAULT_PADDING = '0 4px';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles): IButtonStyles => {\r\n    const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\r\n    const actionButtonStyles: IButtonStyles = {\r\n      root: {\r\n        padding: DEFAULT_PADDING,\r\n        height: DEFAULT_BUTTON_HEIGHT,\r\n        color: theme.palette.neutralPrimary,\r\n        backgroundColor: 'transparent',\r\n        border: '1px solid transparent'\r\n      },\r\n\r\n      rootHovered: {\r\n        color: theme.palette.themePrimary,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderColor: 'Highlight',\r\n            color: 'Highlight'\r\n          }\r\n        }\r\n      },\r\n\r\n      iconHovered: {\r\n        color: theme.palette.themePrimary\r\n      },\r\n\r\n      rootPressed: {\r\n        color: theme.palette.black\r\n      },\r\n\r\n      rootExpanded: {\r\n        color: theme.palette.themePrimary\r\n      },\r\n\r\n      iconPressed: {\r\n        color: theme.palette.themeDarker\r\n      },\r\n\r\n      rootDisabled: {\r\n        color: theme.palette.neutralTertiary,\r\n        backgroundColor: 'transparent'\r\n      },\r\n\r\n      rootChecked: {\r\n        color: theme.palette.black\r\n      },\r\n\r\n      iconChecked: {\r\n        color: theme.palette.themeDarker\r\n      },\r\n\r\n      flexContainer: {\r\n        justifyContent: 'flex-start'\r\n      },\r\n\r\n      icon: {\r\n        color: theme.palette.themeDarkAlt\r\n      },\r\n\r\n      iconDisabled: {\r\n        color: 'inherit'\r\n      },\r\n\r\n      menuIcon: {\r\n        color: theme.palette.neutralSecondary\r\n      },\r\n\r\n      textContainer: {\r\n        flexGrow: 0\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(baseButtonStyles, actionButtonStyles, customStyles)!;\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { BaseButton } from '../BaseButton';\r\nimport { BaseComponent, customizable, nullRender } from '../../../Utilities';\r\nimport { IButtonProps } from '../Button.types';\r\nimport { getStyles } from './ActionButton.styles';\r\n\r\n@customizable('ActionButton', ['theme', 'styles'], true)\r\nexport class ActionButton extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Tell BaseComponent to bypass resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  public render(): JSX.Element {\r\n    const { styles, theme } = this.props;\r\n\r\n    return (\r\n      <BaseButton\r\n        {...this.props}\r\n        variantClassName=\"ms-Button--action ms-Button--command\"\r\n        styles={getStyles(theme!, styles)}\r\n        onRenderDescription={nullRender}\r\n      />\r\n    );\r\n  }\r\n}\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets, FontWeights, HighContrastSelector } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\r\nimport { getStyles as getSplitButtonStyles } from '../SplitButton/SplitButton.styles';\r\nimport { primaryStyles, standardStyles } from '../ButtonThemes';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles, primary?: boolean): IButtonStyles => {\r\n    const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\r\n    const splitButtonStyles: IButtonStyles = getSplitButtonStyles(theme);\r\n    const compoundButtonStyles: IButtonStyles = {\r\n      root: {\r\n        maxWidth: '280px',\r\n        minHeight: '72px',\r\n        height: 'auto',\r\n        padding: '20px'\r\n      },\r\n\r\n      flexContainer: {\r\n        flexDirection: 'row',\r\n        alignItems: 'flex-start',\r\n        minWidth: '100%',\r\n        margin: ''\r\n      },\r\n\r\n      textContainer: {\r\n        textAlign: 'left'\r\n      },\r\n\r\n      icon: {\r\n        fontSize: '2em',\r\n        lineHeight: '1em',\r\n        height: '1em',\r\n        margin: '0px 8px 0px 0px',\r\n        flexBasis: '1em',\r\n        flexShrink: '0'\r\n      },\r\n\r\n      label: {\r\n        margin: '0 0 5px',\r\n        lineHeight: '100%',\r\n        fontWeight: FontWeights.semibold\r\n      },\r\n      description: [\r\n        theme.fonts.small,\r\n        {\r\n          lineHeight: '100%'\r\n        }\r\n      ]\r\n    };\r\n\r\n    const standardCompoundTheme: IButtonStyles = {\r\n      description: {\r\n        color: theme.palette.neutralSecondary\r\n      },\r\n\r\n      descriptionHovered: {\r\n        color: theme.palette.neutralDark\r\n      },\r\n\r\n      descriptionPressed: {\r\n        color: 'inherit'\r\n      },\r\n\r\n      descriptionChecked: {\r\n        color: 'inherit'\r\n      },\r\n\r\n      descriptionDisabled: {\r\n        color: 'inherit'\r\n      }\r\n    };\r\n\r\n    const primaryCompoundTheme: IButtonStyles = {\r\n      description: {\r\n        color: theme.palette.white,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'Window',\r\n            backgroundColor: 'WindowText',\r\n            MsHighContrastAdjust: 'none'\r\n          }\r\n        }\r\n      },\r\n\r\n      descriptionHovered: {\r\n        color: theme.palette.white,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'Window',\r\n            backgroundColor: 'Highlight',\r\n            MsHighContrastAdjust: 'none'\r\n          }\r\n        }\r\n      },\r\n\r\n      descriptionPressed: {\r\n        color: 'inherit'\r\n      },\r\n\r\n      descriptionChecked: {\r\n        color: 'inherit'\r\n      },\r\n\r\n      descriptionDisabled: {\r\n        color: 'inherit',\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'inherit'\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(\r\n      baseButtonStyles,\r\n      compoundButtonStyles,\r\n      primary ? primaryStyles(theme) : standardStyles(theme),\r\n      primary ? primaryCompoundTheme : standardCompoundTheme,\r\n      splitButtonStyles,\r\n      customStyles\r\n    )!;\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { BaseButton } from '../BaseButton';\r\nimport { BaseComponent, customizable } from '../../../Utilities';\r\nimport { IButtonProps } from '../Button.types';\r\nimport { getStyles } from './CompoundButton.styles';\r\n\r\n@customizable('CompoundButton', ['theme', 'styles'], true)\r\nexport class CompoundButton extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Tell BaseComponent to bypass resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  public render(): JSX.Element {\r\n    const { primary = false, styles, theme } = this.props;\r\n    return (\r\n      <BaseButton\r\n        {...this.props}\r\n        variantClassName={primary ? 'ms-Button--compoundPrimary' : 'ms-Button--compound'}\r\n        styles={getStyles(theme!, styles, primary)}\r\n      />\r\n    );\r\n  }\r\n}\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets, HighContrastSelector } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\r\nimport { getStyles as getSplitButtonStyles } from '../SplitButton/SplitButton.styles';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles): IButtonStyles => {\r\n    const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\r\n    const splitButtonStyles: IButtonStyles = getSplitButtonStyles(theme);\r\n    const { palette, semanticColors } = theme;\r\n    const iconButtonStyles: IButtonStyles = {\r\n      root: {\r\n        padding: '0 4px',\r\n        width: '32px',\r\n        height: '32px',\r\n        backgroundColor: 'transparent',\r\n        border: 'none',\r\n        color: semanticColors.actionLink\r\n      },\r\n\r\n      rootHovered: {\r\n        color: semanticColors.actionLinkHovered,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderColor: 'Highlight',\r\n            color: 'Highlight'\r\n          }\r\n        }\r\n      },\r\n\r\n      rootPressed: {\r\n        color: palette.themePrimary\r\n      },\r\n\r\n      rootExpanded: {\r\n        color: palette.themePrimary\r\n      },\r\n\r\n      rootChecked: {\r\n        backgroundColor: semanticColors.buttonBackgroundChecked\r\n      },\r\n\r\n      rootCheckedHovered: {\r\n        backgroundColor: semanticColors.buttonBackgroundHovered\r\n      },\r\n\r\n      rootDisabled: {\r\n        color: semanticColors.disabledText\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(baseButtonStyles, iconButtonStyles, splitButtonStyles, customStyles)!;\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { BaseButton } from '../BaseButton';\r\nimport { BaseComponent, customizable, nullRender } from '../../../Utilities';\r\nimport { IButtonProps } from '../Button.types';\r\nimport { getStyles } from './IconButton.styles';\r\n\r\n@customizable('IconButton', ['theme', 'styles'], true)\r\nexport class IconButton extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Tell BaseComponent to bypass resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  public render(): JSX.Element {\r\n    const { styles, theme } = this.props;\r\n\r\n    return (\r\n      <BaseButton\r\n        {...this.props}\r\n        variantClassName=\"ms-Button--icon\"\r\n        styles={getStyles(theme!, styles)}\r\n        onRenderText={nullRender}\r\n        onRenderDescription={nullRender}\r\n      />\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, customizable, nullRender } from '../../../Utilities';\r\nimport { DefaultButton } from '../DefaultButton/DefaultButton';\r\nimport { IButtonProps } from '../Button.types';\r\n\r\n@customizable('PrimaryButton', ['theme', 'styles'], true)\r\nexport class PrimaryButton extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Set this BaseComponent._skipComponentRefResolution to true, bypassing resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  public render(): JSX.Element {\r\n    return <DefaultButton {...this.props} primary={true} onRenderDescription={nullRender} />;\r\n  }\r\n}\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets, getFocusStyle, HighContrastSelector } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\r\nimport { getStyles as getSplitButtonStyles } from '../SplitButton/SplitButton.styles';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles, focusInset?: string, focusColor?: string): IButtonStyles => {\r\n    const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\r\n    const baseSplitButtonStyles: IButtonStyles = getSplitButtonStyles(theme);\r\n    const commandButtonHighContrastFocus = {\r\n      left: 4,\r\n      top: 4,\r\n      bottom: 4,\r\n      right: 4,\r\n      border: 'none'\r\n    };\r\n\r\n    const commandButtonStyles: IButtonStyles = {\r\n      root: [\r\n        getFocusStyle(theme, -1, 'relative', commandButtonHighContrastFocus),\r\n        theme.fonts.medium,\r\n        {\r\n          minWidth: '40px',\r\n          backgroundColor: theme.palette.neutralLighter,\r\n          color: theme.palette.neutralPrimary,\r\n          padding: '0 4px',\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              border: 'none'\r\n            }\r\n          }\r\n        }\r\n      ],\r\n\r\n      rootHovered: {\r\n        backgroundColor: theme.palette.neutralLight,\r\n        color: theme.palette.neutralDark,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'Highlight'\r\n          }\r\n        }\r\n      },\r\n\r\n      rootPressed: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n        color: theme.palette.black\r\n      },\r\n\r\n      rootChecked: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n        color: theme.palette.black\r\n      },\r\n\r\n      rootExpanded: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n        color: theme.palette.black\r\n      },\r\n\r\n      rootCheckedHovered: {\r\n        backgroundColor: theme.palette.neutralQuaternary,\r\n        color: theme.palette.black\r\n      },\r\n\r\n      // Split button styles\r\n      splitButtonContainer: {\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            border: 'none'\r\n          }\r\n        }\r\n      },\r\n\r\n      splitButtonDivider: {\r\n        backgroundColor: theme.palette.neutralTertiaryAlt,\r\n        marginTop: 4,\r\n        marginBottom: 4\r\n      },\r\n\r\n      splitButtonMenuButton: {\r\n        backgroundColor: theme.palette.neutralLighter,\r\n        color: theme.palette.neutralPrimary,\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: theme.palette.neutralLight,\r\n            color: theme.palette.neutralDark,\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                color: 'Highlight'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n\r\n      splitButtonMenuButtonDisabled: {\r\n        backgroundColor: theme.palette.neutralLighter,\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: theme.palette.neutralLighter\r\n          }\r\n        }\r\n      },\r\n\r\n      splitButtonMenuButtonChecked: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n        color: theme.palette.black,\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: theme.palette.neutralQuaternaryAlt\r\n          }\r\n        }\r\n      },\r\n\r\n      splitButtonMenuButtonExpanded: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n        color: theme.palette.black,\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: theme.palette.neutralQuaternaryAlt\r\n          }\r\n        }\r\n      },\r\n\r\n      splitButtonMenuIcon: {\r\n        color: theme.palette.neutralPrimary\r\n      },\r\n\r\n      splitButtonMenuIconDisabled: {\r\n        color: theme.palette.neutralTertiary\r\n      },\r\n\r\n      label: {\r\n        fontWeight: 'normal' // theme.fontWeights.semibold,\r\n      },\r\n\r\n      icon: {\r\n        color: theme.palette.themeDarkAlt\r\n      },\r\n\r\n      menuIcon: {\r\n        color: theme.palette.neutralSecondary\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(baseButtonStyles, commandButtonStyles, baseSplitButtonStyles, customStyles)!;\r\n  }\r\n);\r\n","import * as React from 'react';\r\n\r\nimport { BaseComponent, warn } from '../../Utilities';\r\nimport { ButtonType, IButtonProps } from './Button.types';\r\nimport { DefaultButton } from './DefaultButton/DefaultButton';\r\nimport { ActionButton } from './ActionButton/ActionButton';\r\nimport { CompoundButton } from './CompoundButton/CompoundButton';\r\nimport { IconButton } from './IconButton/IconButton';\r\nimport { PrimaryButton } from './PrimaryButton/PrimaryButton';\r\n/**\r\n * This class is deprecated. Use the individual *Button components instead.\r\n * @deprecated Use the individual *Button components instead.\r\n */\r\nexport class Button extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Set this BaseComponent._skipComponentRefResolution to true, bypassing resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  constructor(props: IButtonProps) {\r\n    super(props);\r\n\r\n    warn(\r\n      `The Button component has been deprecated. Use specific variants instead. ` +\r\n        `(PrimaryButton, DefaultButton, IconButton, ActionButton, etc.)`\r\n    );\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const props = this.props;\r\n\r\n    switch (props.buttonType) {\r\n      case ButtonType.command:\r\n        return <ActionButton {...props} />;\r\n\r\n      case ButtonType.compound:\r\n        return <CompoundButton {...props} />;\r\n\r\n      case ButtonType.icon:\r\n        return <IconButton {...props} />;\r\n\r\n      case ButtonType.primary:\r\n        return <PrimaryButton {...props} />;\r\n\r\n      default:\r\n        return <DefaultButton {...props} />;\r\n    }\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { BaseButton } from '../BaseButton';\r\nimport { BaseComponent, customizable, nullRender } from '../../../Utilities';\r\nimport { IButtonProps } from '../Button.types';\r\nimport { getStyles } from './CommandBarButton.styles';\r\n\r\n@customizable('CommandBarButton', ['theme', 'styles'], true)\r\nexport class CommandBarButton extends BaseComponent<IButtonProps, {}> {\r\n  /**\r\n   * Tell BaseComponent to bypass resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  public render(): JSX.Element {\r\n    const { styles, theme } = this.props;\r\n\r\n    return (\r\n      <BaseButton\r\n        {...this.props}\r\n        variantClassName=\"ms-Button--commandBar\"\r\n        styles={getStyles(theme!, styles)}\r\n        onRenderDescription={nullRender}\r\n      />\r\n    );\r\n  }\r\n}\r\n","import { ActionButton } from '../ActionButton/ActionButton';\r\n\r\nexport const CommandButton = ActionButton;\r\n","import { IButtonStyles } from '../Button.types';\r\nimport { ITheme, concatStyleSets } from '../../../Styling';\r\nimport { memoizeFunction } from '../../../Utilities';\r\nimport { getStyles as getBaseButtonStyles } from '../BaseButton.styles';\r\n\r\nexport const getStyles = memoizeFunction(\r\n  (theme: ITheme, customStyles?: IButtonStyles, focusInset?: string, focusColor?: string): IButtonStyles => {\r\n    const baseButtonStyles: IButtonStyles = getBaseButtonStyles(theme);\r\n    const messageBarButtonStyles: IButtonStyles = {\r\n      root: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n        color: theme.palette.neutralPrimary\r\n      },\r\n\r\n      rootHovered: {\r\n        backgroundColor: theme.palette.neutralTertiaryAlt,\r\n        color: theme.palette.neutralDark\r\n      },\r\n\r\n      rootPressed: {\r\n        backgroundColor: theme.palette.neutralTertiary,\r\n        color: theme.palette.neutralDark\r\n      }\r\n    };\r\n\r\n    return concatStyleSets(baseButtonStyles, messageBarButtonStyles, customStyles)!;\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { ISearchBoxProps, ISearchBoxStyleProps, ISearchBoxStyles } from './SearchBox.types';\r\nimport { BaseComponent, getId, KeyCodes, classNamesFunction, getNativeProps, inputProperties } from '../../Utilities';\r\n\r\nimport { IconButton } from '../../Button';\r\nimport { Icon } from '../../Icon';\r\n\r\nconst getClassNames = classNamesFunction<ISearchBoxStyleProps, ISearchBoxStyles>();\r\n\r\nexport interface ISearchBoxState {\r\n  value?: string;\r\n  hasFocus?: boolean;\r\n  id?: string;\r\n}\r\n\r\nexport class SearchBoxBase extends BaseComponent<ISearchBoxProps, ISearchBoxState> {\r\n  public static defaultProps: Pick<ISearchBoxProps, 'disableAnimation' | 'clearButtonProps'> = {\r\n    disableAnimation: false,\r\n    clearButtonProps: { ariaLabel: 'Clear text' }\r\n  };\r\n\r\n  private _rootElement = React.createRef<HTMLDivElement>();\r\n  private _inputElement = React.createRef<HTMLInputElement>();\r\n  private _latestValue: string;\r\n\r\n  public constructor(props: ISearchBoxProps) {\r\n    super(props);\r\n\r\n    this._warnDeprecations({\r\n      labelText: 'placeholder',\r\n      defaultValue: 'value'\r\n    });\r\n\r\n    this._latestValue = props.value || '';\r\n\r\n    this.state = {\r\n      value: this._latestValue,\r\n      hasFocus: false,\r\n      id: getId('SearchBox')\r\n    };\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: ISearchBoxProps): void {\r\n    if (newProps.value !== undefined) {\r\n      this._latestValue = newProps.value;\r\n      // If the user passes in null, substitute an empty string\r\n      // (passing null is not allowed per typings, but users might do it anyway)\r\n      this.setState({\r\n        value: newProps.value || ''\r\n      });\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    const {\r\n      ariaLabel,\r\n      placeholder,\r\n      className,\r\n      disabled,\r\n      underlined,\r\n      styles,\r\n      labelText,\r\n      theme,\r\n      clearButtonProps,\r\n      disableAnimation,\r\n      iconProps\r\n    } = this.props;\r\n    const { value, hasFocus, id } = this.state;\r\n    const placeholderValue = labelText === undefined ? placeholder : labelText;\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      underlined,\r\n      hasFocus,\r\n      disabled,\r\n      hasInput: value!.length > 0,\r\n      disableAnimation\r\n    });\r\n\r\n    const nativeProps = getNativeProps(this.props, inputProperties, ['id', 'className', 'placeholder', 'onFocus', 'onBlur', 'value']);\r\n\r\n    return (\r\n      <div ref={this._rootElement} className={classNames.root} onFocusCapture={this._onFocusCapture}>\r\n        <div className={classNames.iconContainer} onClick={this._onClickFocus} aria-hidden={true}>\r\n          <Icon iconName=\"Search\" {...iconProps} className={classNames.icon} />\r\n        </div>\r\n        <input\r\n          {...nativeProps}\r\n          id={id}\r\n          className={classNames.field}\r\n          placeholder={placeholderValue}\r\n          onChange={this._onInputChange}\r\n          onInput={this._onInputChange}\r\n          onKeyDown={this._onKeyDown}\r\n          value={value}\r\n          disabled={disabled}\r\n          aria-label={ariaLabel ? ariaLabel : placeholder}\r\n          ref={this._inputElement}\r\n        />\r\n        {value!.length > 0 && (\r\n          <div className={classNames.clearButton}>\r\n            <IconButton\r\n              styles={{ root: { height: 'auto' }, icon: { fontSize: '12px' } }}\r\n              iconProps={{ iconName: 'Clear' }}\r\n              {...clearButtonProps}\r\n              onClick={this._onClearClick}\r\n            />\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Sets focus to the search box input field\r\n   */\r\n  public focus() {\r\n    if (this._inputElement.current) {\r\n      this._inputElement.current.focus();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns whether or not the SearchBox has focus\r\n   */\r\n  public hasFocus(): boolean {\r\n    return !!this.state.hasFocus;\r\n  }\r\n\r\n  private _onClear(ev: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement> | React.KeyboardEvent<HTMLElement>) {\r\n    this.props.onClear && this.props.onClear(ev);\r\n    if (!ev.defaultPrevented) {\r\n      this._latestValue = '';\r\n      this.setState({\r\n        value: ''\r\n      });\r\n      this._callOnChange('');\r\n      ev.stopPropagation();\r\n      ev.preventDefault();\r\n\r\n      this.focus();\r\n    }\r\n  }\r\n\r\n  private _onClickFocus = () => {\r\n    const inputElement = this._inputElement.current;\r\n    if (inputElement) {\r\n      this.focus();\r\n      inputElement.selectionStart = inputElement.selectionEnd = 0;\r\n    }\r\n  };\r\n\r\n  private _onFocusCapture = (ev: React.FocusEvent<HTMLElement>) => {\r\n    this.setState({\r\n      hasFocus: true\r\n    });\r\n\r\n    this._events.on(ev.currentTarget, 'blur', this._onBlur, true);\r\n\r\n    if (this.props.onFocus) {\r\n      this.props.onFocus(ev as React.FocusEvent<HTMLInputElement>);\r\n    }\r\n  };\r\n\r\n  private _onClearClick = (ev: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {\r\n    const { clearButtonProps } = this.props;\r\n\r\n    if (clearButtonProps && clearButtonProps.onClick) {\r\n      clearButtonProps.onClick(ev);\r\n    }\r\n\r\n    if (!ev.defaultPrevented) {\r\n      this._onClear(ev);\r\n    }\r\n  };\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\r\n    switch (ev.which) {\r\n      case KeyCodes.escape:\r\n        this.props.onEscape && this.props.onEscape(ev);\r\n        if (!ev.defaultPrevented) {\r\n          this._onClear(ev);\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.enter:\r\n        if (this.props.onSearch) {\r\n          this.props.onSearch(this.state.value);\r\n        }\r\n        break;\r\n\r\n      default:\r\n        this.props.onKeyDown && this.props.onKeyDown(ev);\r\n        if (!ev.defaultPrevented) {\r\n          return;\r\n        }\r\n    }\r\n\r\n    // We only get here if the keypress has been handled,\r\n    // or preventDefault was called in case of default keyDown handler\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n  };\r\n\r\n  private _onBlur = (ev: React.FocusEvent<HTMLInputElement>): void => {\r\n    this._events.off(this._rootElement.current, 'blur');\r\n    this.setState({\r\n      hasFocus: false\r\n    });\r\n\r\n    if (this.props.onBlur) {\r\n      this.props.onBlur(ev);\r\n    }\r\n  };\r\n\r\n  private _onInputChange = (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n    const value = ev.target.value;\r\n\r\n    if (value === this._latestValue) {\r\n      return;\r\n    }\r\n    this._latestValue = value;\r\n\r\n    this.setState({ value });\r\n    this._callOnChange(value);\r\n  };\r\n\r\n  private _callOnChange(newValue: string): void {\r\n    const { onChange, onChanged } = this.props;\r\n\r\n    // Call @deprecated method.\r\n    if (onChanged) {\r\n      onChanged(newValue);\r\n    }\r\n\r\n    if (onChange) {\r\n      onChange(newValue);\r\n    }\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { DefaultButton } from '../DefaultButton/DefaultButton';\r\nimport { BaseComponent, customizable, nullRender } from '../../../Utilities';\r\nimport { IButtonProps } from '../Button.types';\r\nimport { getStyles } from './MessageBarButton.styles';\r\n\r\n@customizable('MessageBarButton', ['theme', 'styles'], true)\r\nexport class MessageBarButton extends BaseComponent<IButtonProps, {}> {\r\n  public render(): JSX.Element {\r\n    const { styles, theme } = this.props;\r\n\r\n    return <DefaultButton {...this.props} styles={getStyles(theme!, styles)} onRenderDescription={nullRender} />;\r\n  }\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { SearchBoxBase } from './SearchBox.base';\r\nimport { ISearchBoxProps, ISearchBoxStyleProps, ISearchBoxStyles } from './SearchBox.types';\r\nimport { getStyles } from './SearchBox.styles';\r\n\r\nexport const SearchBox: React.StatelessComponent<ISearchBoxProps> = styled<ISearchBoxProps, ISearchBoxStyleProps, ISearchBoxStyles>(\r\n  SearchBoxBase,\r\n  getStyles,\r\n  undefined,\r\n  { scope: 'SearchBox' }\r\n);\r\n","export interface IObjectWithKey {\r\n  key?: string | number;\r\n}\r\n\r\nexport const SELECTION_CHANGE = 'change';\r\n\r\nexport enum SelectionMode {\r\n  none = 0,\r\n  single = 1,\r\n  multiple = 2\r\n}\r\n\r\nexport interface ISelection {\r\n  count: number;\r\n  mode: SelectionMode;\r\n\r\n  canSelectItem: (item: IObjectWithKey, index?: number) => boolean;\r\n\r\n  // Obesrvable methods.\r\n  setChangeEvents(isEnabled: boolean, suppressChange?: boolean): void;\r\n\r\n  // Initialization methods.\r\n\r\n  setItems(items: IObjectWithKey[], shouldClear: boolean): void;\r\n  getItems(): IObjectWithKey[];\r\n\r\n  // Read selection methods.\r\n\r\n  getSelection(): IObjectWithKey[];\r\n  getSelectedIndices(): number[];\r\n  getSelectedCount(): number;\r\n  isRangeSelected(fromIndex: number, count: number): boolean;\r\n\r\n  isAllSelected(): boolean;\r\n  isKeySelected(key: string): boolean;\r\n  isIndexSelected(index: number): boolean;\r\n\r\n  isModal?(): boolean;\r\n\r\n  // Write selection methods.\r\n\r\n  setAllSelected(isAllSelected: boolean): void;\r\n  setKeySelected(key: string, isSelected: boolean, shouldAnchor: boolean): void;\r\n  setIndexSelected(index: number, isSelected: boolean, shouldAnchor: boolean): void;\r\n\r\n  setModal?(isModal: boolean): void; // TODO make non-optional on next breaking change\r\n\r\n  // Write range selection methods.\r\n\r\n  selectToKey(key: string, clearSelection?: boolean): void;\r\n  selectToIndex(index: number, clearSelection?: boolean): void;\r\n\r\n  // Toggle helpers.\r\n\r\n  toggleAllSelected(): void;\r\n  toggleKeySelected(key: string): void;\r\n  toggleIndexSelected(index: number): void;\r\n  toggleRangeSelected(fromIndex: number, count: number): void;\r\n}\r\n\r\nexport enum SelectionDirection {\r\n  horizontal = 0,\r\n  vertical = 1\r\n}\r\n","import { HighContrastSelector, AnimationVariables, normalize } from '../../Styling';\r\nimport { ISearchBoxStyleProps, ISearchBoxStyles } from './SearchBox.types';\r\n\r\nexport function getStyles(props: ISearchBoxStyleProps): ISearchBoxStyles {\r\n  const { theme, underlined, disabled, hasFocus, className, hasInput, disableAnimation } = props;\r\n  const { palette, fonts, semanticColors } = theme;\r\n\r\n  return {\r\n    root: [\r\n      'ms-SearchBox',\r\n      fonts.medium,\r\n      normalize,\r\n      {\r\n        color: palette.neutralPrimary,\r\n        backgroundColor: semanticColors.inputBackground,\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        flexWrap: 'nowrap',\r\n        alignItems: 'stretch',\r\n        // The 1px top and bottom padding ensure the input field does not overlap the border\r\n        padding: '1px 0 1px 4px',\r\n        border: `1px solid ${palette.neutralTertiary}`,\r\n        height: 32,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            border: '1px solid WindowText'\r\n          },\r\n          ':hover': {\r\n            borderColor: palette.neutralDark,\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                borderColor: 'Highlight'\r\n              }\r\n            }\r\n          },\r\n          ':hover $iconContainer': {\r\n            color: palette.themeDark\r\n          }\r\n        }\r\n      },\r\n      hasFocus && [\r\n        'is-active',\r\n        {\r\n          borderColor: palette.themePrimary,\r\n          selectors: {\r\n            ':hover': {\r\n              borderColor: palette.themePrimary\r\n            },\r\n            [HighContrastSelector]: {\r\n              borderColor: 'Highlight'\r\n            }\r\n          }\r\n        }\r\n      ],\r\n      disabled && [\r\n        'is-disabled',\r\n        {\r\n          borderColor: palette.neutralLighter,\r\n          backgroundColor: palette.neutralLighter,\r\n          pointerEvents: 'none',\r\n          cursor: 'default'\r\n        }\r\n      ],\r\n      underlined && [\r\n        'is-underlined',\r\n        {\r\n          borderWidth: '0 0 1px 0',\r\n          // Underlined SearchBox has a larger padding left to vertically align with the waffle in product\r\n          padding: '1px 0 1px 8px'\r\n        }\r\n      ],\r\n      underlined &&\r\n        disabled && {\r\n          backgroundColor: 'transparent'\r\n        },\r\n      hasInput && 'can-clear',\r\n      className\r\n    ],\r\n    iconContainer: [\r\n      'ms-SearchBox-iconContainer',\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        justifyContent: 'center',\r\n        flexShrink: 0,\r\n        fontSize: 16,\r\n        width: 32,\r\n        textAlign: 'center',\r\n        color: palette.themePrimary,\r\n        cursor: 'text'\r\n      },\r\n      hasFocus && {\r\n        width: 4\r\n      },\r\n      disabled && {\r\n        color: palette.neutralTertiary\r\n      },\r\n      !disableAnimation && {\r\n        transition: `width ${AnimationVariables.durationValue1}`\r\n      }\r\n    ],\r\n    icon: [\r\n      'ms-SearchBox-icon',\r\n      {\r\n        opacity: 1\r\n      },\r\n      hasFocus && {\r\n        opacity: 0\r\n      },\r\n      !disableAnimation && {\r\n        transition: `opacity ${AnimationVariables.durationValue1} 0s`\r\n      }\r\n    ],\r\n    clearButton: [\r\n      'ms-SearchBox-clearButton',\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        alignItems: 'stretch',\r\n        cursor: 'pointer',\r\n        flexBasis: '32px',\r\n        flexShrink: 0,\r\n        padding: 1,\r\n        color: palette.themePrimary\r\n      }\r\n    ],\r\n    field: [\r\n      'ms-SearchBox-field',\r\n      normalize,\r\n      {\r\n        backgroundColor: 'transparent',\r\n        border: 'none',\r\n        outline: 'none',\r\n        fontWeight: 'inherit',\r\n        fontFamily: 'inherit',\r\n        fontSize: 'inherit',\r\n        color: palette.neutralPrimary,\r\n        flex: '1 1 0px',\r\n        // The default implicit value of 'auto' prevents the input from shrinking. Setting min-width to\r\n        // 0px allows the input element to shrink to fit the container.\r\n        minWidth: '0px',\r\n        overflow: 'hidden',\r\n        textOverflow: 'ellipsis',\r\n        // This padding forces the text placement to round up.\r\n        paddingBottom: 0.5,\r\n        // This removes the IE specific clear button in the input since we implimented our own\r\n        selectors: {\r\n          '::-ms-clear': {\r\n            display: 'none'\r\n          },\r\n          '::placeholder': {\r\n            color: semanticColors.inputPlaceholderText,\r\n            opacity: 1\r\n          },\r\n          ':-ms-input-placeholder': {\r\n            color: semanticColors.inputPlaceholderText\r\n          }\r\n        }\r\n      },\r\n      disabled && {\r\n        color: palette.neutralTertiary\r\n      }\r\n    ]\r\n  };\r\n}\r\n","import { IObjectWithKey, ISelection, SELECTION_CHANGE, SelectionMode } from './interfaces';\r\nimport { EventGroup } from '../../Utilities';\r\n\r\nexport interface ISelectionOptions {\r\n  onSelectionChanged?: () => void;\r\n  getKey?: (item: IObjectWithKey, index?: number) => string | number;\r\n  canSelectItem?: (item: IObjectWithKey, index?: number) => boolean;\r\n  selectionMode?: SelectionMode;\r\n}\r\n\r\nexport class Selection implements ISelection {\r\n  public count: number;\r\n  public readonly mode: SelectionMode;\r\n\r\n  private _getKey: (item: IObjectWithKey, index?: number) => string | number;\r\n  private _canSelectItem: (item: IObjectWithKey, index?: number) => boolean;\r\n\r\n  private _changeEventSuppressionCount: number;\r\n  private _items: IObjectWithKey[];\r\n  private _selectedItems: IObjectWithKey[] | null;\r\n  private _selectedIndices: number[] | undefined;\r\n  private _isAllSelected: boolean;\r\n  private _exemptedIndices: { [index: string]: boolean };\r\n  private _exemptedCount: number;\r\n  private _keyToIndexMap: { [key: string]: number };\r\n  private _anchoredIndex: number;\r\n  private _onSelectionChanged: (() => void) | undefined;\r\n  private _hasChanged: boolean;\r\n  private _unselectableIndices: { [index: string]: boolean };\r\n  private _unselectableCount: number;\r\n  private _isModal: boolean;\r\n\r\n  constructor(options: ISelectionOptions = {}) {\r\n    const { onSelectionChanged, getKey, canSelectItem = (item: IObjectWithKey) => true, selectionMode = SelectionMode.multiple } = options;\r\n\r\n    this.mode = selectionMode;\r\n\r\n    this._getKey = getKey || defaultGetKey;\r\n\r\n    this._changeEventSuppressionCount = 0;\r\n    this._exemptedCount = 0;\r\n    this._anchoredIndex = 0;\r\n    this._unselectableCount = 0;\r\n\r\n    this._onSelectionChanged = onSelectionChanged;\r\n    this._canSelectItem = canSelectItem;\r\n\r\n    this._isModal = false;\r\n\r\n    this.setItems([], true);\r\n  }\r\n\r\n  public canSelectItem(item: IObjectWithKey, index?: number): boolean {\r\n    if (typeof index === 'number' && index < 0) {\r\n      return false;\r\n    }\r\n\r\n    return this._canSelectItem(item, index);\r\n  }\r\n\r\n  public getKey(item: IObjectWithKey, index?: number): string {\r\n    const key = this._getKey(item, index);\r\n\r\n    return typeof key === 'number' || key ? `${key}` : '';\r\n  }\r\n\r\n  public setChangeEvents(isEnabled: boolean, suppressChange?: boolean): void {\r\n    this._changeEventSuppressionCount += isEnabled ? -1 : 1;\r\n\r\n    if (this._changeEventSuppressionCount === 0 && this._hasChanged) {\r\n      this._hasChanged = false;\r\n\r\n      if (!suppressChange) {\r\n        this._change();\r\n      }\r\n    }\r\n  }\r\n\r\n  public isModal(): boolean {\r\n    return this._isModal;\r\n  }\r\n\r\n  public setModal(isModal: boolean): void {\r\n    if (this._isModal !== isModal) {\r\n      this.setChangeEvents(false);\r\n\r\n      this._isModal = isModal;\r\n\r\n      if (!isModal) {\r\n        this.setAllSelected(false);\r\n      }\r\n\r\n      this._change();\r\n\r\n      this.setChangeEvents(true);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Selection needs the items, call this method to set them. If the set\r\n   * of items is the same, this will re-evaluate selection and index maps.\r\n   * Otherwise, shouldClear should be set to true, so that selection is\r\n   * cleared.\r\n   */\r\n  public setItems(items: IObjectWithKey[], shouldClear: boolean = true): void {\r\n    const newKeyToIndexMap: { [key: string]: number } = {};\r\n    const newUnselectableIndices: { [key: string]: boolean } = {};\r\n    let hasSelectionChanged = false;\r\n\r\n    this.setChangeEvents(false);\r\n\r\n    // Reset the unselectable count.\r\n    this._unselectableCount = 0;\r\n\r\n    // Build lookup table for quick selection evaluation.\r\n    for (let i = 0; i < items.length; i++) {\r\n      const item = items[i];\r\n\r\n      if (item) {\r\n        const key = this.getKey(item, i);\r\n\r\n        if (key) {\r\n          newKeyToIndexMap[key] = i;\r\n        }\r\n      }\r\n\r\n      newUnselectableIndices[i] = item && !this.canSelectItem(item);\r\n      if (newUnselectableIndices[i]) {\r\n        this._unselectableCount++;\r\n      }\r\n    }\r\n\r\n    if (shouldClear || items.length === 0) {\r\n      this.setAllSelected(false);\r\n    }\r\n\r\n    // Check the exemption list for discrepencies.\r\n    const newExemptedIndicies: { [key: string]: boolean } = {};\r\n    let newExemptedCount = 0;\r\n\r\n    for (const indexProperty in this._exemptedIndices) {\r\n      if (this._exemptedIndices.hasOwnProperty(indexProperty)) {\r\n        const index = Number(indexProperty);\r\n        const item = this._items[index];\r\n        const exemptKey = item ? this.getKey(item, Number(index)) : undefined;\r\n        const newIndex = exemptKey ? newKeyToIndexMap[exemptKey] : index;\r\n\r\n        if (newIndex === undefined) {\r\n          // The item has likely been replaced or removed.\r\n          hasSelectionChanged = true;\r\n        } else {\r\n          // We know the new index of the item. update the existing exemption table.\r\n          newExemptedIndicies[newIndex] = true;\r\n          newExemptedCount++;\r\n          hasSelectionChanged = hasSelectionChanged || newIndex !== index;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._items && this._exemptedCount === 0 && items.length !== this._items.length && this._isAllSelected) {\r\n      // If everything was selected but the number of items has changed, selection has changed.\r\n      hasSelectionChanged = true;\r\n    }\r\n\r\n    this._exemptedIndices = newExemptedIndicies;\r\n    this._exemptedCount = newExemptedCount;\r\n    this._keyToIndexMap = newKeyToIndexMap;\r\n    this._unselectableIndices = newUnselectableIndices;\r\n    this._items = items;\r\n    this._selectedItems = null;\r\n\r\n    if (hasSelectionChanged) {\r\n      this._updateCount();\r\n      this._change();\r\n    }\r\n\r\n    this.setChangeEvents(true);\r\n  }\r\n\r\n  public getItems(): IObjectWithKey[] {\r\n    return this._items;\r\n  }\r\n\r\n  public getSelection(): IObjectWithKey[] {\r\n    if (!this._selectedItems) {\r\n      this._selectedItems = [];\r\n\r\n      const items = this._items;\r\n\r\n      if (items) {\r\n        for (let i = 0; i < items.length; i++) {\r\n          if (this.isIndexSelected(i)) {\r\n            this._selectedItems.push(items[i]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._selectedItems;\r\n  }\r\n\r\n  public getSelectedCount(): number {\r\n    return this._isAllSelected ? this._items.length - this._exemptedCount - this._unselectableCount : this._exemptedCount;\r\n  }\r\n\r\n  public getSelectedIndices(): number[] {\r\n    if (!this._selectedIndices) {\r\n      this._selectedIndices = [];\r\n\r\n      const items = this._items;\r\n\r\n      if (items) {\r\n        for (let i = 0; i < items.length; i++) {\r\n          if (this.isIndexSelected(i)) {\r\n            this._selectedIndices.push(i);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._selectedIndices;\r\n  }\r\n\r\n  public isRangeSelected(fromIndex: number, count: number): boolean {\r\n    if (count === 0) {\r\n      return false;\r\n    }\r\n\r\n    const endIndex = fromIndex + count;\r\n\r\n    for (let i = fromIndex; i < endIndex; i++) {\r\n      if (!this.isIndexSelected(i)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public isAllSelected(): boolean {\r\n    let selectableCount = this._items.length - this._unselectableCount;\r\n\r\n    // In single mode, we can only have a max of 1 item.\r\n    if (this.mode === SelectionMode.single) {\r\n      selectableCount = Math.min(selectableCount, 1);\r\n    }\r\n\r\n    return (\r\n      (this.count > 0 && (this._isAllSelected && this._exemptedCount === 0)) ||\r\n      (!this._isAllSelected && this._exemptedCount === selectableCount && selectableCount > 0)\r\n    );\r\n  }\r\n\r\n  public isKeySelected(key: string): boolean {\r\n    const index = this._keyToIndexMap[key];\r\n\r\n    return this.isIndexSelected(index);\r\n  }\r\n\r\n  public isIndexSelected(index: number): boolean {\r\n    return !!(\r\n      (this.count > 0 && (this._isAllSelected && !this._exemptedIndices[index] && !this._unselectableIndices[index])) ||\r\n      (!this._isAllSelected && this._exemptedIndices[index])\r\n    );\r\n  }\r\n\r\n  public setAllSelected(isAllSelected: boolean): void {\r\n    if (isAllSelected && this.mode !== SelectionMode.multiple) {\r\n      return;\r\n    }\r\n\r\n    const selectableCount = this._items ? this._items.length - this._unselectableCount : 0;\r\n\r\n    this.setChangeEvents(false);\r\n\r\n    if (selectableCount > 0 && (this._exemptedCount > 0 || isAllSelected !== this._isAllSelected)) {\r\n      this._exemptedIndices = {};\r\n\r\n      if (isAllSelected !== this._isAllSelected || this._exemptedCount > 0) {\r\n        this._exemptedCount = 0;\r\n        this._isAllSelected = isAllSelected;\r\n        this._change();\r\n      }\r\n\r\n      this._updateCount();\r\n    }\r\n\r\n    this.setChangeEvents(true);\r\n  }\r\n\r\n  public setKeySelected(key: string, isSelected: boolean, shouldAnchor: boolean): void {\r\n    const index = this._keyToIndexMap[key];\r\n\r\n    if (index >= 0) {\r\n      this.setIndexSelected(index, isSelected, shouldAnchor);\r\n    }\r\n  }\r\n\r\n  public setIndexSelected(index: number, isSelected: boolean, shouldAnchor: boolean): void {\r\n    if (this.mode === SelectionMode.none) {\r\n      return;\r\n    }\r\n\r\n    // Clamp the index.\r\n    index = Math.min(Math.max(0, index), this._items.length - 1);\r\n\r\n    // No-op on out of bounds selections.\r\n    if (index < 0 || index >= this._items.length) {\r\n      return;\r\n    }\r\n\r\n    this.setChangeEvents(false);\r\n\r\n    const isExempt = this._exemptedIndices[index];\r\n    const canSelect = !this._unselectableIndices[index];\r\n\r\n    if (canSelect) {\r\n      if (isSelected && this.mode === SelectionMode.single) {\r\n        // If this is single-select, the previous selection should be removed.\r\n        this.setAllSelected(false);\r\n      }\r\n\r\n      // Determine if we need to remove the exemption.\r\n      if (isExempt && ((isSelected && this._isAllSelected) || (!isSelected && !this._isAllSelected))) {\r\n        delete this._exemptedIndices[index];\r\n        this._exemptedCount--;\r\n      }\r\n\r\n      // Determine if we need to add the exemption.\r\n      if (!isExempt && ((isSelected && !this._isAllSelected) || (!isSelected && this._isAllSelected))) {\r\n        this._exemptedIndices[index] = true;\r\n        this._exemptedCount++;\r\n      }\r\n\r\n      if (shouldAnchor) {\r\n        this._anchoredIndex = index;\r\n      }\r\n    }\r\n\r\n    this._updateCount();\r\n\r\n    this.setChangeEvents(true);\r\n  }\r\n\r\n  public selectToKey(key: string, clearSelection?: boolean): void {\r\n    this.selectToIndex(this._keyToIndexMap[key], clearSelection);\r\n  }\r\n\r\n  public selectToIndex(index: number, clearSelection?: boolean): void {\r\n    if (this.mode === SelectionMode.none) {\r\n      return;\r\n    }\r\n\r\n    if (this.mode === SelectionMode.single) {\r\n      this.setIndexSelected(index, true, true);\r\n      return;\r\n    }\r\n\r\n    const anchorIndex = this._anchoredIndex || 0;\r\n    let startIndex = Math.min(index, anchorIndex);\r\n    const endIndex = Math.max(index, anchorIndex);\r\n\r\n    this.setChangeEvents(false);\r\n\r\n    if (clearSelection) {\r\n      this.setAllSelected(false);\r\n    }\r\n\r\n    for (; startIndex <= endIndex; startIndex++) {\r\n      this.setIndexSelected(startIndex, true, false);\r\n    }\r\n\r\n    this.setChangeEvents(true);\r\n  }\r\n\r\n  public toggleAllSelected(): void {\r\n    this.setAllSelected(!this.isAllSelected());\r\n  }\r\n\r\n  public toggleKeySelected(key: string): void {\r\n    this.setKeySelected(key, !this.isKeySelected(key), true);\r\n  }\r\n\r\n  public toggleIndexSelected(index: number): void {\r\n    this.setIndexSelected(index, !this.isIndexSelected(index), true);\r\n  }\r\n\r\n  public toggleRangeSelected(fromIndex: number, count: number): void {\r\n    if (this.mode === SelectionMode.none) {\r\n      return;\r\n    }\r\n\r\n    const isRangeSelected = this.isRangeSelected(fromIndex, count);\r\n    const endIndex = fromIndex + count;\r\n\r\n    if (this.mode === SelectionMode.single && count > 1) {\r\n      return;\r\n    }\r\n\r\n    this.setChangeEvents(false);\r\n    for (let i = fromIndex; i < endIndex; i++) {\r\n      this.setIndexSelected(i, !isRangeSelected, false);\r\n    }\r\n    this.setChangeEvents(true);\r\n  }\r\n\r\n  private _updateCount(): void {\r\n    const count = this.getSelectedCount();\r\n\r\n    if (count !== this.count) {\r\n      this.count = count;\r\n      this._change();\r\n    }\r\n\r\n    if (!this.count) {\r\n      this.setModal(false);\r\n    }\r\n  }\r\n\r\n  private _change(): void {\r\n    if (this._changeEventSuppressionCount === 0) {\r\n      this._selectedItems = null;\r\n      this._selectedIndices = undefined;\r\n\r\n      EventGroup.raise(this, SELECTION_CHANGE);\r\n\r\n      if (this._onSelectionChanged) {\r\n        this._onSelectionChanged();\r\n      }\r\n    } else {\r\n      this._hasChanged = true;\r\n    }\r\n  }\r\n}\r\n\r\nfunction defaultGetKey(item: IObjectWithKey, index?: number): string | number {\r\n  return item && item.key ? item.key : `${index}`;\r\n}\r\n","import * as React from 'react';\r\nimport {\r\n  BaseComponent,\r\n  KeyCodes,\r\n  elementContains,\r\n  findScrollableParent,\r\n  getParent,\r\n  getDocument,\r\n  getWindow,\r\n  isElementTabbable\r\n} from '../../Utilities';\r\nimport { ISelection, SelectionMode, IObjectWithKey } from './interfaces';\r\n\r\n// Selection definitions:\r\n//\r\n// Anchor index: the point from which a range selection starts.\r\n// Focus index: the point from which layout movement originates from.\r\n//\r\n// These two can differ. Tests:\r\n//\r\n// If you start at index 5\r\n// Shift click to index 10\r\n//    The focus is 10, the anchor is 5.\r\n// If you shift click at index 0\r\n//    The anchor remains at 5, the items between 0 and 5 are selected and everything else is cleared.\r\n// If you click index 8\r\n//    The anchor and focus are set to 8.\r\n\r\nconst SELECTION_DISABLED_ATTRIBUTE_NAME = 'data-selection-disabled';\r\nconst SELECTION_INDEX_ATTRIBUTE_NAME = 'data-selection-index';\r\nconst SELECTION_TOGGLE_ATTRIBUTE_NAME = 'data-selection-toggle';\r\nconst SELECTION_INVOKE_ATTRIBUTE_NAME = 'data-selection-invoke';\r\nconst SELECTALL_TOGGLE_ALL_ATTRIBUTE_NAME = 'data-selection-all-toggle';\r\nconst SELECTION_SELECT_ATTRIBUTE_NAME = 'data-selection-select';\r\n\r\nexport interface ISelectionZone {\r\n  ignoreNextFocus: () => void;\r\n}\r\n\r\nexport interface ISelectionZoneProps extends React.ClassAttributes<SelectionZone> {\r\n  componentRef?: () => void;\r\n  selection: ISelection;\r\n  /**\r\n   * @deprecated No longer in use, focus is now managed by FocusZone\r\n   */\r\n  layout?: {};\r\n  selectionMode?: SelectionMode;\r\n  selectionPreservedOnEmptyClick?: boolean;\r\n  disableAutoSelectOnInputElements?: boolean;\r\n  enterModalOnTouch?: boolean;\r\n  isSelectedOnFocus?: boolean;\r\n  onItemInvoked?: (item?: IObjectWithKey, index?: number, ev?: Event) => void;\r\n  onItemContextMenu?: (item?: any, index?: number, ev?: Event) => void | boolean;\r\n}\r\n\r\nexport class SelectionZone extends BaseComponent<ISelectionZoneProps, {}> {\r\n  public static defaultProps = {\r\n    isMultiSelectEnabled: true,\r\n    isSelectedOnFocus: true,\r\n    selectionMode: SelectionMode.multiple\r\n  };\r\n\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _isCtrlPressed: boolean;\r\n  private _isShiftPressed: boolean;\r\n  private _isMetaPressed: boolean;\r\n  private _isTabPressed: boolean;\r\n  private _shouldHandleFocus: boolean;\r\n  private _shouldHandleFocusTimeoutId: number | undefined;\r\n  private _isTouch: boolean;\r\n  private _isTouchTimeoutId: number | undefined;\r\n\r\n  public componentDidMount(): void {\r\n    const win = getWindow(this._root.current);\r\n\r\n    // Track the latest modifier keys globally.\r\n    this._events.on(win, 'keydown, keyup', this._updateModifiers, true);\r\n    this._events.on(document, 'click', this._findScrollParentAndTryClearOnEmptyClick);\r\n    this._events.on(document.body, 'touchstart', this._onTouchStartCapture, true);\r\n    this._events.on(document.body, 'touchend', this._onTouchStartCapture, true);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    return (\r\n      <div\r\n        className=\"ms-SelectionZone\"\r\n        ref={this._root}\r\n        onKeyDown={this._onKeyDown}\r\n        onMouseDown={this._onMouseDown}\r\n        onKeyDownCapture={this._onKeyDownCapture}\r\n        onClick={this._onClick}\r\n        role=\"presentation\"\r\n        onDoubleClick={this._onDoubleClick}\r\n        onContextMenu={this._onContextMenu}\r\n        {...{\r\n          onMouseDownCapture: this._onMouseDownCapture,\r\n          onFocusCapture: this._onFocus\r\n        }}\r\n      >\r\n        {this.props.children}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * In some cases, the consuming scenario requires to set focus on a row without having SelectionZone\r\n   * react to the event. Note that focus events in IE \\<= 11 will occur asynchronously after .focus() has\r\n   * been called on an element, so we need a flag to store the idea that we will bypass the \"next\"\r\n   * focus event that occurs. This method does that.\r\n   */\r\n  public ignoreNextFocus = (): void => {\r\n    this._handleNextFocus(false);\r\n  };\r\n\r\n  private _onMouseDownCapture = (ev: any): void => {\r\n    if (document.activeElement !== ev.target && !elementContains(document.activeElement as HTMLElement, ev.target)) {\r\n      this.ignoreNextFocus();\r\n      return;\r\n    }\r\n\r\n    if (!elementContains(ev.target, this._root.current)) {\r\n      return;\r\n    }\r\n\r\n    let target = ev.target as HTMLElement;\r\n\r\n    while (target !== this._root.current) {\r\n      if (this._hasAttribute(target, SELECTION_INVOKE_ATTRIBUTE_NAME)) {\r\n        this.ignoreNextFocus();\r\n        break;\r\n      }\r\n\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * When we focus an item, for single/multi select scenarios, we should try to select it immediately\r\n   * as long as the focus did not originate from a mouse down/touch event. For those cases, we handle them\r\n   * specially.\r\n   */\r\n  private _onFocus = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    const target = ev.target as HTMLElement;\r\n    const { selection } = this.props;\r\n    const isToggleModifierPressed = this._isCtrlPressed || this._isMetaPressed;\r\n\r\n    const selectionMode = this._getSelectionMode();\r\n\r\n    if (this._shouldHandleFocus && selectionMode !== SelectionMode.none) {\r\n      const isToggle = this._hasAttribute(target, SELECTION_TOGGLE_ATTRIBUTE_NAME);\r\n      const itemRoot = this._findItemRoot(target);\r\n\r\n      if (!isToggle && itemRoot) {\r\n        const index = this._getItemIndex(itemRoot);\r\n\r\n        if (isToggleModifierPressed) {\r\n          // set anchor only.\r\n          selection.setIndexSelected(index, selection.isIndexSelected(index), true);\r\n          if (this.props.enterModalOnTouch && this._isTouch && selection.setModal) {\r\n            selection.setModal(true);\r\n            this._setIsTouch(false);\r\n          }\r\n        } else {\r\n          if (this.props.isSelectedOnFocus) {\r\n            this._onItemSurfaceClick(ev, index);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._handleNextFocus(false);\r\n  };\r\n\r\n  private _onMouseDown = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    this._updateModifiers(ev);\r\n\r\n    let target = ev.target as HTMLElement;\r\n    const itemRoot = this._findItemRoot(target);\r\n\r\n    // No-op if selection is disabled\r\n    if (this._isSelectionDisabled(target)) {\r\n      return;\r\n    }\r\n\r\n    while (target !== this._root.current) {\r\n      if (this._hasAttribute(target, SELECTALL_TOGGLE_ALL_ATTRIBUTE_NAME)) {\r\n        break;\r\n      } else if (itemRoot) {\r\n        if (this._hasAttribute(target, SELECTION_TOGGLE_ATTRIBUTE_NAME)) {\r\n          break;\r\n        } else if (this._hasAttribute(target, SELECTION_INVOKE_ATTRIBUTE_NAME)) {\r\n          break;\r\n        } else if (\r\n          (target === itemRoot || this._shouldAutoSelect(target)) &&\r\n          !this._isShiftPressed &&\r\n          !this._isCtrlPressed &&\r\n          !this._isMetaPressed\r\n        ) {\r\n          this._onInvokeMouseDown(ev, this._getItemIndex(itemRoot));\r\n          break;\r\n        } else if (\r\n          this.props.disableAutoSelectOnInputElements &&\r\n          (target.tagName === 'A' || target.tagName === 'BUTTON' || target.tagName === 'INPUT')\r\n        ) {\r\n          return;\r\n        }\r\n      }\r\n\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n  };\r\n\r\n  private _onTouchStartCapture = (ev: React.TouchEvent<HTMLElement>): void => {\r\n    this._setIsTouch(true);\r\n  };\r\n\r\n  private _onClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    this._updateModifiers(ev);\r\n\r\n    let target = ev.target as HTMLElement;\r\n    const itemRoot = this._findItemRoot(target);\r\n\r\n    // No-op if selection is disabled\r\n    if (this._isSelectionDisabled(target)) {\r\n      return;\r\n    }\r\n\r\n    while (target !== this._root.current) {\r\n      if (this._hasAttribute(target, SELECTALL_TOGGLE_ALL_ATTRIBUTE_NAME)) {\r\n        this._onToggleAllClick(ev);\r\n        break;\r\n      } else if (itemRoot) {\r\n        const index = this._getItemIndex(itemRoot);\r\n\r\n        if (this._hasAttribute(target, SELECTION_TOGGLE_ATTRIBUTE_NAME)) {\r\n          if (this._isShiftPressed) {\r\n            this._onItemSurfaceClick(ev, index);\r\n          } else {\r\n            this._onToggleClick(ev, index);\r\n          }\r\n          break;\r\n        } else if (this._hasAttribute(target, SELECTION_INVOKE_ATTRIBUTE_NAME)) {\r\n          this._onInvokeClick(ev, index);\r\n          break;\r\n        } else if (target === itemRoot) {\r\n          this._onItemSurfaceClick(ev, index);\r\n          break;\r\n        } else if (target.tagName === 'A' || target.tagName === 'BUTTON' || target.tagName === 'INPUT') {\r\n          return;\r\n        }\r\n      }\r\n\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n  };\r\n\r\n  private _onContextMenu = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const target = ev.target as HTMLElement;\r\n\r\n    const { onItemContextMenu, selection } = this.props;\r\n    if (onItemContextMenu) {\r\n      const itemRoot = this._findItemRoot(target);\r\n\r\n      if (itemRoot) {\r\n        const index = this._getItemIndex(itemRoot);\r\n\r\n        this._onInvokeMouseDown(ev, index);\r\n\r\n        const skipPreventDefault = onItemContextMenu(selection.getItems()[index], index, ev.nativeEvent);\r\n\r\n        // In order to keep back compat, if the value here is undefined, then we should still\r\n        // call preventDefault(). Only in the case where true is explicitly returned should\r\n        // the call be skipped.\r\n        if (!skipPreventDefault) {\r\n          ev.preventDefault();\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  private _isSelectionDisabled(target: HTMLElement): boolean {\r\n    if (this._getSelectionMode() === SelectionMode.none) {\r\n      return true;\r\n    }\r\n\r\n    while (target !== this._root.current) {\r\n      if (this._hasAttribute(target, SELECTION_DISABLED_ATTRIBUTE_NAME)) {\r\n        return true;\r\n      }\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * In multi selection, if you double click within an item's root (but not within the invoke element or input elements),\r\n   * we should execute the invoke handler.\r\n   */\r\n  private _onDoubleClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    let target = ev.target as HTMLElement;\r\n\r\n    if (this._isSelectionDisabled(target)) {\r\n      return;\r\n    }\r\n\r\n    const { onItemInvoked } = this.props;\r\n    const itemRoot = this._findItemRoot(target);\r\n\r\n    const selectionMode = this._getSelectionMode();\r\n\r\n    if (itemRoot && onItemInvoked && selectionMode !== SelectionMode.none && !this._isInputElement(target)) {\r\n      const index = this._getItemIndex(itemRoot);\r\n\r\n      while (target !== this._root.current) {\r\n        if (this._hasAttribute(target, SELECTION_TOGGLE_ATTRIBUTE_NAME) || this._hasAttribute(target, SELECTION_INVOKE_ATTRIBUTE_NAME)) {\r\n          break;\r\n        } else if (target === itemRoot) {\r\n          this._onInvokeClick(ev, index);\r\n          break;\r\n        }\r\n\r\n        target = getParent(target) as HTMLElement;\r\n      }\r\n\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n  };\r\n\r\n  private _onKeyDownCapture = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    this._updateModifiers(ev);\r\n\r\n    this._handleNextFocus(true);\r\n  };\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>): boolean | undefined => {\r\n    this._updateModifiers(ev);\r\n\r\n    let target = ev.target as HTMLElement;\r\n\r\n    if (this._isSelectionDisabled(target)) {\r\n      return;\r\n    }\r\n\r\n    const { selection } = this.props;\r\n    const isSelectAllKey = ev.which === KeyCodes.a && (this._isCtrlPressed || this._isMetaPressed);\r\n    const isClearSelectionKey = ev.which === KeyCodes.escape;\r\n\r\n    // Ignore key downs from input elements.\r\n    if (this._isInputElement(target)) {\r\n      // A key was pressed while an item in this zone was focused.\r\n      return;\r\n    }\r\n\r\n    const selectionMode = this._getSelectionMode();\r\n\r\n    // If ctrl-a is pressed, select all (if all are not already selected.)\r\n    if (isSelectAllKey && selectionMode === SelectionMode.multiple && !selection.isAllSelected()) {\r\n      selection.setAllSelected(true);\r\n      ev.stopPropagation();\r\n      ev.preventDefault();\r\n      return;\r\n    }\r\n\r\n    // If escape is pressed, clear selection (if any are selected.)\r\n    if (isClearSelectionKey && selection.getSelectedCount() > 0) {\r\n      selection.setAllSelected(false);\r\n      ev.stopPropagation();\r\n      ev.preventDefault();\r\n      return;\r\n    }\r\n\r\n    const itemRoot = this._findItemRoot(target);\r\n\r\n    // If a key was pressed within an item, we should treat \"enters\" as invokes and \"space\" as toggle\r\n    if (itemRoot) {\r\n      const index = this._getItemIndex(itemRoot);\r\n\r\n      while (target !== this._root.current) {\r\n        if (this._hasAttribute(target, SELECTION_TOGGLE_ATTRIBUTE_NAME)) {\r\n          // For toggle elements, assuming they are rendered as buttons, they will generate a click event,\r\n          // so we can no-op for any keydowns in this case.\r\n          break;\r\n        } else if (this._shouldAutoSelect(target)) {\r\n          // If the event went to an element which should trigger auto-select, select it and then let\r\n          // the default behavior kick in.\r\n          this._onInvokeMouseDown(ev, index);\r\n          break;\r\n        } else if (\r\n          (ev.which === KeyCodes.enter || ev.which === KeyCodes.space) &&\r\n          (target.tagName === 'BUTTON' || target.tagName === 'A' || target.tagName === 'INPUT')\r\n        ) {\r\n          return false;\r\n        } else if (target === itemRoot) {\r\n          if (ev.which === KeyCodes.enter) {\r\n            this._onInvokeClick(ev, index);\r\n            ev.preventDefault();\r\n            return;\r\n          } else if (ev.which === KeyCodes.space) {\r\n            this._onToggleClick(ev, index);\r\n            ev.preventDefault();\r\n            return;\r\n          }\r\n          break;\r\n        }\r\n\r\n        target = getParent(target) as HTMLElement;\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onToggleAllClick(ev: React.MouseEvent<HTMLElement>): void {\r\n    const { selection } = this.props;\r\n\r\n    const selectionMode = this._getSelectionMode();\r\n\r\n    if (selectionMode === SelectionMode.multiple) {\r\n      selection.toggleAllSelected();\r\n      ev.stopPropagation();\r\n      ev.preventDefault();\r\n    }\r\n  }\r\n\r\n  private _onToggleClick(ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, index: number): void {\r\n    const { selection } = this.props;\r\n\r\n    const selectionMode = this._getSelectionMode();\r\n\r\n    selection.setChangeEvents(false);\r\n\r\n    if (this.props.enterModalOnTouch && this._isTouch && !selection.isIndexSelected(index) && selection.setModal) {\r\n      selection.setModal(true);\r\n      this._setIsTouch(false);\r\n    }\r\n\r\n    if (selectionMode === SelectionMode.multiple) {\r\n      selection.toggleIndexSelected(index);\r\n    } else if (selectionMode === SelectionMode.single) {\r\n      const isSelected = selection.isIndexSelected(index);\r\n      selection.setAllSelected(false);\r\n      selection.setIndexSelected(index, !isSelected, true);\r\n    } else {\r\n      selection.setChangeEvents(true);\r\n      return;\r\n    }\r\n\r\n    selection.setChangeEvents(true);\r\n\r\n    ev.stopPropagation();\r\n\r\n    // NOTE: ev.preventDefault is not called for toggle clicks, because this will kill the browser behavior\r\n    // for checkboxes if you use a checkbox for the toggle.\r\n  }\r\n\r\n  private _onInvokeClick(ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, index: number): void {\r\n    const { selection, onItemInvoked } = this.props;\r\n\r\n    if (onItemInvoked) {\r\n      onItemInvoked(selection.getItems()[index], index, ev.nativeEvent);\r\n      ev.preventDefault();\r\n      ev.stopPropagation();\r\n    }\r\n  }\r\n\r\n  private _onItemSurfaceClick(ev: React.SyntheticEvent<HTMLElement>, index: number): void {\r\n    const { selection } = this.props;\r\n    const isToggleModifierPressed = this._isCtrlPressed || this._isMetaPressed;\r\n\r\n    const selectionMode = this._getSelectionMode();\r\n\r\n    if (selectionMode === SelectionMode.multiple) {\r\n      if (this._isShiftPressed && !this._isTabPressed) {\r\n        selection.selectToIndex(index, !isToggleModifierPressed);\r\n      } else if (isToggleModifierPressed) {\r\n        selection.toggleIndexSelected(index);\r\n      } else {\r\n        this._clearAndSelectIndex(index);\r\n      }\r\n    } else if (selectionMode === SelectionMode.single) {\r\n      this._clearAndSelectIndex(index);\r\n    }\r\n  }\r\n\r\n  private _onInvokeMouseDown(ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, index: number): void {\r\n    const { selection } = this.props;\r\n\r\n    // Only do work if item is not selected.\r\n    if (selection.isIndexSelected(index)) {\r\n      return;\r\n    }\r\n\r\n    this._clearAndSelectIndex(index);\r\n  }\r\n\r\n  /**\r\n   * To avoid high startup cost of traversing the DOM on component mount,\r\n   * defer finding the scrollable parent until a click interaction.\r\n   *\r\n   * The styles will probably already calculated since we're running in a click handler,\r\n   * so this is less likely to cause layout thrashing then doing it in mount.\r\n   */\r\n  private _findScrollParentAndTryClearOnEmptyClick(ev: MouseEvent) {\r\n    const scrollParent = findScrollableParent(this._root.current);\r\n    // unbind this handler and replace binding with a binding on the actual scrollable parent\r\n    this._events.off(document, 'click', this._findScrollParentAndTryClearOnEmptyClick);\r\n    this._events.on(scrollParent, 'click', this._tryClearOnEmptyClick);\r\n\r\n    // If we clicked inside the scrollable parent, call through to the handler on this click.\r\n    if ((scrollParent && ev.target instanceof Node && scrollParent.contains(ev.target)) || scrollParent === ev.target) {\r\n      this._tryClearOnEmptyClick(ev);\r\n    }\r\n  }\r\n\r\n  private _tryClearOnEmptyClick(ev: MouseEvent): void {\r\n    if (!this.props.selectionPreservedOnEmptyClick && this._isNonHandledClick(ev.target as HTMLElement)) {\r\n      this.props.selection.setAllSelected(false);\r\n    }\r\n  }\r\n\r\n  private _clearAndSelectIndex(index: number): void {\r\n    const { selection } = this.props;\r\n    const isAlreadySingleSelected = selection.getSelectedCount() === 1 && selection.isIndexSelected(index);\r\n\r\n    if (!isAlreadySingleSelected) {\r\n      selection.setChangeEvents(false);\r\n      selection.setAllSelected(false);\r\n      selection.setIndexSelected(index, true, true);\r\n      if (this.props.enterModalOnTouch && this._isTouch && selection.setModal) {\r\n        selection.setModal(true);\r\n        this._setIsTouch(false);\r\n      }\r\n      selection.setChangeEvents(true);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * We need to track the modifier key states so that when focus events occur, which do not contain\r\n   * modifier states in the Event object, we know how to behave.\r\n   */\r\n  private _updateModifiers(ev: React.KeyboardEvent<HTMLElement> | React.MouseEvent<HTMLElement>): void {\r\n    this._isShiftPressed = ev.shiftKey;\r\n    this._isCtrlPressed = ev.ctrlKey;\r\n    this._isMetaPressed = ev.metaKey;\r\n\r\n    const keyCode = (ev as React.KeyboardEvent<HTMLElement>).keyCode;\r\n    this._isTabPressed = keyCode ? keyCode === KeyCodes.tab : false;\r\n  }\r\n\r\n  private _findItemRoot(target: HTMLElement): HTMLElement | undefined {\r\n    const { selection } = this.props;\r\n\r\n    while (target !== this._root.current) {\r\n      const indexValue = target.getAttribute(SELECTION_INDEX_ATTRIBUTE_NAME);\r\n      const index = Number(indexValue);\r\n\r\n      if (indexValue !== null && index >= 0 && index < selection.getItems().length) {\r\n        break;\r\n      }\r\n\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n\r\n    if (target === this._root.current) {\r\n      return undefined;\r\n    }\r\n\r\n    return target;\r\n  }\r\n\r\n  private _getItemIndex(itemRoot: HTMLElement): number {\r\n    return Number(itemRoot.getAttribute(SELECTION_INDEX_ATTRIBUTE_NAME));\r\n  }\r\n\r\n  private _shouldAutoSelect(element: HTMLElement): boolean {\r\n    return this._hasAttribute(element, SELECTION_SELECT_ATTRIBUTE_NAME);\r\n  }\r\n\r\n  private _hasAttribute(element: HTMLElement, attributeName: string): boolean {\r\n    let isToggle = false;\r\n\r\n    while (!isToggle && element !== this._root.current) {\r\n      isToggle = element.getAttribute(attributeName) === 'true';\r\n      element = getParent(element) as HTMLElement;\r\n    }\r\n\r\n    return isToggle;\r\n  }\r\n\r\n  private _isInputElement(element: HTMLElement): boolean {\r\n    return element.tagName === 'INPUT' || element.tagName === 'TEXTAREA';\r\n  }\r\n\r\n  private _isNonHandledClick(element: HTMLElement): boolean {\r\n    const doc = getDocument();\r\n\r\n    if (doc && element) {\r\n      while (element && element !== doc.documentElement) {\r\n        if (isElementTabbable(element)) {\r\n          return false;\r\n        }\r\n\r\n        element = getParent(element) as HTMLElement;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private _handleNextFocus(handleFocus: boolean): void {\r\n    if (this._shouldHandleFocusTimeoutId) {\r\n      this._async.clearTimeout(this._shouldHandleFocusTimeoutId);\r\n      this._shouldHandleFocusTimeoutId = undefined;\r\n    }\r\n\r\n    this._shouldHandleFocus = handleFocus;\r\n\r\n    if (handleFocus) {\r\n      this._async.setTimeout(() => {\r\n        this._shouldHandleFocus = false;\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n  private _setIsTouch(isTouch: boolean): void {\r\n    if (this._isTouchTimeoutId) {\r\n      this._async.clearTimeout(this._isTouchTimeoutId);\r\n      this._isTouchTimeoutId = undefined;\r\n    }\r\n\r\n    this._isTouch = true;\r\n\r\n    if (isTouch) {\r\n      this._async.setTimeout(() => {\r\n        this._isTouch = false;\r\n      }, 300);\r\n    }\r\n  }\r\n\r\n  private _getSelectionMode(): SelectionMode {\r\n    const { selection } = this.props;\r\n\r\n    const { selectionMode = selection ? selection.mode : SelectionMode.none } = this.props;\r\n\r\n    return selectionMode;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { GroupedListBase } from './GroupedList.base';\r\nimport { IList, IListProps } from '../../List';\r\nimport { IRefObject, IRenderFunction } from '../../Utilities';\r\nimport { IDragDropContext, IDragDropEvents, IDragDropHelper } from '../../utilities/dragdrop/index';\r\nimport { ISelection, SelectionMode } from '../../utilities/selection/index';\r\nimport { IViewport } from '../../utilities/decorators/withViewport';\r\nimport { ITheme, IStyle } from '../../Styling';\r\nimport { IStyleFunctionOrObject } from '../../Utilities';\r\nimport { IGroupHeaderProps } from './GroupHeader.types';\r\nimport { IGroupShowAllProps } from './GroupShowAll.types';\r\nimport { IGroupFooterProps } from './GroupFooter.types';\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport enum CollapseAllVisibility {\r\n  hidden = 0,\r\n  visible = 1\r\n}\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport interface IGroupedList extends IList {\r\n  /**\r\n   * Ensures that the list content is updated. Call this in cases where the list prop updates don't change, but the list\r\n   * still needs to be re-evaluated. For example, if a sizer bar is adjusted and causes the list width to change, you can\r\n   * call this to force a re-evaluation. Be aware that this can be an expensive operation and should be done sparingly.\r\n   */\r\n  forceUpdate: () => void;\r\n\r\n  /**\r\n   * Toggles the collapsed state of all the groups in the list.\r\n   */\r\n  toggleCollapseAll: (allCollapsed: boolean) => void;\r\n}\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport interface IGroupedListProps extends React.ClassAttributes<GroupedListBase> {\r\n  /**\r\n   * Theme that is passed in from Higher Order Component\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Style function to be passed in to override the themed or default styles\r\n   */\r\n  styles?: IStyleFunctionOrObject<IGroupedListStyleProps, IGroupedListStyles>;\r\n\r\n  /**\r\n   * Optional callback to access the IGroupedList interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IGroupedList>;\r\n\r\n  /** Optional class name to add to the root element. */\r\n  className?: string;\r\n\r\n  /** Boolean value to indicate if the component should render in compact mode. Set to false by default */\r\n  compact?: boolean;\r\n\r\n  /** Map of callback functions related to drag and drop functionality. */\r\n  dragDropEvents?: IDragDropEvents;\r\n\r\n  /** helper to manage drag/drop across item and groups */\r\n  dragDropHelper?: IDragDropHelper;\r\n\r\n  /** Event names and corresponding callbacks that will be registered to groups and rendered elements */\r\n  eventsToRegister?: { eventName: string; callback: (context: IDragDropContext, event?: any) => void }[];\r\n\r\n  /** Optional override properties to render groups. */\r\n  groupProps?: IGroupRenderProps;\r\n\r\n  /** Optional grouping instructions. */\r\n  groups?: IGroup[];\r\n\r\n  /** List of items to render. */\r\n  items: any[];\r\n\r\n  /** Optional properties to pass through to the list components being rendered. */\r\n  listProps?: IListProps;\r\n\r\n  /** Rendering callback to render the group items. */\r\n  onRenderCell: (nestingDepth?: number, item?: any, index?: number) => React.ReactNode;\r\n\r\n  /** Optional selection model to track selection state.  */\r\n  selection?: ISelection;\r\n\r\n  /** Controls how/if the list manages selection. */\r\n  selectionMode?: SelectionMode;\r\n\r\n  /** Optional Viewport, provided by the parent component. */\r\n  viewport?: IViewport;\r\n\r\n  /** Optional callback when the group expand state changes between all collapsed and at least one group is expanded. */\r\n  onGroupExpandStateChanged?: (isSomeGroupExpanded: boolean) => void;\r\n\r\n  /**\r\n   * boolean to control if pages containing unchanged items should be cached, this is a perf optimization\r\n   * The same property in List.Props\r\n   */\r\n  usePageCache?: boolean;\r\n\r\n  /**\r\n   * Optional callback to determine whether the list should be rendered in full, or virtualized.\r\n   * Virtualization will add and remove pages of items as the user scrolls them into the visible range.\r\n   * This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists.\r\n   * The default implementation will virtualize when this callback is not provided.\r\n   */\r\n  onShouldVirtualize?: (props: IListProps) => boolean;\r\n\r\n  /**\r\n   * Optional function to override default group height calculation used by list virtualization.\r\n   */\r\n  getGroupHeight?: (group: IGroup, groupIndex: number) => number;\r\n}\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport interface IGroup {\r\n  /**\r\n   * Unique identifier for the group.\r\n   */\r\n  key: string;\r\n\r\n  /**\r\n   * Display name for the group, rendered on the header.\r\n   */\r\n  name: string;\r\n\r\n  /**\r\n   * Start index for the group within the given items.\r\n   */\r\n  startIndex: number;\r\n\r\n  /**\r\n   * How many items should be rendered within the group.\r\n   */\r\n  count: number;\r\n\r\n  /**\r\n   * Nested groups, if any.\r\n   */\r\n  children?: IGroup[];\r\n\r\n  /**\r\n   * Number indicating the level of nested groups.\r\n   */\r\n  level?: number;\r\n\r\n  /**\r\n   * Deprecated at 1.0.0, selection state will be controled by the selection store only.\r\n   * @deprecated At 1.0.0, selection state wil be controlled by the selection store only.\r\n   */\r\n  isSelected?: boolean;\r\n\r\n  /**\r\n   * If all the items in the group are collapsed.\r\n   */\r\n  isCollapsed?: boolean;\r\n\r\n  /**\r\n   * If the items within the group are summarized or showing all.\r\n   */\r\n  isShowingAll?: boolean;\r\n\r\n  /**\r\n   * If drag/drop is enabled for the group header.\r\n   */\r\n  isDropEnabled?: boolean;\r\n\r\n  /**\r\n   * Arbitrary data required to be preserved by the caller.\r\n   */\r\n  data?: any;\r\n\r\n  /**\r\n   * Optional accessibility label (aria-label) attribute that will be stamped on to the element.\r\n   * If none is specified, the arai-label attribute will contain the group name\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * Optional flag to indicate the group has more data to load than the current group count indicated.\r\n   * This can be used to indicate that a plus should be rendered next to the group count in the header.\r\n   */\r\n  hasMoreData?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport interface IGroupRenderProps {\r\n  /** Boolean indicating if all groups are in collapsed state. */\r\n  isAllGroupsCollapsed?: boolean;\r\n\r\n  /** Grouping item limit. */\r\n  getGroupItemLimit?: (group: IGroup) => number;\r\n\r\n  /** Callback for when all groups are expanded or collapsed. */\r\n  onToggleCollapseAll?: (isAllCollapsed: boolean) => void;\r\n\r\n  /** Information to pass in to the group header. */\r\n  headerProps?: IGroupHeaderProps;\r\n\r\n  /** Information to pass in to the group Show all footer. */\r\n  showAllProps?: IGroupShowAllProps;\r\n\r\n  /** Information to pass in to the group footer. */\r\n  footerProps?: IGroupFooterProps;\r\n\r\n  /**\r\n   * Override which allows the caller to provide a custom header.\r\n   */\r\n  onRenderHeader?: IRenderFunction<IGroupHeaderProps>;\r\n\r\n  /**\r\n   * Override which allows the caller to provide a custom Show All link.\r\n   */\r\n  onRenderShowAll?: IRenderFunction<IGroupShowAllProps>;\r\n\r\n  /**\r\n   * Override which allows the caller to provide a custom footer.\r\n   */\r\n  onRenderFooter?: IRenderFunction<IGroupFooterProps>;\r\n\r\n  /**\r\n   * Flag to indicate whether to ignore the collapsing icon on header.\r\n   * @defaultvalue CheckboxVisibility.visible\r\n   */\r\n  collapseAllVisibility?: CollapseAllVisibility;\r\n\r\n  /**\r\n   * Boolean indicating if empty groups are shown\r\n   * @defaultvalue false\r\n   */\r\n  showEmptyGroups?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport interface IGroupDividerProps {\r\n  componentRef?: IRefObject<{}>;\r\n\r\n  /** Boolean value to indicate if the component should render in compact mode. Set to false by default */\r\n  compact?: boolean;\r\n\r\n  /** Callback to determine if a group has missing items and needs to load them from the server. */\r\n  isGroupLoading?: (group: IGroup) => boolean;\r\n\r\n  /** Text shown on group headers to indicate the group is being loaded. */\r\n  loadingText?: string;\r\n\r\n  /** The group to be rendered by the header. */\r\n  group?: IGroup;\r\n\r\n  /** The index of the group. */\r\n  groupIndex?: number;\r\n\r\n  /** The indent level of the group. */\r\n  groupLevel?: number;\r\n\r\n  /** Width corresponding to a single level. This is multiplied by the groupLevel to get the full spacer width for the group. */\r\n  indentWidth?: number;\r\n\r\n  /** If all items in the group are selected. */\r\n  selected?: boolean;\r\n\r\n  /**\r\n   * Deprecated at v.65.1 and will be removed by v 1.0. Use `selected` instead.\r\n   * @deprecated Use `selected` instead.\r\n   */\r\n  isSelected?: boolean;\r\n\r\n  /** A reference to the viewport in which the header is rendered. */\r\n  viewport?: IViewport;\r\n\r\n  /** The selection mode of the list the group lives within. */\r\n  selectionMode?: SelectionMode;\r\n\r\n  /** Text to display for the group footer. */\r\n  footerText?: string;\r\n\r\n  /** Text to display for the group \"Show All\" link. */\r\n  showAllLinkText?: string;\r\n\r\n  /** Callback for when the group \"Show All\" link is clicked */\r\n  onToggleSummarize?: (group: IGroup) => void;\r\n\r\n  /** Callback for when the group header is clicked. */\r\n  onGroupHeaderClick?: (group: IGroup) => void;\r\n\r\n  /** Callback for when the group is expanded or collapsed. */\r\n  onToggleCollapse?: (group: IGroup) => void;\r\n\r\n  /** Callback for when the group is selected. */\r\n  onToggleSelectGroup?: (group: IGroup) => void;\r\n\r\n  /** Determines if the group selection check box is shown for collapsed groups. */\r\n  isCollapsedGroupSelectVisible?: boolean;\r\n\r\n  /** Override which allows the caller to provider a custom renderer for the GroupHeader title. */\r\n  onRenderTitle?: IRenderFunction<IGroupHeaderProps>;\r\n\r\n  /** Props for expand/collapse button\r\n   * @deprecated Use {@link IGroupHeaderProps.expandButtonProps} instead.\r\n   */\r\n  expandButtonProps?: React.HTMLAttributes<HTMLButtonElement>;\r\n\r\n  /** Stores parent group's children. */\r\n  groups?: IGroup[];\r\n\r\n  /** Custom className */\r\n  className?: string;\r\n\r\n  /** Theme provided by the Higher Order Component */\r\n  theme?: ITheme;\r\n}\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport type IGroupedListStyleProps = Required<Pick<IGroupedListProps, 'theme'>> &\r\n  Pick<IGroupedListProps, 'className'> & {\r\n    /** whether or not the group is collapsed */\r\n    isCollapsed?: boolean;\r\n\r\n    /** Whether the group is in compact mode or not */\r\n    compact?: boolean;\r\n  };\r\n\r\n/**\r\n * {@docCategory GroupedList}\r\n */\r\nexport interface IGroupedListStyles {\r\n  root: IStyle;\r\n  group: IStyle;\r\n  groupIsDropping: IStyle;\r\n}\r\n","import * as React from 'react';\r\nimport { DetailsListBase } from './DetailsList.base';\r\nimport { ISelection, SelectionMode, ISelectionZoneProps } from '../../utilities/selection/index';\r\nimport { IRefObject, IBaseProps, IRenderFunction, IStyleFunctionOrObject } from '../../Utilities';\r\nimport { IDragDropEvents, IDragDropContext } from './../../utilities/dragdrop/index';\r\nimport { IGroup, IGroupRenderProps, IGroupDividerProps, IGroupedListProps } from '../GroupedList/index';\r\nimport { IDetailsRowProps, IDetailsRowBaseProps } from '../DetailsList/DetailsRow';\r\nimport { IDetailsHeaderProps, IDetailsHeaderBaseProps } from './DetailsHeader';\r\nimport { IDetailsFooterProps, IDetailsFooterBaseProps } from './DetailsFooter.types';\r\nimport { IWithViewportProps, IViewport } from '../../utilities/decorators/withViewport';\r\nimport { IList, IListProps, ScrollToMode } from '../List/index';\r\nimport { ITheme, IStyle } from '../../Styling';\r\nimport { ICellStyleProps, IDetailsItemProps } from './DetailsRow.types';\r\nimport { IDetailsColumnProps } from './DetailsColumn';\r\nimport { IDetailsCheckboxProps } from './DetailsRowCheck.types';\r\n\r\nexport { IDetailsHeaderProps, IDetailsRowBaseProps, IDetailsHeaderBaseProps, IDetailsFooterBaseProps };\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsList extends IList {\r\n  /**\r\n   * Ensures that the list content is updated. Call this in cases where the list prop updates don't change, but the list\r\n   * still needs to be re-evaluated. For example, if a sizer bar is adjusted and causes the list width to change, you can\r\n   * call this to force a re-evaluation. Be aware that this can be an expensive operation and should be done sparingly.\r\n   */\r\n  forceUpdate: () => void;\r\n\r\n  /**\r\n   * Scroll to and focus the item at the given index. focusIndex will call scrollToIndex on the specified index.\r\n   *\r\n   * @param index - Index of item to scroll to\r\n   * @param forceIntoFirstElement - If true, focus will be set to the first focusable child element of the item rather\r\n   *  than the item itself.\r\n   * @param measureItem - Optional callback to measure the height of an individual item\r\n   * @param scrollToMode - Optional setting to determine where in the window the item should be scrolled to when focused.\r\n   */\r\n  focusIndex: (\r\n    index: number,\r\n    forceIntoFirstElement?: boolean,\r\n    measureItem?: (itemIndex: number) => number,\r\n    scrollToMode?: ScrollToMode\r\n  ) => void;\r\n\r\n  /**\r\n   * Get the start index of the page that is currently in view\r\n   */\r\n  getStartItemIndexInView: () => number;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsListProps extends IBaseProps<IDetailsList>, IWithViewportProps {\r\n  /**\r\n   * Theme provided by the Higher Order Component\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Style function to be passed in to override the themed or default styles\r\n   */\r\n  styles?: IStyleFunctionOrObject<IDetailsListStyleProps, IDetailsListStyles>;\r\n\r\n  /**\r\n   * Optional callback to access the IDetailsList interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IDetailsList>;\r\n\r\n  /** A key that uniquely identifies the given items. If provided, the selection will be reset when the key changes. */\r\n  setKey?: string;\r\n\r\n  /** The items to render. */\r\n  items: any[];\r\n\r\n  /** Optional properties to pass through to the list components being rendered. */\r\n  listProps?: IListProps;\r\n\r\n  /**\r\n   * Optional default focused index to set focus to once the items have rendered and the index exists.\r\n   */\r\n  initialFocusedIndex?: number;\r\n\r\n  /** Optional class name to add to the root element. */\r\n  className?: string;\r\n\r\n  /** Optional grouping instructions. The definition for IGroup can be found under the GroupedList component. */\r\n  groups?: IGroup[];\r\n\r\n  /** Optional override properties to render groups. The definition for IGroupRenderProps can be found under the GroupedList component. */\r\n  groupProps?: IDetailsGroupRenderProps;\r\n\r\n  /** Optional override for the indent width used for group nesting. */\r\n  indentWidth?: number;\r\n\r\n  /** Optional selection model to track selection state.  */\r\n  selection?: ISelection;\r\n\r\n  /** Controls how/if the details list manages selection. Options include none, single, multiple */\r\n  selectionMode?: SelectionMode;\r\n\r\n  /**\r\n   * By default, selection is cleared when clicking on an empty (non-focusable) section of the screen. Setting this value to true\r\n   * overrides that behavior and maintains selection.\r\n   * @defaultvalue false\r\n   **/\r\n  selectionPreservedOnEmptyClick?: boolean;\r\n\r\n  /**\r\n   * Addition props to pass through to the selection zone created by default.\r\n   */\r\n  selectionZoneProps?: ISelectionZoneProps;\r\n\r\n  /** Controls how the columns are adjusted. */\r\n  layoutMode?: DetailsListLayoutMode;\r\n\r\n  /**\r\n   * Controls the visibility of selection check box.\r\n   * @defaultvalue CheckboxVisibility.onHover\r\n   */\r\n  checkboxVisibility?: CheckboxVisibility;\r\n\r\n  /**\r\n   * Controls the visibility of the details header.\r\n   * @defaultvalue true\r\n   */\r\n  isHeaderVisible?: boolean;\r\n\r\n  /** Given column defitions. If none are provided, default columns will be created based on the item's properties. */\r\n  columns?: IColumn[];\r\n\r\n  /** Controls how the list contrains overflow. */\r\n  constrainMode?: ConstrainMode;\r\n\r\n  /** Event names and corresponding callbacks that will be registered to rendered row elements. */\r\n  rowElementEventMap?: { eventName: string; callback: (context: IDragDropContext, event?: any) => void }[];\r\n\r\n  /** Callback for when the details list has been updated. Useful for telemetry tracking externally. */\r\n  onDidUpdate?: (detailsList?: DetailsListBase) => void;\r\n\r\n  /** Callback for when a given row has been mounted. Useful for identifying when a row has been rendered on the page. */\r\n  onRowDidMount?: (item?: any, index?: number) => void;\r\n\r\n  /** Callback for when a given row has been unmounted. Useful for identifying when a row has been removed from the page. */\r\n  onRowWillUnmount?: (item?: any, index?: number) => void;\r\n\r\n  /** Callback for when the user clicks on the column header. */\r\n  onColumnHeaderClick?: (ev?: React.MouseEvent<HTMLElement>, column?: IColumn) => void;\r\n\r\n  /** Callback for when the user asks for a contextual menu (usually via right click) from a column header. */\r\n  onColumnHeaderContextMenu?: (column?: IColumn, ev?: React.MouseEvent<HTMLElement>) => void;\r\n\r\n  /** Callback fired on column resize */\r\n  onColumnResize?: (column?: IColumn, newWidth?: number, columnIndex?: number) => void;\r\n\r\n  /** Callback for when a given row has been invoked (by pressing enter while it is selected.) */\r\n  onItemInvoked?: (item?: any, index?: number, ev?: Event) => void;\r\n\r\n  /**\r\n   * Callback for when the context menu of an item has been accessed.\r\n   * If undefined or false are returned, ev.preventDefault() will be called.\r\n   */\r\n  onItemContextMenu?: (item?: any, index?: number, ev?: Event) => void | boolean;\r\n\r\n  /**\r\n   *  If provided, will allow the caller to override the default row rendering.\r\n   */\r\n  onRenderRow?: IRenderFunction<IDetailsRowProps>;\r\n\r\n  /**\r\n   * If provided, will be the \"default\" item column renderer method. This affects cells within the rows; not the rows themselves.\r\n   * If a column definition provides its own onRender method, that will be used instead of this.\r\n   */\r\n  onRenderItemColumn?: (item?: any, index?: number, column?: IColumn) => React.ReactNode;\r\n\r\n  /** Map of callback functions related to row drag and drop functionality. */\r\n  dragDropEvents?: IDragDropEvents;\r\n\r\n  /** Callback for what to render when the item is missing. */\r\n  onRenderMissingItem?: (index?: number, rowProps?: IDetailsRowProps) => React.ReactNode;\r\n\r\n  /**\r\n   * If set to true and we provide an empty array, it will render 10 lines of whatever provided in onRenderMissingItem.\r\n   * @defaultvalue false\r\n   */\r\n  enableShimmer?: boolean;\r\n\r\n  /**\r\n   * An override to render the details header.\r\n   */\r\n  onRenderDetailsHeader?: IRenderFunction<IDetailsHeaderProps>;\r\n\r\n  /**\r\n   * An override to render the details footer.\r\n   */\r\n  onRenderDetailsFooter?: IRenderFunction<IDetailsFooterProps>;\r\n\r\n  /**\r\n   * If provided, can be used to render a custom checkbox\r\n   */\r\n  onRenderCheckbox?: IRenderFunction<IDetailsListCheckboxProps>;\r\n\r\n  /** Viewport, provided by the withViewport decorator. */\r\n  viewport?: IViewport;\r\n\r\n  /** Callback for when an item in the list becomes active by clicking anywhere inside the row or navigating to it with keyboard. */\r\n  onActiveItemChanged?: (item?: any, index?: number, ev?: React.FocusEvent<HTMLElement>) => void;\r\n\r\n  /** The aria-label attribute to stamp out on the list header */\r\n  ariaLabelForListHeader?: string;\r\n\r\n  /** The aria-label attribute to stamp out on select all checkbox for the list */\r\n  ariaLabelForSelectAllCheckbox?: string;\r\n\r\n  /**\r\n   * An ARIA label for the name of the selection column, for localization.\r\n   */\r\n  ariaLabelForSelectionColumn?: string;\r\n\r\n  /** Optional callback to get the aria-label string for a given item. */\r\n  getRowAriaLabel?: (item: any) => string;\r\n\r\n  /** Optional callback to get the aria-describedby IDs (space separated strings) of the elements that describe the item. */\r\n  getRowAriaDescribedBy?: (item: any) => string;\r\n\r\n  /** Optional callback to get the item key, to be used in the selection and on render. */\r\n  getKey?: (item: any, index?: number) => string;\r\n\r\n  /** A text summary of the table set via aria-label. */\r\n  ariaLabel?: string;\r\n\r\n  /** Check button aria label for details list. */\r\n  checkButtonAriaLabel?: string;\r\n\r\n  /** Aria label for grid in details list. */\r\n  ariaLabelForGrid?: string;\r\n\r\n  /** Boolean value to indicate if the role application should be applied on details list. Set to false by default */\r\n  shouldApplyApplicationRole?: boolean;\r\n\r\n  /**\r\n   * The minimum mouse move distance to interpret the action as drag event.\r\n   * @defaultvalue 5\r\n   */\r\n  minimumPixelsForDrag?: number;\r\n\r\n  /** Boolean value to indicate if the component should render in compact mode. Set to false by default */\r\n  compact?: boolean;\r\n\r\n  /**\r\n   * Boolean value to enable render page caching. This is an experimental performance optimization\r\n   * that is off by default.\r\n   * @defaultvalue false\r\n   */\r\n  usePageCache?: boolean;\r\n\r\n  /**\r\n   * Optional callback to determine whether the list should be rendered in full, or virtualized.\r\n   * Virtualization will add and remove pages of items as the user scrolls them into the visible range.\r\n   * This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists.\r\n   * The default implementation will virtualize when this callback is not provided.\r\n   */\r\n  onShouldVirtualize?: (props: IListProps) => boolean;\r\n\r\n  /**\r\n   * Optional class name to add to the cell of a checkbox\r\n   */\r\n  checkboxCellClassName?: string;\r\n\r\n  /**\r\n   * Whether or not the selection zone should enter modal state on touch.\r\n   */\r\n  enterModalSelectionOnTouch?: boolean;\r\n\r\n  /**\r\n   * Options for column re-order using drag and drop\r\n   */\r\n  columnReorderOptions?: IColumnReorderOptions;\r\n\r\n  /**\r\n   * Optional function to override default group height calculation used by list virtualization.\r\n   */\r\n  getGroupHeight?: IGroupedListProps['getGroupHeight'];\r\n\r\n  /**\r\n   * Rerender DetailsRow only when props changed. Might cause regression when depending on external updates.\r\n   * @defaultvalue false\r\n   */\r\n  useReducedRowRenderer?: boolean;\r\n\r\n  /**\r\n   * Props impacting the render style of cells. Since these have an impact on calculated column widths, they are\r\n   * handled separately from normal theme styling, but they are passed to the styling system.\r\n   */\r\n  cellStyleProps?: ICellStyleProps;\r\n\r\n  /**\r\n   * Whether or not to disable the built-in SelectionZone, so the host component can provide its own.\r\n   */\r\n  disableSelectionZone?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IColumn {\r\n  /**\r\n   * A unique key for identifying the column.\r\n   */\r\n  key: string;\r\n\r\n  /**\r\n   * Name to render on the column header.\r\n   */\r\n  name: string;\r\n\r\n  /**\r\n   * The field to pull the text value from for the column. This can be null if a custom\r\n   * onRender method is provided.\r\n   */\r\n  fieldName?: string;\r\n\r\n  /**\r\n   * An optional class name to stick on the column cell within each row.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Minimum width for the column.\r\n   */\r\n  minWidth: number;\r\n\r\n  /**\r\n   * Optional accessibility label (aria-label) attribute that will be stamped on to the element.\r\n   * If none is specified, the arai-label attribute will contain the column name\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * Optional flag on whether the column is a header for the given row. There should be only one column with\r\n   * row header set to true.\r\n   * @defaultvalue false\r\n   */\r\n  isRowHeader?: boolean;\r\n\r\n  /**\r\n   * Maximum width for the column, if stretching is allowed in justified scenarios.\r\n   */\r\n  maxWidth?: number;\r\n\r\n  /**\r\n   * Defines how the column's header should render.\r\n   * @defaultvalue ColumnActionsMode.clickable\r\n   */\r\n  columnActionsMode?: ColumnActionsMode;\r\n\r\n  /**\r\n   * Optional iconName to use for the column header.\r\n   */\r\n  iconName?: string;\r\n\r\n  /**\r\n   * Whether or not only the icon is used in the column header.\r\n   * Set this to true so the column name and dropdown chevron are not displayed.\r\n   */\r\n  isIconOnly?: boolean;\r\n\r\n  /**\r\n   * Class name to add to the Icon component.\r\n   */\r\n  iconClassName?: string;\r\n\r\n  /**\r\n   * If specified will allow the column to be collapsed when rendered in justified layout.\r\n   * @deprecated Use `isCollapsible`\r\n   */\r\n  isCollapsable?: boolean;\r\n\r\n  /**\r\n   * If specified will allow the column to be collapsed when rendered in justified layout.\r\n   */\r\n  isCollapsible?: boolean;\r\n\r\n  /**\r\n   * Determines if the column is currently sorted. Renders a sort arrow in the column header.\r\n   */\r\n  isSorted?: boolean;\r\n\r\n  /**\r\n   * Determines if the arrow is pointed down (descending) or up.\r\n   */\r\n  isSortedDescending?: boolean;\r\n\r\n  /**\r\n   * Determines if the column can be resized.\r\n   */\r\n  isResizable?: boolean;\r\n\r\n  /**\r\n   * Determines if the column can render multi-line text.\r\n   */\r\n  isMultiline?: boolean;\r\n\r\n  /**\r\n   * If provided uses this method to render custom cell content, rather than the default text rendering.\r\n   */\r\n  onRender?: (item?: any, index?: number, column?: IColumn) => any;\r\n\r\n  /**\r\n   * If provider, can be used to render a custom column header divider\r\n   */\r\n  onRenderDivider?: IRenderFunction<IDetailsColumnProps>;\r\n\r\n  /**\r\n   * Determines if the column is filtered, and if so shows a filter icon.\r\n   */\r\n  isFiltered?: boolean;\r\n\r\n  /**\r\n   * If provided, will be executed when the user clicks on the column header.\r\n   */\r\n  onColumnClick?: (ev: React.MouseEvent<HTMLElement>, column: IColumn) => void;\r\n\r\n  /**\r\n   * If provided, will be executed when the user accesses the contextmenu on a column header.\r\n   */\r\n  onColumnContextMenu?: (column?: IColumn, ev?: React.MouseEvent<HTMLElement>) => void;\r\n\r\n  /**\r\n   * If provided, will be executed when the column is resized with the column's current width.\r\n   * Prefer this callback over `DetailsList` `onColumnResize` if you require the `IColumn` to\r\n   * report its width after every resize event. Consider debouncing the callback if resize events\r\n   * occur frequently.\r\n   */\r\n  onColumnResize?: (width?: number) => void;\r\n\r\n  /**\r\n   * If set will show a grouped icon next to the column header name.\r\n   */\r\n  isGrouped?: boolean;\r\n\r\n  /**\r\n   * Arbitrary data passthrough which can be used by the caller.\r\n   */\r\n  data?: any;\r\n\r\n  /**\r\n   * Internal only value.\r\n   */\r\n  calculatedWidth?: number;\r\n\r\n  /**\r\n   * Internal only value.\r\n   * Remembers the actual witdh of the column on any case.\r\n   * On the other hand, calculatedWidth is only saved when it's defined by user, not for justified calculations.\r\n   */\r\n  currentWidth?: number;\r\n\r\n  /**\r\n   * An optional class name to stick on the column cell within each header.\r\n   */\r\n  headerClassName?: string;\r\n\r\n  /**\r\n   * If set, will add additional LTR padding-right to column and cells.\r\n   */\r\n  isPadded?: boolean;\r\n\r\n  /**\r\n   * ARIA label for the sort order of this column when sorted ascending.\r\n   */\r\n  sortAscendingAriaLabel?: string;\r\n  /**\r\n   * ARIA label for the sort order of this column when sorted descending.\r\n   */\r\n  sortDescendingAriaLabel?: string;\r\n  /**\r\n   * ARIA label for the status of this column when grouped.\r\n   */\r\n  groupAriaLabel?: string;\r\n  /**\r\n   * ARIA label for the status of this column when filtered.\r\n   */\r\n  filterAriaLabel?: string;\r\n  /**\r\n   * Indicates whether a dropdown menu is open so that the appropriate ARIA attributes are rendered.\r\n   */\r\n  isMenuOpen?: boolean;\r\n}\r\n\r\n/**\r\n * Enum to describe how a particular column header behaves.... This enum is used to\r\n * to specify the property IColumn:columnActionsMode.\r\n * If IColumn:columnActionsMode is undefined, then it's equivalent to ColumnActionsMode.clickable\r\n * {@docCategory DetailsList}\r\n */\r\nexport enum ColumnActionsMode {\r\n  /**\r\n   * Renders the column header as disabled.\r\n   */\r\n  disabled = 0,\r\n\r\n  /**\r\n   * Renders the column header is clickable.\r\n   */\r\n  clickable = 1,\r\n\r\n  /**\r\n   * Renders the column header ias clickable and displays the dropdown cheveron.\r\n   */\r\n  hasDropdown = 2\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport enum ConstrainMode {\r\n  /** If specified, lets the content grow which allows the page to manage scrolling. */\r\n  unconstrained = 0,\r\n\r\n  /**\r\n   * If specified, constrains the list to the given layout space.\r\n   */\r\n  horizontalConstrained = 1\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IColumnReorderOptions {\r\n  /**\r\n   * Specifies the number fixed columns from left(0th index)\r\n   * @defaultvalue 0\r\n   */\r\n  frozenColumnCountFromStart?: number;\r\n\r\n  /**\r\n   * Specifies the number fixed columns from right\r\n   * @defaultvalue 0\r\n   */\r\n  frozenColumnCountFromEnd?: number;\r\n\r\n  /**\r\n   * Callback to handle the column dragstart\r\n   * draggedStarted indicates that the column drag has been started on DetailsHeader\r\n   */\r\n  onColumnDragStart?: (dragStarted: boolean) => void;\r\n\r\n  /**\r\n   * Callback to handle the column reorder\r\n   * draggedIndex is the source column index, that need to be placed in targetIndex\r\n   * Deprecated, use `onColumnDrop` instead.\r\n   * @deprecated Use `onColumnDrop` instead.\r\n   */\r\n  handleColumnReorder?: (draggedIndex: number, targetIndex: number) => void;\r\n\r\n  /**\r\n   * Callback to handle the column reorder\r\n   * draggedIndex is the source column index, that need to be placed in targetIndex\r\n   */\r\n  onColumnDrop?: (dragDropDetails: IColumnDragDropDetails) => void;\r\n\r\n  /**\r\n   * Callback to handle the column reorder\r\n   */\r\n  onDragEnd?: (columnDropLocationDetails: ColumnDragEndLocation) => void;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IColumnDragDropDetails {\r\n  /**\r\n   * Specifies the source column index\r\n   * @defaultvalue -1\r\n   */\r\n  draggedIndex: number;\r\n\r\n  /**\r\n   * Specifies the target column index\r\n   * @defaultvalue -1\r\n   */\r\n  targetIndex: number;\r\n}\r\n\r\n/**\r\n * Enum to describe where the column has been dropped, after starting the drag\r\n * {@docCategory DetailsList}\r\n */\r\nexport enum ColumnDragEndLocation {\r\n  /**\r\n   * Drag ended outside of current list\r\n   */\r\n  outside = 0,\r\n\r\n  /**\r\n   * Drag ended on current List\r\n   */\r\n  surface = 1,\r\n\r\n  /**\r\n   * Drag ended on Header\r\n   */\r\n  header = 2\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport enum DetailsListLayoutMode {\r\n  /**\r\n   * Lets the user resize columns and makes not attempt to fit them.\r\n   */\r\n  fixedColumns = 0,\r\n\r\n  /**\r\n   * Manages which columns are visible, tries to size them according to their min/max rules and drops\r\n   * off columns that can't fit and have isCollapsible set.\r\n   */\r\n  justified = 1\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport enum CheckboxVisibility {\r\n  /**\r\n   * Visible on hover.\r\n   */\r\n  onHover = 0,\r\n\r\n  /**\r\n   * Visible always.\r\n   */\r\n  always = 1,\r\n\r\n  /**\r\n   * Hide checkboxes.\r\n   */\r\n  hidden = 2\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport type IDetailsListStyleProps = Required<Pick<IDetailsListProps, 'theme'>> &\r\n  Pick<IDetailsListProps, 'className'> & {\r\n    /** Whether the the list is horizontally constrained */\r\n    isHorizontalConstrained?: boolean;\r\n\r\n    /** Whether the list is in compact mode */\r\n    compact?: boolean;\r\n\r\n    /** Whether the list is fixed in size */\r\n    isFixed?: boolean;\r\n  };\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsListStyles {\r\n  root: IStyle;\r\n  focusZone: IStyle;\r\n  headerWrapper: IStyle;\r\n  contentWrapper: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsGroupRenderProps extends IGroupRenderProps {\r\n  onRenderFooter?: IRenderFunction<IDetailsGroupDividerProps>;\r\n  onRenderHeader?: IRenderFunction<IDetailsGroupDividerProps>;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsGroupDividerProps extends IGroupDividerProps, IDetailsItemProps {}\r\n\r\nexport interface IDetailsListCheckboxProps extends IDetailsCheckboxProps {}\r\n","import * as React from 'react';\r\nimport { IGroupSpacerProps } from './GroupSpacer.types';\r\n\r\nexport const SPACER_WIDTH = 32;\r\n\r\nexport const GroupSpacer: React.SFC<IGroupSpacerProps> = (props: IGroupSpacerProps): ReturnType<React.SFC<IGroupSpacerProps>> => {\r\n  const { count, indentWidth = SPACER_WIDTH } = props;\r\n  const width = count * indentWidth;\r\n\r\n  return count > 0 ? <span className={'ms-GroupSpacer'} style={{ display: 'inline-block', width }} /> : null;\r\n};\r\n","import { IGroupedListStyleProps, IGroupedListStyles } from './GroupedList.types';\r\nimport { getGlobalClassNames, FontSizes, AnimationVariables } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-GroupedList',\r\n  compact: 'ms-GroupedList--Compact',\r\n  group: 'ms-GroupedList-group',\r\n  link: 'ms-Link',\r\n  listCell: 'ms-List-cell'\r\n};\r\n\r\nconst beziers = {\r\n  easeInOutSine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\r\n};\r\n\r\nexport const getStyles = (props: IGroupedListStyleProps): IGroupedListStyles => {\r\n  const { theme, className, compact } = props;\r\n  const { palette } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme!);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        position: 'relative',\r\n        fontSize: FontSizes.small,\r\n        selectors: {\r\n          [`.${classNames.listCell}`]: {\r\n            minHeight: 38 // be consistent with DetailsList styles\r\n          }\r\n        }\r\n      },\r\n      compact && [\r\n        classNames.compact,\r\n        {\r\n          selectors: {\r\n            [`.${classNames.listCell}`]: {\r\n              minHeight: 32 // be consistent with DetailsList styles\r\n            }\r\n          }\r\n        }\r\n      ],\r\n      className\r\n    ],\r\n    group: [\r\n      classNames.group,\r\n      {\r\n        transition: `background-color ${AnimationVariables.durationValue2} ${beziers.easeInOutSine}`\r\n      }\r\n    ],\r\n    groupIsDropping: [\r\n      {\r\n        backgroundColor: palette.neutralLight\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { IDetailsRowStyleProps, IDetailsRowStyles, ICellStyleProps } from './DetailsRow.types';\r\nimport { AnimationClassNames, FontSizes, HighContrastSelector, IStyle, getFocusStyle, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-DetailsRow',\r\n  compact: 'ms-DetailsList--Compact', // TODO: in Fabric 7.0 lowercase the 'Compact' for consistency across other components.\r\n  cell: 'ms-DetailsRow-cell',\r\n  cellCheck: 'ms-DetailsRow-cellCheck',\r\n  cellMeasurer: 'ms-DetailsRow-cellMeasurer',\r\n  listCellFirstChild: 'ms-List-cell:first-child',\r\n  isFocusable: \"[data-is-focusable='true']\",\r\n  isContentUnselectable: 'is-contentUnselectable',\r\n  isSelected: 'is-selected',\r\n  isCheckVisible: 'is-check-visible',\r\n  fields: 'ms-DetailsRow-fields'\r\n};\r\n\r\nexport const DEFAULT_CELL_STYLE_PROPS: ICellStyleProps = {\r\n  cellLeftPadding: 12,\r\n  cellRightPadding: 8,\r\n  cellExtraRightPadding: 24\r\n};\r\n\r\n// Source of default row heights to share.\r\nexport const DEFAULT_ROW_HEIGHTS = {\r\n  rowHeight: 42,\r\n  compactRowHeight: 32\r\n};\r\n\r\n// Constant values\r\nlet values = {\r\n  ...DEFAULT_ROW_HEIGHTS,\r\n  rowVerticalPadding: 11,\r\n  compactRowVerticalPadding: 6,\r\n  rowShimmerLineHeight: 7,\r\n  rowShimmerIconPlaceholderHeight: 16,\r\n  rowShimmerVerticalBorder: 0,\r\n  compactRowShimmerVerticalBorder: 0\r\n};\r\n\r\n// Computed Values\r\nvalues = {\r\n  ...values,\r\n  ...{\r\n    rowShimmerVerticalBorder: (values.rowHeight - values.rowShimmerLineHeight) / 2,\r\n    compactRowShimmerVerticalBorder: (values.compactRowHeight - values.rowShimmerLineHeight) / 2\r\n  }\r\n};\r\n\r\nexport const getStyles = (props: IDetailsRowStyleProps): IDetailsRowStyles => {\r\n  const {\r\n    theme,\r\n    isSelected,\r\n    canSelect,\r\n    droppingClassName,\r\n    anySelected,\r\n    isCheckVisible,\r\n    checkboxCellClassName,\r\n    compact,\r\n    className,\r\n    cellStyleProps = DEFAULT_CELL_STYLE_PROPS\r\n  } = props;\r\n\r\n  const { neutralPrimary, white, neutralSecondary, neutralLighter, neutralLight, neutralDark, neutralQuaternaryAlt, black } = theme.palette;\r\n  const { focusBorder } = theme.semanticColors;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const colors = {\r\n    // Default\r\n    defaultHeaderTextColor: neutralPrimary,\r\n    defaultMetaTextColor: neutralSecondary,\r\n    defaultBackgroundColor: white,\r\n\r\n    // Hover\r\n    hoverTextColor: neutralPrimary,\r\n    hoverColorBackground: neutralLighter,\r\n\r\n    // Selected\r\n    selectedTextColor: neutralDark,\r\n    selectedMetaTextColor: neutralPrimary,\r\n    selectedBackgroundColor: neutralLight,\r\n\r\n    // Selected Hover\r\n    selectedHoverTextColor: black,\r\n    selectedHoverMetaTextColor: neutralDark,\r\n    selectedHoverBackgroundColor: neutralQuaternaryAlt,\r\n\r\n    // Focus\r\n    focusHeaderTextColor: black,\r\n    focusBackgroundColor: neutralQuaternaryAlt,\r\n    focusMetaTextColor: neutralDark\r\n  };\r\n\r\n  const shimmerRightBorderStyle = `${cellStyleProps.cellRightPadding * 4}px solid ${colors.defaultBackgroundColor}`;\r\n  const shimmerLeftBorderStyle = `${cellStyleProps.cellLeftPadding}px solid ${colors.defaultBackgroundColor}`;\r\n  const selectedStyles: IStyle = [\r\n    getFocusStyle(theme, -1, undefined, undefined, focusBorder, white),\r\n    classNames.isSelected,\r\n    {\r\n      color: colors.selectedMetaTextColor,\r\n      background: colors.selectedBackgroundColor,\r\n      borderBottom: `1px solid ${white}`,\r\n      selectors: {\r\n        '&:before': {\r\n          position: 'absolute',\r\n          display: 'block',\r\n          top: -1,\r\n          height: 1,\r\n          bottom: 0,\r\n          left: 0,\r\n          right: 0,\r\n          content: '',\r\n          borderTop: `1px solid ${white}`\r\n        },\r\n\r\n        // Selected State hover\r\n        '&:hover': {\r\n          background: colors.selectedHoverBackgroundColor,\r\n          selectors: {\r\n            // Selected State hover meta cell\r\n            $cell: {\r\n              color: colors.selectedHoverMetaTextColor,\r\n\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  color: 'HighlightText',\r\n                  selectors: {\r\n                    '> a': {\r\n                      color: 'HighlightText'\r\n                    }\r\n                  }\r\n                },\r\n\r\n                // Selected State hover Header cell\r\n                '&.$isRowHeader': {\r\n                  color: colors.selectedHoverTextColor,\r\n                  selectors: {\r\n                    [HighContrastSelector]: {\r\n                      color: 'HighlightText'\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        },\r\n\r\n        // Focus state\r\n        '&:focus': {\r\n          background: colors.focusBackgroundColor,\r\n\r\n          selectors: {\r\n            // Selected State hover meta cell\r\n            $cell: {\r\n              color: colors.focusMetaTextColor,\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  color: 'HighlightText',\r\n                  selectors: {\r\n                    '> a': {\r\n                      color: 'HighlightText'\r\n                    }\r\n                  }\r\n                }\r\n              },\r\n\r\n              // Row header cell\r\n              '&.$isRowHeader': {\r\n                color: colors.focusHeaderTextColor,\r\n                selectors: {\r\n                  [HighContrastSelector]: {\r\n                    color: 'HighlightText'\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  ];\r\n\r\n  const cannotSelectStyles: IStyle = [\r\n    classNames.isContentUnselectable,\r\n    {\r\n      userSelect: 'none',\r\n      cursor: 'default'\r\n    }\r\n  ];\r\n\r\n  const rootCompactStyles: IStyle = {\r\n    minHeight: values.compactRowHeight,\r\n    border: 0\r\n  };\r\n\r\n  const cellCompactStyles: IStyle = {\r\n    minHeight: values.compactRowHeight,\r\n    paddingTop: values.compactRowVerticalPadding,\r\n    paddingBottom: values.compactRowVerticalPadding,\r\n    paddingLeft: `${cellStyleProps.cellLeftPadding}px`,\r\n    selectors: {\r\n      // Masking the running shimmer background with borders\r\n      [`&$shimmer`]: {\r\n        padding: 0,\r\n        borderLeft: shimmerLeftBorderStyle,\r\n        borderRight: shimmerRightBorderStyle,\r\n        borderTop: `${values.compactRowShimmerVerticalBorder}px solid ${colors.defaultBackgroundColor}`,\r\n        borderBottom: `${values.compactRowShimmerVerticalBorder}px solid ${colors.defaultBackgroundColor}`\r\n      },\r\n\r\n      // Masking the running shimmer background with borders when it's an Icon placeholder\r\n      [`&$shimmerIconPlaceholder`]: {\r\n        borderRight: `${cellStyleProps.cellRightPadding}px solid ${colors.defaultBackgroundColor}`,\r\n        borderBottom: `${(values.compactRowHeight - values.rowShimmerIconPlaceholderHeight) / 2}px solid ${colors.defaultBackgroundColor}`,\r\n        borderTop: `${(values.compactRowHeight - values.rowShimmerIconPlaceholderHeight) / 2}px solid ${colors.defaultBackgroundColor}`\r\n      }\r\n    }\r\n  };\r\n\r\n  const defaultCellStyles: IStyle = [\r\n    getFocusStyle(theme, -1),\r\n    classNames.cell,\r\n    {\r\n      display: 'inline-block',\r\n      position: 'relative',\r\n      boxSizing: 'border-box',\r\n      minHeight: values.rowHeight,\r\n      verticalAlign: 'top',\r\n      whiteSpace: 'nowrap',\r\n      overflow: 'hidden',\r\n      textOverflow: 'ellipsis',\r\n      paddingTop: values.rowVerticalPadding,\r\n      paddingBottom: values.rowVerticalPadding,\r\n      paddingLeft: `${cellStyleProps.cellLeftPadding}px`,\r\n      selectors: {\r\n        '& > button': {\r\n          maxWidth: '100%'\r\n        },\r\n\r\n        [classNames.isFocusable!]: getFocusStyle(theme, -1, undefined, undefined, neutralSecondary, white),\r\n\r\n        '&$shimmer': {\r\n          padding: 0,\r\n          borderLeft: shimmerLeftBorderStyle,\r\n          borderRight: shimmerRightBorderStyle,\r\n          borderTop: `${values.rowShimmerVerticalBorder}px solid ${colors.defaultBackgroundColor}`,\r\n          borderBottom: `${values.rowShimmerVerticalBorder}px solid ${colors.defaultBackgroundColor}`\r\n        },\r\n\r\n        '&$shimmerIconPlaceholder': {\r\n          borderRight: `${cellStyleProps.cellRightPadding}px solid ${colors.defaultBackgroundColor}`,\r\n          borderBottom: `${(values.rowHeight - values.rowShimmerIconPlaceholderHeight) / 2}px solid ${colors.defaultBackgroundColor}`,\r\n          borderTop: `${(values.rowHeight - values.rowShimmerIconPlaceholderHeight) / 2}px solid ${colors.defaultBackgroundColor}`\r\n        }\r\n      }\r\n    },\r\n\r\n    isSelected && {\r\n      selectors: {\r\n        '&.$isRowHeader': {\r\n          color: colors.selectedTextColor,\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              color: 'HighlightText'\r\n            }\r\n          }\r\n        },\r\n\r\n        [HighContrastSelector]: {\r\n          background: 'Highlight',\r\n          color: 'HighlightText',\r\n          MsHighContrastAdjust: 'none',\r\n          selectors: {\r\n            a: {\r\n              color: 'HighlightText'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n\r\n    compact && cellCompactStyles\r\n  ];\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      AnimationClassNames.fadeIn400,\r\n      droppingClassName,\r\n      theme.fonts.small,\r\n      isCheckVisible && classNames.isCheckVisible,\r\n      getFocusStyle(theme, 0, undefined, undefined, focusBorder, white),\r\n      {\r\n        borderBottom: `1px solid ${neutralLighter}`,\r\n        background: colors.defaultBackgroundColor,\r\n        color: colors.defaultMetaTextColor,\r\n        display: 'inline-flex', // This ensures that the row always tries to consume is minimum width and does not compress.\r\n        minWidth: '100%',\r\n        minHeight: values.rowHeight,\r\n        whiteSpace: 'nowrap',\r\n        padding: 0,\r\n        boxSizing: 'border-box',\r\n        verticalAlign: 'top',\r\n        textAlign: 'left',\r\n        selectors: {\r\n          [`${classNames.listCellFirstChild} &:before`]: {\r\n            display: 'none'\r\n          },\r\n\r\n          '&:hover': {\r\n            background: colors.hoverColorBackground\r\n          },\r\n\r\n          '&:hover $check': {\r\n            opacity: 1\r\n          }\r\n        }\r\n      },\r\n      isSelected && selectedStyles,\r\n      !canSelect && cannotSelectStyles,\r\n      compact && rootCompactStyles,\r\n      className\r\n    ],\r\n    cellUnpadded: [\r\n      {\r\n        paddingRight: `${cellStyleProps.cellRightPadding}px`\r\n      }\r\n    ],\r\n    cellPadded: [\r\n      {\r\n        paddingRight: `${cellStyleProps.cellExtraRightPadding + cellStyleProps.cellRightPadding}px`,\r\n        selectors: {\r\n          '&.$checkCell': {\r\n            paddingRight: 0\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    cell: defaultCellStyles,\r\n\r\n    cellMeasurer: [\r\n      classNames.cellMeasurer,\r\n      {\r\n        overflow: 'visible',\r\n        whiteSpace: 'nowrap'\r\n      }\r\n    ],\r\n    checkCell: [\r\n      defaultCellStyles,\r\n      classNames.cellCheck,\r\n      checkboxCellClassName,\r\n      {\r\n        padding: 0,\r\n        // Ensure that the check cell covers the top border of the cell.\r\n        // This ensures the click target does not leave a spot which would\r\n        // cause other items to be deselected.\r\n        paddingTop: 1,\r\n        marginTop: -1,\r\n        flexShrink: 0\r\n      }\r\n    ],\r\n    checkCover: [\r\n      {\r\n        position: 'absolute',\r\n        top: -1,\r\n        left: 0,\r\n        bottom: 0,\r\n        right: 0,\r\n        display: 'none'\r\n      },\r\n\r\n      anySelected && {\r\n        display: 'block'\r\n      }\r\n    ],\r\n    fields: [\r\n      classNames.fields,\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'stretch'\r\n      }\r\n    ],\r\n    isRowHeader: [\r\n      {\r\n        color: colors.defaultHeaderTextColor,\r\n        fontSize: FontSizes.medium\r\n      }\r\n    ],\r\n    isMultiline: [\r\n      defaultCellStyles,\r\n      {\r\n        whiteSpace: 'normal',\r\n        wordBreak: 'break-word',\r\n        textOverflow: 'clip'\r\n      }\r\n    ],\r\n    shimmer: [],\r\n    shimmerIconPlaceholder: [],\r\n    shimmerLeftBorder: [\r\n      {\r\n        // 40px to take into account the checkbox of items if present.\r\n        borderLeft: `40px solid ${colors.defaultBackgroundColor}`\r\n      }\r\n    ],\r\n    shimmerBottomBorder: [\r\n      {\r\n        // 1px to take into account the border-bottom when items replace shimmer lines and in default state.\r\n        borderBottom: `1px solid ${colors.defaultBackgroundColor}`\r\n      }\r\n    ],\r\n    check: []\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { ITheme, IStyle } from '../../Styling';\r\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\r\n\r\n/**\r\n * {@docCategory Spinner}\r\n */\r\nexport interface ISpinner {}\r\n\r\n/**\r\n * Spinner component props.\r\n * {@docCategory Spinner}\r\n */\r\nexport interface ISpinnerProps extends React.HTMLAttributes<HTMLElement> {\r\n  /**\r\n   * Optional callback to access the ISpinner interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<ISpinner>;\r\n\r\n  /**\r\n   * Deprecated and will be removed at \\>= 2.0.0. Use `SpinnerSize` instead.\r\n   * @deprecated Use `SpinnerSize` instead.\r\n   */\r\n  type?: SpinnerType;\r\n\r\n  /**\r\n   * The size of Spinner to render. \\{ extraSmall, small, medium, large \\}\r\n   * @defaultvalue SpinnerType.medium\r\n   */\r\n  size?: SpinnerSize;\r\n\r\n  /**\r\n   * The label to show next to the Spinner. Label updates will be announced to the screen readers.\r\n   * Use ariaLive to control politeness level.\r\n   */\r\n  label?: string;\r\n\r\n  /**\r\n   * Additional CSS class(es) to apply to the Spinner.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Politeness setting for label update announcement.\r\n   * @defaultvalue polite\r\n   */\r\n  ariaLive?: 'assertive' | 'polite' | 'off';\r\n\r\n  /**\r\n   * Alternative status label for screen reader\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * Theme (provided through customization.)\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules.\r\n   */\r\n  styles?: IStyleFunctionOrObject<ISpinnerStyleProps, ISpinnerStyles>;\r\n\r\n  /**\r\n   * The position of the label in regards of the spinner animation.\r\n   * @defaultvalue SpinnerLabelPosition.bottom\r\n   */\r\n  labelPosition?: SpinnerLabelPosition;\r\n}\r\n\r\n/**\r\n * Possible variations of the spinner circle size.\r\n * {@docCategory Spinner}\r\n */\r\nexport enum SpinnerSize {\r\n  /**\r\n   * 12px Spinner diameter\r\n   */\r\n  xSmall = 0,\r\n\r\n  /**\r\n   * 16px Spinner diameter\r\n   */\r\n  small = 1,\r\n\r\n  /**\r\n   * 20px Spinner diameter\r\n   */\r\n  medium = 2,\r\n\r\n  /**\r\n   * 28px Spinner diameter\r\n   */\r\n  large = 3\r\n}\r\n\r\n/**\r\n * Possible locations of the label in regards to the spinner\r\n * @defaultvalue bottom\r\n * {@docCategory Spinner}\r\n */\r\nexport type SpinnerLabelPosition = 'top' | 'right' | 'bottom' | 'left';\r\n\r\n/**\r\n * Deprecated at v2.0.0, use `SpinnerSize` instead.\r\n * @deprecated Use `SpinnerSize` instead.\r\n * {@docCategory Spinner}\r\n */\r\nexport enum SpinnerType {\r\n  /**\r\n   * Deprecated and will be removed at \\>= 2.0.0. Use `SpinnerSize.medium` instead.\r\n   * @deprecated Use `SpinnerSize.medium` instead.\r\n   */\r\n  normal = 0,\r\n\r\n  /**\r\n   * Deprecated and will be removed at \\>= 2.0.0. Use `SpinnerSize.large` instead.\r\n   * @deprecated Use `SpinnerSize.large` instead.\r\n   */\r\n  large = 1\r\n}\r\n\r\n/**\r\n * The props needed to construct styles. This represents the simplified set of immutable things which control the class names.\r\n * {@docCategory Spinner}\r\n */\r\nexport interface ISpinnerStyleProps {\r\n  /** Theme provided by High-Order Component. */\r\n  theme: ITheme;\r\n\r\n  /** Size of the spinner animation. */\r\n  size?: SpinnerSize;\r\n\r\n  /** CSS class name for the component attached to the root stylable area. */\r\n  className?: string;\r\n\r\n  /** Position of the label in regards to the spinner animation. */\r\n  labelPosition?: SpinnerLabelPosition;\r\n}\r\n\r\n/**\r\n * Represents the stylable areas of the control.\r\n * {@docCategory Spinner}\r\n */\r\nexport interface ISpinnerStyles {\r\n  /** Styles for the root element. Refers to the wrapper containing both the circle and the label. */\r\n  root?: IStyle;\r\n\r\n  /** Styles for the spinner circle animation. */\r\n  circle?: IStyle;\r\n\r\n  /** Styles for the label accompanying the circle. */\r\n  label?: IStyle;\r\n\r\n  /** Styles for the hidden helper element to aid with screen readers. */\r\n  screenReaderText?: IStyle;\r\n}\r\n","import { IGroupHeaderStyleProps, IGroupHeaderStyles } from './GroupHeader.types';\r\nimport { getGlobalClassNames, getFocusStyle, FontSizes, IStyle, AnimationVariables, FontWeights, IconFontSizes } from '../../Styling';\r\nimport { DEFAULT_ROW_HEIGHTS, DEFAULT_CELL_STYLE_PROPS } from '../DetailsList/DetailsRow.styles';\r\n// For every group level there is a GroupSpacer added. Importing this const to have the source value in one place.\r\nimport { SPACER_WIDTH as EXPAND_BUTTON_WIDTH } from './GroupSpacer';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-GroupHeader',\r\n  compact: 'ms-GroupHeader--compact',\r\n  check: 'ms-GroupHeader-check',\r\n  dropIcon: 'ms-GroupHeader-dropIcon',\r\n  expand: 'ms-GroupHeader-expand',\r\n  isCollapsed: 'is-collapsed',\r\n  title: 'ms-GroupHeader-title',\r\n  isSelected: 'is-selected',\r\n  iconTag: 'ms-Icon--Tag',\r\n  group: 'ms-GroupedList-group',\r\n  isDropping: 'is-dropping'\r\n};\r\n\r\nconst beziers = {\r\n  easeOutCirc: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\r\n  easeOutSine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)',\r\n  easeInBack: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)'\r\n};\r\n\r\nexport const getStyles = (props: IGroupHeaderStyleProps): IGroupHeaderStyles => {\r\n  const { theme, className, selected, isCollapsed, compact } = props;\r\n  const { rowHeight, compactRowHeight } = DEFAULT_ROW_HEIGHTS;\r\n  const { cellLeftPadding } = DEFAULT_CELL_STYLE_PROPS; // padding from the source to align GroupHeader title with DetailsRow's first cell.\r\n  const finalRowHeight = compact ? compactRowHeight : rowHeight;\r\n\r\n  const { semanticColors, palette } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme!);\r\n\r\n  const checkExpandResetStyles: IStyle = [\r\n    getFocusStyle(theme),\r\n    {\r\n      cursor: 'default',\r\n      background: 'none',\r\n      backgroundColor: 'transparent',\r\n      border: 'none',\r\n      padding: 0 // cancel default <button> padding\r\n    }\r\n  ];\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      getFocusStyle(theme),\r\n      theme.fonts.medium,\r\n      {\r\n        borderBottom: `1px solid ${semanticColors.listBackground}`, // keep the border for height but color it so it's invisible.\r\n        cursor: 'default',\r\n        userSelect: 'none',\r\n        selectors: {\r\n          ':hover': {\r\n            background: semanticColors.listItemBackgroundHovered\r\n          },\r\n          ':hover $check': {\r\n            opacity: 1\r\n          },\r\n          ':focus $check': {\r\n            opacity: 1\r\n          },\r\n          [`:global(.${classNames.group}.${classNames.isDropping})`]: {\r\n            selectors: {\r\n              '> $root $dropIcon': {\r\n                transition: `transform ${AnimationVariables.durationValue4} ${beziers.easeOutCirc} opacity ${\r\n                  AnimationVariables.durationValue1\r\n                } ${beziers.easeOutSine}`,\r\n                transitionDelay: AnimationVariables.durationValue3,\r\n                opacity: 1,\r\n                transform: `rotate(0.2deg) scale(1);` // rotation prevents jittery motion in IE\r\n              },\r\n\r\n              $check: {\r\n                opacity: 0\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n      selected && [\r\n        classNames.isSelected,\r\n        {\r\n          background: semanticColors.listItemBackgroundChecked,\r\n          selectors: {\r\n            ':hover': {\r\n              background: semanticColors.listItemBackgroundCheckedHovered\r\n            },\r\n            $check: {\r\n              opacity: 1\r\n            }\r\n          }\r\n        }\r\n      ],\r\n      compact && [classNames.compact, { border: 'none' }],\r\n      className\r\n    ],\r\n    groupHeaderContainer: [\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        height: finalRowHeight\r\n      }\r\n    ],\r\n    headerCount: [\r\n      {\r\n        padding: '0px 4px'\r\n      }\r\n    ],\r\n    check: [\r\n      classNames.check,\r\n      checkExpandResetStyles,\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        // paddingTop and marginTop brought from the DetailsRow.styles.ts with explanation below.\r\n        // Ensure that the check cell covers the top border of the cell.\r\n        // This ensures the click target does not leave a spot which would\r\n        // cause other items to be deselected.\r\n        paddingTop: 1,\r\n        marginTop: -1,\r\n        opacity: 0,\r\n        width: '40px',\r\n        height: finalRowHeight,\r\n        selectors: {\r\n          ':focus': {\r\n            opacity: 1\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    expand: [\r\n      classNames.expand,\r\n      checkExpandResetStyles,\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        fontSize: compact ? FontSizes.mediumPlus : 18, // we don't have 18px in our Fabric type ramps.\r\n        width: EXPAND_BUTTON_WIDTH,\r\n        height: finalRowHeight,\r\n        color: selected ? palette.neutralPrimary : palette.neutralSecondary,\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: selected ? palette.neutralQuaternary : palette.neutralLight\r\n          },\r\n          ':active': {\r\n            backgroundColor: selected ? palette.neutralTertiaryAlt : palette.neutralQuaternaryAlt\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    expandIsCollapsed: [\r\n      isCollapsed\r\n        ? [\r\n            classNames.isCollapsed,\r\n            {\r\n              transform: 'rotate(0deg)',\r\n              transformOrigin: '50% 50%',\r\n              transition: 'transform .1s linear'\r\n            }\r\n          ]\r\n        : {\r\n            transform: 'rotate(90deg)',\r\n            transformOrigin: '50% 50%',\r\n            transition: 'transform .1s linear'\r\n          }\r\n    ],\r\n    title: [\r\n      classNames.title,\r\n      {\r\n        paddingLeft: cellLeftPadding,\r\n        fontSize: compact ? FontSizes.large : FontSizes.xLarge,\r\n        fontWeight: FontWeights.semilight,\r\n        cursor: 'pointer',\r\n        outline: 0,\r\n        whiteSpace: 'nowrap',\r\n        textOverflow: 'ellipsis'\r\n      }\r\n    ],\r\n    dropIcon: [\r\n      classNames.dropIcon,\r\n      {\r\n        position: 'absolute',\r\n        left: -26,\r\n        fontSize: IconFontSizes.large,\r\n        color: palette.neutralSecondary,\r\n        transition: `transform ${AnimationVariables.durationValue2} ${beziers.easeInBack}, opacity ${AnimationVariables.durationValue4} ${\r\n          beziers.easeOutSine\r\n        }`,\r\n        opacity: 0,\r\n        transform: 'rotate(0.2deg) scale(0.65)', // rotation prevents jittery motion in IE\r\n        transformOrigin: '10px 10px',\r\n        selectors: {\r\n          [`:global(.${classNames.iconTag})`]: {\r\n            position: 'absolute'\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { ICheckProps } from './Check.types';\r\nimport { Icon } from '../../Icon';\r\nimport { classNamesFunction } from '../../Utilities';\r\nimport { ICheckStyleProps, ICheckStyles } from './Check.types';\r\n\r\nconst getClassNames = classNamesFunction<ICheckStyleProps, ICheckStyles>();\r\n\r\nexport class CheckBase extends React.PureComponent<ICheckProps, {}> {\r\n  public static defaultProps: ICheckProps = {\r\n    checked: false\r\n  };\r\n\r\n  public render(): JSX.Element {\r\n    const { checked, className, theme, styles } = this.props;\r\n\r\n    const classNames = getClassNames(styles!, { theme: theme!, className, checked });\r\n\r\n    return (\r\n      <div className={classNames.root}>\r\n        <Icon iconName=\"CircleRing\" className={classNames.circle} />\r\n        <Icon iconName=\"StatusCircleCheckmark\" className={classNames.check} />\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { ICheckStyleProps, ICheckStyles } from './Check.types';\r\nimport { HighContrastSelector, IStyle, getGlobalClassNames } from '../../Styling';\r\nimport { getRTL } from '../../Utilities';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Check',\r\n  circle: 'ms-Check-circle',\r\n  check: 'ms-Check-check'\r\n};\r\n\r\nexport const getStyles = (props: ICheckStyleProps): ICheckStyles => {\r\n  const { checkBoxHeight = '18px', checked, className, theme } = props;\r\n\r\n  const { palette, semanticColors } = theme;\r\n  const isRTL = getRTL();\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const sharedCircleCheck: IStyle = {\r\n    fontSize: checkBoxHeight,\r\n    position: 'absolute',\r\n    left: 0,\r\n    top: 0,\r\n    width: checkBoxHeight,\r\n    height: checkBoxHeight,\r\n    textAlign: 'center',\r\n    verticalAlign: 'middle'\r\n  };\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        // lineHeight currently needs to be a string to output without 'px'\r\n        lineHeight: '1',\r\n        width: checkBoxHeight,\r\n        height: checkBoxHeight,\r\n        verticalAlign: 'top',\r\n        position: 'relative',\r\n        userSelect: 'none',\r\n\r\n        selectors: {\r\n          ':before': {\r\n            content: '\"\"',\r\n            position: 'absolute',\r\n            top: '1px',\r\n            right: '1px',\r\n            bottom: '1px',\r\n            left: '1px',\r\n            borderRadius: '50%',\r\n            opacity: 1,\r\n            background: semanticColors.bodyBackground\r\n          },\r\n\r\n          /**\r\n           * TODO: Come back to this once .checkHost has been\r\n           * converted to mergeStyles\r\n           */\r\n          '$checkHost:hover &, $checkHost:focus &, &:hover, &:focus': {\r\n            opacity: 1\r\n          }\r\n        }\r\n      },\r\n\r\n      checked && [\r\n        'is-checked',\r\n        {\r\n          selectors: {\r\n            ':before': {\r\n              background: palette.themePrimary,\r\n              opacity: 1,\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  background: 'Window'\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      ],\r\n      className\r\n    ],\r\n\r\n    circle: [\r\n      classNames.circle,\r\n      sharedCircleCheck,\r\n\r\n      {\r\n        color: palette.neutralTertiaryAlt,\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'WindowText'\r\n          }\r\n        }\r\n      },\r\n\r\n      checked && {\r\n        color: palette.white\r\n      }\r\n    ],\r\n\r\n    check: [\r\n      classNames.check,\r\n      sharedCircleCheck,\r\n\r\n      {\r\n        opacity: 0,\r\n        color: palette.neutralTertiaryAlt,\r\n        fontSize: '16px',\r\n        left: isRTL ? '-0.5px' : '.5px', // for centering the check icon inside the circle.\r\n\r\n        selectors: {\r\n          ':hover': {\r\n            opacity: 1\r\n          },\r\n\r\n          [HighContrastSelector]: {\r\n            MsHighContrastAdjust: 'none'\r\n          }\r\n        }\r\n      },\r\n\r\n      checked && {\r\n        opacity: 1,\r\n        color: palette.white,\r\n        fontWeight: 900,\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            border: 'none',\r\n            color: 'WindowText'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    checkHost: [{}]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { ICheckProps, ICheckStyleProps, ICheckStyles } from './Check.types';\r\nimport { CheckBase } from './Check.base';\r\nimport { getStyles } from './Check.styles';\r\n\r\nexport const Check: React.StatelessComponent<ICheckProps> = styled<ICheckProps, ICheckStyleProps, ICheckStyles>(\r\n  CheckBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Check'\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { ISpinnerProps, ISpinnerStyleProps, ISpinnerStyles, SpinnerType, SpinnerSize } from './Spinner.types';\r\nimport { BaseComponent, classNamesFunction, DelayedRender, getNativeProps, divProperties } from '../../Utilities';\r\n\r\nconst getClassNames = classNamesFunction<ISpinnerStyleProps, ISpinnerStyles>();\r\n\r\nexport class SpinnerBase extends BaseComponent<ISpinnerProps, any> {\r\n  public static defaultProps: ISpinnerProps = {\r\n    size: SpinnerSize.medium,\r\n    ariaLive: 'polite',\r\n    labelPosition: 'bottom'\r\n  };\r\n\r\n  public render() {\r\n    const { type, size, ariaLabel, ariaLive, styles, label, theme, className, labelPosition } = this.props;\r\n    const statusMessage = ariaLabel;\r\n    const nativeProps = getNativeProps(this.props, divProperties, ['size']);\r\n\r\n    // SpinnerType is deprecated. If someone is still using this property, rather than putting the SpinnerType into the ISpinnerStyleProps,\r\n    // we'll map SpinnerType to its equivalent SpinnerSize and pass that in. Once SpinnerType finally goes away we should delete this.\r\n    let styleSize = size;\r\n    if (styleSize === undefined && type !== undefined) {\r\n      styleSize = type === SpinnerType.large ? SpinnerSize.large : SpinnerSize.medium;\r\n    }\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      size: styleSize,\r\n      className,\r\n      labelPosition\r\n    });\r\n\r\n    return (\r\n      <div {...nativeProps} className={classNames.root}>\r\n        <div className={classNames.circle} />\r\n        {label && <div className={classNames.label}>{label}</div>}\r\n        {statusMessage && (\r\n          <div role=\"status\" aria-live={ariaLive}>\r\n            <DelayedRender>\r\n              <div className={classNames.screenReaderText}>{statusMessage}</div>\r\n            </DelayedRender>\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { ISpinnerStyleProps, ISpinnerStyles, SpinnerSize } from './Spinner.types';\r\nimport { hiddenContentStyle, keyframes, HighContrastSelector, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Spinner',\r\n  circle: 'ms-Spinner-circle',\r\n  label: 'ms-Spinner-label'\r\n};\r\n\r\nconst spinAnimation: string = keyframes({\r\n  '0%': {\r\n    transform: 'rotate(0deg)'\r\n  },\r\n  '100%': {\r\n    transform: 'rotate(360deg)'\r\n  }\r\n});\r\n\r\nexport const getStyles = (props: ISpinnerStyleProps): ISpinnerStyles => {\r\n  const { theme, size, className, labelPosition } = props;\r\n\r\n  const { palette } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        alignItems: 'center',\r\n        justifyContent: 'center'\r\n      },\r\n      labelPosition === 'top' && {\r\n        flexDirection: 'column-reverse'\r\n      },\r\n      labelPosition === 'right' && {\r\n        flexDirection: 'row'\r\n      },\r\n      labelPosition === 'left' && {\r\n        flexDirection: 'row-reverse'\r\n      },\r\n      className\r\n    ],\r\n    circle: [\r\n      classNames.circle,\r\n      {\r\n        boxSizing: 'border-box',\r\n        borderRadius: '50%',\r\n        border: '1.5px solid ' + palette.themeLight,\r\n        borderTopColor: palette.themePrimary,\r\n        animationName: spinAnimation,\r\n        animationDuration: '1.3s',\r\n        animationIterationCount: 'infinite',\r\n        animationTimingFunction: 'cubic-bezier(.53,.21,.29,.67)',\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderTopColor: 'Highlight'\r\n          }\r\n        }\r\n      },\r\n      size === SpinnerSize.xSmall && [\r\n        'ms-Spinner--xSmall',\r\n        {\r\n          width: 12,\r\n          height: 12\r\n        }\r\n      ],\r\n      size === SpinnerSize.small && [\r\n        'ms-Spinner--small',\r\n        {\r\n          width: 16,\r\n          height: 16\r\n        }\r\n      ],\r\n      size === SpinnerSize.medium && [\r\n        'ms-Spinner--medium',\r\n        {\r\n          width: 20,\r\n          height: 20\r\n        }\r\n      ],\r\n      size === SpinnerSize.large && [\r\n        'ms-Spinner--large',\r\n        {\r\n          width: 28,\r\n          height: 28\r\n        }\r\n      ]\r\n    ],\r\n    label: [\r\n      classNames.label,\r\n      {\r\n        color: palette.themePrimary,\r\n        margin: '10px 0 0',\r\n        textAlign: 'center'\r\n      },\r\n      labelPosition === 'top' && {\r\n        margin: '0 0 10px'\r\n      },\r\n      labelPosition === 'right' && {\r\n        margin: '0 0 0 10px'\r\n      },\r\n      labelPosition === 'left' && {\r\n        margin: '0 10px 0 0'\r\n      }\r\n    ],\r\n    screenReaderText: hiddenContentStyle\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { SpinnerBase } from './Spinner.base';\r\nimport { getStyles } from './Spinner.styles';\r\nimport { ISpinnerProps, ISpinnerStyles, ISpinnerStyleProps } from './Spinner.types';\r\n\r\nexport const Spinner: React.StatelessComponent<ISpinnerProps> = styled<ISpinnerProps, ISpinnerStyleProps, ISpinnerStyles>(\r\n  SpinnerBase,\r\n  getStyles,\r\n  undefined,\r\n  { scope: 'Spinner' }\r\n);\r\n","import * as React from 'react';\r\nimport { classNamesFunction, IClassNames, getRTL } from '../../Utilities';\r\nimport { SelectionMode } from '../../utilities/selection/index';\r\nimport { Check } from '../../Check';\r\nimport { Icon } from '../../Icon';\r\nimport { GroupSpacer } from './GroupSpacer';\r\nimport { Spinner } from '../../Spinner';\r\nimport { FocusZone, FocusZoneDirection } from '../../FocusZone';\r\nimport { IGroupHeaderStyleProps, IGroupHeaderStyles, IGroupHeaderProps } from './GroupHeader.types';\r\n\r\nconst getClassNames = classNamesFunction<IGroupHeaderStyleProps, IGroupHeaderStyles>();\r\n\r\nexport interface IGroupHeaderState {\r\n  isCollapsed: boolean;\r\n  isLoadingVisible: boolean;\r\n}\r\n\r\nexport class GroupHeaderBase extends React.Component<IGroupHeaderProps, IGroupHeaderState> {\r\n  public static defaultProps: IGroupHeaderProps = {\r\n    expandButtonProps: { 'aria-label': 'expand collapse group' }\r\n  };\r\n\r\n  private _classNames: IClassNames<IGroupHeaderStyles>;\r\n\r\n  constructor(props: IGroupHeaderProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isCollapsed: (this.props.group && this.props.group.isCollapsed) as boolean,\r\n      isLoadingVisible: false\r\n    };\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IGroupHeaderProps): void {\r\n    if (newProps.group) {\r\n      const newCollapsed = newProps.group.isCollapsed;\r\n      const isGroupLoading = newProps.isGroupLoading;\r\n      const newLoadingVisible = !newCollapsed && isGroupLoading && isGroupLoading(newProps.group);\r\n\r\n      this.setState({\r\n        isCollapsed: newCollapsed || false,\r\n        isLoadingVisible: newLoadingVisible || false\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    const {\r\n      group,\r\n      groupLevel,\r\n      viewport,\r\n      selectionMode,\r\n      loadingText,\r\n      isSelected = false,\r\n      selected = false,\r\n      indentWidth,\r\n      onRenderTitle = this._onRenderTitle,\r\n      isCollapsedGroupSelectVisible = true,\r\n      expandButtonProps,\r\n      selectAllButtonProps,\r\n      theme,\r\n      styles,\r\n      className,\r\n      groupedListId,\r\n      compact\r\n    } = this.props;\r\n\r\n    const { isCollapsed, isLoadingVisible } = this.state;\r\n\r\n    const canSelectGroup = selectionMode === SelectionMode.multiple;\r\n    const isSelectionCheckVisible = canSelectGroup && (isCollapsedGroupSelectVisible || !(group && group.isCollapsed));\r\n    const currentlySelected = isSelected || selected;\r\n\r\n    const isRTL = getRTL();\r\n\r\n    this._classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className,\r\n      selected: currentlySelected,\r\n      isCollapsed,\r\n      compact\r\n    });\r\n\r\n    if (!group) {\r\n      return null;\r\n    }\r\n    return (\r\n      <div\r\n        className={this._classNames.root}\r\n        style={viewport ? { minWidth: viewport.width } : {}}\r\n        onClick={this._onHeaderClick}\r\n        aria-label={group.ariaLabel || group.name}\r\n        data-is-focusable={true}\r\n      >\r\n        <FocusZone className={this._classNames.groupHeaderContainer} direction={FocusZoneDirection.horizontal}>\r\n          {isSelectionCheckVisible ? (\r\n            <button\r\n              type=\"button\"\r\n              className={this._classNames.check}\r\n              role=\"checkbox\"\r\n              aria-checked={currentlySelected}\r\n              data-selection-toggle={true}\r\n              onClick={this._onToggleSelectGroupClick}\r\n              {...selectAllButtonProps}\r\n            >\r\n              <Check checked={currentlySelected} />\r\n            </button>\r\n          ) : (\r\n            selectionMode !== SelectionMode.none && <GroupSpacer indentWidth={indentWidth} count={1} />\r\n          )}\r\n\r\n          <GroupSpacer indentWidth={indentWidth} count={groupLevel!} />\r\n\r\n          <div className={this._classNames.dropIcon}>\r\n            <Icon iconName=\"Tag\" />\r\n          </div>\r\n          <button\r\n            type=\"button\"\r\n            className={this._classNames.expand}\r\n            onClick={this._onToggleCollapse}\r\n            aria-expanded={group ? !group.isCollapsed : undefined}\r\n            aria-controls={group && !group.isCollapsed ? groupedListId : undefined}\r\n            {...expandButtonProps}\r\n          >\r\n            <Icon className={this._classNames.expandIsCollapsed} iconName={isRTL ? 'ChevronLeftMed' : 'ChevronRightMed'} />\r\n          </button>\r\n\r\n          {onRenderTitle(this.props, this._onRenderTitle)}\r\n\r\n          {isLoadingVisible && <Spinner label={loadingText} />}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onToggleCollapse = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { group, onToggleCollapse, isGroupLoading } = this.props;\r\n    const { isCollapsed } = this.state;\r\n\r\n    const newCollapsed = !isCollapsed;\r\n    const newLoadingVisible = !newCollapsed && isGroupLoading && isGroupLoading(group!);\r\n\r\n    this.setState({\r\n      isCollapsed: newCollapsed,\r\n      isLoadingVisible: newLoadingVisible as boolean\r\n    });\r\n    if (onToggleCollapse) {\r\n      onToggleCollapse(group!);\r\n    }\r\n\r\n    ev.stopPropagation();\r\n    ev.preventDefault();\r\n  };\r\n\r\n  private _onToggleSelectGroupClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { onToggleSelectGroup, group } = this.props;\r\n\r\n    if (onToggleSelectGroup) {\r\n      onToggleSelectGroup(group!);\r\n    }\r\n\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n  };\r\n\r\n  private _onHeaderClick = (): void => {\r\n    const { group, onGroupHeaderClick, onToggleSelectGroup } = this.props;\r\n\r\n    if (onGroupHeaderClick) {\r\n      onGroupHeaderClick(group!);\r\n    } else if (onToggleSelectGroup) {\r\n      onToggleSelectGroup(group!);\r\n    }\r\n  };\r\n\r\n  private _onRenderTitle = (props: IGroupHeaderProps): JSX.Element | null => {\r\n    const { group } = props;\r\n\r\n    if (!group) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <div className={this._classNames.title}>\r\n        <span>{group.name}</span>\r\n        {\r\n          // hasMoreData flag is set when grouping is throttled by SPO server which in turn resorts to regular\r\n          // sorting to simulate grouping behaviors, in which case group count is the number of items returned\r\n          // so far. That's the reason we need to use \"+\" to show we might have more items than count\r\n          // indicates.\r\n        }\r\n        <span className={this._classNames.headerCount}>\r\n          ({group.count}\r\n          {group.hasMoreData && '+'})\r\n        </span>\r\n      </div>\r\n    );\r\n  };\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { getStyles } from './GroupHeader.styles';\r\nimport { GroupHeaderBase } from './GroupHeader.base';\r\nimport { IGroupHeaderProps, IGroupHeaderStyles, IGroupHeaderStyleProps } from './GroupHeader.types';\r\nexport { IGroupHeaderProps };\r\n\r\nexport const GroupHeader: React.StatelessComponent<IGroupHeaderProps> = styled<\r\n  IGroupHeaderProps,\r\n  IGroupHeaderStyleProps,\r\n  IGroupHeaderStyles\r\n>(GroupHeaderBase, getStyles, undefined, {\r\n  scope: 'GroupHeader'\r\n});\r\n","import { IGroupShowAllProps, IGroupShowAllStyleProps, IGroupShowAllStyles } from './GroupShowAll.types';\r\nimport { getGlobalClassNames, FontSizes } from '../../Styling';\r\n\r\nexport { IGroupShowAllProps };\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-GroupShowAll',\r\n  link: 'ms-Link'\r\n};\r\n\r\nexport const getStyles = (props: IGroupShowAllStyleProps): IGroupShowAllStyles => {\r\n  const { theme } = props;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        position: 'relative',\r\n        padding: '10px 84px',\r\n        cursor: 'pointer',\r\n        selectors: {\r\n          [`.${classNames.link}`]: {\r\n            fontSize: FontSizes.small\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction } from '../../Utilities';\r\nimport { ILink, ILinkProps, ILinkStyleProps, ILinkStyles } from './Link.types';\r\nimport { KeytipData } from '../../KeytipData';\r\n\r\nconst getClassNames = classNamesFunction<ILinkStyleProps, ILinkStyles>();\r\n\r\nexport class LinkBase extends BaseComponent<ILinkProps, any> implements ILink {\r\n  private _link = React.createRef<HTMLAnchorElement | HTMLButtonElement | null>();\r\n\r\n  public render(): JSX.Element {\r\n    const { disabled, children, className, href, theme, styles, keytipProps } = this.props;\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      className,\r\n      isButton: !href,\r\n      isDisabled: disabled,\r\n      theme: theme!\r\n    });\r\n\r\n    const RootType = this._getRootType(this.props);\r\n\r\n    return (\r\n      <KeytipData\r\n        keytipProps={keytipProps}\r\n        ariaDescribedBy={(this.props as { 'aria-describedby': string })['aria-describedby']}\r\n        disabled={disabled}\r\n      >\r\n        {(keytipAttributes: any): JSX.Element => (\r\n          <RootType\r\n            {...keytipAttributes}\r\n            {...this._adjustPropsForRootType(RootType, this.props)}\r\n            className={classNames.root}\r\n            onClick={this._onClick}\r\n            ref={this._link}\r\n            aria-disabled={disabled}\r\n          >\r\n            {children}\r\n          </RootType>\r\n        )}\r\n      </KeytipData>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    const { current } = this._link;\r\n\r\n    if (current && current.focus) {\r\n      current.focus();\r\n    }\r\n  }\r\n\r\n  private _onClick = (ev: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {\r\n    const { onClick, disabled } = this.props;\r\n\r\n    if (disabled) {\r\n      ev.preventDefault();\r\n    } else if (onClick) {\r\n      onClick(ev);\r\n    }\r\n  };\r\n\r\n  private _adjustPropsForRootType(\r\n    RootType: string | React.ComponentClass | React.StatelessComponent,\r\n    props: ILinkProps & { getStyles?: any }\r\n  ): Partial<ILinkProps> {\r\n    // Deconstruct the props so we remove props like `as`, `theme` and `styles`\r\n    // as those will always be removed. We also take some props that are optional\r\n    // based on the RootType.\r\n    const { children, as, disabled, target, href, theme, getStyles, styles, componentRef, ...restProps } = props;\r\n\r\n    // RootType will be a string if we're dealing with an html component\r\n    if (typeof RootType === 'string') {\r\n      // Remove the disabled prop for anchor elements\r\n      if (RootType === 'a') {\r\n        return {\r\n          target,\r\n          href: disabled ? undefined : href,\r\n          ...restProps\r\n        };\r\n      }\r\n\r\n      // Add the type='button' prop for button elements\r\n      if (RootType === 'button') {\r\n        return {\r\n          type: 'button',\r\n          disabled,\r\n          ...restProps\r\n        };\r\n      }\r\n\r\n      // Remove the target and href props for all other non anchor elements\r\n      return { ...restProps, disabled };\r\n    }\r\n\r\n    // Retain all props except 'as' for ReactComponents\r\n    return { target, href, disabled, ...restProps };\r\n  }\r\n\r\n  private _getRootType(props: ILinkProps): string | React.ComponentClass | React.StatelessComponent {\r\n    if (props.as) {\r\n      return props.as;\r\n    }\r\n\r\n    if (props.href) {\r\n      return 'a';\r\n    }\r\n\r\n    return 'button';\r\n  }\r\n}\r\n","import { getGlobalClassNames, HighContrastSelector, HighContrastSelectorWhite, HighContrastSelectorBlack } from '../../Styling';\r\nimport { ILinkStyleProps, ILinkStyles } from './Link.types';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Link'\r\n};\r\n\r\nexport const getStyles = (props: ILinkStyleProps): ILinkStyles => {\r\n  const { className, isButton, isDisabled, theme } = props;\r\n  const { semanticColors } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        color: semanticColors.link,\r\n        outline: 'none',\r\n        fontSize: 'inherit',\r\n        fontWeight: 'inherit',\r\n        selectors: {\r\n          '.ms-Fabric--isFocusVisible &:focus': {\r\n            // Can't use getFocusStyle because it doesn't support wrapping links\r\n            // https://github.com/OfficeDev/office-ui-fabric-react/issues/4883#issuecomment-406743543\r\n            // A box-shadow allows the focus rect to wrap links that span multiple lines\r\n            // and helps the focus rect avoid getting clipped.\r\n            boxShadow: `0 0 0 1px ${theme.palette.neutralSecondary} inset`,\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                outline: '1px solid WindowText'\r\n              }\r\n            }\r\n          },\r\n          [HighContrastSelector]: {\r\n            // For IE high contrast mode\r\n            borderBottom: 'none'\r\n          }\r\n        }\r\n      },\r\n      isButton && {\r\n        background: 'none',\r\n        backgroundColor: 'transparent',\r\n        border: 'none',\r\n        cursor: 'pointer',\r\n        display: 'inline',\r\n        margin: 0,\r\n        overflow: 'inherit',\r\n        padding: 0,\r\n        textAlign: 'left',\r\n        textOverflow: 'inherit',\r\n        userSelect: 'text',\r\n        borderBottom: '1px solid transparent', // For Firefox high contrast mode\r\n        selectors: {\r\n          [HighContrastSelectorBlack]: {\r\n            color: '#FFFF00'\r\n          },\r\n          [HighContrastSelectorWhite]: {\r\n            color: '#00009F'\r\n          }\r\n        }\r\n      },\r\n      !isButton && {\r\n        textDecoration: 'none'\r\n      },\r\n      isDisabled && [\r\n        'is-disabled',\r\n        {\r\n          color: semanticColors.disabledText,\r\n          cursor: 'default'\r\n        },\r\n        {\r\n          selectors: {\r\n            '&:link, &:visited': {\r\n              pointerEvents: 'none'\r\n            }\r\n          }\r\n        }\r\n      ],\r\n      !isDisabled && {\r\n        selectors: {\r\n          '&:active, &:hover, &:active:hover': {\r\n            color: semanticColors.linkHovered,\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                textDecoration: 'underline'\r\n              }\r\n            }\r\n          },\r\n          '&:focus': {\r\n            color: semanticColors.link\r\n          }\r\n        }\r\n      },\r\n      classNames.root,\r\n      className\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { LinkBase } from './Link.base';\r\nimport { ILinkProps, ILinkStyleProps, ILinkStyles } from './Link.types';\r\nimport { getStyles } from './Link.styles';\r\n\r\nexport const Link: React.StatelessComponent<ILinkProps> = styled<ILinkProps, ILinkStyleProps, ILinkStyles>(LinkBase, getStyles, undefined, {\r\n  scope: 'Link'\r\n});\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction } from '../../Utilities';\r\nimport { Link } from '../../Link';\r\nimport { IGroupShowAllProps } from './GroupShowAll.types';\r\nimport { IGroupShowAllStyleProps, IGroupShowAllStyles } from './GroupShowAll.types';\r\nimport { GroupSpacer } from './GroupSpacer';\r\n\r\nconst getClassNames = classNamesFunction<IGroupShowAllStyleProps, IGroupShowAllStyles>();\r\n\r\nexport class GroupShowAllBase extends BaseComponent<IGroupShowAllProps, {}> {\r\n  public static defaultProps: IGroupShowAllProps = {\r\n    showAllLinkText: 'Show All'\r\n  };\r\n\r\n  public render(): JSX.Element | null {\r\n    const { group, groupLevel, showAllLinkText, styles, theme } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n\r\n    if (group) {\r\n      return (\r\n        <div className={classNames.root}>\r\n          <GroupSpacer count={groupLevel!} />\r\n          <Link onClick={this._onSummarizeClick}>{showAllLinkText}</Link>\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _onSummarizeClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    this.props.onToggleSummarize!(this.props.group!);\r\n\r\n    ev.stopPropagation();\r\n    ev.preventDefault();\r\n  };\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { getStyles } from './GroupShowAll.styles';\r\nimport { GroupShowAllBase } from './GroupShowAll.base';\r\nimport { IGroupShowAllProps, IGroupShowAllStyleProps, IGroupShowAllStyles } from './GroupShowAll.types';\r\nexport { IGroupShowAllProps };\r\n\r\nexport const GroupShowAll: React.StatelessComponent<IGroupShowAllProps> = styled<\r\n  IGroupShowAllProps,\r\n  IGroupShowAllStyleProps,\r\n  IGroupShowAllStyles\r\n>(GroupShowAllBase, getStyles, undefined, { scope: 'GroupShowAll' });\r\n","import { IGroupFooterStyleProps, IGroupFooterStyles } from './GroupFooter.types';\r\nimport { getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-groupFooter'\r\n};\r\n\r\nexport const getStyles = (props: IGroupFooterStyleProps): IGroupFooterStyles => {\r\n  const { theme, className } = props;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme!);\r\n\r\n  return {\r\n    root: [\r\n      theme.fonts.medium,\r\n      classNames.root,\r\n      {\r\n        position: 'relative',\r\n        padding: '5px 38px'\r\n      },\r\n      className\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { classNamesFunction } from '../../Utilities';\r\nimport { GroupSpacer } from './GroupSpacer';\r\nimport { IGroupFooterStyleProps, IGroupFooterStyles, IGroupFooterProps } from './GroupFooter.types';\r\nconst getClassNames = classNamesFunction<IGroupFooterStyleProps, IGroupFooterStyles>();\r\n\r\nexport class GroupFooterBase extends React.Component<IGroupFooterProps> {\r\n  public render(): JSX.Element | null {\r\n    const { group, groupLevel, footerText, indentWidth, styles, theme } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme! });\r\n\r\n    if (group && footerText) {\r\n      return (\r\n        <div className={classNames.root}>\r\n          <GroupSpacer indentWidth={indentWidth} count={groupLevel!} />\r\n          {footerText}\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { getStyles } from './GroupFooter.styles';\r\nimport { GroupFooterBase } from './GroupFooter.base';\r\nimport { IGroupFooterProps, IGroupFooterStyles, IGroupFooterStyleProps } from './GroupFooter.types';\r\nexport { IGroupFooterProps };\r\n\r\nexport const GroupFooter: React.StatelessComponent<IGroupFooterProps> = styled<\r\n  IGroupFooterProps,\r\n  IGroupFooterStyleProps,\r\n  IGroupFooterStyles\r\n>(GroupFooterBase, getStyles, undefined, {\r\n  scope: 'GroupFooter'\r\n});\r\n","import * as React from 'react';\r\nimport { IRefObject, IRectangle, IRenderFunction } from '../../Utilities';\r\nimport { List } from './List';\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport const ScrollToMode = {\r\n  /**\r\n   * Does not make any consideration to where in the viewport the item should align to.\r\n   */\r\n  auto: 0 as 0,\r\n  /**\r\n   * Attempts to scroll the list so the top of the desired item is aligned with the top of the viewport.\r\n   */\r\n  top: 1 as 1,\r\n  /**\r\n   * Attempts to scroll the list so the bottom of the desired item is aligned with the bottom of the viewport.\r\n   */\r\n  bottom: 2 as 2,\r\n  /**\r\n   * Attempts to scroll the list so the desired item is in the exact center of the viewport.\r\n   */\r\n  center: 3 as 3\r\n};\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport type ScrollToMode = typeof ScrollToMode[keyof typeof ScrollToMode];\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport interface IList {\r\n  /**\r\n   * Force the component to update.\r\n   */\r\n  forceUpdate: () => void;\r\n\r\n  /**\r\n   * Scroll to the given index. By default will bring the page the specified item is on into the view. If a callback\r\n   * to measure the height of an individual item is specified, will only scroll to bring the specific item into view.\r\n   *\r\n   * Note: with items of variable height and no passed in `getPageHeight` method, the list might jump after scrolling\r\n   * when windows before/ahead are being rendered, and the estimated height is replaced using actual elements.\r\n   *\r\n   * @param index - Index of item to scroll to\r\n   * @param measureItem - Optional callback to measure the height of an individual item\r\n   * @param scrollToMode - Optional defines the behavior of the scrolling alignment. Defaults to auto.\r\n   *  Note: The scrollToMode requires the measureItem callback is provided to function.\r\n   */\r\n  scrollToIndex: (index: number, measureItem?: (itemIndex: number) => number, scrollToMode?: ScrollToMode) => void;\r\n\r\n  /**\r\n   * Get the start index of the page that is currently in view\r\n   */\r\n  getStartItemIndexInView: () => number;\r\n}\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport interface IListProps<T = any> extends React.HTMLAttributes<List<T> | HTMLDivElement> {\r\n  /**\r\n   * Optional callback to access the IList interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IList>;\r\n\r\n  /** Optional classname to append to root list. */\r\n  className?: string;\r\n\r\n  /** Items to render. */\r\n  items?: T[];\r\n\r\n  /**\r\n   * Method to call when trying to render an item.\r\n   * @param item - The the data associated with the cell that is being rendered.\r\n   * @param index - The index of the cell being rendered.\r\n   * @param isScrolling - True if the list is being scrolled. May be useful for rendering a placeholder if your cells are complex.\r\n   */\r\n  onRenderCell?: (item?: T, index?: number, isScrolling?: boolean) => React.ReactNode;\r\n\r\n  /**\r\n   * Optional callback invoked when List rendering completed.\r\n   * This can be on initial mount or on re-render due to scrolling.\r\n   * This method will be called as a result of changes in List pages (added or removed),\r\n   * and after ALL the changes complete.\r\n   * To track individual page Add / Remove use onPageAdded / onPageRemoved instead.\r\n   * @param pages - The current array of pages in the List.\r\n   */\r\n  onPagesUpdated?: (pages: IPage<T>[]) => void;\r\n\r\n  /** Optional callback for monitoring when a page is added. */\r\n  onPageAdded?: (page: IPage<T>) => void;\r\n\r\n  /** Optional callback for monitoring when a page is removed. */\r\n  onPageRemoved?: (page: IPage<T>) => void;\r\n\r\n  /** Optional callback to get the item key, to be used on render. */\r\n  getKey?: (item: T, index?: number) => string;\r\n\r\n  /**\r\n   * Called by the list to get the specification for a page.\r\n   * Use this method to provide an allocation of items per page,\r\n   * as well as an estimated rendered height for the page.\r\n   * The list will use this to optimize virtualization.\r\n   */\r\n  getPageSpecification?: (itemIndex?: number, visibleRect?: IRectangle) => IPageSpecification;\r\n\r\n  /**\r\n   * Method called by the list to get how many items to render per page from specified index.\r\n   * In general, use `getPageSpecification` instead.\r\n   */\r\n  getItemCountForPage?: (itemIndex?: number, visibleRect?: IRectangle) => number;\r\n\r\n  /**\r\n   * Method called by the list to get the pixel height for a given page. By default, we measure the first\r\n   * page's height and default all other pages to that height when calculating the surface space. It is\r\n   * ideal to be able to adequately predict page heights in order to keep the surface space from jumping\r\n   * in pixels, which has been seen to cause browser performance issues.\r\n   * In general, use `getPageSpecification` instead.\r\n   */\r\n  getPageHeight?: (itemIndex?: number, visibleRect?: IRectangle) => number;\r\n\r\n  /**\r\n   * Method called by the list to derive the page style object. For spacer pages, the list will derive\r\n   * the height and passed in heights will be ignored.\r\n   */\r\n  getPageStyle?: (page: IPage<T>) => any;\r\n\r\n  /**\r\n   * In addition to the visible window, how many windowHeights should we render ahead.\r\n   * @defaultvalue 2\r\n   */\r\n  renderedWindowsAhead?: number;\r\n\r\n  /**\r\n   * In addition to the visible window, how many windowHeights should we render behind.\r\n   * @defaultvalue 2\r\n   */\r\n  renderedWindowsBehind?: number;\r\n\r\n  /** Index in items array to start rendering from. Defaults to 0. */\r\n  startIndex?: number;\r\n\r\n  /** Number of items to render. Defaults to items.length. */\r\n  renderCount?: number;\r\n\r\n  /**\r\n   * Boolean value to enable render page caching. This is an experimental performance optimization\r\n   * that is off by default.\r\n   * @defaultvalue false\r\n   */\r\n  usePageCache?: boolean;\r\n\r\n  /**\r\n   * Optional callback to determine whether the list should be rendered in full, or virtualized.\r\n   * Virtualization will add and remove pages of items as the user scrolls them into the visible range.\r\n   * This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists.\r\n   * The default implementation will virtualize when this callback is not provided.\r\n   */\r\n  onShouldVirtualize?: (props: IListProps<T>) => boolean;\r\n\r\n  /**\r\n   * The role to assign to the list root element.\r\n   * Use this to override the default assignment of 'list' to the root and 'listitem' to the cells.\r\n   */\r\n  role?: string;\r\n\r\n  /**\r\n   * Called when the List will render a page.\r\n   * Override this to control how cells are rendered within a page.\r\n   */\r\n  onRenderPage?: (pageProps: IPageProps<T>, defaultRender?: IRenderFunction<IPageProps<T>>) => React.ReactNode;\r\n}\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport interface IPage<T = any> {\r\n  key: string;\r\n  items: T[] | undefined;\r\n  startIndex: number;\r\n  itemCount: number;\r\n  style: React.CSSProperties;\r\n  top: number;\r\n  height: number;\r\n  data?: any;\r\n  isSpacer?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport interface IPageProps<T = any> extends React.HTMLAttributes<HTMLDivElement>, React.ClassAttributes<HTMLDivElement> {\r\n  /**\r\n   * The role being assigned to the rendered page element by the list.\r\n   */\r\n  role?: string;\r\n  /**\r\n   * The allocation data for the page.\r\n   */\r\n  page: IPage<T>;\r\n}\r\n\r\n/**\r\n * {@docCategory List}\r\n */\r\nexport interface IPageSpecification {\r\n  /**\r\n   * The number of items to allocate to the page.\r\n   */\r\n  itemCount?: number;\r\n  /**\r\n   * The estimated pixel height of the page.\r\n   */\r\n  height?: number;\r\n  /**\r\n   * Data to pass through to the page when rendering.\r\n   */\r\n  data?: any;\r\n  /**\r\n   * The key to use when creating the page.\r\n   */\r\n  key?: string;\r\n}\r\n","import * as React from 'react';\r\nimport {\r\n  BaseComponent,\r\n  IRectangle,\r\n  css,\r\n  findIndex,\r\n  findScrollableParent,\r\n  getParent,\r\n  divProperties,\r\n  getNativeProps,\r\n  IRenderFunction\r\n} from '../../Utilities';\r\nimport { IList, IListProps, IPage, IPageProps, ScrollToMode } from './List.types';\r\n\r\nconst RESIZE_DELAY = 16;\r\nconst MIN_SCROLL_UPDATE_DELAY = 100;\r\nconst MAX_SCROLL_UPDATE_DELAY = 500;\r\nconst IDLE_DEBOUNCE_DELAY = 200;\r\n// The amount of time to wait before declaring that the list isn't scrolling\r\nconst DONE_SCROLLING_WAIT = 500;\r\nconst DEFAULT_ITEMS_PER_PAGE = 10;\r\nconst DEFAULT_PAGE_HEIGHT = 30;\r\nconst DEFAULT_RENDERED_WINDOWS_BEHIND = 2;\r\nconst DEFAULT_RENDERED_WINDOWS_AHEAD = 2;\r\nconst PAGE_KEY_PREFIX = 'page-';\r\nconst SPACER_KEY_PREFIX = 'spacer-';\r\n\r\nexport interface IListState<T = any> {\r\n  pages?: IPage<T>[];\r\n\r\n  /** The last versionstamp for  */\r\n  measureVersion?: number;\r\n  isScrolling?: boolean;\r\n}\r\n\r\ninterface IPageCacheItem<T> {\r\n  page: IPage<T>;\r\n  pageElement?: JSX.Element;\r\n}\r\n\r\ninterface IPageCache<T> {\r\n  [key: string]: IPageCacheItem<T>;\r\n}\r\n\r\nconst EMPTY_RECT = {\r\n  top: -1,\r\n  bottom: -1,\r\n  left: -1,\r\n  right: -1,\r\n  width: 0,\r\n  height: 0\r\n};\r\n\r\n// Naming expensive measures so that they're named in profiles.\r\nconst _measurePageRect = (element: HTMLElement) => element.getBoundingClientRect();\r\nconst _measureSurfaceRect = _measurePageRect;\r\nconst _measureScrollRect = _measurePageRect;\r\n\r\n/**\r\n * The List renders virtualized pages of items. Each page's item count is determined by the getItemCountForPage callback if\r\n * provided by the caller, or 10 as default. Each page's height is determined by the getPageHeight callback if provided by\r\n * the caller, or by cached measurements if available, or by a running average, or a default fallback.\r\n *\r\n * The algorithm for rendering pages works like this:\r\n *\r\n * 1. Predict visible pages based on \"current measure data\" (page heights, surface position, visible window)\r\n * 2. If changes are necessary, apply changes (add/remove pages)\r\n * 3. For pages that are added, measure the page heights if we need to using getBoundingClientRect\r\n * 4. If measurements don't match predictions, update measure data and goto step 1 asynchronously\r\n *\r\n * Measuring too frequently can pull performance down significantly. To compensate, we cache measured values so that\r\n * we can avoid re-measuring during operations that should not alter heights, like scrolling.\r\n *\r\n * To optimize glass rendering performance, onShouldVirtualize can be set. When onShouldVirtualize return false,\r\n * List will run in fast mode (not virtualized) to render all items without any measurements to improve page load time. And we\r\n * start doing measurements and rendering in virtualized mode when items grows larger than this threshold.\r\n *\r\n * However, certain operations can make measure data stale. For example, resizing the list, or passing in new props,\r\n * or forcing an update change cause pages to shrink/grow. When these operations occur, we increment a measureVersion\r\n * number, which we associate with cached measurements and use to determine if a remeasure should occur.\r\n */\r\nexport class List<T = any> extends BaseComponent<IListProps<T>, IListState<T>> implements IList {\r\n  public static defaultProps = {\r\n    startIndex: 0,\r\n    onRenderCell: (item: any, index: number, containsFocus: boolean) => <>{(item && item.name) || ''}</>,\r\n    renderedWindowsAhead: DEFAULT_RENDERED_WINDOWS_AHEAD,\r\n    renderedWindowsBehind: DEFAULT_RENDERED_WINDOWS_BEHIND\r\n  };\r\n\r\n  public refs: {\r\n    [key: string]: React.ReactInstance;\r\n  };\r\n\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _surface = React.createRef<HTMLDivElement>();\r\n\r\n  private _estimatedPageHeight: number;\r\n  private _totalEstimates: number;\r\n  private _cachedPageHeights: {\r\n    [key: string]: {\r\n      height: number;\r\n      measureVersion: number;\r\n    };\r\n  };\r\n  private _focusedIndex: number;\r\n  private _scrollElement: HTMLElement;\r\n  private _hasCompletedFirstRender: boolean;\r\n\r\n  // surface rect relative to window\r\n  private _surfaceRect: IRectangle;\r\n\r\n  // The visible rect that we're required to render given the current list state.\r\n  private _requiredRect: IRectangle | null;\r\n\r\n  // The visible rect that we're allowed to keep rendered. Pages outside of this rect will be removed.\r\n  private _allowedRect: IRectangle;\r\n\r\n  // materialized rect around visible items, relative to surface\r\n  private _materializedRect: IRectangle | null;\r\n\r\n  private _requiredWindowsAhead: number;\r\n  private _requiredWindowsBehind: number;\r\n\r\n  private _measureVersion: number;\r\n  private _scrollHeight: number;\r\n  private _scrollTop: number;\r\n  private _pageCache: IPageCache<T>;\r\n\r\n  constructor(props: IListProps<T>) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      pages: [],\r\n      isScrolling: false\r\n    };\r\n\r\n    this._estimatedPageHeight = 0;\r\n    this._totalEstimates = 0;\r\n    this._requiredWindowsAhead = 0;\r\n    this._requiredWindowsBehind = 0;\r\n\r\n    // Track the measure version for everything.\r\n    this._measureVersion = 0;\r\n\r\n    // Ensure that scrolls are lazy updated.\r\n    this._onAsyncScroll = this._async.debounce(this._onAsyncScroll, MIN_SCROLL_UPDATE_DELAY, {\r\n      leading: false,\r\n      maxWait: MAX_SCROLL_UPDATE_DELAY\r\n    });\r\n\r\n    this._onAsyncIdle = this._async.debounce(this._onAsyncIdle, IDLE_DEBOUNCE_DELAY, {\r\n      leading: false\r\n    });\r\n\r\n    this._onAsyncResize = this._async.debounce(this._onAsyncResize, RESIZE_DELAY, {\r\n      leading: false\r\n    });\r\n\r\n    this._onScrollingDone = this._async.debounce(this._onScrollingDone, DONE_SCROLLING_WAIT, {\r\n      leading: false\r\n    });\r\n\r\n    this._cachedPageHeights = {};\r\n    this._estimatedPageHeight = 0;\r\n    this._focusedIndex = -1;\r\n    this._pageCache = {};\r\n  }\r\n\r\n  /**\r\n   * Scroll to the given index. By default will bring the page the specified item is on into the view. If a callback\r\n   * to measure the height of an individual item is specified, will only scroll to bring the specific item into view.\r\n   *\r\n   * Note: with items of variable height and no passed in `getPageHeight` method, the list might jump after scrolling\r\n   * when windows before/ahead are being rendered, and the estimated height is replaced using actual elements.\r\n   *\r\n   * @param index - Index of item to scroll to\r\n   * @param measureItem - Optional callback to measure the height of an individual item\r\n   * @param scrollToMode - Optional defines where in the window the item should be positioned to when scrolling\r\n   */\r\n  public scrollToIndex(index: number, measureItem?: (itemIndex: number) => number, scrollToMode: ScrollToMode = ScrollToMode.auto): void {\r\n    const startIndex = this.props.startIndex as number;\r\n    const renderCount = this._getRenderCount();\r\n    const endIndex = startIndex + renderCount;\r\n\r\n    const allowedRect = this._allowedRect;\r\n\r\n    let scrollTop = 0;\r\n\r\n    let itemsPerPage = 1;\r\n    for (let itemIndex = startIndex; itemIndex < endIndex; itemIndex += itemsPerPage) {\r\n      const pageSpecification = this._getPageSpecification(itemIndex, allowedRect);\r\n\r\n      const pageHeight = pageSpecification.height;\r\n      itemsPerPage = pageSpecification.itemCount;\r\n\r\n      const requestedIndexIsInPage = itemIndex <= index && itemIndex + itemsPerPage > index;\r\n      if (requestedIndexIsInPage) {\r\n        // We have found the page. If the user provided a way to measure an individual item, we will try to scroll in just\r\n        // the given item, otherwise we'll only bring the page into view\r\n        if (measureItem) {\r\n          const scrollRect = _measureScrollRect(this._scrollElement);\r\n          const scrollWindow = {\r\n            top: this._scrollElement.scrollTop,\r\n            bottom: this._scrollElement.scrollTop + scrollRect.height\r\n          };\r\n\r\n          // Adjust for actual item position within page\r\n          const itemPositionWithinPage = index - itemIndex;\r\n          for (let itemIndexInPage = 0; itemIndexInPage < itemPositionWithinPage; ++itemIndexInPage) {\r\n            scrollTop += measureItem(itemIndex + itemIndexInPage);\r\n          }\r\n          const scrollBottom = scrollTop + measureItem(index);\r\n\r\n          // If scrollToMode is set to something other than auto, we always want to\r\n          // scroll the item into a specific position on the page.\r\n          switch (scrollToMode) {\r\n            case ScrollToMode.top:\r\n              this._scrollElement.scrollTop = scrollTop;\r\n              return;\r\n            case ScrollToMode.bottom:\r\n              this._scrollElement.scrollTop = scrollBottom - scrollRect.height;\r\n              return;\r\n            case ScrollToMode.center:\r\n              this._scrollElement.scrollTop = (scrollTop + scrollBottom - scrollRect.height) / 2;\r\n              return;\r\n            case ScrollToMode.auto:\r\n            default:\r\n              break;\r\n          }\r\n\r\n          const itemIsFullyVisible = scrollTop >= scrollWindow.top && scrollBottom <= scrollWindow.bottom;\r\n          if (itemIsFullyVisible) {\r\n            // Item is already visible, do nothing.\r\n            return;\r\n          }\r\n\r\n          const itemIsPartiallyAbove = scrollTop < scrollWindow.top;\r\n          const itemIsPartiallyBelow = scrollBottom > scrollWindow.bottom;\r\n\r\n          if (itemIsPartiallyAbove) {\r\n            //  We will just scroll to 'scrollTop'\r\n            //  .------.   - scrollTop\r\n            //  |Item  |\r\n            //  | .----|-. - scrollWindow.top\r\n            //  '------' |\r\n            //    |      |\r\n            //    '------'\r\n          } else if (itemIsPartiallyBelow) {\r\n            //  Adjust scrollTop position to just bring in the element\r\n            // .------.  - scrollTop\r\n            // |      |\r\n            // | .------.\r\n            // '-|----' | - scrollWindow.bottom\r\n            //   | Item |\r\n            //   '------' - scrollBottom\r\n            scrollTop = scrollBottom - scrollRect.height;\r\n          }\r\n        }\r\n\r\n        this._scrollElement.scrollTop = scrollTop;\r\n        return;\r\n      }\r\n\r\n      scrollTop += pageHeight;\r\n    }\r\n  }\r\n\r\n  public getStartItemIndexInView(measureItem?: (itemIndex: number) => number): number {\r\n    const pages = this.state.pages || [];\r\n    for (const page of pages) {\r\n      const isPageVisible = !page.isSpacer && (this._scrollTop || 0) >= page.top && (this._scrollTop || 0) <= page.top + page.height;\r\n      if (isPageVisible) {\r\n        if (!measureItem) {\r\n          const rowHeight = Math.floor(page.height / page.itemCount);\r\n          return page.startIndex + Math.floor((this._scrollTop - page.top) / rowHeight);\r\n        } else {\r\n          let totalRowHeight = 0;\r\n          for (let itemIndex = page.startIndex; itemIndex < page.startIndex + page.itemCount; itemIndex++) {\r\n            const rowHeight = measureItem(itemIndex);\r\n            if (page.top + totalRowHeight <= this._scrollTop && this._scrollTop < page.top + totalRowHeight + rowHeight) {\r\n              return itemIndex;\r\n            } else {\r\n              totalRowHeight += rowHeight;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    this._updatePages();\r\n    this._measureVersion++;\r\n    this._scrollElement = findScrollableParent(this._root.current) as HTMLElement;\r\n\r\n    this._events.on(window, 'resize', this._onAsyncResize);\r\n    if (this._root.current) {\r\n      this._events.on(this._root.current, 'focus', this._onFocus, true);\r\n    }\r\n    if (this._scrollElement) {\r\n      this._events.on(this._scrollElement, 'scroll', this._onScroll);\r\n      this._events.on(this._scrollElement, 'scroll', this._onAsyncScroll);\r\n    }\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IListProps<T>): void {\r\n    if (\r\n      newProps.items !== this.props.items ||\r\n      newProps.renderCount !== this.props.renderCount ||\r\n      newProps.startIndex !== this.props.startIndex\r\n    ) {\r\n      // We have received new items so we want to make sure that initially we only render a single window to\r\n      // fill the currently visible rect, and then later render additional windows.\r\n      this._resetRequiredWindows();\r\n      this._requiredRect = null;\r\n\r\n      this._measureVersion++;\r\n      this._invalidatePageCache();\r\n      this._updatePages(newProps);\r\n    }\r\n  }\r\n\r\n  public shouldComponentUpdate(newProps: IListProps<T>, newState: IListState<T>): boolean {\r\n    const { pages: oldPages } = this.state;\r\n    const { pages: newPages } = newState;\r\n    let shouldComponentUpdate = false;\r\n\r\n    // Update if the page stops scrolling\r\n    if (!newState.isScrolling && this.state.isScrolling) {\r\n      return true;\r\n    }\r\n\r\n    if (newProps.items === this.props.items && oldPages!.length === newPages!.length) {\r\n      for (let i = 0; i < oldPages!.length; i++) {\r\n        const oldPage = oldPages![i];\r\n        const newPage = newPages![i];\r\n\r\n        if (oldPage.key !== newPage.key || oldPage.itemCount !== newPage.itemCount) {\r\n          shouldComponentUpdate = true;\r\n          break;\r\n        }\r\n      }\r\n    } else {\r\n      shouldComponentUpdate = true;\r\n    }\r\n\r\n    return shouldComponentUpdate;\r\n  }\r\n\r\n  public forceUpdate(): void {\r\n    this._invalidatePageCache();\r\n    // Ensure that when the list is force updated we update the pages first before render.\r\n    this._updateRenderRects(this.props, true);\r\n    this._updatePages();\r\n    this._measureVersion++;\r\n\r\n    super.forceUpdate();\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, role = 'list' } = this.props;\r\n    const { pages = [] } = this.state;\r\n    const pageElements: JSX.Element[] = [];\r\n    const divProps = getNativeProps(this.props, divProperties);\r\n\r\n    for (const page of pages) {\r\n      pageElements.push(this._renderPage(page));\r\n    }\r\n\r\n    return (\r\n      <div ref={this._root} {...divProps} role={pageElements.length > 0 ? role : undefined} className={css('ms-List', className)}>\r\n        <div ref={this._surface} className={css('ms-List-surface')} role=\"presentation\">\r\n          {pageElements}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _shouldVirtualize(props: IListProps<T> = this.props): boolean {\r\n    const { onShouldVirtualize } = props;\r\n    return !onShouldVirtualize || onShouldVirtualize(props);\r\n  }\r\n\r\n  /**\r\n   * when props.items change or forceUpdate called, throw away cached pages\r\n   */\r\n  private _invalidatePageCache(): void {\r\n    this._pageCache = {};\r\n  }\r\n\r\n  private _renderPage(page: IPage<T>): JSX.Element {\r\n    const { usePageCache } = this.props;\r\n    let cachedPage;\r\n    // if usePageCache is set and cached page element can be found, just return cached page\r\n    if (usePageCache) {\r\n      cachedPage = this._pageCache[page.key];\r\n      if (cachedPage && cachedPage.pageElement) {\r\n        return cachedPage.pageElement;\r\n      }\r\n    }\r\n\r\n    const pageStyle = this._getPageStyle(page);\r\n\r\n    const { onRenderPage = this._onRenderPage } = this.props;\r\n\r\n    const pageElement = onRenderPage(\r\n      {\r\n        page: page,\r\n        className: css('ms-List-page'),\r\n        key: page.key,\r\n        ref: page.key,\r\n        style: pageStyle,\r\n        role: 'presentation'\r\n      },\r\n      this._onRenderPage\r\n    );\r\n\r\n    // cache the first page for now since it is re-rendered a lot times unnecessarily.\r\n    // todo: a more aggresive caching mechanism is to cache pages constaining the items not changed.\r\n    // now we re-render pages too frequently, for example, props.items increased from 30 to 60, although the\r\n    // first 30 items did not change, we still re-rendered all of them in this props.items change.\r\n    if (usePageCache && page.startIndex === 0) {\r\n      this._pageCache[page.key] = {\r\n        page: page,\r\n        pageElement: pageElement\r\n      };\r\n    }\r\n    return pageElement;\r\n  }\r\n\r\n  /** Generate the style object for the page. */\r\n  private _getPageStyle(page: IPage<T>): React.StyleHTMLAttributes<HTMLDivElement> {\r\n    const { getPageStyle } = this.props;\r\n\r\n    return {\r\n      ...(getPageStyle ? getPageStyle(page) : {}),\r\n      ...(!page.items\r\n        ? {\r\n            height: page.height\r\n          }\r\n        : {})\r\n    };\r\n  }\r\n\r\n  private _onRenderPage = (pageProps: IPageProps<T>, defaultRender?: IRenderFunction<IPageProps<T>>): any => {\r\n    const { onRenderCell, role } = this.props;\r\n\r\n    const {\r\n      page: { items = [], startIndex },\r\n      ...divProps\r\n    } = pageProps;\r\n\r\n    // only assign list item role if no role is assigned\r\n    const cellRole = role === undefined ? 'listitem' : 'presentation';\r\n    const cells: React.ReactNode[] = [];\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const index = startIndex + i;\r\n      const item = items[i];\r\n\r\n      let itemKey = this.props.getKey ? this.props.getKey(item, index) : item && (item as any).key;\r\n\r\n      if (itemKey === null || itemKey === undefined) {\r\n        itemKey = index;\r\n      }\r\n\r\n      cells.push(\r\n        <div role={cellRole} className={css('ms-List-cell')} key={itemKey} data-list-index={index} data-automationid=\"ListCell\">\r\n          {onRenderCell && onRenderCell(item, index, this.state.isScrolling)}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return <div {...divProps}>{cells}</div>;\r\n  };\r\n\r\n  /** Track the last item index focused so that we ensure we keep it rendered. */\r\n  private _onFocus(ev: any): void {\r\n    let target = ev.target as HTMLElement;\r\n\r\n    while (target !== this._surface.current) {\r\n      const indexString = target.getAttribute('data-list-index');\r\n\r\n      if (indexString) {\r\n        this._focusedIndex = Number(indexString);\r\n        break;\r\n      }\r\n\r\n      target = getParent(target) as HTMLElement;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called synchronously to reset the required render range to 0 on scrolling. After async scroll has executed,\r\n   * we will call onAsyncIdle which will reset it back to it's correct value.\r\n   */\r\n  private _onScroll(): void {\r\n    if (!this.state.isScrolling) {\r\n      this.setState({ isScrolling: true });\r\n    }\r\n    this._resetRequiredWindows();\r\n    this._onScrollingDone();\r\n  }\r\n\r\n  private _resetRequiredWindows(): void {\r\n    this._requiredWindowsAhead = 0;\r\n    this._requiredWindowsBehind = 0;\r\n  }\r\n\r\n  /**\r\n   * Debounced method to asynchronously update the visible region on a scroll event.\r\n   */\r\n  private _onAsyncScroll(): void {\r\n    this._updateRenderRects();\r\n\r\n    // Only update pages when the visible rect falls outside of the materialized rect.\r\n    if (!this._materializedRect || !_isContainedWithin(this._requiredRect as IRectangle, this._materializedRect)) {\r\n      this._updatePages();\r\n    } else {\r\n      // console.log('requiredRect contained in materialized', this._requiredRect, this._materializedRect);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This is an async debounced method that will try and increment the windows we render. If we can increment\r\n   * either, we increase the amount we render and re-evaluate.\r\n   */\r\n  private _onAsyncIdle(): void {\r\n    const { renderedWindowsAhead, renderedWindowsBehind } = this.props;\r\n    const { _requiredWindowsAhead: requiredWindowsAhead, _requiredWindowsBehind: requiredWindowsBehind } = this;\r\n    const windowsAhead = Math.min(renderedWindowsAhead as number, requiredWindowsAhead + 1);\r\n    const windowsBehind = Math.min(renderedWindowsBehind as number, requiredWindowsBehind + 1);\r\n\r\n    if (windowsAhead !== requiredWindowsAhead || windowsBehind !== requiredWindowsBehind) {\r\n      // console.log('idling', windowsBehind, windowsAhead);\r\n\r\n      this._requiredWindowsAhead = windowsAhead;\r\n      this._requiredWindowsBehind = windowsBehind;\r\n      this._updateRenderRects();\r\n      this._updatePages();\r\n    }\r\n\r\n    if (renderedWindowsAhead! > windowsAhead || renderedWindowsBehind! > windowsBehind) {\r\n      // Async increment on next tick.\r\n      this._onAsyncIdle();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Function to call when the list is done scrolling.\r\n   * This function is debounced.\r\n   */\r\n  private _onScrollingDone(): void {\r\n    this.setState({ isScrolling: false });\r\n  }\r\n\r\n  private _onAsyncResize(): void {\r\n    this.forceUpdate();\r\n  }\r\n\r\n  private _updatePages(props: IListProps<T> = this.props): void {\r\n    // console.log('updating pages');\r\n\r\n    if (!this._requiredRect) {\r\n      this._updateRenderRects(props);\r\n    }\r\n\r\n    const newListState = this._buildPages(props);\r\n    const oldListPages = this.state.pages!;\r\n\r\n    this._notifyPageChanges(oldListPages, newListState.pages!);\r\n\r\n    this.setState(newListState, () => {\r\n      // If we weren't provided with the page height, measure the pages\r\n      if (!props.getPageHeight) {\r\n        // If measured version is invalid since we've updated the DOM\r\n        const heightsChanged = this._updatePageMeasurements(newListState.pages!);\r\n\r\n        // On first render, we should re-measure so that we don't get a visual glitch.\r\n        if (heightsChanged) {\r\n          this._materializedRect = null;\r\n          if (!this._hasCompletedFirstRender) {\r\n            this._hasCompletedFirstRender = true;\r\n            this._updatePages(props);\r\n          } else {\r\n            this._onAsyncScroll();\r\n          }\r\n        } else {\r\n          // Enqueue an idle bump.\r\n          this._onAsyncIdle();\r\n        }\r\n      } else {\r\n        // Enqueue an idle bump\r\n        this._onAsyncIdle();\r\n      }\r\n\r\n      // Notify the caller that rendering the new pages has completed\r\n      if (props.onPagesUpdated) {\r\n        props.onPagesUpdated(this.state.pages as IPage<T>[]);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Notify consumers that the rendered pages have changed\r\n   * @param oldPages - The old pages\r\n   * @param newPages - The new pages\r\n   * @param props - The props to use\r\n   */\r\n  private _notifyPageChanges(oldPages: IPage<T>[], newPages: IPage<T>[], props: IListProps<T> = this.props): void {\r\n    const { onPageAdded, onPageRemoved } = props;\r\n\r\n    if (onPageAdded || onPageRemoved) {\r\n      const renderedIndexes: {\r\n        [index: number]: IPage<T>;\r\n      } = {};\r\n\r\n      for (const page of oldPages) {\r\n        if (page.items) {\r\n          renderedIndexes[page.startIndex] = page;\r\n        }\r\n      }\r\n\r\n      for (const page of newPages) {\r\n        if (page.items) {\r\n          if (!renderedIndexes[page.startIndex]) {\r\n            this._onPageAdded(page);\r\n          } else {\r\n            delete renderedIndexes[page.startIndex];\r\n          }\r\n        }\r\n      }\r\n\r\n      for (const index in renderedIndexes) {\r\n        if (renderedIndexes.hasOwnProperty(index)) {\r\n          this._onPageRemoved(renderedIndexes[index]);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private _updatePageMeasurements(pages: IPage<T>[]): boolean {\r\n    let heightChanged = false;\r\n\r\n    // when not in virtualize mode, we render all the items without page measurement\r\n    if (!this._shouldVirtualize()) {\r\n      return heightChanged;\r\n    }\r\n\r\n    for (let i = 0; i < pages.length; i++) {\r\n      const page = pages[i];\r\n\r\n      if (page.items) {\r\n        heightChanged = this._measurePage(page) || heightChanged;\r\n      }\r\n    }\r\n\r\n    return heightChanged;\r\n  }\r\n\r\n  /**\r\n   * Given a page, measure its dimensions, update cache.\r\n   * @returns True if the height has changed.\r\n   */\r\n  private _measurePage(page: IPage<T>): boolean {\r\n    let hasChangedHeight = false;\r\n    const pageElement = this.refs[page.key] as HTMLElement;\r\n    const cachedHeight = this._cachedPageHeights[page.startIndex];\r\n\r\n    // console.log('   * measure attempt', page.startIndex, cachedHeight);\r\n\r\n    if (pageElement && this._shouldVirtualize() && (!cachedHeight || cachedHeight.measureVersion !== this._measureVersion)) {\r\n      const newClientRect = {\r\n        width: pageElement.clientWidth,\r\n        height: pageElement.clientHeight\r\n      };\r\n\r\n      if (newClientRect.height || newClientRect.width) {\r\n        hasChangedHeight = page.height !== newClientRect.height;\r\n\r\n        // console.warn(' *** expensive page measure', page.startIndex, page.height, newClientRect.height);\r\n\r\n        page.height = newClientRect.height;\r\n\r\n        this._cachedPageHeights[page.startIndex] = {\r\n          height: newClientRect.height,\r\n          measureVersion: this._measureVersion\r\n        };\r\n\r\n        this._estimatedPageHeight = Math.round(\r\n          (this._estimatedPageHeight * this._totalEstimates + newClientRect.height) / (this._totalEstimates + 1)\r\n        );\r\n\r\n        this._totalEstimates++;\r\n      }\r\n    }\r\n\r\n    return hasChangedHeight;\r\n  }\r\n\r\n  /** Called when a page has been added to the DOM. */\r\n  private _onPageAdded(page: IPage<T>): void {\r\n    const { onPageAdded } = this.props;\r\n\r\n    // console.log('page added', page.startIndex, this.state.pages.map(page => page.key).join(', '));\r\n\r\n    if (onPageAdded) {\r\n      onPageAdded(page);\r\n    }\r\n  }\r\n\r\n  /** Called when a page has been removed from the DOM. */\r\n  private _onPageRemoved(page: IPage<T>): void {\r\n    const { onPageRemoved } = this.props;\r\n\r\n    // console.log('  --- page removed', page.startIndex, this.state.pages.map(page => page.key).join(', '));\r\n\r\n    if (onPageRemoved) {\r\n      onPageRemoved(page);\r\n    }\r\n  }\r\n\r\n  /** Build up the pages that should be rendered. */\r\n  private _buildPages(props: IListProps<T>): IListState<T> {\r\n    let { renderCount } = props;\r\n    const { items, startIndex, getPageHeight } = props;\r\n\r\n    renderCount = this._getRenderCount(props);\r\n\r\n    const materializedRect = { ...EMPTY_RECT };\r\n    const pages: IPage<T>[] = [];\r\n\r\n    let itemsPerPage = 1;\r\n    let pageTop = 0;\r\n    let currentSpacer = null;\r\n    const focusedIndex = this._focusedIndex;\r\n    const endIndex = startIndex! + renderCount;\r\n    const shouldVirtualize = this._shouldVirtualize(props);\r\n\r\n    // First render is very important to track; when we render cells, we have no idea of estimated page height.\r\n    // So we should default to rendering only the first page so that we can get information.\r\n    // However if the user provides a measure function, let's just assume they know the right heights.\r\n    const isFirstRender = this._estimatedPageHeight === 0 && !getPageHeight;\r\n\r\n    const allowedRect = this._allowedRect;\r\n\r\n    for (let itemIndex = startIndex!; itemIndex < endIndex; itemIndex += itemsPerPage) {\r\n      const pageSpecification = this._getPageSpecification(itemIndex, allowedRect);\r\n      const pageHeight = pageSpecification.height;\r\n      const pageData = pageSpecification.data;\r\n      const key = pageSpecification.key;\r\n\r\n      itemsPerPage = pageSpecification.itemCount;\r\n\r\n      const pageBottom = pageTop + pageHeight - 1;\r\n\r\n      const isPageRendered =\r\n        findIndex(this.state.pages as IPage<T>[], (page: IPage<T>) => !!page.items && page.startIndex === itemIndex) > -1;\r\n      const isPageInAllowedRange = !allowedRect || (pageBottom >= allowedRect.top && pageTop <= allowedRect.bottom!);\r\n      const isPageInRequiredRange = !this._requiredRect || (pageBottom >= this._requiredRect.top && pageTop <= this._requiredRect.bottom!);\r\n      const isPageVisible = (!isFirstRender && (isPageInRequiredRange || (isPageInAllowedRange && isPageRendered))) || !shouldVirtualize;\r\n      const isPageFocused = focusedIndex >= itemIndex && focusedIndex < itemIndex + itemsPerPage;\r\n      const isFirstPage = itemIndex === startIndex;\r\n\r\n      // console.log('building page', itemIndex, 'pageTop: ' + pageTop, 'inAllowed: ' +\r\n      // isPageInAllowedRange, 'inRequired: ' + isPageInRequiredRange);\r\n\r\n      // Only render whats visible, focused, or first page,\r\n      // or when running in fast rendering mode (not in virtualized mode), we render all current items in pages\r\n      if (isPageVisible || isPageFocused || isFirstPage) {\r\n        if (currentSpacer) {\r\n          pages.push(currentSpacer);\r\n          currentSpacer = null;\r\n        }\r\n\r\n        const itemsInPage = Math.min(itemsPerPage, endIndex - itemIndex);\r\n        const newPage = this._createPage(key, items!.slice(itemIndex, itemIndex + itemsInPage), itemIndex, undefined, undefined, pageData);\r\n\r\n        newPage.top = pageTop;\r\n        newPage.height = pageHeight;\r\n\r\n        pages.push(newPage);\r\n\r\n        if (isPageInRequiredRange && this._allowedRect) {\r\n          _mergeRect(materializedRect, {\r\n            top: pageTop,\r\n            bottom: pageBottom,\r\n            height: pageHeight,\r\n            left: allowedRect.left,\r\n            right: allowedRect.right,\r\n            width: allowedRect.width\r\n          });\r\n        }\r\n      } else {\r\n        if (!currentSpacer) {\r\n          currentSpacer = this._createPage(SPACER_KEY_PREFIX + itemIndex, undefined, itemIndex, 0, undefined, pageData, true /*isSpacer*/);\r\n        }\r\n        currentSpacer.height = (currentSpacer.height || 0) + (pageBottom - pageTop) + 1;\r\n        currentSpacer.itemCount += itemsPerPage;\r\n      }\r\n      pageTop += pageBottom - pageTop + 1;\r\n\r\n      // in virtualized mode, we render need to render first page then break and measure,\r\n      // otherwise, we render all items without measurement to make rendering fast\r\n      if (isFirstRender && shouldVirtualize) {\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (currentSpacer) {\r\n      currentSpacer.key = SPACER_KEY_PREFIX + 'end';\r\n      pages.push(currentSpacer);\r\n    }\r\n\r\n    this._materializedRect = materializedRect;\r\n\r\n    // console.log('materialized: ', materializedRect);\r\n    return {\r\n      pages: pages,\r\n      measureVersion: this._measureVersion\r\n    };\r\n  }\r\n\r\n  private _getPageSpecification(\r\n    itemIndex: number,\r\n    visibleRect: IRectangle\r\n  ): {\r\n    // These return values are now no longer optional.\r\n    itemCount: number;\r\n    height: number;\r\n    data?: any;\r\n    key?: string;\r\n  } {\r\n    const { getPageSpecification } = this.props;\r\n    if (getPageSpecification) {\r\n      const pageData = getPageSpecification(itemIndex, visibleRect);\r\n\r\n      const { itemCount = this._getItemCountForPage(itemIndex, visibleRect) } = pageData;\r\n\r\n      const { height = this._getPageHeight(itemIndex, itemCount, visibleRect) } = pageData;\r\n\r\n      return {\r\n        itemCount: itemCount,\r\n        height: height,\r\n        data: pageData.data,\r\n        key: pageData.key\r\n      };\r\n    } else {\r\n      const itemCount = this._getItemCountForPage(itemIndex, visibleRect);\r\n\r\n      return {\r\n        itemCount: itemCount,\r\n        height: this._getPageHeight(itemIndex, itemCount, visibleRect)\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get the pixel height of a give page. Will use the props getPageHeight first, and if not provided, fallback to\r\n   * cached height, or estimated page height, or default page height.\r\n   */\r\n  private _getPageHeight(itemIndex: number, itemsPerPage: number, visibleRect: IRectangle): number {\r\n    if (this.props.getPageHeight) {\r\n      return this.props.getPageHeight(itemIndex, visibleRect);\r\n    } else {\r\n      const cachedHeight = this._cachedPageHeights[itemIndex];\r\n\r\n      return cachedHeight ? cachedHeight.height : this._estimatedPageHeight || DEFAULT_PAGE_HEIGHT;\r\n    }\r\n  }\r\n\r\n  private _getItemCountForPage(itemIndex: number, visibileRect: IRectangle): number {\r\n    const itemsPerPage = this.props.getItemCountForPage ? this.props.getItemCountForPage(itemIndex, visibileRect) : DEFAULT_ITEMS_PER_PAGE;\r\n\r\n    return itemsPerPage ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;\r\n  }\r\n\r\n  private _createPage(\r\n    pageKey: string | undefined,\r\n    items: any[] | undefined,\r\n    startIndex: number = -1,\r\n    count: number = items ? items.length : 0,\r\n    style: React.CSSProperties = {},\r\n    data?: any,\r\n    isSpacer?: boolean\r\n  ): IPage<T> {\r\n    pageKey = pageKey || PAGE_KEY_PREFIX + startIndex;\r\n    const cachedPage = this._pageCache[pageKey];\r\n    if (cachedPage && cachedPage.page) {\r\n      return cachedPage.page;\r\n    }\r\n\r\n    return {\r\n      key: pageKey,\r\n      startIndex: startIndex,\r\n      itemCount: count,\r\n      items: items,\r\n      style: style,\r\n      top: 0,\r\n      height: 0,\r\n      data: data,\r\n      isSpacer: isSpacer || false\r\n    };\r\n  }\r\n\r\n  private _getRenderCount(props?: IListProps<T>): number {\r\n    const { items, startIndex, renderCount } = props || this.props;\r\n\r\n    return renderCount === undefined ? (items ? items.length - startIndex! : 0) : renderCount;\r\n  }\r\n\r\n  /** Calculate the visible rect within the list where top: 0 and left: 0 is the top/left of the list. */\r\n  private _updateRenderRects(props?: IListProps<T>, forceUpdate?: boolean): void {\r\n    props = props || this.props;\r\n    const { renderedWindowsAhead, renderedWindowsBehind } = props;\r\n    const { pages } = this.state;\r\n    // when not in virtualize mode, we render all items without measurement to optimize page rendering perf\r\n    if (!this._shouldVirtualize(props)) {\r\n      return;\r\n    }\r\n\r\n    let surfaceRect = this._surfaceRect;\r\n    const scrollHeight = this._scrollElement && this._scrollElement.scrollHeight;\r\n    const scrollTop = this._scrollElement ? this._scrollElement.scrollTop : 0;\r\n\r\n    // WARNING: EXPENSIVE CALL! We need to know the surface top relative to the window.\r\n    // This needs to be called to recalculate when new pages should be loaded.\r\n    // We check to see how far we've scrolled and if it's further than a third of a page we run it again.\r\n    if (\r\n      this._surface.current &&\r\n      (forceUpdate ||\r\n        !pages ||\r\n        !this._surfaceRect ||\r\n        !scrollHeight ||\r\n        scrollHeight !== this._scrollHeight ||\r\n        Math.abs(this._scrollTop - scrollTop) > this._estimatedPageHeight / 3)\r\n    ) {\r\n      surfaceRect = this._surfaceRect = _measureSurfaceRect(this._surface.current);\r\n      this._scrollTop = scrollTop;\r\n    }\r\n\r\n    // If the scroll height has changed, something in the container likely resized and\r\n    // we should redo the page heights incase their content resized.\r\n    if (forceUpdate || !scrollHeight || scrollHeight !== this._scrollHeight) {\r\n      this._measureVersion++;\r\n    }\r\n\r\n    this._scrollHeight = scrollHeight;\r\n\r\n    // If the surface is above the container top or below the container bottom, or if this is not the first\r\n    // render return empty rect.\r\n    // The first time the list gets rendered we need to calculate the rectangle. The width of the list is\r\n    // used to calculate the width of the list items.\r\n    const visibleTop = Math.max(0, -surfaceRect.top);\r\n    const visibleRect = {\r\n      top: visibleTop,\r\n      left: surfaceRect.left,\r\n      bottom: visibleTop + window.innerHeight,\r\n      right: surfaceRect.right,\r\n      width: surfaceRect.width,\r\n      height: window.innerHeight\r\n    };\r\n\r\n    // The required/allowed rects are adjusted versions of the visible rect.\r\n    this._requiredRect = _expandRect(visibleRect, this._requiredWindowsBehind, this._requiredWindowsAhead);\r\n    this._allowedRect = _expandRect(visibleRect, renderedWindowsBehind!, renderedWindowsAhead!);\r\n  }\r\n}\r\n\r\nfunction _expandRect(rect: IRectangle, pagesBefore: number, pagesAfter: number): IRectangle {\r\n  const top = rect.top - pagesBefore * rect.height;\r\n  const height = rect.height + (pagesBefore + pagesAfter) * rect.height;\r\n\r\n  return {\r\n    top: top,\r\n    bottom: top + height,\r\n    height: height,\r\n    left: rect.left,\r\n    right: rect.right,\r\n    width: rect.width\r\n  };\r\n}\r\n\r\nfunction _isContainedWithin(innerRect: IRectangle, outerRect: IRectangle): boolean {\r\n  return (\r\n    innerRect.top >= outerRect.top &&\r\n    innerRect.left >= outerRect.left &&\r\n    innerRect.bottom! <= outerRect.bottom! &&\r\n    innerRect.right! <= outerRect.right!\r\n  );\r\n}\r\n\r\nfunction _mergeRect(targetRect: IRectangle, newRect: IRectangle): IRectangle {\r\n  targetRect.top = newRect.top < targetRect.top || targetRect.top === -1 ? newRect.top : targetRect.top;\r\n  targetRect.left = newRect.left < targetRect.left || targetRect.left === -1 ? newRect.left : targetRect.left;\r\n  targetRect.bottom = newRect.bottom! > targetRect.bottom! || targetRect.bottom === -1 ? newRect.bottom : targetRect.bottom;\r\n  targetRect.right = newRect.right! > targetRect.right! || targetRect.right === -1 ? newRect.right : targetRect.right;\r\n  targetRect.width = targetRect.right! - targetRect.left + 1;\r\n  targetRect.height = targetRect.bottom! - targetRect.top + 1;\r\n\r\n  return targetRect;\r\n}\r\n","import * as React from 'react';\r\nimport { IGroup, IGroupDividerProps, IGroupRenderProps, IGroupedListStyles } from './GroupedList.types';\r\nimport { IGroupHeaderProps } from './GroupHeader.types';\r\nimport { IGroupFooterProps } from './GroupFooter.types';\r\nimport { IGroupShowAllProps } from './GroupShowAll.types';\r\n\r\nimport { IDragDropContext, IDragDropEvents, IDragDropHelper } from '../../utilities/dragdrop/index';\r\n\r\nimport { BaseComponent, IRenderFunction, IDisposable, IClassNames } from '../../Utilities';\r\n\r\nimport { ISelection, SelectionMode, SELECTION_CHANGE } from '../../utilities/selection/index';\r\n\r\nimport { GroupHeader } from './GroupHeader';\r\nimport { GroupShowAll } from './GroupShowAll';\r\nimport { GroupFooter } from './GroupFooter';\r\n\r\nimport { List } from '../../List';\r\nimport { IDragDropOptions } from './../../utilities/dragdrop/interfaces';\r\nimport { css, getId } from '../../Utilities';\r\nimport { IViewport } from '../../utilities/decorators/withViewport';\r\nimport { IListProps } from '../List/index';\r\n\r\nexport interface IGroupedListSectionProps extends React.ClassAttributes<GroupedListSection> {\r\n  /** GroupedList resolved class names */\r\n  groupedListClassNames?: IClassNames<IGroupedListStyles>;\r\n\r\n  /**\r\n   * Gets the component ref.\r\n   */\r\n  componentRef?: () => void;\r\n\r\n  /** Whether to render in compact mode */\r\n  compact?: boolean;\r\n\r\n  /** Map of callback functions related to drag and drop functionality. */\r\n  dragDropEvents?: IDragDropEvents;\r\n\r\n  /** helper to manage drag/drop across item rows and groups */\r\n  dragDropHelper?: IDragDropHelper;\r\n\r\n  /** Event names and corresponding callbacks that will be registered to the group and the rendered elements */\r\n  eventsToRegister?: { eventName: string; callback: (context: IDragDropContext, event?: any) => void }[];\r\n\r\n  /** Information to pass in to the group footer. */\r\n  footerProps?: IGroupFooterProps;\r\n\r\n  /** Grouping item limit. */\r\n  getGroupItemLimit?: (group: IGroup) => number;\r\n\r\n  /** Optional grouping instructions. */\r\n  groupIndex?: number;\r\n\r\n  /** Optional group nesting level. */\r\n  groupNestingDepth?: number;\r\n\r\n  /** Optional grouping instructions. */\r\n  group?: IGroup;\r\n\r\n  /** Optional override properties to render groups. */\r\n  groupProps?: IGroupRenderProps;\r\n\r\n  /** Information to pass in to the group header. */\r\n  headerProps?: IGroupHeaderProps;\r\n\r\n  /** List of items to render. */\r\n  items: any[];\r\n\r\n  /** Optional list props to pass to list renderer.  */\r\n  listProps?: IListProps;\r\n\r\n  /** Rendering callback to render the group items. */\r\n  onRenderCell: (nestingDepth?: number, item?: any, index?: number) => React.ReactNode;\r\n\r\n  /** Optional selection model to track selection state.  */\r\n  selection?: ISelection;\r\n\r\n  /** Controls how/if the details list manages selection. */\r\n  selectionMode?: SelectionMode;\r\n\r\n  /** Information to pass in to the group Show All footer. */\r\n  showAllProps?: IGroupShowAllProps;\r\n\r\n  /** Optional Viewport, provided by the parent component. */\r\n  viewport?: IViewport;\r\n\r\n  /** Override for rendering the group header. */\r\n  onRenderGroupHeader?: IRenderFunction<IGroupHeaderProps>;\r\n\r\n  /** Override for rendering the group Show All link. */\r\n  onRenderGroupShowAll?: IRenderFunction<IGroupShowAllProps>;\r\n\r\n  /** Override for rendering the group footer. */\r\n  onRenderGroupFooter?: IRenderFunction<IGroupFooterProps>;\r\n\r\n  /**\r\n   * Optional callback to determine whether the list should be rendered in full, or virtualized.\r\n   * Virtualization will add and remove pages of items as the user scrolls them into the visible range.\r\n   * This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists.\r\n   * The default implementation will virtualize when this callback is not provided.\r\n   */\r\n  onShouldVirtualize?: (props: IListProps) => boolean;\r\n\r\n  /** Stores parent group's children. */\r\n  groups?: IGroup[];\r\n}\r\n\r\nexport interface IGroupedListSectionState {\r\n  isDropping?: boolean;\r\n  isSelected?: boolean;\r\n}\r\n\r\nconst DEFAULT_DROPPING_CSS_CLASS = 'is-dropping';\r\n\r\nexport class GroupedListSection extends BaseComponent<IGroupedListSectionProps, IGroupedListSectionState> {\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _list = React.createRef<List>();\r\n  private _id: string;\r\n\r\n  private _dragDropSubscription: IDisposable;\r\n\r\n  constructor(props: IGroupedListSectionProps) {\r\n    super(props);\r\n\r\n    const { selection, group } = props;\r\n\r\n    this._id = getId('GroupedListSection');\r\n\r\n    this.state = {\r\n      isDropping: false,\r\n      isSelected: selection && group ? selection.isRangeSelected(group.startIndex, group.count) : false\r\n    };\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    const { dragDropHelper, selection } = this.props;\r\n\r\n    if (dragDropHelper && this._root.current) {\r\n      this._dragDropSubscription = dragDropHelper.subscribe(this._root.current, this._events, this._getGroupDragDropOptions());\r\n    }\r\n\r\n    if (selection) {\r\n      this._events.on(selection, SELECTION_CHANGE, this._onSelectionChange);\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    if (this._dragDropSubscription) {\r\n      this._dragDropSubscription.dispose();\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(previousProps: IGroupedListSectionProps) {\r\n    if (\r\n      this.props.group !== previousProps.group ||\r\n      this.props.groupIndex !== previousProps.groupIndex ||\r\n      this.props.dragDropHelper !== previousProps.dragDropHelper\r\n    ) {\r\n      if (this._dragDropSubscription) {\r\n        this._dragDropSubscription.dispose();\r\n        delete this._dragDropSubscription;\r\n      }\r\n\r\n      if (this.props.dragDropHelper && this._root.current) {\r\n        this._dragDropSubscription = this.props.dragDropHelper.subscribe(this._root.current, this._events, this._getGroupDragDropOptions());\r\n      }\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      getGroupItemLimit,\r\n      group,\r\n      groupIndex,\r\n      headerProps,\r\n      showAllProps,\r\n      footerProps,\r\n      viewport,\r\n      selectionMode,\r\n      onRenderGroupHeader = this._onRenderGroupHeader,\r\n      onRenderGroupShowAll = this._onRenderGroupShowAll,\r\n      onRenderGroupFooter = this._onRenderGroupFooter,\r\n      onShouldVirtualize,\r\n      groupedListClassNames,\r\n      groups,\r\n      compact\r\n    } = this.props;\r\n    const { isSelected } = this.state;\r\n    const renderCount = group && getGroupItemLimit ? getGroupItemLimit(group) : Infinity;\r\n    const isShowAllVisible =\r\n      group && !group.children && !group.isCollapsed && !group.isShowingAll && (group.count > renderCount || group.hasMoreData);\r\n    const hasNestedGroups = group && group.children && group.children.length > 0;\r\n\r\n    const dividerProps: IGroupDividerProps = {\r\n      group,\r\n      groupIndex,\r\n      groupLevel: group ? group.level : 0,\r\n      isSelected,\r\n      viewport,\r\n      selectionMode,\r\n      groups,\r\n      compact\r\n    };\r\n\r\n    const ariaControlsProps: IGroupHeaderProps = {\r\n      groupedListId: this._id\r\n    };\r\n\r\n    const groupHeaderProps: IGroupHeaderProps = { ...headerProps, ...dividerProps, ...ariaControlsProps };\r\n    const groupShowAllProps: IGroupShowAllProps = { ...showAllProps, ...dividerProps };\r\n    const groupFooterProps: IGroupFooterProps = { ...footerProps, ...dividerProps };\r\n\r\n    return (\r\n      <div\r\n        ref={this._root}\r\n        className={css(groupedListClassNames && groupedListClassNames.group, this._getDroppingClassName())}\r\n        role=\"presentation\"\r\n      >\r\n        {onRenderGroupHeader(groupHeaderProps, this._onRenderGroupHeader)}\r\n        {group && group.isCollapsed ? null : hasNestedGroups ? (\r\n          <List\r\n            role=\"presentation\"\r\n            ref={this._list}\r\n            items={group!.children}\r\n            onRenderCell={this._renderSubGroup}\r\n            getItemCountForPage={this._returnOne}\r\n            onShouldVirtualize={onShouldVirtualize}\r\n            id={this._id}\r\n          />\r\n        ) : (\r\n          this._onRenderGroup(renderCount)\r\n        )}\r\n        {group && group.isCollapsed ? null : isShowAllVisible && onRenderGroupShowAll(groupShowAllProps, this._onRenderGroupShowAll)}\r\n        {onRenderGroupFooter(groupFooterProps, this._onRenderGroupFooter)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public forceUpdate() {\r\n    super.forceUpdate();\r\n    this.forceListUpdate();\r\n  }\r\n\r\n  public forceListUpdate() {\r\n    const { group } = this.props;\r\n\r\n    if (this._list.current) {\r\n      this._list.current.forceUpdate();\r\n\r\n      if (group && group.children && group.children.length > 0) {\r\n        const subGroupCount = group.children.length;\r\n\r\n        for (let i = 0; i < subGroupCount; i++) {\r\n          const subGroup = this._list.current.refs['subGroup_' + String(i)] as GroupedListSection;\r\n\r\n          if (subGroup) {\r\n            subGroup.forceListUpdate();\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      const subGroup = this.refs['subGroup_' + String(0)] as GroupedListSection;\r\n\r\n      if (subGroup) {\r\n        subGroup.forceListUpdate();\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onRenderGroupHeader = (props: IGroupHeaderProps): JSX.Element => {\r\n    return <GroupHeader {...props} />;\r\n  };\r\n\r\n  private _onRenderGroupShowAll = (props: IGroupShowAllProps): JSX.Element => {\r\n    return <GroupShowAll {...props} />;\r\n  };\r\n\r\n  private _onRenderGroupFooter = (props: IGroupFooterProps): JSX.Element => {\r\n    return <GroupFooter {...props} />;\r\n  };\r\n\r\n  private _onSelectionChange(): void {\r\n    const { group, selection } = this.props;\r\n    const isSelected = selection!.isRangeSelected(group!.startIndex, group!.count);\r\n\r\n    if (isSelected !== this.state.isSelected) {\r\n      this.setState({ isSelected });\r\n    }\r\n  }\r\n\r\n  private _onRenderGroupCell(\r\n    onRenderCell: any,\r\n    groupNestingDepth: number | undefined\r\n  ): (item: any, itemIndex: number | undefined) => React.ReactNode {\r\n    return (item: any, itemIndex: number | undefined): React.ReactNode => {\r\n      return onRenderCell(groupNestingDepth, item, itemIndex);\r\n    };\r\n  }\r\n\r\n  private _onRenderGroup(renderCount: number): JSX.Element {\r\n    const { group, items, onRenderCell, listProps, groupNestingDepth, onShouldVirtualize } = this.props;\r\n    const count = group ? group.count : items.length;\r\n    const startIndex = group ? group.startIndex : 0;\r\n\r\n    return (\r\n      <List\r\n        role=\"grid\"\r\n        items={items}\r\n        onRenderCell={this._onRenderGroupCell(onRenderCell, groupNestingDepth)}\r\n        ref={this._list}\r\n        renderCount={Math.min(count, renderCount)}\r\n        startIndex={startIndex}\r\n        onShouldVirtualize={onShouldVirtualize}\r\n        id={this._id}\r\n        {...listProps}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _renderSubGroup = (subGroup: IGroup, subGroupIndex: number): JSX.Element | null => {\r\n    const {\r\n      dragDropEvents,\r\n      dragDropHelper,\r\n      eventsToRegister,\r\n      getGroupItemLimit,\r\n      groupNestingDepth,\r\n      groupProps,\r\n      items,\r\n      headerProps,\r\n      showAllProps,\r\n      footerProps,\r\n      listProps,\r\n      onRenderCell,\r\n      selection,\r\n      selectionMode,\r\n      viewport,\r\n      onRenderGroupHeader,\r\n      onRenderGroupShowAll,\r\n      onRenderGroupFooter,\r\n      onShouldVirtualize,\r\n      group,\r\n      compact\r\n    } = this.props;\r\n\r\n    return !subGroup || subGroup.count > 0 || (groupProps && groupProps.showEmptyGroups) ? (\r\n      <GroupedListSection\r\n        ref={'subGroup_' + subGroupIndex}\r\n        key={this._getGroupKey(subGroup, subGroupIndex)}\r\n        dragDropEvents={dragDropEvents}\r\n        dragDropHelper={dragDropHelper}\r\n        eventsToRegister={eventsToRegister}\r\n        footerProps={footerProps}\r\n        getGroupItemLimit={getGroupItemLimit}\r\n        group={subGroup}\r\n        groupIndex={subGroupIndex}\r\n        groupNestingDepth={groupNestingDepth}\r\n        groupProps={groupProps}\r\n        headerProps={headerProps}\r\n        items={items}\r\n        listProps={listProps}\r\n        onRenderCell={onRenderCell}\r\n        selection={selection}\r\n        selectionMode={selectionMode}\r\n        showAllProps={showAllProps}\r\n        viewport={viewport}\r\n        onRenderGroupHeader={onRenderGroupHeader}\r\n        onRenderGroupShowAll={onRenderGroupShowAll}\r\n        onRenderGroupFooter={onRenderGroupFooter}\r\n        onShouldVirtualize={onShouldVirtualize}\r\n        groups={group!.children}\r\n        compact={compact}\r\n      />\r\n    ) : null;\r\n  };\r\n\r\n  private _returnOne(): number {\r\n    return 1;\r\n  }\r\n\r\n  private _getGroupKey(group: IGroup, index: number): string {\r\n    return 'group-' + (group && group.key ? group.key : String(group.level) + String(index));\r\n  }\r\n\r\n  /**\r\n   * collect all the data we need to enable drag/drop for a group\r\n   */\r\n  private _getGroupDragDropOptions = (): IDragDropOptions => {\r\n    const { group, groupIndex, dragDropEvents, eventsToRegister } = this.props;\r\n    const options = {\r\n      eventMap: eventsToRegister,\r\n      selectionIndex: -1,\r\n      context: { data: group, index: groupIndex, isGroup: true },\r\n      canDrag: () => false, // cannot drag groups\r\n      canDrop: dragDropEvents!.canDrop,\r\n      updateDropState: this._updateDroppingState\r\n    };\r\n    return options as IDragDropOptions;\r\n  };\r\n\r\n  /**\r\n   * update groupIsDropping state based on the input value, which is used to change style during drag and drop\r\n   *\r\n   * @param newValue - new isDropping state value\r\n   * @param event - the event trigger dropping state change which can be dragenter, dragleave etc\r\n   */\r\n  private _updateDroppingState = (newIsDropping: boolean, event: DragEvent): void => {\r\n    const { isDropping } = this.state;\r\n    const { dragDropEvents } = this.props;\r\n\r\n    if (!isDropping) {\r\n      if (dragDropEvents && dragDropEvents.onDragLeave) {\r\n        dragDropEvents.onDragLeave!(event, undefined);\r\n      }\r\n    } else {\r\n      if (dragDropEvents && dragDropEvents.onDragEnter) {\r\n        dragDropEvents.onDragEnter(event, undefined);\r\n      }\r\n    }\r\n\r\n    if (isDropping !== newIsDropping) {\r\n      this.setState({ isDropping: newIsDropping });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * get the correct css class to reflect the dropping state for a given group\r\n   *\r\n   * If the group is the current drop target, return the default dropping class name\r\n   * Otherwise, return '';\r\n   *\r\n   */\r\n  private _getDroppingClassName(): string {\r\n    let { isDropping } = this.state;\r\n    const { group, groupedListClassNames } = this.props;\r\n\r\n    isDropping = !!(group && isDropping);\r\n\r\n    return css(isDropping && DEFAULT_DROPPING_CSS_CLASS, isDropping && groupedListClassNames && groupedListClassNames.groupIsDropping);\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { IRefObject, IRenderFunction, IStyleFunctionOrObject } from '../../Utilities';\r\nimport { CollapseAllVisibility } from '../../GroupedList';\r\nimport { ITooltipHostProps } from '../../Tooltip';\r\nimport { ITheme, IStyle } from '../../Styling';\r\nimport { DetailsHeaderBase } from './DetailsHeader.base';\r\nimport { IColumn, DetailsListLayoutMode, IColumnReorderOptions, ColumnDragEndLocation } from './DetailsList.types';\r\nimport { ICellStyleProps, IDetailsItemProps } from './DetailsRow.types';\r\nimport { ISelection, SelectionMode } from '../../utilities/selection/index';\r\nimport { IDetailsCheckboxProps } from './DetailsRowCheck.types';\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsHeader {\r\n  /** sets focus into the header */\r\n  focus: () => boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsHeaderBaseProps extends React.ClassAttributes<DetailsHeaderBase>, IDetailsItemProps {\r\n  /** Theme from the Higher Order Component */\r\n  theme?: ITheme;\r\n\r\n  /** Call to provide customized styling that will layer on top of the variant rules. */\r\n  styles?: IStyleFunctionOrObject<IDetailsHeaderStyleProps, IDetailsHeaderStyles>;\r\n\r\n  /** Ref to the component itself */\r\n  componentRef?: IRefObject<IDetailsHeader>;\r\n\r\n  /** Layout mode - fixedColumns or justified */\r\n  layoutMode: DetailsListLayoutMode;\r\n\r\n  /** Callback for when column sizing has changed */\r\n  onColumnIsSizingChanged?: (column: IColumn, isSizing: boolean) => void;\r\n\r\n  /** Callback for when column is resized */\r\n  onColumnResized?: (column: IColumn, newWidth: number, columnIndex: number) => void;\r\n\r\n  /** Callback for when column is automatically resized */\r\n  onColumnAutoResized?: (column: IColumn, columnIndex: number) => void;\r\n\r\n  /** Callback for when the column is clicked */\r\n  onColumnClick?: (ev: React.MouseEvent<HTMLElement>, column: IColumn) => void;\r\n\r\n  /** Callback for when the column needs to show a context menu */\r\n  onColumnContextMenu?: (column: IColumn, ev: React.MouseEvent<HTMLElement>) => void;\r\n\r\n  /** Callback to render a tooltip for the column header */\r\n  onRenderColumnHeaderTooltip?: IRenderFunction<ITooltipHostProps>;\r\n\r\n  /** Whether to collapse for all visibility */\r\n  collapseAllVisibility?: CollapseAllVisibility;\r\n\r\n  /** Whether or not all is collapsed */\r\n  isAllCollapsed?: boolean;\r\n\r\n  /** Callback for when collapse all is toggled */\r\n  onToggleCollapseAll?: (isAllCollapsed: boolean) => void;\r\n\r\n  /** ariaLabel for the entire header */\r\n  ariaLabel?: string;\r\n\r\n  /** ariaLabel for expand/collapse group button */\r\n  ariaLabelForToggleAllGroupsButton?: string;\r\n\r\n  /** ariaLabel for the header checkbox that selects or deselects everything */\r\n  ariaLabelForSelectAllCheckbox?: string;\r\n\r\n  /** ariaLabel for the selection column */\r\n  ariaLabelForSelectionColumn?: string;\r\n\r\n  /** Select all button visibility */\r\n  selectAllVisibility?: SelectAllVisibility;\r\n\r\n  /** Column reordering options */\r\n  columnReorderOptions?: IColumnReorderOptions;\r\n\r\n  /** Column reordering options */\r\n  columnReorderProps?: IColumnReorderHeaderProps;\r\n\r\n  /** Minimum pixels to be moved before dragging is registered */\r\n  minimumPixelsForDrag?: number;\r\n\r\n  /** Overriding class name */\r\n  className?: string;\r\n\r\n  /** If provided, can be used to render a custom checkbox */\r\n  onRenderDetailsCheckbox?: IRenderFunction<IDetailsCheckboxProps>;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsHeaderProps extends IDetailsHeaderBaseProps {\r\n  /**\r\n   * Column metadata\r\n   */\r\n  columns: IColumn[];\r\n\r\n  /**\r\n   * Selection from utilities\r\n   */\r\n  selection: ISelection;\r\n\r\n  /**\r\n   * Selection mode\r\n   */\r\n  selectionMode: SelectionMode;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport enum SelectAllVisibility {\r\n  none = 0,\r\n  hidden = 1,\r\n  visible = 2\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsHeaderState {\r\n  columnReorderProps?: IColumnReorderHeaderProps;\r\n  columnResizeDetails?: IColumnResizeDetails;\r\n  isAllSelected?: boolean;\r\n  isSizing?: boolean;\r\n  groupNestingDepth?: number;\r\n  isAllCollapsed?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IColumnResizeDetails {\r\n  columnIndex: number;\r\n  originX?: number;\r\n  columnMinWidth: number;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IColumnReorderHeaderProps extends IColumnReorderOptions {\r\n  /** Callback to notify the column dragEnd event to List\r\n   * Need this to check whether the dragEnd has happened on\r\n   * corresponding list or outside of the list\r\n   */\r\n  onColumnDragEnd?: (props: { dropLocation?: ColumnDragEndLocation }, event: MouseEvent) => void;\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDropHintDetails {\r\n  originX: number; // X index of dropHint Element relative to header\r\n  startX: number; // start index of the range for the current drophint\r\n  endX: number; // end index of the range for the current drophint\r\n  dropHintElementRef: HTMLElement; // Reference for drophint to change the style when needed\r\n}\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport type IDetailsHeaderStyleProps = Required<Pick<IDetailsHeaderProps, 'theme'>> &\r\n  Pick<IDetailsHeaderProps, 'className'> & {\r\n    /** Whether to hide select all checkbox */\r\n    isSelectAllHidden?: boolean;\r\n\r\n    /** Whether the \"select all\" checkbox is checked */\r\n    isAllSelected?: boolean;\r\n\r\n    /** Is column being resized */\r\n    isResizingColumn?: boolean;\r\n\r\n    /** Are all columns collapsed */\r\n    isAllCollapsed?: boolean;\r\n\r\n    /** Whether the header is sizing */\r\n    isSizing?: boolean;\r\n\r\n    /** Whether checkbox is hidden  */\r\n    isCheckboxHidden?: boolean;\r\n\r\n    cellStyleProps?: ICellStyleProps;\r\n  };\r\n\r\n/**\r\n * {@docCategory DetailsList}\r\n */\r\nexport interface IDetailsHeaderStyles {\r\n  root: IStyle;\r\n  check: IStyle;\r\n  cellWrapperPadded: IStyle;\r\n  cellIsCheck: IStyle;\r\n  cellIsActionable: IStyle;\r\n  cellIsEmpty: IStyle;\r\n  cellSizer: IStyle;\r\n  cellSizerStart: IStyle;\r\n  cellSizerEnd: IStyle;\r\n  cellIsResizing: IStyle;\r\n  cellIsGroupExpander: IStyle;\r\n  collapseButton: IStyle;\r\n  checkTooltip: IStyle;\r\n  sizingOverlay: IStyle;\r\n  dropHintCircleStyle: IStyle;\r\n  dropHintCaretStyle: IStyle;\r\n  dropHintLineStyle: IStyle;\r\n  dropHintStyle: IStyle;\r\n  accessibleLabel: IStyle;\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction, IClassNames } from '../../Utilities';\r\nimport { IGroupedList, IGroupedListProps, IGroup, IGroupedListStyleProps, IGroupedListStyles } from './GroupedList.types';\r\nimport { GroupedListSection } from './GroupedListSection';\r\nimport { List, ScrollToMode, IListProps } from '../../List';\r\nimport { SelectionMode } from '../../utilities/selection/index';\r\nimport { DEFAULT_ROW_HEIGHTS } from '../DetailsList/DetailsRow.styles';\r\nimport { IGroupHeaderProps } from './GroupHeader';\r\nimport { IGroupShowAllProps } from './GroupShowAll.styles';\r\nimport { IGroupFooterProps } from './GroupFooter.types';\r\n\r\nconst getClassNames = classNamesFunction<IGroupedListStyleProps, IGroupedListStyles>();\r\nconst { rowHeight: ROW_HEIGHT, compactRowHeight: COMPACT_ROW_HEIGHT } = DEFAULT_ROW_HEIGHTS;\r\n\r\nexport interface IGroupedListState {\r\n  lastWidth?: number;\r\n  lastSelectionMode?: SelectionMode;\r\n  groups?: IGroup[];\r\n}\r\n\r\nexport class GroupedListBase extends BaseComponent<IGroupedListProps, IGroupedListState> implements IGroupedList {\r\n  public static defaultProps = {\r\n    selectionMode: SelectionMode.multiple,\r\n    isHeaderVisible: true,\r\n    groupProps: {},\r\n    compact: false\r\n  };\r\n\r\n  public refs: {\r\n    [key: string]: React.ReactInstance;\r\n  };\r\n\r\n  private _classNames: IClassNames<IGroupedListStyles>;\r\n\r\n  private _list = React.createRef<List>();\r\n\r\n  private _isSomeGroupExpanded: boolean;\r\n\r\n  constructor(props: IGroupedListProps) {\r\n    super(props);\r\n\r\n    this._isSomeGroupExpanded = this._computeIsSomeGroupExpanded(props.groups);\r\n\r\n    this.state = {\r\n      lastWidth: 0,\r\n      groups: props.groups\r\n    };\r\n  }\r\n\r\n  public scrollToIndex(index: number, measureItem?: (itemIndex: number) => number, scrollToMode?: ScrollToMode): void {\r\n    if (this._list.current) {\r\n      this._list.current.scrollToIndex(index, measureItem, scrollToMode);\r\n    }\r\n  }\r\n\r\n  public getStartItemIndexInView(): number {\r\n    return this._list.current!.getStartItemIndexInView() || 0;\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IGroupedListProps): void {\r\n    const { groups, selectionMode, compact } = this.props;\r\n    let shouldForceUpdates = false;\r\n\r\n    if (newProps.groups !== groups) {\r\n      this.setState({ groups: newProps.groups });\r\n      shouldForceUpdates = true;\r\n    }\r\n\r\n    if (newProps.selectionMode !== selectionMode || newProps.compact !== compact) {\r\n      shouldForceUpdates = true;\r\n    }\r\n\r\n    if (shouldForceUpdates) {\r\n      this._forceListUpdates();\r\n    }\r\n  }\r\n\r\n  public componentDidMount() {\r\n    const { groupProps, groups = [] } = this.props;\r\n\r\n    if (groupProps && groupProps.isAllGroupsCollapsed) {\r\n      this._setGroupsCollapsedState(groups, groupProps.isAllGroupsCollapsed);\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, usePageCache, onShouldVirtualize, theme, styles, compact } = this.props;\r\n    const { groups } = this.state;\r\n    this._classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className,\r\n      compact: compact\r\n    });\r\n\r\n    return (\r\n      <div className={this._classNames.root} data-automationid=\"GroupedList\" data-is-scrollable=\"false\" role=\"presentation\">\r\n        {!groups ? (\r\n          this._renderGroup(undefined, 0)\r\n        ) : (\r\n          <List\r\n            ref={this._list}\r\n            role=\"presentation\"\r\n            items={groups}\r\n            onRenderCell={this._renderGroup}\r\n            getItemCountForPage={this._returnOne}\r\n            getPageHeight={this._getPageHeight}\r\n            getPageSpecification={this._getPageSpecification}\r\n            usePageCache={usePageCache}\r\n            onShouldVirtualize={onShouldVirtualize}\r\n          />\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public forceUpdate() {\r\n    super.forceUpdate();\r\n    this._forceListUpdates();\r\n  }\r\n\r\n  public toggleCollapseAll(allCollapsed: boolean): void {\r\n    const { groups = [] } = this.state;\r\n    const { groupProps } = this.props;\r\n    const onToggleCollapseAll = groupProps && groupProps.onToggleCollapseAll;\r\n\r\n    if (groups.length > 0) {\r\n      if (onToggleCollapseAll) {\r\n        onToggleCollapseAll(allCollapsed);\r\n      }\r\n\r\n      this._setGroupsCollapsedState(groups, allCollapsed);\r\n\r\n      this._updateIsSomeGroupExpanded();\r\n\r\n      this.forceUpdate();\r\n    }\r\n  }\r\n\r\n  private _setGroupsCollapsedState(groups: IGroup[], isCollapsed: boolean): void {\r\n    for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\r\n      groups[groupIndex].isCollapsed = isCollapsed;\r\n    }\r\n  }\r\n\r\n  private _renderGroup = (group: IGroup | undefined, groupIndex: number): React.ReactNode => {\r\n    const {\r\n      dragDropEvents,\r\n      dragDropHelper,\r\n      eventsToRegister,\r\n      groupProps,\r\n      items,\r\n      listProps,\r\n      onRenderCell,\r\n      selectionMode,\r\n      selection,\r\n      viewport,\r\n      onShouldVirtualize,\r\n      groups,\r\n      compact\r\n    } = this.props;\r\n\r\n    // override group header/footer props as needed\r\n    const dividerProps = {\r\n      onToggleSelectGroup: this._onToggleSelectGroup,\r\n      onToggleCollapse: this._onToggleCollapse,\r\n      onToggleSummarize: this._onToggleSummarize\r\n    };\r\n\r\n    const headerProps: IGroupHeaderProps = { ...groupProps!.headerProps, ...dividerProps };\r\n    const showAllProps: IGroupShowAllProps = { ...groupProps!.showAllProps, ...dividerProps };\r\n    const footerProps: IGroupFooterProps = { ...groupProps!.footerProps, ...dividerProps };\r\n    const groupNestingDepth = this._getGroupNestingDepth();\r\n\r\n    if (!groupProps!.showEmptyGroups && group && group.count === 0) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <GroupedListSection\r\n        ref={'group_' + groupIndex}\r\n        key={this._getGroupKey(group, groupIndex)}\r\n        dragDropEvents={dragDropEvents}\r\n        dragDropHelper={dragDropHelper}\r\n        eventsToRegister={eventsToRegister}\r\n        footerProps={footerProps}\r\n        getGroupItemLimit={groupProps && groupProps.getGroupItemLimit}\r\n        group={group}\r\n        groupIndex={groupIndex}\r\n        groupNestingDepth={groupNestingDepth}\r\n        groupProps={groupProps}\r\n        headerProps={headerProps}\r\n        listProps={listProps}\r\n        items={items}\r\n        onRenderCell={onRenderCell}\r\n        onRenderGroupHeader={groupProps!.onRenderHeader}\r\n        onRenderGroupShowAll={groupProps!.onRenderShowAll}\r\n        onRenderGroupFooter={groupProps!.onRenderFooter}\r\n        selectionMode={selectionMode}\r\n        selection={selection}\r\n        showAllProps={showAllProps}\r\n        viewport={viewport}\r\n        onShouldVirtualize={onShouldVirtualize}\r\n        groupedListClassNames={this._classNames}\r\n        groups={groups}\r\n        compact={compact}\r\n      />\r\n    );\r\n  };\r\n\r\n  private _returnOne(): number {\r\n    return 1;\r\n  }\r\n\r\n  private _getDefaultGroupItemLimit = (group: IGroup): number => {\r\n    return group.count;\r\n  };\r\n\r\n  private _getGroupItemLimit = (group: IGroup): number => {\r\n    const { groupProps } = this.props;\r\n    const getGroupItemLimit = groupProps && groupProps.getGroupItemLimit ? groupProps.getGroupItemLimit : this._getDefaultGroupItemLimit;\r\n\r\n    return getGroupItemLimit(group);\r\n  };\r\n\r\n  private _getGroupHeight = (group: IGroup): number => {\r\n    const rowHeight = this.props.compact ? COMPACT_ROW_HEIGHT : ROW_HEIGHT;\r\n\r\n    return rowHeight + (group.isCollapsed ? 0 : rowHeight * this._getGroupItemLimit(group));\r\n  };\r\n\r\n  private _getPageHeight: IListProps['getPageHeight'] = (itemIndex: number) => {\r\n    const { groups } = this.state;\r\n    const { getGroupHeight = this._getGroupHeight } = this.props;\r\n    const pageGroup = groups && groups[itemIndex];\r\n\r\n    if (pageGroup) {\r\n      return getGroupHeight(pageGroup, itemIndex);\r\n    } else {\r\n      return 0;\r\n    }\r\n  };\r\n\r\n  private _getGroupKey(group: IGroup | undefined, index: number): string {\r\n    return 'group-' + (group && group.key ? group.key : String(index));\r\n  }\r\n\r\n  private _getGroupNestingDepth(): number {\r\n    const { groups } = this.state;\r\n    let level = 0;\r\n    let groupsInLevel = groups;\r\n\r\n    while (groupsInLevel && groupsInLevel.length > 0) {\r\n      level++;\r\n      groupsInLevel = groupsInLevel[0].children;\r\n    }\r\n\r\n    return level;\r\n  }\r\n\r\n  private _onToggleCollapse = (group: IGroup): void => {\r\n    const { groupProps } = this.props;\r\n    const onToggleCollapse = groupProps && groupProps.headerProps && groupProps.headerProps.onToggleCollapse;\r\n\r\n    if (group) {\r\n      if (onToggleCollapse) {\r\n        onToggleCollapse(group);\r\n      }\r\n\r\n      group.isCollapsed = !group.isCollapsed;\r\n      this._updateIsSomeGroupExpanded();\r\n      this.forceUpdate();\r\n    }\r\n  };\r\n\r\n  private _onToggleSelectGroup = (group: IGroup): void => {\r\n    if (group) {\r\n      this.props.selection!.toggleRangeSelected(group.startIndex, group.count);\r\n    }\r\n  };\r\n\r\n  private _forceListUpdates(groups?: IGroup[]): void {\r\n    groups = groups || this.state.groups;\r\n\r\n    const groupCount = groups ? groups.length : 1;\r\n\r\n    if (this._list.current) {\r\n      this._list.current.forceUpdate();\r\n\r\n      for (let i = 0; i < groupCount; i++) {\r\n        const group = this._list.current.refs['group_' + String(i)] as GroupedListSection;\r\n        if (group) {\r\n          group.forceListUpdate();\r\n        }\r\n      }\r\n    } else {\r\n      const group = this.refs['group_' + String(0)] as GroupedListSection;\r\n      if (group) {\r\n        group.forceListUpdate();\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onToggleSummarize = (group: IGroup): void => {\r\n    const { groupProps } = this.props;\r\n    const onToggleSummarize = groupProps && groupProps.showAllProps && groupProps.showAllProps.onToggleSummarize;\r\n\r\n    if (onToggleSummarize) {\r\n      onToggleSummarize(group);\r\n    } else {\r\n      if (group) {\r\n        group.isShowingAll = !group.isShowingAll;\r\n      }\r\n\r\n      this.forceUpdate();\r\n    }\r\n  };\r\n\r\n  private _getPageSpecification = (\r\n    itemIndex: number\r\n  ): {\r\n    key?: string;\r\n  } => {\r\n    const groups = this.state.groups;\r\n    const pageGroup = groups && groups[itemIndex];\r\n    return {\r\n      key: pageGroup && pageGroup.key\r\n    };\r\n  };\r\n\r\n  private _computeIsSomeGroupExpanded(groups: IGroup[] | undefined): boolean {\r\n    return !!(groups && groups.some(group => (group.children ? this._computeIsSomeGroupExpanded(group.children) : !group.isCollapsed)));\r\n  }\r\n\r\n  private _updateIsSomeGroupExpanded(): void {\r\n    const { groups } = this.state;\r\n    const { onGroupExpandStateChanged } = this.props;\r\n\r\n    const newIsSomeGroupExpanded = this._computeIsSomeGroupExpanded(groups);\r\n    if (this._isSomeGroupExpanded !== newIsSomeGroupExpanded) {\r\n      if (onGroupExpandStateChanged) {\r\n        onGroupExpandStateChanged(newIsSomeGroupExpanded);\r\n      }\r\n      this._isSomeGroupExpanded = newIsSomeGroupExpanded;\r\n    }\r\n  }\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { getStyles } from './GroupedList.styles';\r\nimport { GroupedListBase } from './GroupedList.base';\r\nimport { IGroupedListProps, IGroupedListStyles, IGroupedListStyleProps } from './GroupedList.types';\r\nexport { IGroupedListProps };\r\n\r\nexport const GroupedList: React.StatelessComponent<IGroupedListProps> = styled<\r\n  IGroupedListProps,\r\n  IGroupedListStyleProps,\r\n  IGroupedListStyles\r\n>(GroupedListBase, getStyles, undefined, {\r\n  scope: 'GroupedList'\r\n});\r\n","import { IDetailsHeaderStyleProps, IDetailsHeaderStyles } from './DetailsHeader.types';\r\nimport {\r\n  getFocusStyle,\r\n  focusClear,\r\n  IStyle,\r\n  getGlobalClassNames,\r\n  HighContrastSelector,\r\n  hiddenContentStyle,\r\n  ITheme,\r\n  FontSizes\r\n} from '../../Styling';\r\nimport { IsFocusVisibleClassName } from '../../Utilities';\r\nimport { DEFAULT_CELL_STYLE_PROPS } from './DetailsRow.styles';\r\nimport { ICellStyleProps } from './DetailsRow.types';\r\n// For every group level there is a GroupSpacer added. Importing this const to have the source value in one place.\r\nimport { SPACER_WIDTH as GROUP_EXPANDER_WIDTH } from '../GroupedList/GroupSpacer';\r\n\r\nconst GlobalClassNames = {\r\n  tooltipHost: 'ms-TooltipHost',\r\n  root: 'ms-DetailsHeader',\r\n  cell: 'ms-DetailsHeader-cell',\r\n  cellIsCheck: 'ms-DetailsHeader-cellIsCheck',\r\n  collapseButton: 'ms-DetailsHeader-collapseButton',\r\n  isCollapsed: 'is-collapsed',\r\n  isAllSelected: 'is-allSelected',\r\n  isSelectAllHidden: 'is-selectAllHidden',\r\n  isResizingColumn: 'is-resizingColumn',\r\n  cellSizer: 'ms-DetailsHeader-cellSizer',\r\n  isResizing: 'is-resizing',\r\n  dropHintCircleStyle: 'ms-DetailsHeader-dropHintCircleStyle',\r\n  dropHintCaretStyle: 'ms-DetailsHeader-dropHintCaretStyle',\r\n  dropHintLineStyle: 'ms-DetailsHeader-dropHintLineStyle',\r\n  cellTitle: 'ms-DetailsHeader-cellTitle',\r\n  cellName: 'ms-DetailsHeader-cellName',\r\n  filterChevron: 'ms-DetailsHeader-filterChevron',\r\n  gripperBarVertical: 'ms-DetailsColumn-gripperBarVertical'\r\n};\r\n\r\nexport const HEADER_HEIGHT = 32;\r\n\r\nexport const getCellStyles = (props: { theme: ITheme; cellStyleProps?: ICellStyleProps }): IStyle => {\r\n  const { theme, cellStyleProps = DEFAULT_CELL_STYLE_PROPS } = props;\r\n  const { semanticColors } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return [\r\n    classNames.cell,\r\n    getFocusStyle(theme),\r\n    {\r\n      color: semanticColors.bodyText,\r\n      position: 'relative',\r\n      display: 'inline-block',\r\n      boxSizing: 'border-box',\r\n      padding: `0 ${cellStyleProps.cellRightPadding}px 0 ${cellStyleProps.cellLeftPadding}px`,\r\n      lineHeight: 'inherit',\r\n      margin: '0',\r\n      height: HEADER_HEIGHT,\r\n      verticalAlign: 'top',\r\n      whiteSpace: 'nowrap',\r\n      textOverflow: 'ellipsis',\r\n      textAlign: 'left'\r\n    }\r\n  ];\r\n};\r\n\r\nexport const getStyles = (props: IDetailsHeaderStyleProps): IDetailsHeaderStyles => {\r\n  const {\r\n    theme,\r\n    className,\r\n    isSelectAllHidden,\r\n    isAllSelected,\r\n    isResizingColumn,\r\n    isSizing,\r\n    isAllCollapsed,\r\n    cellStyleProps = DEFAULT_CELL_STYLE_PROPS\r\n  } = props;\r\n\r\n  const { semanticColors, palette } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const colors = {\r\n    iconForegroundColor: semanticColors.bodySubtext,\r\n    headerForegroundColor: semanticColors.bodyText,\r\n    headerBackgroundColor: semanticColors.bodyBackground,\r\n    dropdownChevronForegroundColor: palette.neutralTertiary,\r\n    resizerColor: palette.neutralTertiaryAlt\r\n  };\r\n\r\n  const cellSizerFadeInStyles: IStyle = {\r\n    opacity: 1,\r\n    transition: 'opacity 0.3s linear'\r\n  };\r\n\r\n  const cellStyles = getCellStyles(props);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.small,\r\n      {\r\n        display: 'inline-block',\r\n        background: colors.headerBackgroundColor,\r\n        position: 'relative',\r\n        minWidth: '100%',\r\n        verticalAlign: 'top',\r\n        height: HEADER_HEIGHT,\r\n        lineHeight: HEADER_HEIGHT,\r\n        whiteSpace: 'nowrap',\r\n        boxSizing: 'content-box',\r\n        paddingBottom: '1px',\r\n        paddingTop: '1px',\r\n        borderBottom: `1px solid ${semanticColors.bodyDivider}`,\r\n        cursor: 'default',\r\n        userSelect: 'none',\r\n        selectors: {\r\n          '&:hover $check': {\r\n            opacity: 1\r\n          },\r\n          [`${classNames.tooltipHost} $checkTooltip`]: {\r\n            display: 'block'\r\n          }\r\n        }\r\n      },\r\n      isAllSelected && classNames.isAllSelected,\r\n      isSelectAllHidden && {\r\n        selectors: {\r\n          $cell$cellIsCheck: {\r\n            visibility: 'hidden'\r\n          }\r\n        }\r\n      },\r\n      isResizingColumn && classNames.isResizingColumn,\r\n      className\r\n    ],\r\n\r\n    check: [\r\n      {\r\n        height: HEADER_HEIGHT\r\n      },\r\n      {\r\n        selectors: {\r\n          [`.${IsFocusVisibleClassName} &:focus`]: {\r\n            opacity: 1\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    cellWrapperPadded: [\r\n      {\r\n        paddingRight: cellStyleProps.cellExtraRightPadding + cellStyleProps.cellRightPadding\r\n      }\r\n    ],\r\n\r\n    cellIsCheck: [\r\n      cellStyles,\r\n      classNames.cellIsCheck,\r\n      {\r\n        position: 'relative',\r\n        padding: 0,\r\n        margin: 0,\r\n        display: 'inline-flex',\r\n        alignItems: 'center',\r\n        border: 'none'\r\n      },\r\n      isAllSelected && {\r\n        opacity: 1\r\n      }\r\n    ],\r\n\r\n    cellIsGroupExpander: [\r\n      cellStyles,\r\n      {\r\n        display: 'inline-flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        fontSize: FontSizes.small,\r\n        padding: 0,\r\n        border: 'none',\r\n        width: GROUP_EXPANDER_WIDTH, // align with GroupedList's first expandIcon cell width.\r\n        color: palette.neutralSecondary,\r\n        selectors: {\r\n          ':hover': {\r\n            backgroundColor: palette.neutralLighter\r\n          },\r\n          ':active': {\r\n            backgroundColor: palette.neutralLight\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    cellIsActionable: [\r\n      {\r\n        selectors: {\r\n          ':hover': {\r\n            color: semanticColors.bodyText,\r\n            background: semanticColors.listHeaderBackgroundHovered\r\n          },\r\n          ':active': {\r\n            background: semanticColors.listHeaderBackgroundPressed\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    cellIsEmpty: [\r\n      {\r\n        textOverflow: 'clip'\r\n      }\r\n    ],\r\n\r\n    cellSizer: [\r\n      classNames.cellSizer,\r\n      focusClear(),\r\n      {\r\n        display: 'inline-block',\r\n        position: 'relative',\r\n        cursor: 'ew-resize',\r\n        bottom: 0,\r\n        top: 0,\r\n        overflow: 'hidden',\r\n        height: 'inherit',\r\n        background: 'transparent',\r\n        zIndex: 1,\r\n        width: 16,\r\n        selectors: {\r\n          ':after': {\r\n            content: '\"\"',\r\n            position: 'absolute',\r\n            top: 0,\r\n            bottom: 0,\r\n            width: 1,\r\n            background: colors.resizerColor,\r\n            opacity: 0,\r\n            left: '50%'\r\n          },\r\n          ':focus:after': cellSizerFadeInStyles,\r\n          ':hover:after': cellSizerFadeInStyles,\r\n          '&$cellIsResizing:after': [\r\n            cellSizerFadeInStyles,\r\n            {\r\n              boxShadow: '0 0 5px 0 rgba(0, 0, 0, 0.4)'\r\n            }\r\n          ]\r\n        }\r\n      }\r\n    ],\r\n\r\n    cellIsResizing: [classNames.isResizing],\r\n\r\n    cellSizerStart: [\r\n      {\r\n        margin: '0 -8px'\r\n      }\r\n    ],\r\n\r\n    cellSizerEnd: [\r\n      {\r\n        margin: 0,\r\n        marginLeft: -16\r\n      }\r\n    ],\r\n\r\n    collapseButton: [\r\n      classNames.collapseButton,\r\n      isAllCollapsed\r\n        ? [\r\n            classNames.isCollapsed,\r\n            {\r\n              transform: 'rotate(0deg)',\r\n              transformOrigin: '50% 50%',\r\n              transition: 'transform .1s linear'\r\n            }\r\n          ]\r\n        : {\r\n            transform: 'rotate(90deg)',\r\n            transformOrigin: '50% 50%',\r\n            transition: 'transform .1s linear'\r\n          }\r\n    ],\r\n\r\n    checkTooltip: [],\r\n\r\n    sizingOverlay: [\r\n      isSizing && {\r\n        position: 'absolute',\r\n        left: 0,\r\n        top: 0,\r\n        right: 0,\r\n        bottom: 0,\r\n        cursor: 'ew-resize',\r\n        background: 'rgba(255, 255, 255, 0)',\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            background: 'transparent',\r\n            MsHighContrastAdjust: 'none'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    accessibleLabel: [hiddenContentStyle],\r\n\r\n    dropHintCircleStyle: [\r\n      classNames.dropHintCircleStyle,\r\n      {\r\n        display: 'inline-block',\r\n        visibility: 'hidden',\r\n        position: 'absolute',\r\n        bottom: 0,\r\n        height: 9,\r\n        width: 9,\r\n        borderRadius: '50%',\r\n        marginLeft: -5,\r\n        top: 34,\r\n        overflow: 'visible',\r\n        zIndex: 10,\r\n        border: `1px solid ${palette.themePrimary}`,\r\n        background: palette.white\r\n      }\r\n    ],\r\n\r\n    dropHintCaretStyle: [\r\n      classNames.dropHintCaretStyle,\r\n      {\r\n        display: 'none',\r\n        position: 'absolute',\r\n        top: 22,\r\n        left: -7.5,\r\n        fontSize: 16,\r\n        color: palette.themePrimary,\r\n        overflow: 'visible',\r\n        zIndex: 10\r\n      }\r\n    ],\r\n\r\n    dropHintLineStyle: [\r\n      classNames.dropHintLineStyle,\r\n      {\r\n        display: 'none',\r\n        position: 'absolute',\r\n        bottom: 0,\r\n        top: -3,\r\n        overflow: 'hidden',\r\n        height: 37,\r\n        width: 1,\r\n        background: palette.themePrimary,\r\n        zIndex: 10\r\n      }\r\n    ],\r\n\r\n    dropHintStyle: [\r\n      {\r\n        display: 'inline-block',\r\n        position: 'absolute'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { getGlobalClassNames, getFocusStyle } from '../../Styling';\r\nimport { IDetailsRowCheckStyleProps, IDetailsRowCheckStyles } from './DetailsRowCheck.types';\r\nimport { DEFAULT_ROW_HEIGHTS } from './DetailsRow.styles';\r\nimport { HEADER_HEIGHT } from './DetailsHeader.styles';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-DetailsRow-check',\r\n  isDisabled: 'ms-DetailsRow-check--isDisabled',\r\n  isHeader: 'ms-DetailsRow-check--isHeader'\r\n};\r\n\r\nexport const getStyles = (props: IDetailsRowCheckStyleProps): IDetailsRowCheckStyles => {\r\n  const { theme, className, isHeader, selected, anySelected, canSelect, compact, isVisible } = props;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n  const { rowHeight, compactRowHeight } = DEFAULT_ROW_HEIGHTS;\r\n\r\n  const height = isHeader ? HEADER_HEIGHT : compact ? compactRowHeight : rowHeight;\r\n\r\n  const isCheckVisible = isVisible || selected || anySelected;\r\n\r\n  return {\r\n    root: [classNames.root, className],\r\n\r\n    check: [\r\n      !canSelect && classNames.isDisabled,\r\n      isHeader && classNames.isHeader,\r\n      getFocusStyle(theme),\r\n      theme.fonts.small,\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        cursor: 'default',\r\n        boxSizing: 'border-box',\r\n        verticalAlign: 'top',\r\n        background: 'none',\r\n        backgroundColor: 'transparent',\r\n        border: 'none',\r\n        opacity: 0,\r\n        height: height,\r\n        width: 40,\r\n        padding: 0,\r\n        margin: 0,\r\n        selectors: {\r\n          '&:hover': {\r\n            opacity: 1\r\n          }\r\n        }\r\n      },\r\n\r\n      isCheckVisible && {\r\n        opacity: 1\r\n      }\r\n    ],\r\n\r\n    isDisabled: []\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { IDetailsRowCheckProps, IDetailsCheckboxProps } from './DetailsRowCheck.types';\r\nimport { css, styled } from '../../Utilities';\r\nimport { Check } from '../../Check';\r\nimport { ICheckStyleProps, ICheckStyles } from '../Check/Check.types';\r\nimport { getStyles as getCheckStyles } from '../Check/Check.styles';\r\nimport { getStyles } from './DetailsRowCheck.styles';\r\nimport { IDetailsRowCheckStyleProps, IDetailsRowCheckStyles } from './DetailsRowCheck.types';\r\nimport { classNamesFunction } from '../../Utilities';\r\n\r\nconst getCheckClassNames = classNamesFunction<ICheckStyleProps, ICheckStyles>();\r\nconst getClassNames = classNamesFunction<IDetailsRowCheckStyleProps, IDetailsRowCheckStyles>();\r\n\r\nconst DetailsRowCheckBase = (props: IDetailsRowCheckProps) => {\r\n  const {\r\n    isVisible = false,\r\n    canSelect = false,\r\n    isSelected = false,\r\n    anySelected = false,\r\n    selected = false,\r\n    isHeader = false,\r\n    className,\r\n    checkClassName,\r\n    styles,\r\n    theme,\r\n    compact,\r\n    onRenderDetailsCheckbox,\r\n    ...buttonProps\r\n  } = props;\r\n\r\n  const isPressed = isSelected || selected;\r\n\r\n  const checkStyles = getCheckStyles({ theme: theme! });\r\n\r\n  const checkClassNames = getCheckClassNames(checkStyles, {\r\n    theme: theme!\r\n  });\r\n\r\n  const classNames = getClassNames(styles, {\r\n    theme: theme!,\r\n    canSelect,\r\n    selected: isPressed,\r\n    anySelected,\r\n    className,\r\n    isHeader,\r\n    isVisible,\r\n    compact\r\n  });\r\n\r\n  const defaultCheckboxRender = (checkboxProps: IDetailsCheckboxProps) => {\r\n    return <Check checked={checkboxProps.checked} />;\r\n  };\r\n\r\n  const detailsCheckboxProps: IDetailsCheckboxProps = {\r\n    checked: isPressed\r\n  };\r\n\r\n  return canSelect ? (\r\n    <div\r\n      {...buttonProps}\r\n      role=\"checkbox\"\r\n      className={css(classNames.root, classNames.check, checkClassNames.checkHost)}\r\n      aria-checked={isPressed}\r\n      data-selection-toggle={true}\r\n      data-automationid=\"DetailsRowCheck\"\r\n    >\r\n      {onRenderDetailsCheckbox\r\n        ? onRenderDetailsCheckbox(detailsCheckboxProps, defaultCheckboxRender)\r\n        : defaultCheckboxRender(detailsCheckboxProps)}\r\n    </div>\r\n  ) : (\r\n    <div {...buttonProps} className={css(classNames.root, classNames.check)} />\r\n  );\r\n};\r\n\r\nexport const DetailsRowCheck = styled<IDetailsRowCheckProps, IDetailsRowCheckStyleProps, IDetailsRowCheckStyles>(\r\n  DetailsRowCheckBase,\r\n  getStyles,\r\n  undefined,\r\n  { scope: 'DetailsRowCheck' }\r\n);\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { EventGroup } from '../../Utilities';\r\nimport { IDragDropHelper, IDragDropTarget, IDragDropOptions, IDragDropEvent, IDragDropContext } from './interfaces';\r\nimport { ISelection } from '../../utilities/selection/interfaces';\r\n\r\nconst MOUSEDOWN_PRIMARY_BUTTON = 0; // for mouse down event we are using ev.button property, 0 means left button\r\nconst MOUSEMOVE_PRIMARY_BUTTON = 1; // for mouse move event we are using ev.buttons property, 1 means left button\r\n\r\nexport interface IDragDropHelperParams {\r\n  selection: ISelection;\r\n  minimumPixelsForDrag?: number;\r\n}\r\n\r\nexport class DragDropHelper implements IDragDropHelper {\r\n  private _dragEnterCounts: { [key: string]: number };\r\n  private _isDragging: boolean;\r\n  private _dragData: {\r\n    eventTarget: EventTarget | null;\r\n    clientX: number;\r\n    clientY: number;\r\n    dataTransfer?: DataTransfer;\r\n    dropTarget?: IDragDropTarget;\r\n    dragTarget?: IDragDropTarget;\r\n  } | null;\r\n  private _selection: ISelection;\r\n  private _activeTargets: {\r\n    [key: string]: {\r\n      target: IDragDropTarget;\r\n      dispose: () => void;\r\n    };\r\n  };\r\n  private _events: EventGroup;\r\n  private _lastId: number;\r\n\r\n  constructor(params: IDragDropHelperParams) {\r\n    this._selection = params.selection;\r\n    this._dragEnterCounts = {};\r\n    this._activeTargets = {};\r\n    this._lastId = 0;\r\n\r\n    this._events = new EventGroup(this);\r\n    // clear drag data when mouse up, use capture event to ensure it will be run\r\n    this._events.on(document.body, 'mouseup', this._onMouseUp.bind(this), true);\r\n    this._events.on(document, 'mouseup', this._onDocumentMouseUp.bind(this), true);\r\n  }\r\n\r\n  public dispose(): void {\r\n    this._events.dispose();\r\n  }\r\n\r\n  public subscribe(\r\n    root: HTMLElement,\r\n    events: EventGroup,\r\n    dragDropOptions: IDragDropOptions\r\n  ): {\r\n    key: string;\r\n    dispose(): void;\r\n  } {\r\n    const { key = `${++this._lastId}` } = dragDropOptions;\r\n\r\n    const handlers: {\r\n      callback: (context: IDragDropContext, event?: any) => void;\r\n      eventName: string;\r\n    }[] = [];\r\n\r\n    let onDragStart: (event: DragEvent) => void;\r\n    let onDragLeave: (event: DragEvent) => void;\r\n    let onDragEnter: (event: DragEvent) => void;\r\n    let onDragEnd: (event: DragEvent) => void;\r\n    let onDrop: (event: DragEvent) => void;\r\n    let onDragOver: (event: DragEvent) => void;\r\n    let onMouseDown: (event: MouseEvent) => void;\r\n\r\n    let isDraggable: boolean;\r\n    let isDroppable: boolean;\r\n\r\n    let activeTarget: {\r\n      target: IDragDropTarget;\r\n      dispose: () => void;\r\n    };\r\n\r\n    if (dragDropOptions && root) {\r\n      const { eventMap, context, updateDropState } = dragDropOptions;\r\n\r\n      const dragDropTarget: IDragDropTarget = {\r\n        root: root,\r\n        options: dragDropOptions,\r\n        key: key\r\n      };\r\n\r\n      isDraggable = this._isDraggable(dragDropTarget);\r\n      isDroppable = this._isDroppable(dragDropTarget);\r\n\r\n      if (isDraggable || isDroppable) {\r\n        if (eventMap) {\r\n          for (const event of eventMap) {\r\n            const handler = {\r\n              callback: event.callback.bind(null, context),\r\n              eventName: event.eventName\r\n            };\r\n\r\n            handlers.push(handler);\r\n\r\n            this._events.on(root, handler.eventName, handler.callback);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (isDroppable) {\r\n        // If the target is droppable, wire up global event listeners to track drop-related events.\r\n        onDragLeave = (event: DragEvent) => {\r\n          if (!(event as IDragDropEvent).isHandled) {\r\n            (event as IDragDropEvent).isHandled = true;\r\n            this._dragEnterCounts[key]--;\r\n            if (this._dragEnterCounts[key] === 0) {\r\n              updateDropState(false /* isDropping */, event);\r\n            }\r\n          }\r\n        };\r\n\r\n        onDragEnter = (event: DragEvent) => {\r\n          event.preventDefault(); // needed for IE\r\n          if (!(event as IDragDropEvent).isHandled) {\r\n            (event as IDragDropEvent).isHandled = true;\r\n            this._dragEnterCounts[key]++;\r\n            if (this._dragEnterCounts[key] === 1) {\r\n              updateDropState(true /* isDropping */, event);\r\n            }\r\n          }\r\n        };\r\n\r\n        onDragEnd = (event: DragEvent) => {\r\n          this._dragEnterCounts[key] = 0;\r\n          updateDropState(false /* isDropping */, event);\r\n        };\r\n\r\n        onDrop = (event: DragEvent) => {\r\n          this._dragEnterCounts[key] = 0;\r\n          updateDropState(false /* isDropping */, event);\r\n\r\n          if (dragDropOptions.onDrop) {\r\n            dragDropOptions.onDrop(dragDropOptions.context.data, event);\r\n          }\r\n        };\r\n\r\n        onDragOver = (event: DragEvent) => {\r\n          event.preventDefault();\r\n          if (dragDropOptions.onDragOver) {\r\n            dragDropOptions.onDragOver(dragDropOptions.context.data, event);\r\n          }\r\n        };\r\n\r\n        this._dragEnterCounts[key] = 0;\r\n\r\n        // dragenter and dragleave will be fired when hover to the child element\r\n        // but we only want to change state when enter or leave the current element\r\n        // use the count to ensure it.\r\n        events.on(root, 'dragenter', onDragEnter);\r\n        events.on(root, 'dragleave', onDragLeave);\r\n        events.on(root, 'dragend', onDragEnd);\r\n        events.on(root, 'drop', onDrop);\r\n        events.on(root, 'dragover', onDragOver);\r\n      }\r\n\r\n      if (isDraggable) {\r\n        // If the target is draggable, wire up local event listeners for mouse events.\r\n        onMouseDown = this._onMouseDown.bind(this, dragDropTarget);\r\n        onDragEnd = this._onDragEnd.bind(this, dragDropTarget);\r\n\r\n        // We need to add in data so that on Firefox we show the ghost element when dragging\r\n        onDragStart = (event: DragEvent) => {\r\n          const { options } = this._dragData!.dragTarget!;\r\n          if (options && options.onDragStart) {\r\n            options.onDragStart(options.context.data, options.context.index, this._selection.getSelection(), event);\r\n          }\r\n          this._isDragging = true;\r\n          event.dataTransfer.setData('id', root.id);\r\n        };\r\n\r\n        events.on(root, 'dragstart', onDragStart);\r\n        events.on(root, 'mousedown', onMouseDown);\r\n        events.on(root, 'dragend', onDragEnd);\r\n      }\r\n\r\n      activeTarget = {\r\n        target: dragDropTarget,\r\n        dispose: () => {\r\n          if (this._activeTargets[key] === activeTarget) {\r\n            delete this._activeTargets[key];\r\n          }\r\n\r\n          if (root) {\r\n            for (const handler of handlers) {\r\n              this._events.off(root, handler.eventName, handler.callback);\r\n            }\r\n\r\n            if (isDroppable) {\r\n              events.off(root, 'dragenter', onDragEnter);\r\n              events.off(root, 'dragleave', onDragLeave);\r\n              events.off(root, 'dragend', onDragEnd);\r\n              events.off(root, 'dragover', onDragOver);\r\n              events.off(root, 'drop', onDrop);\r\n            }\r\n\r\n            if (isDraggable) {\r\n              events.off(root, 'dragstart', onDragStart);\r\n              events.off(root, 'mousedown', onMouseDown);\r\n              events.off(root, 'dragend', onDragEnd);\r\n            }\r\n          }\r\n        }\r\n      };\r\n\r\n      this._activeTargets[key] = activeTarget;\r\n    }\r\n\r\n    return {\r\n      key: key,\r\n      dispose: () => {\r\n        if (activeTarget) {\r\n          activeTarget.dispose();\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  public unsubscribe(root: HTMLElement, key: string): void {\r\n    const activeTarget = this._activeTargets[key];\r\n\r\n    if (activeTarget) {\r\n      activeTarget.dispose();\r\n    }\r\n  }\r\n\r\n  private _onDragEnd(target: IDragDropTarget, event: DragEvent): void {\r\n    const { options } = target;\r\n    if (options.onDragEnd) {\r\n      options.onDragEnd(options.context.data, event);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * clear drag data when mouse up on body\r\n   */\r\n  private _onMouseUp(event: MouseEvent): void {\r\n    this._isDragging = false;\r\n    if (this._dragData) {\r\n      for (const key of Object.keys(this._activeTargets)) {\r\n        const activeTarget = this._activeTargets[key];\r\n\r\n        if (activeTarget.target.root) {\r\n          this._events.off(activeTarget.target.root, 'mousemove');\r\n          this._events.off(activeTarget.target.root, 'mouseleave');\r\n        }\r\n      }\r\n\r\n      if (this._dragData.dropTarget) {\r\n        // raise dragleave event to let dropTarget know it need to remove dropping style\r\n        EventGroup.raise(this._dragData.dropTarget.root, 'dragleave');\r\n        EventGroup.raise(this._dragData.dropTarget.root, 'drop');\r\n      }\r\n    }\r\n    this._dragData = null;\r\n  }\r\n\r\n  /**\r\n   * clear drag data when mouse up outside of the document\r\n   */\r\n  private _onDocumentMouseUp(event: MouseEvent): void {\r\n    if (event.target === document.documentElement) {\r\n      this._onMouseUp(event);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * when mouse move over a new drop target while dragging some items,\r\n   * fire dragleave on the old target and fire dragenter to the new target\r\n   * The target will handle style change on dragenter and dragleave events.\r\n   */\r\n  private _onMouseMove(target: IDragDropTarget, event: MouseEvent): void {\r\n    const {\r\n      // use buttons property here since ev.button in some edge case is not updating well during the move.\r\n      // but firefox doesn't support it, so we set the default value when it is not defined.\r\n      buttons = MOUSEMOVE_PRIMARY_BUTTON\r\n    } = event;\r\n\r\n    if (this._dragData && buttons !== MOUSEMOVE_PRIMARY_BUTTON) {\r\n      // cancel mouse down event and return early when the primary button is not pressed\r\n      this._onMouseUp(event);\r\n      return;\r\n    }\r\n\r\n    const { root, key } = target;\r\n    if (this._isDragging) {\r\n      if (this._isDroppable(target)) {\r\n        // we can have nested drop targets in the DOM, like a folder inside a group. In that case, when we drag into\r\n        // the inner target (folder), we first set dropTarget to the inner element. But the same event is bubbled to the\r\n        // outer target too, and we need to prevent the outer one from taking over.\r\n        // So, check if the last dropTarget is not a child of the current.\r\n\r\n        if (this._dragData) {\r\n          if (this._dragData.dropTarget && this._dragData.dropTarget.key !== key && !this._isChild(root, this._dragData.dropTarget.root)) {\r\n            if (this._dragEnterCounts[this._dragData.dropTarget.key] > 0) {\r\n              EventGroup.raise(this._dragData.dropTarget.root, 'dragleave');\r\n              EventGroup.raise(root, 'dragenter');\r\n              this._dragData.dropTarget = target;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * when mouse leave a target while dragging some items, fire dragleave to the target\r\n   */\r\n  private _onMouseLeave(target: IDragDropTarget, event: MouseEvent): void {\r\n    if (this._isDragging) {\r\n      if (this._dragData && this._dragData.dropTarget && this._dragData.dropTarget.key === target.key) {\r\n        EventGroup.raise(target.root, 'dragleave');\r\n        this._dragData.dropTarget = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * when mouse down on a draggable item, we start to track dragdata.\r\n   */\r\n  private _onMouseDown(target: IDragDropTarget, event: MouseEvent): void {\r\n    if (event.button !== MOUSEDOWN_PRIMARY_BUTTON) {\r\n      // Ignore anything except the primary button.\r\n      return;\r\n    }\r\n\r\n    if (this._isDraggable(target)) {\r\n      this._dragData = {\r\n        clientX: event.clientX,\r\n        clientY: event.clientY,\r\n        eventTarget: event.target,\r\n        dragTarget: target\r\n      };\r\n\r\n      for (const key of Object.keys(this._activeTargets)) {\r\n        const activeTarget = this._activeTargets[key];\r\n        if (activeTarget.target.root) {\r\n          this._events.on(activeTarget.target.root, 'mousemove', this._onMouseMove.bind(this, activeTarget.target));\r\n          this._events.on(activeTarget.target.root, 'mouseleave', this._onMouseLeave.bind(this, activeTarget.target));\r\n        }\r\n      }\r\n    } else {\r\n      this._dragData = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * determine whether the child target is a descendant of the parent\r\n   */\r\n  private _isChild(parent: React.ReactInstance, child: React.ReactInstance): boolean {\r\n    const parentElement = ReactDOM.findDOMNode(parent);\r\n    let childElement = ReactDOM.findDOMNode(child);\r\n    while (childElement && childElement.parentElement) {\r\n      if (childElement.parentElement === parentElement) {\r\n        return true;\r\n      }\r\n      childElement = childElement.parentElement;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  private _isDraggable(target: IDragDropTarget): boolean {\r\n    const { options } = target;\r\n    return !!(options.canDrag && options.canDrag(options.context.data));\r\n  }\r\n\r\n  private _isDroppable(target: IDragDropTarget): boolean {\r\n    // TODO: take the drag item into consideration to prevent dragging an item into the same group\r\n    const { options } = target;\r\n    const dragContext = this._dragData && this._dragData.dragTarget ? this._dragData.dragTarget.options.context : undefined;\r\n    return !!(options.canDrop && options.canDrop(options.context, dragContext));\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { Icon } from '../../Icon';\r\nimport { BaseComponent, IRenderFunction, IDisposable, classNamesFunction, IClassNames } from '../../Utilities';\r\nimport { IColumn, ColumnActionsMode } from './DetailsList.types';\r\n\r\nimport { ITooltipHostProps } from '../../Tooltip';\r\nimport { IDragDropOptions } from './../../utilities/dragdrop/interfaces';\r\nimport { IDetailsColumnStyles } from './DetailsColumn.types';\r\nimport { DEFAULT_CELL_STYLE_PROPS } from './DetailsRow.styles';\r\nimport { IDetailsColumnStyleProps, IDetailsColumnProps } from './DetailsColumn.types';\r\n\r\nconst MOUSEDOWN_PRIMARY_BUTTON = 0; // for mouse down event we are using ev.button property, 0 means left button\r\n\r\nconst getClassNames = classNamesFunction<IDetailsColumnStyleProps, IDetailsColumnStyles>();\r\nconst TRANSITION_DURATION_DRAG = 200; // ms\r\nconst TRANSITION_DURATION_DROP = 1500; // ms\r\nconst CLASSNAME_ADD_INTERVAL = 20; // ms\r\n\r\nexport class DetailsColumnBase extends BaseComponent<IDetailsColumnProps> {\r\n  private _root: any;\r\n  private _dragDropSubscription: IDisposable;\r\n  private _classNames: IClassNames<IDetailsColumnStyles>;\r\n\r\n  constructor(props: IDetailsColumnProps) {\r\n    super(props);\r\n\r\n    this._root = React.createRef();\r\n    this._onDragStart = this._onDragStart.bind(this);\r\n    this._onDragEnd = this._onDragEnd.bind(this);\r\n    this._onRootMouseDown = this._onRootMouseDown.bind(this);\r\n    this._updateHeaderDragInfo = this._updateHeaderDragInfo.bind(this);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { column, columnIndex, parentId, isDraggable, styles, theme, cellStyleProps = DEFAULT_CELL_STYLE_PROPS } = this.props;\r\n    const { onRenderColumnHeaderTooltip = this._onRenderColumnHeaderTooltip } = this.props;\r\n\r\n    this._classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      headerClassName: column.headerClassName,\r\n      iconClassName: column.iconClassName,\r\n      isActionable: column.columnActionsMode !== ColumnActionsMode.disabled,\r\n      isEmpty: !column.name,\r\n      isIconVisible: column.isSorted || column.isGrouped || column.isFiltered,\r\n      isPadded: column.isPadded,\r\n      isIconOnly: column.isIconOnly,\r\n      cellStyleProps,\r\n      transitionDurationDrag: TRANSITION_DURATION_DRAG,\r\n      transitionDurationDrop: TRANSITION_DURATION_DROP\r\n    });\r\n\r\n    const classNames = this._classNames;\r\n\r\n    return (\r\n      <>\r\n        <div\r\n          key={column.key}\r\n          ref={this._root}\r\n          role={'columnheader'}\r\n          aria-sort={column.isSorted ? (column.isSortedDescending ? 'descending' : 'ascending') : 'none'}\r\n          aria-colindex={columnIndex}\r\n          className={classNames.root}\r\n          data-is-draggable={isDraggable}\r\n          draggable={isDraggable}\r\n          style={{\r\n            width:\r\n              column.calculatedWidth! +\r\n              cellStyleProps.cellLeftPadding +\r\n              cellStyleProps.cellRightPadding +\r\n              (column.isPadded ? cellStyleProps.cellExtraRightPadding : 0)\r\n          }}\r\n          data-automationid={'ColumnsHeaderColumn'}\r\n          data-item-key={column.key}\r\n        >\r\n          {isDraggable && <Icon iconName=\"GripperBarVertical\" className={classNames.gripperBarVerticalStyle} />}\r\n          {onRenderColumnHeaderTooltip(\r\n            {\r\n              hostClassName: classNames.cellTooltip,\r\n              id: `${parentId}-${column.key}-tooltip`,\r\n              setAriaDescribedBy: false,\r\n              content: column.columnActionsMode !== ColumnActionsMode.disabled ? column.ariaLabel : '',\r\n              children: (\r\n                <span\r\n                  id={`${parentId}-${column.key}`}\r\n                  aria-label={column.isIconOnly ? column.name : undefined}\r\n                  aria-labelledby={column.isIconOnly ? undefined : `${parentId}-${column.key}-name`}\r\n                  className={classNames.cellTitle}\r\n                  data-is-focusable={column.columnActionsMode !== ColumnActionsMode.disabled}\r\n                  role={\r\n                    column.columnActionsMode !== ColumnActionsMode.disabled &&\r\n                    (column.onColumnClick !== undefined || this.props.onColumnClick !== undefined)\r\n                      ? 'button'\r\n                      : undefined\r\n                  }\r\n                  aria-describedby={\r\n                    !this.props.onRenderColumnHeaderTooltip && this._hasAccessibleLabel() ? `${parentId}-${column.key}-tooltip` : undefined\r\n                  }\r\n                  onContextMenu={this._onColumnContextMenu.bind(this, column)}\r\n                  onClick={this._onColumnClick.bind(this, column)}\r\n                  aria-haspopup={column.columnActionsMode === ColumnActionsMode.hasDropdown}\r\n                  aria-expanded={\r\n                    column.columnActionsMode === ColumnActionsMode.hasDropdown ? (column.isMenuOpen ? true : false) : undefined\r\n                  }\r\n                >\r\n                  <span id={`${parentId}-${column.key}-name`} className={classNames.cellName}>\r\n                    {(column.iconName || column.iconClassName) && <Icon className={classNames.iconClassName} iconName={column.iconName} />}\r\n\r\n                    {column.isIconOnly ? <span className={classNames.accessibleLabel}>{column.name}</span> : column.name}\r\n                  </span>\r\n\r\n                  {column.isFiltered && <Icon className={classNames.nearIcon} iconName={'Filter'} />}\r\n\r\n                  {column.isSorted && <Icon className={classNames.sortIcon} iconName={column.isSortedDescending ? 'SortDown' : 'SortUp'} />}\r\n\r\n                  {column.isGrouped && <Icon className={classNames.nearIcon} iconName={'GroupedDescending'} />}\r\n\r\n                  {column.columnActionsMode === ColumnActionsMode.hasDropdown && !column.isIconOnly && (\r\n                    <Icon aria-hidden={true} className={classNames.filterChevron} iconName={'ChevronDown'} />\r\n                  )}\r\n                </span>\r\n              )\r\n            },\r\n            this._onRenderColumnHeaderTooltip\r\n          )}\r\n        </div>\r\n        {!this.props.onRenderColumnHeaderTooltip ? this._renderAccessibleLabel() : null}\r\n      </>\r\n    );\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    if (this._dragDropSubscription) {\r\n      this._dragDropSubscription.dispose();\r\n      delete this._dragDropSubscription;\r\n    }\r\n\r\n    if (this.props.dragDropHelper && this.props.isDraggable) {\r\n      this._dragDropSubscription = this.props.dragDropHelper.subscribe(\r\n        this._root.current as HTMLElement,\r\n        this._events,\r\n        this._getColumnDragDropOptions()\r\n      );\r\n\r\n      // We need to use native on this to avoid MarqueeSelection from handling the event before us.\r\n      this._events.on(this._root.current, 'mousedown', this._onRootMouseDown);\r\n    }\r\n\r\n    const classNames = this._classNames;\r\n\r\n    if (this.props.isDropped) {\r\n      if (this._root.current) {\r\n        this._root.current.classList.add(classNames.borderAfterDropping);\r\n\r\n        this._async.setTimeout(() => {\r\n          if (this._root.current) {\r\n            this._root.current.classList.add(classNames.noBorderAfterDropping);\r\n          }\r\n        }, CLASSNAME_ADD_INTERVAL);\r\n      }\r\n\r\n      this._async.setTimeout(() => {\r\n        if (this._root.current) {\r\n          this._root.current.classList.remove(classNames.borderAfterDropping);\r\n          this._root.current.classList.remove(classNames.noBorderAfterDropping);\r\n        }\r\n      }, TRANSITION_DURATION_DROP + CLASSNAME_ADD_INTERVAL);\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    if (this._dragDropSubscription) {\r\n      this._dragDropSubscription.dispose();\r\n      delete this._dragDropSubscription;\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(): void {\r\n    if (!this._dragDropSubscription && this.props.dragDropHelper && this.props.isDraggable) {\r\n      this._dragDropSubscription = this.props.dragDropHelper.subscribe(\r\n        this._root.current as HTMLElement,\r\n        this._events,\r\n        this._getColumnDragDropOptions()\r\n      );\r\n\r\n      // We need to use native on this to avoid MarqueeSelection from handling the event before us.\r\n      this._events.on(this._root.current, 'mousedown', this._onRootMouseDown);\r\n    }\r\n    if (this._dragDropSubscription && !this.props.isDraggable) {\r\n      this._dragDropSubscription.dispose();\r\n      this._events.off(this._root.current, 'mousedown');\r\n      delete this._dragDropSubscription;\r\n    }\r\n  }\r\n\r\n  private _onRenderColumnHeaderTooltip = (\r\n    tooltipHostProps: ITooltipHostProps,\r\n    defaultRender?: IRenderFunction<ITooltipHostProps>\r\n  ): JSX.Element => {\r\n    return <span className={tooltipHostProps.hostClassName}>{tooltipHostProps.children}</span>;\r\n  };\r\n\r\n  private _onColumnClick(column: IColumn, ev: React.MouseEvent<HTMLElement>): void {\r\n    if (column.columnActionsMode === ColumnActionsMode.disabled) {\r\n      return;\r\n    }\r\n\r\n    const { onColumnClick } = this.props;\r\n\r\n    if (column.onColumnClick) {\r\n      column.onColumnClick(ev, column);\r\n    }\r\n\r\n    if (onColumnClick) {\r\n      onColumnClick(ev, column);\r\n    }\r\n  }\r\n\r\n  private _getColumnDragDropOptions(): IDragDropOptions {\r\n    const { columnIndex } = this.props;\r\n    const options = {\r\n      selectionIndex: columnIndex,\r\n      context: { data: columnIndex, index: columnIndex },\r\n      canDrag: () => this.props.isDraggable!,\r\n      canDrop: () => false,\r\n      onDragStart: this._onDragStart,\r\n      updateDropState: () => undefined,\r\n      onDrop: () => undefined,\r\n      onDragEnd: this._onDragEnd\r\n    };\r\n    return options;\r\n  }\r\n\r\n  private _hasAccessibleLabel(): boolean {\r\n    const { column } = this.props;\r\n\r\n    return !!(\r\n      column.ariaLabel ||\r\n      column.filterAriaLabel ||\r\n      column.sortAscendingAriaLabel ||\r\n      column.sortDescendingAriaLabel ||\r\n      column.groupAriaLabel\r\n    );\r\n  }\r\n\r\n  private _renderAccessibleLabel(): JSX.Element | null {\r\n    const { column, parentId } = this.props;\r\n    const classNames = this._classNames;\r\n\r\n    return this._hasAccessibleLabel() && !this.props.onRenderColumnHeaderTooltip ? (\r\n      <label key={`${column.key}_label`} id={`${parentId}-${column.key}-tooltip`} className={classNames.accessibleLabel}>\r\n        {column.ariaLabel}\r\n        {(column.isFiltered && column.filterAriaLabel) || null}\r\n        {(column.isSorted && (column.isSortedDescending ? column.sortDescendingAriaLabel : column.sortAscendingAriaLabel)) || null}\r\n        {(column.isGrouped && column.groupAriaLabel) || null}\r\n      </label>\r\n    ) : null;\r\n  }\r\n\r\n  private _onDragStart(item?: any, itemIndex?: number, selectedItems?: any[], event?: MouseEvent): void {\r\n    const classNames = this._classNames;\r\n    if (itemIndex) {\r\n      this._updateHeaderDragInfo(itemIndex);\r\n      this._root.current.classList.add(classNames.borderWhileDragging);\r\n      this._async.setTimeout(() => {\r\n        if (this._root.current) {\r\n          this._root.current.classList.add(classNames.noBorderWhileDragging);\r\n        }\r\n      }, CLASSNAME_ADD_INTERVAL);\r\n    }\r\n  }\r\n\r\n  private _onDragEnd(item?: any, event?: MouseEvent): void {\r\n    const classNames = this._classNames;\r\n    if (event) {\r\n      this._updateHeaderDragInfo(-1, event);\r\n    }\r\n    this._root.current.classList.remove(classNames.borderWhileDragging);\r\n    this._root.current.classList.remove(classNames.noBorderWhileDragging);\r\n  }\r\n\r\n  private _updateHeaderDragInfo(itemIndex: number, event?: MouseEvent) {\r\n    if (this.props.setDraggedItemIndex) {\r\n      this.props.setDraggedItemIndex(itemIndex);\r\n    }\r\n    if (this.props.updateDragInfo) {\r\n      this.props.updateDragInfo({ itemIndex }, event);\r\n    }\r\n  }\r\n\r\n  private _onColumnContextMenu(column: IColumn, ev: React.MouseEvent<HTMLElement>): void {\r\n    const { onColumnContextMenu } = this.props;\r\n    if (column.onColumnContextMenu) {\r\n      column.onColumnContextMenu(column, ev);\r\n      ev.preventDefault();\r\n    }\r\n    if (onColumnContextMenu) {\r\n      onColumnContextMenu(column, ev);\r\n      ev.preventDefault();\r\n    }\r\n  }\r\n\r\n  private _onRootMouseDown = (ev: MouseEvent): void => {\r\n    const { isDraggable } = this.props;\r\n    // Ignore anything except the primary button.\r\n    if (isDraggable && ev.button === MOUSEDOWN_PRIMARY_BUTTON) {\r\n      ev.stopPropagation();\r\n    }\r\n  };\r\n}\r\n","import { IDetailsColumnStyleProps, IDetailsColumnStyles } from './DetailsColumn.types';\r\nimport { getFocusStyle, getGlobalClassNames, hiddenContentStyle, IStyle } from '../../Styling';\r\nimport { DEFAULT_CELL_STYLE_PROPS } from './DetailsRow.styles';\r\nimport { getCellStyles } from './DetailsHeader.styles';\r\n\r\nconst GlobalClassNames = {\r\n  isActionable: 'is-actionable',\r\n  cellIsCheck: 'ms-DetailsHeader-cellIsCheck',\r\n  collapseButton: 'ms-DetailsHeader-collapseButton',\r\n  isCollapsed: 'is-collapsed',\r\n  isAllSelected: 'is-allSelected',\r\n  isSelectAllHidden: 'is-selectAllHidden',\r\n  isResizingColumn: 'is-resizingColumn',\r\n  isEmpty: 'is-empty',\r\n  isIconVisible: 'is-icon-visible',\r\n  cellSizer: 'ms-DetailsHeader-cellSizer',\r\n  isResizing: 'is-resizing',\r\n  dropHintCircleStyle: 'ms-DetailsHeader-dropHintCircleStyle',\r\n  dropHintLineStyle: 'ms-DetailsHeader-dropHintLineStyle',\r\n  cellTitle: 'ms-DetailsHeader-cellTitle',\r\n  cellName: 'ms-DetailsHeader-cellName',\r\n  filterChevron: 'ms-DetailsHeader-filterChevron',\r\n  gripperBarVerticalStyle: 'ms-DetailsColumn-gripperBar'\r\n};\r\n\r\nexport const getStyles = (props: IDetailsColumnStyleProps): IDetailsColumnStyles => {\r\n  const {\r\n    theme,\r\n    headerClassName,\r\n    iconClassName,\r\n    isActionable,\r\n    isEmpty,\r\n    isIconVisible,\r\n    isPadded,\r\n    isIconOnly,\r\n    cellStyleProps = DEFAULT_CELL_STYLE_PROPS,\r\n    transitionDurationDrag,\r\n    transitionDurationDrop\r\n  } = props;\r\n\r\n  const { semanticColors, palette } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const colors = {\r\n    iconForegroundColor: semanticColors.bodySubtext,\r\n    headerForegroundColor: semanticColors.bodyText,\r\n    headerBackgroundColor: semanticColors.bodyBackground,\r\n    dropdownChevronForegroundColor: palette.neutralTertiary,\r\n    resizerColor: palette.neutralTertiaryAlt\r\n  };\r\n\r\n  const nearIconStyle: IStyle = {\r\n    color: colors.iconForegroundColor,\r\n    opacity: 1,\r\n    paddingLeft: 8\r\n  };\r\n\r\n  const borderWhileDragging: IStyle = [\r\n    {\r\n      outline: `1px solid ${palette.themePrimary}`\r\n    }\r\n  ];\r\n\r\n  const borderAfterDragOrDrop: IStyle = [\r\n    {\r\n      outlineColor: 'transparent'\r\n    }\r\n  ];\r\n\r\n  return {\r\n    root: [\r\n      getCellStyles(props),\r\n      theme.fonts.small,\r\n      isActionable && [\r\n        classNames.isActionable,\r\n        {\r\n          selectors: {\r\n            ':hover': {\r\n              color: semanticColors.bodyText,\r\n              background: semanticColors.listHeaderBackgroundHovered\r\n            },\r\n            ':active': {\r\n              background: semanticColors.listHeaderBackgroundPressed\r\n            }\r\n          }\r\n        }\r\n      ],\r\n      isEmpty && [\r\n        classNames.isEmpty,\r\n        {\r\n          textOverflow: 'clip'\r\n        }\r\n      ],\r\n      isIconVisible && classNames.isIconVisible,\r\n      isPadded && {\r\n        paddingRight: cellStyleProps.cellExtraRightPadding + cellStyleProps.cellRightPadding\r\n      },\r\n      {\r\n        selectors: {\r\n          ':hover i[data-icon-name=\"GripperBarVertical\"]': {\r\n            display: 'block'\r\n          }\r\n        }\r\n      },\r\n      headerClassName\r\n    ],\r\n\r\n    gripperBarVerticalStyle: [\r\n      {\r\n        display: 'none',\r\n        position: 'absolute',\r\n        textAlign: 'left',\r\n        color: palette.neutralTertiary,\r\n        left: 1\r\n      }\r\n    ],\r\n\r\n    nearIcon: nearIconStyle,\r\n\r\n    sortIcon: [\r\n      nearIconStyle,\r\n      {\r\n        paddingLeft: 4,\r\n        position: 'relative',\r\n        top: 1\r\n      }\r\n    ],\r\n\r\n    iconClassName: [\r\n      {\r\n        color: colors.iconForegroundColor,\r\n        opacity: 1\r\n      },\r\n      iconClassName\r\n    ],\r\n\r\n    filterChevron: [\r\n      classNames.filterChevron,\r\n      {\r\n        color: colors.dropdownChevronForegroundColor,\r\n        paddingLeft: 4,\r\n        verticalAlign: 'middle'\r\n      }\r\n    ],\r\n\r\n    cellTitle: [\r\n      classNames.cellTitle,\r\n      getFocusStyle(theme),\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        justifyContent: 'flex-start',\r\n        alignItems: 'stretch',\r\n        boxSizing: 'border-box',\r\n        overflow: 'hidden',\r\n        padding: `0 ${cellStyleProps.cellRightPadding}px 0 ${cellStyleProps.cellLeftPadding}px`,\r\n        ...(isIconOnly\r\n          ? {\r\n              alignContent: 'flex-end',\r\n              maxHeight: '100%',\r\n              flexWrap: 'wrap-reverse'\r\n            }\r\n          : {})\r\n      }\r\n    ],\r\n\r\n    cellName: [\r\n      classNames.cellName,\r\n      {\r\n        flex: '0 1 auto',\r\n        overflow: 'hidden',\r\n        textOverflow: 'ellipsis'\r\n      },\r\n      isIconOnly && {\r\n        selectors: {\r\n          $nearIcon: {\r\n            paddingLeft: 0\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    cellTooltip: [\r\n      {\r\n        display: 'block',\r\n        position: 'absolute',\r\n        top: 0,\r\n        left: 0,\r\n        bottom: 0,\r\n        right: 0\r\n      }\r\n    ],\r\n\r\n    accessibleLabel: [hiddenContentStyle],\r\n\r\n    borderWhileDragging: borderWhileDragging,\r\n\r\n    noBorderWhileDragging: [borderAfterDragOrDrop, { transition: `outline ${transitionDurationDrag}ms ease` }],\r\n\r\n    borderAfterDropping: [borderWhileDragging],\r\n\r\n    noBorderAfterDropping: [borderAfterDragOrDrop, { transition: `outline  ${transitionDurationDrop}ms ease` }]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IDetailsColumnProps, IDetailsColumnStyleProps, IDetailsColumnStyles } from './DetailsColumn.types';\r\nimport { DetailsColumnBase } from './DetailsColumn.base';\r\nimport { getStyles } from './DetailsColumn.styles';\r\n\r\nexport { IDetailsColumnProps };\r\n\r\nexport const DetailsColumn: React.StatelessComponent<IDetailsColumnProps> = styled<\r\n  IDetailsColumnProps,\r\n  IDetailsColumnStyleProps,\r\n  IDetailsColumnStyles\r\n>(DetailsColumnBase, getStyles, undefined, { scope: 'DetailsColumn' });\r\n","import * as React from 'react';\r\nimport { findDOMNode } from 'react-dom';\r\nimport { BaseComponent, css, getRTL, getId, KeyCodes, IRenderFunction, IClassNames } from '../../Utilities';\r\nimport {\r\n  IColumn,\r\n  IDetailsHeaderBaseProps,\r\n  IColumnDragDropDetails,\r\n  ColumnDragEndLocation,\r\n  IColumnReorderOptions,\r\n  CheckboxVisibility\r\n} from './DetailsList.types';\r\nimport { IFocusZone, FocusZone, FocusZoneDirection } from '../../FocusZone';\r\nimport { Icon } from '../../Icon';\r\nimport { Layer } from '../../Layer';\r\nimport { GroupSpacer } from '../GroupedList/GroupSpacer';\r\nimport { CollapseAllVisibility } from '../../GroupedList';\r\nimport { DetailsRowCheck } from './DetailsRowCheck';\r\nimport { ITooltipHostProps } from '../../Tooltip';\r\nimport { ISelection, SelectionMode, SELECTION_CHANGE } from '../../utilities/selection/interfaces';\r\nimport { IDragDropOptions, DragDropHelper } from '../../utilities/dragdrop/index';\r\nimport { DetailsColumn, IDetailsColumnProps } from '../../components/DetailsList/DetailsColumn';\r\nimport { SelectAllVisibility, IDropHintDetails, IColumnReorderHeaderProps, IDetailsHeaderState } from './DetailsHeader.types';\r\nimport { IDetailsHeaderStyleProps, IDetailsHeaderStyles } from './DetailsHeader.types';\r\nimport { classNamesFunction } from '../../Utilities';\r\n\r\nconst getClassNames = classNamesFunction<IDetailsHeaderStyleProps, IDetailsHeaderStyles>();\r\n\r\nconst MOUSEDOWN_PRIMARY_BUTTON = 0; // for mouse down event we are using ev.button property, 0 means left button\r\nconst MOUSEMOVE_PRIMARY_BUTTON = 1; // for mouse move event we are using ev.buttons property, 1 means left button\r\n\r\nconst NO_COLUMNS: IColumn[] = [];\r\n\r\nexport interface IDetailsHeader {\r\n  focus: () => boolean;\r\n}\r\n\r\nexport class DetailsHeaderBase extends BaseComponent<IDetailsHeaderBaseProps, IDetailsHeaderState> implements IDetailsHeader {\r\n  public static defaultProps = {\r\n    selectAllVisibility: SelectAllVisibility.visible,\r\n    collapseAllVisibility: CollapseAllVisibility.visible\r\n  };\r\n\r\n  private _classNames: IClassNames<IDetailsHeaderStyles>;\r\n  private _rootElement: HTMLElement | undefined;\r\n  private _rootComponent = React.createRef<IFocusZone>();\r\n  private _id: string;\r\n  private _draggedColumnIndex = -1;\r\n  private _dropHintDetails: { [key: number]: IDropHintDetails } = {};\r\n  private _dragDropHelper: DragDropHelper | null;\r\n  private _currentDropHintIndex: number;\r\n  private _subscriptionObject: {\r\n    key: string;\r\n    dispose(): void;\r\n  };\r\n  private _onDropIndexInfo: {\r\n    sourceIndex: number;\r\n    targetIndex: number;\r\n  };\r\n\r\n  public static getDerivedStateFromProps(newProps: IDetailsHeaderBaseProps, prevState: IDetailsHeaderState): IDetailsHeaderState {\r\n    const columnReorderProps: IColumnReorderHeaderProps | undefined =\r\n      newProps.columnReorderProps || (newProps.columnReorderOptions && getLegacyColumnReorderProps(newProps.columnReorderOptions));\r\n    const { groupNestingDepth } = newProps;\r\n\r\n    const newState: IDetailsHeaderState = { columnReorderProps, groupNestingDepth };\r\n\r\n    if (newProps.isAllCollapsed !== undefined) {\r\n      newState.isAllCollapsed = newProps.isAllCollapsed;\r\n    }\r\n\r\n    return newState;\r\n  }\r\n\r\n  constructor(props: IDetailsHeaderBaseProps) {\r\n    super(props);\r\n    const columnReorderProps: IColumnReorderHeaderProps | undefined =\r\n      props.columnReorderProps || (props.columnReorderOptions && getLegacyColumnReorderProps(props.columnReorderOptions));\r\n    this.state = {\r\n      columnReorderProps,\r\n      columnResizeDetails: undefined,\r\n      groupNestingDepth: this.props.groupNestingDepth,\r\n      isAllCollapsed: this.props.isAllCollapsed,\r\n      isAllSelected: !!this.props.selection && this.props.selection.isAllSelected()\r\n    };\r\n\r\n    this._onToggleCollapseAll = this._onToggleCollapseAll.bind(this);\r\n    this._onSelectAllClicked = this._onSelectAllClicked.bind(this);\r\n    this._updateDragInfo = this._updateDragInfo.bind(this);\r\n    this._onDragOver = this._onDragOver.bind(this);\r\n    this._onDrop = this._onDrop.bind(this);\r\n    this._getHeaderDragDropOptions = this._getHeaderDragDropOptions.bind(this);\r\n    this._updateDroppingState = this._updateDroppingState.bind(this);\r\n    this._getDropHintPositions = this._getDropHintPositions.bind(this);\r\n    this._computeDropHintToBeShown = this._computeDropHintToBeShown.bind(this);\r\n    this._resetDropHints = this._resetDropHints.bind(this);\r\n    this._isValidCurrentDropHintIndex = this._isValidCurrentDropHintIndex.bind(this);\r\n    this._onRootRef = this._onRootRef.bind(this);\r\n    this._isEventOnHeader = this._isEventOnHeader.bind(this);\r\n    this._onDropIndexInfo = {\r\n      sourceIndex: -1,\r\n      targetIndex: -1\r\n    };\r\n    this._id = getId('header');\r\n    this._currentDropHintIndex = -1;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    const { selection } = this.props;\r\n    const { columnReorderProps } = this.state;\r\n\r\n    this._events.on(selection, SELECTION_CHANGE, this._onSelectionChanged);\r\n\r\n    // We need to use native on this to avoid MarqueeSelection from handling the event before us.\r\n    this._events.on(this._rootElement!, 'mousedown', this._onRootMouseDown);\r\n\r\n    this._events.on(this._rootElement!, 'keydown', this._onRootKeyDown);\r\n\r\n    if (columnReorderProps && this._dragDropHelper) {\r\n      this._subscriptionObject = this._dragDropHelper.subscribe(this._rootElement!, this._events, this._getHeaderDragDropOptions());\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDetailsHeaderBaseProps): void {\r\n    const { columnReorderProps } = this.state;\r\n    if (!columnReorderProps) {\r\n      if (this._subscriptionObject) {\r\n        this._subscriptionObject.dispose();\r\n        delete this._subscriptionObject;\r\n      }\r\n    } else if (!this._subscriptionObject && this._dragDropHelper) {\r\n      this._subscriptionObject = this._dragDropHelper.subscribe(this._rootElement!, this._events, this._getHeaderDragDropOptions());\r\n    }\r\n\r\n    if (this.props !== prevProps && this._onDropIndexInfo.sourceIndex >= 0 && this._onDropIndexInfo.targetIndex >= 0) {\r\n      const { columns: previousColumns = NO_COLUMNS } = prevProps;\r\n      const { columns = NO_COLUMNS } = this.props;\r\n      if (previousColumns[this._onDropIndexInfo.sourceIndex].key === columns[this._onDropIndexInfo.targetIndex].key) {\r\n        this._onDropIndexInfo = {\r\n          sourceIndex: -1,\r\n          targetIndex: -1\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    if (this._subscriptionObject) {\r\n      this._subscriptionObject.dispose();\r\n      delete this._subscriptionObject;\r\n    }\r\n\r\n    if (this._dragDropHelper) {\r\n      this._dragDropHelper.dispose();\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      columns = NO_COLUMNS,\r\n      ariaLabel,\r\n      ariaLabelForToggleAllGroupsButton,\r\n      ariaLabelForSelectAllCheckbox,\r\n      selectAllVisibility,\r\n      ariaLabelForSelectionColumn,\r\n      indentWidth,\r\n      viewport,\r\n      onColumnClick,\r\n      onColumnContextMenu,\r\n      onRenderColumnHeaderTooltip = this._onRenderColumnHeaderTooltip,\r\n      styles,\r\n      theme,\r\n      onRenderDetailsCheckbox\r\n    } = this.props;\r\n    const { isAllSelected, columnResizeDetails, isSizing, groupNestingDepth, isAllCollapsed, columnReorderProps } = this.state;\r\n    const showCheckbox = selectAllVisibility !== SelectAllVisibility.none;\r\n    const isCheckboxHidden = selectAllVisibility === SelectAllVisibility.hidden;\r\n\r\n    if (!this._dragDropHelper && columnReorderProps) {\r\n      // TODO Do not assign local fields during render.\r\n      // This behavior needs to be moved to the appropriate React lifecycle methods.\r\n      this._dragDropHelper = new DragDropHelper({\r\n        selection: {\r\n          getSelection: () => {\r\n            return;\r\n          }\r\n        } as ISelection,\r\n        minimumPixelsForDrag: this.props.minimumPixelsForDrag\r\n      });\r\n    }\r\n    const frozenColumnCountFromStart =\r\n      columnReorderProps && columnReorderProps.frozenColumnCountFromStart ? columnReorderProps.frozenColumnCountFromStart : 0;\r\n    const frozenColumnCountFromEnd =\r\n      columnReorderProps && columnReorderProps.frozenColumnCountFromEnd ? columnReorderProps.frozenColumnCountFromEnd : 0;\r\n\r\n    this._classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      isAllSelected,\r\n      isSelectAllHidden: selectAllVisibility === SelectAllVisibility.hidden,\r\n      isResizingColumn: !!columnResizeDetails && isSizing,\r\n      isSizing,\r\n      isAllCollapsed,\r\n      isCheckboxHidden\r\n    });\r\n\r\n    const classNames = this._classNames;\r\n\r\n    const isRTL = getRTL();\r\n    return (\r\n      <FocusZone\r\n        role=\"row\"\r\n        aria-label={ariaLabel}\r\n        className={classNames.root}\r\n        componentRef={this._rootComponent}\r\n        ref={this._onRootRef}\r\n        onMouseMove={this._onRootMouseMove}\r\n        data-automationid=\"DetailsHeader\"\r\n        style={{ minWidth: viewport ? viewport.width : 0 }}\r\n        direction={FocusZoneDirection.horizontal}\r\n      >\r\n        {showCheckbox\r\n          ? [\r\n              <div\r\n                key=\"__checkbox\"\r\n                className={classNames.cellIsCheck}\r\n                aria-labelledby={`${this._id}-check`}\r\n                onClick={!isCheckboxHidden ? this._onSelectAllClicked : undefined}\r\n                aria-colindex={1}\r\n                role={'columnheader'}\r\n              >\r\n                {onRenderColumnHeaderTooltip(\r\n                  {\r\n                    hostClassName: css(classNames.checkTooltip),\r\n                    id: `${this._id}-checkTooltip`,\r\n                    setAriaDescribedBy: false,\r\n                    content: ariaLabelForSelectAllCheckbox,\r\n                    children: (\r\n                      <DetailsRowCheck\r\n                        id={`${this._id}-check`}\r\n                        aria-label={ariaLabelForSelectionColumn}\r\n                        aria-describedby={\r\n                          !isCheckboxHidden\r\n                            ? ariaLabelForSelectAllCheckbox && !this.props.onRenderColumnHeaderTooltip\r\n                              ? `${this._id}-checkTooltip`\r\n                              : undefined\r\n                            : ariaLabelForSelectionColumn && !this.props.onRenderColumnHeaderTooltip\r\n                            ? `${this._id}-checkTooltip`\r\n                            : undefined\r\n                        }\r\n                        data-is-focusable={!isCheckboxHidden || undefined}\r\n                        isHeader={true}\r\n                        selected={isAllSelected}\r\n                        anySelected={false}\r\n                        canSelect={!isCheckboxHidden}\r\n                        className={classNames.check}\r\n                        onRenderDetailsCheckbox={onRenderDetailsCheckbox}\r\n                      />\r\n                    )\r\n                  },\r\n                  this._onRenderColumnHeaderTooltip\r\n                )}\r\n              </div>,\r\n              !this.props.onRenderColumnHeaderTooltip ? (\r\n                ariaLabelForSelectAllCheckbox && !isCheckboxHidden ? (\r\n                  <label key=\"__checkboxLabel\" id={`${this._id}-checkTooltip`} className={classNames.accessibleLabel}>\r\n                    {ariaLabelForSelectAllCheckbox}\r\n                  </label>\r\n                ) : ariaLabelForSelectionColumn && isCheckboxHidden ? (\r\n                  <label key=\"__checkboxLabel\" id={`${this._id}-checkTooltip`} className={classNames.accessibleLabel}>\r\n                    {ariaLabelForSelectionColumn}\r\n                  </label>\r\n                ) : null\r\n              ) : null\r\n            ]\r\n          : null}\r\n        {groupNestingDepth! > 0 && this.props.collapseAllVisibility === CollapseAllVisibility.visible ? (\r\n          <div\r\n            className={classNames.cellIsGroupExpander}\r\n            onClick={this._onToggleCollapseAll}\r\n            data-is-focusable={true}\r\n            aria-label={ariaLabelForToggleAllGroupsButton}\r\n            aria-expanded={!isAllCollapsed}\r\n          >\r\n            <Icon className={classNames.collapseButton} iconName={isRTL ? 'ChevronLeftMed' : 'ChevronRightMed'} />\r\n          </div>\r\n        ) : null}\r\n        <GroupSpacer indentWidth={indentWidth} count={groupNestingDepth! - 1} />\r\n        {columns.map((column: IColumn, columnIndex: number) => {\r\n          const _isDraggable = columnReorderProps\r\n            ? columnIndex >= frozenColumnCountFromStart && columnIndex < columns.length - frozenColumnCountFromEnd\r\n            : false;\r\n          return [\r\n            columnReorderProps &&\r\n              (_isDraggable || columnIndex === columns.length - frozenColumnCountFromEnd) &&\r\n              this._renderDropHint(columnIndex),\r\n            <DetailsColumn\r\n              column={column}\r\n              key={column.key}\r\n              columnIndex={(showCheckbox ? 2 : 1) + columnIndex}\r\n              parentId={this._id}\r\n              isDraggable={_isDraggable}\r\n              updateDragInfo={this._updateDragInfo}\r\n              dragDropHelper={this._dragDropHelper}\r\n              onColumnClick={onColumnClick}\r\n              onColumnContextMenu={onColumnContextMenu}\r\n              // Do not render tooltips by default, but allow for override via props.\r\n              onRenderColumnHeaderTooltip={this.props.onRenderColumnHeaderTooltip}\r\n              isDropped={this._onDropIndexInfo.targetIndex === columnIndex}\r\n              cellStyleProps={this.props.cellStyleProps}\r\n            />,\r\n            this._renderColumnDivider(columnIndex)\r\n          ];\r\n        })}\r\n        {columnReorderProps && frozenColumnCountFromEnd === 0 && this._renderDropHint(columns.length)}\r\n        {isSizing && (\r\n          <Layer>\r\n            <div className={classNames.sizingOverlay} onMouseMove={this._onSizerMouseMove} onMouseUp={this._onSizerMouseUp} />\r\n          </Layer>\r\n        )}\r\n      </FocusZone>\r\n    );\r\n  }\r\n\r\n  /** Set focus to the active thing in the focus area. */\r\n  public focus(): boolean {\r\n    return Boolean(this._rootComponent.current && this._rootComponent.current.focus());\r\n  }\r\n\r\n  private _getHeaderDragDropOptions(): IDragDropOptions {\r\n    const options = {\r\n      selectionIndex: 1,\r\n      context: { data: this, index: 0 },\r\n      canDrag: () => false,\r\n      canDrop: () => true,\r\n      onDragStart: () => undefined,\r\n      updateDropState: this._updateDroppingState,\r\n      onDrop: this._onDrop,\r\n      onDragEnd: () => undefined,\r\n      onDragOver: this._onDragOver\r\n    };\r\n    return options;\r\n  }\r\n\r\n  private _updateDroppingState(newValue: boolean, event: DragEvent): void {\r\n    if (this._draggedColumnIndex >= 0 && event.type !== 'drop') {\r\n      if (!newValue) {\r\n        this._resetDropHints();\r\n      }\r\n    }\r\n  }\r\n\r\n  private _isValidCurrentDropHintIndex() {\r\n    return this._currentDropHintIndex >= 0;\r\n  }\r\n\r\n  private _onDragOver(item: any, event: DragEvent): void {\r\n    if (this._draggedColumnIndex >= 0) {\r\n      event.stopPropagation();\r\n      this._computeDropHintToBeShown(event.clientX);\r\n    }\r\n  }\r\n\r\n  private _onDrop(item?: any, event?: DragEvent): void {\r\n    const { columnReorderProps } = this.state;\r\n\r\n    // Target index will not get changed if draggeditem is after target item.\r\n    if (this._draggedColumnIndex >= 0 && event) {\r\n      const targetIndex =\r\n        this._draggedColumnIndex > this._currentDropHintIndex ? this._currentDropHintIndex : this._currentDropHintIndex - 1;\r\n      const isValidDrop = this._isValidCurrentDropHintIndex();\r\n      event.stopPropagation();\r\n      if (isValidDrop) {\r\n        this._onDropIndexInfo.sourceIndex = this._draggedColumnIndex;\r\n        this._onDropIndexInfo.targetIndex = targetIndex;\r\n\r\n        if (columnReorderProps && columnReorderProps.onColumnDrop) {\r\n          const dragDropDetails: IColumnDragDropDetails = {\r\n            draggedIndex: this._draggedColumnIndex,\r\n            targetIndex: targetIndex\r\n          };\r\n          columnReorderProps.onColumnDrop(dragDropDetails);\r\n        } else if (columnReorderProps && columnReorderProps.handleColumnReorder) {\r\n          columnReorderProps.handleColumnReorder(this._draggedColumnIndex, targetIndex);\r\n        }\r\n      }\r\n    }\r\n\r\n    this._resetDropHints();\r\n    this._dropHintDetails = {};\r\n    this._draggedColumnIndex = -1;\r\n  }\r\n\r\n  /**\r\n   * @returns whether or not the \"Select All\" checkbox column is hidden.\r\n   */\r\n  private _isCheckboxColumnHidden(): boolean {\r\n    const { selectionMode, checkboxVisibility } = this.props;\r\n\r\n    return selectionMode === SelectionMode.none || checkboxVisibility === CheckboxVisibility.hidden;\r\n  }\r\n\r\n  private _updateDragInfo(props: { itemIndex: number }, event?: MouseEvent) {\r\n    const { columnReorderProps } = this.state;\r\n    const itemIndex = props.itemIndex;\r\n    if (itemIndex >= 0) {\r\n      // Column index is set based on the checkbox\r\n      this._draggedColumnIndex = this._isCheckboxColumnHidden() ? itemIndex - 1 : itemIndex - 2;\r\n      this._getDropHintPositions();\r\n      if (columnReorderProps && columnReorderProps.onColumnDragStart) {\r\n        columnReorderProps.onColumnDragStart(true);\r\n      }\r\n    } else if (event && this._draggedColumnIndex >= 0) {\r\n      this._resetDropHints();\r\n      this._draggedColumnIndex = -1;\r\n      this._dropHintDetails = {};\r\n      if (columnReorderProps && columnReorderProps.onColumnDragEnd) {\r\n        const columnDragEndLocation = this._isEventOnHeader(event);\r\n        columnReorderProps.onColumnDragEnd({ dropLocation: columnDragEndLocation }, event);\r\n      }\r\n    }\r\n  }\r\n\r\n  private _resetDropHints(): void {\r\n    if (this._currentDropHintIndex >= 0) {\r\n      this._updateDropHintElement(this._dropHintDetails[this._currentDropHintIndex].dropHintElementRef, 'none');\r\n      this._currentDropHintIndex = -1;\r\n    }\r\n  }\r\n\r\n  private _updateDropHintElement(element: HTMLElement, displayProperty: string) {\r\n    (element.childNodes[1] as HTMLElement).style.display = displayProperty;\r\n    (element.childNodes[0] as HTMLElement).style.display = displayProperty;\r\n  }\r\n\r\n  private _getDropHintPositions = (): void => {\r\n    const { columns = NO_COLUMNS } = this.props;\r\n    const { columnReorderProps } = this.state;\r\n    let prevX = 0;\r\n    let prevMid = 0;\r\n    let prevRef: HTMLElement;\r\n    const frozenColumnCountFromStart =\r\n      columnReorderProps && columnReorderProps.frozenColumnCountFromStart ? columnReorderProps.frozenColumnCountFromStart : 0;\r\n    const frozenColumnCountFromEnd =\r\n      columnReorderProps && columnReorderProps.frozenColumnCountFromEnd ? columnReorderProps.frozenColumnCountFromEnd : 0;\r\n\r\n    for (let i = frozenColumnCountFromStart!; i < columns.length - frozenColumnCountFromEnd! + 1; i++) {\r\n      if (this._rootElement) {\r\n        const dropHintElement = this._rootElement.querySelectorAll('#columnDropHint_' + i)[0] as HTMLElement;\r\n        if (dropHintElement) {\r\n          if (i === frozenColumnCountFromStart!) {\r\n            prevX = dropHintElement.offsetLeft;\r\n            prevMid = dropHintElement.offsetLeft;\r\n            prevRef = dropHintElement;\r\n          } else {\r\n            const newMid = (dropHintElement.offsetLeft + prevX!) / 2;\r\n            this._dropHintDetails[i - 1] = {\r\n              originX: prevX,\r\n              startX: prevMid!,\r\n              endX: newMid,\r\n              dropHintElementRef: prevRef!\r\n            };\r\n            prevMid = newMid;\r\n            prevRef = dropHintElement;\r\n            prevX = dropHintElement.offsetLeft;\r\n            if (i === columns.length - frozenColumnCountFromEnd!) {\r\n              this._dropHintDetails[i] = {\r\n                originX: prevX,\r\n                startX: prevMid!,\r\n                endX: dropHintElement.offsetLeft,\r\n                dropHintElementRef: prevRef\r\n              };\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  private _liesBetween(target: number, left: number, right: number): boolean {\r\n    return getRTL() ? target <= left && target >= right : target >= left && target <= right;\r\n  }\r\n  private _isBefore(a: number, b: number): boolean {\r\n    return getRTL() ? a >= b : a <= b;\r\n  }\r\n  private _isAfter(a: number, b: number): boolean {\r\n    return getRTL() ? a <= b : a >= b;\r\n  }\r\n\r\n  /**\r\n   * Based on the given cursor position, finds the nearest drop hint and updates the state to make it visible\r\n   *\r\n   */\r\n  private _computeDropHintToBeShown = (clientX: number): void => {\r\n    if (this._rootElement) {\r\n      const clientRect = this._rootElement.getBoundingClientRect();\r\n      const headerOriginX = clientRect.left;\r\n      const eventXRelativePosition = clientX - headerOriginX;\r\n      const currentDropHintIndex = this._currentDropHintIndex;\r\n      if (this._isValidCurrentDropHintIndex()) {\r\n        if (\r\n          this._liesBetween(\r\n            eventXRelativePosition,\r\n            this._dropHintDetails[currentDropHintIndex!].startX,\r\n            this._dropHintDetails[currentDropHintIndex!].endX\r\n          )\r\n        ) {\r\n          return;\r\n        }\r\n      }\r\n      const { columns = NO_COLUMNS } = this.props;\r\n      const { columnReorderProps } = this.state;\r\n      const frozenColumnCountFromStart =\r\n        columnReorderProps && columnReorderProps.frozenColumnCountFromStart ? columnReorderProps.frozenColumnCountFromStart : 0;\r\n      const frozenColumnCountFromEnd =\r\n        columnReorderProps && columnReorderProps.frozenColumnCountFromEnd ? columnReorderProps.frozenColumnCountFromEnd : 0;\r\n\r\n      const currentIndex: number = frozenColumnCountFromStart!;\r\n      const lastValidColumn = columns.length - frozenColumnCountFromEnd!;\r\n      let indexToUpdate = -1;\r\n      if (this._isBefore(eventXRelativePosition, this._dropHintDetails[currentIndex].endX)) {\r\n        indexToUpdate = currentIndex;\r\n      } else if (this._isAfter(eventXRelativePosition, this._dropHintDetails[lastValidColumn].startX)) {\r\n        indexToUpdate = lastValidColumn;\r\n      } else if (this._isValidCurrentDropHintIndex()) {\r\n        if (\r\n          this._dropHintDetails[currentDropHintIndex! + 1] &&\r\n          this._liesBetween(\r\n            eventXRelativePosition,\r\n            this._dropHintDetails[currentDropHintIndex! + 1].startX,\r\n            this._dropHintDetails[currentDropHintIndex! + 1].endX\r\n          )\r\n        ) {\r\n          indexToUpdate = currentDropHintIndex! + 1;\r\n        } else if (\r\n          this._dropHintDetails[currentDropHintIndex! - 1] &&\r\n          this._liesBetween(\r\n            eventXRelativePosition,\r\n            this._dropHintDetails[currentDropHintIndex! - 1].startX,\r\n            this._dropHintDetails[currentDropHintIndex! - 1].endX\r\n          )\r\n        ) {\r\n          indexToUpdate = currentDropHintIndex! - 1;\r\n        }\r\n      }\r\n      if (indexToUpdate === -1) {\r\n        let startIndex = frozenColumnCountFromStart!;\r\n        let endIndex = lastValidColumn;\r\n        while (startIndex < endIndex) {\r\n          const middleIndex = Math.ceil((endIndex + startIndex!) / 2);\r\n          if (\r\n            this._liesBetween(eventXRelativePosition, this._dropHintDetails[middleIndex].startX, this._dropHintDetails[middleIndex].endX)\r\n          ) {\r\n            indexToUpdate = middleIndex;\r\n            break;\r\n          } else if (this._isBefore(eventXRelativePosition, this._dropHintDetails[middleIndex].originX)) {\r\n            endIndex = middleIndex;\r\n          } else if (this._isAfter(eventXRelativePosition, this._dropHintDetails[middleIndex].originX)) {\r\n            startIndex = middleIndex;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (indexToUpdate === this._draggedColumnIndex || indexToUpdate === this._draggedColumnIndex + 1) {\r\n        if (this._isValidCurrentDropHintIndex()) {\r\n          this._resetDropHints();\r\n        }\r\n      } else if (currentDropHintIndex !== indexToUpdate && indexToUpdate >= 0) {\r\n        this._resetDropHints();\r\n        this._updateDropHintElement(this._dropHintDetails[indexToUpdate].dropHintElementRef, 'inline-block');\r\n        this._currentDropHintIndex = indexToUpdate;\r\n      }\r\n    }\r\n  };\r\n\r\n  private _isEventOnHeader(event: MouseEvent): ColumnDragEndLocation | undefined {\r\n    if (this._rootElement) {\r\n      const clientRect = this._rootElement.getBoundingClientRect();\r\n      if (\r\n        event.clientX > clientRect.left &&\r\n        event.clientX < clientRect.right &&\r\n        event.clientY > clientRect.top &&\r\n        event.clientY < clientRect.bottom\r\n      ) {\r\n        return ColumnDragEndLocation.header;\r\n      }\r\n    }\r\n  }\r\n\r\n  private _renderColumnSizer = ({ columnIndex }: IDetailsColumnProps): JSX.Element | null => {\r\n    const { columns = NO_COLUMNS } = this.props;\r\n    const column = columns[columnIndex];\r\n    const { columnResizeDetails } = this.state;\r\n    const classNames = this._classNames;\r\n\r\n    return column.isResizable ? (\r\n      <div\r\n        key={`${column.key}_sizer`}\r\n        aria-hidden={true}\r\n        role=\"button\"\r\n        data-is-focusable={false}\r\n        onClick={stopPropagation}\r\n        data-sizer-index={columnIndex}\r\n        onBlur={this._onSizerBlur}\r\n        className={css(classNames.cellSizer, columnIndex < columns.length - 1 ? classNames.cellSizerStart : classNames.cellSizerEnd, {\r\n          [classNames.cellIsResizing]: columnResizeDetails && columnResizeDetails.columnIndex === columnIndex\r\n        })}\r\n        onDoubleClick={this._onSizerDoubleClick.bind(this, columnIndex)}\r\n      />\r\n    ) : null;\r\n  };\r\n\r\n  private _renderColumnDivider(columnIndex: number): JSX.Element | null {\r\n    const { columns = NO_COLUMNS } = this.props;\r\n    const column = columns[columnIndex];\r\n    const { onRenderDivider } = column;\r\n    return onRenderDivider\r\n      ? onRenderDivider({ column, columnIndex }, this._renderColumnSizer)\r\n      : this._renderColumnSizer({ column, columnIndex });\r\n  }\r\n\r\n  private _renderDropHint(dropHintIndex: number): JSX.Element {\r\n    const classNames = this._classNames;\r\n    return (\r\n      <div key={'dropHintKey'} className={classNames.dropHintStyle} id={`columnDropHint_${dropHintIndex}`}>\r\n        <Icon\r\n          key={`dropHintCaretKey`}\r\n          aria-hidden={true}\r\n          data-is-focusable={false}\r\n          data-sizer-index={dropHintIndex}\r\n          className={classNames.dropHintCaretStyle}\r\n          iconName={'CaretUpSolid8'}\r\n        />\r\n        <div\r\n          key={`dropHintLineKey`}\r\n          aria-hidden={true}\r\n          data-is-focusable={false}\r\n          data-sizer-index={dropHintIndex}\r\n          className={classNames.dropHintLineStyle}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n  private _onRenderColumnHeaderTooltip = (\r\n    tooltipHostProps: ITooltipHostProps,\r\n    defaultRender?: IRenderFunction<ITooltipHostProps>\r\n  ): JSX.Element => {\r\n    return <span className={tooltipHostProps.hostClassName}>{tooltipHostProps.children}</span>;\r\n  };\r\n\r\n  /**\r\n   * double click on the column sizer will auto ajust column width\r\n   * to fit the longest content among current rendered rows.\r\n   *\r\n   * @param {number} columnIndex (index of the column user double clicked)\r\n   * @param {React.MouseEvent} ev (mouse double click event)\r\n   */\r\n  private _onSizerDoubleClick(columnIndex: number, ev: React.MouseEvent<HTMLElement>): void {\r\n    const { onColumnAutoResized, columns = NO_COLUMNS } = this.props;\r\n    if (onColumnAutoResized) {\r\n      onColumnAutoResized(columns[columnIndex], columnIndex);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when the select all toggle is clicked.\r\n   */\r\n  private _onSelectAllClicked = (): void => {\r\n    const { selection } = this.props;\r\n\r\n    if (selection) {\r\n      selection.toggleAllSelected();\r\n    }\r\n  };\r\n\r\n  private _onRootMouseDown = (ev: MouseEvent): void => {\r\n    const columnIndexAttr = (ev.target as HTMLElement).getAttribute('data-sizer-index');\r\n    const columnIndex = Number(columnIndexAttr);\r\n    const { columns = NO_COLUMNS } = this.props;\r\n\r\n    if (columnIndexAttr === null || ev.button !== MOUSEDOWN_PRIMARY_BUTTON) {\r\n      // Ignore anything except the primary button.\r\n      return;\r\n    }\r\n\r\n    this.setState({\r\n      columnResizeDetails: {\r\n        columnIndex: columnIndex,\r\n        columnMinWidth: columns[columnIndex].calculatedWidth!,\r\n        originX: ev.clientX\r\n      }\r\n    });\r\n\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n  };\r\n\r\n  private _onRootMouseMove = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { columnResizeDetails, isSizing } = this.state;\r\n\r\n    if (columnResizeDetails && !isSizing && ev.clientX !== columnResizeDetails.originX) {\r\n      this.setState({ isSizing: true });\r\n    }\r\n  };\r\n\r\n  private _onRootRef = (focusZone: FocusZone): void => {\r\n    if (focusZone) {\r\n      // Need to resolve the actual DOM node, not the component. The element itself will be used for drag/drop and focusing.\r\n      this._rootElement = findDOMNode(focusZone) as HTMLElement;\r\n    } else {\r\n      this._rootElement = undefined;\r\n    }\r\n  };\r\n\r\n  private _onRootKeyDown = (ev: KeyboardEvent): void => {\r\n    const { columnResizeDetails, isSizing } = this.state;\r\n    const { columns = NO_COLUMNS, onColumnResized } = this.props;\r\n\r\n    const columnIndexAttr = (ev.target as HTMLElement).getAttribute('data-sizer-index');\r\n\r\n    if (!columnIndexAttr || isSizing) {\r\n      return;\r\n    }\r\n\r\n    const columnIndex = Number(columnIndexAttr);\r\n\r\n    if (!columnResizeDetails) {\r\n      if (ev.which === KeyCodes.enter) {\r\n        this.setState({\r\n          columnResizeDetails: {\r\n            columnIndex: columnIndex,\r\n            columnMinWidth: columns[columnIndex].calculatedWidth!\r\n          }\r\n        });\r\n\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    } else {\r\n      let increment: number | undefined;\r\n\r\n      if (ev.which === KeyCodes.enter) {\r\n        this.setState({\r\n          columnResizeDetails: undefined\r\n        });\r\n\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      } else if (ev.which === KeyCodes.left) {\r\n        increment = getRTL() ? 1 : -1;\r\n      } else if (ev.which === KeyCodes.right) {\r\n        increment = getRTL() ? -1 : 1;\r\n      }\r\n\r\n      if (increment) {\r\n        if (!ev.shiftKey) {\r\n          increment *= 10;\r\n        }\r\n\r\n        this.setState({\r\n          columnResizeDetails: {\r\n            ...columnResizeDetails,\r\n            columnMinWidth: columnResizeDetails.columnMinWidth + increment\r\n          }\r\n        });\r\n\r\n        if (onColumnResized) {\r\n          onColumnResized(columns[columnIndex], columnResizeDetails.columnMinWidth + increment, columnIndex);\r\n        }\r\n\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * mouse move event handler in the header\r\n   * it will set isSizing state to true when user clicked on the sizer and move the mouse.\r\n   *\r\n   * @param ev - mouse move event\r\n   */\r\n  private _onSizerMouseMove = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const {\r\n      // use buttons property here since ev.button in some edge case is not upding well during the move.\r\n      // but firefox doesn't support it, so we set the default value when it is not defined.\r\n      buttons\r\n    } = ev;\r\n    const { onColumnIsSizingChanged, onColumnResized, columns = NO_COLUMNS } = this.props;\r\n    const { columnResizeDetails } = this.state;\r\n\r\n    if (buttons !== undefined && buttons !== MOUSEMOVE_PRIMARY_BUTTON) {\r\n      // cancel mouse down event and return early when the primary button is not pressed\r\n      this._onSizerMouseUp(ev);\r\n      return;\r\n    }\r\n\r\n    if (ev.clientX !== columnResizeDetails!.originX) {\r\n      if (onColumnIsSizingChanged) {\r\n        onColumnIsSizingChanged(columns[columnResizeDetails!.columnIndex], true);\r\n      }\r\n    }\r\n\r\n    if (onColumnResized) {\r\n      let movement = ev.clientX - columnResizeDetails!.originX!;\r\n\r\n      if (getRTL()) {\r\n        movement = -movement;\r\n      }\r\n\r\n      onColumnResized(\r\n        columns[columnResizeDetails!.columnIndex],\r\n        columnResizeDetails!.columnMinWidth + movement,\r\n        columnResizeDetails!.columnIndex\r\n      );\r\n    }\r\n  };\r\n\r\n  private _onSizerBlur = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    const { columnResizeDetails } = this.state;\r\n\r\n    if (columnResizeDetails) {\r\n      this.setState({\r\n        columnResizeDetails: undefined,\r\n        isSizing: false\r\n      });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * mouse up event handler in the header\r\n   * clear the resize related state.\r\n   * This is to ensure we can catch double click event\r\n   *\r\n   * @param ev - mouse up event\r\n   */\r\n  private _onSizerMouseUp = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    const { columns = NO_COLUMNS, onColumnIsSizingChanged } = this.props;\r\n    const { columnResizeDetails } = this.state;\r\n\r\n    this.setState({\r\n      columnResizeDetails: undefined,\r\n      isSizing: false\r\n    });\r\n\r\n    if (onColumnIsSizingChanged) {\r\n      onColumnIsSizingChanged(columns[columnResizeDetails!.columnIndex], false);\r\n    }\r\n  };\r\n\r\n  private _onSelectionChanged(): void {\r\n    const isAllSelected = !!this.props.selection && this.props.selection.isAllSelected();\r\n\r\n    if (this.state.isAllSelected !== isAllSelected) {\r\n      this.setState({\r\n        isAllSelected: isAllSelected\r\n      });\r\n    }\r\n  }\r\n\r\n  private _onToggleCollapseAll(): void {\r\n    const { onToggleCollapseAll } = this.props;\r\n    const newCollapsed = !this.state.isAllCollapsed;\r\n    this.setState({\r\n      isAllCollapsed: newCollapsed\r\n    });\r\n    if (onToggleCollapseAll) {\r\n      onToggleCollapseAll(newCollapsed);\r\n    }\r\n  }\r\n}\r\n\r\nfunction getLegacyColumnReorderProps(columnReorderOptions: IColumnReorderOptions): IColumnReorderHeaderProps {\r\n  return {\r\n    ...columnReorderOptions,\r\n    onColumnDragEnd: undefined\r\n  };\r\n}\r\n\r\nfunction stopPropagation(ev: React.MouseEvent<HTMLElement>): void {\r\n  ev.stopPropagation();\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { IDetailsHeaderProps, IDetailsHeaderBaseProps, IDetailsHeaderStyleProps, IDetailsHeaderStyles } from './DetailsHeader.types';\r\nimport { DetailsHeaderBase } from './DetailsHeader.base';\r\nimport { getStyles } from './DetailsHeader.styles';\r\n\r\nexport { IDetailsHeaderProps, IDetailsHeaderBaseProps };\r\n\r\nexport const DetailsHeader: React.StatelessComponent<IDetailsHeaderBaseProps> = styled<\r\n  IDetailsHeaderBaseProps,\r\n  IDetailsHeaderStyleProps,\r\n  IDetailsHeaderStyles\r\n>(DetailsHeaderBase, getStyles, undefined, { scope: 'DetailsHeader' });\r\n","import * as React from 'react';\r\nimport { IColumn } from './DetailsList.types';\r\nimport { css } from '../../Utilities';\r\nimport { IDetailsRowFieldsProps } from './DetailsRowFields.types';\r\nimport { DEFAULT_CELL_STYLE_PROPS } from './DetailsRow.styles';\r\n\r\nconst getCellText = (item: any, column: IColumn): string => {\r\n  let value = item && column && column.fieldName ? item[column.fieldName] : '';\r\n\r\n  if (value === null || value === undefined) {\r\n    value = '';\r\n  }\r\n\r\n  return value;\r\n};\r\n\r\nexport class DetailsRowFields extends React.Component<IDetailsRowFieldsProps> {\r\n  public render(): JSX.Element {\r\n    const {\r\n      columns,\r\n      columnStartIndex,\r\n      shimmer,\r\n      rowClassNames,\r\n      cellStyleProps = DEFAULT_CELL_STYLE_PROPS,\r\n      item,\r\n      itemIndex,\r\n      onRenderItemColumn,\r\n      cellsByColumn\r\n    } = this.props;\r\n\r\n    return (\r\n      <div className={rowClassNames.fields} data-automationid=\"DetailsRowFields\" role=\"presentation\">\r\n        {columns.map((column, columnIndex) => {\r\n          const width: string | number =\r\n            typeof column.calculatedWidth === 'undefined'\r\n              ? 'auto'\r\n              : column.calculatedWidth +\r\n                cellStyleProps.cellLeftPadding +\r\n                cellStyleProps.cellRightPadding +\r\n                (column.isPadded ? cellStyleProps.cellExtraRightPadding : 0);\r\n\r\n          const { onRender = onRenderItemColumn } = column;\r\n          const cellContentsRender =\r\n            cellsByColumn && column.key in cellsByColumn\r\n              ? cellsByColumn[column.key]\r\n              : onRender && !shimmer\r\n              ? onRender(item, itemIndex, column)\r\n              : getCellText(item, column);\r\n\r\n          return (\r\n            <div\r\n              key={columnIndex}\r\n              role={column.isRowHeader ? 'rowheader' : 'gridcell'}\r\n              aria-colindex={columnIndex + columnStartIndex + 1}\r\n              className={css(\r\n                column.className,\r\n                column.isMultiline && rowClassNames.isMultiline,\r\n                column.isRowHeader && rowClassNames.isRowHeader,\r\n                column.isIconOnly && shimmer && rowClassNames.shimmerIconPlaceholder,\r\n                shimmer && rowClassNames.shimmer,\r\n                rowClassNames.cell,\r\n                column.isPadded ? rowClassNames.cellPadded : rowClassNames.cellUnpadded\r\n              )}\r\n              style={{ width }}\r\n              data-automationid=\"DetailsRowCell\"\r\n              data-automation-key={column.key}\r\n            >\r\n              {cellContentsRender}\r\n            </div>\r\n          );\r\n        })}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { BaseComponent, IDisposable, css, shallowCompare, getNativeProps, divProperties } from '../../Utilities';\r\nimport { IColumn, CheckboxVisibility } from './DetailsList.types';\r\nimport { DetailsRowCheck } from './DetailsRowCheck';\r\nimport { GroupSpacer } from '../GroupedList/GroupSpacer';\r\nimport { DetailsRowFields } from './DetailsRowFields';\r\nimport { FocusZone, FocusZoneDirection, IFocusZone } from '../../FocusZone';\r\nimport { SelectionMode, SELECTION_CHANGE } from '../../utilities/selection/interfaces';\r\nimport { CollapseAllVisibility } from '../../GroupedList';\r\nimport { IDragDropOptions } from './../../utilities/dragdrop/interfaces';\r\nimport { IDetailsRowBaseProps } from './DetailsRow.types';\r\nimport { IDetailsRowCheckProps } from './DetailsRowCheck.types';\r\nimport { IDetailsRowStyleProps, IDetailsRowStyles } from './DetailsRow.types';\r\nimport { classNamesFunction } from '../../Utilities';\r\n\r\nconst getClassNames = classNamesFunction<IDetailsRowStyleProps, IDetailsRowStyles>();\r\n\r\nexport interface IDetailsRowSelectionState {\r\n  isSelected: boolean;\r\n  isSelectionModal: boolean;\r\n}\r\n\r\nexport interface IDetailsRowState {\r\n  selectionState?: IDetailsRowSelectionState;\r\n  columnMeasureInfo?: {\r\n    index: number;\r\n    column: IColumn;\r\n    onMeasureDone: (measuredWidth: number) => void;\r\n  };\r\n  isDropping?: boolean;\r\n  groupNestingDepth?: number;\r\n}\r\n\r\nconst DEFAULT_DROPPING_CSS_CLASS = 'is-dropping';\r\n\r\nconst NO_COLUMNS: IColumn[] = [];\r\n\r\nexport class DetailsRowBase extends BaseComponent<IDetailsRowBaseProps, IDetailsRowState> {\r\n  private _root: HTMLElement | undefined;\r\n  private _cellMeasurer = React.createRef<HTMLSpanElement>();\r\n  private _focusZone = React.createRef<IFocusZone>();\r\n  private _droppingClassNames: string;\r\n  private _hasMounted: boolean;\r\n  private _dragDropSubscription: IDisposable;\r\n\r\n  constructor(props: IDetailsRowBaseProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      selectionState: this._getSelectionState(props),\r\n      columnMeasureInfo: undefined,\r\n      isDropping: false,\r\n      groupNestingDepth: props.groupNestingDepth\r\n    };\r\n\r\n    this._droppingClassNames = '';\r\n\r\n    this._updateDroppingState = this._updateDroppingState.bind(this);\r\n    this._onToggleSelection = this._onToggleSelection.bind(this);\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    const { dragDropHelper } = this.props;\r\n\r\n    if (dragDropHelper) {\r\n      this._dragDropSubscription = dragDropHelper.subscribe(this._root as HTMLElement, this._events, this._getRowDragDropOptions());\r\n    }\r\n\r\n    this._events.on(this.props.selection, SELECTION_CHANGE, this._onSelectionChanged);\r\n\r\n    if (this.props.onDidMount && this.props.item) {\r\n      // If the item appears later, we should wait for it before calling this method.\r\n      this._hasMounted = true;\r\n      this.props.onDidMount(this);\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(previousProps: IDetailsRowBaseProps) {\r\n    const state = this.state;\r\n    const { item, onDidMount } = this.props;\r\n    const { columnMeasureInfo } = state;\r\n\r\n    if (\r\n      this.props.itemIndex !== previousProps.itemIndex ||\r\n      this.props.item !== previousProps.item ||\r\n      this.props.dragDropHelper !== previousProps.dragDropHelper\r\n    ) {\r\n      if (this._dragDropSubscription) {\r\n        this._dragDropSubscription.dispose();\r\n        delete this._dragDropSubscription;\r\n      }\r\n\r\n      if (this.props.dragDropHelper) {\r\n        this._dragDropSubscription = this.props.dragDropHelper.subscribe(\r\n          this._root as HTMLElement,\r\n          this._events,\r\n          this._getRowDragDropOptions()\r\n        );\r\n      }\r\n    }\r\n\r\n    if (columnMeasureInfo && columnMeasureInfo.index >= 0 && this._cellMeasurer.current) {\r\n      const newWidth = this._cellMeasurer.current.getBoundingClientRect().width;\r\n\r\n      columnMeasureInfo.onMeasureDone(newWidth);\r\n\r\n      this.setState({\r\n        columnMeasureInfo: undefined\r\n      });\r\n    }\r\n\r\n    if (item && onDidMount && !this._hasMounted) {\r\n      this._hasMounted = true;\r\n      onDidMount(this);\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    const { item, onWillUnmount } = this.props;\r\n\r\n    // Only call the onWillUnmount callback if we have an item.\r\n    if (onWillUnmount && item) {\r\n      onWillUnmount(this);\r\n    }\r\n\r\n    if (this._dragDropSubscription) {\r\n      this._dragDropSubscription.dispose();\r\n      delete this._dragDropSubscription;\r\n    }\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IDetailsRowBaseProps): void {\r\n    this.setState({\r\n      selectionState: this._getSelectionState(newProps),\r\n      groupNestingDepth: newProps.groupNestingDepth\r\n    });\r\n  }\r\n\r\n  public shouldComponentUpdate(nextProps: IDetailsRowBaseProps, nextState: IDetailsRowState): boolean {\r\n    if (this.props.useReducedRowRenderer) {\r\n      if (this.state.selectionState) {\r\n        const newSelectionState = this._getSelectionState(nextProps);\r\n        if (this.state.selectionState.isSelected !== newSelectionState.isSelected) {\r\n          return true;\r\n        }\r\n      }\r\n      return shallowCompare(this.props, nextProps);\r\n    } else {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      className,\r\n      columns = NO_COLUMNS,\r\n      dragDropEvents,\r\n      item,\r\n      itemIndex,\r\n      onRenderCheck = this._onRenderCheck,\r\n      onRenderDetailsCheckbox,\r\n      onRenderItemColumn,\r\n      selectionMode,\r\n      viewport,\r\n      checkboxVisibility,\r\n      getRowAriaLabel,\r\n      getRowAriaDescribedBy,\r\n      checkButtonAriaLabel,\r\n      checkboxCellClassName,\r\n      /** Alias rowFieldsAs as RowFields and default to DetailsRowFields if rowFieldsAs does not exist */\r\n      rowFieldsAs: RowFields = DetailsRowFields,\r\n      selection,\r\n      indentWidth,\r\n      shimmer,\r\n      compact,\r\n      theme,\r\n      styles,\r\n      cellsByColumn\r\n    } = this.props;\r\n    const { columnMeasureInfo, isDropping, groupNestingDepth } = this.state;\r\n    const { isSelected = false, isSelectionModal = false } = this.state.selectionState as IDetailsRowSelectionState;\r\n    const isDraggable = Boolean(dragDropEvents && dragDropEvents.canDrag && dragDropEvents.canDrag(item));\r\n    const droppingClassName = isDropping ? (this._droppingClassNames ? this._droppingClassNames : DEFAULT_DROPPING_CSS_CLASS) : '';\r\n    const ariaLabel = getRowAriaLabel ? getRowAriaLabel(item) : undefined;\r\n    const ariaDescribedBy = getRowAriaDescribedBy ? getRowAriaDescribedBy(item) : undefined;\r\n    const canSelect = !!selection && selection.canSelectItem!(item, itemIndex);\r\n    const isContentUnselectable = selectionMode === SelectionMode.multiple;\r\n    const showCheckbox = selectionMode !== SelectionMode.none && checkboxVisibility !== CheckboxVisibility.hidden;\r\n    const ariaSelected = selectionMode === SelectionMode.none ? undefined : isSelected;\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      isSelected,\r\n      canSelect: !isContentUnselectable,\r\n      anySelected: isSelectionModal,\r\n      checkboxCellClassName,\r\n      droppingClassName,\r\n      className,\r\n      compact\r\n    });\r\n\r\n    const rowFields = (\r\n      <RowFields\r\n        rowClassNames={classNames}\r\n        cellsByColumn={cellsByColumn}\r\n        columns={columns}\r\n        item={item}\r\n        itemIndex={itemIndex}\r\n        columnStartIndex={showCheckbox ? 1 : 0}\r\n        onRenderItemColumn={onRenderItemColumn}\r\n        shimmer={shimmer}\r\n      />\r\n    );\r\n    // Rendering Shimmer Animation outside the focus zone\r\n    if (shimmer) {\r\n      return (\r\n        <div className={css(showCheckbox && classNames.shimmerLeftBorder, !compact && classNames.shimmerBottomBorder)}>{rowFields}</div>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <FocusZone\r\n        {...getNativeProps(this.props, divProperties)}\r\n        direction={FocusZoneDirection.horizontal}\r\n        ref={this._onRootRef}\r\n        componentRef={this._focusZone}\r\n        role=\"row\"\r\n        aria-label={ariaLabel}\r\n        ariaDescribedBy={ariaDescribedBy}\r\n        className={css(classNames.root)}\r\n        data-is-focusable={true}\r\n        data-selection-index={itemIndex}\r\n        data-item-index={itemIndex}\r\n        aria-rowindex={itemIndex + 1}\r\n        data-is-draggable={isDraggable}\r\n        draggable={isDraggable}\r\n        data-automationid=\"DetailsRow\"\r\n        style={{ minWidth: viewport ? viewport.width : 0 }}\r\n        aria-selected={ariaSelected}\r\n        allowFocusRoot={true}\r\n      >\r\n        {showCheckbox && (\r\n          <div role=\"gridcell\" aria-colindex={1} data-selection-toggle={true} className={classNames.checkCell}>\r\n            {onRenderCheck({\r\n              selected: isSelected,\r\n              anySelected: isSelectionModal,\r\n              title: checkButtonAriaLabel,\r\n              canSelect,\r\n              compact,\r\n              className: classNames.check,\r\n              theme,\r\n              isVisible: checkboxVisibility === CheckboxVisibility.always,\r\n              onRenderDetailsCheckbox: onRenderDetailsCheckbox\r\n            })}\r\n          </div>\r\n        )}\r\n\r\n        <GroupSpacer\r\n          indentWidth={indentWidth}\r\n          count={groupNestingDepth! - (this.props.collapseAllVisibility === CollapseAllVisibility.hidden ? 1 : 0)}\r\n        />\r\n\r\n        {item && rowFields}\r\n        {columnMeasureInfo && (\r\n          <span role=\"presentation\" className={css(classNames.cellMeasurer, classNames.cell)} ref={this._cellMeasurer}>\r\n            <RowFields\r\n              rowClassNames={classNames}\r\n              columns={[columnMeasureInfo.column]}\r\n              item={item}\r\n              itemIndex={itemIndex}\r\n              columnStartIndex={(showCheckbox ? 1 : 0) + columns.length}\r\n              onRenderItemColumn={onRenderItemColumn}\r\n            />\r\n          </span>\r\n        )}\r\n\r\n        <span role=\"checkbox\" className={css(classNames.checkCover)} aria-checked={isSelected} data-selection-toggle={true} />\r\n      </FocusZone>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * measure cell at index. and call the call back with the measured cell width when finish measure\r\n   *\r\n   * @param index - The cell index\r\n   * @param onMeasureDone - The call back function when finish measure\r\n   */\r\n  public measureCell(index: number, onMeasureDone: (width: number) => void): void {\r\n    const { columns = NO_COLUMNS } = this.props;\r\n    const column: IColumn = { ...columns[index] };\r\n\r\n    column.minWidth = 0;\r\n    column.maxWidth = 999999;\r\n\r\n    delete column.calculatedWidth;\r\n\r\n    this.setState({\r\n      columnMeasureInfo: {\r\n        index,\r\n        column,\r\n        onMeasureDone\r\n      }\r\n    });\r\n  }\r\n\r\n  public focus(forceIntoFirstElement: boolean = false): boolean {\r\n    return !!this._focusZone.current && this._focusZone.current.focus(forceIntoFirstElement);\r\n  }\r\n\r\n  protected _onRenderCheck(props: IDetailsRowCheckProps) {\r\n    return <DetailsRowCheck {...props} />;\r\n  }\r\n\r\n  private _getSelectionState(props: IDetailsRowBaseProps): IDetailsRowSelectionState {\r\n    const { itemIndex, selection } = props;\r\n\r\n    return {\r\n      isSelected: !!selection && selection.isIndexSelected(itemIndex),\r\n      isSelectionModal: !!selection && !!selection.isModal && selection.isModal()\r\n    };\r\n  }\r\n\r\n  private _onSelectionChanged(): void {\r\n    const selectionState = this._getSelectionState(this.props);\r\n\r\n    if (!shallowCompare(selectionState, this.state.selectionState)) {\r\n      this.setState({\r\n        selectionState: selectionState\r\n      });\r\n    }\r\n  }\r\n\r\n  private _onToggleSelection(): void {\r\n    const { selection } = this.props;\r\n\r\n    if (selection && this.props.itemIndex > -1) {\r\n      selection.toggleIndexSelected(this.props.itemIndex);\r\n    }\r\n  }\r\n\r\n  private _onRootRef = (focusZone: FocusZone): void => {\r\n    if (focusZone) {\r\n      // Need to resolve the actual DOM node, not the component. The element itself will be used for drag/drop and focusing.\r\n      this._root = ReactDOM.findDOMNode(focusZone) as HTMLElement;\r\n    } else {\r\n      this._root = undefined;\r\n    }\r\n  };\r\n\r\n  private _getRowDragDropOptions(): IDragDropOptions {\r\n    const { item, itemIndex, dragDropEvents, eventsToRegister } = this.props;\r\n    const options = {\r\n      eventMap: eventsToRegister,\r\n      selectionIndex: itemIndex,\r\n      context: { data: item, index: itemIndex },\r\n      canDrag: dragDropEvents!.canDrag,\r\n      canDrop: dragDropEvents!.canDrop,\r\n      onDragStart: dragDropEvents!.onDragStart,\r\n      updateDropState: this._updateDroppingState,\r\n      onDrop: dragDropEvents!.onDrop,\r\n      onDragEnd: dragDropEvents!.onDragEnd\r\n    };\r\n\r\n    return options;\r\n  }\r\n\r\n  /**\r\n   * update isDropping state based on the input value, which is used to change style during drag and drop\r\n   *\r\n   * when change to true, that means drag enter. we will add default dropping class name\r\n   * or the custom dropping class name (return result from onDragEnter) to the root elemet.\r\n   *\r\n   * when change to false, that means drag leave. we will remove the dropping class name from root element.\r\n   *\r\n   * @param newValue - New isDropping state value\r\n   * @param event - The event trigger dropping state change which can be dragenter, dragleave etc\r\n   */\r\n  private _updateDroppingState(newValue: boolean, event: DragEvent): void {\r\n    const { selectionState, isDropping } = this.state;\r\n    const { dragDropEvents, item } = this.props;\r\n\r\n    if (!newValue) {\r\n      if (dragDropEvents!.onDragLeave) {\r\n        dragDropEvents!.onDragLeave!(item, event);\r\n      }\r\n    } else {\r\n      if (dragDropEvents!.onDragEnter) {\r\n        this._droppingClassNames = dragDropEvents!.onDragEnter!(item, event);\r\n      }\r\n    }\r\n\r\n    if (isDropping !== newValue) {\r\n      this.setState({ selectionState: selectionState, isDropping: newValue });\r\n    }\r\n  }\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { IDetailsRowProps, IDetailsRowBaseProps, IDetailsRowStyleProps, IDetailsRowStyles } from './DetailsRow.types';\r\nimport { DetailsRowBase } from './DetailsRow.base';\r\nimport { getStyles } from './DetailsRow.styles';\r\n\r\nexport { IDetailsRowProps, IDetailsRowBaseProps };\r\n\r\nexport const DetailsRow: React.StatelessComponent<IDetailsRowBaseProps> = styled<\r\n  IDetailsRowBaseProps,\r\n  IDetailsRowStyleProps,\r\n  IDetailsRowStyles\r\n>(DetailsRowBase, getStyles, undefined, {\r\n  scope: 'DetailsRow'\r\n});\r\n","import * as React from 'react';\r\nimport { BaseDecorator } from './BaseDecorator';\r\nimport { findScrollableParent, getRect, getWindow } from '../../Utilities';\r\n\r\nexport interface IViewport {\r\n  width: number;\r\n  height: number;\r\n}\r\n\r\nexport interface IWithViewportState {\r\n  viewport?: IViewport;\r\n}\r\n\r\nexport interface IWithViewportProps {\r\n  skipViewportMeasures?: boolean;\r\n}\r\n\r\nconst RESIZE_DELAY = 500;\r\nconst MAX_RESIZE_ATTEMPTS = 3;\r\n\r\nexport function withViewport<TProps extends { viewport?: IViewport }, TState>(\r\n  ComposedComponent: new (props: TProps, ...args: any[]) => React.Component<TProps, TState>\r\n): any {\r\n  return class WithViewportComponent extends BaseDecorator<TProps, IWithViewportState> {\r\n    private _root = React.createRef<HTMLDivElement>();\r\n    private _resizeAttempts: number;\r\n    private _viewportResizeObserver: any;\r\n\r\n    constructor(props: TProps) {\r\n      super(props);\r\n      this._resizeAttempts = 0;\r\n\r\n      this.state = {\r\n        viewport: {\r\n          width: 0,\r\n          height: 0\r\n        }\r\n      };\r\n    }\r\n\r\n    public componentDidMount(): void {\r\n      const { skipViewportMeasures } = this.props as IWithViewportProps;\r\n      this._onAsyncResize = this._async.debounce(this._onAsyncResize, RESIZE_DELAY, {\r\n        leading: false\r\n      });\r\n\r\n      const window = getWindow();\r\n      const viewportElement = this._root.current;\r\n\r\n      // ResizeObserver seems always fire even window is not resized. This is\r\n      // particularly bad when skipViewportMeasures is set when optimizing fixed layout lists.\r\n      // It will measure and update and re-render the entire list after list is fully rendered.\r\n      // So fallback to listen to resize event when skipViewportMeasures is set.\r\n      if (!skipViewportMeasures && window && (window as any).ResizeObserver) {\r\n        this._viewportResizeObserver = new (window as any).ResizeObserver(this._onAsyncResize);\r\n        this._viewportResizeObserver.observe(viewportElement);\r\n      } else {\r\n        this._events.on(window, 'resize', this._onAsyncResize);\r\n      }\r\n\r\n      if (!skipViewportMeasures) {\r\n        this._updateViewport();\r\n      }\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n      this._events.dispose();\r\n\r\n      if (this._viewportResizeObserver) {\r\n        this._viewportResizeObserver.disconnect();\r\n      }\r\n    }\r\n\r\n    public render(): JSX.Element {\r\n      const { viewport } = this.state;\r\n      const { skipViewportMeasures } = this.props as IWithViewportProps;\r\n      const isViewportVisible = skipViewportMeasures || (viewport!.width > 0 && viewport!.height > 0);\r\n\r\n      return (\r\n        <div className=\"ms-Viewport\" ref={this._root} style={{ minWidth: 1, minHeight: 1 }}>\r\n          {isViewportVisible && <ComposedComponent ref={this._updateComposedComponentRef} viewport={viewport} {...this.props as any} />}\r\n        </div>\r\n      );\r\n    }\r\n\r\n    public forceUpdate(): void {\r\n      this._updateViewport(true);\r\n    }\r\n\r\n    private _onAsyncResize(): void {\r\n      this._updateViewport();\r\n    }\r\n\r\n    /* Note: using lambda here because decorators don't seem to work in decorators. */\r\n    private _updateViewport = (withForceUpdate?: boolean) => {\r\n      const { viewport } = this.state;\r\n      const viewportElement = this._root.current;\r\n      const scrollElement = findScrollableParent(viewportElement);\r\n      const scrollRect = getRect(scrollElement);\r\n      const clientRect = getRect(viewportElement);\r\n      const updateComponent = () => {\r\n        if (withForceUpdate && this._composedComponentInstance) {\r\n          this._composedComponentInstance.forceUpdate();\r\n        }\r\n      };\r\n\r\n      const isSizeChanged = (clientRect && clientRect.width) !== viewport!.width || (scrollRect && scrollRect.height) !== viewport!.height;\r\n\r\n      if (isSizeChanged && this._resizeAttempts < MAX_RESIZE_ATTEMPTS && clientRect && scrollRect) {\r\n        this._resizeAttempts++;\r\n        this.setState(\r\n          {\r\n            viewport: {\r\n              width: clientRect.width,\r\n              height: scrollRect.height\r\n            }\r\n          },\r\n          () => {\r\n            this._updateViewport(withForceUpdate);\r\n          }\r\n        );\r\n      } else {\r\n        this._resizeAttempts = 0;\r\n        updateComponent();\r\n      }\r\n    };\r\n  };\r\n}\r\n","import { IGroup } from '../../components/GroupedList/GroupedList.types';\r\n\r\n/**\r\n * Takes an array of groups and returns a count of the groups and all descendant groups.\r\n * @param groups - The array of groups to count.\r\n */\r\nexport const GetGroupCount = (groups: IGroup[] | undefined): number => {\r\n  let total = 0;\r\n\r\n  if (groups) {\r\n    const remainingGroups = [...groups];\r\n    let currentGroup: IGroup;\r\n\r\n    while (remainingGroups && remainingGroups.length > 0) {\r\n      ++total;\r\n\r\n      currentGroup = remainingGroups.pop() as IGroup;\r\n\r\n      if (currentGroup && currentGroup.children) {\r\n        remainingGroups.push(...currentGroup.children);\r\n      }\r\n    }\r\n  }\r\n\r\n  return total;\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { BaseComponent, KeyCodes, elementContains, getRTLSafeKeyCode, IRenderFunction, classNamesFunction } from '../../Utilities';\r\nimport {\r\n  CheckboxVisibility,\r\n  ColumnActionsMode,\r\n  ConstrainMode,\r\n  DetailsListLayoutMode,\r\n  IColumn,\r\n  IDetailsList,\r\n  IDetailsListProps,\r\n  IDetailsListStyles,\r\n  IDetailsListStyleProps,\r\n  IDetailsGroupRenderProps,\r\n  ColumnDragEndLocation\r\n} from '../DetailsList/DetailsList.types';\r\nimport { DetailsHeader } from '../DetailsList/DetailsHeader';\r\nimport { IDetailsHeader, SelectAllVisibility, IDetailsHeaderProps, IColumnReorderHeaderProps } from '../DetailsList/DetailsHeader.types';\r\nimport { IDetailsFooterProps } from '../DetailsList/DetailsFooter.types';\r\nimport { DetailsRowBase } from '../DetailsList/DetailsRow.base';\r\nimport { DetailsRow } from '../DetailsList/DetailsRow';\r\nimport { IDetailsRowProps } from '../DetailsList/DetailsRow.types';\r\nimport { IFocusZone, FocusZone, FocusZoneDirection } from '../../FocusZone';\r\nimport { IObjectWithKey, ISelection, Selection, SelectionMode, SelectionZone } from '../../utilities/selection/index';\r\n\r\nimport { DragDropHelper } from '../../utilities/dragdrop/DragDropHelper';\r\nimport { IGroupedList, GroupedList, IGroupDividerProps, IGroupRenderProps } from '../../GroupedList';\r\nimport { List, IListProps, ScrollToMode } from '../../List';\r\nimport { withViewport } from '../../utilities/decorators/withViewport';\r\nimport { GetGroupCount } from '../../utilities/groupedList/GroupedListUtility';\r\nimport { DEFAULT_CELL_STYLE_PROPS } from './DetailsRow.styles';\r\n// For every group level there is a GroupSpacer added. Importing this const to have the source value in one place.\r\nimport { SPACER_WIDTH as GROUP_EXPAND_WIDTH } from '../GroupedList/GroupSpacer';\r\n\r\nconst getClassNames = classNamesFunction<IDetailsListStyleProps, IDetailsListStyles>();\r\n\r\nexport interface IDetailsListState {\r\n  focusedItemIndex: number;\r\n  lastWidth?: number;\r\n  lastSelectionMode?: SelectionMode;\r\n  adjustedColumns: IColumn[];\r\n  isCollapsed?: boolean;\r\n  isSizing?: boolean;\r\n  isDropping?: boolean;\r\n  isSomeGroupExpanded?: boolean;\r\n}\r\n\r\nconst MIN_COLUMN_WIDTH = 100; // this is the global min width\r\nconst CHECKBOX_WIDTH = 40;\r\n\r\nconst DEFAULT_RENDERED_WINDOWS_AHEAD = 2;\r\nconst DEFAULT_RENDERED_WINDOWS_BEHIND = 2;\r\n\r\nconst SHIMMER_INITIAL_ITEMS = 10;\r\nconst SHIMMER_ITEMS = new Array(SHIMMER_INITIAL_ITEMS);\r\n\r\n@withViewport\r\nexport class DetailsListBase extends BaseComponent<IDetailsListProps, IDetailsListState> implements IDetailsList {\r\n  public static defaultProps = {\r\n    layoutMode: DetailsListLayoutMode.justified,\r\n    selectionMode: SelectionMode.multiple,\r\n    constrainMode: ConstrainMode.horizontalConstrained,\r\n    checkboxVisibility: CheckboxVisibility.onHover,\r\n    isHeaderVisible: true,\r\n    enableShimmer: false,\r\n    compact: false\r\n  };\r\n\r\n  // References\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _header = React.createRef<IDetailsHeader>();\r\n  private _groupedList = React.createRef<IGroupedList>();\r\n  private _list = React.createRef<List>();\r\n  private _focusZone = React.createRef<IFocusZone>();\r\n  private _selectionZone = React.createRef<SelectionZone>();\r\n\r\n  private _selection: ISelection;\r\n  private _activeRows: { [key: string]: DetailsRowBase };\r\n  private _dragDropHelper: DragDropHelper | undefined;\r\n  private _initialFocusedIndex: number | undefined;\r\n  private _pendingForceUpdate: boolean;\r\n\r\n  private _columnOverrides: {\r\n    [key: string]: IColumn;\r\n  };\r\n\r\n  constructor(props: IDetailsListProps) {\r\n    super(props);\r\n\r\n    this._activeRows = {};\r\n    this._columnOverrides = {};\r\n    this._onColumnIsSizingChanged = this._onColumnIsSizingChanged.bind(this);\r\n    this._onColumnResized = this._onColumnResized.bind(this);\r\n    this._onColumnAutoResized = this._onColumnAutoResized.bind(this);\r\n    this._onRowDidMount = this._onRowDidMount.bind(this);\r\n    this._onRowWillUnmount = this._onRowWillUnmount.bind(this);\r\n    this._onToggleCollapse = this._onToggleCollapse.bind(this);\r\n    this._onActiveRowChanged = this._onActiveRowChanged.bind(this);\r\n    this._onBlur = this._onBlur.bind(this);\r\n    this._onHeaderKeyDown = this._onHeaderKeyDown.bind(this);\r\n    this._onContentKeyDown = this._onContentKeyDown.bind(this);\r\n    this._onRenderCell = this._onRenderCell.bind(this);\r\n    this._onGroupExpandStateChanged = this._onGroupExpandStateChanged.bind(this);\r\n    this._onColumnDragEnd = this._onColumnDragEnd.bind(this);\r\n\r\n    this.state = {\r\n      focusedItemIndex: -1,\r\n      lastWidth: 0,\r\n      adjustedColumns: this._getAdjustedColumns(props),\r\n      isSizing: false,\r\n      isDropping: false,\r\n      isCollapsed: props.groupProps && props.groupProps.isAllGroupsCollapsed,\r\n      isSomeGroupExpanded: props.groupProps && !props.groupProps.isAllGroupsCollapsed\r\n    };\r\n\r\n    this._selection = props.selection || new Selection({ onSelectionChanged: undefined, getKey: props.getKey });\r\n\r\n    if (!this.props.disableSelectionZone) {\r\n      this._selection.setItems(props.items as IObjectWithKey[], false);\r\n    }\r\n\r\n    this._dragDropHelper = props.dragDropEvents\r\n      ? new DragDropHelper({\r\n          selection: this._selection,\r\n          minimumPixelsForDrag: props.minimumPixelsForDrag\r\n        })\r\n      : undefined;\r\n    this._initialFocusedIndex = props.initialFocusedIndex;\r\n  }\r\n\r\n  public scrollToIndex(index: number, measureItem?: (itemIndex: number) => number, scrollToMode?: ScrollToMode): void {\r\n    this._list.current && this._list.current.scrollToIndex(index, measureItem, scrollToMode);\r\n    this._groupedList.current && this._groupedList.current.scrollToIndex(index, measureItem, scrollToMode);\r\n  }\r\n\r\n  public focusIndex(\r\n    index: number,\r\n    forceIntoFirstElement: boolean = false,\r\n    measureItem?: (itemIndex: number) => number,\r\n    scrollToMode?: ScrollToMode\r\n  ): void {\r\n    const item = this.props.items[index];\r\n    if (item) {\r\n      this.scrollToIndex(index, measureItem, scrollToMode);\r\n\r\n      const itemKey = this._getItemKey(item, index);\r\n      const row = this._activeRows[itemKey];\r\n      if (row) {\r\n        this._setFocusToRow(row, forceIntoFirstElement);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getStartItemIndexInView(): number {\r\n    if (this._list && this._list.current) {\r\n      return this._list.current.getStartItemIndexInView();\r\n    } else if (this._groupedList && this._groupedList.current) {\r\n      return this._groupedList.current.getStartItemIndexInView();\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    if (this._dragDropHelper) {\r\n      // TODO If the DragDropHelper was passed via props, this will dispose it, which is incorrect behavior.\r\n      this._dragDropHelper.dispose();\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDetailsListProps, prevState: IDetailsListState) {\r\n    if (this._initialFocusedIndex !== undefined) {\r\n      const item = this.props.items[this._initialFocusedIndex];\r\n      if (item) {\r\n        const itemKey = this._getItemKey(item, this._initialFocusedIndex);\r\n        const row = this._activeRows[itemKey];\r\n        if (row) {\r\n          this._setFocusToRowIfPending(row);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      this.props.items !== prevProps.items &&\r\n      this.props.items.length > 0 &&\r\n      this.state.focusedItemIndex !== -1 &&\r\n      !elementContains(this._root.current, document.activeElement as HTMLElement, false)\r\n    ) {\r\n      // Item set has changed and previously-focused item is gone.\r\n      // Set focus to item at index of previously-focused item if it is in range,\r\n      // else set focus to the last item.\r\n      const index = this.state.focusedItemIndex < this.props.items.length ? this.state.focusedItemIndex : this.props.items.length - 1;\r\n      const item = this.props.items[index];\r\n      const itemKey = this._getItemKey(item, this.state.focusedItemIndex);\r\n      const row = this._activeRows[itemKey];\r\n      if (row) {\r\n        this._setFocusToRow(row);\r\n      } else {\r\n        this._initialFocusedIndex = index;\r\n      }\r\n    }\r\n    if (this.props.onDidUpdate) {\r\n      this.props.onDidUpdate(this);\r\n    }\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IDetailsListProps): void {\r\n    const {\r\n      checkboxVisibility,\r\n      items,\r\n      setKey,\r\n      selectionMode = this._selection.mode,\r\n      columns,\r\n      viewport,\r\n      compact,\r\n      dragDropEvents\r\n    } = this.props;\r\n    const { isAllGroupsCollapsed = undefined } = this.props.groupProps || {};\r\n\r\n    const shouldResetSelection = newProps.setKey !== setKey || newProps.setKey === undefined;\r\n    let shouldForceUpdates = false;\r\n\r\n    if (newProps.layoutMode !== this.props.layoutMode) {\r\n      shouldForceUpdates = true;\r\n    }\r\n\r\n    if (shouldResetSelection) {\r\n      this._initialFocusedIndex = newProps.initialFocusedIndex;\r\n      // reset focusedItemIndex when setKey changes\r\n      this.setState({\r\n        focusedItemIndex: this._initialFocusedIndex !== undefined ? this._initialFocusedIndex : -1\r\n      });\r\n    }\r\n\r\n    if (!this.props.disableSelectionZone && newProps.items !== items) {\r\n      this._selection.setItems(newProps.items, shouldResetSelection);\r\n    }\r\n\r\n    if (\r\n      newProps.checkboxVisibility !== checkboxVisibility ||\r\n      newProps.columns !== columns ||\r\n      newProps.viewport!.width !== viewport!.width ||\r\n      newProps.compact !== compact\r\n    ) {\r\n      shouldForceUpdates = true;\r\n    }\r\n\r\n    this._adjustColumns(newProps, true);\r\n\r\n    if (newProps.selectionMode !== selectionMode) {\r\n      shouldForceUpdates = true;\r\n    }\r\n\r\n    if (isAllGroupsCollapsed === undefined && (newProps.groupProps && newProps.groupProps.isAllGroupsCollapsed !== undefined)) {\r\n      this.setState({\r\n        isCollapsed: newProps.groupProps.isAllGroupsCollapsed,\r\n        isSomeGroupExpanded: !newProps.groupProps.isAllGroupsCollapsed\r\n      });\r\n    }\r\n\r\n    if (newProps.dragDropEvents !== dragDropEvents) {\r\n      this._dragDropHelper && this._dragDropHelper.dispose();\r\n      this._dragDropHelper = newProps.dragDropEvents\r\n        ? new DragDropHelper({\r\n            selection: this._selection,\r\n            minimumPixelsForDrag: newProps.minimumPixelsForDrag\r\n          })\r\n        : undefined;\r\n      shouldForceUpdates = true;\r\n    }\r\n\r\n    if (shouldForceUpdates) {\r\n      this._pendingForceUpdate = true;\r\n    }\r\n  }\r\n\r\n  public componentWillUpdate(): void {\r\n    if (this._pendingForceUpdate) {\r\n      this._forceListUpdates();\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      ariaLabelForListHeader,\r\n      ariaLabelForSelectAllCheckbox,\r\n      ariaLabelForSelectionColumn,\r\n      className,\r\n      checkboxVisibility,\r\n      compact,\r\n      constrainMode,\r\n      dragDropEvents,\r\n      groups,\r\n      groupProps,\r\n      indentWidth,\r\n      items,\r\n      isHeaderVisible,\r\n      layoutMode,\r\n      onItemInvoked,\r\n      onItemContextMenu,\r\n      onColumnHeaderClick,\r\n      onColumnHeaderContextMenu,\r\n      selectionMode = this._selection.mode,\r\n      selectionPreservedOnEmptyClick,\r\n      selectionZoneProps,\r\n      ariaLabel,\r\n      ariaLabelForGrid,\r\n      rowElementEventMap,\r\n      shouldApplyApplicationRole = false,\r\n      getKey,\r\n      listProps,\r\n      usePageCache,\r\n      onShouldVirtualize,\r\n      enableShimmer,\r\n      viewport,\r\n      minimumPixelsForDrag,\r\n      getGroupHeight,\r\n      styles,\r\n      theme,\r\n      cellStyleProps = DEFAULT_CELL_STYLE_PROPS,\r\n      onRenderCheckbox\r\n    } = this.props;\r\n    const { adjustedColumns, isCollapsed, isSizing, isSomeGroupExpanded } = this.state;\r\n    const { _selection: selection, _dragDropHelper: dragDropHelper } = this;\r\n    const groupNestingDepth = this._getGroupNestingDepth();\r\n    const additionalListProps: IListProps = {\r\n      renderedWindowsAhead: isSizing ? 0 : DEFAULT_RENDERED_WINDOWS_AHEAD,\r\n      renderedWindowsBehind: isSizing ? 0 : DEFAULT_RENDERED_WINDOWS_BEHIND,\r\n      getKey,\r\n      ...listProps\r\n    };\r\n    let selectAllVisibility = SelectAllVisibility.none; // for SelectionMode.none\r\n    if (selectionMode === SelectionMode.single) {\r\n      selectAllVisibility = SelectAllVisibility.hidden;\r\n    }\r\n    if (selectionMode === SelectionMode.multiple) {\r\n      // if isCollapsedGroupSelectVisible is false, disable select all when the list has all collapsed groups\r\n      let isCollapsedGroupSelectVisible = groupProps && groupProps.headerProps && groupProps.headerProps.isCollapsedGroupSelectVisible;\r\n      if (isCollapsedGroupSelectVisible === undefined) {\r\n        isCollapsedGroupSelectVisible = true;\r\n      }\r\n      const isSelectAllVisible = isCollapsedGroupSelectVisible || !groups || isSomeGroupExpanded;\r\n      selectAllVisibility = isSelectAllVisible ? SelectAllVisibility.visible : SelectAllVisibility.hidden;\r\n    }\r\n\r\n    if (checkboxVisibility === CheckboxVisibility.hidden) {\r\n      selectAllVisibility = SelectAllVisibility.none;\r\n    }\r\n\r\n    const { onRenderDetailsHeader = this._onRenderDetailsHeader, onRenderDetailsFooter = this._onRenderDetailsFooter } = this.props;\r\n\r\n    const detailsFooterProps = this._getDetailsFooterProps();\r\n    const columnReorderProps = this._getColumnReorderProps();\r\n\r\n    const rowCount = (isHeaderVisible ? 1 : 0) + GetGroupCount(groups) + (items ? items.length : 0);\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      compact,\r\n      isFixed: layoutMode === DetailsListLayoutMode.fixedColumns,\r\n      isHorizontalConstrained: constrainMode === ConstrainMode.horizontalConstrained,\r\n      className\r\n    });\r\n\r\n    const list = groups ? (\r\n      <GroupedList\r\n        componentRef={this._groupedList}\r\n        groups={groups}\r\n        groupProps={groupProps ? this._getGroupProps(groupProps) : undefined}\r\n        items={items}\r\n        onRenderCell={this._onRenderCell}\r\n        selection={selection}\r\n        selectionMode={checkboxVisibility !== CheckboxVisibility.hidden ? selectionMode : SelectionMode.none}\r\n        dragDropEvents={dragDropEvents}\r\n        dragDropHelper={dragDropHelper}\r\n        eventsToRegister={rowElementEventMap}\r\n        listProps={additionalListProps}\r\n        onGroupExpandStateChanged={this._onGroupExpandStateChanged}\r\n        usePageCache={usePageCache}\r\n        onShouldVirtualize={onShouldVirtualize}\r\n        getGroupHeight={getGroupHeight}\r\n        compact={compact}\r\n      />\r\n    ) : (\r\n      <List\r\n        ref={this._list}\r\n        role=\"presentation\"\r\n        items={enableShimmer && !items.length ? SHIMMER_ITEMS : items}\r\n        onRenderCell={this._onRenderListCell(0)}\r\n        usePageCache={usePageCache}\r\n        onShouldVirtualize={onShouldVirtualize}\r\n        {...additionalListProps}\r\n      />\r\n    );\r\n\r\n    return (\r\n      // If shouldApplyApplicationRole is true, role application will be applied to make arrow keys work\r\n      // with JAWS.\r\n      <div\r\n        ref={this._root}\r\n        className={classNames.root}\r\n        data-automationid=\"DetailsList\"\r\n        data-is-scrollable=\"false\"\r\n        aria-label={ariaLabel}\r\n        {...(shouldApplyApplicationRole ? { role: 'application' } : {})}\r\n      >\r\n        <div\r\n          role=\"grid\"\r\n          aria-label={ariaLabelForGrid}\r\n          aria-rowcount={rowCount}\r\n          aria-colcount={(selectAllVisibility !== SelectAllVisibility.none ? 1 : 0) + (adjustedColumns ? adjustedColumns.length : 0)}\r\n          aria-readonly=\"true\"\r\n        >\r\n          <div onKeyDown={this._onHeaderKeyDown} role=\"presentation\" className={classNames.headerWrapper}>\r\n            {isHeaderVisible &&\r\n              onRenderDetailsHeader(\r\n                {\r\n                  componentRef: this._header,\r\n                  selectionMode: selectionMode,\r\n                  layoutMode: layoutMode!,\r\n                  selection: selection,\r\n                  columns: adjustedColumns,\r\n                  onColumnClick: onColumnHeaderClick,\r\n                  onColumnContextMenu: onColumnHeaderContextMenu,\r\n                  onColumnResized: this._onColumnResized,\r\n                  onColumnIsSizingChanged: this._onColumnIsSizingChanged,\r\n                  onColumnAutoResized: this._onColumnAutoResized,\r\n                  groupNestingDepth: groupNestingDepth,\r\n                  isAllCollapsed: isCollapsed,\r\n                  onToggleCollapseAll: this._onToggleCollapse,\r\n                  ariaLabel: ariaLabelForListHeader,\r\n                  ariaLabelForSelectAllCheckbox: ariaLabelForSelectAllCheckbox,\r\n                  ariaLabelForSelectionColumn: ariaLabelForSelectionColumn,\r\n                  selectAllVisibility: selectAllVisibility,\r\n                  collapseAllVisibility: groupProps && groupProps.collapseAllVisibility,\r\n                  viewport: viewport,\r\n                  columnReorderProps: columnReorderProps,\r\n                  minimumPixelsForDrag: minimumPixelsForDrag,\r\n                  cellStyleProps: cellStyleProps,\r\n                  checkboxVisibility,\r\n                  indentWidth,\r\n                  onRenderDetailsCheckbox: onRenderCheckbox\r\n                },\r\n                this._onRenderDetailsHeader\r\n              )}\r\n          </div>\r\n          <div onKeyDown={this._onContentKeyDown} role=\"presentation\" className={classNames.contentWrapper}>\r\n            <FocusZone\r\n              componentRef={this._focusZone}\r\n              className={classNames.focusZone}\r\n              direction={FocusZoneDirection.vertical}\r\n              isInnerZoneKeystroke={isRightArrow}\r\n              onActiveElementChanged={this._onActiveRowChanged}\r\n              onBlur={this._onBlur}\r\n            >\r\n              {!this.props.disableSelectionZone ? (\r\n                <SelectionZone\r\n                  ref={this._selectionZone}\r\n                  selection={selection}\r\n                  selectionPreservedOnEmptyClick={selectionPreservedOnEmptyClick}\r\n                  selectionMode={selectionMode}\r\n                  onItemInvoked={onItemInvoked}\r\n                  onItemContextMenu={onItemContextMenu}\r\n                  enterModalOnTouch={this.props.enterModalSelectionOnTouch}\r\n                  {...selectionZoneProps || {}}\r\n                >\r\n                  {list}\r\n                </SelectionZone>\r\n              ) : (\r\n                list\r\n              )}\r\n            </FocusZone>\r\n          </div>\r\n          {onRenderDetailsFooter(\r\n            {\r\n              ...detailsFooterProps\r\n            },\r\n            this._onRenderDetailsFooter\r\n          )}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public forceUpdate(): void {\r\n    super.forceUpdate();\r\n    this._forceListUpdates();\r\n  }\r\n\r\n  protected _onRenderRow = (props: IDetailsRowProps, defaultRender?: IRenderFunction<IDetailsRowProps>): JSX.Element => {\r\n    return <DetailsRow {...props} />;\r\n  };\r\n\r\n  private _onRenderDetailsHeader = (\r\n    detailsHeaderProps: IDetailsHeaderProps,\r\n    defaultRender?: IRenderFunction<IDetailsHeaderProps>\r\n  ): JSX.Element => {\r\n    return <DetailsHeader {...detailsHeaderProps} />;\r\n  };\r\n\r\n  private _onRenderDetailsFooter = (\r\n    detailsFooterProps: IDetailsFooterProps,\r\n    defaultRender?: IRenderFunction<IDetailsFooterProps>\r\n  ): JSX.Element | null => {\r\n    return null;\r\n  };\r\n\r\n  private _onRenderListCell = (nestingDepth: number): ((item: any, itemIndex: number) => React.ReactNode) => {\r\n    return (item: any, itemIndex: number): React.ReactNode => {\r\n      return this._onRenderCell(nestingDepth, item, itemIndex);\r\n    };\r\n  };\r\n\r\n  private _onRenderCell(nestingDepth: number, item: any, index: number): React.ReactNode {\r\n    const {\r\n      compact,\r\n      dragDropEvents,\r\n      rowElementEventMap: eventsToRegister,\r\n      onRenderMissingItem,\r\n      onRenderItemColumn,\r\n      onRenderRow = this._onRenderRow,\r\n      selectionMode = this._selection.mode,\r\n      viewport,\r\n      checkboxVisibility,\r\n      getRowAriaLabel,\r\n      getRowAriaDescribedBy,\r\n      checkButtonAriaLabel,\r\n      checkboxCellClassName,\r\n      groupProps,\r\n      useReducedRowRenderer,\r\n      indentWidth,\r\n      cellStyleProps = DEFAULT_CELL_STYLE_PROPS,\r\n      onRenderCheckbox\r\n    } = this.props;\r\n    const collapseAllVisibility = groupProps && groupProps.collapseAllVisibility;\r\n    const selection = this._selection;\r\n    const dragDropHelper = this._dragDropHelper;\r\n    const { adjustedColumns: columns } = this.state;\r\n\r\n    const rowProps: IDetailsRowProps = {\r\n      item: item,\r\n      itemIndex: index,\r\n      compact: compact,\r\n      columns: columns,\r\n      groupNestingDepth: nestingDepth,\r\n      selectionMode: selectionMode,\r\n      selection: selection,\r\n      onDidMount: this._onRowDidMount,\r\n      onWillUnmount: this._onRowWillUnmount,\r\n      onRenderItemColumn: onRenderItemColumn,\r\n      eventsToRegister: eventsToRegister,\r\n      dragDropEvents: dragDropEvents,\r\n      dragDropHelper: dragDropHelper,\r\n      viewport: viewport,\r\n      checkboxVisibility: checkboxVisibility,\r\n      collapseAllVisibility: collapseAllVisibility,\r\n      getRowAriaLabel: getRowAriaLabel,\r\n      getRowAriaDescribedBy: getRowAriaDescribedBy,\r\n      checkButtonAriaLabel: checkButtonAriaLabel,\r\n      checkboxCellClassName: checkboxCellClassName,\r\n      useReducedRowRenderer: useReducedRowRenderer,\r\n      indentWidth,\r\n      cellStyleProps: cellStyleProps,\r\n      onRenderDetailsCheckbox: onRenderCheckbox\r\n    };\r\n\r\n    if (!item) {\r\n      if (onRenderMissingItem) {\r\n        return onRenderMissingItem(index, rowProps);\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    return onRenderRow(rowProps, this._onRenderRow);\r\n  }\r\n\r\n  private _onGroupExpandStateChanged(isSomeGroupExpanded: boolean): void {\r\n    this.setState({ isSomeGroupExpanded: isSomeGroupExpanded });\r\n  }\r\n\r\n  private _onColumnIsSizingChanged(column: IColumn, isSizing: boolean): void {\r\n    this.setState({ isSizing: isSizing });\r\n  }\r\n\r\n  private _onHeaderKeyDown(ev: React.KeyboardEvent<HTMLElement>): void {\r\n    if (ev.which === KeyCodes.down) {\r\n      if (this._focusZone.current && this._focusZone.current.focus()) {\r\n        // select the first item in list after down arrow key event\r\n        this._selection.setIndexSelected(0, true, false);\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onContentKeyDown(ev: React.KeyboardEvent<HTMLElement>): void {\r\n    if (ev.which === KeyCodes.up && !ev.altKey) {\r\n      if (this._header.current && this._header.current.focus()) {\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getGroupNestingDepth(): number {\r\n    const { groups } = this.props;\r\n    let level = 0;\r\n    let groupsInLevel = groups;\r\n\r\n    while (groupsInLevel && groupsInLevel.length > 0) {\r\n      level++;\r\n      groupsInLevel = groupsInLevel[0].children;\r\n    }\r\n\r\n    return level;\r\n  }\r\n\r\n  private _onRowDidMount(row: DetailsRowBase): void {\r\n    const { item, itemIndex } = row.props;\r\n    const itemKey = this._getItemKey(item, itemIndex);\r\n    this._activeRows[itemKey] = row; // this is used for column auto resize\r\n\r\n    this._setFocusToRowIfPending(row);\r\n\r\n    const { onRowDidMount } = this.props;\r\n    if (onRowDidMount) {\r\n      onRowDidMount(item, itemIndex);\r\n    }\r\n  }\r\n\r\n  private _setFocusToRowIfPending(row: DetailsRowBase): void {\r\n    const { itemIndex } = row.props;\r\n    if (this._initialFocusedIndex !== undefined && itemIndex === this._initialFocusedIndex) {\r\n      this._setFocusToRow(row);\r\n      delete this._initialFocusedIndex;\r\n    }\r\n  }\r\n\r\n  private _setFocusToRow(row: DetailsRowBase, forceIntoFirstElement: boolean = false): void {\r\n    if (this._selectionZone.current) {\r\n      this._selectionZone.current.ignoreNextFocus();\r\n    }\r\n    this._async.setTimeout((): void => {\r\n      row.focus(forceIntoFirstElement);\r\n    }, 0);\r\n  }\r\n\r\n  private _onRowWillUnmount(row: DetailsRowBase): void {\r\n    const { onRowWillUnmount } = this.props;\r\n\r\n    const { item, itemIndex } = row.props;\r\n    const itemKey = this._getItemKey(item, itemIndex);\r\n    delete this._activeRows[itemKey];\r\n\r\n    if (onRowWillUnmount) {\r\n      onRowWillUnmount(item, itemIndex);\r\n    }\r\n  }\r\n\r\n  private _onToggleCollapse(collapsed: boolean): void {\r\n    this.setState({\r\n      isCollapsed: collapsed\r\n    });\r\n    if (this._groupedList.current) {\r\n      this._groupedList.current.toggleCollapseAll(collapsed);\r\n    }\r\n  }\r\n\r\n  private _onColumnDragEnd(props: { dropLocation?: ColumnDragEndLocation }, event: MouseEvent): void {\r\n    const { columnReorderOptions } = this.props;\r\n    let finalDropLocation: ColumnDragEndLocation = ColumnDragEndLocation.outside;\r\n    if (columnReorderOptions && columnReorderOptions.onDragEnd) {\r\n      if (props.dropLocation && props.dropLocation !== ColumnDragEndLocation.header) {\r\n        finalDropLocation = props.dropLocation;\r\n      } else if (this._root.current) {\r\n        const clientRect = this._root.current.getBoundingClientRect();\r\n        if (\r\n          event.clientX > clientRect.left &&\r\n          event.clientX < clientRect.right &&\r\n          event.clientY > clientRect.top &&\r\n          event.clientY < clientRect.bottom\r\n        ) {\r\n          finalDropLocation = ColumnDragEndLocation.surface;\r\n        }\r\n      }\r\n      columnReorderOptions.onDragEnd(finalDropLocation);\r\n    }\r\n  }\r\n\r\n  private _forceListUpdates(): void {\r\n    this._pendingForceUpdate = false;\r\n\r\n    if (this._groupedList.current) {\r\n      this._groupedList.current.forceUpdate();\r\n    }\r\n    if (this._list.current) {\r\n      this._list.current.forceUpdate();\r\n    }\r\n  }\r\n\r\n  private _notifyColumnsResized(): void {\r\n    this.state.adjustedColumns.forEach(column => {\r\n      if (column.onColumnResize) {\r\n        column.onColumnResize(column.currentWidth);\r\n      }\r\n    });\r\n  }\r\n\r\n  private _adjustColumns(newProps: IDetailsListProps, forceUpdate?: boolean, resizingColumnIndex?: number): void {\r\n    const adjustedColumns = this._getAdjustedColumns(newProps, forceUpdate, resizingColumnIndex);\r\n    const { width: viewportWidth } = this.props.viewport!;\r\n\r\n    if (adjustedColumns) {\r\n      this.setState(\r\n        {\r\n          adjustedColumns: adjustedColumns,\r\n          lastWidth: viewportWidth\r\n        },\r\n        this._notifyColumnsResized\r\n      );\r\n    }\r\n  }\r\n\r\n  /** Returns adjusted columns, given the viewport size and layout mode. */\r\n  private _getAdjustedColumns(newProps: IDetailsListProps, forceUpdate?: boolean, resizingColumnIndex?: number): IColumn[] {\r\n    const { items: newItems, layoutMode, selectionMode } = newProps;\r\n    let { columns: newColumns } = newProps;\r\n    let { width: viewportWidth } = newProps.viewport!;\r\n\r\n    const columns = this.props ? this.props.columns : [];\r\n    const lastWidth = this.state ? this.state.lastWidth : -1;\r\n    const lastSelectionMode = this.state ? this.state.lastSelectionMode : undefined;\r\n\r\n    if (viewportWidth !== undefined) {\r\n      if (!forceUpdate && lastWidth === viewportWidth && lastSelectionMode === selectionMode && (!columns || newColumns === columns)) {\r\n        return [];\r\n      }\r\n    } else {\r\n      viewportWidth = this.props.viewport!.width;\r\n    }\r\n\r\n    newColumns = newColumns || buildColumns(newItems, true);\r\n\r\n    let adjustedColumns: IColumn[];\r\n\r\n    if (layoutMode === DetailsListLayoutMode.fixedColumns) {\r\n      adjustedColumns = this._getFixedColumns(newColumns);\r\n\r\n      // Preserve adjusted column calculated widths.\r\n      adjustedColumns.forEach(column => {\r\n        this._rememberCalculatedWidth(column, column.calculatedWidth!);\r\n      });\r\n    } else {\r\n      if (resizingColumnIndex !== undefined) {\r\n        adjustedColumns = this._getJustifiedColumnsAfterResize(newColumns, viewportWidth, newProps, resizingColumnIndex);\r\n      } else {\r\n        adjustedColumns = this._getJustifiedColumns(newColumns, viewportWidth, newProps, 0);\r\n      }\r\n\r\n      adjustedColumns.forEach(column => {\r\n        this._getColumnOverride(column.key).currentWidth = column.calculatedWidth;\r\n      });\r\n    }\r\n\r\n    return adjustedColumns;\r\n  }\r\n\r\n  /** Builds a set of columns based on the given columns mixed with the current overrides. */\r\n  private _getFixedColumns(newColumns: IColumn[]): IColumn[] {\r\n    return newColumns.map(column => {\r\n      const newColumn: IColumn = { ...column, ...this._columnOverrides[column.key] };\r\n\r\n      if (!newColumn.calculatedWidth) {\r\n        newColumn.calculatedWidth = newColumn.maxWidth || newColumn.minWidth || MIN_COLUMN_WIDTH;\r\n      }\r\n\r\n      return newColumn;\r\n    });\r\n  }\r\n\r\n  private _getJustifiedColumnsAfterResize(\r\n    newColumns: IColumn[],\r\n    viewportWidth: number,\r\n    props: IDetailsListProps,\r\n    resizingColumnIndex: number\r\n  ): IColumn[] {\r\n    const fixedColumns = newColumns.slice(0, resizingColumnIndex);\r\n    fixedColumns.forEach(column => (column.calculatedWidth = this._getColumnOverride(column.key).currentWidth));\r\n\r\n    const fixedWidth = fixedColumns.reduce((total, column, i) => total + getPaddedWidth(column, i === 0, props), 0);\r\n\r\n    const remainingColumns = newColumns.slice(resizingColumnIndex);\r\n    const remainingWidth = viewportWidth - fixedWidth;\r\n\r\n    return [...fixedColumns, ...this._getJustifiedColumns(remainingColumns, remainingWidth, props, resizingColumnIndex)];\r\n  }\r\n\r\n  /** Builds a set of columns to fix within the viewport width. */\r\n  private _getJustifiedColumns(newColumns: IColumn[], viewportWidth: number, props: IDetailsListProps, firstIndex: number): IColumn[] {\r\n    const { selectionMode = this._selection.mode, checkboxVisibility } = props;\r\n    const rowCheckWidth = selectionMode !== SelectionMode.none && checkboxVisibility !== CheckboxVisibility.hidden ? CHECKBOX_WIDTH : 0;\r\n    const groupExpandWidth = this._getGroupNestingDepth() * GROUP_EXPAND_WIDTH;\r\n    let totalWidth = 0; // offset because we have one less inner padding.\r\n    const availableWidth = viewportWidth - (rowCheckWidth + groupExpandWidth);\r\n    const adjustedColumns: IColumn[] = newColumns.map((column, i) => {\r\n      const newColumn = {\r\n        ...column,\r\n        calculatedWidth: column.minWidth || MIN_COLUMN_WIDTH,\r\n        ...this._columnOverrides[column.key]\r\n      };\r\n\r\n      const isFirst = i + firstIndex === 0;\r\n      totalWidth += getPaddedWidth(newColumn, isFirst, props);\r\n\r\n      return newColumn;\r\n    });\r\n\r\n    let lastIndex = adjustedColumns.length - 1;\r\n\r\n    // Shrink or remove collapsable columns.\r\n    while (lastIndex > 0 && totalWidth > availableWidth) {\r\n      const column = adjustedColumns[lastIndex];\r\n\r\n      const minWidth = column.minWidth || MIN_COLUMN_WIDTH;\r\n      const overflowWidth = totalWidth - availableWidth;\r\n\r\n      if (column.calculatedWidth! - minWidth >= overflowWidth || !(column.isCollapsable || column.isCollapsible)) {\r\n        const originalWidth = column.calculatedWidth!;\r\n        column.calculatedWidth = Math.max(column.calculatedWidth! - overflowWidth, minWidth);\r\n        totalWidth -= originalWidth - column.calculatedWidth;\r\n      } else {\r\n        totalWidth -= getPaddedWidth(column, false, props);\r\n        adjustedColumns.splice(lastIndex, 1);\r\n      }\r\n      lastIndex--;\r\n    }\r\n\r\n    // Then expand columns starting at the beginning, until we've filled the width.\r\n    for (let i = 0; i < adjustedColumns.length && totalWidth < availableWidth; i++) {\r\n      const column = adjustedColumns[i];\r\n      const isLast = i === adjustedColumns.length - 1;\r\n      const overrides = this._columnOverrides[column.key];\r\n      if (overrides && overrides.calculatedWidth && !isLast) {\r\n        continue;\r\n      }\r\n\r\n      const spaceLeft = availableWidth - totalWidth;\r\n      let increment: number;\r\n      if (isLast) {\r\n        increment = spaceLeft;\r\n      } else {\r\n        const maxWidth = column.maxWidth;\r\n        const minWidth = column.minWidth || maxWidth || MIN_COLUMN_WIDTH;\r\n        increment = maxWidth ? Math.min(spaceLeft, maxWidth - minWidth) : spaceLeft;\r\n      }\r\n\r\n      column.calculatedWidth = (column.calculatedWidth as number) + increment;\r\n      totalWidth += increment;\r\n    }\r\n\r\n    return adjustedColumns;\r\n  }\r\n\r\n  private _onColumnResized(resizingColumn: IColumn, newWidth: number, resizingColumnIndex: number): void {\r\n    const newCalculatedWidth = Math.max(resizingColumn.minWidth || MIN_COLUMN_WIDTH, newWidth);\r\n    if (this.props.onColumnResize) {\r\n      this.props.onColumnResize(resizingColumn, newCalculatedWidth, resizingColumnIndex);\r\n    }\r\n\r\n    this._rememberCalculatedWidth(resizingColumn, newCalculatedWidth);\r\n\r\n    this._adjustColumns(this.props, true, resizingColumnIndex);\r\n    this._forceListUpdates();\r\n  }\r\n\r\n  private _rememberCalculatedWidth(column: IColumn, newCalculatedWidth: number): void {\r\n    const overrides = this._getColumnOverride(column.key);\r\n    overrides.calculatedWidth = newCalculatedWidth;\r\n    overrides.currentWidth = newCalculatedWidth;\r\n  }\r\n\r\n  private _getColumnOverride(key: string): IColumn {\r\n    return (this._columnOverrides[key] = this._columnOverrides[key] || {});\r\n  }\r\n\r\n  /**\r\n   * Callback function when double clicked on the details header column resizer\r\n   * which will measure the column cells of all the active rows and resize the\r\n   * column to the max cell width.\r\n   *\r\n   * @param column - double clicked column definition\r\n   * @param columnIndex - double clicked column index\r\n   * TODO: min width 100 should be changed to const value and should be consistent with the\r\n   * value used on _onSizerMove method in DetailsHeader\r\n   */\r\n  private _onColumnAutoResized(column: IColumn, columnIndex: number): void {\r\n    let max = 0;\r\n    let count = 0;\r\n    const totalCount = Object.keys(this._activeRows).length;\r\n\r\n    for (const key in this._activeRows) {\r\n      if (this._activeRows.hasOwnProperty(key)) {\r\n        const currentRow = this._activeRows[key];\r\n        currentRow.measureCell(columnIndex, (width: number) => {\r\n          max = Math.max(max, width);\r\n          count++;\r\n          if (count === totalCount) {\r\n            this._onColumnResized(column, max, columnIndex);\r\n          }\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Call back function when an element in FocusZone becomes active. It will translate it into item\r\n   * and call onActiveItemChanged callback if specified.\r\n   *\r\n   * @param row - element that became active in Focus Zone\r\n   * @param focus - event from Focus Zone\r\n   */\r\n  private _onActiveRowChanged(el?: HTMLElement, ev?: React.FocusEvent<HTMLElement>): void {\r\n    const { items, onActiveItemChanged } = this.props;\r\n\r\n    if (!el) {\r\n      return;\r\n    }\r\n\r\n    // Check and assign index only if the event was raised from any DetailsRow element\r\n    if (el.getAttribute('data-item-index')) {\r\n      const index = Number(el.getAttribute('data-item-index'));\r\n      if (index >= 0) {\r\n        if (onActiveItemChanged) {\r\n          onActiveItemChanged(items[index], index, ev);\r\n        }\r\n        this.setState({\r\n          focusedItemIndex: index\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onBlur(event: React.FocusEvent<HTMLElement>): void {\r\n    this.setState({\r\n      focusedItemIndex: -1\r\n    });\r\n  }\r\n\r\n  private _getItemKey(item: any, itemIndex: number): string | number {\r\n    const { getKey } = this.props;\r\n\r\n    let itemKey: string | number | undefined = undefined;\r\n    if (item) {\r\n      itemKey = item.key;\r\n    }\r\n\r\n    if (getKey) {\r\n      itemKey = getKey(item, itemIndex);\r\n    }\r\n\r\n    if (!itemKey) {\r\n      itemKey = itemIndex;\r\n    }\r\n\r\n    return itemKey;\r\n  }\r\n\r\n  private _getDetailsFooterProps(): IDetailsFooterProps {\r\n    const { adjustedColumns: columns } = this.state;\r\n\r\n    const {\r\n      viewport,\r\n      checkboxVisibility,\r\n      indentWidth,\r\n      cellStyleProps = DEFAULT_CELL_STYLE_PROPS,\r\n      selectionMode = this._selection.mode\r\n    } = this.props;\r\n\r\n    return {\r\n      columns: columns,\r\n      groupNestingDepth: this._getGroupNestingDepth(),\r\n      selection: this._selection,\r\n      selectionMode: selectionMode,\r\n      viewport: viewport,\r\n      checkboxVisibility,\r\n      indentWidth,\r\n      cellStyleProps\r\n    };\r\n  }\r\n\r\n  private _getColumnReorderProps(): IColumnReorderHeaderProps | undefined {\r\n    const { columnReorderOptions } = this.props;\r\n    if (columnReorderOptions) {\r\n      return {\r\n        ...columnReorderOptions,\r\n        onColumnDragEnd: this._onColumnDragEnd\r\n      };\r\n    }\r\n  }\r\n\r\n  private _getGroupProps(detailsGroupProps: IDetailsGroupRenderProps): IGroupRenderProps {\r\n    const { onRenderFooter: onRenderDetailsGroupFooter, onRenderHeader: onRenderDetailsGroupHeader } = detailsGroupProps;\r\n    const { adjustedColumns: columns } = this.state;\r\n    const {\r\n      selectionMode = this._selection.mode,\r\n      viewport,\r\n      cellStyleProps = DEFAULT_CELL_STYLE_PROPS,\r\n      checkboxVisibility,\r\n      indentWidth\r\n    } = this.props;\r\n    const groupNestingDepth = this._getGroupNestingDepth();\r\n    const onRenderFooter = onRenderDetailsGroupFooter\r\n      ? (props: IGroupDividerProps, defaultRender?: IRenderFunction<IGroupDividerProps>) => {\r\n          return onRenderDetailsGroupFooter(\r\n            {\r\n              ...props,\r\n              columns: columns,\r\n              groupNestingDepth: groupNestingDepth,\r\n              indentWidth,\r\n              selection: this._selection,\r\n              selectionMode: selectionMode,\r\n              viewport: viewport,\r\n              checkboxVisibility,\r\n              cellStyleProps\r\n            },\r\n            defaultRender\r\n          );\r\n        }\r\n      : undefined;\r\n\r\n    const onRenderHeader = onRenderDetailsGroupHeader\r\n      ? (props: IGroupDividerProps, defaultRender?: IRenderFunction<IGroupDividerProps>) => {\r\n          return onRenderDetailsGroupHeader(\r\n            {\r\n              ...props,\r\n              columns: columns,\r\n              groupNestingDepth: groupNestingDepth,\r\n              indentWidth,\r\n              selection: this._selection,\r\n              selectionMode: selectionMode,\r\n              viewport: viewport,\r\n              checkboxVisibility,\r\n              cellStyleProps\r\n            },\r\n            defaultRender\r\n          );\r\n        }\r\n      : undefined;\r\n\r\n    return {\r\n      ...detailsGroupProps,\r\n      onRenderFooter,\r\n      onRenderHeader\r\n    };\r\n  }\r\n}\r\n\r\nexport function buildColumns(\r\n  items: any[],\r\n  canResizeColumns?: boolean,\r\n  onColumnClick?: (ev: React.MouseEvent<HTMLElement>, column: IColumn) => void,\r\n  sortedColumnKey?: string,\r\n  isSortedDescending?: boolean,\r\n  groupedColumnKey?: string,\r\n  isMultiline?: boolean\r\n) {\r\n  const columns: IColumn[] = [];\r\n\r\n  if (items && items.length) {\r\n    const firstItem = items[0];\r\n\r\n    for (const propName in firstItem) {\r\n      if (firstItem.hasOwnProperty(propName)) {\r\n        columns.push({\r\n          key: propName,\r\n          name: propName,\r\n          fieldName: propName,\r\n          minWidth: MIN_COLUMN_WIDTH,\r\n          maxWidth: 300,\r\n          isCollapsable: !!columns.length,\r\n          isCollapsible: !!columns.length,\r\n          isMultiline: isMultiline === undefined ? false : isMultiline,\r\n          isSorted: sortedColumnKey === propName,\r\n          isSortedDescending: !!isSortedDescending,\r\n          isRowHeader: false,\r\n          columnActionsMode: ColumnActionsMode.clickable,\r\n          isResizable: canResizeColumns,\r\n          onColumnClick: onColumnClick,\r\n          isGrouped: groupedColumnKey === propName\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  return columns;\r\n}\r\n\r\nfunction isRightArrow(event: React.KeyboardEvent<HTMLElement>): boolean {\r\n  return event.which === getRTLSafeKeyCode(KeyCodes.right);\r\n}\r\n\r\nfunction getPaddedWidth(column: IColumn, isFirst: boolean, props: IDetailsListProps): number {\r\n  const { cellStyleProps = DEFAULT_CELL_STYLE_PROPS } = props;\r\n\r\n  return (\r\n    column.calculatedWidth! +\r\n    cellStyleProps.cellLeftPadding +\r\n    cellStyleProps.cellRightPadding +\r\n    (column.isPadded ? cellStyleProps.cellExtraRightPadding : 0)\r\n  );\r\n}\r\n","import { IDetailsListStyleProps, IDetailsListStyles } from './DetailsList.types';\r\nimport { getGlobalClassNames, FontSizes } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-DetailsList',\r\n  compact: 'ms-DetailsList--Compact',\r\n  contentWrapper: 'ms-DetailsList-contentWrapper',\r\n  headerWrapper: 'ms-DetailsList-headerWrapper',\r\n  isFixed: 'is-fixed',\r\n  isHorizontalConstrained: 'is-horizontalConstrained',\r\n  listCell: 'ms-List-cell'\r\n};\r\n\r\nexport const getStyles = (props: IDetailsListStyleProps): IDetailsListStyles => {\r\n  const { theme, className, isHorizontalConstrained, compact, isFixed } = props;\r\n  const { semanticColors } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.small,\r\n      {\r\n        position: 'relative',\r\n        fontSize: FontSizes.small,\r\n        background: semanticColors.listBackground,\r\n        color: semanticColors.listText,\r\n        selectors: {\r\n          [`& .${classNames.listCell}`]: {\r\n            minHeight: 38,\r\n            wordBreak: 'break-word'\r\n          }\r\n        }\r\n      },\r\n\r\n      isFixed && [classNames.isFixed],\r\n\r\n      compact && [\r\n        classNames.compact,\r\n        {\r\n          selectors: {\r\n            [`.${classNames.listCell}`]: {\r\n              minHeight: 32\r\n            }\r\n          }\r\n        }\r\n      ],\r\n\r\n      isHorizontalConstrained && [\r\n        classNames.isHorizontalConstrained,\r\n        {\r\n          overflowX: 'auto',\r\n          overflowY: 'visible',\r\n          WebkitOverflowScrolling: 'touch'\r\n        }\r\n      ],\r\n\r\n      className\r\n    ],\r\n\r\n    focusZone: [\r\n      {\r\n        display: 'inline-block',\r\n        minWidth: '100%',\r\n        minHeight: 1\r\n      }\r\n    ],\r\n    headerWrapper: [classNames.headerWrapper],\r\n    contentWrapper: [classNames.contentWrapper]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IDetailsListProps, IDetailsListStyleProps, IDetailsListStyles } from './DetailsList.types';\r\nimport { DetailsListBase } from './DetailsList.base';\r\nimport { getStyles } from './DetailsList.styles';\r\n\r\nexport { IDetailsListProps };\r\n\r\nexport const DetailsList: React.StatelessComponent<IDetailsListProps> = styled<\r\n  IDetailsListProps,\r\n  IDetailsListStyleProps,\r\n  IDetailsListStyles\r\n>(DetailsListBase, getStyles, undefined, {\r\n  scope: 'DetailsList'\r\n});\r\n","/** @license React v16.8.6\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?Symbol.for(\"react.memo\"):\n60115,r=b?Symbol.for(\"react.lazy\"):60116;function t(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return u}}case r:case q:case d:return u}}}function v(a){return t(a)===m}exports.typeOf=t;exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;\nexports.Fragment=e;exports.Lazy=r;exports.Memo=q;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||\"object\"===typeof a&&null!==a&&(a.$$typeof===r||a.$$typeof===q||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n)};exports.isAsyncMode=function(a){return v(a)||t(a)===l};exports.isConcurrentMode=v;exports.isContextConsumer=function(a){return t(a)===k};\nexports.isContextProvider=function(a){return t(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return t(a)===n};exports.isFragment=function(a){return t(a)===e};exports.isLazy=function(a){return t(a)===r};exports.isMemo=function(a){return t(a)===q};exports.isPortal=function(a){return t(a)===d};exports.isProfiler=function(a){return t(a)===g};exports.isStrictMode=function(a){return t(a)===f};\nexports.isSuspense=function(a){return t(a)===p};\n","/** @license React v16.8.6\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' ||\n  // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);\n}\n\n/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar lowPriorityWarning = function () {};\n\n{\n  var printWarning = function (format) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var argIndex = 0;\n    var message = 'Warning: ' + format.replace(/%s/g, function () {\n      return args[argIndex++];\n    });\n    if (typeof console !== 'undefined') {\n      console.warn(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n\n  lowPriorityWarning = function (condition, format) {\n    if (format === undefined) {\n      throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n    if (!condition) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n        args[_key2 - 2] = arguments[_key2];\n      }\n\n      printWarning.apply(undefined, [format].concat(args));\n    }\n  };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_LAZY_TYPE:\n      case REACT_MEMO_TYPE:\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n}\n\n// AsyncMode is deprecated along with isAsyncMode\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\n\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\n\n// AsyncMode should be deprecated\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true;\n      lowPriorityWarning$1(false, 'The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.typeOf = typeOf;\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isValidElementType = isValidElementType;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n  var loggedTypeFailures = {};\n  var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (process.env.NODE_ENV !== 'production') {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error && !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (process.env.NODE_ENV !== 'production') {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar has = Function.call.bind(Object.prototype.hasOwnProperty);\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null && typeof propValue !== 'string' &&\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '<<anonymous>>';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x && y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message) {\n    this.message = message;\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (process.env.NODE_ENV !== 'production') {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &&\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount < 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName  + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i < propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (arguments.length > 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i < expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n          return null;\n        }\n      }\n\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (!checker) {\n          continue;\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from\n      // props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' +  JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","import * as React from 'react';\r\nimport { Sticky } from './Sticky';\r\nimport { IRefObject } from '../../Utilities';\r\n\r\nexport interface IStickyProps extends React.Props<Sticky> {\r\n  /**\r\n   * Gets ref to component interface.\r\n   */\r\n  componentRef?: IRefObject<IStickyProps>;\r\n\r\n  /**\r\n   * Class name to apply to the sticky element if component is sticky.\r\n   */\r\n  stickyClassName?: string;\r\n\r\n  /**\r\n   * color to apply as 'background-color' style for sticky element.\r\n   */\r\n  stickyBackgroundColor?: string;\r\n\r\n  /**\r\n   * Region to render sticky component in.\r\n   * @defaultvalue Both\r\n   */\r\n  stickyPosition?: StickyPositionType;\r\n\r\n  /**\r\n   * If true, then match scrolling position of placeholder element in Sticky.\r\n   * @defaultvalue true\r\n   */\r\n  isScrollSynced?: boolean;\r\n}\r\n\r\nexport enum StickyPositionType {\r\n  Both = 0,\r\n  Header = 1,\r\n  Footer = 2\r\n}\r\n","import * as React from 'react';\r\nimport * as PropTypes from 'prop-types';\r\nimport { BaseComponent, classNamesFunction, divProperties, getNativeProps, getRTL } from '../../Utilities';\r\nimport { IScrollablePane, IScrollablePaneProps, IScrollablePaneStyles, IScrollablePaneStyleProps } from './ScrollablePane.types';\r\nimport { Sticky } from '../../Sticky';\r\n\r\nexport interface IScrollablePaneContext {\r\n  scrollablePane?: {\r\n    subscribe: (handler: (container: HTMLElement, stickyContainer: HTMLElement) => void) => void;\r\n    unsubscribe: (handler: (container: HTMLElement, stickyContainer: HTMLElement) => void) => void;\r\n    addSticky: (sticky: Sticky) => void;\r\n    removeSticky: (sticky: Sticky) => void;\r\n    updateStickyRefHeights: () => void;\r\n    sortSticky: (sticky: Sticky, sortAgain?: boolean) => void;\r\n    notifySubscribers: (sort?: boolean) => void;\r\n    syncScrollSticky: (sticky: Sticky) => void;\r\n  };\r\n}\r\n\r\nexport interface IScrollablePaneState {\r\n  stickyTopHeight: number;\r\n  stickyBottomHeight: number;\r\n  scrollbarWidth: number | undefined;\r\n  scrollbarHeight: number | undefined;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IScrollablePaneStyleProps, IScrollablePaneStyles>();\r\n\r\nexport class ScrollablePaneBase extends BaseComponent<IScrollablePaneProps, IScrollablePaneState> implements IScrollablePane {\r\n  public static childContextTypes: React.ValidationMap<IScrollablePaneContext> = {\r\n    scrollablePane: PropTypes.object\r\n  };\r\n\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _stickyAboveRef = React.createRef<HTMLDivElement>();\r\n  private _stickyBelowRef = React.createRef<HTMLDivElement>();\r\n  private _contentContainer = React.createRef<HTMLDivElement>();\r\n  private _subscribers: Set<Function>;\r\n  private _stickies: Set<Sticky>;\r\n  private _mutationObserver: MutationObserver;\r\n  private _notifyThrottled: () => void;\r\n\r\n  constructor(props: IScrollablePaneProps) {\r\n    super(props);\r\n    this._subscribers = new Set<Function>();\r\n    this._stickies = new Set<Sticky>();\r\n\r\n    this.state = {\r\n      stickyTopHeight: 0,\r\n      stickyBottomHeight: 0,\r\n      scrollbarWidth: undefined,\r\n      scrollbarHeight: undefined\r\n    };\r\n\r\n    this._notifyThrottled = this._async.throttle(this.notifySubscribers, 50);\r\n  }\r\n\r\n  public get root(): HTMLDivElement | null {\r\n    return this._root.current;\r\n  }\r\n\r\n  public get stickyAbove(): HTMLDivElement | null {\r\n    return this._stickyAboveRef.current;\r\n  }\r\n\r\n  public get stickyBelow(): HTMLDivElement | null {\r\n    return this._stickyBelowRef.current;\r\n  }\r\n\r\n  public get contentContainer(): HTMLDivElement | null {\r\n    return this._contentContainer.current;\r\n  }\r\n\r\n  public getChildContext(): IScrollablePaneContext {\r\n    return {\r\n      scrollablePane: {\r\n        subscribe: this.subscribe,\r\n        unsubscribe: this.unsubscribe,\r\n        addSticky: this.addSticky,\r\n        removeSticky: this.removeSticky,\r\n        updateStickyRefHeights: this.updateStickyRefHeights,\r\n        sortSticky: this.sortSticky,\r\n        notifySubscribers: this.notifySubscribers,\r\n        syncScrollSticky: this.syncScrollSticky\r\n      }\r\n    };\r\n  }\r\n\r\n  public componentDidMount() {\r\n    const { initialScrollPosition } = this.props;\r\n    this._events.on(this.contentContainer, 'scroll', this._onScroll);\r\n    this._events.on(window, 'resize', this._onWindowResize);\r\n    if (this.contentContainer && initialScrollPosition) {\r\n      this.contentContainer.scrollTop = initialScrollPosition;\r\n    }\r\n\r\n    // Set sticky distances from top property, then sort in correct order and notify subscribers\r\n    this.setStickiesDistanceFromTop();\r\n    this._stickies.forEach(sticky => {\r\n      this.sortSticky(sticky);\r\n    });\r\n    this.notifySubscribers();\r\n\r\n    if ('MutationObserver' in window) {\r\n      this._mutationObserver = new MutationObserver(mutation => {\r\n        // Function to check if mutation is occuring in stickyAbove or stickyBelow\r\n        function checkIfMutationIsSticky(mutationRecord: MutationRecord): boolean {\r\n          if (this.stickyAbove !== null && this.stickyBelow !== null) {\r\n            return this.stickyAbove.contains(mutationRecord.target) || this.stickyBelow.contains(mutationRecord.target);\r\n          }\r\n          return false;\r\n        }\r\n\r\n        // Compute the scrollbar height which might have changed due to change in width of the content which might cause overflow\r\n        const scrollbarHeight = this._getScrollbarHeight();\r\n        // check if the scroll bar height has changed and update the state so that it's postioned correctly below sticky footer\r\n        if (scrollbarHeight !== this.state.scrollbarHeight) {\r\n          this.setState({\r\n            scrollbarHeight: scrollbarHeight\r\n          });\r\n        }\r\n\r\n        // Notify subscribers again to re-check whether Sticky should be Sticky'd or not\r\n        this.notifySubscribers();\r\n\r\n        // If mutation occurs in sticky header or footer, then update sticky top/bottom heights\r\n        if (mutation.some(checkIfMutationIsSticky.bind(this))) {\r\n          this.updateStickyRefHeights();\r\n        } else {\r\n          // If mutation occurs in scrollable region, then find Sticky it belongs to and force update\r\n          const stickyList: Sticky[] = [];\r\n          this._stickies.forEach(sticky => {\r\n            if (sticky.root && sticky.root.contains(mutation[0].target)) {\r\n              stickyList.push(sticky);\r\n            }\r\n          });\r\n          if (stickyList.length) {\r\n            stickyList.forEach(sticky => {\r\n              sticky.forceUpdate();\r\n            });\r\n          }\r\n        }\r\n      });\r\n\r\n      if (this.root) {\r\n        this._mutationObserver.observe(this.root, {\r\n          childList: true,\r\n          attributes: true,\r\n          subtree: true,\r\n          characterData: true\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    this._events.off(this.contentContainer);\r\n    this._events.off(window);\r\n\r\n    if (this._mutationObserver) {\r\n      this._mutationObserver.disconnect();\r\n    }\r\n  }\r\n\r\n  // Only updates if props/state change, just to prevent excessive setState with updateStickyRefHeights\r\n  public shouldComponentUpdate(nextProps: IScrollablePaneProps, nextState: IScrollablePaneState): boolean {\r\n    return (\r\n      this.props.children !== nextProps.children ||\r\n      this.props.initialScrollPosition !== nextProps.initialScrollPosition ||\r\n      this.props.className !== nextProps.className ||\r\n      this.state.stickyTopHeight !== nextState.stickyTopHeight ||\r\n      this.state.stickyBottomHeight !== nextState.stickyBottomHeight ||\r\n      this.state.scrollbarWidth !== nextState.scrollbarWidth ||\r\n      this.state.scrollbarHeight !== nextState.scrollbarHeight\r\n    );\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IScrollablePaneProps, prevState: IScrollablePaneState) {\r\n    const initialScrollPosition = this.props.initialScrollPosition;\r\n    if (this.contentContainer && typeof initialScrollPosition === 'number' && prevProps.initialScrollPosition !== initialScrollPosition) {\r\n      this.contentContainer.scrollTop = initialScrollPosition;\r\n    }\r\n\r\n    // Update subscribers when stickyTopHeight/stickyBottomHeight changes\r\n    if (prevState.stickyTopHeight !== this.state.stickyTopHeight || prevState.stickyBottomHeight !== this.state.stickyBottomHeight) {\r\n      this.notifySubscribers();\r\n    }\r\n\r\n    this._async.setTimeout(this._onWindowResize, 0);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, theme, styles } = this.props;\r\n    const { stickyTopHeight, stickyBottomHeight } = this.state;\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      scrollbarVisibility: this.props.scrollbarVisibility\r\n    });\r\n\r\n    return (\r\n      <div {...getNativeProps(this.props, divProperties)} ref={this._root} className={classNames.root}>\r\n        <div ref={this._contentContainer} className={classNames.contentContainer} data-is-scrollable={true}>\r\n          {this.props.children}\r\n        </div>\r\n        <div ref={this._stickyAboveRef} className={classNames.stickyAbove} style={this._getStickyContainerStyle(stickyTopHeight, true)} />\r\n        <div className={classNames.stickyBelow} style={this._getStickyContainerStyle(stickyBottomHeight, false)}>\r\n          <div ref={this._stickyBelowRef} className={classNames.stickyBelowItems} />\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public setStickiesDistanceFromTop(): void {\r\n    if (this.contentContainer) {\r\n      this._stickies.forEach(sticky => {\r\n        sticky.setDistanceFromTop(this.contentContainer as HTMLDivElement);\r\n      });\r\n    }\r\n  }\r\n\r\n  public forceLayoutUpdate() {\r\n    this._onWindowResize();\r\n  }\r\n\r\n  public subscribe = (handler: Function): void => {\r\n    this._subscribers.add(handler);\r\n  };\r\n\r\n  public unsubscribe = (handler: Function): void => {\r\n    this._subscribers.delete(handler);\r\n  };\r\n\r\n  public addSticky = (sticky: Sticky): void => {\r\n    this._stickies.add(sticky);\r\n\r\n    // If ScrollablePane is mounted, then sort sticky in correct place\r\n    if (this.contentContainer) {\r\n      sticky.setDistanceFromTop(this.contentContainer);\r\n      this.sortSticky(sticky);\r\n    }\r\n    this.notifySubscribers();\r\n  };\r\n\r\n  public removeSticky = (sticky: Sticky): void => {\r\n    this._stickies.delete(sticky);\r\n    this._removeStickyFromContainers(sticky);\r\n    this.notifySubscribers();\r\n  };\r\n\r\n  public sortSticky = (sticky: Sticky, sortAgain?: boolean): void => {\r\n    if (this.stickyAbove && this.stickyBelow) {\r\n      if (sortAgain) {\r\n        this._removeStickyFromContainers(sticky);\r\n      }\r\n      if (sticky.canStickyTop && sticky.stickyContentTop) {\r\n        this._addToStickyContainer(sticky, this.stickyAbove, sticky.stickyContentTop);\r\n      }\r\n\r\n      if (sticky.canStickyBottom && sticky.stickyContentBottom) {\r\n        this._addToStickyContainer(sticky, this.stickyBelow, sticky.stickyContentBottom);\r\n      }\r\n    }\r\n  };\r\n\r\n  public updateStickyRefHeights = (): void => {\r\n    const stickyItems = this._stickies;\r\n\r\n    let stickyTopHeight = 0;\r\n    let stickyBottomHeight = 0;\r\n\r\n    stickyItems.forEach((sticky: Sticky) => {\r\n      const { isStickyTop, isStickyBottom } = sticky.state;\r\n      if (sticky.nonStickyContent) {\r\n        if (isStickyTop) {\r\n          stickyTopHeight += sticky.nonStickyContent.offsetHeight;\r\n        }\r\n        if (isStickyBottom) {\r\n          stickyBottomHeight += sticky.nonStickyContent.offsetHeight;\r\n        }\r\n        this._checkStickyStatus(sticky);\r\n      }\r\n    });\r\n\r\n    this.setState({\r\n      stickyTopHeight: stickyTopHeight,\r\n      stickyBottomHeight: stickyBottomHeight\r\n    });\r\n  };\r\n\r\n  public notifySubscribers = (): void => {\r\n    if (this.contentContainer) {\r\n      this._subscribers.forEach(handle => {\r\n        // this.stickyBelow is passed in for calculating distance to determine Sticky status\r\n        handle(this.contentContainer, this.stickyBelow);\r\n      });\r\n    }\r\n  };\r\n\r\n  public getScrollPosition = (): number => {\r\n    if (this.contentContainer) {\r\n      return this.contentContainer.scrollTop;\r\n    }\r\n\r\n    return 0;\r\n  };\r\n\r\n  public syncScrollSticky = (sticky: Sticky): void => {\r\n    if (sticky && this.contentContainer) {\r\n      sticky.syncScroll(this.contentContainer);\r\n    }\r\n  };\r\n\r\n  private _checkStickyStatus(sticky: Sticky): void {\r\n    if (this.stickyAbove && this.stickyBelow && this.contentContainer && sticky.nonStickyContent) {\r\n      // If sticky is sticky, then append content to appropriate container\r\n      if (sticky.state.isStickyTop || sticky.state.isStickyBottom) {\r\n        if (sticky.state.isStickyTop && !this.stickyAbove.contains(sticky.nonStickyContent) && sticky.stickyContentTop) {\r\n          sticky.addSticky(sticky.stickyContentTop);\r\n        }\r\n\r\n        if (sticky.state.isStickyBottom && !this.stickyBelow.contains(sticky.nonStickyContent) && sticky.stickyContentBottom) {\r\n          sticky.addSticky(sticky.stickyContentBottom);\r\n        }\r\n      } else if (!this.contentContainer.contains(sticky.nonStickyContent)) {\r\n        // Reset sticky if it's not sticky and not in the contentContainer element\r\n        sticky.resetSticky();\r\n      }\r\n    }\r\n  }\r\n\r\n  private _addToStickyContainer = (sticky: Sticky, stickyContainer: HTMLDivElement, stickyContentToAdd: HTMLDivElement): void => {\r\n    // If there's no children, append child to list, otherwise, sort though array and append at correct position\r\n    if (!stickyContainer.children.length) {\r\n      stickyContainer.appendChild(stickyContentToAdd);\r\n    } else {\r\n      // If stickyContentToAdd isn't a child element of target container, then append\r\n      if (!stickyContainer.contains(stickyContentToAdd)) {\r\n        const stickyChildrenElements: Element[] = [].slice.call(stickyContainer.children);\r\n\r\n        const stickyList: Sticky[] = [];\r\n        // Get stickies.  Filter by canStickyTop/Bottom, then sort by distance from top, and then\r\n        // filter by elements that are in the stickyContainer already.\r\n        this._stickies.forEach(stickyItem => {\r\n          if (stickyContainer === this.stickyAbove && sticky.canStickyTop) {\r\n            stickyList.push(stickyItem);\r\n          } else if (sticky.canStickyBottom) {\r\n            stickyList.push(stickyItem);\r\n          }\r\n        });\r\n\r\n        const stickyListSorted = stickyList\r\n          .sort((a, b) => {\r\n            return a.distanceFromTop - b.distanceFromTop;\r\n          })\r\n          .filter(item => {\r\n            const stickyContent = stickyContainer === this.stickyAbove ? item.stickyContentTop : item.stickyContentBottom;\r\n            if (stickyContent) {\r\n              return stickyChildrenElements.indexOf(stickyContent) > -1;\r\n            }\r\n          });\r\n\r\n        // Get first element that has a distance from top that is further than our sticky that is being added\r\n        let targetStickyToAppendBefore: Sticky | undefined = undefined;\r\n        for (const i in stickyListSorted) {\r\n          if (stickyListSorted[i].distanceFromTop >= sticky.distanceFromTop) {\r\n            targetStickyToAppendBefore = stickyListSorted[i];\r\n            break;\r\n          }\r\n        }\r\n\r\n        // If target element to append before is known, then grab respective stickyContentTop/Bottom element and insert before\r\n        let targetContainer: HTMLDivElement | null = null;\r\n        if (targetStickyToAppendBefore) {\r\n          targetContainer =\r\n            stickyContainer === this.stickyAbove\r\n              ? targetStickyToAppendBefore.stickyContentTop\r\n              : targetStickyToAppendBefore.stickyContentBottom;\r\n        }\r\n        stickyContainer.insertBefore(stickyContentToAdd, targetContainer);\r\n      }\r\n    }\r\n  };\r\n\r\n  private _removeStickyFromContainers = (sticky: Sticky): void => {\r\n    if (this.stickyAbove && sticky.stickyContentTop && this.stickyAbove.contains(sticky.stickyContentTop)) {\r\n      this.stickyAbove.removeChild(sticky.stickyContentTop);\r\n    }\r\n    if (this.stickyBelow && sticky.stickyContentBottom && this.stickyBelow.contains(sticky.stickyContentBottom)) {\r\n      this.stickyBelow.removeChild(sticky.stickyContentBottom);\r\n    }\r\n  };\r\n\r\n  private _onWindowResize = (): void => {\r\n    const scrollbarWidth = this._getScrollbarWidth();\r\n    const scrollbarHeight = this._getScrollbarHeight();\r\n\r\n    this.setState({\r\n      scrollbarWidth,\r\n      scrollbarHeight\r\n    });\r\n\r\n    this.notifySubscribers();\r\n  };\r\n\r\n  private _getStickyContainerStyle = (height: number, isTop: boolean): React.CSSProperties => {\r\n    return {\r\n      height: height,\r\n      ...(getRTL()\r\n        ? {\r\n            right: '0',\r\n            left: `${this.state.scrollbarWidth || this._getScrollbarWidth() || 0}px`\r\n          }\r\n        : {\r\n            left: '0',\r\n            right: `${this.state.scrollbarWidth || this._getScrollbarWidth() || 0}px`\r\n          }),\r\n      ...(isTop\r\n        ? {\r\n            top: '0'\r\n          }\r\n        : {\r\n            bottom: `${this.state.scrollbarHeight || this._getScrollbarHeight() || 0}px`\r\n          })\r\n    };\r\n  };\r\n\r\n  private _getScrollbarWidth(): number | undefined {\r\n    const { contentContainer } = this;\r\n    return contentContainer ? contentContainer.offsetWidth - contentContainer.clientWidth : undefined;\r\n  }\r\n\r\n  private _getScrollbarHeight(): number | undefined {\r\n    const { contentContainer } = this;\r\n    return contentContainer ? contentContainer.offsetHeight - contentContainer.clientHeight : undefined;\r\n  }\r\n\r\n  private _onScroll = () => {\r\n    const { contentContainer } = this;\r\n\r\n    if (contentContainer) {\r\n      this._stickies.forEach((sticky: Sticky) => {\r\n        sticky.syncScroll(contentContainer);\r\n      });\r\n    }\r\n\r\n    this._notifyThrottled();\r\n  };\r\n}\r\n","import { IScrollablePaneStyleProps, IScrollablePaneStyles } from './ScrollablePane.types';\r\nimport { HighContrastSelector, IStyle, ZIndexes, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-ScrollablePane',\r\n  contentContainer: 'ms-ScrollablePane--contentContainer'\r\n};\r\n\r\nexport const getStyles = (props: IScrollablePaneStyleProps): IScrollablePaneStyles => {\r\n  const { className, theme } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const AboveAndBelowStyles: IStyle = {\r\n    position: 'absolute',\r\n    pointerEvents: 'auto',\r\n    zIndex: ZIndexes.ScrollablePane\r\n  };\r\n\r\n  const positioningStyle: IStyle = {\r\n    zIndex: ZIndexes.ScrollablePane,\r\n    position: 'absolute',\r\n    top: 0,\r\n    right: 0,\r\n    bottom: 0,\r\n    left: 0,\r\n    WebkitOverflowScrolling: 'touch'\r\n  };\r\n\r\n  return {\r\n    root: [classNames.root, theme.fonts.medium, positioningStyle, className],\r\n    contentContainer: [\r\n      classNames.contentContainer,\r\n      {\r\n        overflowY: props.scrollbarVisibility === 'always' ? 'scroll' : 'auto'\r\n      },\r\n      positioningStyle\r\n    ],\r\n    stickyAbove: [\r\n      {\r\n        top: 0,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderBottom: '1px solid WindowText'\r\n          }\r\n        }\r\n      },\r\n      AboveAndBelowStyles\r\n    ],\r\n    stickyBelow: [\r\n      {\r\n        bottom: 0,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderTop: '1px solid WindowText'\r\n          }\r\n        }\r\n      },\r\n      AboveAndBelowStyles\r\n    ],\r\n    stickyBelowItems: [\r\n      {\r\n        bottom: 0\r\n      },\r\n      AboveAndBelowStyles,\r\n      {\r\n        width: '100%'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IScrollablePaneProps, IScrollablePaneStyleProps, IScrollablePaneStyles } from './ScrollablePane.types';\r\nimport { ScrollablePaneBase } from './ScrollablePane.base';\r\nimport { getStyles } from './ScrollablePane.styles';\r\n\r\nexport const ScrollablePane: React.StatelessComponent<IScrollablePaneProps> = styled<\r\n  IScrollablePaneProps,\r\n  IScrollablePaneStyleProps,\r\n  IScrollablePaneStyles\r\n>(ScrollablePaneBase, getStyles, undefined, { scope: 'ScrollablePane' });\r\n","import * as React from 'react';\r\nimport * as PropTypes from 'prop-types';\r\nimport { BaseComponent } from '../../Utilities';\r\nimport { IStickyProps, StickyPositionType } from './Sticky.types';\r\nimport { IScrollablePaneContext } from '../ScrollablePane/ScrollablePane.base';\r\n\r\nexport interface IStickyState {\r\n  isStickyTop: boolean;\r\n  isStickyBottom: boolean;\r\n}\r\n\r\nexport interface IStickyContext {\r\n  scrollablePane: PropTypes.Requireable<object>;\r\n}\r\n\r\nexport class Sticky extends BaseComponent<IStickyProps, IStickyState> {\r\n  public static defaultProps: IStickyProps = {\r\n    stickyPosition: StickyPositionType.Both,\r\n    isScrollSynced: true\r\n  };\r\n\r\n  public static contextTypes: IStickyContext = {\r\n    scrollablePane: PropTypes.object\r\n  };\r\n\r\n  public context: IScrollablePaneContext;\r\n\r\n  public distanceFromTop: number;\r\n\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  private _stickyContentTop = React.createRef<HTMLDivElement>();\r\n  private _stickyContentBottom = React.createRef<HTMLDivElement>();\r\n  private _nonStickyContent = React.createRef<HTMLDivElement>();\r\n  private _placeHolder = React.createRef<HTMLDivElement>();\r\n  private _activeElement: HTMLElement | undefined;\r\n\r\n  constructor(props: IStickyProps) {\r\n    super(props);\r\n    this.state = {\r\n      isStickyTop: false,\r\n      isStickyBottom: false\r\n    };\r\n    this.distanceFromTop = 0;\r\n    this._activeElement = undefined;\r\n  }\r\n\r\n  public get root(): HTMLDivElement | null {\r\n    return this._root.current;\r\n  }\r\n\r\n  public get placeholder(): HTMLDivElement | null {\r\n    return this._placeHolder.current;\r\n  }\r\n\r\n  public get stickyContentTop(): HTMLDivElement | null {\r\n    return this._stickyContentTop.current;\r\n  }\r\n\r\n  public get stickyContentBottom(): HTMLDivElement | null {\r\n    return this._stickyContentBottom.current;\r\n  }\r\n\r\n  public get nonStickyContent(): HTMLDivElement | null {\r\n    return this._nonStickyContent.current;\r\n  }\r\n\r\n  public get canStickyTop(): boolean {\r\n    return this.props.stickyPosition === StickyPositionType.Both || this.props.stickyPosition === StickyPositionType.Header;\r\n  }\r\n\r\n  public get canStickyBottom(): boolean {\r\n    return this.props.stickyPosition === StickyPositionType.Both || this.props.stickyPosition === StickyPositionType.Footer;\r\n  }\r\n\r\n  public syncScroll = (container: HTMLElement): void => {\r\n    const { nonStickyContent } = this;\r\n\r\n    if (nonStickyContent && this.props.isScrollSynced) {\r\n      nonStickyContent.scrollLeft = container.scrollLeft;\r\n    }\r\n  };\r\n\r\n  public componentDidMount(): void {\r\n    const { scrollablePane } = this.context;\r\n\r\n    if (!scrollablePane) {\r\n      return;\r\n    }\r\n\r\n    scrollablePane.subscribe(this._onScrollEvent);\r\n    scrollablePane.addSticky(this);\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    const { scrollablePane } = this.context;\r\n\r\n    if (!scrollablePane) {\r\n      return;\r\n    }\r\n\r\n    scrollablePane.unsubscribe(this._onScrollEvent);\r\n    scrollablePane.removeSticky(this);\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IStickyProps, prevState: IStickyState): void {\r\n    const { scrollablePane } = this.context;\r\n\r\n    if (!scrollablePane) {\r\n      return;\r\n    }\r\n\r\n    if (prevState.isStickyTop !== this.state.isStickyTop || prevState.isStickyBottom !== this.state.isStickyBottom) {\r\n      if (this._activeElement) {\r\n        this._activeElement.focus();\r\n      }\r\n      scrollablePane.updateStickyRefHeights();\r\n      // Sync Sticky scroll position with content container on each update\r\n      scrollablePane.syncScrollSticky(this);\r\n    }\r\n  }\r\n\r\n  public shouldComponentUpdate(nextProps: IStickyProps, nextState: IStickyState): boolean {\r\n    if (!this.context.scrollablePane) {\r\n      return true;\r\n    }\r\n\r\n    const { isStickyTop, isStickyBottom } = this.state;\r\n\r\n    return (isStickyTop !== nextState.isStickyTop ||\r\n      isStickyBottom !== nextState.isStickyBottom ||\r\n      this.props.stickyPosition !== nextProps.stickyPosition ||\r\n      this.props.children !== nextProps.children ||\r\n      _isOffsetHeightDifferent(this._nonStickyContent, this._stickyContentTop) ||\r\n      _isOffsetHeightDifferent(this._nonStickyContent, this._stickyContentBottom) ||\r\n      _isOffsetHeightDifferent(this._nonStickyContent, this._placeHolder) ||\r\n      _isScrollWidthDifferent(this._nonStickyContent, this._placeHolder)) as boolean;\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { isStickyTop, isStickyBottom } = this.state;\r\n    const { stickyClassName, children } = this.props;\r\n\r\n    if (!this.context.scrollablePane) {\r\n      return <div>{this.props.children}</div>;\r\n    }\r\n\r\n    return (\r\n      <div ref={this._root}>\r\n        {this.canStickyTop && (\r\n          <div ref={this._stickyContentTop} aria-hidden={!isStickyTop} style={{ pointerEvents: isStickyTop ? 'auto' : 'none' }}>\r\n            <div style={this._getStickyPlaceholderHeight(isStickyTop)} />\r\n          </div>\r\n        )}\r\n        {this.canStickyBottom && (\r\n          <div ref={this._stickyContentBottom} aria-hidden={!isStickyBottom} style={{ pointerEvents: isStickyBottom ? 'auto' : 'none' }}>\r\n            <div style={this._getStickyPlaceholderHeight(isStickyBottom)} />\r\n          </div>\r\n        )}\r\n        <div style={this._getNonStickyPlaceholderHeightAndWidth()} ref={this._placeHolder}>\r\n          <div\r\n            ref={this._nonStickyContent}\r\n            className={isStickyTop || isStickyBottom ? stickyClassName : undefined}\r\n            style={this._getContentStyles(isStickyTop || isStickyBottom)}\r\n          >\r\n            {children}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public addSticky(stickyContent: HTMLDivElement): void {\r\n    if (this.nonStickyContent) {\r\n      stickyContent.appendChild(this.nonStickyContent);\r\n    }\r\n  }\r\n\r\n  public resetSticky(): void {\r\n    if (this.nonStickyContent && this.placeholder) {\r\n      this.placeholder.appendChild(this.nonStickyContent);\r\n    }\r\n  }\r\n\r\n  public setDistanceFromTop(container: HTMLDivElement): void {\r\n    this._setDistanceFromTop(this._getNonStickyDistanceFromTop(container));\r\n  }\r\n\r\n  private _setDistanceFromTop(distance: number): void {\r\n    const { scrollablePane } = this.context;\r\n\r\n    if (this.distanceFromTop !== distance && scrollablePane) {\r\n      this.distanceFromTop = distance;\r\n      scrollablePane.sortSticky(this, true);\r\n      this.forceUpdate();\r\n      scrollablePane.syncScrollSticky(this);\r\n    }\r\n  }\r\n\r\n  private _getContentStyles(isSticky: boolean): React.CSSProperties {\r\n    return {\r\n      backgroundColor: this.props.stickyBackgroundColor || this._getBackground(),\r\n      overflow: isSticky ? 'hidden' : ''\r\n    };\r\n  }\r\n\r\n  private _getStickyPlaceholderHeight(isSticky: boolean): React.CSSProperties {\r\n    const height = this.nonStickyContent ? this.nonStickyContent.offsetHeight : 0;\r\n    return {\r\n      visibility: isSticky ? 'hidden' : 'visible',\r\n      height: isSticky ? 0 : height\r\n    };\r\n  }\r\n\r\n  private _getNonStickyPlaceholderHeightAndWidth(): React.CSSProperties {\r\n    const { isStickyTop, isStickyBottom } = this.state;\r\n    if (isStickyTop || isStickyBottom) {\r\n      let height = 0,\r\n        width = 0;\r\n      if (this.nonStickyContent) {\r\n        height = this.nonStickyContent.offsetHeight;\r\n        width = this.nonStickyContent.scrollWidth;\r\n      }\r\n      return {\r\n        height: height,\r\n        width: width\r\n      };\r\n    } else {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  private _onScrollEvent = (container: HTMLElement, footerStickyContainer: HTMLElement): void => {\r\n    if (this.root && this.nonStickyContent) {\r\n      this._setDistanceFromTop(this._getNonStickyDistanceFromTop(container));\r\n      let isStickyTop = false;\r\n      let isStickyBottom = false;\r\n\r\n      if (this.canStickyTop) {\r\n        const distanceToStickTop = this.distanceFromTop - this._getStickyDistanceFromTop();\r\n        isStickyTop = distanceToStickTop < container.scrollTop;\r\n      }\r\n\r\n      // Can sticky bottom if the scrollablePane - total sticky footer height is smaller than the sticky's distance from the top of the pane\r\n      if (this.canStickyBottom && container.clientHeight - footerStickyContainer.offsetHeight <= this.distanceFromTop) {\r\n        isStickyBottom =\r\n          this.distanceFromTop - Math.floor(container.scrollTop) >=\r\n          this._getStickyDistanceFromTopForFooter(container, footerStickyContainer);\r\n      }\r\n\r\n      if (\r\n        document.activeElement &&\r\n        this.nonStickyContent.contains(document.activeElement) &&\r\n        (this.state.isStickyTop !== isStickyTop || this.state.isStickyBottom !== isStickyBottom)\r\n      ) {\r\n        this._activeElement = document.activeElement as HTMLElement;\r\n      } else {\r\n        this._activeElement = undefined;\r\n      }\r\n\r\n      this.setState({\r\n        isStickyTop: this.canStickyTop && isStickyTop,\r\n        isStickyBottom: isStickyBottom\r\n      });\r\n    }\r\n  };\r\n\r\n  private _getStickyDistanceFromTop = (): number => {\r\n    let distance = 0;\r\n    if (this.stickyContentTop) {\r\n      distance = this.stickyContentTop.offsetTop;\r\n    }\r\n\r\n    return distance;\r\n  };\r\n\r\n  private _getStickyDistanceFromTopForFooter = (container: HTMLElement, footerStickyVisibleContainer: HTMLElement): number => {\r\n    let distance = 0;\r\n    if (this.stickyContentBottom) {\r\n      distance = container.clientHeight - footerStickyVisibleContainer.offsetHeight + this.stickyContentBottom.offsetTop;\r\n    }\r\n\r\n    return distance;\r\n  };\r\n\r\n  private _getNonStickyDistanceFromTop = (container: HTMLElement): number => {\r\n    let distance = 0;\r\n    let currElem = this.root;\r\n\r\n    if (currElem) {\r\n      while (currElem && currElem.offsetParent !== container) {\r\n        distance += currElem.offsetTop;\r\n        currElem = currElem.offsetParent as HTMLDivElement;\r\n      }\r\n\r\n      if (currElem && currElem.offsetParent === container) {\r\n        distance += currElem.offsetTop;\r\n      }\r\n    }\r\n    return distance;\r\n  };\r\n\r\n  // Gets background of nearest parent element that has a declared background-color attribute\r\n  private _getBackground(): string | undefined {\r\n    if (!this.root) {\r\n      return undefined;\r\n    }\r\n\r\n    let curr: HTMLElement = this.root;\r\n\r\n    while (\r\n      window.getComputedStyle(curr).getPropertyValue('background-color') === 'rgba(0, 0, 0, 0)' ||\r\n      window.getComputedStyle(curr).getPropertyValue('background-color') === 'transparent'\r\n    ) {\r\n      if (curr.tagName === 'HTML') {\r\n        // Fallback color if no element has a declared background-color attribute\r\n        return undefined;\r\n      }\r\n      if (curr.parentElement) {\r\n        curr = curr.parentElement;\r\n      }\r\n    }\r\n    return window.getComputedStyle(curr).getPropertyValue('background-color');\r\n  }\r\n}\r\n\r\nfunction _isOffsetHeightDifferent(a: React.RefObject<HTMLElement>, b: React.RefObject<HTMLDivElement>): boolean {\r\n  return (a && b && a.current && b.current && a.current.offsetHeight !== b.current.offsetHeight) as boolean;\r\n}\r\n\r\nfunction _isScrollWidthDifferent(a: React.RefObject<HTMLElement>, b: React.RefObject<HTMLDivElement>): boolean {\r\n  return (a && b && a.current && b.current && a.current.scrollWidth !== b.current.scrollWidth) as boolean;\r\n}\r\n","import * as React from 'react';\r\nimport { TooltipBase } from './Tooltip.base';\r\nimport { ICalloutProps } from '../../Callout';\r\nimport { IRenderFunction } from '../../Utilities';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\r\n\r\n/**\r\n * {@docCategory Tooltip}\r\n */\r\nexport interface ITooltip {}\r\n\r\n/**\r\n * Tooltip component props.\r\n * {@docCategory Tooltip}\r\n */\r\nexport interface ITooltipProps extends React.HTMLAttributes<HTMLDivElement | TooltipBase> {\r\n  /**\r\n   * Optional callback to access the ITooltip interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<ITooltip>;\r\n\r\n  /**\r\n   * Properties to pass through for Callout, reference detail properties in ICalloutProps\r\n   * @defaultvalue isBeakVisible: true, beakWidth: 16, gapSpace: 0, setInitialFocus: true, doNotLayer: false\r\n   */\r\n  calloutProps?: ICalloutProps;\r\n\r\n  /**\r\n   *  String to be passed to the tooltip\r\n   */\r\n  content?: string;\r\n\r\n  /**\r\n   *  Render function to populate content area\r\n   */\r\n  onRenderContent?: IRenderFunction<ITooltipProps>;\r\n\r\n  /**\r\n   * Length of delay. Can be set to zero if you do not want a delay.\r\n   * @defaultvalue medium\r\n   */\r\n  delay?: TooltipDelay;\r\n\r\n  /**\r\n   * Max width of tooltip\r\n   * @defaultvalue 364px\r\n   */\r\n  maxWidth?: string | null;\r\n\r\n  /**\r\n   * Element to anchor the Tooltip to.\r\n   */\r\n  targetElement?: HTMLElement;\r\n\r\n  /**\r\n   * Indicator of how the tooltip should be anchored to its targetElement.\r\n   * @defaultvalue DirectionalHint.topCenter\r\n   */\r\n  directionalHint?: DirectionalHint;\r\n\r\n  /**\r\n   * How the element should be positioned in RTL layouts.\r\n   * If not specified, a mirror of `directionalHint` will be used instead\r\n   */\r\n  directionalHintForRTL?: DirectionalHint;\r\n\r\n  /**\r\n   * Theme to apply to the component.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules.\r\n   */\r\n  styles?: IStyleFunctionOrObject<ITooltipStyleProps, ITooltipStyles>;\r\n}\r\n\r\n/**\r\n * {@docCategory Tooltip}\r\n */\r\nexport enum TooltipDelay {\r\n  zero = 0,\r\n  medium = 1,\r\n  long = 2\r\n}\r\n\r\n/**\r\n * {@docCategory Tooltip}\r\n */\r\nexport interface ITooltipStyleProps {\r\n  /**\r\n   * Accept theme prop.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Accept custom classNames\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Delay before tooltip appears.\r\n   */\r\n  delay?: TooltipDelay;\r\n\r\n  /**\r\n   * Maximum width of tooltip.\r\n   */\r\n  maxWidth?: string;\r\n}\r\n\r\n/**\r\n * {@docCategory Tooltip}\r\n */\r\nexport interface ITooltipStyles {\r\n  /**\r\n   * Style for the root element.\r\n   */\r\n  root: IStyle;\r\n\r\n  /**\r\n   * Style for the content element.\r\n   */\r\n  content: IStyle;\r\n\r\n  /**\r\n   * Style for the subtext element.\r\n   */\r\n  subText: IStyle;\r\n}\r\n","import * as React from 'react';\r\nimport { classNamesFunction, divProperties, getNativeProps } from '../../Utilities';\r\nimport { IProcessedStyleSet } from '../../Styling';\r\nimport { ITooltipProps, ITooltipStyleProps, ITooltipStyles, TooltipDelay } from './Tooltip.types';\r\nimport { Callout } from '../../Callout';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\n\r\nconst getClassNames = classNamesFunction<ITooltipStyleProps, ITooltipStyles>();\r\n\r\nexport class TooltipBase extends React.Component<ITooltipProps, any> {\r\n  // Specify default props values\r\n  public static defaultProps: Partial<ITooltipProps> = {\r\n    directionalHint: DirectionalHint.topCenter,\r\n    delay: TooltipDelay.medium,\r\n    maxWidth: '364px',\r\n    calloutProps: {\r\n      isBeakVisible: true,\r\n      beakWidth: 16,\r\n      gapSpace: 0,\r\n      setInitialFocus: true,\r\n      doNotLayer: false\r\n    }\r\n  };\r\n\r\n  private _classNames: IProcessedStyleSet<ITooltipStyles>;\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      className,\r\n      calloutProps,\r\n      delay,\r\n      directionalHint,\r\n      directionalHintForRTL,\r\n      styles,\r\n      id,\r\n      maxWidth,\r\n      onRenderContent = this._onRenderContent,\r\n      targetElement,\r\n      theme\r\n    } = this.props;\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className: className || (calloutProps && calloutProps.className),\r\n      delay: delay!,\r\n      maxWidth: maxWidth!\r\n    });\r\n\r\n    return (\r\n      <Callout\r\n        target={targetElement}\r\n        directionalHint={directionalHint}\r\n        directionalHintForRTL={directionalHintForRTL}\r\n        {...calloutProps}\r\n        {...getNativeProps(this.props, divProperties, ['id'])} // omitting ID due to it being used in the div below\r\n        className={this._classNames.root}\r\n      >\r\n        <div\r\n          className={this._classNames.content}\r\n          id={id}\r\n          role=\"tooltip\"\r\n          onMouseEnter={this.props.onMouseEnter}\r\n          onMouseLeave={this.props.onMouseLeave}\r\n        >\r\n          {onRenderContent(this.props, this._onRenderContent)}\r\n        </div>\r\n      </Callout>\r\n    );\r\n  }\r\n\r\n  private _onRenderContent = (props: ITooltipProps): JSX.Element => {\r\n    return <p className={this._classNames.subText}>{props.content}</p>;\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { TooltipHostBase } from './TooltipHost.base';\r\nimport { TooltipDelay, ITooltipProps } from './Tooltip.types';\r\nimport { ICalloutProps } from '../../Callout';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\r\nimport { IStyle, ITheme } from '../../Styling';\r\n\r\nexport interface ITooltipHost {\r\n  /**\r\n   * Shows the tooltip.\r\n   */\r\n  show: () => void;\r\n\r\n  /**\r\n   * Dismisses the tooltip.\r\n   */\r\n  dismiss: () => void;\r\n}\r\n\r\nexport enum TooltipOverflowMode {\r\n  /** Only show tooltip if parent DOM element is overflowing */\r\n  Parent,\r\n\r\n  /** Only show tooltip if tooltip host's content is overflowing */\r\n  Self\r\n}\r\n\r\n/**\r\n * Tooltip component props.\r\n */\r\nexport interface ITooltipHostProps extends React.HTMLAttributes<HTMLDivElement | TooltipHostBase> {\r\n  /**\r\n   * Optional callback to access the ITooltipHost interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<ITooltipHost>;\r\n\r\n  /**\r\n   * Additional properties to pass through for Callout, reference detail properties in ICalloutProps\r\n   */\r\n  calloutProps?: ICalloutProps;\r\n\r\n  /**\r\n   * Optionally a number of milliseconds to delay closing the tooltip, so that\r\n   * the user has time to hover over the tooltip and interact with it. Hovering\r\n   * over the tooltip will count as hovering over the host, so that the tooltip\r\n   * will stay open if the user is actively interacting with it.\r\n   */\r\n  closeDelay?: number;\r\n\r\n  /**\r\n   * String to be passed to the tooltip\r\n   */\r\n  content?: string;\r\n\r\n  /**\r\n   * Length of delay\r\n   * @defaultvalue medium\r\n   */\r\n  delay?: TooltipDelay;\r\n\r\n  /**\r\n   * Indicator of how the tooltip should be anchored to its targetElement.\r\n   */\r\n  directionalHint?: DirectionalHint;\r\n\r\n  /**\r\n   * How the element should be positioned in RTL layouts.\r\n   * If not specified, a mirror of `directionalHint` will be used instead\r\n   */\r\n  directionalHintForRTL?: DirectionalHint;\r\n\r\n  /**\r\n   * Optional class name to apply to tooltip host.\r\n   */\r\n  hostClassName?: string;\r\n\r\n  /**\r\n   * Only show if there is overflow. If set, the tooltip hosts observes  and only shows the tooltip if this element has overflow.\r\n   * It also uses the parent as target element for the tooltip.\r\n   */\r\n  overflowMode?: TooltipOverflowMode;\r\n\r\n  /**\r\n   * Whether or not to mark the container as described by the tooltip.\r\n   * If not specified, the caller should mark as element as described by the tooltip id.\r\n   */\r\n  setAriaDescribedBy?: boolean;\r\n\r\n  /**\r\n   * Additional properties to pass through for Tooltip, reference detail properties in ITooltipProps\r\n   */\r\n  tooltipProps?: ITooltipProps;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules.\r\n   */\r\n  styles?: IStyleFunctionOrObject<ITooltipHostStyleProps, ITooltipHostStyles>;\r\n\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Notifies when tooltip becomes visible or hidden, whatever the trigger was.\r\n   */\r\n  onTooltipToggle?(isTooltipVisible: boolean): void;\r\n}\r\n\r\nexport interface ITooltipHostStyleProps {\r\n  /**\r\n   * Accept theme prop.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Accept optional classNames for the host wrapper\r\n   */\r\n  className?: string;\r\n}\r\n\r\nexport interface ITooltipHostStyles {\r\n  /**\r\n   * Style for the host wrapper element.\r\n   */\r\n  root: IStyle;\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { TooltipBase } from './Tooltip.base';\r\nimport { ITooltipProps, ITooltipStyleProps, ITooltipStyles } from './Tooltip.types';\r\nimport { getStyles } from './Tooltip.styles';\r\n\r\nexport const Tooltip: React.StatelessComponent<ITooltipProps> = styled<ITooltipProps, ITooltipStyleProps, ITooltipStyles>(\r\n  TooltipBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Tooltip'\r\n  }\r\n);\r\n","import { ITooltipStyleProps, ITooltipStyles, TooltipDelay } from './Tooltip.types';\r\nimport { AnimationClassNames } from '../../Styling';\r\n\r\nexport const getStyles = (props: ITooltipStyleProps): ITooltipStyles => {\r\n  const { className, delay, maxWidth, theme } = props;\r\n  const { palette, fonts } = theme;\r\n\r\n  return {\r\n    root: [\r\n      'ms-Tooltip',\r\n      theme.fonts.medium,\r\n      AnimationClassNames.fadeIn200,\r\n      {\r\n        background: palette.white,\r\n        padding: '8px',\r\n        animationDelay: '300ms',\r\n        maxWidth: maxWidth\r\n      },\r\n      delay === TooltipDelay.zero && {\r\n        animationDelay: '0s'\r\n      },\r\n      delay === TooltipDelay.long && {\r\n        animationDelay: '500ms'\r\n      },\r\n      className\r\n    ],\r\n    content: [\r\n      'ms-Tooltip-content',\r\n      fonts.small,\r\n      {\r\n        color: palette.neutralPrimary,\r\n        wordWrap: 'break-word',\r\n        overflowWrap: 'break-word',\r\n        overflow: 'hidden'\r\n      }\r\n    ],\r\n    subText: [\r\n      'ms-Tooltip-subtext',\r\n      {\r\n        // Using inherit here to avoid unintentional global overrides of the <p> tag.\r\n        fontSize: 'inherit',\r\n        fontWeight: 'inherit',\r\n        color: 'inherit',\r\n        margin: 0\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport {\r\n  BaseComponent,\r\n  divProperties,\r\n  getNativeProps,\r\n  getId,\r\n  assign,\r\n  hasOverflow,\r\n  portalContainsElement,\r\n  classNamesFunction\r\n} from '../../Utilities';\r\nimport { ITooltipHostProps, TooltipOverflowMode, ITooltipHostStyles, ITooltipHostStyleProps, ITooltipHost } from './TooltipHost.types';\r\nimport { Tooltip } from './Tooltip';\r\nimport { TooltipDelay } from './Tooltip.types';\r\n\r\nexport interface ITooltipHostState {\r\n  isTooltipVisible: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<ITooltipHostStyleProps, ITooltipHostStyles>();\r\n\r\nexport class TooltipHostBase extends BaseComponent<ITooltipHostProps, ITooltipHostState> implements ITooltipHost {\r\n  public static defaultProps = {\r\n    delay: TooltipDelay.medium\r\n  };\r\n\r\n  private static _currentVisibleTooltip: ITooltipHost | undefined;\r\n\r\n  // The wrapping div that gets the hover events\r\n  private _tooltipHost = React.createRef<HTMLDivElement>();\r\n  private _classNames: { [key in keyof ITooltipHostStyles]: string };\r\n\r\n  // The ID of the setTimeout that will eventually close the tooltip if the\r\n  // the tooltip isn't hovered over.\r\n  private _closingTimer = -1;\r\n\r\n  // Constructor\r\n  constructor(props: ITooltipHostProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      isTooltipVisible: false\r\n    };\r\n  }\r\n\r\n  // Render\r\n  public render(): JSX.Element {\r\n    const {\r\n      calloutProps,\r\n      children,\r\n      content,\r\n      delay,\r\n      directionalHint,\r\n      directionalHintForRTL,\r\n      hostClassName: className,\r\n      id,\r\n      setAriaDescribedBy = true,\r\n      tooltipProps,\r\n      styles,\r\n      theme\r\n    } = this.props;\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className\r\n    });\r\n\r\n    const { isTooltipVisible } = this.state;\r\n    const tooltipId = id || getId('tooltip');\r\n    const isContentPresent = !!(content || (tooltipProps && tooltipProps.onRenderContent && tooltipProps.onRenderContent()));\r\n    const showTooltip = isTooltipVisible && isContentPresent;\r\n    const ariaDescribedBy = setAriaDescribedBy && isTooltipVisible && isContentPresent ? tooltipId : undefined;\r\n\r\n    return (\r\n      <div\r\n        className={this._classNames.root}\r\n        ref={this._tooltipHost}\r\n        {...{ onFocusCapture: this._onTooltipMouseEnter }}\r\n        {...{ onBlurCapture: this._hideTooltip }}\r\n        onMouseEnter={this._onTooltipMouseEnter}\r\n        onMouseLeave={this._onTooltipMouseLeave}\r\n        aria-describedby={ariaDescribedBy}\r\n      >\r\n        {children}\r\n        {showTooltip && (\r\n          <Tooltip\r\n            id={tooltipId}\r\n            delay={delay}\r\n            content={content}\r\n            targetElement={this._getTargetElement()}\r\n            directionalHint={directionalHint}\r\n            directionalHintForRTL={directionalHintForRTL}\r\n            calloutProps={assign({}, calloutProps, {\r\n              onMouseEnter: this._onTooltipMouseEnter,\r\n              onMouseLeave: this._onTooltipMouseLeave\r\n            })}\r\n            onMouseEnter={this._onTooltipMouseEnter}\r\n            onMouseLeave={this._onTooltipMouseLeave}\r\n            {...getNativeProps(this.props, divProperties)}\r\n            {...tooltipProps}\r\n          />\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    if (TooltipHostBase._currentVisibleTooltip && TooltipHostBase._currentVisibleTooltip === this) {\r\n      TooltipHostBase._currentVisibleTooltip = undefined;\r\n    }\r\n  }\r\n\r\n  public show = (): void => {\r\n    this._toggleTooltip(true);\r\n  };\r\n\r\n  public dismiss = (): void => {\r\n    this._hideTooltip();\r\n  };\r\n\r\n  private _getTargetElement(): HTMLElement | undefined {\r\n    if (!this._tooltipHost.current) {\r\n      return undefined;\r\n    }\r\n\r\n    const { overflowMode } = this.props;\r\n\r\n    // Select target element based on overflow mode. For parent mode, you want to position the tooltip relative\r\n    // to the parent element, otherwise it might look off.\r\n    if (overflowMode !== undefined) {\r\n      switch (overflowMode) {\r\n        case TooltipOverflowMode.Parent:\r\n          return this._tooltipHost.current.parentElement!;\r\n\r\n        case TooltipOverflowMode.Self:\r\n          return this._tooltipHost.current;\r\n      }\r\n    }\r\n\r\n    return this._tooltipHost.current;\r\n  }\r\n\r\n  // Show Tooltip\r\n  private _onTooltipMouseEnter = (ev: any): void => {\r\n    const { overflowMode } = this.props;\r\n\r\n    if (TooltipHostBase._currentVisibleTooltip && TooltipHostBase._currentVisibleTooltip !== this) {\r\n      TooltipHostBase._currentVisibleTooltip.dismiss();\r\n    }\r\n    TooltipHostBase._currentVisibleTooltip = this;\r\n\r\n    if (overflowMode !== undefined) {\r\n      const overflowElement = this._getTargetElement();\r\n      if (overflowElement && !hasOverflow(overflowElement)) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (ev.target && portalContainsElement(ev.target as HTMLElement, this._getTargetElement())) {\r\n      // Do not show tooltip when target is inside a portal relative to TooltipHost.\r\n      return;\r\n    }\r\n\r\n    this._toggleTooltip(true);\r\n    this._clearDismissTimer();\r\n  };\r\n\r\n  // Hide Tooltip\r\n  private _onTooltipMouseLeave = (ev: any): void => {\r\n    if (this.props.closeDelay) {\r\n      this._clearDismissTimer();\r\n\r\n      this._closingTimer = this._async.setTimeout(() => {\r\n        this._toggleTooltip(false);\r\n      }, this.props.closeDelay);\r\n    } else {\r\n      this._toggleTooltip(false);\r\n    }\r\n    if (TooltipHostBase._currentVisibleTooltip === this) {\r\n      TooltipHostBase._currentVisibleTooltip = undefined;\r\n    }\r\n  };\r\n\r\n  private _clearDismissTimer = (): void => {\r\n    this._async.clearTimeout(this._closingTimer);\r\n  };\r\n\r\n  // Hide Tooltip\r\n  private _hideTooltip = (): void => {\r\n    this._toggleTooltip(false);\r\n  };\r\n\r\n  private _toggleTooltip(isTooltipVisible: boolean): void {\r\n    if (this.state.isTooltipVisible !== isTooltipVisible) {\r\n      this.setState({ isTooltipVisible }, () => this.props.onTooltipToggle && this.props.onTooltipToggle(this.state.isTooltipVisible));\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Detects whether an element's content has horizontal overflow\r\n *\r\n * @public\r\n * @param element - Element to check for overflow\r\n * @returns True if element's content overflows\r\n */\r\nexport function hasHorizontalOverflow(element: HTMLElement): boolean {\r\n  return element.clientWidth < element.scrollWidth;\r\n}\r\n\r\n/**\r\n * Detects whether an element's content has vertical overflow\r\n *\r\n * @public\r\n * @param element - Element to check for overflow\r\n * @returns True if element's content overflows\r\n */\r\nexport function hasVerticalOverflow(element: HTMLElement): boolean {\r\n  return element.clientHeight < element.scrollHeight;\r\n}\r\n\r\n/**\r\n * Detects whether an element's content has overflow in any direction\r\n *\r\n * @public\r\n * @param element - Element to check for overflow\r\n * @returns True if element's content overflows\r\n */\r\nexport function hasOverflow(element: HTMLElement): boolean {\r\n  return hasHorizontalOverflow(element) || hasVerticalOverflow(element);\r\n}\r\n","import { ITooltipHostStyleProps, ITooltipHostStyles } from './TooltipHost.types';\r\nimport { getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-TooltipHost'\r\n};\r\n\r\nexport const getStyles = (props: ITooltipHostStyleProps): ITooltipHostStyles => {\r\n  const { className, theme } = props;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      {\r\n        display: 'inline'\r\n      },\r\n      className\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { TooltipHostBase } from './TooltipHost.base';\r\nimport { ITooltipHostProps, ITooltipHostStyleProps, ITooltipHostStyles } from './TooltipHost.types';\r\nimport { getStyles } from './TooltipHost.styles';\r\n\r\nexport const TooltipHost: React.StatelessComponent<ITooltipHostProps> = styled<\r\n  ITooltipHostProps,\r\n  ITooltipHostStyleProps,\r\n  ITooltipHostStyles\r\n>(TooltipHostBase, getStyles, undefined, {\r\n  scope: 'TooltipHost'\r\n});\r\n","function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n","import * as React from 'react';\r\n\r\nimport Axios from 'axios';\r\n\r\nimport { createRef, RefObject, classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { SearchBox } from 'office-ui-fabric-react/lib/SearchBox';\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\nimport {\r\n  IColumn,\r\n  DetailsList,\r\n  DetailsListLayoutMode,\r\n  SelectionMode,\r\n  buildColumns,\r\n  ConstrainMode,\r\n  IDetailsHeaderProps\r\n} from 'office-ui-fabric-react/lib/DetailsList';\r\nimport { ScrollablePane, IScrollablePane } from 'office-ui-fabric-react/lib/ScrollablePane';\r\nimport { Sticky, StickyPositionType } from 'office-ui-fabric-react/lib/Sticky';\r\nimport { TooltipHost, ITooltipHostProps } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { IContextualMenuProps, ContextualMenu, DirectionalHint } from 'office-ui-fabric-react/lib/ContextualMenu';\r\n\r\nimport { IListProps, IListStyleProps, IListStyles } from './List.types';\r\n\r\nimport isMobile from 'react-device-detect';\r\n\r\nimport './List.css';\r\n\r\nexport interface IListState {\r\n  rows: any[];\r\n  columns: any[];\r\n  isFirstLoad: boolean;\r\n  curPage: number;\r\n  enableSearch: boolean;\r\n  enableSort: boolean;\r\n  searchTxt?: string;\r\n  totalPages?: number;\r\n  isLoading?: boolean;\r\n  sortBy?: string;\r\n  sortDesc?: boolean;\r\n  contextualMenuProps?: IContextualMenuProps;\r\n  overrideDevice: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IListStyleProps, IListStyles>();\r\n\r\nexport class ListBase extends React.PureComponent<IListProps, IListState> {\r\n  private _scrollablePane: RefObject<IScrollablePane> = createRef<IScrollablePane>();\r\n  constructor(props: IListProps) {\r\n    super(props);\r\n    this.state = {\r\n      rows: [],\r\n      columns: [],\r\n      searchTxt: undefined,\r\n      curPage: 0,\r\n      totalPages: 1,\r\n      isLoading: false,\r\n      isFirstLoad: true,\r\n      enableSearch: this.props.enableSearch != undefined ? this.props.enableSearch : true,\r\n      enableSort: this.props.enableSort != undefined ? this.props.enableSort : true,\r\n      contextualMenuProps: undefined,\r\n      overrideDevice: this.props.overrideDevice != undefined ? this.props.overrideDevice : false\r\n    };\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, styles, theme } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n    const { columns, rows, enableSearch, contextualMenuProps, overrideDevice } = this.state;\r\n\r\n    if (rows) {\r\n      return (\r\n        <Fabric className={`ms-Grid ${classNames.root}`} style={{ height: '100%' }}>\r\n          {enableSearch && (\r\n            <div className=\"ms-Grid-row\" style={{ height: '40px' }}>\r\n              <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                <SearchBox\r\n                  placeholder=\"Search\"\r\n                  underlined={this.props.underlined}\r\n                  onSearch={newValue => this.onSearch(newValue)}\r\n                  onClear={() => this.onSearch('')}\r\n                  theme={theme}\r\n                  styles={styles}\r\n                />\r\n              </div>\r\n            </div>\r\n          )}\r\n          <div className=\"ms-Grid-row\" style={{ height: '100%' }}>\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" style={{ position: 'relative', height: '100%' }}>\r\n              <ScrollablePane componentRef={this._scrollablePane} style={{ height: this.props.height }}>\r\n                <DetailsList\r\n                  items={rows}\r\n                  compact={true}\r\n                  columns={columns}\r\n                  componentRef={this.props.componentRef}\r\n                  selectionMode={this.props.selectionMode ? this.props.selectionMode : SelectionMode.none}\r\n                  setKey={this.props.setKey}\r\n                  layoutMode={DetailsListLayoutMode.justified}\r\n                  constrainMode={ConstrainMode.unconstrained}\r\n                  isHeaderVisible={true}\r\n                  selection={this.props.selection}\r\n                  selectionPreservedOnEmptyClick={true}\r\n                  enterModalSelectionOnTouch={true}\r\n                  onRenderMissingItem={this.onDelayedLoadNextPage}\r\n                  onRenderRow={this.props.onRenderRow}\r\n                  onRenderItemColumn={this.props.onRenderItemColumn}\r\n                  onItemContextMenu={this.setRowContextMenu}\r\n                  onRenderDetailsHeader={this.onRenderDetailsHeader}\r\n                  theme={theme}\r\n                  styles={styles}\r\n                />\r\n                {contextualMenuProps != null && (isMobile || overrideDevice) && (\r\n                  <ContextualMenu {...contextualMenuProps} directionalHint={DirectionalHint.bottomLeftEdge} />\r\n                )}\r\n              </ScrollablePane>\r\n            </div>\r\n          </div>\r\n        </Fabric>\r\n      );\r\n    } else {\r\n      return <></>;\r\n    }\r\n  }\r\n\r\n  public componentDidMount() {\r\n    this.onDelayedLoadNextPage();\r\n  }\r\n\r\n  private onFirstLoad() {\r\n    this.setState({ isFirstLoad: false });\r\n\r\n    if (this.props.selection) {\r\n      if (this.props.selectIndexOnInit != undefined) {\r\n        console.log('first load');\r\n        this.props.selection.setIndexSelected(this.props.selectIndexOnInit, true, true);\r\n      }\r\n      if (this.props.selectKeyOnInit != undefined) {\r\n        console.log('first load');\r\n        this.props.selection.setKeySelected(this.props.selectKeyOnInit, true, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  private setColumns = (value: any[]): void => {\r\n    this.setState({\r\n      columns: this.props.onCustomBuildColumns ? this.buildCustomColumns(this.props.onCustomBuildColumns) : this.buildColumns(value, true)\r\n    });\r\n  };\r\n\r\n  private addColumnDefaults(columns: IColumn[]): IColumn[] {\r\n    columns.forEach(column => {\r\n      column.isCollapsable = false;\r\n      if (this.state.enableSort) {\r\n        column.onColumnClick = this.onColumnClick;\r\n      } else {\r\n        column.isSorted = false;\r\n      }\r\n    });\r\n\r\n    return columns;\r\n  }\r\n\r\n  private buildCustomColumns(callback: () => IColumn[]) {\r\n    const columns = callback();\r\n    return this.addColumnDefaults(columns);\r\n  }\r\n\r\n  private buildColumns(items: any[], canResizeColumns?: boolean) {\r\n    let columns = buildColumns(items, canResizeColumns, undefined, undefined, undefined, undefined);\r\n\r\n    columns = this.addColumnDefaults(columns);\r\n\r\n    this.props.onBuildColumns ? this.props.onBuildColumns(columns) : null;\r\n\r\n    return columns;\r\n  }\r\n\r\n  private onSearch(value: string): false {\r\n    this.setState(\r\n      {\r\n        searchTxt: value,\r\n        rows: [],\r\n        curPage: 0,\r\n        totalPages: 1,\r\n        isLoading: false,\r\n        isFirstLoad: true\r\n      },\r\n      () => this.onDelayedLoadNextPage()\r\n    );\r\n    return false;\r\n  }\r\n\r\n  private onDelayedLoadNextPage = (): null => {\r\n    let { isLoading } = this.state;\r\n\r\n    console.log('Loading next batch of data');\r\n    if (!isLoading) {\r\n      this.setState(\r\n        prevState => ({\r\n          curPage: prevState.curPage + 1,\r\n          isLoading: true\r\n        }),\r\n        () => this.onLoadNextPage()\r\n      );\r\n    }\r\n\r\n    return null;\r\n  };\r\n\r\n  private onLoadNextPage() {\r\n    let { columns, rows, searchTxt, curPage, sortBy, sortDesc } = this.state;\r\n\r\n    const value = searchTxt == null || searchTxt == undefined || searchTxt.trim().length === 0 ? 'null' : searchTxt;\r\n\r\n    let newItems: any;\r\n\r\n    const url: string = this.props.getUrl(value, curPage, sortBy, sortDesc);\r\n\r\n    Axios.get(url).then(response => {\r\n      newItems = this.props.handleResponse(response.data);\r\n      this.setState({ totalPages: newItems.totalPages });\r\n      if (columns.length == 0) {\r\n        this.setColumns(newItems.data);\r\n      }\r\n\r\n      if (curPage < newItems.totalPages) {\r\n        newItems.data.push(null);\r\n      }\r\n\r\n      this.setState(\r\n        prevState => ({\r\n          rows: prevState.rows ? prevState.rows.slice(0, prevState.rows.length - 1).concat(newItems.data) : newItems.data,\r\n          isLoading: false\r\n        }),\r\n        () => {\r\n          if (this.state.isFirstLoad) {\r\n            this.onFirstLoad();\r\n          }\r\n\r\n          console.log('Rows: ', rows.length, ' of ', newItems.recordsTotal);\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  private onColumnClick = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => {\r\n    const { columns } = this.state;\r\n\r\n    const newColumns: IColumn[] = columns.slice();\r\n    const currColumn: IColumn = newColumns.filter((currCol: IColumn, idx: number) => {\r\n      return column.key === currCol.key;\r\n    })[0];\r\n    newColumns.forEach((newCol: IColumn) => {\r\n      if (newCol === currColumn) {\r\n        currColumn.isSortedDescending = !currColumn.isSortedDescending;\r\n        currColumn.isSorted = true;\r\n        this.setState({\r\n          sortBy: currColumn.key,\r\n          sortDesc: currColumn.isSortedDescending\r\n        });\r\n      } else {\r\n        newCol.isSorted = false;\r\n        newCol.isSortedDescending = true;\r\n      }\r\n    });\r\n\r\n    this.setState(\r\n      {\r\n        rows: [],\r\n        curPage: 0,\r\n        totalPages: 1,\r\n        isLoading: false,\r\n        isFirstLoad: true\r\n      },\r\n      () => this.onDelayedLoadNextPage()\r\n    );\r\n  };\r\n\r\n  private setRowContextMenu = (item?: any, index?: number | undefined, ev?: Event | undefined): boolean | void => {\r\n    const { onItemContextMenu } = this.props;\r\n\r\n    if (onItemContextMenu != null && index && index > -1) {\r\n      const contextualMenuProps: IContextualMenuProps = onItemContextMenu(item, index, ev);\r\n      contextualMenuProps.onDismiss = this.onDismissRowContextMenu;\r\n\r\n      this.setState({\r\n        contextualMenuProps: contextualMenuProps\r\n      });\r\n      return false;\r\n    }\r\n    return true;\r\n  };\r\n\r\n  private onDismissRowContextMenu = (): void => {\r\n    this.setState({\r\n      contextualMenuProps: undefined\r\n    });\r\n  };\r\n\r\n  private onRenderDetailsHeader = (\r\n    props?: IDetailsHeaderProps,\r\n    defaultRender?: (props?: IDetailsHeaderProps) => JSX.Element | null\r\n  ): JSX.Element | null => {\r\n    return (\r\n      <Sticky stickyPosition={StickyPositionType.Header} isScrollSynced={true}>\r\n        {defaultRender!({\r\n          ...props,\r\n          onRenderColumnHeaderTooltip: this.onRenderColumnHeaderTooltip\r\n        } as IDetailsHeaderProps)}\r\n      </Sticky>\r\n    );\r\n  };\r\n\r\n  private onRenderColumnHeaderTooltip = (\r\n    props?: ITooltipHostProps,\r\n    defaultRender?: (props?: ITooltipHostProps) => JSX.Element | null\r\n  ): JSX.Element | null => {\r\n    return <TooltipHost {...props} />;\r\n  };\r\n}\r\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { ListBase } from './List.base';\r\nimport { IListProps, IListStyleProps, IListStyles } from './List.types';\r\nimport { getStyles } from './List.styles';\r\n\r\nexport const List: React.StatelessComponent<IListProps> = styled<IListProps, IListStyleProps, IListStyles>(ListBase, getStyles);\r\n","import { IListStyleProps, IListStyles } from './List.types';\r\n\r\nexport function getStyles(props: IListStyleProps): IListStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceList', {}, className]\r\n  };\r\n}\r\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, false);\n  if (typeof it == 'string' && it.length > 2) {\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0);\n    var third, radix, maxCode;\n    if (first === 43 || first === 45) {\n      third = it.charCodeAt(2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (it.charCodeAt(1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default: return +it;\n      }\n      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n  $Number = function Number(value) {\n    var it = arguments.length < 1 ? 0 : value;\n    var that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for (var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (has(Base, key = keys[j]) && !has($Number, key)) {\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = {};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n  require('./_redefine')(Object.prototype, 'toString', function toString() {\n    return '[object ' + classof(this) + ']';\n  }, true);\n}\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n","import * as React from 'react';\r\nimport { divProperties, getNativeProps } from '../../Utilities';\r\nimport { classNamesFunction } from '../../Utilities';\r\nimport { ILabelProps, ILabelStyleProps, ILabelStyles } from './Label.types';\r\n\r\nconst getClassNames = classNamesFunction<ILabelStyleProps, ILabelStyles>();\r\nexport class LabelBase extends React.Component<ILabelProps, {}> {\r\n  public render(): JSX.Element {\r\n    const { as: RootType = 'label', children, className, disabled, styles, required, theme } = this.props;\r\n    const classNames = getClassNames(styles, {\r\n      className,\r\n      disabled,\r\n      required,\r\n      theme: theme!\r\n    });\r\n    return (\r\n      <RootType {...getNativeProps(this.props, divProperties)} className={classNames.root}>\r\n        {children}\r\n      </RootType>\r\n    );\r\n  }\r\n}\r\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n","import { styled } from '../../Utilities';\r\nimport { LabelBase } from './Label.base';\r\nimport { getStyles } from './Label.styles';\r\nimport { ILabelProps, ILabelStyleProps, ILabelStyles } from './Label.types';\r\n\r\nexport const Label: React.StatelessComponent<ILabelProps> = styled<ILabelProps, ILabelStyleProps, ILabelStyles>(\r\n  LabelBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Label'\r\n  }\r\n);\r\n","import { HighContrastSelector } from '../../Styling';\r\nimport { ILabelStyleProps, ILabelStyles } from './Label.types';\r\n\r\nexport const getStyles = (props: ILabelStyleProps): ILabelStyles => {\r\n  const { theme, className, disabled, required } = props;\r\n\r\n  return {\r\n    root: [\r\n      'ms-Label',\r\n      theme.fonts.medium,\r\n      {\r\n        color: theme.semanticColors.bodyText,\r\n        boxSizing: 'border-box',\r\n        boxShadow: 'none',\r\n        margin: 0,\r\n        display: 'block',\r\n        padding: '5px 0',\r\n        wordWrap: 'break-word',\r\n        overflowWrap: 'break-word'\r\n      },\r\n      disabled && {\r\n        color: theme.semanticColors.disabledBodyText,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'GrayText'\r\n          }\r\n        }\r\n      },\r\n      required && {\r\n        selectors: {\r\n          '::after': {\r\n            content: `' *'`,\r\n            color: theme.semanticColors.errorText,\r\n            paddingRight: 12\r\n          }\r\n        }\r\n      },\r\n      className\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { IProcessedStyleSet } from '../../Styling';\r\nimport { Label, ILabelStyleProps, ILabelStyles } from '../../Label';\r\nimport { Icon } from '../../Icon';\r\nimport {\r\n  Async,\r\n  DelayedRender,\r\n  IStyleFunctionOrObject,\r\n  classNamesFunction,\r\n  createRef,\r\n  getId,\r\n  getNativeProps,\r\n  initializeComponentRef,\r\n  inputProperties,\r\n  textAreaProperties,\r\n  warnDeprecations,\r\n  warnMutuallyExclusive\r\n} from '../../Utilities';\r\nimport { ITextField, ITextFieldProps, ITextFieldStyleProps, ITextFieldStyles } from './TextField.types';\r\n\r\nconst getClassNames = classNamesFunction<ITextFieldStyleProps, ITextFieldStyles>();\r\n\r\nexport interface ITextFieldState {\r\n  value: string;\r\n\r\n  /** Is true when the control has focus. */\r\n  isFocused: boolean;\r\n\r\n  /**\r\n   * The validation error message.\r\n   *\r\n   * - If there is no validation error or we have not validated the input value, errorMessage is an empty string.\r\n   * - If we have done the validation and there is validation error, errorMessage is the validation error message.\r\n   */\r\n  errorMessage: string;\r\n}\r\n\r\nconst DEFAULT_STATE_VALUE = '';\r\n\r\nexport class TextFieldBase extends React.Component<ITextFieldProps, ITextFieldState> implements ITextField {\r\n  public static defaultProps: ITextFieldProps = {\r\n    multiline: false,\r\n    resizable: true,\r\n    autoAdjustHeight: false,\r\n    underlined: false,\r\n    borderless: false,\r\n    onChange: () => {\r\n      /* noop */\r\n    },\r\n    onBeforeChange: () => {\r\n      /* noop */\r\n    },\r\n    onNotifyValidationResult: () => {\r\n      /* noop */\r\n    },\r\n    onGetErrorMessage: () => undefined,\r\n    deferredValidationTime: 200,\r\n    errorMessage: '',\r\n    validateOnFocusIn: false,\r\n    validateOnFocusOut: false,\r\n    validateOnLoad: true\r\n  };\r\n\r\n  private _id: string;\r\n  private _descriptionId: string;\r\n  private _delayedValidate: (value: string | undefined) => void;\r\n  private _isMounted: boolean;\r\n  private _lastValidation: number;\r\n  private _latestValue: string | undefined;\r\n  private _latestValidateValue: string | undefined;\r\n  private _textElement = createRef<HTMLTextAreaElement | HTMLInputElement | null>();\r\n  private _classNames: IProcessedStyleSet<ITextFieldStyles>;\r\n  private _async: Async;\r\n\r\n  /**\r\n   * If true, the text field is changing between single- and multi-line, so we'll need to reset\r\n   * focus after the change completes.\r\n   */\r\n  private _shouldResetFocusAfterRender: boolean | undefined;\r\n  /**\r\n   * If set, the text field is changing between single- and multi-line, so we'll need to reset\r\n   * selection/cursor after the change completes.\r\n   */\r\n  private _selectionBeforeInputTypeChange: [number | null, number | null] | undefined;\r\n\r\n  public constructor(props: ITextFieldProps) {\r\n    super(props);\r\n\r\n    initializeComponentRef(this);\r\n\r\n    this._async = new Async(this);\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnDeprecations('TextField', props, {\r\n        iconClass: 'iconProps',\r\n        addonString: 'prefix',\r\n        onRenderAddon: 'onRenderPrefix',\r\n        onChanged: 'onChange'\r\n      });\r\n\r\n      warnMutuallyExclusive('TextField', props, {\r\n        value: 'defaultValue'\r\n      });\r\n    }\r\n\r\n    this._id = props.id || getId('TextField');\r\n    this._descriptionId = getId('TextFieldDescription');\r\n\r\n    if (props.value !== undefined) {\r\n      this._latestValue = props.value;\r\n    } else if (props.defaultValue !== undefined) {\r\n      this._latestValue = props.defaultValue;\r\n    } else {\r\n      this._latestValue = DEFAULT_STATE_VALUE;\r\n    }\r\n\r\n    this.state = {\r\n      value: this._latestValue,\r\n      isFocused: false,\r\n      errorMessage: ''\r\n    };\r\n\r\n    this._delayedValidate = this._async.debounce(this._validate, this.props.deferredValidationTime);\r\n    this._lastValidation = 0;\r\n  }\r\n\r\n  /**\r\n   * Gets the current value of the text field.\r\n   */\r\n  public get value(): string | undefined {\r\n    return this.state.value;\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    this._isMounted = true;\r\n    this._adjustInputHeight();\r\n\r\n    if (this.props.validateOnLoad) {\r\n      this._validate(this.state.value);\r\n    }\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: ITextFieldProps): void {\r\n    const { onBeforeChange } = this.props;\r\n\r\n    // If old value prop was undefined, then component is controlled and we should\r\n    //    respect new undefined value and update state accordingly.\r\n    if (newProps.value !== this.state.value && (newProps.value !== undefined || this.props.value !== undefined)) {\r\n      if (onBeforeChange) {\r\n        onBeforeChange(newProps.value);\r\n      }\r\n\r\n      this._id = newProps.id || this._id;\r\n      this._setValue(newProps.value);\r\n\r\n      const { validateOnFocusIn, validateOnFocusOut } = newProps;\r\n      if (!(validateOnFocusIn || validateOnFocusOut)) {\r\n        this._delayedValidate(newProps.value);\r\n      }\r\n    }\r\n\r\n    // If component is not currently controlled and defaultValue changes, set value to new defaultValue.\r\n    if (newProps.defaultValue !== this.props.defaultValue && newProps.value === undefined) {\r\n      this._setValue(newProps.defaultValue);\r\n    }\r\n\r\n    // Text field is changing between single- and multi-line. After the change is complete,\r\n    // we'll need to reset focus and selection/cursor.\r\n    if (!!newProps.multiline !== !!this.props.multiline && this.state.isFocused) {\r\n      this._shouldResetFocusAfterRender = true;\r\n      this._selectionBeforeInputTypeChange = [this.selectionStart, this.selectionEnd];\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(): void {\r\n    if (this._shouldResetFocusAfterRender) {\r\n      // The text field has just changed between single- and multi-line, so we need to reset focus\r\n      // and selection/cursor.\r\n      this._shouldResetFocusAfterRender = false;\r\n      this.focus();\r\n      if (this._selectionBeforeInputTypeChange) {\r\n        const [start, end] = this._selectionBeforeInputTypeChange;\r\n        if (start !== null && end !== null) {\r\n          this.setSelectionRange(start, end);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    this._isMounted = false;\r\n    this._async.dispose();\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      borderless,\r\n      className,\r\n      disabled,\r\n      iconClass,\r\n      iconProps,\r\n      inputClassName,\r\n      label,\r\n      multiline,\r\n      required,\r\n      underlined,\r\n      addonString, // @deprecated\r\n      prefix,\r\n      resizable,\r\n      suffix,\r\n      theme,\r\n      styles,\r\n      autoAdjustHeight,\r\n      onRenderAddon = this._onRenderAddon, // @deprecated\r\n      onRenderPrefix = this._onRenderPrefix,\r\n      onRenderSuffix = this._onRenderSuffix,\r\n      onRenderLabel = this._onRenderLabel,\r\n      onRenderDescription = this._onRenderDescription\r\n    } = this.props;\r\n    const { isFocused } = this.state;\r\n    const errorMessage = this._errorMessage;\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      disabled,\r\n      focused: isFocused,\r\n      required,\r\n      multiline,\r\n      hasLabel: !!label,\r\n      hasErrorMessage: !!errorMessage,\r\n      borderless,\r\n      resizable,\r\n      hasIcon: !!iconProps,\r\n      underlined,\r\n      iconClass,\r\n      inputClassName,\r\n      autoAdjustHeight\r\n    });\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        <div className={this._classNames.wrapper}>\r\n          {onRenderLabel(this.props, this._onRenderLabel)}\r\n          <div className={this._classNames.fieldGroup}>\r\n            {(addonString !== undefined || this.props.onRenderAddon) && (\r\n              <div className={this._classNames.prefix}>{onRenderAddon(this.props, this._onRenderAddon)}</div>\r\n            )}\r\n            {(prefix !== undefined || this.props.onRenderPrefix) && (\r\n              <div className={this._classNames.prefix}>{onRenderPrefix(this.props, this._onRenderPrefix)}</div>\r\n            )}\r\n            {multiline ? this._renderTextArea() : this._renderInput()}\r\n            {(iconClass || iconProps) && <Icon className={this._classNames.icon} {...iconProps} />}\r\n            {(suffix !== undefined || this.props.onRenderSuffix) && (\r\n              <div className={this._classNames.suffix}>{onRenderSuffix(this.props, this._onRenderSuffix)}</div>\r\n            )}\r\n          </div>\r\n        </div>\r\n        {this._isDescriptionAvailable && (\r\n          <span id={this._descriptionId}>\r\n            {onRenderDescription(this.props, this._onRenderDescription)}\r\n            {errorMessage && (\r\n              <div role=\"alert\">\r\n                <DelayedRender>\r\n                  <p className={this._classNames.errorMessage}>\r\n                    <span data-automation-id=\"error-message\">{errorMessage}</span>\r\n                  </p>\r\n                </DelayedRender>\r\n              </div>\r\n            )}\r\n          </span>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Sets focus on the text field\r\n   */\r\n  public focus() {\r\n    if (this._textElement.current) {\r\n      this._textElement.current.focus();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Blurs the text field.\r\n   */\r\n  public blur() {\r\n    if (this._textElement.current) {\r\n      this._textElement.current.blur();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Selects the text field\r\n   */\r\n  public select() {\r\n    if (this._textElement.current) {\r\n      this._textElement.current.select();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the selection start of the text field to a specified value\r\n   */\r\n  public setSelectionStart(value: number): void {\r\n    if (this._textElement.current) {\r\n      this._textElement.current.selectionStart = value;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the selection end of the text field to a specified value\r\n   */\r\n  public setSelectionEnd(value: number): void {\r\n    if (this._textElement.current) {\r\n      this._textElement.current.selectionEnd = value;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the selection start of the text field\r\n   */\r\n  public get selectionStart(): number | null {\r\n    return this._textElement.current ? this._textElement.current.selectionStart : -1;\r\n  }\r\n\r\n  /**\r\n   * Gets the selection end of the text field\r\n   */\r\n  public get selectionEnd(): number | null {\r\n    return this._textElement.current ? this._textElement.current.selectionEnd : -1;\r\n  }\r\n\r\n  /**\r\n   * Sets the start and end positions of a selection in a text field.\r\n   * @param start - Index of the start of the selection.\r\n   * @param end - Index of the end of the selection.\r\n   */\r\n  public setSelectionRange(start: number, end: number): void {\r\n    if (this._textElement.current) {\r\n      (this._textElement.current as HTMLInputElement).setSelectionRange(start, end);\r\n    }\r\n  }\r\n\r\n  private _setValue(value?: string) {\r\n    this._latestValue = value;\r\n    this.setState(\r\n      {\r\n        value: value || DEFAULT_STATE_VALUE,\r\n        errorMessage: ''\r\n      } as ITextFieldState,\r\n      () => {\r\n        this._adjustInputHeight();\r\n      }\r\n    );\r\n  }\r\n\r\n  private _onFocus = (ev: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\r\n    if (this.props.onFocus) {\r\n      this.props.onFocus(ev);\r\n    }\r\n\r\n    this.setState({ isFocused: true });\r\n    if (this.props.validateOnFocusIn) {\r\n      this._validate(this.state.value);\r\n    }\r\n  };\r\n\r\n  private _onBlur = (ev: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\r\n    if (this.props.onBlur) {\r\n      this.props.onBlur(ev);\r\n    }\r\n\r\n    this.setState({ isFocused: false });\r\n    if (this.props.validateOnFocusOut) {\r\n      this._validate(this.state.value);\r\n    }\r\n  };\r\n\r\n  private _onRenderLabel = (props: ITextFieldProps): JSX.Element | null => {\r\n    const { label, required } = props;\r\n    // IProcessedStyleSet definition requires casting for what Label expects as its styles prop\r\n    const labelStyles = this._classNames.subComponentStyles\r\n      ? (this._classNames.subComponentStyles.label as IStyleFunctionOrObject<ILabelStyleProps, ILabelStyles>)\r\n      : undefined;\r\n\r\n    if (label) {\r\n      return (\r\n        <Label required={required} htmlFor={this._id} styles={labelStyles} disabled={props.disabled}>\r\n          {props.label}\r\n        </Label>\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n\r\n  private _onRenderDescription = (props: ITextFieldProps): JSX.Element | null => {\r\n    if (props.description) {\r\n      return <span className={this._classNames.description}>{props.description}</span>;\r\n    }\r\n    return null;\r\n  };\r\n\r\n  // @deprecated\r\n  private _onRenderAddon(props: ITextFieldProps): JSX.Element {\r\n    const { addonString } = props;\r\n    return <span style={{ paddingBottom: '1px' }}>{addonString}</span>;\r\n  }\r\n\r\n  private _onRenderPrefix(props: ITextFieldProps): JSX.Element {\r\n    const { prefix } = props;\r\n    return <span style={{ paddingBottom: '1px' }}>{prefix}</span>;\r\n  }\r\n\r\n  private _onRenderSuffix(props: ITextFieldProps): JSX.Element {\r\n    const { suffix } = props;\r\n    return <span style={{ paddingBottom: '1px' }}>{suffix}</span>;\r\n  }\r\n\r\n  private get _errorMessage(): string | undefined {\r\n    let { errorMessage } = this.state;\r\n    if (!errorMessage && this.props.errorMessage) {\r\n      errorMessage = this.props.errorMessage;\r\n    }\r\n\r\n    return errorMessage;\r\n  }\r\n\r\n  /**\r\n   * If a custom description render function is supplied then treat description as always available.\r\n   * Otherwise defer to the presence of description or error message text.\r\n   */\r\n  private get _isDescriptionAvailable(): boolean {\r\n    const props = this.props;\r\n    return !!(props.onRenderDescription || props.description || this._errorMessage);\r\n  }\r\n\r\n  private _renderTextArea(): React.ReactElement<React.HTMLAttributes<HTMLAreaElement>> {\r\n    const textAreaProps = getNativeProps(this.props, textAreaProperties, ['defaultValue']);\r\n\r\n    return (\r\n      <textarea\r\n        id={this._id}\r\n        {...textAreaProps}\r\n        ref={this._textElement}\r\n        value={this.state.value}\r\n        onInput={this._onInputChange}\r\n        onChange={this._onInputChange}\r\n        className={this._classNames.field}\r\n        aria-describedby={this._isDescriptionAvailable ? this._descriptionId : this.props['aria-describedby']}\r\n        aria-invalid={!!this._errorMessage}\r\n        aria-label={this.props.ariaLabel}\r\n        readOnly={this.props.readOnly}\r\n        onFocus={this._onFocus}\r\n        onBlur={this._onBlur}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _renderInput(): React.ReactElement<React.HTMLAttributes<HTMLInputElement>> {\r\n    const inputProps = getNativeProps<React.HTMLAttributes<HTMLInputElement>>(this.props, inputProperties, ['defaultValue']);\r\n\r\n    return (\r\n      <input\r\n        type={'text'}\r\n        id={this._id}\r\n        {...inputProps}\r\n        ref={this._textElement}\r\n        value={this.state.value}\r\n        onInput={this._onInputChange}\r\n        onChange={this._onInputChange}\r\n        className={this._classNames.field}\r\n        aria-label={this.props.ariaLabel}\r\n        aria-describedby={this._isDescriptionAvailable ? this._descriptionId : this.props['aria-describedby']}\r\n        aria-invalid={!!this._errorMessage}\r\n        readOnly={this.props.readOnly}\r\n        onFocus={this._onFocus}\r\n        onBlur={this._onBlur}\r\n      />\r\n    );\r\n  }\r\n\r\n  private _onInputChange = (event: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\r\n    event.persist();\r\n    const element: HTMLInputElement = event.target as HTMLInputElement;\r\n    const value: string = element.value;\r\n\r\n    // Avoid doing unnecessary work when the value has not changed.\r\n    if (value === this._latestValue) {\r\n      return;\r\n    }\r\n    this._latestValue = value;\r\n\r\n    this.setState({ value: value } as ITextFieldState, () => {\r\n      this._adjustInputHeight();\r\n\r\n      if (this.props.onChange) {\r\n        this.props.onChange(event, value);\r\n      }\r\n\r\n      if (this.props.onChanged) {\r\n        this.props.onChanged(value);\r\n      }\r\n    });\r\n\r\n    const { validateOnFocusIn, validateOnFocusOut } = this.props;\r\n    if (!(validateOnFocusIn || validateOnFocusOut)) {\r\n      this._delayedValidate(value);\r\n    }\r\n\r\n    if (this.props.onBeforeChange) {\r\n      this.props.onBeforeChange(value);\r\n    }\r\n  };\r\n\r\n  private _validate(value: string | undefined): void {\r\n    const { validateOnFocusIn, validateOnFocusOut } = this.props;\r\n\r\n    // In case of _validate called multi-times during executing validate logic with promise return.\r\n    if (this._latestValidateValue === value && !(validateOnFocusIn || validateOnFocusOut)) {\r\n      return;\r\n    }\r\n\r\n    this._latestValidateValue = value;\r\n    const onGetErrorMessage = this.props.onGetErrorMessage as (value: string) => string | PromiseLike<string> | undefined;\r\n    const result = onGetErrorMessage(value || '');\r\n\r\n    if (result !== undefined) {\r\n      if (typeof result === 'string') {\r\n        this.setState({ errorMessage: result } as ITextFieldState);\r\n        this._notifyAfterValidate(value, result);\r\n      } else {\r\n        const currentValidation: number = ++this._lastValidation;\r\n\r\n        result.then((errorMessage: string) => {\r\n          if (this._isMounted && currentValidation === this._lastValidation) {\r\n            this.setState({ errorMessage } as ITextFieldState);\r\n          }\r\n          this._notifyAfterValidate(value, errorMessage);\r\n        });\r\n      }\r\n    } else {\r\n      this._notifyAfterValidate(value, '');\r\n    }\r\n  }\r\n\r\n  private _notifyAfterValidate(value: string | undefined, errorMessage: string): void {\r\n    if (this._isMounted && value === this.state.value && this.props.onNotifyValidationResult) {\r\n      this.props.onNotifyValidationResult(errorMessage, value);\r\n    }\r\n  }\r\n\r\n  private _adjustInputHeight(): void {\r\n    if (this._textElement.current && this.props.autoAdjustHeight && this.props.multiline) {\r\n      const textField = this._textElement.current;\r\n      textField.style.height = '';\r\n      textField.style.height = textField.scrollHeight + 'px';\r\n    }\r\n  }\r\n}\r\n","import { AnimationClassNames, FontSizes, getGlobalClassNames, HighContrastSelector, IStyle, normalize } from '../../Styling';\r\nimport { ILabelStyles, ILabelStyleProps } from '../../Label';\r\nimport { ITextFieldStyleProps, ITextFieldStyles } from './TextField.types';\r\nimport { IStyleFunctionOrObject } from '@uifabric/utilities';\r\n\r\nconst globalClassNames = {\r\n  root: 'ms-TextField',\r\n  description: 'ms-TextField-description',\r\n  errorMessage: 'ms-TextField-errorMessage',\r\n  field: 'ms-TextField-field',\r\n  fieldGroup: 'ms-TextField-fieldGroup',\r\n  prefix: 'ms-TextField-prefix',\r\n  suffix: 'ms-TextField-suffix',\r\n  wrapper: 'ms-TextField-wrapper',\r\n\r\n  multiline: 'ms-TextField--multiline',\r\n  borderless: 'ms-TextField--borderless',\r\n  underlined: 'ms-TextField--underlined',\r\n  unresizable: 'ms-TextField--unresizable',\r\n\r\n  required: 'is-required',\r\n  disabled: 'is-disabled',\r\n  active: 'is-active'\r\n};\r\n\r\nfunction getLabelStyles(props: ITextFieldStyleProps): IStyleFunctionOrObject<ILabelStyleProps, ILabelStyles> {\r\n  const { underlined, disabled, focused } = props;\r\n  return () => ({\r\n    root: [\r\n      underlined &&\r\n        disabled && {\r\n          color: props.theme.palette.neutralTertiary\r\n        },\r\n      underlined && {\r\n        fontSize: FontSizes.medium,\r\n        marginRight: 8,\r\n        paddingLeft: 12,\r\n        paddingRight: 0,\r\n        lineHeight: '22px',\r\n        height: 32\r\n      },\r\n      underlined &&\r\n        focused && {\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              height: 31 // -1px to prevent jumpiness in HC with the increased border-width to 2px\r\n            }\r\n          }\r\n        }\r\n    ]\r\n  });\r\n}\r\n\r\nexport function getStyles(props: ITextFieldStyleProps): ITextFieldStyles {\r\n  const {\r\n    theme,\r\n    className,\r\n    disabled,\r\n    focused,\r\n    required,\r\n    multiline,\r\n    hasLabel,\r\n    borderless,\r\n    underlined,\r\n    hasIcon,\r\n    resizable,\r\n    hasErrorMessage,\r\n    iconClass,\r\n    inputClassName,\r\n    autoAdjustHeight\r\n  } = props;\r\n\r\n  const { semanticColors } = theme;\r\n\r\n  const classNames = getGlobalClassNames(globalClassNames, theme);\r\n\r\n  const fieldPrefixSuffix: IStyle = {\r\n    background: semanticColors.disabledBackground, // Suffix/Prefix are not editable so the disabled slot perfectly fits.\r\n    color: !disabled ? semanticColors.inputPlaceholderText : semanticColors.disabledText,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    padding: '0 10px',\r\n    lineHeight: 1,\r\n    whiteSpace: 'nowrap',\r\n    flexShrink: 0\r\n  };\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      required && classNames.required,\r\n      disabled && classNames.disabled,\r\n      focused && classNames.active,\r\n      multiline && classNames.multiline,\r\n      borderless && classNames.borderless,\r\n      underlined && classNames.underlined,\r\n      normalize,\r\n      {\r\n        position: 'relative'\r\n      },\r\n      className\r\n    ],\r\n    wrapper: [\r\n      classNames.wrapper,\r\n      underlined && {\r\n        display: 'flex',\r\n        borderBottomWidth: 1,\r\n        borderBottomStyle: 'solid',\r\n        borderBottomColor: semanticColors.inputBorder,\r\n        width: '100%'\r\n      },\r\n      hasErrorMessage &&\r\n        underlined &&\r\n        !disabled && {\r\n          borderBottomColor: semanticColors.errorText,\r\n          selectors: {\r\n            ':hover': {\r\n              borderBottomColor: semanticColors.errorText,\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  borderBottomColor: 'Highlight'\r\n                }\r\n              }\r\n            }\r\n          }\r\n        },\r\n      underlined &&\r\n        disabled && {\r\n          borderBottomColor: semanticColors.disabledBackground\r\n        },\r\n      underlined &&\r\n        !disabled &&\r\n        !focused &&\r\n        !hasErrorMessage && {\r\n          selectors: {\r\n            ':hover': {\r\n              borderBottomColor: semanticColors.inputBorderHovered,\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  borderBottomColor: 'Highlight'\r\n                }\r\n              }\r\n            }\r\n          }\r\n        },\r\n      underlined &&\r\n        focused && {\r\n          borderBottomColor: !hasErrorMessage ? semanticColors.inputFocusBorderAlt : semanticColors.errorText,\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              borderBottomWidth: 2,\r\n              borderBottomColor: 'Highlight'\r\n            }\r\n          }\r\n        }\r\n    ],\r\n    fieldGroup: [\r\n      classNames.fieldGroup,\r\n      normalize,\r\n      {\r\n        border: `1px solid ${semanticColors.inputBorder}`,\r\n        background: semanticColors.inputBackground,\r\n        cursor: 'text',\r\n        height: 32,\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        alignItems: 'stretch',\r\n        position: 'relative',\r\n        selectors: {\r\n          ':hover': {\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                borderColor: 'Highlight'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n      multiline && {\r\n        minHeight: '60px',\r\n        height: 'auto',\r\n        display: 'flex'\r\n      },\r\n      borderless && {\r\n        border: 'none'\r\n      },\r\n      !focused &&\r\n        !disabled && {\r\n          selectors: {\r\n            ':hover': {\r\n              borderColor: semanticColors.inputBorderHovered\r\n            }\r\n          }\r\n        },\r\n      focused && {\r\n        borderColor: semanticColors.inputFocusBorderAlt,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderWidth: 2,\r\n            borderColor: 'Highlight'\r\n          }\r\n        }\r\n      },\r\n      disabled && {\r\n        backgroundColor: semanticColors.disabledBackground,\r\n        borderColor: semanticColors.disabledBackground,\r\n        cursor: 'default'\r\n      },\r\n      underlined && {\r\n        flex: '1 1 0px',\r\n        border: 'none',\r\n        textAlign: 'left'\r\n      },\r\n      underlined &&\r\n        focused && {\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              height: 31 // -1px to prevent jumpiness in HC with the increased border-width to 2px\r\n            }\r\n          }\r\n        },\r\n      underlined &&\r\n        disabled && {\r\n          backgroundColor: 'transparent'\r\n        },\r\n      hasErrorMessage && {\r\n        borderColor: semanticColors.errorText,\r\n        selectors: {\r\n          '&:focus, &:hover': {\r\n            borderColor: semanticColors.errorText\r\n          }\r\n        }\r\n      },\r\n      hasErrorMessage &&\r\n        focused && {\r\n          borderColor: semanticColors.errorText\r\n        },\r\n      !hasLabel &&\r\n        required && {\r\n          selectors: {\r\n            ':after': {\r\n              content: `'*'`,\r\n              color: semanticColors.errorText,\r\n              position: 'absolute',\r\n              top: -5,\r\n              right: -10\r\n            },\r\n            [HighContrastSelector]: {\r\n              selectors: {\r\n                ':after': {\r\n                  right: -14 // moving the * 4 pixel to right to alleviate border clipping in HC mode.\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n    ],\r\n    field: [\r\n      theme.fonts.medium,\r\n      classNames.field,\r\n      normalize,\r\n      {\r\n        fontSize: FontSizes.medium,\r\n        borderRadius: 0,\r\n        border: 'none',\r\n        background: 'none',\r\n        backgroundColor: 'transparent',\r\n        color: semanticColors.inputText,\r\n        padding: '0 12px',\r\n        width: '100%',\r\n        minWidth: 0,\r\n        textOverflow: 'ellipsis',\r\n        outline: 0,\r\n        selectors: {\r\n          '&:active, &:focus, &:hover': { outline: 0 },\r\n          '::-ms-clear': {\r\n            display: 'none'\r\n          },\r\n          '::placeholder': [\r\n            theme.fonts.medium,\r\n            {\r\n              color: semanticColors.inputPlaceholderText,\r\n              opacity: 1\r\n            }\r\n          ],\r\n          ':-ms-input-placeholder': [\r\n            theme.fonts.medium,\r\n            {\r\n              color: semanticColors.inputPlaceholderText,\r\n              opacity: 1\r\n            }\r\n          ]\r\n        }\r\n      },\r\n      multiline &&\r\n        !resizable && [\r\n          classNames.unresizable,\r\n          {\r\n            resize: 'none'\r\n          }\r\n        ],\r\n      multiline && {\r\n        minHeight: 'inherit',\r\n        lineHeight: 17,\r\n        flexGrow: 1,\r\n        paddingTop: 6,\r\n        overflow: 'auto',\r\n        width: '100%'\r\n      },\r\n      multiline &&\r\n        autoAdjustHeight && {\r\n          overflow: 'hidden'\r\n        },\r\n      hasIcon && {\r\n        paddingRight: 24\r\n      },\r\n      multiline &&\r\n        hasIcon && {\r\n          paddingRight: 40\r\n        },\r\n      disabled && {\r\n        backgroundColor: 'transparent',\r\n        borderColor: 'transparent',\r\n        color: semanticColors.disabledText,\r\n        selectors: {\r\n          '::placeholder': {\r\n            color: semanticColors.disabledText\r\n          },\r\n          ':-ms-input-placeholder': {\r\n            color: semanticColors.disabledText\r\n          }\r\n        }\r\n      },\r\n      underlined && {\r\n        textAlign: 'left'\r\n      },\r\n      focused &&\r\n        !borderless && {\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              paddingLeft: 11,\r\n              paddingRight: 11\r\n            }\r\n          }\r\n        },\r\n      focused &&\r\n        multiline &&\r\n        !borderless && {\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              paddingTop: 4 // take into consideration the 2px increased border-width (not when borderless).\r\n            }\r\n          }\r\n        },\r\n      inputClassName\r\n    ],\r\n    icon: [\r\n      multiline && {\r\n        paddingRight: 24,\r\n        paddingBottom: 8,\r\n        alignItems: 'flex-end'\r\n      },\r\n      {\r\n        pointerEvents: 'none',\r\n        position: 'absolute',\r\n        bottom: 5,\r\n        right: 8,\r\n        top: 'auto',\r\n        fontSize: 16,\r\n        lineHeight: 18\r\n      },\r\n      disabled && {\r\n        color: semanticColors.disabledText\r\n      },\r\n      iconClass\r\n    ],\r\n    description: [\r\n      classNames.description,\r\n      {\r\n        color: semanticColors.bodySubtext,\r\n        fontSize: FontSizes.xSmall\r\n      }\r\n    ],\r\n    errorMessage: [\r\n      classNames.errorMessage,\r\n      AnimationClassNames.slideDownIn20,\r\n      theme.fonts.small,\r\n      {\r\n        color: semanticColors.errorText,\r\n        margin: 0,\r\n        paddingTop: 5,\r\n        display: 'flex',\r\n        alignItems: 'center'\r\n      }\r\n    ],\r\n    prefix: [classNames.prefix, fieldPrefixSuffix],\r\n    suffix: [classNames.suffix, fieldPrefixSuffix],\r\n    subComponentStyles: {\r\n      label: getLabelStyles(props)\r\n    }\r\n  };\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { TextFieldBase } from './TextField.base';\r\nimport { ITextFieldProps, ITextFieldStyles, ITextFieldStyleProps } from './TextField.types';\r\nimport { getStyles } from './TextField.styles';\r\nexport { ITextField } from './TextField.types';\r\n\r\nexport const TextField: React.StatelessComponent<ITextFieldProps> = styled<ITextFieldProps, ITextFieldStyleProps, ITextFieldStyles>(\r\n  TextFieldBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'TextField'\r\n  }\r\n);\r\n","export interface IMaskValue {\r\n  value?: string;\r\n  /**\r\n   * This index refers to the index in the displayMask rather than the inputMask.\r\n   * This means that any escaped characters do not count toward this index.\r\n   */\r\n  displayIndex: number;\r\n  format: RegExp;\r\n}\r\n\r\nexport const DEFAULT_MASK_FORMAT_CHARS: { [key: string]: RegExp } = {\r\n  '9': /[0-9]/,\r\n  a: /[a-zA-Z]/,\r\n  '*': /[a-zA-Z0-9]/\r\n};\r\n\r\n/**\r\n * Takes in the mask string and the formatCharacters and returns an array of MaskValues\r\n * Example:\r\n * mask = 'Phone Number: (999) - 9999'\r\n * return = [\r\n *    { value: undefined, displayIndex: 16, format: /[0-9]/ },\r\n *    { value: undefined, displayIndex: 17, format: /[0-9]/ },\r\n *    { value: undefined, displayIndex: 18, format: /[0-9]/ },\r\n *    { value: undefined, displayIndex: 22, format: /[0-9]/ },\r\n * ]\r\n *\r\n * @param mask The string use to define the format of the displayed maskedValue.\r\n * @param formatChars An object defining how certain characters in the mask should accept input.\r\n */\r\nexport function parseMask(mask: string | undefined, formatChars: { [key: string]: RegExp } = DEFAULT_MASK_FORMAT_CHARS): IMaskValue[] {\r\n  if (!mask) {\r\n    return [];\r\n  }\r\n\r\n  const maskCharData: IMaskValue[] = [];\r\n  // Count the escape characters in the mask string.\r\n  let escapedChars = 0;\r\n  for (let i = 0; i + escapedChars < mask.length; i++) {\r\n    const maskChar = mask.charAt(i + escapedChars);\r\n    if (maskChar === '\\\\') {\r\n      escapedChars++;\r\n    } else {\r\n      // Check if the maskChar is a format character.\r\n      const maskFormat = formatChars[maskChar];\r\n      if (maskFormat) {\r\n        maskCharData.push({\r\n          /**\r\n           * Do not add escapedChars to the displayIndex.\r\n           * The index refers to a position in the mask's displayValue.\r\n           * Since the backslashes don't appear in the displayValue,\r\n           * we do not add them to the charData displayIndex.\r\n           */\r\n          displayIndex: i,\r\n          format: maskFormat\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  return maskCharData;\r\n}\r\n\r\n/**\r\n * Takes in the mask string, an array of MaskValues, and the maskCharacter\r\n * returns the mask string formatted with the input values and maskCharacter.\r\n * If the maskChar is undefined, the maskDisplay is truncated to the last filled format character.\r\n * Example:\r\n * mask = 'Phone Number: (999) 999 - 9999'\r\n * maskCharData = '12345'\r\n * maskChar = '_'\r\n * return = 'Phone Number: (123) 45_ - ___'\r\n *\r\n * Example:\r\n * mask = 'Phone Number: (999) 999 - 9999'\r\n * value = '12345'\r\n * maskChar = undefined\r\n * return = 'Phone Number: (123) 45'\r\n *\r\n * @param mask The string use to define the format of the displayed maskedValue.\r\n * @param maskCharData The input values to insert into the mask string for displaying.\r\n * @param maskChar? A character to display in place of unfilled mask format characters.\r\n */\r\nexport function getMaskDisplay(mask: string | undefined, maskCharData: IMaskValue[], maskChar?: string): string {\r\n  let maskDisplay = mask;\r\n\r\n  if (!maskDisplay) {\r\n    return '';\r\n  }\r\n\r\n  // Remove all backslashes\r\n  maskDisplay = maskDisplay.replace(/\\\\/g, '');\r\n\r\n  // lastDisplayIndex is is used to truncate the string if necessary.\r\n  let lastDisplayIndex = 0;\r\n  if (maskCharData.length > 0) {\r\n    lastDisplayIndex = maskCharData[0].displayIndex - 1;\r\n  }\r\n\r\n  /**\r\n   * For each input value, replace the character in the maskDisplay with the value.\r\n   * If there is no value set for the format character, use the maskChar.\r\n   */\r\n  for (const charData of maskCharData) {\r\n    let nextChar = ' ';\r\n    if (charData.value) {\r\n      nextChar = charData.value;\r\n      if (charData.displayIndex > lastDisplayIndex) {\r\n        lastDisplayIndex = charData.displayIndex;\r\n      }\r\n    } else {\r\n      if (maskChar) {\r\n        nextChar = maskChar;\r\n      }\r\n    }\r\n\r\n    // Insert the character into the maskdisplay at its corresponding index\r\n    maskDisplay = maskDisplay.slice(0, charData.displayIndex) + nextChar + maskDisplay.slice(charData.displayIndex + 1);\r\n  }\r\n\r\n  // Cut off all mask characters after the last filled format value\r\n  if (!maskChar) {\r\n    maskDisplay = maskDisplay.slice(0, lastDisplayIndex + 1);\r\n  }\r\n\r\n  return maskDisplay;\r\n}\r\n\r\n/**\r\n * Get the next format index right of or at a specified index.\r\n * If no index exists, returns the rightmost index.\r\n * @param maskCharData\r\n * @param index\r\n */\r\nexport function getRightFormatIndex(maskCharData: IMaskValue[], index: number): number {\r\n  for (let i = 0; i < maskCharData.length; i++) {\r\n    if (maskCharData[i].displayIndex >= index) {\r\n      return maskCharData[i].displayIndex;\r\n    }\r\n  }\r\n  return maskCharData[maskCharData.length - 1].displayIndex;\r\n}\r\n\r\n/**\r\n * Get the next format index left of a specified index.\r\n * If no index exists, returns the leftmost index.\r\n * @param maskCharData\r\n * @param index\r\n */\r\nexport function getLeftFormatIndex(maskCharData: IMaskValue[], index: number): number {\r\n  for (let i = maskCharData.length - 1; i >= 0; i--) {\r\n    if (maskCharData[i].displayIndex < index) {\r\n      return maskCharData[i].displayIndex;\r\n    }\r\n  }\r\n  return maskCharData[0].displayIndex;\r\n}\r\n\r\n/**\r\n * Deletes all values in maskCharData with a displayIndex that falls inside the specified range.\r\n * maskCharData is modified inline and also returned.\r\n * @param maskCharData\r\n * @param selectionStart\r\n * @param selectionCount\r\n */\r\nexport function clearRange(maskCharData: IMaskValue[], selectionStart: number, selectionCount: number): IMaskValue[] {\r\n  for (let i = 0; i < maskCharData.length; i++) {\r\n    if (maskCharData[i].displayIndex >= selectionStart) {\r\n      if (maskCharData[i].displayIndex >= selectionStart + selectionCount) {\r\n        break;\r\n      }\r\n      maskCharData[i].value = undefined;\r\n    }\r\n  }\r\n  return maskCharData;\r\n}\r\n\r\n/**\r\n * Deletes the input character at or after a specified index and returns the new array of charData\r\n * maskCharData is modified inline and also returned.\r\n * @param maskCharData\r\n * @param selectionStart\r\n */\r\nexport function clearNext(maskCharData: IMaskValue[], selectionStart: number): IMaskValue[] {\r\n  for (let i = 0; i < maskCharData.length; i++) {\r\n    if (maskCharData[i].displayIndex >= selectionStart) {\r\n      maskCharData[i].value = undefined;\r\n      break;\r\n    }\r\n  }\r\n  return maskCharData;\r\n}\r\n\r\n/**\r\n * Deletes the input character before a specified index and returns the new array of charData\r\n * maskCharData is modified inline and also returned.\r\n * @param maskCharData\r\n * @param selectionStart\r\n */\r\nexport function clearPrev(maskCharData: IMaskValue[], selectionStart: number): IMaskValue[] {\r\n  for (let i = maskCharData.length - 1; i >= 0; i--) {\r\n    if (maskCharData[i].displayIndex < selectionStart) {\r\n      maskCharData[i].value = undefined;\r\n      break;\r\n    }\r\n  }\r\n  return maskCharData;\r\n}\r\n\r\n/**\r\n * Deletes all values in maskCharData with a displayIndex that falls inside the specified range.\r\n * Modifies the maskCharData inplace with the passed string and returns the display index of the\r\n * next format character after the inserted string.\r\n * @param maskCharData\r\n * @param selectionStart\r\n * @param selectionCount\r\n * @return The displayIndex of the next format character\r\n */\r\nexport function insertString(maskCharData: IMaskValue[], selectionStart: number, newString: string): number {\r\n  let stringIndex = 0;\r\n  let nextIndex = 0;\r\n  let isStringInserted = false;\r\n\r\n  // Iterate through _maskCharData finding values with a displayIndex after the specified range start\r\n  for (let i = 0; i < maskCharData.length && stringIndex < newString.length; i++) {\r\n    if (maskCharData[i].displayIndex >= selectionStart) {\r\n      isStringInserted = true;\r\n      nextIndex = maskCharData[i].displayIndex;\r\n      // Find the next character in the newString that matches the format\r\n      while (stringIndex < newString.length) {\r\n        // If the character matches the format regexp, set the maskCharData to the new character\r\n        if (maskCharData[i].format.test(newString.charAt(stringIndex))) {\r\n          maskCharData[i].value = newString.charAt(stringIndex++);\r\n          // Set the nextIndex to the display index of the next mask format character.\r\n          if (i + 1 < maskCharData.length) {\r\n            nextIndex = maskCharData[i + 1].displayIndex;\r\n          } else {\r\n            nextIndex++;\r\n          }\r\n          break;\r\n        }\r\n        stringIndex++;\r\n      }\r\n    }\r\n  }\r\n\r\n  return isStringInserted ? nextIndex : selectionStart;\r\n}\r\n","import * as React from 'react';\r\nimport { TextField } from '../TextField';\r\nimport { ITextField, ITextFieldProps } from '../TextField.types';\r\nimport { initializeComponentRef, autobind, KeyCodes } from '../../../Utilities';\r\n\r\nimport {\r\n  clearNext,\r\n  clearPrev,\r\n  clearRange,\r\n  DEFAULT_MASK_FORMAT_CHARS,\r\n  getLeftFormatIndex,\r\n  getMaskDisplay,\r\n  getRightFormatIndex,\r\n  IMaskValue,\r\n  insertString,\r\n  parseMask\r\n} from './inputMask';\r\n\r\n/**\r\n * State for the MaskedTextField component.\r\n */\r\nexport interface IMaskedTextFieldState {\r\n  /**\r\n   * The mask string formatted with the input value.\r\n   * This is what is displayed inside the TextField\r\n   * @example\r\n   *  `Phone Number: 12_ - 4___`\r\n   */\r\n  displayValue: string;\r\n  /** The index into the rendered value of the first unfilled format character */\r\n  maskCursorPosition?: number;\r\n}\r\n\r\nexport const DEFAULT_MASK_CHAR = '_';\r\n\r\ntype InputChangeType = 'default' | 'backspace' | 'delete' | 'textPasted';\r\n\r\nexport class MaskedTextField extends React.Component<ITextFieldProps, IMaskedTextFieldState> implements ITextField {\r\n  public static defaultProps: ITextFieldProps = {\r\n    maskChar: DEFAULT_MASK_CHAR,\r\n    maskFormat: DEFAULT_MASK_FORMAT_CHARS\r\n  };\r\n  /**\r\n   * Tell BaseComponent to bypass resolution of componentRef.\r\n   */\r\n  protected _skipComponentRefResolution = true;\r\n\r\n  private _textField = React.createRef<ITextField>();\r\n\r\n  /**\r\n   *  An array of data containing information regarding the format characters,\r\n   *  their indices inside the display text, and their corresponding values.\r\n   * @example\r\n   * ```\r\n   *  [\r\n   *    { value: '1', displayIndex: 16, format: /[0-9]/ },\r\n   *    { value: '2', displayIndex: 17, format: /[0-9]/ },\r\n   *    { displayIndex: 18, format: /[0-9]/ },\r\n   *    { value: '4', displayIndex: 22, format: /[0-9]/ },\r\n   *    ...\r\n   *  ]\r\n   * ```\r\n   */\r\n  private _maskCharData: IMaskValue[];\r\n  /** True if the TextField is focused */\r\n  private _isFocused: boolean;\r\n  /** True if the TextField was not focused and it was clicked into */\r\n  private _moveCursorOnMouseUp: boolean;\r\n\r\n  /** The stored selection data prior to input change events. */\r\n  private _changeSelectionData: {\r\n    changeType: InputChangeType;\r\n    selectionStart: number;\r\n    selectionEnd: number;\r\n  } | null;\r\n\r\n  constructor(props: ITextFieldProps) {\r\n    super(props);\r\n\r\n    initializeComponentRef(this);\r\n\r\n    // Translate mask into charData\r\n    this._maskCharData = parseMask(props.mask, props.maskFormat);\r\n    // If an initial value is provided, use it to populate the format chars\r\n    props.value !== undefined && this.setValue(props.value);\r\n\r\n    this._isFocused = false;\r\n    this._moveCursorOnMouseUp = false;\r\n\r\n    this.state = {\r\n      displayValue: getMaskDisplay(props.mask, this._maskCharData, props.maskChar)\r\n    };\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: ITextFieldProps) {\r\n    if (newProps.mask !== this.props.mask || newProps.value !== this.props.value) {\r\n      this._maskCharData = parseMask(newProps.mask, newProps.maskFormat);\r\n      newProps.value !== undefined && this.setValue(newProps.value);\r\n\r\n      this.setState({\r\n        displayValue: getMaskDisplay(newProps.mask, this._maskCharData, newProps.maskChar)\r\n      });\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate() {\r\n    // Move the cursor to the start of the mask format on update\r\n    if (this.state.maskCursorPosition !== undefined && this._textField.current) {\r\n      this._textField.current.setSelectionRange(this.state.maskCursorPosition, this.state.maskCursorPosition);\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    return (\r\n      <TextField\r\n        {...this.props}\r\n        onFocus={this._onFocus}\r\n        onBlur={this._onBlur}\r\n        onMouseDown={this._onMouseDown}\r\n        onMouseUp={this._onMouseUp}\r\n        onChange={this._onInputChange}\r\n        onBeforeChange={this._onBeforeChange}\r\n        onKeyDown={this._onKeyDown}\r\n        onPaste={this._onPaste}\r\n        value={this.state.displayValue}\r\n        componentRef={this._textField}\r\n      />\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @returns The value of all filled format characters or undefined if not all format characters are filled\r\n   */\r\n  public get value(): string | undefined {\r\n    let value = '';\r\n\r\n    for (let i = 0; i < this._maskCharData.length; i++) {\r\n      if (!this._maskCharData[i].value) {\r\n        return undefined;\r\n      }\r\n      value += this._maskCharData[i].value;\r\n    }\r\n    return value;\r\n  }\r\n\r\n  /**\r\n   *\r\n   */\r\n  public setValue(newValue: string): void {\r\n    let valueIndex = 0,\r\n      charDataIndex = 0;\r\n\r\n    while (valueIndex < newValue.length && charDataIndex < this._maskCharData.length) {\r\n      // Test if the next character in the new value fits the next format character\r\n      const testVal = newValue[valueIndex];\r\n      if (this._maskCharData[charDataIndex].format.test(testVal)) {\r\n        this._maskCharData[charDataIndex].value = testVal;\r\n        charDataIndex++;\r\n      }\r\n      valueIndex++;\r\n    }\r\n  }\r\n\r\n  public focus(): void {\r\n    const { current } = this._textField;\r\n\r\n    current && current.focus();\r\n  }\r\n\r\n  public blur(): void {\r\n    const { current } = this._textField;\r\n\r\n    current && current.blur();\r\n  }\r\n\r\n  public select(): void {\r\n    const { current } = this._textField;\r\n\r\n    current && current.select();\r\n  }\r\n\r\n  public setSelectionStart(value: number): void {\r\n    const { current } = this._textField;\r\n\r\n    current && current.setSelectionStart(value);\r\n  }\r\n\r\n  public setSelectionEnd(value: number): void {\r\n    const { current } = this._textField;\r\n\r\n    current && current.setSelectionEnd(value);\r\n  }\r\n\r\n  public setSelectionRange(start: number, end: number): void {\r\n    const { current } = this._textField;\r\n    current && current.setSelectionRange(start, end);\r\n  }\r\n\r\n  public get selectionStart(): number | null {\r\n    const { current } = this._textField;\r\n\r\n    return current && current.selectionStart !== null ? current.selectionStart : -1;\r\n  }\r\n\r\n  public get selectionEnd(): number | null {\r\n    const { current } = this._textField;\r\n\r\n    return current && current.selectionEnd ? current.selectionEnd : -1;\r\n  }\r\n\r\n  @autobind\r\n  private _onFocus(event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) {\r\n    if (this.props.onFocus) {\r\n      this.props.onFocus(event);\r\n    }\r\n\r\n    this._isFocused = true;\r\n\r\n    // Move the cursor position to the leftmost unfilled position\r\n    for (let i = 0; i < this._maskCharData.length; i++) {\r\n      if (!this._maskCharData[i].value) {\r\n        this.setState({\r\n          maskCursorPosition: this._maskCharData[i].displayIndex\r\n        });\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  @autobind\r\n  private _onBlur(event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) {\r\n    if (this.props.onBlur) {\r\n      this.props.onBlur(event);\r\n    }\r\n\r\n    this._isFocused = false;\r\n    this._moveCursorOnMouseUp = true;\r\n  }\r\n\r\n  @autobind\r\n  private _onMouseDown(event: React.MouseEvent<HTMLInputElement>) {\r\n    if (this.props.onMouseDown) {\r\n      this.props.onMouseDown(event);\r\n    }\r\n\r\n    if (!this._isFocused) {\r\n      this._moveCursorOnMouseUp = true;\r\n    }\r\n  }\r\n\r\n  @autobind\r\n  private _onMouseUp(event: React.MouseEvent<HTMLInputElement>) {\r\n    if (this.props.onMouseUp) {\r\n      this.props.onMouseUp(event);\r\n    }\r\n\r\n    // Move the cursor on mouseUp after focusing the textField\r\n    if (this._moveCursorOnMouseUp) {\r\n      this._moveCursorOnMouseUp = false;\r\n      // Move the cursor position to the rightmost unfilled position\r\n      for (let i = 0; i < this._maskCharData.length; i++) {\r\n        if (!this._maskCharData[i].value) {\r\n          this.setState({\r\n            maskCursorPosition: this._maskCharData[i].displayIndex\r\n          });\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  @autobind\r\n  private _onBeforeChange(value: string) {\r\n    const { current } = this._textField;\r\n\r\n    if (this.props.onBeforeChange) {\r\n      this.props.onBeforeChange(value);\r\n    }\r\n\r\n    if (this._changeSelectionData === null && current) {\r\n      this._changeSelectionData = {\r\n        changeType: 'default',\r\n        selectionStart: current.selectionStart !== null ? current.selectionStart : -1,\r\n        selectionEnd: current.selectionEnd !== null ? current.selectionEnd : -1\r\n      };\r\n    }\r\n  }\r\n\r\n  @autobind\r\n  private _onInputChange(ev: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>, value: string) {\r\n    if (!this._changeSelectionData) {\r\n      return;\r\n    }\r\n\r\n    const { displayValue } = this.state;\r\n\r\n    // The initial value of cursorPos does not matter\r\n    let cursorPos = 0;\r\n    const { changeType, selectionStart, selectionEnd } = this._changeSelectionData;\r\n\r\n    if (changeType === 'textPasted') {\r\n      const charsSelected = selectionEnd - selectionStart,\r\n        charCount = value.length + charsSelected - displayValue.length,\r\n        startPos = selectionStart,\r\n        pastedString = value.substr(startPos, charCount);\r\n\r\n      // Clear any selected characters\r\n      if (charsSelected) {\r\n        this._maskCharData = clearRange(this._maskCharData, selectionStart, charsSelected);\r\n      }\r\n      cursorPos = insertString(this._maskCharData, startPos, pastedString);\r\n    } else if (changeType === 'delete' || changeType === 'backspace') {\r\n      // isDel is true If the characters are removed LTR, otherwise RTL\r\n      const isDel = changeType === 'delete',\r\n        charCount = selectionEnd - selectionStart;\r\n\r\n      if (charCount) {\r\n        // charCount is > 0 if range was deleted\r\n        this._maskCharData = clearRange(this._maskCharData, selectionStart, charCount);\r\n        cursorPos = getRightFormatIndex(this._maskCharData, selectionStart);\r\n      } else {\r\n        // If charCount === 0, there was no selection and a single character was deleted\r\n        if (isDel) {\r\n          this._maskCharData = clearNext(this._maskCharData, selectionStart);\r\n          cursorPos = getRightFormatIndex(this._maskCharData, selectionStart);\r\n        } else {\r\n          this._maskCharData = clearPrev(this._maskCharData, selectionStart);\r\n          cursorPos = getLeftFormatIndex(this._maskCharData, selectionStart);\r\n        }\r\n      }\r\n    } else if (value.length > displayValue.length) {\r\n      // This case is if the user added characters\r\n      const charCount = value.length - displayValue.length,\r\n        startPos = selectionEnd - charCount,\r\n        enteredString = value.substr(startPos, charCount);\r\n\r\n      cursorPos = insertString(this._maskCharData, startPos, enteredString);\r\n    } else if (value.length <= displayValue.length) {\r\n      /**\r\n       * This case is reached only if the user has selected a block of 1 or more\r\n       * characters and input a character replacing the characters they've selected.\r\n       */\r\n      const charCount = 1,\r\n        selectCount = displayValue.length + charCount - value.length,\r\n        startPos = selectionEnd - charCount,\r\n        enteredString = value.substr(startPos, charCount);\r\n\r\n      // Clear the selected range\r\n      this._maskCharData = clearRange(this._maskCharData, startPos, selectCount);\r\n      // Insert the printed character\r\n      cursorPos = insertString(this._maskCharData, startPos, enteredString);\r\n    }\r\n\r\n    this._changeSelectionData = null;\r\n\r\n    const newValue = getMaskDisplay(this.props.mask, this._maskCharData, this.props.maskChar);\r\n\r\n    this.setState({\r\n      displayValue: newValue,\r\n      maskCursorPosition: cursorPos\r\n    });\r\n\r\n    // Perform onChange/d after input has been processed. Return value is expected to be the displayed text\r\n    if (this.props.onChange) {\r\n      this.props.onChange(ev, newValue);\r\n    }\r\n\r\n    if (this.props.onChanged) {\r\n      this.props.onChanged(newValue);\r\n    }\r\n  }\r\n\r\n  @autobind\r\n  private _onKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\r\n    const { current } = this._textField;\r\n\r\n    if (this.props.onKeyDown) {\r\n      this.props.onKeyDown(event);\r\n    }\r\n\r\n    this._changeSelectionData = null;\r\n    if (current && current.value) {\r\n      const { keyCode, ctrlKey, metaKey } = event;\r\n\r\n      // Ignore ctrl and meta keydown\r\n      if (ctrlKey || metaKey) {\r\n        return;\r\n      }\r\n\r\n      // On backspace or delete, store the selection and the keyCode\r\n      if (keyCode === KeyCodes.backspace || keyCode === KeyCodes.del) {\r\n        const selectionStart = (event.target as HTMLInputElement).selectionStart,\r\n          selectionEnd = (event.target as HTMLInputElement).selectionEnd;\r\n\r\n        // Check if backspace or delete press is valid.\r\n        if (\r\n          !(keyCode === KeyCodes.backspace && selectionEnd && selectionEnd > 0) &&\r\n          !(keyCode === KeyCodes.del && selectionStart !== null && selectionStart < current.value.length)\r\n        ) {\r\n          return;\r\n        }\r\n\r\n        this._changeSelectionData = {\r\n          changeType: keyCode === KeyCodes.backspace ? 'backspace' : 'delete',\r\n          selectionStart: selectionStart !== null ? selectionStart : -1,\r\n          selectionEnd: selectionEnd !== null ? selectionEnd : -1\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  @autobind\r\n  private _onPaste(event: React.ClipboardEvent<HTMLInputElement>) {\r\n    if (this.props.onPaste) {\r\n      this.props.onPaste(event);\r\n    }\r\n\r\n    const selectionStart = (event.target as HTMLInputElement).selectionStart,\r\n      selectionEnd = (event.target as HTMLInputElement).selectionEnd;\r\n    // Store the paste selection range\r\n    this._changeSelectionData = {\r\n      changeType: 'textPasted',\r\n      selectionStart: selectionStart !== null ? selectionStart : -1,\r\n      selectionEnd: selectionEnd !== null ? selectionEnd : -1\r\n    };\r\n  }\r\n}\r\n","export interface ISelectableOption {\r\n  /**\r\n   * Arbitrary string associated with this option.\r\n   */\r\n  key: string | number;\r\n\r\n  /**\r\n   * Text to render for this option\r\n   */\r\n  text: string;\r\n\r\n  /**\r\n   * Title attribute (built in tooltip) for a given option.\r\n   */\r\n  title?: string;\r\n\r\n  /**\r\n   * Text to render for this option\r\n   */\r\n  itemType?: SelectableOptionMenuItemType;\r\n\r\n  /**\r\n   * Index for this option\r\n   */\r\n  index?: number;\r\n\r\n  /**\r\n   * The aria label for the dropdown option. If not present, the `text` will be used.\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /** If option is selected. */\r\n  selected?: boolean;\r\n\r\n  /**\r\n   * Whether the option is disabled\r\n   * @defaultvalue false\r\n   */\r\n  disabled?: boolean;\r\n\r\n  /**\r\n   * Data available to custom onRender functions.\r\n   */\r\n  data?: any;\r\n}\r\n\r\nexport enum SelectableOptionMenuItemType {\r\n  Normal = 0,\r\n  Divider = 1,\r\n  Header = 2\r\n}\r\n","import * as React from 'react';\r\nimport { getId, classNamesFunction, mergeAriaAttributeValues, initializeComponentRef, warnMutuallyExclusive } from '../../Utilities';\r\nimport { Icon } from '../../Icon';\r\nimport { ICheckbox, ICheckboxProps, ICheckboxStyleProps, ICheckboxStyles } from './Checkbox.types';\r\nimport { KeytipData } from '../../KeytipData';\r\n\r\nexport interface ICheckboxState {\r\n  /** Is true when Uncontrolled control is checked. */\r\n  isChecked?: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<ICheckboxStyleProps, ICheckboxStyles>();\r\n\r\nexport class CheckboxBase extends React.Component<ICheckboxProps, ICheckboxState> implements ICheckbox {\r\n  public static defaultProps: ICheckboxProps = {\r\n    boxSide: 'start'\r\n  };\r\n\r\n  private _checkBox = React.createRef<HTMLInputElement>();\r\n  private _id: string;\r\n  private _classNames: { [key in keyof ICheckboxStyles]: string };\r\n\r\n  /**\r\n   * Initialize a new instance of the Checkbox\r\n   * @param props - Props for the component\r\n   * @param context - Context or initial state for the base component.\r\n   */\r\n  constructor(props: ICheckboxProps, context?: any) {\r\n    super(props, context);\r\n\r\n    initializeComponentRef(this);\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnMutuallyExclusive('Checkbox', props, {\r\n        checked: 'defaultChecked'\r\n      });\r\n    }\r\n\r\n    this._id = this.props.id || getId('checkbox-');\r\n    this.state = {\r\n      isChecked: !!(props.checked !== undefined ? props.checked : props.defaultChecked)\r\n    };\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: ICheckboxProps): void {\r\n    if (newProps.checked !== undefined) {\r\n      this.setState({\r\n        isChecked: !!newProps.checked // convert null to false\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Render the Checkbox based on passed props\r\n   */\r\n  public render(): JSX.Element {\r\n    const {\r\n      checked,\r\n      className,\r\n      defaultChecked,\r\n      disabled,\r\n      inputProps,\r\n      name,\r\n      boxSide,\r\n      theme,\r\n      ariaLabel,\r\n      ariaLabelledBy,\r\n      ariaDescribedBy,\r\n      styles,\r\n      onRenderLabel = this._onRenderLabel,\r\n      checkmarkIconProps,\r\n      ariaPositionInSet,\r\n      ariaSetSize,\r\n      keytipProps,\r\n      title\r\n    } = this.props;\r\n\r\n    const isChecked = checked === undefined ? this.state.isChecked : checked;\r\n    const isReversed = boxSide !== 'start' ? true : false;\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      disabled,\r\n      checked: isChecked,\r\n      reversed: isReversed,\r\n      isUsingCustomLabelRender: onRenderLabel !== this._onRenderLabel\r\n    });\r\n\r\n    return (\r\n      <KeytipData keytipProps={keytipProps} disabled={disabled}>\r\n        {(keytipAttributes: any): JSX.Element => (\r\n          <div className={this._classNames.root}>\r\n            <input\r\n              type=\"checkbox\"\r\n              {...inputProps}\r\n              data-ktp-execute-target={keytipAttributes['data-ktp-execute-target']}\r\n              {...checked !== undefined && { checked }}\r\n              {...defaultChecked !== undefined && { defaultChecked }}\r\n              disabled={disabled}\r\n              className={this._classNames.input}\r\n              ref={this._checkBox}\r\n              name={name}\r\n              id={this._id}\r\n              title={title}\r\n              onChange={this._onChange}\r\n              onFocus={this._onFocus}\r\n              onBlur={this._onBlur}\r\n              aria-disabled={disabled}\r\n              aria-label={ariaLabel}\r\n              aria-labelledby={ariaLabelledBy}\r\n              aria-describedby={mergeAriaAttributeValues(ariaDescribedBy, keytipAttributes['aria-describedby'])}\r\n              aria-posinset={ariaPositionInSet}\r\n              aria-setsize={ariaSetSize}\r\n            />\r\n            <label className={this._classNames.label} htmlFor={this._id}>\r\n              <div className={this._classNames.checkbox} data-ktp-target={keytipAttributes['data-ktp-target']}>\r\n                <Icon iconName=\"CheckMark\" {...checkmarkIconProps} className={this._classNames.checkmark} />\r\n              </div>\r\n              {onRenderLabel(this.props, this._onRenderLabel)}\r\n            </label>\r\n          </div>\r\n        )}\r\n      </KeytipData>\r\n    );\r\n  }\r\n\r\n  public get checked(): boolean {\r\n    return this.state.isChecked!;\r\n  }\r\n\r\n  public focus(): void {\r\n    if (this._checkBox.current) {\r\n      this._checkBox.current.focus();\r\n    }\r\n  }\r\n\r\n  private _onFocus = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    const { inputProps } = this.props;\r\n\r\n    if (inputProps && inputProps.onFocus) {\r\n      inputProps.onFocus(ev);\r\n    }\r\n  };\r\n\r\n  private _onBlur = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    const { inputProps } = this.props;\r\n\r\n    if (inputProps && inputProps.onBlur) {\r\n      inputProps.onBlur(ev);\r\n    }\r\n  };\r\n\r\n  private _onChange = (ev: React.FormEvent<HTMLElement>): void => {\r\n    const { disabled, onChange } = this.props;\r\n    const { isChecked } = this.state;\r\n\r\n    if (!disabled) {\r\n      if (onChange) {\r\n        onChange(ev, !isChecked);\r\n      }\r\n\r\n      if (this.props.checked === undefined) {\r\n        this.setState({ isChecked: !isChecked });\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onRenderLabel = (props: ICheckboxProps): JSX.Element | null => {\r\n    const { label } = props;\r\n\r\n    return label ? <span className={this._classNames.text}>{label}</span> : null;\r\n  };\r\n}\r\n","import { ICheckboxStyleProps, ICheckboxStyles } from './Checkbox.types';\r\nimport { FontSizes, HighContrastSelector } from '../../Styling';\r\nimport { IsFocusVisibleClassName } from '../../Utilities';\r\n\r\nconst MS_CHECKBOX_LABEL_SIZE = '20px';\r\nconst MS_CHECKBOX_TRANSITION_DURATION = '200ms';\r\nconst MS_CHECKBOX_TRANSITION_TIMING = 'cubic-bezier(.4, 0, .23, 1)';\r\n\r\nexport const getStyles = (props: ICheckboxStyleProps): ICheckboxStyles => {\r\n  const { className, theme, reversed, checked, disabled, isUsingCustomLabelRender } = props;\r\n  const { semanticColors } = theme;\r\n  const checkmarkFontColor = semanticColors.inputForegroundChecked;\r\n  const checkmarkFontColorCheckedDisabled = semanticColors.disabledBackground;\r\n  const checkmarkFontColorHovered = semanticColors.inputBorder;\r\n  const checkboxBorderColor = semanticColors.smallInputBorder;\r\n  const checkboxBorderColorChecked = semanticColors.inputBackgroundChecked;\r\n  const checkboxBorderColorDisabled = semanticColors.disabledBodySubtext;\r\n  const checkboxBorderHoveredColor = semanticColors.inputBorderHovered;\r\n  const checkboxBackgroundChecked = semanticColors.inputBackgroundChecked;\r\n  const checkboxBackgroundCheckedHovered = semanticColors.inputBackgroundCheckedHovered;\r\n  const checkboxBorderColorCheckedHovered = semanticColors.inputBackgroundCheckedHovered;\r\n  const checkboxHoveredTextColor = semanticColors.bodyText;\r\n  const checkboxBackgroundDisabledChecked = semanticColors.disabledBodySubtext;\r\n  const checkboxTextColor = semanticColors.bodyText;\r\n  const checkboxTextColorDisabled = semanticColors.disabledText;\r\n\r\n  return {\r\n    root: [\r\n      'ms-Checkbox',\r\n      {\r\n        position: 'relative',\r\n        display: 'flex'\r\n      },\r\n      reversed && 'reversed',\r\n      checked && 'is-checked',\r\n      !disabled && 'is-enabled',\r\n      disabled && 'is-disabled',\r\n      !disabled && [\r\n        !checked && {\r\n          selectors: {\r\n            ':hover .ms-Checkbox-checkbox': {\r\n              borderColor: checkboxBorderHoveredColor,\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  borderColor: 'Highlight'\r\n                }\r\n              }\r\n            },\r\n            ':focus .ms-Checkbox-checkbox': { borderColor: checkboxBorderHoveredColor },\r\n            ':hover .ms-Checkbox-checkmark': {\r\n              color: checkmarkFontColorHovered,\r\n              opacity: '1',\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  color: 'Highlight'\r\n                }\r\n              }\r\n            }\r\n          }\r\n        },\r\n        checked && {\r\n          selectors: {\r\n            ':hover .ms-Checkbox-checkbox': {\r\n              background: checkboxBackgroundCheckedHovered,\r\n              borderColor: checkboxBorderColorCheckedHovered\r\n            },\r\n            ':focus .ms-Checkbox-checkbox': {\r\n              background: checkboxBackgroundCheckedHovered,\r\n              borderColor: checkboxBorderColorCheckedHovered\r\n            },\r\n            [HighContrastSelector]: {\r\n              selectors: {\r\n                ':hover .ms-Checkbox-checkbox': {\r\n                  background: 'Window',\r\n                  borderColor: 'Highlight'\r\n                },\r\n                ':focus .ms-Checkbox-checkbox': {\r\n                  background: 'Highlight'\r\n                },\r\n                ':focus:hover .ms-Checkbox-checkbox': {\r\n                  background: 'Highlight'\r\n                },\r\n                ':focus:hover .ms-Checkbox-checkmark': {\r\n                  color: 'Window'\r\n                },\r\n                ':hover .ms-Checkbox-checkmark': {\r\n                  color: 'Highlight'\r\n                }\r\n              }\r\n            }\r\n          }\r\n        },\r\n        {\r\n          selectors: {\r\n            ':hover .ms-Checkbox-text': { color: checkboxHoveredTextColor },\r\n            ':focus .ms-Checkbox-text': { color: checkboxHoveredTextColor }\r\n          }\r\n        }\r\n      ],\r\n      className\r\n    ],\r\n    input: [\r\n      {\r\n        position: 'absolute',\r\n        background: 'none',\r\n\r\n        opacity: 0,\r\n        selectors: {\r\n          [`.${IsFocusVisibleClassName} &:focus + label::before`]: {\r\n            outline: '1px solid ' + theme.palette.neutralSecondary,\r\n            outlineOffset: '2px',\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                outline: '1px solid ActiveBorder'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    label: [\r\n      'ms-Checkbox-label',\r\n      theme.fonts.medium,\r\n      {\r\n        display: 'flex',\r\n        alignItems: isUsingCustomLabelRender ? 'center' : 'flex-start',\r\n        cursor: disabled ? 'default' : 'pointer',\r\n        position: 'relative',\r\n        userSelect: 'none',\r\n        textAlign: 'left'\r\n      },\r\n      reversed && {\r\n        flexDirection: 'row-reverse',\r\n        justifyContent: 'flex-end'\r\n      },\r\n      {\r\n        selectors: {\r\n          '&::before': {\r\n            position: 'absolute',\r\n            left: 0,\r\n            right: 0,\r\n            top: 0,\r\n            bottom: 0,\r\n            content: '\"\"',\r\n            pointerEvents: 'none'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    checkbox: [\r\n      'ms-Checkbox-checkbox',\r\n      {\r\n        display: 'flex',\r\n        flexShrink: 0,\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        height: MS_CHECKBOX_LABEL_SIZE,\r\n        width: MS_CHECKBOX_LABEL_SIZE,\r\n        borderWidth: '1px',\r\n        borderStyle: 'solid',\r\n        borderColor: checkboxBorderColor,\r\n        boxSizing: 'border-box',\r\n        transitionProperty: 'background, border, border-color',\r\n        transitionDuration: MS_CHECKBOX_TRANSITION_DURATION,\r\n        transitionTimingFunction: MS_CHECKBOX_TRANSITION_TIMING,\r\n\r\n        /* in case the icon is bigger than the box */\r\n        overflow: 'hidden'\r\n      },\r\n      !reversed\r\n        ? // this margin on the checkbox is for backwards compat.\r\n          // notably it has the effect where a customRender is used, there will be only a 4px margin from checkbox to label.\r\n          // the label by default would have another 4px margin for a total of 8px margin between checkbox and label.\r\n          // we don't combine the two (and move it into the text) to not incur a breaking change for everyone using custom render atm.\r\n          {\r\n            marginRight: 4\r\n          }\r\n        : {\r\n            marginLeft: 4\r\n          },\r\n      !disabled &&\r\n        checked && {\r\n          background: checkboxBackgroundChecked,\r\n          borderColor: checkboxBorderColorChecked,\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              background: 'Highlight',\r\n              borderColor: 'Highlight'\r\n            }\r\n          }\r\n        },\r\n      disabled && {\r\n        borderColor: checkboxBorderColorDisabled,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderColor: 'InactiveBorder'\r\n          }\r\n        }\r\n      },\r\n      checked &&\r\n        disabled && {\r\n          background: checkboxBackgroundDisabledChecked,\r\n          borderColor: checkboxBorderColorDisabled\r\n        }\r\n    ],\r\n    checkmark: [\r\n      'ms-Checkbox-checkmark',\r\n      {\r\n        opacity: checked ? '1' : '0',\r\n        color: checked && disabled ? checkmarkFontColorCheckedDisabled : checkmarkFontColor,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: disabled ? 'InactiveBorder' : 'Window',\r\n            MsHighContrastAdjust: 'none'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    text: [\r\n      'ms-Checkbox-text',\r\n      {\r\n        color: disabled ? checkboxTextColorDisabled : checkboxTextColor,\r\n        fontSize: FontSizes.medium,\r\n        lineHeight: '20px'\r\n      },\r\n      !reversed\r\n        ? {\r\n            marginLeft: 4\r\n          }\r\n        : {\r\n            marginRight: 4\r\n          },\r\n      disabled && {\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            // backwards compat for the color of the text when the checkbox was rendered\r\n            // using a Button.\r\n            color: 'InactiveBorder'\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { CheckboxBase } from './Checkbox.base';\r\nimport { getStyles } from './Checkbox.styles';\r\nimport { ICheckboxProps, ICheckboxStyleProps, ICheckboxStyles } from './Checkbox.types';\r\n\r\nexport const Checkbox: React.StatelessComponent<ICheckboxProps> = styled<ICheckboxProps, ICheckboxStyleProps, ICheckboxStyles>(\r\n  CheckboxBase,\r\n  getStyles,\r\n  undefined,\r\n  { scope: 'Checkbox' }\r\n);\r\n","import { IDropdownOption, DropdownMenuItemType } from '../Dropdown.types';\r\n\r\n/**\r\n * A utility class to cache size and position in cache.\r\n *\r\n * Dropdown options has non-selectable display types. It is therefore not cheap to determine\r\n * the total number of actual selectable options as well as the position an option is in the\r\n * list of options - O(n) cost for each lookup.\r\n *\r\n * Given that we potentially have to make this determination on every single render pass, this\r\n * cache should provide a little bit of relief.\r\n */\r\nexport class DropdownSizePosCache {\r\n  private _displayOnlyOptionsCache: number[];\r\n  private _size = 0;\r\n\r\n  /**\r\n   * Invalidates the cache and recalculate the size of selectable options.\r\n   */\r\n  public updateOptions(options: IDropdownOption[]) {\r\n    const displayOnlyOptionsCache = [];\r\n    let size = 0;\r\n    for (let i = 0; i < options.length; i++) {\r\n      if (options[i].itemType === DropdownMenuItemType.Divider || options[i].itemType === DropdownMenuItemType.Header) {\r\n        displayOnlyOptionsCache.push(i);\r\n      } else {\r\n        size++;\r\n      }\r\n    }\r\n\r\n    this._size = size;\r\n    this._displayOnlyOptionsCache = displayOnlyOptionsCache;\r\n  }\r\n\r\n  /**\r\n   * The size of all the selectable options.\r\n   */\r\n  public get optionSetSize(): number {\r\n    return this._size;\r\n  }\r\n\r\n  /**\r\n   * Returns the position of this option element relative to the full set of selectable option elements.\r\n   * Note: the first selectable element is position 1 in the set.\r\n   * @param index The raw index of the option element.\r\n   */\r\n  public positionInSet(index: number | undefined): number | undefined {\r\n    if (index === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    // we could possibly memoize this too but this should be good enough, most of the time (the expectation is that\r\n    // when you have a lot of options, the selectable options will heavily dominate over the non-selectable options.\r\n    let offset = 0;\r\n    while (index > this._displayOnlyOptionsCache[offset]) {\r\n      offset++;\r\n    }\r\n\r\n    if (this._displayOnlyOptionsCache[offset] === index) {\r\n      throw new Error(`Unexpected: Option at index ${index} is not a selectable element.`);\r\n    }\r\n\r\n    return index - offset + 1;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { IFocusTrapZoneProps } from '../../FocusTrapZone';\r\nimport { ILayerProps } from '../../Layer';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IRefObject, IRenderFunction, IStyleFunctionOrObject } from '../../Utilities';\r\nimport { PanelBase } from './Panel.base';\r\n\r\n/**\r\n * {@docCategory Panel}\r\n */\r\nexport interface IPanel {\r\n  /**\r\n   * Forces the panel to open.\r\n   */\r\n  open: () => void;\r\n\r\n  /**\r\n   * Forces the panel to dismiss.\r\n   */\r\n  dismiss: (ev?: React.KeyboardEvent<HTMLElement>) => void;\r\n}\r\n\r\n/**\r\n * {@docCategory Panel}\r\n */\r\nexport interface IPanelProps extends React.HTMLAttributes<PanelBase> {\r\n  /**\r\n   * Optional callback to access the IPanel interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IPanel>;\r\n\r\n  /**\r\n   * Whether the panel is displayed.\r\n   * @defaultvalue false\r\n   */\r\n  isOpen?: boolean;\r\n\r\n  /**\r\n   * Has the close button visible.\r\n   * @defaultvalue true\r\n   */\r\n  hasCloseButton?: boolean;\r\n\r\n  /**\r\n   * Whether the panel can be light dismissed.\r\n   * @defaultvalue false\r\n   */\r\n  isLightDismiss?: boolean;\r\n\r\n  /**\r\n   * Whether the panel is hidden on dismiss, instead of destroyed in the DOM.\r\n   * Protects the contents from being destroyed when the panel is dismissed.\r\n   * @defaultvalue false\r\n   */\r\n  isHiddenOnDismiss?: boolean;\r\n\r\n  /**\r\n   * Whether the panel uses a modal overlay or not\r\n   * @defaultvalue true\r\n   */\r\n  isBlocking?: boolean;\r\n\r\n  /**\r\n   * Determines if content should stretch to fill available space putting footer at the bottom of the page\r\n   * @defaultvalue false\r\n   */\r\n  isFooterAtBottom?: boolean;\r\n\r\n  /**\r\n   * Header text for the Panel.\r\n   * @defaultvalue \"\"\r\n   */\r\n  headerText?: string;\r\n\r\n  /**\r\n   * A callback function for when the Panel is opened, before the animation completes.\r\n   */\r\n  onOpen?: () => void;\r\n\r\n  /**\r\n   * A callback function for when the Panel is opened, after the animation completes.\r\n   */\r\n  onOpened?: () => void;\r\n\r\n  /**\r\n   * A callback function for when the panel is closed, before the animation completes.\r\n   * If the panel should NOT be dismissed based on some keyboard event, then simply call ev.preventDefault() on it\r\n   */\r\n  onDismiss?: (ev?: React.SyntheticEvent<HTMLElement>) => void;\r\n\r\n  /**\r\n   * A callback function which is called after the Panel is dismissed and the animation is complete.\r\n   */\r\n  onDismissed?: () => void;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules.\r\n   */\r\n  styles?: IStyleFunctionOrObject<IPanelStyleProps, IPanelStyles>;\r\n\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Additional css class to apply to the Panel\r\n   * @defaultvalue undefined\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Type of the panel.\r\n   * @defaultvalue PanelType.smallFixedRight\r\n   */\r\n  type?: PanelType;\r\n\r\n  /**\r\n   * Custom panel width, used only when `type` is set to `PanelType.custom`.\r\n   */\r\n  customWidth?: string;\r\n\r\n  /**\r\n   * Aria label on close button\r\n   */\r\n  closeButtonAriaLabel?: string;\r\n\r\n  /**\r\n   * Optional parameter to provider the class name for header text\r\n   */\r\n  headerClassName?: string;\r\n\r\n  /**\r\n   * Sets the HTMLElement to focus on when exiting the FocusTrapZone.\r\n   * @defaultvalue The element.target that triggered the Panel.\r\n   */\r\n  elementToFocusOnDismiss?: HTMLElement;\r\n\r\n  /**\r\n   * Indicates if this Panel will ignore keeping track of HTMLElement that activated the Zone.\r\n   * Deprecated, use `focusTrapZoneProps`.\r\n   * @defaultvalue false\r\n   * @deprecated Use `focusTrapZoneProps`.\r\n   */\r\n  ignoreExternalFocusing?: boolean;\r\n\r\n  /**\r\n   * Indicates whether Panel should force focus inside the focus trap zone.\r\n   * If not explicitly specified, behavior aligns with FocusTrapZone's default behavior.\r\n   * Deprecated, use `focusTrapZoneProps`.\r\n   * @deprecated Use `focusTrapZoneProps`.\r\n   */\r\n  forceFocusInsideTrap?: boolean;\r\n\r\n  /**\r\n   * Indicates the selector for first focusable item.\r\n   * Deprecated, use `focusTrapZoneProps`.\r\n   * @deprecated Use `focusTrapZoneProps`.\r\n   */\r\n  firstFocusableSelector?: string;\r\n\r\n  /**\r\n   * Optional props to pass to the FocusTrapZone component to manage focus in the panel.\r\n   */\r\n  focusTrapZoneProps?: IFocusTrapZoneProps;\r\n\r\n  /**\r\n   * Optional props to pass to the Layer component hosting the panel.\r\n   */\r\n  layerProps?: ILayerProps;\r\n\r\n  /**\r\n   * Optional custom function to handle clicks outside the panel in lightdismiss mode\r\n   */\r\n  onLightDismissClick?: () => void;\r\n\r\n  /**\r\n   * Optional custom function to handle clicks outside this component\r\n   */\r\n  onOuterClick?: () => void;\r\n\r\n  /**\r\n   * Optional custom renderer navigation region. Replaces the region that contains the close button.\r\n   */\r\n  onRenderNavigation?: IRenderFunction<IPanelProps>;\r\n\r\n  /**\r\n   * Optional custom renderer for content in the navigation region. Replaces current close button.\r\n   */\r\n  onRenderNavigationContent?: IRenderFunction<IPanelProps>;\r\n\r\n  /**\r\n   * Optional custom renderer for header region. Replaces current title\r\n   */\r\n  onRenderHeader?: IPanelHeaderRenderer;\r\n\r\n  /**\r\n   * Optional custom renderer for body region. Replaces any children passed into the component.\r\n   */\r\n  onRenderBody?: IRenderFunction<IPanelProps>;\r\n\r\n  /**\r\n   * Optional custom renderer for footer region. Replaces sticky footer.\r\n   */\r\n  onRenderFooter?: IRenderFunction<IPanelProps>;\r\n\r\n  /**\r\n   * Custom renderer for content in the sticky footer\r\n   */\r\n  onRenderFooterContent?: IRenderFunction<IPanelProps>;\r\n\r\n  /**\r\n   * Deprecated property. Serves no function.\r\n   * @deprecated Serves no function.\r\n   */\r\n  componentId?: string;\r\n}\r\n\r\n/**\r\n * Renderer function which takes an additional parameter, the ID to use for the element containing\r\n * the panel's title. This allows the `aria-labelledby` for the panel popup to work correctly.\r\n * Note that if `headerTextId` is provided, it **must** be used on an element, or screen readers\r\n * will be confused by the reference to a nonexistent ID.\r\n * {@docCategory Panel}\r\n */\r\nexport interface IPanelHeaderRenderer extends IRenderFunction<IPanelProps> {\r\n  /**\r\n   * @param props - Props given to the panel\r\n   * @param defaultRender - Default header renderer. If using this renderer in code that does not\r\n   * assign `headerTextId` to an element elsewhere, it **must** be passed to this function.\r\n   * @param headerTextId - If provided, this **must** be used as the ID of an element containing the\r\n   * panel's title, because the panel popup uses this ID as its aria-labelledby.\r\n   */\r\n  (props?: IPanelProps, defaultRender?: IPanelHeaderRenderer, headerTextId?: string | undefined): JSX.Element | null;\r\n}\r\n\r\n/**\r\n * {@docCategory Panel}\r\n */\r\nexport enum PanelType {\r\n  /**\r\n   * Renders the Panel with a `fluid` (full screen) width.\r\n   * Recommended for use on small screen breakpoints.\r\n   * - Small (320-479): full screen width, 16px left/right padding\r\n   * - Medium (480-639): full screen width, 16px left/right padding\r\n   * - Large (640-1023): full screen width, 32px left/right padding\r\n   * - XLarge (1024-1365): full screen width, 32px left/right padding\r\n   * - XXLarge (1366-up): full screen width, 40px left/right padding\r\n   */\r\n  smallFluid = 0,\r\n\r\n  /**\r\n   * Renders the Panel in fixed-width `small` size, anchored to the far side (right in LTR mode).\r\n   * - Small (320-479): adapts to `PanelType.smallFluid` at this breakpoint\r\n   * - Medium (480-639): 340px width, 16px left/right padding\r\n   * - Large (640-1023): 340px width, 32px left/right padding\r\n   * - XLarge (1024-1365): 340px width, 32px left/right padding\r\n   * - XXLarge (1366-up): 340px width, 40px left/right padding\r\n   */\r\n  smallFixedFar = 1,\r\n\r\n  /**\r\n   * Renders the Panel in fixed-width `small` size, anchored to the near side (left in LTR mode).\r\n   * - Small (320-479): 272px width, 16px left/right padding\r\n   * - Medium (480-639): 272px width, 16px left/right padding\r\n   * - Large (640-1023): 272px width, 32px left/right padding\r\n   * - XLarge (1024-1365): 272px width, 32px left/right padding\r\n   * - XXLarge (1366-up): 272px width, 40px left/right padding\r\n   */\r\n  smallFixedNear = 2,\r\n\r\n  /**\r\n   * Renders the Panel in `medium` size, anchored to the far side (right in LTR mode).\r\n   * - Small (320-479): adapts to `PanelType.smallFluid` at this breakpoint\r\n   * - Medium (480-639): adapts to `PanelType.smallFixedFar` at this breakpoint\r\n   * - Large (640-1023): 592px width, 32px left/right padding\r\n   * - XLarge (1024-1365): 644px width, 32px left/right padding\r\n   * - XXLarge (1366-up): 644px width, 40px left/right padding\r\n   */\r\n  medium = 3,\r\n\r\n  /**\r\n   * Renders the Panel in `large` size, anchored to the far side (right in LTR mode).\r\n   * - Small (320-479): adapts to `PanelType.smallFluid` at this breakpoint\r\n   * - Medium (480-639):  adapts to `PanelType.smallFixedFar` at this breakpoint\r\n   * - Large (640-1023): adapts to `PanelType.medium` at this breakpoint\r\n   * - XLarge (1024-1365): 48px fixed left margin, fluid width, 32px left/right padding\r\n   * - XXLarge (1366-up): 428px fixed left margin, fluid width, 40px left/right padding\r\n   */\r\n  large = 4,\r\n\r\n  /**\r\n   * Renders the Panel in `large` size, anchored to the far side (right in LTR mode), with a fixed width at XX-Large breakpoint.\r\n   * - Small (320-479): adapts to `PanelType.smallFluid` at this breakpoint\r\n   * - Medium (480-639): adapts to `PanelType.smallFixedFar` at this breakpoint\r\n   * - Large (640-1023): adapts to `PanelType.medium` at this breakpoint\r\n   * - XLarge (1024-1365): 48px fixed left margin, fluid width, 32px left/right padding\r\n   * - XXLarge (1366-up): 940px width, 40px left/right padding\r\n   */\r\n  largeFixed = 5,\r\n\r\n  /**\r\n   * Renders the Panel in `extra large` size, anchored to the far side (right in LTR mode).\r\n   * - Small (320-479): adapts to `PanelType.smallFluid` at this breakpoint\r\n   * - Medium (480-639): adapts to `PanelType.smallFixedFar` at this breakpoint\r\n   * - Large (640-1023): adapts to `PanelType.medium` at this breakpoint\r\n   * - XLarge (1024-1365): adapts to `PanelType.large` at this breakpoint\r\n   * - XXLarge (1366-1919): 176px fixed left margin, fluid width, 40px left/right padding\r\n   * - XXXLarge (1920-up): 176px fixed left margin, fluid width, 40px left/right padding\r\n   */\r\n  extraLarge = 6,\r\n\r\n  /**\r\n   * Renders the Panel in `custom` size using `customWidth`, anchored to the far side (right in LTR mode).\r\n   * - Has a fixed width provided by the `customWidth` prop\r\n   * - When screen width reaches the `customWidth` value it will behave like a fluid width Panel\r\n   * taking up 100% of the viewport width\r\n   */\r\n  custom = 7,\r\n\r\n  /**\r\n   * Renders the Panel in `custom` size using `customWidth`, anchored to the near side (left in LTR mode).\r\n   * - Has a fixed width provided by the `customWidth` prop\r\n   * - When screen width reaches the `customWidth` value it will behave like a fluid width Panel\r\n   * taking up 100% of the viewport width\r\n   */\r\n  customNear = 8\r\n}\r\n\r\n/**\r\n * {@docCategory Panel}\r\n */\r\nexport interface IPanelStyleProps {\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Accept custom classNames\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Is Panel open\r\n   */\r\n  isOpen?: boolean;\r\n\r\n  /**\r\n   * Is animation currently running\r\n   */\r\n  isAnimating?: boolean;\r\n\r\n  /**\r\n   * Is panel on right side\r\n   */\r\n  isOnRightSide?: boolean;\r\n\r\n  /**\r\n   * Is panel hidden on dismiss\r\n   */\r\n  isHiddenOnDismiss?: boolean;\r\n\r\n  /**\r\n   * Classname for FocusTrapZone element\r\n   */\r\n  focusTrapZoneClassName?: string;\r\n\r\n  /**\r\n   * Determines if content should stretch to fill available space putting footer at the bottom of the page\r\n   */\r\n  isFooterAtBottom?: boolean;\r\n\r\n  /**\r\n   * Based on state value setting footer to sticky or not\r\n   */\r\n  isFooterSticky?: boolean;\r\n\r\n  /**\r\n   * Panel has close button\r\n   */\r\n  hasCloseButton?: boolean;\r\n\r\n  /**\r\n   * Type of the panel.\r\n   */\r\n  type?: PanelType;\r\n\r\n  /**\r\n   * Optional parameter to provider the class name for header text\r\n   */\r\n  headerClassName?: string;\r\n}\r\n\r\n// TODO -Issue #5689: Comment in once Button is converted to mergeStyles\r\n// export interface IPanelSubComponentStyles {\r\n//   /**\r\n//    * Styling for Icon child component.\r\n//    */\r\n//   // TODO: this should be the interface once we're on TS 2.9.2 but otherwise causes errors in 2.8.4\r\n//   // button: IStyleFunctionOrObject<IButtonStyleProps, IButtonStyles>;\r\n//   button: IStyleFunctionOrObject<any, any>;\r\n// }\r\n\r\n/**\r\n * {@docCategory Panel}\r\n */\r\nexport interface IPanelStyles {\r\n  /**\r\n   * Style for the root element.\r\n   */\r\n  root: IStyle;\r\n\r\n  /**\r\n   * Style for the overlay element.\r\n   */\r\n  overlay: IStyle;\r\n\r\n  /**\r\n   * Style for the hidden element.\r\n   */\r\n  hiddenPanel: IStyle;\r\n\r\n  /**\r\n   * Style for the main section element.\r\n   */\r\n  main: IStyle;\r\n\r\n  /**\r\n   * Style for the navigation container element.\r\n   */\r\n  commands: IStyle;\r\n\r\n  /**\r\n   * Style for the Body and Footer container element.\r\n   */\r\n  contentInner: IStyle;\r\n\r\n  /**\r\n   * Style for the scrollable content area container element.\r\n   */\r\n  scrollableContent: IStyle;\r\n\r\n  /**\r\n   * Style for the close button container element.\r\n   */\r\n  navigation: IStyle;\r\n\r\n  /**\r\n   * Style for the close button IconButton element.\r\n   */\r\n  closeButton: IStyle;\r\n\r\n  /**\r\n   * Style for the header container div element.\r\n   */\r\n  header: IStyle;\r\n\r\n  /**\r\n   * Style for the header inner p element.\r\n   */\r\n  headerText: IStyle;\r\n\r\n  /**\r\n   * Style for the body div element.\r\n   */\r\n  content: IStyle;\r\n\r\n  /**\r\n   * Style for the footer div element.\r\n   */\r\n  footer: IStyle;\r\n\r\n  /**\r\n   * Style for the inner footer div element.\r\n   */\r\n  footerInner: IStyle;\r\n\r\n  // TODO -Issue #5689: Comment in once Button is converted to mergeStyles\r\n  /**\r\n   * Styling for subcomponents.\r\n   */\r\n  // subComponentStyles: IPanelSubComponentStyles;\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction, getNativeProps, divProperties, enableBodyScroll, disableBodyScroll } from '../../Utilities';\r\nimport { IOverlayProps, IOverlayStyleProps, IOverlayStyles } from './Overlay.types';\r\n\r\nconst getClassNames = classNamesFunction<IOverlayStyleProps, IOverlayStyles>();\r\n\r\nexport class OverlayBase extends BaseComponent<IOverlayProps, {}> {\r\n  public componentDidMount(): void {\r\n    disableBodyScroll();\r\n  }\r\n\r\n  public componentWillUnmount(): void {\r\n    enableBodyScroll();\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { isDarkThemed: isDark, className, theme, styles } = this.props;\r\n\r\n    const divProps = getNativeProps(this.props, divProperties);\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      isDark\r\n    });\r\n\r\n    return <div {...divProps} className={classNames.root} />;\r\n  }\r\n}\r\n","import { IOverlayStyleProps, IOverlayStyles } from './Overlay.types';\r\nimport { HighContrastSelector, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Overlay',\r\n  rootDark: 'ms-Overlay--dark'\r\n};\r\n\r\nexport const getStyles = (props: IOverlayStyleProps): IOverlayStyles => {\r\n  const { className, theme, isNone, isDark } = props;\r\n\r\n  const { palette } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        backgroundColor: palette.whiteTranslucent40,\r\n        top: 0,\r\n        right: 0,\r\n        bottom: 0,\r\n        left: 0,\r\n        position: 'absolute',\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            border: '1px solid WindowText',\r\n            opacity: 0\r\n          }\r\n        }\r\n      },\r\n\r\n      isNone && {\r\n        visibility: 'hidden'\r\n      },\r\n\r\n      isDark && [\r\n        classNames.rootDark,\r\n        {\r\n          backgroundColor: palette.blackTranslucent40\r\n        }\r\n      ],\r\n\r\n      className\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IOverlayProps, IOverlayStyleProps, IOverlayStyles } from './Overlay.types';\r\nimport { OverlayBase } from './Overlay.base';\r\nimport { getStyles } from './Overlay.styles';\r\n\r\nexport const Overlay: React.StatelessComponent<IOverlayProps> = styled<IOverlayProps, IOverlayStyleProps, IOverlayStyles>(\r\n  OverlayBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Overlay'\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { IconButton } from '../../Button';\r\nimport { Layer } from '../../Layer';\r\nimport { Overlay } from '../../Overlay';\r\nimport { Popup } from '../../Popup';\r\nimport { getTheme, IconFontSizes, IProcessedStyleSet } from '../../Styling';\r\nimport {\r\n  allowScrollOnElement,\r\n  BaseComponent,\r\n  classNamesFunction,\r\n  divProperties,\r\n  elementContains,\r\n  getId,\r\n  getNativeProps,\r\n  getRTL\r\n} from '../../Utilities';\r\nimport { FocusTrapZone } from '../FocusTrapZone/index';\r\nimport { IPanel, IPanelProps, IPanelStyleProps, IPanelStyles, PanelType } from './Panel.types';\r\n\r\nconst getClassNames = classNamesFunction<IPanelStyleProps, IPanelStyles>();\r\n\r\nexport interface IPanelState {\r\n  isFooterSticky?: boolean;\r\n  isAnimating?: boolean;\r\n  id?: string;\r\n}\r\n\r\nexport class PanelBase extends BaseComponent<IPanelProps, IPanelState> implements IPanel {\r\n  public static defaultProps: IPanelProps = {\r\n    isHiddenOnDismiss: false,\r\n    isOpen: false,\r\n    isBlocking: true,\r\n    hasCloseButton: true,\r\n    type: PanelType.smallFixedFar\r\n  };\r\n\r\n  private _panel = React.createRef<HTMLDivElement>();\r\n  private _classNames: IProcessedStyleSet<IPanelStyles>;\r\n  private _scrollableContent: HTMLDivElement | null;\r\n  private _isOpen: boolean;\r\n\r\n  constructor(props: IPanelProps) {\r\n    super(props);\r\n\r\n    this._warnDeprecations({\r\n      ignoreExternalFocusing: 'focusTrapZoneProps',\r\n      forceFocusInsideTrap: 'focusTrapZoneProps',\r\n      firstFocusableSelector: 'focusTrapZoneProps'\r\n    });\r\n    this._isOpen = !!props.isOpen;\r\n\r\n    this.state = {\r\n      isFooterSticky: false,\r\n      isAnimating: false,\r\n      id: getId('Panel')\r\n    };\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    this._events.on(window, 'resize', this._updateFooterPosition);\r\n\r\n    if (this._shouldListenForOuterClick(this.props)) {\r\n      this._events.on(document.body, 'mousedown', this._dismissOnOuterClick, true);\r\n    }\r\n\r\n    if (this.props.isOpen) {\r\n      this.open();\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(previousProps: IPanelProps): void {\r\n    const shouldListenOnOuterClick = this._shouldListenForOuterClick(this.props);\r\n    const previousShouldListenOnOuterClick = this._shouldListenForOuterClick(previousProps);\r\n\r\n    if (shouldListenOnOuterClick && !previousShouldListenOnOuterClick) {\r\n      this._events.on(document.body, 'mousedown', this._dismissOnOuterClick, true);\r\n    } else if (!shouldListenOnOuterClick && previousShouldListenOnOuterClick) {\r\n      this._events.off(document.body, 'mousedown', this._dismissOnOuterClick, true);\r\n    }\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IPanelProps): void {\r\n    if (newProps.isOpen !== this._isOpen) {\r\n      if (newProps.isOpen) {\r\n        this.open();\r\n      } else {\r\n        this.dismiss();\r\n      }\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    const {\r\n      className = '',\r\n      elementToFocusOnDismiss,\r\n      firstFocusableSelector,\r\n      focusTrapZoneProps,\r\n      forceFocusInsideTrap,\r\n      hasCloseButton,\r\n      headerText,\r\n      headerClassName = '',\r\n      ignoreExternalFocusing,\r\n      isBlocking,\r\n      isFooterAtBottom,\r\n      isLightDismiss,\r\n      isHiddenOnDismiss,\r\n      layerProps,\r\n      type,\r\n      styles,\r\n      theme,\r\n      customWidth,\r\n      onLightDismissClick = this._onPanelClick,\r\n      onRenderNavigation = this._onRenderNavigation,\r\n      onRenderHeader = this._onRenderHeader,\r\n      onRenderBody = this._onRenderBody,\r\n      onRenderFooter = this._onRenderFooter\r\n    } = this.props;\r\n    const { isFooterSticky, isAnimating, id } = this.state;\r\n    const isLeft = type === PanelType.smallFixedNear || type === PanelType.customNear ? true : false;\r\n    const isRTL = getRTL();\r\n    const isOnRightSide = isRTL ? isLeft : !isLeft;\r\n    const headerTextId = headerText && id + '-headerText';\r\n    const customWidthStyles = type === PanelType.custom || type === PanelType.customNear ? { width: customWidth } : {};\r\n    const nativeProps = getNativeProps(this.props, divProperties);\r\n\r\n    const isOpen = this._isOpen;\r\n\r\n    if (!isOpen && !isAnimating && !isHiddenOnDismiss) {\r\n      return null;\r\n    }\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      focusTrapZoneClassName: focusTrapZoneProps ? focusTrapZoneProps.className : undefined,\r\n      hasCloseButton,\r\n      headerClassName,\r\n      isAnimating,\r\n      isFooterAtBottom,\r\n      isFooterSticky,\r\n      isOnRightSide,\r\n      isOpen,\r\n      isHiddenOnDismiss,\r\n      type\r\n    });\r\n\r\n    const { _classNames } = this;\r\n\r\n    let overlay;\r\n    if (isBlocking && isOpen) {\r\n      overlay = <Overlay className={_classNames.overlay} isDarkThemed={false} onClick={isLightDismiss ? onLightDismissClick : undefined} />;\r\n    }\r\n\r\n    const header = onRenderHeader(this.props, this._onRenderHeader, headerTextId);\r\n\r\n    return (\r\n      <Layer {...layerProps}>\r\n        <Popup\r\n          role=\"dialog\"\r\n          aria-modal=\"true\"\r\n          ariaLabelledBy={header ? headerTextId : undefined}\r\n          onDismiss={this.dismiss}\r\n          className={_classNames.hiddenPanel}\r\n        >\r\n          <div aria-hidden={!isOpen && isAnimating} {...nativeProps} ref={this._panel} className={_classNames.root}>\r\n            {overlay}\r\n            <FocusTrapZone\r\n              ignoreExternalFocusing={ignoreExternalFocusing}\r\n              forceFocusInsideTrap={!isBlocking || (isHiddenOnDismiss && !isOpen) ? false : forceFocusInsideTrap}\r\n              firstFocusableSelector={firstFocusableSelector}\r\n              isClickableOutsideFocusTrap={true}\r\n              {...focusTrapZoneProps}\r\n              className={_classNames.main}\r\n              style={customWidthStyles}\r\n              elementToFocusOnDismiss={elementToFocusOnDismiss}\r\n            >\r\n              <div className={_classNames.commands} data-is-visible={true}>\r\n                {onRenderNavigation(this.props, this._onRenderNavigation)}\r\n              </div>\r\n              <div className={_classNames.contentInner}>\r\n                {header}\r\n                <div ref={this._allowScrollOnPanel} className={_classNames.scrollableContent} data-is-scrollable={true}>\r\n                  {onRenderBody(this.props, this._onRenderBody)}\r\n                </div>\r\n                {onRenderFooter(this.props, this._onRenderFooter)}\r\n              </div>\r\n            </FocusTrapZone>\r\n          </div>\r\n        </Popup>\r\n      </Layer>\r\n    );\r\n  }\r\n\r\n  public open() {\r\n    if (!this._isOpen) {\r\n      this._isOpen = true;\r\n      this.setState(\r\n        {\r\n          isAnimating: true\r\n        },\r\n        () => {\r\n          this._async.setTimeout(this._onTransitionComplete, 200);\r\n        }\r\n      );\r\n\r\n      if (this.props.onOpen) {\r\n        this.props.onOpen();\r\n      }\r\n    }\r\n  }\r\n\r\n  public dismiss = (ev?: React.SyntheticEvent<HTMLElement>): void => {\r\n    if (this._isOpen) {\r\n      this._isOpen = false;\r\n      if (this.props.onDismiss) {\r\n        this.props.onDismiss(ev);\r\n      }\r\n\r\n      if (!ev || (ev && !ev.defaultPrevented)) {\r\n        this.setState(\r\n          {\r\n            isAnimating: true\r\n          },\r\n          () => {\r\n            this._async.setTimeout(this._onTransitionComplete, 200);\r\n          }\r\n        );\r\n      }\r\n    }\r\n  };\r\n\r\n  // Allow the user to scroll within the panel but not on the body\r\n  private _allowScrollOnPanel = (elt: HTMLDivElement | null): void => {\r\n    if (elt) {\r\n      allowScrollOnElement(elt, this._events);\r\n    } else {\r\n      this._events.off(this._scrollableContent);\r\n    }\r\n    this._scrollableContent = elt;\r\n  };\r\n\r\n  private _shouldListenForOuterClick(props: IPanelProps): boolean {\r\n    return !!props.isBlocking && !!props.isOpen;\r\n  }\r\n\r\n  private _onRenderNavigation = (props: IPanelProps): JSX.Element | null => {\r\n    if (!this.props.onRenderNavigationContent && !this.props.onRenderNavigation && !this.props.hasCloseButton) {\r\n      return null;\r\n    }\r\n    const { onRenderNavigationContent = this._onRenderNavigationContent } = this.props;\r\n    return <div className={this._classNames.navigation}>{onRenderNavigationContent(props, this._onRenderNavigationContent)}</div>;\r\n  };\r\n\r\n  private _onRenderNavigationContent = (props: IPanelProps): JSX.Element | null => {\r\n    const { closeButtonAriaLabel, hasCloseButton } = props;\r\n    const theme = getTheme();\r\n    if (hasCloseButton) {\r\n      // TODO -Issue #5689: Comment in once Button is converted to mergeStyles\r\n      // const iconButtonStyles = this._classNames.subComponentStyles\r\n      // ? (this._classNames.subComponentStyles.iconButton as IStyleFunctionOrObject<IButtonStyleProps, IButtonStyles>)\r\n      // : undefined;\r\n      return (\r\n        <IconButton\r\n          // TODO -Issue #5689: Comment in once Button is converted to mergeStyles\r\n          // className={iconButtonStyles}\r\n          styles={{\r\n            root: {\r\n              height: 'auto',\r\n              width: '44px',\r\n              color: theme.palette.neutralSecondary,\r\n              fontSize: IconFontSizes.large\r\n            },\r\n            rootHovered: {\r\n              color: theme.palette.neutralPrimary\r\n            }\r\n          }}\r\n          className={this._classNames.closeButton}\r\n          onClick={this._onPanelClick}\r\n          ariaLabel={closeButtonAriaLabel}\r\n          data-is-visible={true}\r\n          iconProps={{ iconName: 'Cancel' }}\r\n        />\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n\r\n  private _onRenderHeader = (\r\n    props: IPanelProps,\r\n    defaultRender?: (props?: IPanelProps) => JSX.Element | null,\r\n    headerTextId?: string | undefined\r\n  ): JSX.Element | null => {\r\n    const { headerText } = props;\r\n\r\n    if (headerText) {\r\n      return (\r\n        <div className={this._classNames.header}>\r\n          <p className={this._classNames.headerText} id={headerTextId} role=\"heading\" aria-level={2}>\r\n            {headerText}\r\n          </p>\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n\r\n  private _onRenderBody = (props: IPanelProps): JSX.Element => {\r\n    return <div className={this._classNames.content}>{props.children}</div>;\r\n  };\r\n\r\n  private _onRenderFooter = (props: IPanelProps): JSX.Element | null => {\r\n    const { onRenderFooterContent = null } = this.props;\r\n    if (onRenderFooterContent) {\r\n      return (\r\n        <div className={this._classNames.footer}>\r\n          <div className={this._classNames.footerInner}>{onRenderFooterContent()}</div>\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n\r\n  private _updateFooterPosition(): void {\r\n    const scrollableContent = this._scrollableContent;\r\n    if (scrollableContent) {\r\n      const height = scrollableContent.clientHeight;\r\n      const innerHeight = scrollableContent.scrollHeight;\r\n\r\n      this.setState({\r\n        isFooterSticky: height < innerHeight ? true : false\r\n      });\r\n    }\r\n  }\r\n\r\n  private _dismissOnOuterClick(ev: any): void {\r\n    const panel = this._panel.current;\r\n    if (this._isOpen && panel) {\r\n      if (!elementContains(panel, ev.target)) {\r\n        if (this.props.onOuterClick) {\r\n          this.props.onOuterClick();\r\n          ev.preventDefault();\r\n        } else {\r\n          this.dismiss();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private _onPanelClick = (ev?: any): void => {\r\n    this.dismiss(ev);\r\n  };\r\n\r\n  private _onTransitionComplete = (): void => {\r\n    this._updateFooterPosition();\r\n    this.setState({\r\n      isAnimating: false\r\n    });\r\n\r\n    if (this._isOpen && this.props.onOpened) {\r\n      this.props.onOpened();\r\n    }\r\n\r\n    if (!this._isOpen && this.props.onDismissed) {\r\n      this.props.onDismissed();\r\n    }\r\n  };\r\n}\r\n","/**\r\n * The days of the week\r\n */\r\nexport enum DayOfWeek {\r\n  Sunday = 0,\r\n  Monday = 1,\r\n  Tuesday = 2,\r\n  Wednesday = 3,\r\n  Thursday = 4,\r\n  Friday = 5,\r\n  Saturday = 6\r\n}\r\n\r\n/**\r\n * The months\r\n */\r\nexport enum MonthOfYear {\r\n  January = 0,\r\n  February = 1,\r\n  March = 2,\r\n  April = 3,\r\n  May = 4,\r\n  June = 5,\r\n  July = 6,\r\n  August = 7,\r\n  September = 8,\r\n  October = 9,\r\n  November = 10,\r\n  December = 11\r\n}\r\n\r\n/**\r\n * First week of the year settings types\r\n */\r\nexport enum FirstWeekOfYear {\r\n  FirstDay = 0,\r\n  FirstFullWeek = 1,\r\n  FirstFourDayWeek = 2\r\n}\r\n\r\n/**\r\n * The supported date range types\r\n */\r\nexport enum DateRangeType {\r\n  Day = 0,\r\n  Week = 1,\r\n  Month = 2,\r\n  WorkWeek = 3\r\n}\r\n","import { IPanelStyleProps, IPanelStyles, PanelType } from './Panel.types';\r\nimport {\r\n  AnimationClassNames,\r\n  AnimationVariables,\r\n  DefaultFontStyles,\r\n  getGlobalClassNames,\r\n  HighContrastSelector,\r\n  ScreenWidthMinMedium,\r\n  ScreenWidthMinLarge,\r\n  ScreenWidthMinXLarge,\r\n  ScreenWidthMinXXLarge,\r\n  ScreenWidthMinUhfMobile,\r\n  IStyle\r\n} from '../../Styling';\r\n// TODO -Issue #5689: Comment in once Button is converted to mergeStyles\r\n// import { IStyleFunctionOrObject } from '../../Utilities';\r\n// import { IButtonStyles, IButtonStyleProps } from '../../Button';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Panel',\r\n  main: 'ms-Panel-main',\r\n  commands: 'ms-Panel-commands',\r\n  contentInner: 'ms-Panel-contentInner',\r\n  scrollableContent: 'ms-Panel-scrollableContent',\r\n  navigation: 'ms-Panel-navigation',\r\n  closeButton: 'ms-Panel-closeButton ms-PanelAction-close',\r\n  header: 'ms-Panel-header',\r\n  headerText: 'ms-Panel-headerText',\r\n  content: 'ms-Panel-content',\r\n  footer: 'ms-Panel-footer',\r\n  footerInner: 'ms-Panel-footerInner',\r\n  isOpen: 'is-open',\r\n  hasCloseButton: 'ms-Panel--hasCloseButton',\r\n  smallFluid: 'ms-Panel--smFluid',\r\n  smallFixedNear: 'ms-Panel--smLeft',\r\n  smallFixedFar: 'ms-Panel--sm',\r\n  medium: 'ms-Panel--md',\r\n  large: 'ms-Panel--lg',\r\n  largeFixed: 'ms-Panel--fixed',\r\n  extraLarge: 'ms-Panel--xl',\r\n  custom: 'ms-Panel--custom',\r\n  customNear: 'ms-Panel--customLeft'\r\n};\r\n\r\nconst panelWidth = {\r\n  full: '100%',\r\n  auto: 'auto',\r\n  xs: 272,\r\n  sm: 340,\r\n  md1: 592,\r\n  md2: 644,\r\n  lg: 940\r\n};\r\n\r\nconst panelMargin = {\r\n  auto: 'auto',\r\n  none: 0,\r\n  md: 48,\r\n  lg: 428,\r\n  xl: 176\r\n};\r\n\r\n// Following consts are used below in `getPanelBreakpoints()` function to provide\r\n// necessary fallbacks for different types of Panel in different breakpoints.\r\nconst smallPanelSelectors = {\r\n  [`@media (min-width: ${ScreenWidthMinMedium}px)`]: {\r\n    width: panelWidth.sm\r\n  }\r\n};\r\n\r\nconst mediumPanelSelectors = {\r\n  [`@media (min-width: ${ScreenWidthMinLarge}px)`]: {\r\n    width: panelWidth.md1\r\n  },\r\n  [`@media (min-width: ${ScreenWidthMinXLarge}px)`]: {\r\n    width: panelWidth.md2\r\n  }\r\n};\r\n\r\nconst largePanelSelectors = {\r\n  [`@media (min-width: ${ScreenWidthMinUhfMobile}px)`]: {\r\n    left: panelMargin.md,\r\n    width: panelWidth.auto\r\n  },\r\n  [`@media (min-width: ${ScreenWidthMinXXLarge}px)`]: {\r\n    left: panelMargin.lg\r\n  }\r\n};\r\n\r\nconst largeFixedPanelSelectors = {\r\n  [`@media (min-width: ${ScreenWidthMinXXLarge}px)`]: {\r\n    left: panelMargin.auto,\r\n    width: panelWidth.lg\r\n  }\r\n};\r\n\r\nconst extraLargePanelSelectors = {\r\n  [`@media (min-width: ${ScreenWidthMinXXLarge}px)`]: {\r\n    left: panelMargin.xl\r\n  }\r\n};\r\n\r\n// Make sure Panels have fallbacks to different breakpoints by reusing same selectors.\r\n// This is done in the effort to follow design redlines.\r\nconst getPanelBreakpoints = (type: PanelType): { [x: string]: IStyle } | undefined => {\r\n  let selectors;\r\n\r\n  // Panel types `smallFluid`, `smallFixedNear`, `custom` and `customNear`\r\n  // are not checked in here because they render the same in all the breakpoints\r\n  // and have the checks done separately in the `getStyles` function below.\r\n  switch (type) {\r\n    case PanelType.smallFixedFar:\r\n      selectors = {\r\n        ...smallPanelSelectors\r\n      };\r\n      break;\r\n    case PanelType.medium:\r\n      selectors = {\r\n        ...smallPanelSelectors,\r\n        ...mediumPanelSelectors\r\n      };\r\n      break;\r\n    case PanelType.large:\r\n      selectors = {\r\n        ...smallPanelSelectors,\r\n        ...mediumPanelSelectors,\r\n        ...largePanelSelectors\r\n      };\r\n      break;\r\n    case PanelType.largeFixed:\r\n      selectors = {\r\n        ...smallPanelSelectors,\r\n        ...mediumPanelSelectors,\r\n        ...largePanelSelectors,\r\n        ...largeFixedPanelSelectors\r\n      };\r\n      break;\r\n    case PanelType.extraLarge:\r\n      selectors = {\r\n        ...smallPanelSelectors,\r\n        ...mediumPanelSelectors,\r\n        ...largePanelSelectors,\r\n        ...extraLargePanelSelectors\r\n      };\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n\r\n  return selectors;\r\n};\r\n\r\nconst commandBarHeight = '44px';\r\n\r\nconst sharedPaddingStyles = {\r\n  paddingLeft: '16px',\r\n  paddingRight: '16px',\r\n  selectors: {\r\n    [`@media screen and (min-width: ${ScreenWidthMinLarge}px)`]: {\r\n      paddingLeft: '32px',\r\n      paddingRight: '32px'\r\n    },\r\n    [`@media screen and (min-width: ${ScreenWidthMinXXLarge}px)`]: {\r\n      paddingLeft: '40px',\r\n      paddingRight: '40px'\r\n    }\r\n  }\r\n};\r\n\r\n// // TODO -Issue #5689: Comment in once Button is converted to mergeStyles\r\n// function getIconButtonStyles(props: IPanelStyleProps): IStyleFunctionOrObject<IButtonStyleProps, IButtonStyles> {\r\n//   const { theme } = props;\r\n//   return () => ({\r\n//     root: {\r\n//       height: 'auto',\r\n//       width: '44px',\r\n//       color: theme.palette.neutralSecondary,\r\n//       fontSize: IconFontSizes.large\r\n//     },\r\n//     rootHovered: {\r\n//       color: theme.palette.neutralPrimary\r\n//     }\r\n//   });\r\n// }\r\n\r\nexport const getStyles = (props: IPanelStyleProps): IPanelStyles => {\r\n  const {\r\n    className,\r\n    focusTrapZoneClassName,\r\n    hasCloseButton,\r\n    headerClassName,\r\n    isAnimating,\r\n    isFooterAtBottom,\r\n    isFooterSticky,\r\n    isOnRightSide,\r\n    isOpen,\r\n    isHiddenOnDismiss,\r\n    theme,\r\n    type = PanelType.smallFixedFar\r\n  } = props;\r\n  const { palette } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n  const isCustomPanel = type === PanelType.custom || type === PanelType.customNear;\r\n  const windowHeight = typeof window !== 'undefined' ? window.innerHeight : '100%';\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      isOpen && classNames.isOpen,\r\n      hasCloseButton && classNames.hasCloseButton,\r\n      {\r\n        pointerEvents: 'none',\r\n        position: 'absolute',\r\n        top: 0,\r\n        left: 0,\r\n        right: 0,\r\n        bottom: 0\r\n      },\r\n      isCustomPanel && isOnRightSide && classNames.custom,\r\n      isCustomPanel && !isOnRightSide && classNames.customNear,\r\n      className\r\n    ],\r\n    overlay: [\r\n      {\r\n        pointerEvents: 'auto',\r\n        cursor: 'pointer'\r\n      },\r\n      isOpen && isAnimating && AnimationClassNames.fadeIn100,\r\n      !isOpen && isAnimating && AnimationClassNames.fadeOut100\r\n    ],\r\n    hiddenPanel: [\r\n      !isOpen &&\r\n        !isAnimating &&\r\n        isHiddenOnDismiss && {\r\n          visibility: 'hidden'\r\n        }\r\n    ],\r\n    main: [\r\n      classNames.main,\r\n      {\r\n        backgroundColor: palette.white,\r\n        boxShadow: '0px 0px 30px 0px rgba(0,0,0,0.2)',\r\n        pointerEvents: 'auto',\r\n        position: 'absolute',\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        overflowX: 'hidden',\r\n        overflowY: 'auto',\r\n        WebkitOverflowScrolling: 'touch',\r\n        maxHeight: '100%',\r\n        bottom: 0,\r\n        top: 0,\r\n        // (left, right, width) - Properties to be overridden depending on the type of the Panel and the screen breakpoint.\r\n        left: panelMargin.auto,\r\n        right: panelMargin.none,\r\n        width: panelWidth.full,\r\n        selectors: {\r\n          ['@supports (-webkit-overflow-scrolling: touch)']: {\r\n            maxHeight: windowHeight\r\n          },\r\n          [HighContrastSelector]: {\r\n            borderLeft: `3px solid ${palette.neutralLight}`,\r\n            borderRight: `3px solid ${palette.neutralLight}`\r\n          },\r\n          ...getPanelBreakpoints(type)\r\n        }\r\n      },\r\n      type === PanelType.smallFluid && {\r\n        left: panelMargin.none\r\n      },\r\n      type === PanelType.smallFixedNear && {\r\n        left: panelMargin.none,\r\n        right: panelMargin.auto,\r\n        width: panelWidth.xs\r\n      },\r\n      type === PanelType.customNear && {\r\n        right: 'auto',\r\n        left: 0\r\n      },\r\n      isCustomPanel && {\r\n        maxWidth: '100vw'\r\n      },\r\n      isFooterAtBottom && {\r\n        height: '100%',\r\n        selectors: {\r\n          ['@supports (-webkit-overflow-scrolling: touch)']: {\r\n            height: windowHeight\r\n          }\r\n        }\r\n      },\r\n      isOpen && isAnimating && !isOnRightSide && AnimationClassNames.slideRightIn40,\r\n      isOpen && isAnimating && isOnRightSide && AnimationClassNames.slideLeftIn40,\r\n      !isOpen && isAnimating && !isOnRightSide && AnimationClassNames.slideLeftOut40,\r\n      !isOpen && isAnimating && isOnRightSide && AnimationClassNames.slideRightOut40,\r\n      focusTrapZoneClassName\r\n    ],\r\n    commands: [classNames.commands],\r\n    navigation: [\r\n      classNames.navigation,\r\n      {\r\n        padding: '0 5px',\r\n        height: commandBarHeight,\r\n        display: 'flex',\r\n        justifyContent: 'flex-end'\r\n      }\r\n    ],\r\n    closeButton: [classNames.closeButton],\r\n    contentInner: [\r\n      classNames.contentInner,\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        flexGrow: 1,\r\n        maxHeight: '100%',\r\n        overflowY: 'hidden',\r\n        selectors: {\r\n          ['@supports (-webkit-overflow-scrolling: touch)']: {\r\n            maxHeight: windowHeight\r\n          }\r\n        }\r\n      },\r\n      isFooterAtBottom && {\r\n        height: '100%',\r\n        selectors: {\r\n          ['@supports (-webkit-overflow-scrolling: touch)']: {\r\n            height: windowHeight\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    header: [\r\n      classNames.header,\r\n      sharedPaddingStyles,\r\n      {\r\n        margin: '14px 0',\r\n        // Ensure that title doesn't shrink if screen is too small\r\n        flexGrow: 0,\r\n        selectors: {\r\n          [`@media (min-width: ${ScreenWidthMinXLarge}px)`]: {\r\n            marginTop: '30px'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    headerText: [\r\n      classNames.headerText,\r\n      DefaultFontStyles.xLarge,\r\n      {\r\n        color: palette.neutralPrimary,\r\n        lineHeight: '32px',\r\n        margin: 0\r\n      },\r\n      headerClassName\r\n    ],\r\n    scrollableContent: [\r\n      classNames.scrollableContent,\r\n      {\r\n        overflowY: 'auto',\r\n        height: '100%',\r\n        selectors: {\r\n          ['@supports (-webkit-overflow-scrolling: touch)']: {\r\n            height: windowHeight\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    content: [\r\n      classNames.content,\r\n      sharedPaddingStyles,\r\n      {\r\n        marginBottom: 0,\r\n        paddingBottom: 20\r\n      }\r\n    ],\r\n    footer: [\r\n      classNames.footer,\r\n      {\r\n        // Ensure that footer doesn't shrink if screen is too small\r\n        flexGrow: 0,\r\n        borderTop: '1px solid transparent',\r\n        transition: `opacity ${AnimationVariables.durationValue3} ${AnimationVariables.easeFunction2}`\r\n      },\r\n      isFooterSticky && {\r\n        background: palette.white,\r\n        borderTopColor: palette.neutralLight\r\n      }\r\n    ],\r\n    footerInner: [\r\n      classNames.footerInner,\r\n      sharedPaddingStyles,\r\n      {\r\n        paddingBottom: '20px',\r\n        paddingTop: '20px'\r\n      }\r\n    ]\r\n    // subComponentStyles: {\r\n    //   iconButton: getIconButtonStyles(props)\r\n    // }\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IPanelProps, IPanelStyleProps, IPanelStyles } from './Panel.types';\r\nimport { PanelBase } from './Panel.base';\r\nimport { getStyles } from './Panel.styles';\r\n\r\n/**\r\n * Panel description\r\n */\r\nexport const Panel: React.StatelessComponent<IPanelProps> = styled<IPanelProps, IPanelStyleProps, IPanelStyles>(\r\n  PanelBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Panel'\r\n  }\r\n);\r\n","declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): number;\r\n\r\nimport * as React from 'react';\r\nimport {\r\n  IStyleFunctionOrObject,\r\n  KeyCodes,\r\n  classNamesFunction,\r\n  divProperties,\r\n  findIndex,\r\n  getDocument,\r\n  getFirstFocusable,\r\n  getId,\r\n  getLastFocusable,\r\n  getNativeProps,\r\n  initializeComponentRef,\r\n  isIOS,\r\n  isMac,\r\n  mergeAriaAttributeValues,\r\n  safeRequestAnimationFrame,\r\n  warnDeprecations,\r\n  warnMutuallyExclusive\r\n} from '../../Utilities';\r\nimport { Callout } from '../../Callout';\r\nimport { Checkbox } from '../../Checkbox';\r\nimport { CommandButton } from '../../Button';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { DropdownMenuItemType, IDropdownOption, IDropdownProps, IDropdownStyleProps, IDropdownStyles, IDropdown } from './Dropdown.types';\r\nimport { DropdownSizePosCache } from './utilities/DropdownSizePosCache';\r\nimport { FocusZone, FocusZoneDirection } from '../../FocusZone';\r\nimport { ICalloutPositionedInfo, RectangleEdge } from '../../utilities/positioning';\r\nimport { Icon } from '../../Icon';\r\nimport { ILabelStyleProps, ILabelStyles, Label } from '../../Label';\r\nimport { IProcessedStyleSet } from '../../Styling';\r\nimport { IWithResponsiveModeState } from '../../utilities/decorators/withResponsiveMode';\r\nimport { KeytipData } from '../../KeytipData';\r\nimport { Panel, IPanelStyleProps, IPanelStyles } from '../../Panel';\r\nimport { ResponsiveMode, withResponsiveMode } from '../../utilities/decorators/withResponsiveMode';\r\nimport { SelectableOptionMenuItemType } from '../../utilities/selectableOption/SelectableOption.types';\r\n\r\nconst getClassNames = classNamesFunction<IDropdownStyleProps, IDropdownStyles>();\r\n\r\n/** Internal only props interface to support mixing in responsive mode */\r\nexport interface IDropdownInternalProps extends IDropdownProps, IWithResponsiveModeState {}\r\n\r\nexport interface IDropdownState {\r\n  isOpen: boolean;\r\n  selectedIndices: number[];\r\n  /** Whether the root dropdown element has focus. */\r\n  hasFocus: boolean;\r\n  calloutRenderEdge?: RectangleEdge;\r\n}\r\n\r\n@withResponsiveMode\r\nexport class DropdownBase extends React.Component<IDropdownInternalProps, IDropdownState> implements IDropdown {\r\n  public static defaultProps = {\r\n    options: [] as any[]\r\n  };\r\n\r\n  private _host = React.createRef<HTMLDivElement>();\r\n  private _focusZone = React.createRef<FocusZone>();\r\n  private _dropDown = React.createRef<HTMLDivElement>();\r\n  private _id: string;\r\n  private _isScrollIdle: boolean;\r\n  private readonly _scrollIdleDelay: number = 250 /* ms */;\r\n  private _scrollIdleTimeoutId: number | undefined;\r\n  /** True if the most recent keydown event was for alt (option) or meta (command). */\r\n  private _lastKeyDownWasAltOrMeta: boolean | undefined;\r\n  private _sizePosCache: DropdownSizePosCache = new DropdownSizePosCache();\r\n  private _classNames: IProcessedStyleSet<IDropdownStyles>;\r\n  private _requestAnimationFrame = safeRequestAnimationFrame(this);\r\n\r\n  /** Flag for when we get the first mouseMove */\r\n  private _gotMouseMove: boolean;\r\n\r\n  constructor(props: IDropdownProps) {\r\n    super(props);\r\n\r\n    initializeComponentRef(this);\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnDeprecations('Dropdown', props, {\r\n        isDisabled: 'disabled',\r\n        onChanged: 'onChange',\r\n        placeHolder: 'placeholder',\r\n        onRenderPlaceHolder: 'onRenderPlaceholder'\r\n      });\r\n\r\n      warnMutuallyExclusive('Dropdown', props, {\r\n        defaultSelectedKey: 'selectedKey',\r\n        defaultSelectedKeys: 'selectedKeys',\r\n        selectedKeys: 'selectedKey',\r\n        multiSelect: 'defaultSelectedKey',\r\n        selectedKey: 'multiSelect'\r\n      });\r\n    }\r\n\r\n    this._id = props.id || getId('Dropdown');\r\n    this._isScrollIdle = true;\r\n\r\n    let selectedIndices: number[];\r\n\r\n    if (this.props.multiSelect) {\r\n      const selectedKeys = props.defaultSelectedKeys !== undefined ? props.defaultSelectedKeys : props.selectedKeys;\r\n      selectedIndices = this._getSelectedIndexes(props.options, selectedKeys);\r\n    } else {\r\n      const selectedKey = props.defaultSelectedKey !== undefined ? props.defaultSelectedKey : props.selectedKey;\r\n      selectedIndices = this._getSelectedIndexes(props.options, selectedKey!);\r\n      this._sizePosCache.updateOptions(props.options);\r\n    }\r\n\r\n    this.state = {\r\n      isOpen: false,\r\n      selectedIndices,\r\n      hasFocus: false,\r\n      calloutRenderEdge: undefined\r\n    };\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    clearTimeout(this._scrollIdleTimeoutId);\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IDropdownProps): void {\r\n    // In controlled component usage where selectedKey is provided, update the selectedIndex\r\n    // state if the key or options change.\r\n    let selectedKeyProp: 'defaultSelectedKeys' | 'selectedKeys' | 'defaultSelectedKey' | 'selectedKey';\r\n\r\n    // this does a shallow compare (assumes options are pure), for the purposes of determining whether\r\n    // defaultSelectedKey/defaultSelectedKeys are respected.\r\n    const didOptionsChange = newProps.options !== this.props.options;\r\n\r\n    if (newProps.multiSelect) {\r\n      if (didOptionsChange && newProps.defaultSelectedKeys !== undefined) {\r\n        selectedKeyProp = 'defaultSelectedKeys';\r\n      } else {\r\n        selectedKeyProp = 'selectedKeys';\r\n      }\r\n    } else {\r\n      if (didOptionsChange && newProps.defaultSelectedKey !== undefined) {\r\n        selectedKeyProp = 'defaultSelectedKey';\r\n      } else {\r\n        selectedKeyProp = 'selectedKey';\r\n      }\r\n    }\r\n\r\n    if (newProps[selectedKeyProp] !== undefined && (newProps[selectedKeyProp] !== this.props[selectedKeyProp] || didOptionsChange)) {\r\n      this.setState({\r\n        selectedIndices: this._getSelectedIndexes(newProps.options, newProps[selectedKeyProp])\r\n      });\r\n    }\r\n\r\n    if (\r\n      newProps.options !== this.props.options && // preexisting code assumes purity of the options...\r\n      !newProps.multiSelect // only relevant in single selection\r\n    ) {\r\n      this._sizePosCache.updateOptions(newProps.options);\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDropdownProps, prevState: IDropdownState) {\r\n    if (prevState.isOpen === true && this.state.isOpen === false) {\r\n      this._gotMouseMove = false;\r\n\r\n      if (this._dropDown.current) {\r\n        this._dropDown.current.focus();\r\n      }\r\n\r\n      if (this.props.onDismiss) {\r\n        this.props.onDismiss();\r\n      }\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const id = this._id;\r\n\r\n    const props = this.props;\r\n    const {\r\n      className,\r\n      label,\r\n      options,\r\n      ariaLabel,\r\n      required,\r\n      errorMessage,\r\n      multiSelect,\r\n      keytipProps,\r\n      styles: propStyles,\r\n      theme,\r\n      panelProps,\r\n      calloutProps,\r\n      onRenderTitle = this._onRenderTitle,\r\n      onRenderContainer = this._onRenderContainer,\r\n      onRenderCaretDown = this._onRenderCaretDown\r\n    } = props;\r\n    const { isOpen, selectedIndices, hasFocus, calloutRenderEdge } = this.state;\r\n    const onRenderPlaceholder = props.onRenderPlaceholder || props.onRenderPlaceHolder || this._onRenderPlaceholder;\r\n\r\n    const selectedOptions = this._getAllSelectedOptions(options, selectedIndices);\r\n    const divProps = getNativeProps(props, divProperties);\r\n\r\n    const disabled = this._isDisabled();\r\n\r\n    const optionId = id + '-option';\r\n    const ariaAttrs =\r\n      multiSelect || disabled\r\n        ? {\r\n            role: undefined,\r\n            ariaActiveDescendant: undefined,\r\n            childRole: undefined,\r\n            ariaSetSize: undefined,\r\n            ariaPosInSet: undefined,\r\n            ariaSelected: undefined\r\n          }\r\n        : // single select\r\n          {\r\n            role: 'listbox',\r\n            ariaActiveDescendant:\r\n              isOpen && selectedIndices.length === 1 && selectedIndices[0] >= 0 ? this._id + '-list' + selectedIndices[0] : optionId,\r\n            childRole: 'option',\r\n            ariaSetSize: this._sizePosCache.optionSetSize,\r\n            ariaPosInSet: this._sizePosCache.positionInSet(selectedIndices[0]),\r\n            ariaSelected: selectedIndices[0] === undefined ? undefined : true\r\n          };\r\n\r\n    this._classNames = getClassNames(propStyles, {\r\n      theme,\r\n      className,\r\n      hasError: !!(errorMessage && errorMessage.length > 0),\r\n      isOpen,\r\n      required,\r\n      disabled,\r\n      isRenderingPlaceholder: !selectedOptions.length,\r\n      panelClassName: !!panelProps ? panelProps.className : undefined,\r\n      calloutClassName: !!calloutProps ? calloutProps.className : undefined,\r\n      calloutRenderEdge: calloutRenderEdge\r\n    });\r\n\r\n    const labelStyles = this._classNames.subComponentStyles\r\n      ? (this._classNames.subComponentStyles.label as IStyleFunctionOrObject<ILabelStyleProps, ILabelStyles>)\r\n      : undefined;\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        {label && (\r\n          <Label className={this._classNames.label} id={id + '-label'} htmlFor={id} required={required} styles={labelStyles}>\r\n            {label}\r\n          </Label>\r\n        )}\r\n        <KeytipData keytipProps={keytipProps} disabled={disabled}>\r\n          {(keytipAttributes: any): JSX.Element => (\r\n            <div\r\n              {...keytipAttributes}\r\n              data-is-focusable={!disabled}\r\n              ref={this._dropDown}\r\n              id={id}\r\n              tabIndex={disabled ? -1 : 0}\r\n              aria-expanded={isOpen ? 'true' : 'false'}\r\n              role={ariaAttrs.role}\r\n              aria-label={ariaLabel}\r\n              aria-labelledby={label && !ariaLabel ? id + '-label' : undefined}\r\n              aria-describedby={mergeAriaAttributeValues(optionId, keytipAttributes['aria-describedby'])}\r\n              aria-activedescendant={isOpen ? ariaAttrs.ariaActiveDescendant : undefined}\r\n              aria-required={required}\r\n              aria-disabled={disabled}\r\n              aria-owns={isOpen ? id + '-list' : undefined}\r\n              {...divProps}\r\n              className={this._classNames.dropdown}\r\n              onBlur={this._onDropdownBlur}\r\n              onKeyDown={this._onDropdownKeyDown}\r\n              onKeyUp={this._onDropdownKeyUp}\r\n              onClick={this._onDropdownClick}\r\n              onFocus={this._onFocus}\r\n            >\r\n              <span\r\n                id={optionId}\r\n                className={this._classNames.title}\r\n                aria-atomic={true}\r\n                role={ariaAttrs.childRole}\r\n                aria-live={!hasFocus || disabled || multiSelect || isOpen ? 'off' : 'assertive'}\r\n                aria-label={selectedOptions.length ? selectedOptions[0].text : this._placeholder}\r\n                aria-setsize={ariaAttrs.ariaSetSize}\r\n                aria-posinset={ariaAttrs.ariaPosInSet}\r\n                aria-selected={ariaAttrs.ariaSelected}\r\n              >\r\n                {// If option is selected render title, otherwise render the placeholder text\r\n                selectedOptions.length\r\n                  ? onRenderTitle(selectedOptions, this._onRenderTitle)\r\n                  : onRenderPlaceholder(props, this._onRenderPlaceholder)}\r\n              </span>\r\n              <span className={this._classNames.caretDownWrapper}>{onRenderCaretDown(props, this._onRenderCaretDown)}</span>\r\n            </div>\r\n          )}\r\n        </KeytipData>\r\n        {isOpen && onRenderContainer(props, this._onRenderContainer)}\r\n        {errorMessage && errorMessage.length > 0 && <div className={this._classNames.errorMessage}>{errorMessage}</div>}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus(shouldOpenOnFocus?: boolean): void {\r\n    if (this._dropDown.current && this._dropDown.current.tabIndex !== -1) {\r\n      this._dropDown.current.focus();\r\n\r\n      if (shouldOpenOnFocus) {\r\n        this.setState({\r\n          isOpen: true\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  public setSelectedIndex(event: React.FormEvent<HTMLDivElement>, index: number): void {\r\n    const { onChange, onChanged, options, selectedKey, selectedKeys, multiSelect, notifyOnReselect } = this.props;\r\n    const { selectedIndices = [] } = this.state;\r\n    const checked: boolean = selectedIndices ? selectedIndices.indexOf(index) > -1 : false;\r\n\r\n    index = Math.max(0, Math.min(options.length - 1, index));\r\n\r\n    if (!multiSelect && !notifyOnReselect && index === selectedIndices[0]) {\r\n      return;\r\n    } else if (!multiSelect && selectedKey === undefined) {\r\n      // Set the selected option if this is an uncontrolled component\r\n      this.setState({\r\n        selectedIndices: [index]\r\n      });\r\n    } else if (multiSelect && selectedKeys === undefined) {\r\n      const newIndexes = selectedIndices ? this._copyArray(selectedIndices) : [];\r\n      if (checked) {\r\n        const position = newIndexes.indexOf(index);\r\n        if (position > -1) {\r\n          // unchecked the current one\r\n          newIndexes.splice(position, 1);\r\n        }\r\n      } else {\r\n        // add the new selected index into the existing one\r\n        newIndexes.push(index);\r\n      }\r\n      this.setState({\r\n        selectedIndices: newIndexes\r\n      });\r\n    }\r\n\r\n    if (onChange) {\r\n      // for single-select, option passed in will always be selected.\r\n      // for multi-select, flip the checked value\r\n      const changedOpt = multiSelect ? { ...options[index], selected: !checked } : options[index];\r\n\r\n      onChange({ ...event, target: this._dropDown.current as EventTarget }, changedOpt, index);\r\n    }\r\n\r\n    if (onChanged) {\r\n      // for single-select, option passed in will always be selected.\r\n      // for multi-select, flip the checked value\r\n      const changedOpt = multiSelect ? { ...options[index], selected: !checked } : options[index];\r\n      onChanged(changedOpt, index);\r\n    }\r\n  }\r\n\r\n  /** Get either props.placeholder (new name) or props.placeHolder (old name) */\r\n  private get _placeholder(): string | undefined {\r\n    return this.props.placeholder || this.props.placeHolder;\r\n  }\r\n\r\n  private _copyArray(array: any[]): any[] {\r\n    const newArray = [];\r\n    for (const element of array) {\r\n      newArray.push(element);\r\n    }\r\n    return newArray;\r\n  }\r\n\r\n  /**\r\n   * Finds the next valid Dropdown option and sets the selected index to it.\r\n   * @param stepValue - Value of how many items the function should traverse.  Should be -1 or 1.\r\n   * @param index - Index of where the search should start\r\n   * @param selectedIndex - The selectedIndex Dropdown's state\r\n   * @returns The next valid dropdown option's index\r\n   */\r\n  private _moveIndex(event: React.FormEvent<HTMLDivElement>, stepValue: number, index: number, selectedIndex: number): number {\r\n    const { options } = this.props;\r\n    // Return selectedIndex if nothing has changed or options is empty\r\n    if (selectedIndex === index || options.length === 0) {\r\n      return selectedIndex;\r\n    }\r\n\r\n    // Set starting index to 0 if index is < 0\r\n    if (index < 0) {\r\n      index = 0;\r\n    }\r\n    // Set starting index to last option index if greater than options.length\r\n    if (index >= options.length) {\r\n      index = options.length - 1;\r\n    }\r\n    let stepCounter = 0;\r\n    // If current index is a header or divider, or disabled, increment by step\r\n    while (\r\n      options[index].itemType === DropdownMenuItemType.Header ||\r\n      options[index].itemType === DropdownMenuItemType.Divider ||\r\n      options[index].disabled\r\n    ) {\r\n      // If stepCounter exceeds length of options, then return selectedIndex (-1)\r\n      if (stepCounter >= options.length) {\r\n        return selectedIndex;\r\n      }\r\n      // If index + stepValue is out of bounds, wrap around\r\n      if (index + stepValue < 0) {\r\n        index = options.length;\r\n      } else if (index + stepValue >= options.length) {\r\n        index = -1;\r\n      }\r\n\r\n      index = index + stepValue;\r\n      stepCounter++;\r\n    }\r\n\r\n    this.setSelectedIndex(event, index);\r\n    return index;\r\n  }\r\n\r\n  /** Render text in dropdown input */\r\n  private _onRenderTitle = (items: IDropdownOption[]): JSX.Element => {\r\n    const { multiSelectDelimiter = ', ' } = this.props;\r\n\r\n    const displayTxt = items.map(i => i.text).join(multiSelectDelimiter);\r\n    return <span>{displayTxt}</span>;\r\n  };\r\n\r\n  /** Render placeholder text in dropdown input */\r\n  private _onRenderPlaceholder = (props: IDropdownProps): JSX.Element | null => {\r\n    if (!this._placeholder) {\r\n      return null;\r\n    }\r\n    return <span>{this._placeholder}</span>;\r\n  };\r\n\r\n  /** Render Callout or Panel container and pass in list */\r\n  private _onRenderContainer = (props: IDropdownProps): JSX.Element => {\r\n    const { responsiveMode, calloutProps, panelProps, dropdownWidth } = this.props;\r\n\r\n    const isSmall = responsiveMode! <= ResponsiveMode.medium;\r\n\r\n    const panelStyles = this._classNames.subComponentStyles\r\n      ? (this._classNames.subComponentStyles.panel as IStyleFunctionOrObject<IPanelStyleProps, IPanelStyles>)\r\n      : undefined;\r\n\r\n    return isSmall ? (\r\n      <Panel isOpen={true} isLightDismiss={true} onDismissed={this._onDismiss} hasCloseButton={false} styles={panelStyles} {...panelProps}>\r\n        {this._renderFocusableList(props)}\r\n      </Panel>\r\n    ) : (\r\n      <Callout\r\n        isBeakVisible={false}\r\n        gapSpace={0}\r\n        doNotLayer={false}\r\n        directionalHintFixed={false}\r\n        directionalHint={DirectionalHint.bottomLeftEdge}\r\n        {...calloutProps}\r\n        className={this._classNames.callout}\r\n        target={this._dropDown.current}\r\n        onDismiss={this._onDismiss}\r\n        onScroll={this._onScroll}\r\n        onPositioned={this._onPositioned}\r\n        calloutWidth={dropdownWidth || (this._dropDown.current ? this._dropDown.current.clientWidth : 0)}\r\n      >\r\n        {this._renderFocusableList(props)}\r\n      </Callout>\r\n    );\r\n  };\r\n\r\n  /** Render Caret Down Icon */\r\n  private _onRenderCaretDown = (props: IDropdownProps): JSX.Element => {\r\n    return <Icon className={this._classNames.caretDown} iconName=\"ChevronDown\" />;\r\n  };\r\n\r\n  /** Wrap item list in a FocusZone */\r\n  private _renderFocusableList(props: IDropdownProps): JSX.Element {\r\n    const { onRenderList = this._onRenderList, label } = props;\r\n    const id = this._id;\r\n\r\n    return (\r\n      <div\r\n        className={this._classNames.dropdownItemsWrapper}\r\n        onKeyDown={this._onZoneKeyDown}\r\n        onKeyUp={this._onZoneKeyUp}\r\n        ref={this._host}\r\n        tabIndex={0}\r\n      >\r\n        <FocusZone\r\n          ref={this._focusZone}\r\n          direction={FocusZoneDirection.vertical}\r\n          id={id + '-list'}\r\n          className={this._classNames.dropdownItems}\r\n          aria-labelledby={label ? id + '-label' : undefined}\r\n          role=\"listbox\"\r\n        >\r\n          {onRenderList(props, this._onRenderList)}\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  /** Render List of items */\r\n  private _onRenderList = (props: IDropdownProps): JSX.Element => {\r\n    const { onRenderItem = this._onRenderItem } = this.props;\r\n\r\n    return <>{this.props.options.map((item: any, index: number) => onRenderItem({ ...item, index }, this._onRenderItem))}</>;\r\n  };\r\n\r\n  private _onRenderItem = (item: IDropdownOption): JSX.Element | null => {\r\n    switch (item.itemType) {\r\n      case SelectableOptionMenuItemType.Divider:\r\n        return this._renderSeparator(item);\r\n      case SelectableOptionMenuItemType.Header:\r\n        return this._renderHeader(item);\r\n      default:\r\n        return this._renderOption(item);\r\n    }\r\n  };\r\n\r\n  private _renderSeparator(item: IDropdownOption): JSX.Element | null {\r\n    const { index, key } = item;\r\n    if (index! > 0) {\r\n      return <div role=\"separator\" key={key} className={this._classNames.dropdownDivider} />;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _renderHeader(item: IDropdownOption): JSX.Element {\r\n    const { onRenderOption = this._onRenderOption } = this.props;\r\n    const { key } = item;\r\n    return (\r\n      <div key={key} className={this._classNames.dropdownItemHeader}>\r\n        {onRenderOption(item, this._onRenderOption)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderOption = (item: IDropdownOption): JSX.Element => {\r\n    const { onRenderOption = this._onRenderOption } = this.props;\r\n    const { selectedIndices = [] } = this.state;\r\n    const id = this._id;\r\n    const isItemSelected = item.index !== undefined && selectedIndices ? selectedIndices.indexOf(item.index) > -1 : false;\r\n\r\n    // select the right className based on the combination of selected/disabled\r\n    const itemClassName =\r\n      isItemSelected && item.disabled === true // predicate: both selected and disabled\r\n        ? this._classNames.dropdownItemSelectedAndDisabled\r\n        : isItemSelected // predicate: selected only\r\n        ? this._classNames.dropdownItemSelected\r\n        : item.disabled === true // predicate: disabled only\r\n        ? this._classNames.dropdownItemDisabled\r\n        : this._classNames.dropdownItem;\r\n\r\n    return !this.props.multiSelect ? (\r\n      <CommandButton\r\n        id={id + '-list' + item.index}\r\n        key={item.key}\r\n        data-index={item.index}\r\n        data-is-focusable={!item.disabled}\r\n        disabled={item.disabled}\r\n        className={itemClassName}\r\n        onClick={this._onItemClick(item)}\r\n        onMouseEnter={this._onItemMouseEnter.bind(this, item)}\r\n        onMouseLeave={this._onMouseItemLeave.bind(this, item)}\r\n        onMouseMove={this._onItemMouseMove.bind(this, item)}\r\n        role=\"option\"\r\n        aria-selected={isItemSelected ? 'true' : 'false'}\r\n        ariaLabel={item.ariaLabel}\r\n        title={item.title ? item.title : item.text}\r\n      >\r\n        {onRenderOption(item, this._onRenderOption)}\r\n      </CommandButton>\r\n    ) : (\r\n      <Checkbox\r\n        id={id + '-list' + item.index}\r\n        key={item.key}\r\n        data-index={item.index}\r\n        data-is-focusable={!item.disabled}\r\n        disabled={item.disabled}\r\n        onChange={this._onItemClick(item)}\r\n        inputProps={{\r\n          onMouseEnter: this._onItemMouseEnter.bind(this, item),\r\n          onMouseLeave: this._onMouseItemLeave.bind(this, item),\r\n          onMouseMove: this._onItemMouseMove.bind(this, item)\r\n        }}\r\n        label={item.text}\r\n        title={item.title ? item.title : item.text}\r\n        onRenderLabel={this._onRenderLabel.bind(this, item)}\r\n        className={itemClassName}\r\n        role=\"option\"\r\n        aria-selected={isItemSelected ? 'true' : 'false'}\r\n        checked={isItemSelected}\r\n      />\r\n    );\r\n  };\r\n\r\n  /** Render content of item (i.e. text/icon inside of button) */\r\n  private _onRenderOption = (item: IDropdownOption): JSX.Element => {\r\n    return <span className={this._classNames.dropdownOptionText}>{item.text}</span>;\r\n  };\r\n\r\n  /** Render custom label for drop down item */\r\n  private _onRenderLabel = (item: IDropdownOption): JSX.Element | null => {\r\n    const { onRenderOption = this._onRenderOption } = this.props;\r\n    return onRenderOption(item, this._onRenderOption);\r\n  };\r\n\r\n  private _onPositioned = (positions?: ICalloutPositionedInfo): void => {\r\n    if (this._focusZone.current) {\r\n      // Focusing an element can trigger a reflow. Making this wait until there is an animation\r\n      // frame can improve perf significantly.\r\n      this._requestAnimationFrame(() => {\r\n        const selectedIndices = this.state.selectedIndices;\r\n        if (selectedIndices && selectedIndices[0] && !this.props.options[selectedIndices[0]].disabled) {\r\n          const element: HTMLElement = getDocument()!.querySelector(`#${this._id}-list${selectedIndices[0]}`) as HTMLElement;\r\n          this._focusZone.current!.focusElement(element);\r\n        } else {\r\n          this._focusZone.current!.focus();\r\n        }\r\n      });\r\n    }\r\n\r\n    if (!this.state.calloutRenderEdge || this.state.calloutRenderEdge !== positions!.targetEdge) {\r\n      this.setState({\r\n        calloutRenderEdge: positions!.targetEdge\r\n      });\r\n    }\r\n  };\r\n\r\n  private _onItemClick = (item: IDropdownOption): ((event: React.MouseEvent<HTMLDivElement>) => void) => {\r\n    return (event: React.MouseEvent<HTMLDivElement>): void => {\r\n      if (!item.disabled) {\r\n        this.setSelectedIndex(event, item.index!);\r\n        if (!this.props.multiSelect) {\r\n          // only close the callout when it's in single-select mode\r\n          this.setState({\r\n            isOpen: false\r\n          });\r\n        }\r\n      }\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Scroll handler for the callout to make sure the mouse events\r\n   * for updating focus are not interacting during scroll\r\n   */\r\n  private _onScroll = (): void => {\r\n    if (!this._isScrollIdle && this._scrollIdleTimeoutId !== undefined) {\r\n      clearTimeout(this._scrollIdleTimeoutId);\r\n      this._scrollIdleTimeoutId = undefined;\r\n    } else {\r\n      this._isScrollIdle = false;\r\n    }\r\n\r\n    this._scrollIdleTimeoutId = setTimeout(() => {\r\n      this._isScrollIdle = true;\r\n    }, this._scrollIdleDelay);\r\n  };\r\n\r\n  private _onItemMouseEnter(item: any, ev: React.MouseEvent<HTMLElement>): void {\r\n    if (this._shouldIgnoreMouseEvent()) {\r\n      return;\r\n    }\r\n\r\n    const targetElement = ev.currentTarget as HTMLElement;\r\n    targetElement.focus();\r\n  }\r\n\r\n  private _onItemMouseMove(item: any, ev: React.MouseEvent<HTMLElement>): void {\r\n    const targetElement = ev.currentTarget as HTMLElement;\r\n    this._gotMouseMove = true;\r\n\r\n    if (!this._isScrollIdle || document.activeElement === targetElement) {\r\n      return;\r\n    }\r\n\r\n    targetElement.focus();\r\n  }\r\n\r\n  private _onMouseItemLeave = (item: any, ev: React.MouseEvent<HTMLElement>): void => {\r\n    if (this._shouldIgnoreMouseEvent()) {\r\n      return;\r\n    }\r\n\r\n    /**\r\n     * IE11 focus() method forces parents to scroll to top of element.\r\n     * Edge and IE expose a setActive() function for focusable divs that\r\n     * sets the page focus but does not scroll the parent element.\r\n     */\r\n    if (this._host.current) {\r\n      if ((this._host.current as any).setActive) {\r\n        try {\r\n          (this._host.current as any).setActive();\r\n        } catch (e) {\r\n          /* no-op */\r\n        }\r\n      } else {\r\n        this._host.current.focus();\r\n      }\r\n    }\r\n  };\r\n\r\n  private _shouldIgnoreMouseEvent(): boolean {\r\n    return !this._isScrollIdle || !this._gotMouseMove;\r\n  }\r\n\r\n  private _onDismiss = (): void => {\r\n    this.setState({ isOpen: false });\r\n\r\n    if (this._dropDown.current) {\r\n      this._dropDown.current.focus();\r\n    }\r\n  };\r\n\r\n  /** Get all selected indexes for multi-select mode */\r\n  private _getSelectedIndexes(options: IDropdownOption[], selectedKey: string | number | string[] | number[] | null | undefined): number[] {\r\n    if (selectedKey === undefined) {\r\n      if (this.props.multiSelect) {\r\n        return this._getAllSelectedIndices(options);\r\n      }\r\n      const selectedIndex = this._getSelectedIndex(options, null);\r\n      return selectedIndex !== -1 ? [selectedIndex] : [];\r\n    } else if (!Array.isArray(selectedKey)) {\r\n      const selectedIndex = this._getSelectedIndex(options, selectedKey);\r\n      return selectedIndex !== -1 ? [selectedIndex] : [];\r\n    }\r\n\r\n    const selectedIndices: number[] = [];\r\n    for (const key of selectedKey) {\r\n      const selectedIndex = this._getSelectedIndex(options, key);\r\n      selectedIndex !== -1 && selectedIndices.push(selectedIndex);\r\n    }\r\n    return selectedIndices;\r\n  }\r\n\r\n  /** Get all selected options for multi-select mode */\r\n  private _getAllSelectedOptions(options: IDropdownOption[], selectedIndices: number[]): IDropdownOption[] {\r\n    const selectedOptions: IDropdownOption[] = [];\r\n    for (const index of selectedIndices) {\r\n      const option = options[index];\r\n\r\n      if (option) {\r\n        selectedOptions.push(option);\r\n      }\r\n    }\r\n\r\n    return selectedOptions;\r\n  }\r\n\r\n  private _getAllSelectedIndices(options: IDropdownOption[]): number[] {\r\n    return options.map((option: IDropdownOption, index: number) => (option.selected ? index : -1)).filter(index => index !== -1);\r\n  }\r\n\r\n  private _getSelectedIndex(options: IDropdownOption[], selectedKey: string | number | null): number {\r\n    return findIndex(options, option => {\r\n      // tslint:disable-next-line:triple-equals\r\n      if (selectedKey != null) {\r\n        return option.key === selectedKey;\r\n      } else {\r\n        return !!option.isSelected || !!option.selected;\r\n      }\r\n    });\r\n  }\r\n\r\n  private _onDropdownBlur = (ev: React.FocusEvent<HTMLDivElement>): void => {\r\n    // If Dropdown disabled do not proceed with this logic.\r\n    const disabled = this._isDisabled();\r\n    if (disabled) {\r\n      return;\r\n    }\r\n\r\n    // hasFocus tracks whether the root element has focus so always update the state.\r\n    this.setState({ hasFocus: false });\r\n\r\n    if (this.state.isOpen) {\r\n      // Do not onBlur when the callout is opened\r\n      return;\r\n    }\r\n    if (this.props.onBlur) {\r\n      this.props.onBlur(ev);\r\n    }\r\n  };\r\n\r\n  private _onDropdownKeyDown = (ev: React.KeyboardEvent<HTMLDivElement>): void => {\r\n    // If Dropdown disabled do not process any keyboard events.\r\n    const disabled = this._isDisabled();\r\n    if (disabled) {\r\n      return;\r\n    }\r\n\r\n    // Take note if we are processing an alt (option) or meta (command) keydown.\r\n    // See comment in _shouldHandleKeyUp for reasoning.\r\n    this._lastKeyDownWasAltOrMeta = this._isAltOrMeta(ev);\r\n\r\n    if (this.props.onKeyDown) {\r\n      this.props.onKeyDown(ev);\r\n      if (ev.defaultPrevented) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    let newIndex: number | undefined;\r\n    const selectedIndex = this.state.selectedIndices.length ? this.state.selectedIndices[0] : -1;\r\n    const containsExpandCollapseModifier = ev.altKey || ev.metaKey;\r\n    const isOpen = this.state.isOpen;\r\n\r\n    switch (ev.which) {\r\n      case KeyCodes.enter:\r\n        this.setState({\r\n          isOpen: !isOpen\r\n        });\r\n        break;\r\n\r\n      case KeyCodes.escape:\r\n        if (!isOpen) {\r\n          return;\r\n        }\r\n\r\n        this.setState({\r\n          isOpen: false\r\n        });\r\n        break;\r\n\r\n      case KeyCodes.up:\r\n        if (containsExpandCollapseModifier) {\r\n          if (isOpen) {\r\n            this.setState({ isOpen: false });\r\n            break;\r\n          }\r\n\r\n          return;\r\n        }\r\n        if (this.props.multiSelect) {\r\n          this.setState({ isOpen: true });\r\n        } else if (!this._isDisabled()) {\r\n          newIndex = this._moveIndex(ev, -1, selectedIndex - 1, selectedIndex);\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.down:\r\n        if (containsExpandCollapseModifier) {\r\n          ev.stopPropagation();\r\n          ev.preventDefault();\r\n        }\r\n        if ((containsExpandCollapseModifier && !isOpen) || this.props.multiSelect) {\r\n          this.setState({ isOpen: true });\r\n        } else if (!this._isDisabled()) {\r\n          newIndex = this._moveIndex(ev, 1, selectedIndex + 1, selectedIndex);\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.home:\r\n        if (!this.props.multiSelect) {\r\n          newIndex = this._moveIndex(ev, 1, 0, selectedIndex);\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.end:\r\n        if (!this.props.multiSelect) {\r\n          newIndex = this._moveIndex(ev, -1, this.props.options.length - 1, selectedIndex);\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.space:\r\n        // event handled in _onDropdownKeyUp\r\n        break;\r\n\r\n      default:\r\n        return;\r\n    }\r\n\r\n    if (newIndex !== selectedIndex) {\r\n      ev.stopPropagation();\r\n      ev.preventDefault();\r\n    }\r\n  };\r\n\r\n  private _onDropdownKeyUp = (ev: React.KeyboardEvent<HTMLDivElement>): void => {\r\n    // If Dropdown disabled do not process any keyboard events.\r\n    const disabled = this._isDisabled();\r\n    if (disabled) {\r\n      return;\r\n    }\r\n\r\n    const shouldHandleKey = this._shouldHandleKeyUp(ev);\r\n    const isOpen = this.state.isOpen;\r\n\r\n    if (this.props.onKeyUp) {\r\n      this.props.onKeyUp(ev);\r\n      if (ev.preventDefault) {\r\n        return;\r\n      }\r\n    }\r\n    switch (ev.which) {\r\n      case KeyCodes.space:\r\n        this.setState({\r\n          isOpen: !isOpen\r\n        });\r\n        break;\r\n\r\n      default:\r\n        if (shouldHandleKey && isOpen) {\r\n          this.setState({ isOpen: false });\r\n        }\r\n        return;\r\n    }\r\n\r\n    ev.stopPropagation();\r\n    ev.preventDefault();\r\n  };\r\n\r\n  /**\r\n   * Returns true if the key for the event is alt (Mac option) or meta (Mac command).\r\n   */\r\n  private _isAltOrMeta(ev: React.KeyboardEvent<HTMLElement>): boolean {\r\n    return ev.which === KeyCodes.alt || ev.key === 'Meta';\r\n  }\r\n\r\n  /**\r\n   * We close the menu on key up only if ALL of the following are true:\r\n   * - Most recent key down was alt or meta (command)\r\n   * - The alt/meta key down was NOT followed by some other key (such as down/up arrow to\r\n   *   expand/collapse the menu)\r\n   * - We're not on a Mac (or iOS)\r\n   *\r\n   * This is because on Windows, pressing alt moves focus to the application menu bar or similar,\r\n   * closing any open context menus. There is not a similar behavior on Macs.\r\n   */\r\n  private _shouldHandleKeyUp(ev: React.KeyboardEvent<HTMLElement>): boolean {\r\n    const keyPressIsAltOrMetaAlone = this._lastKeyDownWasAltOrMeta && this._isAltOrMeta(ev);\r\n    this._lastKeyDownWasAltOrMeta = false;\r\n    return !!keyPressIsAltOrMetaAlone && !(isMac() || isIOS());\r\n  }\r\n\r\n  private _onZoneKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    let elementToFocus;\r\n\r\n    // Take note if we are processing an alt (option) or meta (command) keydown.\r\n    // See comment in _shouldHandleKeyUp for reasoning.\r\n    this._lastKeyDownWasAltOrMeta = this._isAltOrMeta(ev);\r\n    const containsExpandCollapseModifier = ev.altKey || ev.metaKey;\r\n\r\n    switch (ev.which) {\r\n      case KeyCodes.up:\r\n        if (containsExpandCollapseModifier) {\r\n          this.setState({ isOpen: false });\r\n        } else {\r\n          if (this._host.current) {\r\n            elementToFocus = getLastFocusable(this._host.current, this._host.current.lastChild as HTMLElement, true);\r\n          }\r\n        }\r\n        break;\r\n\r\n      // All directional keystrokes should be canceled when the zone is rendered.\r\n      // This avoids the body scroll from reacting and thus dismissing the dropdown.\r\n      case KeyCodes.home:\r\n      case KeyCodes.end:\r\n      case KeyCodes.pageUp:\r\n      case KeyCodes.pageDown:\r\n        break;\r\n\r\n      case KeyCodes.down:\r\n        if (!containsExpandCollapseModifier && this._host.current) {\r\n          elementToFocus = getFirstFocusable(this._host.current, this._host.current.firstChild as HTMLElement, true);\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.escape:\r\n        this.setState({ isOpen: false });\r\n        break;\r\n\r\n      case KeyCodes.tab:\r\n        this.setState({ isOpen: false });\r\n        return;\r\n\r\n      default:\r\n        return;\r\n    }\r\n\r\n    if (elementToFocus) {\r\n      elementToFocus.focus();\r\n    }\r\n\r\n    ev.stopPropagation();\r\n    ev.preventDefault();\r\n  };\r\n\r\n  private _onZoneKeyUp = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    const shouldHandleKey = this._shouldHandleKeyUp(ev);\r\n\r\n    if (shouldHandleKey && this.state.isOpen) {\r\n      this.setState({ isOpen: false });\r\n      ev.preventDefault();\r\n    }\r\n  };\r\n\r\n  private _onDropdownClick = (ev: React.MouseEvent<HTMLDivElement>): void => {\r\n    if (this.props.onClick) {\r\n      this.props.onClick(ev);\r\n      if (ev.preventDefault) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    const { isOpen } = this.state;\r\n    const disabled = this._isDisabled();\r\n\r\n    if (!disabled) {\r\n      this.setState({\r\n        isOpen: !isOpen\r\n      });\r\n    }\r\n  };\r\n\r\n  private _onFocus = (ev: React.FocusEvent<HTMLDivElement>): void => {\r\n    const { isOpen, selectedIndices } = this.state;\r\n    const { multiSelect } = this.props;\r\n\r\n    const disabled = this._isDisabled();\r\n\r\n    if (!disabled) {\r\n      if (!isOpen && selectedIndices.length === 0 && !multiSelect) {\r\n        // Per aria\r\n        this._moveIndex(ev, 1, 0, -1);\r\n      }\r\n      if (this.props.onFocus) {\r\n        this.props.onFocus(ev);\r\n      }\r\n      this.setState({ hasFocus: true });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Because the isDisabled prop is deprecated, we have had to repeat this logic all over the place.\r\n   * This helper method avoids all the repetition.\r\n   */\r\n  private _isDisabled: () => boolean | undefined = () => {\r\n    let { disabled } = this.props;\r\n    const { isDisabled } = this.props;\r\n\r\n    // Remove this deprecation workaround at 1.0.0\r\n    if (isDisabled !== undefined) {\r\n      disabled = isDisabled;\r\n    }\r\n\r\n    return disabled;\r\n  };\r\n}\r\n","import { IDropdownStyles, IDropdownStyleProps } from './Dropdown.types';\r\nimport { IStyleFunction } from '../../Utilities';\r\nimport {\r\n  FontSizes,\r\n  FontWeights,\r\n  HighContrastSelector,\r\n  IRawStyle,\r\n  IStyle,\r\n  getGlobalClassNames,\r\n  normalize,\r\n  HighContrastSelectorWhite\r\n} from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Dropdown-container',\r\n  label: 'ms-Dropdown-label',\r\n  dropdown: 'ms-Dropdown',\r\n  title: 'ms-Dropdown-title',\r\n  caretDownWrapper: 'ms-Dropdown-caretDownWrapper',\r\n  caretDown: 'ms-Dropdown-caretDown',\r\n  callout: 'ms-Dropdown-callout',\r\n  panel: 'ms-Dropdown-panel',\r\n  dropdownItems: 'ms-Dropdown-items',\r\n  dropdownItem: 'ms-Dropdown-item',\r\n  dropdownDivider: 'ms-Dropdown-divider',\r\n  dropdownOptionText: 'ms-Dropdown-optionText',\r\n  dropdownItemHeader: 'ms-Dropdown-header',\r\n  titleIsPlaceHolder: 'ms-Dropdown-titleIsPlaceHolder',\r\n  titleHasError: 'ms-Dropdown-title--hasError'\r\n};\r\n\r\nconst DROPDOWN_HEIGHT = 32;\r\nconst DROPDOWN_ITEM_HEIGHT = 32;\r\n\r\nconst highContrastAdjustMixin = {\r\n  [`${HighContrastSelector}, ${HighContrastSelectorWhite.replace('@media ', '')}`]: {\r\n    MsHighContrastAdjust: 'none'\r\n  }\r\n};\r\n\r\nconst highContrastItemAndTitleStateMixin: IRawStyle = {\r\n  selectors: {\r\n    [HighContrastSelector]: {\r\n      backgroundColor: 'Highlight',\r\n      borderColor: 'Highlight',\r\n      color: 'HighlightText',\r\n      selectors: {\r\n        ':hover': {\r\n          color: 'HighlightText' // overrides the hover styling for buttons that are also selected\r\n        }\r\n      }\r\n    },\r\n    ...highContrastAdjustMixin\r\n  }\r\n};\r\n\r\nconst highContrastBorderState: IRawStyle = {\r\n  selectors: {\r\n    [HighContrastSelector]: {\r\n      borderColor: 'Highlight'\r\n    }\r\n  }\r\n};\r\n\r\nexport const getStyles: IStyleFunction<IDropdownStyleProps, IDropdownStyles> = props => {\r\n  const { theme, hasError, className, isOpen, disabled, required, isRenderingPlaceholder, panelClassName, calloutClassName } = props;\r\n\r\n  if (!theme) {\r\n    throw new Error('theme is undefined or null in base Dropdown getStyles function.');\r\n  }\r\n\r\n  const globalClassnames = getGlobalClassNames(GlobalClassNames, theme);\r\n  const { palette, semanticColors } = theme;\r\n\r\n  const rootHoverFocusActiveSelectorNeutralDarkMixin: IStyle = {\r\n    color: palette.neutralDark\r\n  };\r\n\r\n  const rootHoverFocusActiveSelectorBodySubtextMixin: IStyle = {\r\n    color: semanticColors.bodySubtext\r\n  };\r\n\r\n  const borderColorError: IStyle = {\r\n    borderColor: semanticColors.errorText\r\n  };\r\n\r\n  const dropdownItemStyle: IStyle = [\r\n    globalClassnames.dropdownItem,\r\n    {\r\n      backgroundColor: 'transparent',\r\n      boxSizing: 'border-box',\r\n      cursor: 'pointer',\r\n      display: 'block',\r\n      padding: '4px 16px',\r\n      width: '100%',\r\n      minHeight: DROPDOWN_ITEM_HEIGHT,\r\n      lineHeight: 20,\r\n      height: 'auto',\r\n      position: 'relative',\r\n      border: '1px solid transparent',\r\n      wordWrap: 'break-word',\r\n      overflowWrap: 'break-word',\r\n      textAlign: 'left'\r\n    }\r\n  ];\r\n\r\n  const dropdownItemSelected: IStyle = [\r\n    ...dropdownItemStyle,\r\n    {\r\n      backgroundColor: palette.neutralQuaternaryAlt,\r\n      color: palette.black\r\n    },\r\n    highContrastItemAndTitleStateMixin\r\n  ];\r\n\r\n  const dropdownItemDisabled: IStyle = [\r\n    ...dropdownItemStyle,\r\n    {\r\n      color: semanticColors.disabledText,\r\n      cursor: 'default'\r\n    }\r\n  ];\r\n\r\n  return {\r\n    root: globalClassnames.root,\r\n    label: globalClassnames.label,\r\n    dropdown: [\r\n      globalClassnames.dropdown,\r\n      normalize,\r\n      {\r\n        ...theme.fonts.medium,\r\n        color: palette.neutralPrimary,\r\n        position: 'relative',\r\n        outline: 0,\r\n        userSelect: 'none',\r\n        selectors: {\r\n          ['&:hover .' + globalClassnames.title]: [\r\n            !disabled && rootHoverFocusActiveSelectorNeutralDarkMixin,\r\n            { borderColor: palette.neutralDark },\r\n            highContrastBorderState\r\n          ],\r\n          ['&:focus .' + globalClassnames.title]: [\r\n            !disabled && rootHoverFocusActiveSelectorNeutralDarkMixin,\r\n            { borderColor: palette.themePrimary },\r\n            highContrastItemAndTitleStateMixin\r\n          ],\r\n          ['&:active .' + globalClassnames.title]: [\r\n            !disabled && rootHoverFocusActiveSelectorNeutralDarkMixin,\r\n            { borderColor: palette.themeDark },\r\n            highContrastBorderState\r\n          ],\r\n\r\n          ['&:hover .' + globalClassnames.caretDown]: !disabled && rootHoverFocusActiveSelectorNeutralDarkMixin,\r\n          ['&:focus .' + globalClassnames.caretDown]: [\r\n            !disabled && rootHoverFocusActiveSelectorNeutralDarkMixin,\r\n            { selectors: { [HighContrastSelector]: { color: 'HighlightText' }, ...highContrastAdjustMixin } }\r\n          ],\r\n          ['&:active .' + globalClassnames.caretDown]: !disabled && rootHoverFocusActiveSelectorNeutralDarkMixin,\r\n\r\n          ['&:hover .' + globalClassnames.titleIsPlaceHolder]: rootHoverFocusActiveSelectorBodySubtextMixin,\r\n          ['&:focus .' + globalClassnames.titleIsPlaceHolder]: rootHoverFocusActiveSelectorBodySubtextMixin,\r\n          ['&:active .' + globalClassnames.titleIsPlaceHolder]: rootHoverFocusActiveSelectorBodySubtextMixin,\r\n\r\n          ['&:hover .' + globalClassnames.titleHasError]: borderColorError,\r\n          ['&:active .' + globalClassnames.titleHasError]: borderColorError,\r\n          ['&:focus .' + globalClassnames.titleHasError]: borderColorError\r\n        }\r\n      },\r\n      className,\r\n      isOpen && 'is-open',\r\n      disabled && 'is-disabled',\r\n      required && 'is-required'\r\n    ],\r\n    title: [\r\n      globalClassnames.title,\r\n      normalize,\r\n      {\r\n        backgroundColor: semanticColors.inputBackground,\r\n        borderWidth: 1,\r\n        borderStyle: 'solid',\r\n        borderColor: semanticColors.inputBorder,\r\n        cursor: 'pointer',\r\n        display: 'block',\r\n        height: DROPDOWN_HEIGHT,\r\n        lineHeight: DROPDOWN_HEIGHT - 2,\r\n        padding: `0 ${DROPDOWN_HEIGHT}px 0 12px`,\r\n        position: 'relative',\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n        textOverflow: 'ellipsis'\r\n      },\r\n      isRenderingPlaceholder && [globalClassnames.titleIsPlaceHolder, { color: semanticColors.inputPlaceholderText }],\r\n      hasError && [globalClassnames.titleHasError, borderColorError],\r\n      disabled && {\r\n        backgroundColor: semanticColors.disabledBackground,\r\n        border: 'none',\r\n        color: semanticColors.disabledText,\r\n        cursor: 'default',\r\n        selectors: { [HighContrastSelector]: { border: '1px solid GrayText', color: 'GrayText' } }\r\n      }\r\n    ],\r\n    caretDownWrapper: [\r\n      globalClassnames.caretDownWrapper,\r\n      {\r\n        position: 'absolute',\r\n        top: 1,\r\n        right: 12,\r\n        height: DROPDOWN_HEIGHT,\r\n        lineHeight: DROPDOWN_HEIGHT - 2 // height minus the border\r\n      },\r\n      !disabled && {\r\n        cursor: 'pointer'\r\n      }\r\n    ],\r\n    caretDown: [\r\n      globalClassnames.caretDown,\r\n      { color: palette.neutralSecondary, fontSize: FontSizes.small, pointerEvents: 'none' },\r\n      disabled && { color: semanticColors.disabledText, selectors: { [HighContrastSelector]: { color: 'GrayText' } } }\r\n    ],\r\n    errorMessage: { color: semanticColors.errorText, ...theme.fonts.small, paddingTop: 5 },\r\n    callout: [\r\n      globalClassnames.callout,\r\n      {\r\n        boxShadow: '0 0 2px 0 rgba(0,0,0,0.2)',\r\n        border: `1px solid ${palette.neutralLight}`\r\n      },\r\n      calloutClassName\r\n    ],\r\n    dropdownItemsWrapper: { selectors: { '&:focus': { outline: 0 } } },\r\n    dropdownItems: [globalClassnames.dropdownItems, { display: 'block' }],\r\n    dropdownItem: [\r\n      ...dropdownItemStyle,\r\n      {\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderColor: 'Window'\r\n          },\r\n          '&:hover': {\r\n            color: 'inherit'\r\n          },\r\n          '&:focus': {\r\n            backgroundColor: semanticColors.listItemBackgroundHovered\r\n          },\r\n          '&:active': {\r\n            backgroundColor: semanticColors.listHeaderBackgroundHovered,\r\n            color: palette.black\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    dropdownItemSelected: dropdownItemSelected,\r\n    dropdownItemDisabled: dropdownItemDisabled,\r\n    dropdownItemSelectedAndDisabled: [dropdownItemSelected, dropdownItemDisabled, { backgroundColor: 'transparent' }],\r\n    dropdownDivider: [globalClassnames.dropdownDivider, { height: 1, backgroundColor: semanticColors.bodyDivider }],\r\n    dropdownOptionText: [\r\n      globalClassnames.dropdownOptionText,\r\n      {\r\n        overflow: 'hidden',\r\n        whiteSpace: 'nowrap',\r\n        textOverflow: 'ellipsis',\r\n        minWidth: 0,\r\n        maxWidth: '100%',\r\n        wordWrap: 'break-word',\r\n        overflowWrap: 'break-word',\r\n        margin: '1px'\r\n      }\r\n    ],\r\n    dropdownItemHeader: [\r\n      globalClassnames.dropdownItemHeader,\r\n      {\r\n        ...theme.fonts.medium,\r\n        fontWeight: FontWeights.semibold,\r\n        color: semanticColors.menuHeader,\r\n        background: 'none',\r\n        backgroundColor: 'transparent',\r\n        border: 'none',\r\n        height: DROPDOWN_ITEM_HEIGHT,\r\n        lineHeight: DROPDOWN_ITEM_HEIGHT,\r\n        cursor: 'default',\r\n        padding: '0px 16px',\r\n        userSelect: 'none',\r\n        textAlign: 'left'\r\n      }\r\n    ],\r\n    subComponentStyles: {\r\n      label: { root: { display: 'inline-block' } },\r\n      panel: {\r\n        root: [panelClassName],\r\n        main: {\r\n          // Force drop shadow even under medium breakpoint\r\n          boxShadow: '-30px 0px 30px -30px rgba(0,0,0,0.2)'\r\n        },\r\n        contentInner: { padding: '0 0 20px' }\r\n      }\r\n    }\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { DropdownBase } from './Dropdown.base';\r\nimport { getStyles } from './Dropdown.styles';\r\nimport { IDropdownProps, IDropdownStyleProps, IDropdownStyles } from './Dropdown.types';\r\n\r\nexport const Dropdown: React.StatelessComponent<IDropdownProps> = styled<IDropdownProps, IDropdownStyleProps, IDropdownStyles>(\r\n  DropdownBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Dropdown'\r\n  }\r\n);\r\n","/**\r\n * Common constants and methods\r\n */\r\nconst TimeConstants = {\r\n  MillisecondsInOneDay: 86400000,\r\n  MillisecondsIn1Sec: 1000,\r\n  MillisecondsIn1Min: 60000,\r\n  MillisecondsIn30Mins: 1800000,\r\n  MillisecondsIn1Hour: 3600000,\r\n  MinutesInOneDay: 1440,\r\n  MinutesInOneHour: 60,\r\n  DaysInOneWeek: 7,\r\n  MonthInOneYear: 12\r\n};\r\nexport default TimeConstants;\r\n","import { DayOfWeek, MonthOfYear, FirstWeekOfYear, DateRangeType } from '../dateValues/DateValues';\r\nimport TimeConstants from '../dateValues/TimeConstants';\r\nimport { assertNever } from '../../Utilities';\r\n\r\n/**\r\n * Returns a date offset from the given date by the specified number of days.\r\n * @param {Date} date - The origin date\r\n * @param {number} days - The number of days to offset. 'days' can be negative.\r\n * @return {Date} A new Date object offset from the origin date by the given number of days\r\n */\r\nexport function addDays(date: Date, days: number): Date {\r\n  const result = new Date(date.getTime());\r\n  result.setDate(result.getDate() + days);\r\n  return result;\r\n}\r\n\r\n/**\r\n * Returns a date offset from the given date by the specified number of weeks.\r\n * @param {Date} date - The origin date\r\n * @param {number} weeks - The number of weeks to offset. 'weeks' can be negative.\r\n * @return {Date} A new Date object offset from the origin date by the given number of weeks\r\n */\r\nexport function addWeeks(date: Date, weeks: number): Date {\r\n  return addDays(date, weeks * TimeConstants.DaysInOneWeek);\r\n}\r\n\r\n/**\r\n * Returns a date offset from the given date by the specified number of months.\r\n * The method tries to preserve the day-of-month; however, if the new month does not have enough days\r\n * to contain the original day-of-month, we'll use the last day of the new month.\r\n * @param {Date} date - The origin date\r\n * @param {number} months - The number of months to offset. 'months' can be negative.\r\n * @return {Date} A new Date object offset from the origin date by the given number of months\r\n */\r\nexport function addMonths(date: Date, months: number): Date {\r\n  let result = new Date(date.getTime());\r\n  const newMonth = result.getMonth() + months;\r\n  result.setMonth(newMonth);\r\n\r\n  // We want to maintain the same day-of-month, but that may not be possible if the new month doesn't have enough days.\r\n  // Loop until we back up to a day the new month has.\r\n  // (Weird modulo math is due to Javascript's treatment of negative numbers in modulo)\r\n  if (result.getMonth() !== ((newMonth % TimeConstants.MonthInOneYear) + TimeConstants.MonthInOneYear) % TimeConstants.MonthInOneYear) {\r\n    result = addDays(result, -result.getDate());\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * Returns a date offset from the given date by the specified number of years.\r\n * The method tries to preserve the day-of-month; however, if the new month does not have enough days\r\n * to contain the original day-of-month, we'll use the last day of the new month.\r\n * @param {Date} date - The origin date\r\n * @param {number} years - The number of years to offset. 'years' can be negative.\r\n * @return {Date} A new Date object offset from the origin date by the given number of years\r\n */\r\nexport function addYears(date: Date, years: number): Date {\r\n  let result = new Date(date.getTime());\r\n  result.setFullYear(date.getFullYear() + years);\r\n\r\n  // We want to maintain the same day-of-month, but that may not be possible if the new month doesn't have enough days.\r\n  // Loop until we back up to a day the new month has.\r\n  // (Weird modulo math is due to Javascript's treatment of negative numbers in modulo)\r\n  if (\r\n    result.getMonth() !==\r\n    ((date.getMonth() % TimeConstants.MonthInOneYear) + TimeConstants.MonthInOneYear) % TimeConstants.MonthInOneYear\r\n  ) {\r\n    result = addDays(result, -result.getDate());\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * Returns a date that is the first day of the month of the provided date.\r\n * @param {Date} date - The origin date\r\n * @return {Date} A new Date object with the day set to the first day of the month.\r\n */\r\nexport function getMonthStart(date: Date): Date {\r\n  return new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0);\r\n}\r\n\r\n/**\r\n * Returns a date that is the last day of the month of the provided date.\r\n * @param {Date} date - The origin date\r\n * @return {Date} A new Date object with the day set to the last day of the month.\r\n */\r\nexport function getMonthEnd(date: Date): Date {\r\n  return new Date(date.getFullYear(), date.getMonth() + 1, 0, 0, 0, 0, 0);\r\n}\r\n\r\n/**\r\n * Returns a date that is the first day of the year of the provided date.\r\n * @param {Date} date - The origin date\r\n * @return {Date} A new Date object with the day set to the first day of the year.\r\n */\r\nexport function getYearStart(date: Date): Date {\r\n  return new Date(date.getFullYear(), 0, 1, 0, 0, 0, 0);\r\n}\r\n\r\n/**\r\n * Returns a date that is the last day of the year of the provided date.\r\n * @param {Date} date - The origin date\r\n * @return {Date} A new Date object with the day set to the last day of the year.\r\n */\r\nexport function getYearEnd(date: Date): Date {\r\n  return new Date(date.getFullYear() + 1, 0, 0, 0, 0, 0, 0);\r\n}\r\n\r\n/**\r\n * Returns a date that is a copy of the given date, aside from the month changing to the given month.\r\n *  The method tries to preserve the day-of-month; however, if the new month does not have enough days\r\n * to contain the original day-of-month, we'll use the last day of the new month.\r\n * @param {Date} date - The origin date\r\n * @param {number} month - The 0-based index of the month to set on the date.\r\n * @return {Date} A new Date object with the given month set.\r\n */\r\nexport function setMonth(date: Date, month: number): Date {\r\n  return addMonths(date, month - date.getMonth());\r\n}\r\n\r\n/**\r\n * Compares two dates, and returns true if the two dates (not accounting for time-of-day) are equal.\r\n * @return {boolean} True if the two dates represent the same date (regardless of time-of-day), false otherwise.\r\n */\r\nexport function compareDates(date1: Date, date2: Date): boolean {\r\n  if (!date1 && !date2) {\r\n    return true;\r\n  } else if (!date1 || !date2) {\r\n    return false;\r\n  } else {\r\n    return date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate();\r\n  }\r\n}\r\n\r\n/**\r\n * Compare the date parts of two dates\r\n * @param {Date} date1 - The first date to compare\r\n * @param {Date} date2 - The second date to compare\r\n * @returns {Number} A negative value if date1 is earlier than date2, 0 if the dates are equal, or a positive value\r\n * if date1 is later than date2.\r\n */\r\nexport function compareDatePart(date1: Date, date2: Date): Number {\r\n  return getDatePartHashValue(date1) - getDatePartHashValue(date2);\r\n}\r\n\r\n/**\r\n * Gets the date range array including the specified date. The date range array is calculated as the list\r\n * of dates accounting for the specified first day of the week and date range type.\r\n * @param {Date} date - The input date\r\n * @param {DateRangeType} dateRangeType - The desired date range type, i.e., day, week, month, etc.\r\n * @param {DayOfWeek} firstDayOfWeek - The first day of the week.\r\n * @param {DayOfWeek[]} workWeekDays - The allowed days in work week. If not provided, assumes all days are allowed.\r\n * @returns {Date[]} An array of dates representing the date range containing the specified date.\r\n */\r\nexport function getDateRangeArray(date: Date, dateRangeType: DateRangeType, firstDayOfWeek: DayOfWeek, workWeekDays?: DayOfWeek[]): Date[] {\r\n  const datesArray = new Array<Date>();\r\n  let startDate: Date;\r\n  let endDate = null;\r\n\r\n  if (!workWeekDays) {\r\n    workWeekDays = [DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday];\r\n  }\r\n\r\n  switch (dateRangeType) {\r\n    case DateRangeType.Day:\r\n      startDate = getDatePart(date);\r\n      endDate = addDays(startDate, 1);\r\n      break;\r\n\r\n    case DateRangeType.Week:\r\n    case DateRangeType.WorkWeek:\r\n      startDate = getStartDateOfWeek(getDatePart(date), firstDayOfWeek);\r\n      endDate = addDays(startDate, TimeConstants.DaysInOneWeek);\r\n      break;\r\n\r\n    case DateRangeType.Month:\r\n      startDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n      endDate = addMonths(startDate, 1);\r\n      break;\r\n\r\n    default:\r\n      return assertNever(dateRangeType);\r\n  }\r\n\r\n  // Populate the dates array with the dates in range\r\n  let nextDate = startDate;\r\n\r\n  do {\r\n    if (dateRangeType !== DateRangeType.WorkWeek) {\r\n      // push all days not in work week view\r\n      datesArray.push(nextDate);\r\n    } else if (workWeekDays.indexOf(nextDate.getDay()) !== -1) {\r\n      datesArray.push(nextDate);\r\n    }\r\n    nextDate = addDays(nextDate, 1);\r\n  } while (!compareDates(nextDate, endDate));\r\n\r\n  return datesArray;\r\n}\r\n\r\n/**\r\n * Checks whether the specified date is in the given date range.\r\n * @param {Date} date - The origin date\r\n * @param {Date[]} dateRange - An array of dates to do the lookup on\r\n * @returns {bool} True if the date matches one of the dates in the specified array, false otherwise.\r\n */\r\nexport function isInDateRangeArray(date: Date, dateRange: Date[]): boolean {\r\n  for (const dateInRange of dateRange) {\r\n    if (compareDates(date, dateInRange)) {\r\n      return true;\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\n/**\r\n * Returns the week number for a date.\r\n * Week numbers are 1 - 52 (53) in a year\r\n * @param {navigatedDate} Date - A date to find the week number for.\r\n * @param {firstDayOfWeek} DayOfWeek - The first day of the week (0-6, Sunday = 0)\r\n * @param {firstWeekOfYear} FirstWeekOfYear - The first week of the year (1-2)\r\n * @return {weeksArray} The weeks number array for the current month.\r\n */\r\nexport function getWeekNumbersInMonth(\r\n  weeksInMonth: number,\r\n  firstDayOfWeek: DayOfWeek,\r\n  firstWeekOfYear: FirstWeekOfYear,\r\n  navigatedDate: Date\r\n): number[] {\r\n  const selectedYear = navigatedDate.getFullYear();\r\n  const selectedMonth = navigatedDate.getMonth();\r\n  let dayOfMonth = 1;\r\n  const fistDayOfMonth = new Date(selectedYear, selectedMonth, dayOfMonth);\r\n  const endOfFirstWeek =\r\n    dayOfMonth + (firstDayOfWeek + TimeConstants.DaysInOneWeek - 1) - adjustWeekDay(firstDayOfWeek, fistDayOfMonth.getDay());\r\n  let endOfWeekRange = new Date(selectedYear, selectedMonth, endOfFirstWeek);\r\n  dayOfMonth = endOfWeekRange.getDate();\r\n\r\n  const weeksArray = [];\r\n  for (let i = 0; i < weeksInMonth; i++) {\r\n    // Get week number for end of week\r\n    weeksArray.push(getWeekNumber(endOfWeekRange, firstDayOfWeek, firstWeekOfYear));\r\n    dayOfMonth += TimeConstants.DaysInOneWeek;\r\n    endOfWeekRange = new Date(selectedYear, selectedMonth, dayOfMonth);\r\n  }\r\n  return weeksArray;\r\n}\r\n\r\n/**\r\n * Returns the week number for a date.\r\n * Week numbers are 1 - 52 (53) in a year\r\n * @param {Date} date - A date to find the week number for.\r\n * @param {DayOfWeek} firstDayOfWeek - The first day of the week (0-6, Sunday = 0)\r\n * @param {firstWeekOfYear} firstWeekOfYear - The first week of the year (1-2)\r\n * @return {Number} The week's number in the year.\r\n */\r\nexport function getWeekNumber(date: Date, firstDayOfWeek: DayOfWeek, firstWeekOfYear: FirstWeekOfYear): number {\r\n  // First four-day week of the year - minumum days count\r\n  const fourDayWeek = 4;\r\n\r\n  switch (firstWeekOfYear) {\r\n    case FirstWeekOfYear.FirstFullWeek:\r\n      return getWeekOfYearFullDays(date, firstDayOfWeek, TimeConstants.DaysInOneWeek);\r\n\r\n    case FirstWeekOfYear.FirstFourDayWeek:\r\n      return getWeekOfYearFullDays(date, firstDayOfWeek, fourDayWeek);\r\n\r\n    default:\r\n      return getFirstDayWeekOfYear(date, firstDayOfWeek);\r\n  }\r\n}\r\n\r\n/**\r\n * Gets a new date with the time portion zeroed out, i.e., set to midnight\r\n * @param {Date} date - The origin date\r\n * @returns {Date} A new date with the time set to midnight\r\n */\r\nfunction getDatePart(date: Date): Date {\r\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\n/**\r\n * Gets the date for the first day of the week based on the given date assuming\r\n * the specified first day of the week.\r\n * @param {Date} date - The date to find the beginning of the week date for.\r\n * @return {Date} A new date object representing the first day of the week containing the input date.\r\n */\r\nfunction getStartDateOfWeek(date: Date, firstDayOfWeek: DayOfWeek): Date {\r\n  let daysOffset = firstDayOfWeek - date.getDay();\r\n  if (daysOffset > 0) {\r\n    // If first day of week is > date, go 1 week back, to ensure resulting date is in the past.\r\n    daysOffset -= TimeConstants.DaysInOneWeek;\r\n  }\r\n  return addDays(date, daysOffset);\r\n}\r\n\r\n/**\r\n * Helper function to assist in date comparisons\r\n */\r\nfunction getDatePartHashValue(date: Date): number {\r\n  // Generate date hash value created as sum of Date (up to 31 = 5 bits), Month (up to 11 = 4 bits) and Year.\r\n  /* tslint:disable:no-bitwise */\r\n  return date.getDate() + (date.getMonth() << 5) + (date.getFullYear() << 9);\r\n  /* tslint:enable:no-bitwise */\r\n}\r\n\r\n/**\r\n * Helper function for getWeekNumber.\r\n * Returns week number for a date\r\n * @param {date} Date - current selected date.\r\n * @param {firstDayOfWeek} DayOfWeek - The first day of week (0-6, Sunday = 0)\r\n * @param {numberOfFullDays} number - week settings.\r\n * @return {Number} The week's number in the year.\r\n */\r\nfunction getWeekOfYearFullDays(date: Date, firstDayOfWeek: DayOfWeek, numberOfFullDays: number): number {\r\n  const dayOfYear = getDayOfYear(date) - 1;\r\n  let num = date.getDay() - (dayOfYear % TimeConstants.DaysInOneWeek);\r\n\r\n  const lastDayOfPrevYear = new Date(date.getFullYear() - 1, MonthOfYear.December, 31);\r\n  const daysInYear = getDayOfYear(lastDayOfPrevYear) - 1;\r\n\r\n  let num2 = (firstDayOfWeek - num + 2 * TimeConstants.DaysInOneWeek) % TimeConstants.DaysInOneWeek;\r\n  if (num2 !== 0 && num2 >= numberOfFullDays) {\r\n    num2 -= TimeConstants.DaysInOneWeek;\r\n  }\r\n\r\n  let num3 = dayOfYear - num2;\r\n  if (num3 < 0) {\r\n    num -= daysInYear % TimeConstants.DaysInOneWeek;\r\n    num2 = (firstDayOfWeek - num + 2 * TimeConstants.DaysInOneWeek) % TimeConstants.DaysInOneWeek;\r\n    if (num2 !== 0 && num2 + 1 >= numberOfFullDays) {\r\n      num2 -= TimeConstants.DaysInOneWeek;\r\n    }\r\n\r\n    num3 = daysInYear - num2;\r\n  }\r\n\r\n  return Math.floor(num3 / TimeConstants.DaysInOneWeek + 1);\r\n}\r\n\r\n/**\r\n * Helper function for getWeekNumber.\r\n * Returns week number for a date\r\n * @param {date} Date - current selected date.\r\n * @param {firstDayOfWeek} DayOfWeek - The first day of week (0-6, Sunday = 0)\r\n * @return {Number} The week's number in the year.\r\n */\r\nfunction getFirstDayWeekOfYear(date: Date, firstDayOfWeek: number): number {\r\n  const num = getDayOfYear(date) - 1;\r\n  const num2 = date.getDay() - (num % TimeConstants.DaysInOneWeek);\r\n  const num3 = (num2 - firstDayOfWeek + 2 * TimeConstants.DaysInOneWeek) % TimeConstants.DaysInOneWeek;\r\n\r\n  return Math.floor((num + num3) / TimeConstants.DaysInOneWeek + 1);\r\n}\r\n\r\n/**\r\n * Helper function for getWeekNumber.\r\n * Returns adjusted week day number when firstDayOfWeek is other than Sunday\r\n * For Week Day Number comparison checks\r\n * @param {firstDayOfWeek} DayOfWeek - The first day of week (0-6, Sunday = 0)\r\n * @param {dateWeekDay} DayOfWeek - shifts number forward to 1 week in case passed as true\r\n * @return {DayOfWeek} The day of week adjusted to firstDayOfWeek. E.g. when FirstDyOfWeek is Monday (1), Sunday becomes = 7 (7 > 1).\r\n */\r\nfunction adjustWeekDay(firstDayOfWeek: DayOfWeek, dateWeekDay: DayOfWeek): number {\r\n  return firstDayOfWeek !== DayOfWeek.Sunday && dateWeekDay < firstDayOfWeek ? dateWeekDay + TimeConstants.DaysInOneWeek : dateWeekDay;\r\n}\r\n\r\n/**\r\n * Returns the day number for a date in a year\r\n * The number of days since January 1st in the particular year.\r\n * @param {Date} date - A date to find the day number for.\r\n * @return {Number} The day's number in the year.\r\n */\r\nfunction getDayOfYear(date: Date): number {\r\n  const month = date.getMonth();\r\n  const year = date.getFullYear();\r\n  let daysUntilDate = 0;\r\n\r\n  for (let i = 0; i < month; i++) {\r\n    daysUntilDate += daysInMonth(i + 1, year);\r\n  }\r\n\r\n  daysUntilDate += date.getDate();\r\n\r\n  return daysUntilDate;\r\n}\r\n\r\n/**\r\n * Returns the number of days in the month\r\n * @param {number} month - The month number to target (months 1-12).\r\n * @param {number} year - The year to target.\r\n * @return {Number} The number of days in the month.\r\n */\r\nfunction daysInMonth(month: number, year: number): number {\r\n  return new Date(year, month, 0).getDate();\r\n}\r\n","/**\r\n * AssertNever is a utility function that can be used for exhaustiveness checks in switch statements.\r\n *\r\n * @public\r\n */\r\nexport function assertNever(x: never): never {\r\n  throw new Error('Unexpected object: ' + x);\r\n}\r\n","/* tslint:disable */\nimport { loadStyles } from '@microsoft/load-themed-styles';\nloadStyles([{\"rawString\":\".root_350f6485{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:none;box-shadow:none;margin:0;padding:0}.root_350f6485 *::-moz-focus-inner{border:0}.root_350f6485 *{outline:transparent}.root_350f6485 *{position:relative}.ms-Fabric--isFocusVisible .root_350f6485 *:focus:after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;border:1px solid \"},{\"theme\":\"neutralSecondary\",\"defaultValue\":\"#666666\"},{\"rawString\":\"}.picker_350f6485{color:\"},{\"theme\":\"black\",\"defaultValue\":\"#000000\"},{\"rawString\":\";font-size:14px;position:relative}html[dir='ltr'] .picker_350f6485{text-align:left}html[dir='rtl'] .picker_350f6485{text-align:right}.holder_350f6485{-webkit-overflow-scrolling:touch;-webkit-box-sizing:border-box;box-sizing:border-box;display:none}.picker_350f6485.pickerIsOpened_350f6485 .holder_350f6485{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block}.pickerIsOpened_350f6485{position:relative}.frame_350f6485{position:relative}.wrap_350f6485{min-height:212px;padding:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-sizing:content-box;box-sizing:content-box}.wrap_350f6485.goTodaySpacing_350f6485{min-height:228px}.dayPicker_350f6485{display:block}.header_350f6485{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:28px;line-height:44px;width:100%}.divider_350f6485{top:0;margin-top:-12px;margin-bottom:-12px}html[dir='ltr'] .divider_350f6485{border-right:1px solid \"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\"}html[dir='rtl'] .divider_350f6485{border-left:1px solid \"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\"}.monthAndYear_350f6485,.year_350f6485,.decade_350f6485{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;font-size:14px;font-weight:400;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";font-weight:600;padding:0 5px}.monthAndYear_350f6485:hover,.currentYear_350f6485:hover,.currentDecade_350f6485:hover{cursor:default}.table_350f6485{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;margin-top:4px;width:197px}.table_350f6485 td{margin:0;padding:0}.dayWrapper_350f6485,.weekday_350f6485{width:28px;height:28px;padding:0;line-height:28px;font-size:12px;font-size:15px;font-weight:400;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:default}.dayWrapper_350f6485 *::-moz-focus-inner,.weekday_350f6485 *::-moz-focus-inner{border:0}.dayWrapper_350f6485 *,.weekday_350f6485 *{outline:transparent}.dayWrapper_350f6485 *,.weekday_350f6485 *{position:relative}.ms-Fabric--isFocusVisible .dayWrapper_350f6485 *:focus:after,.ms-Fabric--isFocusVisible .weekday_350f6485 *:focus:after{content:'';position:absolute;top:-2px;right:-2px;bottom:-2px;left:-2px;pointer-events:none;border:1px solid \"},{\"theme\":\"neutralSecondary\",\"defaultValue\":\"#666666\"},{\"rawString\":\"}.day_350f6485{width:24px;height:24px;border-radius:2px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;padding:0;background-color:transparent;line-height:100%;font-size:inherit;color:inherit;font-weight:inherit}@media screen and (-ms-high-contrast: active){.daySelection_350f6485 .day_350f6485:hover,.daySelection_350f6485 .day_350f6485:active{outline:1px solid highlight}}@media screen and (-ms-high-contrast: active){.daySelection_350f6485 .day_350f6485:active{color:highlight}}.dayIsToday_350f6485,.dayIsToday_350f6485:hover{position:relative;background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\"}@media screen and (-ms-high-contrast: active){.dayIsToday_350f6485,.dayIsToday_350f6485:hover{background-color:highlight;border-radius:2px}}@media screen and (-ms-high-contrast: active){.dayIsToday_350f6485 span,.dayIsToday_350f6485:hover span{-ms-high-contrast-adjust:none;color:window}}.dayIsToday_350f6485:hover,.dayIsToday_350f6485:hover:hover{border-radius:0px}.dayIsDisabled_350f6485:before{border-top-color:\"},{\"theme\":\"neutralTertiary\",\"defaultValue\":\"#a6a6a6\"},{\"rawString\":\"}.dayIsUnfocused_350f6485{color:\"},{\"theme\":\"neutralSecondary\",\"defaultValue\":\"#666666\"},{\"rawString\":\";font-weight:400}.dayIsFocused_350f6485:hover,.dayIsUnfocused_350f6485:hover{cursor:pointer;background:\"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\"}.daySelection_350f6485.dayIsHighlighted_350f6485:hover,.pickerIsFocused_350f6485 .dayIsHighlighted_350f6485.daySelection_350f6485{cursor:pointer}@media screen and (-ms-high-contrast: active){.daySelection_350f6485.dayIsHighlighted_350f6485:hover,.pickerIsFocused_350f6485 .dayIsHighlighted_350f6485.daySelection_350f6485{border:2px solid Highlight}.daySelection_350f6485.dayIsHighlighted_350f6485:hover :not(.dayIsToday_350f6485) span,.pickerIsFocused_350f6485 .dayIsHighlighted_350f6485.daySelection_350f6485 :not(.dayIsToday_350f6485) span{color:Highlight}}@media screen and (-ms-high-contrast: active){.dayIsHighlighted_350f6485 button.dayIsToday_350f6485{border-radius:0px}}@media screen and (-ms-high-contrast: active){.dayIsHighlighted_350f6485 button.dayIsToday_350f6485 span{color:Window}}.dayIsFocused_350f6485:active,.dayIsHighlighted_350f6485{background:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\"}.dayIsFocused_350f6485:active.day_350f6485,.dayIsHighlighted_350f6485.day_350f6485{color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";font-weight:600}.dayIsHighlighted_350f6485.dayDisabled_350f6485,.dayIsHighlighted_350f6485.dayDisabled_350f6485:hover{background:\"},{\"theme\":\"neutralTertiary\",\"defaultValue\":\"#a6a6a6\"},{\"rawString\":\"}.dayBackground_350f6485,.dayBackground_350f6485:hover,.dayBackground_350f6485:active{border-radius:2px}.dayHover_350f6485,.dayHover_350f6485:hover{cursor:pointer;background:\"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\"}.dayPress_350f6485,.dayPress_350f6485:hover{cursor:pointer;font-weight:600;background:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\"}.dayPress_350f6485 .dayIsToday_350f6485,.dayPress_350f6485:hover .dayIsToday_350f6485{background:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\"}.dayIsUnfocused_350f6485:active,.dayIsFocused_350f6485:active,.dayIsHighlighted_350f6485,.dayIsHighlighted_350f6485:hover,.dayIsHighlighted_350f6485:active,.weekBackground_350f6485,.weekBackground_350f6485:hover,.weekBackground_350f6485:active{background:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";font-weight:600}.dayIsToday_350f6485,.pickerIsFocused_350f6485 .dayIsToday_350f6485,.dayIsToday_350f6485.day_350f6485:active{position:relative;color:\"},{\"theme\":\"white\",\"defaultValue\":\"#ffffff\"},{\"rawString\":\";font-weight:600;background:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\"}.showWeekNumbers_350f6485 .weekNumbers_350f6485{border-right:1px solid \"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\";-webkit-box-sizing:border-box;box-sizing:border-box;width:28px;padding:0}.showWeekNumbers_350f6485 .weekNumbers_350f6485 .dayWrapper_350f6485{color:\"},{\"theme\":\"neutralSecondary\",\"defaultValue\":\"#666666\"},{\"rawString\":\"}.showWeekNumbers_350f6485 .weekNumbers_350f6485 .dayWrapper_350f6485.weekIsHighlighted_350f6485{color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\"}.showWeekNumbers_350f6485 .table_350f6485{width:225px}.showWeekNumbers_350f6485 .table_350f6485 .dayWrapper_350f6485,.showWeekNumbers_350f6485 .table_350f6485 .weekday_350f6485{width:30px}.showWeekNumbersRTL_350f6485 .weekNumbers_350f6485{border-left:1px solid \"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\";-webkit-box-sizing:border-box;box-sizing:border-box}.showWeekNumbersRTL_350f6485 .weekNumbers_350f6485 .dayWrapper_350f6485{color:\"},{\"theme\":\"neutralSecondary\",\"defaultValue\":\"#666666\"},{\"rawString\":\"}.showWeekNumbersRTL_350f6485 .weekNumbers_350f6485 .dayWrapper_350f6485.weekIsHighlighted_350f6485{color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\"}.showWeekNumbersRTL_350f6485 .table_350f6485{width:225px}.showWeekNumbersRTL_350f6485 .table_350f6485 .dayWrapper_350f6485,.showWeekNumbersRTL_350f6485 .table_350f6485 .weekday_350f6485{width:30px}.monthComponents_350f6485,.yearComponents_350f6485,.decadeComponents_350f6485{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-item-align:end;align-self:flex-end}.closeButton_350f6485,.prevMonth_350f6485,.nextMonth_350f6485,.prevYear_350f6485,.nextYear_350f6485,.prevDecade_350f6485,.nextDecade_350f6485{width:28px;height:28px;display:block;text-align:center;line-height:28px;text-align:center;font-size:12px;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";border-radius:2px;position:relative;background-color:transparent;border:none;padding:0}.closeButton_350f6485:hover,.prevMonth_350f6485:hover,.nextMonth_350f6485:hover,.prevYear_350f6485:hover,.nextYear_350f6485:hover,.prevDecade_350f6485:hover,.nextDecade_350f6485:hover{color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\";cursor:pointer;outline:1px solid transparent}.prevMonthIsDisabled_350f6485,.nextMonthIsDisabled_350f6485,.prevYearIsDisabled_350f6485,.nextYearIsDisabled_350f6485,.prevDecadeIsDisabled_350f6485,.nextDecadeIsDisabled_350f6485{color:\"},{\"theme\":\"neutralTertiaryAlt\",\"defaultValue\":\"#c8c8c8\"},{\"rawString\":\";pointer-events:none}.headerToggleView_350f6485{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:4px 8px}.headerToggleView_350f6485:hover{color:\"},{\"theme\":\"black\",\"defaultValue\":\"#000000\"},{\"rawString\":\";cursor:pointer}@media screen and (-ms-high-contrast: active){.headerToggleView_350f6485:hover{outline:1px solid highlight}}@media screen and (-ms-high-contrast: active){.headerToggleView_350f6485:hover:active{color:highlight}}.currentYear_350f6485,.currentDecade_350f6485{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:0 5px;font-size:14px;font-weight:400;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";height:28px;line-height:28px;font-weight:600}html[dir='ltr'] .currentYear_350f6485,html[dir='ltr'] .currentDecade_350f6485{margin-left:5px}html[dir='rtl'] .currentYear_350f6485,html[dir='rtl'] .currentDecade_350f6485{margin-right:5px}.optionGrid_350f6485{position:relative;height:210px;width:196px;margin:4px 0 0 0}html[dir='rtl'] .optionGrid_350f6485{margin:4px 0 0 0}.monthOption_350f6485,.yearOption_350f6485{width:60px;height:60px;line-height:100%;cursor:pointer;margin:0 10px 10px 0;font-size:13px;font-weight:400;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";text-align:center;border:none;padding:0;background-color:transparent;border-radius:2px}html[dir='ltr'] .monthOption_350f6485,html[dir='ltr'] .yearOption_350f6485{float:left}html[dir='rtl'] .monthOption_350f6485,html[dir='rtl'] .yearOption_350f6485{float:right}html[dir='rtl'] .monthOption_350f6485,html[dir='rtl'] .yearOption_350f6485{margin:0 0 10px 10px}.monthOption_350f6485:hover,.yearOption_350f6485:hover{color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\";background-color:\"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\";outline:1px solid transparent}@media screen and (-ms-high-contrast: active){.monthOption_350f6485:hover,.yearOption_350f6485:hover{outline-color:highlight}}@media screen and (-ms-high-contrast: active){.monthOption_350f6485:active,.yearOption_350f6485:active{color:highlight}}.monthOption_350f6485.isHighlighted_350f6485,.yearOption_350f6485.isHighlighted_350f6485{background-color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";color:\"},{\"theme\":\"white\",\"defaultValue\":\"#ffffff\"},{\"rawString\":\"}.dayIsDisabled_350f6485,.monthOptionIsDisabled_350f6485,.yearOptionIsDisabled_350f6485{color:\"},{\"theme\":\"neutralTertiaryAlt\",\"defaultValue\":\"#c8c8c8\"},{\"rawString\":\";pointer-events:none}.goToday_350f6485{bottom:0;color:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\";cursor:pointer;font-size:12px;font-weight:400;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\";height:30px;line-height:30px;padding:0 10px;background-color:transparent;border:none;position:absolute !important;-webkit-box-sizing:content-box;box-sizing:content-box}[dir='ltr'] .goToday_350f6485{right:13px}[dir='rtl'] .goToday_350f6485{left:13px}.goToday_350f6485:hover{color:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\";outline:1px solid transparent}@media screen and (-ms-high-contrast: active){.goToday_350f6485:hover{outline-color:highlight}}.goToday_350f6485:active{color:\"},{\"theme\":\"themeDark\",\"defaultValue\":\"#005a9e\"},{\"rawString\":\"}@media screen and (-ms-high-contrast: active){.goToday_350f6485:active{color:highlight}}.goToTodayIsDisabled_350f6485{color:\"},{\"theme\":\"neutralTertiaryAlt\",\"defaultValue\":\"#c8c8c8\"},{\"rawString\":\";pointer-events:none}.goTodayInlineMonth_350f6485{top:212px}.wrap_350f6485.goTodaySpacing_350f6485{padding-bottom:28px}.root_350f6485.isPickingYears_350f6485 .dayPicker_350f6485,.root_350f6485.isPickingYears_350f6485 .monthComponents_350f6485{display:none}.root_350f6485.isPickingYears_350f6485 .monthPicker_350f6485{display:none}.root_350f6485.isPickingYears_350f6485 .yearPicker_350f6485{display:block}@media (min-device-width: 460px){.wrap_350f6485{padding:12px}.dayPicker_350f6485,.monthPicker_350f6485{min-height:200px}.header_350f6485{height:28px;line-height:28px;width:100%}.dayWrapper_350f6485,.weekday_350f6485{width:28px;height:28px;line-height:28px;font-size:12px}.closeButton_350f6485,.prevMonth_350f6485,.nextMonth_350f6485,.prevYear_350f6485,.nextYear_350f6485,.prevDecade_350f6485,.nextDecade_350f6485{font-size:12px;width:28px;height:28px;line-height:28px}.holder_350f6485{display:inline-block;height:auto;overflow:hidden}.monthAndYear_350f6485,.year_350f6485,.decade_350f6485{font-size:14px;color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\"}.yearComponents_350f6485{margin-left:1px}.goToday_350f6485{padding:0 3px}[dir='ltr'] .goToday_350f6485{right:20px}[dir='rtl'] .goToday_350f6485{left:20px}.showWeekNumbers_350f6485 .table_350f6485 .dayWrapper_350f6485,.showWeekNumbers_350f6485 .table_350f6485 .weekday_350f6485{width:28px}.showWeekNumbersRTL_350f6485 .table_350f6485 .dayWrapper_350f6485,.showWeekNumbersRTL_350f6485 .table_350f6485 .weekday_350f6485{width:28px}.monthPickerVisible_350f6485 .wrap_350f6485{padding:12px}.monthPickerVisible_350f6485 .dayPicker_350f6485{margin:-10px 0;padding:10px 0}.monthPickerVisible_350f6485 .dayPicker_350f6485{-webkit-box-sizing:border-box;box-sizing:border-box;width:212px;min-height:200px}.monthPickerVisible_350f6485 .monthPicker_350f6485{display:block}.monthPickerVisible_350f6485 .optionGrid_350f6485{height:150px;width:196px}.monthPickerVisible_350f6485 .toggleMonthView_350f6485{display:none}.monthPickerVisible_350f6485 .currentYear_350f6485,.monthPickerVisible_350f6485 .currentDecade_350f6485{font-size:14px;margin:0;height:28px;line-height:28px;display:inline-block}.monthPickerVisible_350f6485 .monthOption_350f6485,.monthPickerVisible_350f6485 .yearOption_350f6485{width:40px;height:40px;line-height:100%;font-size:12px;margin:0 12px 16px 0}html[dir='rtl'] .monthPickerVisible_350f6485 .monthOption_350f6485,html[dir='rtl'] .monthPickerVisible_350f6485 .yearOption_350f6485{margin:0 0 16px 12px}.monthPickerVisible_350f6485 .monthOption_350f6485:hover,.monthPickerVisible_350f6485 .yearOption_350f6485:hover{outline:1px solid transparent}.monthPickerVisible_350f6485 .monthOption_350f6485:nth-child(4n+4),.monthPickerVisible_350f6485 .yearOption_350f6485:nth-child(4n+4){margin:0 0px 16px 0}html[dir='rtl'] .monthPickerVisible_350f6485 .monthOption_350f6485:nth-child(4n+4),html[dir='rtl'] .monthPickerVisible_350f6485 .yearOption_350f6485:nth-child(4n+4){margin:0 0 16px 0px}.monthPickerVisible_350f6485 .goToday_350f6485{font-size:12px;height:28px;line-height:28px;padding:0 10px}[dir='ltr'] .monthPickerVisible_350f6485 .goToday_350f6485{right:8px}[dir='rtl'] .monthPickerVisible_350f6485 .goToday_350f6485{left:8px}html[dir='ltr'] .monthPickerVisible_350f6485 .goToday_350f6485{text-align:right}html[dir='rtl'] .monthPickerVisible_350f6485 .goToday_350f6485{text-align:left}.monthPickerVisible_350f6485 .root_350f6485.isPickingYears_350f6485 .dayPicker_350f6485,.monthPickerVisible_350f6485 .root_350f6485.isPickingYears_350f6485 .monthComponents_350f6485{display:block}.monthPickerVisible_350f6485 .root_350f6485.isPickingYears_350f6485 .monthPicker_350f6485{display:none}.monthPickerVisible_350f6485 .root_350f6485.isPickingYears_350f6485 .yearPicker_350f6485{display:block}.calendarsInline_350f6485 .wrap_350f6485{padding:12px}.calendarsInline_350f6485 .holder_350f6485{height:auto}html[dir='ltr'] .calendarsInline_350f6485 .table_350f6485{margin-right:12px}html[dir='rtl'] .calendarsInline_350f6485 .table_350f6485{margin-left:12px}.calendarsInline_350f6485 .dayPicker_350f6485{width:auto}html[dir='ltr'] .calendarsInline_350f6485 .monthPicker_350f6485{margin-left:12px}html[dir='rtl'] .calendarsInline_350f6485 .monthPicker_350f6485{margin-right:12px}html[dir='ltr'] .calendarsInline_350f6485 .yearPicker_350f6485{margin-left:12px}html[dir='rtl'] .calendarsInline_350f6485 .yearPicker_350f6485{margin-right:12px}.calendarsInline_350f6485 .goToday_350f6485{padding:0 10px}[dir='ltr'] .calendarsInline_350f6485 .goToday_350f6485{right:14px}[dir='rtl'] .calendarsInline_350f6485 .goToday_350f6485{left:14px}html[dir='ltr'] .calendarsInline_350f6485 .monthComponents_350f6485{margin-right:12px}html[dir='rtl'] .calendarsInline_350f6485 .monthComponents_350f6485{margin-left:12px}.monthPickerOnly_350f6485 .wrap_350f6485{padding:12px}.monthPickerAsOverlay_350f6485 .wrap_350f6485{padding-bottom:28px;margin-bottom:6px}.monthPickerAsOverlay_350f6485 .holder_350f6485{height:240px;min-height:240px}.monthPickerAsOverlay_350f6485 .holderWithButton_350f6485{padding-top:6px;height:auto}}@media (max-device-width: 459px){.calendarsInline_350f6485 .monthPicker_350f6485,.calendarsInline_350f6485 .yearPicker_350f6485{display:none}.yearComponents_350f6485{margin-top:2px}}.goToday_350f6485{width:auto}.closeButton_350f6485,.nextMonth_350f6485,.prevMonth_350f6485,.nextYear_350f6485,.prevYear_350f6485,.nextDecade_350f6485,.prevDecade_350f6485{display:inline-block}.closeButton_350f6485:hover,.nextMonth_350f6485:hover,.prevMonth_350f6485:hover,.nextYear_350f6485:hover,.prevYear_350f6485:hover,.nextDecade_350f6485:hover,.prevDecade_350f6485:hover{background-color:\"},{\"theme\":\"neutralLight\",\"defaultValue\":\"#eaeaea\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\"}@media screen and (-ms-high-contrast: active){.closeButton_350f6485:hover,.nextMonth_350f6485:hover,.prevMonth_350f6485:hover,.nextYear_350f6485:hover,.prevYear_350f6485:hover,.nextDecade_350f6485:hover,.prevDecade_350f6485:hover{outline:1px solid highlight}}.closeButton_350f6485:active,.nextMonth_350f6485:active,.prevMonth_350f6485:active,.nextYear_350f6485:active,.prevYear_350f6485:active,.nextDecade_350f6485:active,.prevDecade_350f6485:active{background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\"}@media screen and (-ms-high-contrast: active){.closeButton_350f6485:active,.nextMonth_350f6485:active,.prevMonth_350f6485:active,.nextYear_350f6485:active,.prevYear_350f6485:active,.nextDecade_350f6485:active,.prevDecade_350f6485:active{color:highlight}}.monthIsHighlighted_350f6485{font-weight:600;background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\"}.monthIsHighlighted_350f6485.monthOption_350f6485:hover{background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\"}@media screen and (-ms-high-contrast: active){.monthIsHighlighted_350f6485{color:highlight;border:2px solid highlight;border-radius:2px}.monthIsHighlighted_350f6485:hover{outline:0 !important}}.monthIsCurrentMonth_350f6485{font-weight:600;color:\"},{\"theme\":\"white\",\"defaultValue\":\"#ffffff\"},{\"rawString\":\";background-color:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\"}.monthIsCurrentMonth_350f6485.monthOption_350f6485:hover{font-weight:600;color:\"},{\"theme\":\"white\",\"defaultValue\":\"#ffffff\"},{\"rawString\":\";background-color:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\"}.monthOption_350f6485:active{background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\"}.yearIsHighlighted_350f6485{font-weight:600;background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralPrimary\",\"defaultValue\":\"#333333\"},{\"rawString\":\"}.yearIsHighlighted_350f6485.yearOption_350f6485:hover{background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\"}.yearIsCurrentYear_350f6485{font-weight:600;color:\"},{\"theme\":\"white\",\"defaultValue\":\"#ffffff\"},{\"rawString\":\";background-color:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\"}.yearIsCurrentYear_350f6485.yearOption_350f6485:hover{font-weight:600;color:\"},{\"theme\":\"white\",\"defaultValue\":\"#ffffff\"},{\"rawString\":\";background-color:\"},{\"theme\":\"themePrimary\",\"defaultValue\":\"#0078d4\"},{\"rawString\":\"}.yearOption_350f6485:active{background-color:\"},{\"theme\":\"themeLight\",\"defaultValue\":\"#c7e0f4\"},{\"rawString\":\";color:\"},{\"theme\":\"neutralDark\",\"defaultValue\":\"#212121\"},{\"rawString\":\"}.topLeftCornerDate_350f6485{border-top-left-radius:2px}.topRightCornerDate_350f6485{border-top-right-radius:2px}.bottomLeftCornerDate_350f6485{border-bottom-left-radius:2px}.bottomRightCornerDate_350f6485{border-bottom-right-radius:2px}@media screen and (-ms-high-contrast: active){.weekBackground_350f6485{border-top:1px solid highlight;border-bottom:1px solid highlight}.weekBackground_350f6485.bottomRightCornerDate_350f6485.topRightCornerDate_350f6485{border-right:1px solid highlight;border-left:none;padding-left:1px}.weekBackground_350f6485.bottomLeftCornerDate_350f6485.topLeftCornerDate_350f6485{border-left:1px solid highlight;border-right:none;padding-right:1px}.weekBackground_350f6485 :not(.dayIsToday_350f6485) span{color:highlight}.weekSelection_350f6485.dayHover_350f6485{border-top:1px solid highlight;border-bottom:1px solid highlight}.weekSelection_350f6485.dayHover_350f6485.bottomLeftCornerDate_350f6485.topLeftCornerDate_350f6485{border-left:1px solid highlight;padding-right:1px}.weekSelection_350f6485.dayHover_350f6485.bottomRightCornerDate_350f6485.topRightCornerDate_350f6485{border-right:1px solid highlight;padding-left:1px}.weekSelection_350f6485.dayHover_350f6485.dayPress_350f6485 :not(.dayIsToday_350f6485) span{color:highlight}.monthSelection_350f6485.dayHover_350f6485.bottomLeftCornerDate_350f6485,.monthSelection_350f6485.dayHover_350f6485.topLeftCornerDate_350f6485{border-left:1px solid highlight;padding-right:1px}.monthSelection_350f6485.dayHover_350f6485.bottomRightCornerDate_350f6485,.monthSelection_350f6485.dayHover_350f6485.topRightCornerDate_350f6485{border-right:1px solid highlight;padding-left:1px}.monthSelection_350f6485.dayIsFocused_350f6485.dayHover_350f6485.topDate_350f6485,.monthSelection_350f6485.dayIsUnfocused_350f6485.dayHover_350f6485.topDate_350f6485{border-top:1px solid highlight;padding-bottom:1px}.monthSelection_350f6485.dayIsFocused_350f6485.dayHover_350f6485.rightDate_350f6485,.monthSelection_350f6485.dayIsUnfocused_350f6485.dayHover_350f6485.rightDate_350f6485{border-right:1px solid highlight;padding-left:1px}.monthSelection_350f6485.dayIsFocused_350f6485.dayHover_350f6485.bottomDate_350f6485,.monthSelection_350f6485.dayIsUnfocused_350f6485.dayHover_350f6485.bottomDate_350f6485{border-bottom:1px solid highlight;padding-top:1px}.monthSelection_350f6485.dayIsFocused_350f6485.dayHover_350f6485.leftdate_350f6485,.monthSelection_350f6485.dayIsUnfocused_350f6485.dayHover_350f6485.leftdate_350f6485{border-left:1px solid highlight;padding-right:1px}.monthSelection_350f6485.dayIsFocused_350f6485.dayHover_350f6485.dayPress_350f6485 :not(.dayIsToday_350f6485) span,.monthSelection_350f6485.dayIsUnfocused_350f6485.dayHover_350f6485.dayPress_350f6485 :not(.dayIsToday_350f6485) span{color:highlight}}\\n\"}]);\nexport const root = \"root_350f6485\";\nexport const picker = \"picker_350f6485\";\nexport const holder = \"holder_350f6485\";\nexport const pickerIsOpened = \"pickerIsOpened_350f6485\";\nexport const frame = \"frame_350f6485\";\nexport const wrap = \"wrap_350f6485\";\nexport const goTodaySpacing = \"goTodaySpacing_350f6485\";\nexport const dayPicker = \"dayPicker_350f6485\";\nexport const header = \"header_350f6485\";\nexport const divider = \"divider_350f6485\";\nexport const monthAndYear = \"monthAndYear_350f6485\";\nexport const year = \"year_350f6485\";\nexport const decade = \"decade_350f6485\";\nexport const currentYear = \"currentYear_350f6485\";\nexport const currentDecade = \"currentDecade_350f6485\";\nexport const table = \"table_350f6485\";\nexport const dayWrapper = \"dayWrapper_350f6485\";\nexport const weekday = \"weekday_350f6485\";\nexport const day = \"day_350f6485\";\nexport const daySelection = \"daySelection_350f6485\";\nexport const dayIsToday = \"dayIsToday_350f6485\";\nexport const dayIsDisabled = \"dayIsDisabled_350f6485\";\nexport const dayIsUnfocused = \"dayIsUnfocused_350f6485\";\nexport const dayIsFocused = \"dayIsFocused_350f6485\";\nexport const dayIsHighlighted = \"dayIsHighlighted_350f6485\";\nexport const pickerIsFocused = \"pickerIsFocused_350f6485\";\nexport const dayDisabled = \"dayDisabled_350f6485\";\nexport const dayBackground = \"dayBackground_350f6485\";\nexport const dayHover = \"dayHover_350f6485\";\nexport const dayPress = \"dayPress_350f6485\";\nexport const weekBackground = \"weekBackground_350f6485\";\nexport const showWeekNumbers = \"showWeekNumbers_350f6485\";\nexport const weekNumbers = \"weekNumbers_350f6485\";\nexport const weekIsHighlighted = \"weekIsHighlighted_350f6485\";\nexport const showWeekNumbersRTL = \"showWeekNumbersRTL_350f6485\";\nexport const monthComponents = \"monthComponents_350f6485\";\nexport const yearComponents = \"yearComponents_350f6485\";\nexport const decadeComponents = \"decadeComponents_350f6485\";\nexport const closeButton = \"closeButton_350f6485\";\nexport const prevMonth = \"prevMonth_350f6485\";\nexport const nextMonth = \"nextMonth_350f6485\";\nexport const prevYear = \"prevYear_350f6485\";\nexport const nextYear = \"nextYear_350f6485\";\nexport const prevDecade = \"prevDecade_350f6485\";\nexport const nextDecade = \"nextDecade_350f6485\";\nexport const prevMonthIsDisabled = \"prevMonthIsDisabled_350f6485\";\nexport const nextMonthIsDisabled = \"nextMonthIsDisabled_350f6485\";\nexport const prevYearIsDisabled = \"prevYearIsDisabled_350f6485\";\nexport const nextYearIsDisabled = \"nextYearIsDisabled_350f6485\";\nexport const prevDecadeIsDisabled = \"prevDecadeIsDisabled_350f6485\";\nexport const nextDecadeIsDisabled = \"nextDecadeIsDisabled_350f6485\";\nexport const headerToggleView = \"headerToggleView_350f6485\";\nexport const optionGrid = \"optionGrid_350f6485\";\nexport const monthOption = \"monthOption_350f6485\";\nexport const yearOption = \"yearOption_350f6485\";\nexport const isHighlighted = \"isHighlighted_350f6485\";\nexport const monthOptionIsDisabled = \"monthOptionIsDisabled_350f6485\";\nexport const yearOptionIsDisabled = \"yearOptionIsDisabled_350f6485\";\nexport const goToday = \"goToday_350f6485\";\nexport const goToTodayIsDisabled = \"goToTodayIsDisabled_350f6485\";\nexport const goTodayInlineMonth = \"goTodayInlineMonth_350f6485\";\nexport const isPickingYears = \"isPickingYears_350f6485\";\nexport const monthPicker = \"monthPicker_350f6485\";\nexport const yearPicker = \"yearPicker_350f6485\";\nexport const monthPickerVisible = \"monthPickerVisible_350f6485\";\nexport const toggleMonthView = \"toggleMonthView_350f6485\";\nexport const calendarsInline = \"calendarsInline_350f6485\";\nexport const monthPickerOnly = \"monthPickerOnly_350f6485\";\nexport const monthPickerAsOverlay = \"monthPickerAsOverlay_350f6485\";\nexport const holderWithButton = \"holderWithButton_350f6485\";\nexport const monthIsHighlighted = \"monthIsHighlighted_350f6485\";\nexport const monthIsCurrentMonth = \"monthIsCurrentMonth_350f6485\";\nexport const yearIsHighlighted = \"yearIsHighlighted_350f6485\";\nexport const yearIsCurrentYear = \"yearIsCurrentYear_350f6485\";\nexport const topLeftCornerDate = \"topLeftCornerDate_350f6485\";\nexport const topRightCornerDate = \"topRightCornerDate_350f6485\";\nexport const bottomLeftCornerDate = \"bottomLeftCornerDate_350f6485\";\nexport const bottomRightCornerDate = \"bottomRightCornerDate_350f6485\";\nexport const weekSelection = \"weekSelection_350f6485\";\nexport const monthSelection = \"monthSelection_350f6485\";\nexport const topDate = \"topDate_350f6485\";\nexport const rightDate = \"rightDate_350f6485\";\nexport const bottomDate = \"bottomDate_350f6485\";\nexport const leftdate = \"leftdate_350f6485\";","import * as React from 'react';\r\nimport { IRefObject, IRenderFunction } from '../../Utilities';\r\nimport { PersonaBase } from './Persona.base';\r\nimport { ImageLoadState } from '../../Image';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IStyleFunctionOrObject } from '../../Utilities';\r\nimport { PersonaCoinBase } from './PersonaCoin/PersonaCoin.base';\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersona {}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaSharedProps extends React.HTMLAttributes<PersonaBase | PersonaCoinBase | HTMLDivElement> {\r\n  /**\r\n   * Primary text to display, usually the name of the person.\r\n   */\r\n  text?: string;\r\n\r\n  /**\r\n   * Decides the size of the control.\r\n   * @defaultvalue PersonaSize.size48\r\n   */\r\n  size?: PersonaSize;\r\n\r\n  /**\r\n   * Optional custom renderer for the coin\r\n   */\r\n  onRenderCoin?: IRenderFunction<IPersonaSharedProps>;\r\n\r\n  /**\r\n   * If true, adds the css class 'is-fadeIn' to the image.\r\n   */\r\n  imageShouldFadeIn?: boolean;\r\n\r\n  /**\r\n   * If true, the image starts as visible and is hidden on error. Otherwise, the image is hidden until\r\n   * it is successfully loaded. This disables imageShouldFadeIn.\r\n   * @defaultvalue false\r\n   */\r\n  imageShouldStartVisible?: boolean;\r\n\r\n  /**\r\n   * Url to the image to use, should be a square aspect ratio and big enough to fit in the image area.\r\n   */\r\n  imageUrl?: string;\r\n\r\n  /**\r\n   * Alt text for the image to use. Defaults to an empty string.\r\n   */\r\n  imageAlt?: string;\r\n\r\n  /**\r\n   * The user's initials to display in the image area when there is no image.\r\n   * @defaultvalue [Derived from text]\r\n   */\r\n  imageInitials?: string;\r\n\r\n  /**\r\n   * Whether initials are calculated for phone numbers and number sequences.\r\n   * Example: Set property to true to get initials for project names consisting of numbers only.\r\n   * @defaultvalue false\r\n   */\r\n  allowPhoneInitials?: boolean;\r\n\r\n  /**\r\n   * Optional custom renderer for the initials\r\n   */\r\n  onRenderInitials?: IRenderFunction<IPersonaSharedProps>;\r\n\r\n  /**\r\n   * Optional callback for when loading state of the photo changes\r\n   */\r\n  onPhotoLoadingStateChange?: (newImageLoadState: ImageLoadState) => void;\r\n\r\n  /**\r\n   * The background color when the user's initials are displayed.\r\n   * @defaultvalue [Derived from text]\r\n   */\r\n  initialsColor?: PersonaInitialsColor | string;\r\n\r\n  /**\r\n   * Presence of the person to display - will not display presence if undefined.\r\n   * @defaultvalue PersonaPresence.none\r\n   */\r\n  presence?: PersonaPresence;\r\n\r\n  /**\r\n   * Secondary text to display, usually the role of the user.\r\n   */\r\n  secondaryText?: string;\r\n\r\n  /**\r\n   * Tertiary text to display, usually the status of the user. The tertiary text will only be shown when using Size72 or Size100.\r\n   */\r\n  tertiaryText?: string;\r\n\r\n  /**\r\n   * Optional text to display, usually a custom message set. The optional text will only be shown when using Size100.\r\n   */\r\n  optionalText?: string;\r\n\r\n  /**\r\n   * Whether to not render persona details, and just render the persona image/initials.\r\n   */\r\n  hidePersonaDetails?: boolean;\r\n\r\n  /*\r\n   * If true, show the secondary text line regardless of the size of the persona\r\n   */\r\n  showSecondaryText?: boolean;\r\n\r\n  /**\r\n   * If true, show the special coin for unknown persona.\r\n   * It has '?' in place of initials, with static font and background colors\r\n   */\r\n  showUnknownPersonaCoin?: boolean;\r\n\r\n  /**\r\n   * If true renders the initials while the image is loading.\r\n   * This only applies when an imageUrl is provided.\r\n   * @defaultvalue false\r\n   */\r\n  showInitialsUntilImageLoads?: boolean;\r\n\r\n  /**\r\n   * Optional custom persona coin size in pixel.\r\n   */\r\n  coinSize?: number;\r\n\r\n  /**\r\n   * Optional HTML element props for Persona coin.\r\n   */\r\n  coinProps?: IPersonaCoinProps;\r\n\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Primary text to display, usually the name of the person.\r\n   * @deprecated Use `text` instead.\r\n   */\r\n  primaryText?: string;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaProps extends IPersonaSharedProps {\r\n  /**\r\n   * Optional callback to access the IPersona interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IPersona>;\r\n\r\n  /**\r\n   * Additional CSS class(es) to apply to the Persona\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of variant rules\r\n   */\r\n  styles?: IStyleFunctionOrObject<IPersonaStyleProps, IPersonaStyles>;\r\n\r\n  /**\r\n   * Optional custom renderer for the primary text.\r\n   */\r\n  onRenderPrimaryText?: IRenderFunction<IPersonaProps>;\r\n\r\n  /**\r\n   * Optional custom renderer for the secondary text.\r\n   */\r\n  onRenderSecondaryText?: IRenderFunction<IPersonaProps>;\r\n\r\n  /**\r\n   * Optional custom renderer for the tertiary text.\r\n   */\r\n  onRenderTertiaryText?: IRenderFunction<IPersonaProps>;\r\n\r\n  /**\r\n   * Optional custom renderer for the optional text.\r\n   */\r\n  onRenderOptionalText?: IRenderFunction<IPersonaProps>;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaStyleProps {\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Custom class name.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Optional custom persona coin size in pixel.\r\n   */\r\n  coinSize?: number;\r\n\r\n  /**\r\n   * Decides the size of the control.\r\n   * @defaultvalue PersonaSize.size48\r\n   */\r\n  size?: PersonaSize;\r\n\r\n  /**\r\n   * Presence of the person to display - will not display presence if undefined.\r\n   * @defaultvalue PersonaPresence.none\r\n   */\r\n  presence?: PersonaPresence;\r\n\r\n  /*\r\n   * If true, show the secondary text line regardless of the size of the persona\r\n   */\r\n  showSecondaryText?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaStyles {\r\n  root: IStyle;\r\n  details: IStyle;\r\n  primaryText: IStyle;\r\n  secondaryText: IStyle;\r\n  tertiaryText: IStyle;\r\n  optionalText: IStyle;\r\n  textContent: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaCoinProps extends IPersonaSharedProps {\r\n  /**\r\n   * Gets the component ref.\r\n   */\r\n  componentRef?: IRefObject<{}>;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules\r\n   */\r\n  styles?: IStyleFunctionOrObject<IPersonaCoinStyleProps, IPersonaCoinStyles>;\r\n\r\n  /**\r\n   * Additional css class to apply to the PersonaCoin\r\n   * @defaultvalue undefined\r\n   */\r\n  className?: string;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaCoinStyleProps {\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Custom class name.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Decides the size of the control.\r\n   * @defaultvalue PersonaSize.size48\r\n   */\r\n  size?: PersonaSize;\r\n\r\n  /**\r\n   * Optional custom persona coin size in pixel.\r\n   */\r\n  coinSize?: number;\r\n\r\n  /**\r\n   * Decides whether to display coin for unknown persona\r\n   */\r\n  showUnknownPersonaCoin?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaCoinStyles {\r\n  coin: IStyle;\r\n  imageArea: IStyle;\r\n  image: IStyle;\r\n  initials: IStyle;\r\n  size10WithoutPresenceIcon: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaPresenceProps extends IPersonaSharedProps {\r\n  /**\r\n   * Gets the component ref.\r\n   */\r\n  componentRef?: IRefObject<{}>;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules\r\n   */\r\n  styles?: IStyleFunctionOrObject<IPersonaPresenceStyleProps, IPersonaPresenceStyles>;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaPresenceStyleProps {\r\n  /**\r\n   * Theme provided by High-Order Component.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Custom class name.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Presence of the person to display - will not display presence if undefined.\r\n   * @defaultvalue PersonaPresence.none\r\n   */\r\n  presence?: PersonaPresence;\r\n\r\n  /**\r\n   * Decides the size of the control.\r\n   * @defaultvalue PersonaSize.size48\r\n   */\r\n  size?: PersonaSize;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport interface IPersonaPresenceStyles {\r\n  presence: IStyle;\r\n  presenceIcon: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport enum PersonaSize {\r\n  /**\r\n   * tiny size has been deprecated in favor of standardized numeric sizing. Use `size10` instead.\r\n   * @deprecated Use `size10` instead.\r\n   */\r\n  tiny = 0,\r\n  /**\r\n   *\r\n   * extraExtraSmall size has been deprecated in favor of standardized numeric sizing. Use `size24` instead.\r\n   * @deprecated Use `size24` instead.\r\n   */\r\n  extraExtraSmall = 1,\r\n  /**\r\n   * extraSmall size has been deprecated in favor of standardized numeric sizing. Use `size32` instead.\r\n   * @deprecated Use `size32` instead.\r\n   */\r\n  extraSmall = 2,\r\n  /**\r\n   * small size has been deprecated in favor of standardized numeric sizing. Use `size40` instead.\r\n   * @deprecated Use `size40` instead.\r\n   */\r\n  small = 3,\r\n  /**\r\n   * regular size has been deprecated in favor of standardized numeric sizing. Use `size48` instead.\r\n   * @deprecated Use `size48` instead.\r\n   */\r\n  regular = 4,\r\n  /**\r\n   * large size has been deprecated in favor of standardized numeric sizing. Use `size72` instead.\r\n   * @deprecated Use `size72` instead.\r\n   */\r\n  large = 5,\r\n  /**\r\n   * extraLarge size has been deprecated in favor of standardized numeric sizing. Use `size100` instead.\r\n   * @deprecated Use `size100` instead.\r\n   */\r\n  extraLarge = 6,\r\n  size28 = 7,\r\n  size16 = 8,\r\n  size10 = 9,\r\n  size24 = 10,\r\n  size32 = 11,\r\n  size40 = 12,\r\n  size48 = 13,\r\n  size72 = 14,\r\n  size100 = 15\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport enum PersonaPresence {\r\n  none = 0,\r\n  offline = 1,\r\n  online = 2,\r\n  away = 3,\r\n  dnd = 4,\r\n  blocked = 5,\r\n  busy = 6\r\n}\r\n\r\n/**\r\n * {@docCategory Persona}\r\n */\r\nexport enum PersonaInitialsColor {\r\n  lightBlue = 0,\r\n  blue = 1,\r\n  darkBlue = 2,\r\n  teal = 3,\r\n  lightGreen = 4,\r\n  green = 5,\r\n  darkGreen = 6,\r\n  lightPink = 7,\r\n  pink = 8,\r\n  magenta = 9,\r\n  purple = 10,\r\n  /**\r\n   * Black is a color that can result in offensive persona coins with some initials combinations, so it can only be set with overrides\r\n   */\r\n  black = 11,\r\n  orange = 12,\r\n  /**\r\n   * Red is a color that often has a special meaning, so it is considered a reserved color and can only be set with overrides\r\n   */\r\n  red = 13,\r\n  darkRed = 14,\r\n  /**\r\n   * Transparent is not intended to be used with typical initials due to accessibility issues.\r\n   * Its primary use is for overflow buttons, so it is considered a reserved color and can only be set with overrides.\r\n   */\r\n  transparent = 15,\r\n  violet = 16\r\n}\r\n","import { PersonaPresence, PersonaSize } from './Persona.types';\r\n\r\n// Persona Sizes\r\nexport namespace personaSize {\r\n  export const size10 = '20px';\r\n  export const size16 = '16px';\r\n  export const size24 = '24px';\r\n  export const size28 = '28px';\r\n  export const size32 = '32px';\r\n  export const size40 = '40px';\r\n  export const size48 = '48px';\r\n  export const size72 = '72px';\r\n  export const size100 = '100px';\r\n}\r\n\r\n// Persona Presence Sizes\r\nexport namespace personaPresenceSize {\r\n  export const size6 = '6px';\r\n  export const size8 = '8px';\r\n  export const size12 = '12px';\r\n  export const size20 = '20px';\r\n  export const size28 = '28px';\r\n  export const border = '2px';\r\n}\r\n\r\nexport const sizeBoolean = (size: PersonaSize) => ({\r\n  isSize10: size === PersonaSize.size10 || size === PersonaSize.tiny,\r\n  isSize16: size === PersonaSize.size16,\r\n  isSize24: size === PersonaSize.size24 || size === PersonaSize.extraExtraSmall,\r\n  isSize28: size === PersonaSize.size28 || size === PersonaSize.extraSmall,\r\n  isSize32: size === PersonaSize.size32,\r\n  isSize40: size === PersonaSize.size40 || size === PersonaSize.small,\r\n  isSize48: size === PersonaSize.size48 || size === PersonaSize.regular,\r\n  isSize72: size === PersonaSize.size72 || size === PersonaSize.large,\r\n  isSize100: size === PersonaSize.size100 || size === PersonaSize.extraLarge\r\n});\r\n\r\nexport const sizeToPixels: { [key: number]: number } = {\r\n  [PersonaSize.tiny]: 10,\r\n  [PersonaSize.extraExtraSmall]: 24,\r\n  [PersonaSize.extraSmall]: 28,\r\n  [PersonaSize.small]: 40,\r\n  [PersonaSize.regular]: 48,\r\n  [PersonaSize.large]: 72,\r\n  [PersonaSize.extraLarge]: 100,\r\n  [PersonaSize.size10]: 10,\r\n  [PersonaSize.size16]: 16,\r\n  [PersonaSize.size24]: 24,\r\n  [PersonaSize.size28]: 28,\r\n  [PersonaSize.size32]: 32,\r\n  [PersonaSize.size40]: 40,\r\n  [PersonaSize.size48]: 48,\r\n  [PersonaSize.size72]: 72,\r\n  [PersonaSize.size100]: 100\r\n};\r\n\r\nexport const presenceBoolean = (presence: PersonaPresence) => ({\r\n  isAvailable: presence === PersonaPresence.online,\r\n  isAway: presence === PersonaPresence.away,\r\n  isBlocked: presence === PersonaPresence.blocked,\r\n  isBusy: presence === PersonaPresence.busy,\r\n  isDoNotDisturb: presence === PersonaPresence.dnd,\r\n  isOffline: presence === PersonaPresence.offline\r\n});\r\n","import * as React from 'react';\r\nimport { BaseComponent, KeyCodes, css, getId, getRTL, getRTLSafeKeyCode, format, IRefObject, findIndex, find } from '../../Utilities';\r\nimport { ICalendarStrings, ICalendarIconStrings, ICalendarFormatDateCallbacks } from './Calendar.types';\r\nimport { DayOfWeek, FirstWeekOfYear, DateRangeType } from '../../utilities/dateValues/DateValues';\r\nimport { FocusZone } from '../../FocusZone';\r\nimport { Icon } from '../../Icon';\r\nimport {\r\n  addDays,\r\n  addWeeks,\r\n  addMonths,\r\n  compareDates,\r\n  compareDatePart,\r\n  getDateRangeArray,\r\n  isInDateRangeArray,\r\n  getWeekNumber,\r\n  getWeekNumbersInMonth,\r\n  getMonthStart,\r\n  getMonthEnd\r\n} from '../../utilities/dateMath/DateMath';\r\n\r\nimport * as stylesImport from './Calendar.scss';\r\nconst styles: any = stylesImport;\r\n\r\nconst DAYS_IN_WEEK = 7;\r\n\r\nexport interface IDayInfo {\r\n  key: string;\r\n  date: string;\r\n  originalDate: Date;\r\n  isInMonth: boolean;\r\n  isToday: boolean;\r\n  isSelected: boolean;\r\n  isInBounds: boolean;\r\n  onSelected: (ev: React.SyntheticEvent<HTMLElement>) => void;\r\n}\r\n\r\nexport interface ICalendarDay {\r\n  focus(): void;\r\n}\r\n\r\nexport interface ICalendarDayProps extends React.ClassAttributes<CalendarDay> {\r\n  componentRef?: IRefObject<ICalendarDay>;\r\n  strings: ICalendarStrings;\r\n  selectedDate: Date;\r\n  navigatedDate: Date;\r\n  onSelectDate: (date: Date, selectedDateRangeArray?: Date[]) => void;\r\n  onNavigateDate: (date: Date, focusOnNavigatedDay: boolean) => void;\r\n  onDismiss?: () => void;\r\n  firstDayOfWeek: DayOfWeek;\r\n  dateRangeType: DateRangeType;\r\n  autoNavigateOnSelection: boolean;\r\n  navigationIcons: ICalendarIconStrings;\r\n  today?: Date;\r\n  onHeaderSelect?: (focus: boolean) => void;\r\n  showWeekNumbers?: boolean;\r\n  firstWeekOfYear: FirstWeekOfYear;\r\n  dateTimeFormatter: ICalendarFormatDateCallbacks;\r\n  showSixWeeksByDefault?: boolean;\r\n  minDate?: Date;\r\n  maxDate?: Date;\r\n  restrictedDates?: Date[];\r\n  workWeekDays?: DayOfWeek[];\r\n  showCloseButton?: boolean;\r\n  allFocusable?: boolean;\r\n}\r\n\r\nexport interface ICalendarDayState {\r\n  activeDescendantId?: string;\r\n  weeks?: IDayInfo[][];\r\n}\r\n\r\ninterface IWeekCorners {\r\n  [key: string]: string;\r\n}\r\n\r\nexport class CalendarDay extends BaseComponent<ICalendarDayProps, ICalendarDayState> {\r\n  private navigatedDay: HTMLElement | null;\r\n  private days: { [key: string]: HTMLElement | null } = {};\r\n\r\n  public constructor(props: ICalendarDayProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      activeDescendantId: getId('DatePickerDay-active'),\r\n      weeks: this._getWeeks(props)\r\n    };\r\n\r\n    this._onSelectNextMonth = this._onSelectNextMonth.bind(this);\r\n    this._onSelectPrevMonth = this._onSelectPrevMonth.bind(this);\r\n    this._onClose = this._onClose.bind(this);\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: ICalendarDayProps): void {\r\n    this.setState({\r\n      weeks: this._getWeeks(nextProps)\r\n    });\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { activeDescendantId, weeks } = this.state;\r\n    const {\r\n      firstDayOfWeek,\r\n      strings,\r\n      navigatedDate,\r\n      selectedDate,\r\n      dateRangeType,\r\n      navigationIcons,\r\n      showWeekNumbers,\r\n      firstWeekOfYear,\r\n      dateTimeFormatter,\r\n      minDate,\r\n      maxDate,\r\n      showCloseButton,\r\n      allFocusable\r\n    } = this.props;\r\n    const dayPickerId = getId('DatePickerDay-dayPicker');\r\n    const monthAndYearId = getId('DatePickerDay-monthAndYear');\r\n    const leftNavigationIcon = navigationIcons.leftNavigation;\r\n    const rightNavigationIcon = navigationIcons.rightNavigation;\r\n    const closeNavigationIcon = navigationIcons.closeIcon;\r\n    const weekNumbers = showWeekNumbers ? getWeekNumbersInMonth(weeks!.length, firstDayOfWeek, firstWeekOfYear, navigatedDate) : null;\r\n    const selectedDateWeekNumber = showWeekNumbers ? getWeekNumber(selectedDate, firstDayOfWeek, firstWeekOfYear) : undefined;\r\n\r\n    // When the month is highlighted get the corner dates so that styles can be added to them\r\n    const weekCorners: IWeekCorners = this._getWeekCornerStyles(weeks!, dateRangeType);\r\n\r\n    // determine if previous/next months are in bounds\r\n    const prevMonthInBounds = minDate ? compareDatePart(minDate, getMonthStart(navigatedDate)) < 0 : true;\r\n    const nextMonthInBounds = maxDate ? compareDatePart(getMonthEnd(navigatedDate), maxDate) < 0 : true;\r\n\r\n    return (\r\n      <div\r\n        className={css(\r\n          'ms-DatePicker-dayPicker',\r\n          styles.dayPicker,\r\n          showWeekNumbers && 'ms-DatePicker-showWeekNumbers' && (getRTL() ? styles.showWeekNumbersRTL : styles.showWeekNumbers)\r\n        )}\r\n        id={dayPickerId}\r\n      >\r\n        <div className={css('ms-DatePicker-header', styles.header)}>\r\n          <div aria-live=\"polite\" aria-relevant=\"text\" aria-atomic=\"true\" id={monthAndYearId} className={styles.monthAndYear}>\r\n            {this.props.onHeaderSelect ? (\r\n              <div\r\n                className={css('ms-DatePicker-monthAndYear js-showMonthPicker', styles.headerToggleView)}\r\n                onClick={this._onHeaderSelect}\r\n                onKeyDown={this._onHeaderKeyDown}\r\n                aria-label={dateTimeFormatter.formatMonthYear(navigatedDate, strings)}\r\n                role=\"button\"\r\n                tabIndex={0}\r\n              >\r\n                {dateTimeFormatter.formatMonthYear(navigatedDate, strings)}\r\n              </div>\r\n            ) : (\r\n              <div className={css('ms-DatePicker-monthAndYear', styles.monthAndYear)}>\r\n                {dateTimeFormatter.formatMonthYear(navigatedDate, strings)}\r\n              </div>\r\n            )}\r\n          </div>\r\n          <div className={css('ms-DatePicker-monthComponents', styles.monthComponents)}>\r\n            <div className={css('ms-DatePicker-navContainer', styles.navContainer)}>\r\n              <button\r\n                className={css('ms-DatePicker-prevMonth js-prevMonth', styles.prevMonth, {\r\n                  ['ms-DatePicker-prevMonth--disabled ' + styles.prevMonthIsDisabled]: !prevMonthInBounds\r\n                })}\r\n                disabled={!allFocusable && !prevMonthInBounds}\r\n                aria-disabled={!prevMonthInBounds}\r\n                onClick={prevMonthInBounds ? this._onSelectPrevMonth : undefined}\r\n                onKeyDown={prevMonthInBounds ? this._onPrevMonthKeyDown : undefined}\r\n                aria-controls={dayPickerId}\r\n                aria-label={\r\n                  strings.prevMonthAriaLabel\r\n                    ? strings.prevMonthAriaLabel + ' ' + strings.months[addMonths(navigatedDate, -1).getMonth()]\r\n                    : undefined\r\n                }\r\n                role=\"button\"\r\n                type=\"button\"\r\n              >\r\n                <Icon iconName={leftNavigationIcon} />\r\n              </button>\r\n              <button\r\n                className={css('ms-DatePicker-nextMonth js-nextMonth', styles.nextMonth, {\r\n                  ['ms-DatePicker-nextMonth--disabled ' + styles.nextMonthIsDisabled]: !nextMonthInBounds\r\n                })}\r\n                disabled={!allFocusable && !nextMonthInBounds}\r\n                aria-disabled={!nextMonthInBounds}\r\n                onClick={nextMonthInBounds ? this._onSelectNextMonth : undefined}\r\n                onKeyDown={nextMonthInBounds ? this._onNextMonthKeyDown : undefined}\r\n                aria-controls={dayPickerId}\r\n                aria-label={\r\n                  strings.nextMonthAriaLabel\r\n                    ? strings.nextMonthAriaLabel + ' ' + strings.months[addMonths(navigatedDate, 1).getMonth()]\r\n                    : undefined\r\n                }\r\n                role=\"button\"\r\n                type=\"button\"\r\n              >\r\n                <Icon iconName={rightNavigationIcon} />\r\n              </button>\r\n              {showCloseButton && (\r\n                <button\r\n                  className={css('ms-DatePicker-closeButton js-closeButton', styles.closeButton)}\r\n                  onClick={this._onClose}\r\n                  onKeyDown={this._onCloseButtonKeyDown}\r\n                  aria-label={strings.closeButtonAriaLabel}\r\n                  role=\"button\"\r\n                  type=\"button\"\r\n                >\r\n                  <Icon iconName={closeNavigationIcon} />\r\n                </button>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <FocusZone>\r\n          <table\r\n            className={css('ms-DatePicker-table', styles.table)}\r\n            aria-readonly=\"true\"\r\n            aria-multiselectable=\"false\"\r\n            aria-labelledby={monthAndYearId}\r\n            aria-activedescendant={activeDescendantId}\r\n            role=\"grid\"\r\n          >\r\n            <thead>\r\n              <tr>\r\n                {showWeekNumbers && <th className={css('ms-DatePicker-weekday', styles.weekday)} />}\r\n                {strings.shortDays.map((val, index) => (\r\n                  <th\r\n                    className={css('ms-DatePicker-weekday', styles.weekday)}\r\n                    role=\"columnheader\"\r\n                    scope=\"col\"\r\n                    key={index}\r\n                    title={strings.days[(index + firstDayOfWeek) % DAYS_IN_WEEK]}\r\n                    aria-label={strings.days[(index + firstDayOfWeek) % DAYS_IN_WEEK]}\r\n                    data-is-focusable={allFocusable ? true : undefined}\r\n                  >\r\n                    {strings.shortDays[(index + firstDayOfWeek) % DAYS_IN_WEEK]}\r\n                  </th>\r\n                ))}\r\n              </tr>\r\n            </thead>\r\n            <tbody\r\n              onMouseLeave={dateRangeType !== DateRangeType.Day ? this._onTableMouseLeave : undefined}\r\n              onMouseUp={dateRangeType !== DateRangeType.Day ? this._onTableMouseUp : undefined}\r\n            >\r\n              {weeks!.map((week, weekIndex) => (\r\n                <tr key={weekNumbers ? weekNumbers[weekIndex] : weekIndex}>\r\n                  {showWeekNumbers && weekNumbers && (\r\n                    <th\r\n                      className={css('ms-DatePicker-weekNumbers', 'ms-DatePicker-weekday', styles.weekday, styles.weekNumbers)}\r\n                      key={weekIndex}\r\n                      title={\r\n                        weekNumbers && strings.weekNumberFormatString && format(strings.weekNumberFormatString, weekNumbers[weekIndex])\r\n                      }\r\n                      aria-label={\r\n                        weekNumbers && strings.weekNumberFormatString && format(strings.weekNumberFormatString, weekNumbers[weekIndex])\r\n                      }\r\n                      scope=\"row\"\r\n                    >\r\n                      <div\r\n                        className={css('ms-DatePicker-day', styles.day, {\r\n                          ['ms-DatePicker-week--highlighted ' + styles.weekIsHighlighted]: selectedDateWeekNumber === weekNumbers[weekIndex]\r\n                        })}\r\n                      >\r\n                        <span>{weekNumbers[weekIndex]}</span>\r\n                      </div>\r\n                    </th>\r\n                  )}\r\n                  {week.map((day, dayIndex) => {\r\n                    const isNavigatedDate = compareDates(navigatedDate, day.originalDate);\r\n                    return (\r\n                      <td\r\n                        key={day.key}\r\n                        onClick={day.isInBounds ? day.onSelected : undefined}\r\n                        className={css(\r\n                          styles.dayWrapper,\r\n                          'ms-DatePicker-day',\r\n                          this._getHighlightedCornerStyle(weekCorners, dayIndex, weekIndex),\r\n                          {\r\n                            ['ms-DatePicker-weekBackground ' + styles.weekBackground]:\r\n                              day.isSelected && (dateRangeType === DateRangeType.Week || dateRangeType === DateRangeType.WorkWeek),\r\n                            ['ms-DatePicker-dayBackground ' + styles.dayBackground]: dateRangeType === DateRangeType.Day,\r\n                            ['ms-DatePicker-day--highlighted ' + styles.dayIsHighlighted]:\r\n                              day.isSelected && dateRangeType === DateRangeType.Day,\r\n                            ['ms-DatePicker-day--infocus ' + styles.dayIsFocused]: day.isInBounds && day.isInMonth,\r\n                            ['ms-DatePicker-day--outfocus ' + styles.dayIsUnfocused]: day.isInBounds && !day.isInMonth,\r\n                            [styles.daySelection]: dateRangeType === DateRangeType.Day,\r\n                            [styles.weekSelection]: dateRangeType === DateRangeType.Week || dateRangeType === DateRangeType.WorkWeek,\r\n                            [styles.monthSelection]: dateRangeType === DateRangeType.Month\r\n                          }\r\n                        )}\r\n                        ref={element => this._setDayCellRef(element, day, isNavigatedDate)}\r\n                        onMouseOver={\r\n                          dateRangeType !== DateRangeType.Day && day.isInBounds\r\n                            ? this._onDayMouseOver(day.originalDate, weekIndex, dayIndex, dateRangeType)\r\n                            : undefined\r\n                        }\r\n                        onMouseLeave={\r\n                          dateRangeType !== DateRangeType.Day && day.isInBounds\r\n                            ? this._onDayMouseLeave(day.originalDate, weekIndex, dayIndex, dateRangeType)\r\n                            : undefined\r\n                        }\r\n                        onMouseDown={\r\n                          dateRangeType !== DateRangeType.Day && day.isInBounds\r\n                            ? this._onDayMouseDown(day.originalDate, weekIndex, dayIndex, dateRangeType)\r\n                            : undefined\r\n                        }\r\n                        onMouseUp={\r\n                          dateRangeType !== DateRangeType.Day && day.isInBounds\r\n                            ? this._onDayMouseUp(day.originalDate, weekIndex, dayIndex, dateRangeType)\r\n                            : undefined\r\n                        }\r\n                        role={'gridcell'}\r\n                      >\r\n                        <button\r\n                          key={day.key + 'button'}\r\n                          onClick={day.isInBounds ? day.onSelected : undefined}\r\n                          className={css(styles.day, 'ms-DatePicker-day-button', {\r\n                            ['ms-DatePicker-day--disabled ' + styles.dayIsDisabled]: !day.isInBounds,\r\n                            ['ms-DatePicker-day--today ' + styles.dayIsToday]: day.isToday\r\n                          })}\r\n                          role=\"gridcell\"\r\n                          onKeyDown={this._onDayKeyDown(day.originalDate, weekIndex, dayIndex)}\r\n                          aria-label={dateTimeFormatter.formatMonthDayYear(day.originalDate, strings)}\r\n                          id={isNavigatedDate ? activeDescendantId : undefined}\r\n                          aria-readonly={true}\r\n                          aria-selected={day.isInBounds ? day.isSelected : undefined}\r\n                          data-is-focusable={allFocusable || (day.isInBounds ? true : undefined)}\r\n                          ref={element => this._setDayRef(element, day, isNavigatedDate)}\r\n                          disabled={!allFocusable && !day.isInBounds}\r\n                          aria-disabled={!day.isInBounds}\r\n                          type=\"button\"\r\n                        >\r\n                          <span aria-hidden=\"true\">{dateTimeFormatter.formatDay(day.originalDate)}</span>\r\n                        </button>\r\n                      </td>\r\n                    );\r\n                  })}\r\n                </tr>\r\n              ))}\r\n            </tbody>\r\n          </table>\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    if (this.navigatedDay) {\r\n      this.navigatedDay.tabIndex = 0;\r\n      this.navigatedDay.focus();\r\n    }\r\n  }\r\n\r\n  private _setDayRef(element: HTMLElement | null, day: IDayInfo, isNavigatedDate: boolean): void {\r\n    if (isNavigatedDate) {\r\n      this.navigatedDay = element;\r\n    }\r\n  }\r\n\r\n  private _setDayCellRef(element: HTMLElement | null, day: IDayInfo, isNavigatedDate: boolean): void {\r\n    this.days[day.key] = element;\r\n  }\r\n\r\n  private _getWeekCornerStyles(weeks: IDayInfo[][], dateRangeType: DateRangeType): IWeekCorners {\r\n    const weekCornersStyled: any = {};\r\n\r\n    switch (dateRangeType) {\r\n      case DateRangeType.Month:\r\n        /* need to handle setting all of the corners on arbitrarily shaped blobs\r\n              __\r\n           __|A |\r\n          |B |C |__\r\n          |D |E |F |\r\n\r\n          in this case, A needs top left rounded, top right rounded\r\n          B needs top left rounded\r\n          C doesn't need any rounding\r\n          D needs bottom left rounded\r\n          E doesn't need any rounding\r\n          F needs top right rounding\r\n        */\r\n\r\n        // if there's an item above, lose both top corners. Item below, lose both bottom corners, etc.\r\n        weeks.forEach((week: IDayInfo[], weekIndex: number) => {\r\n          week.forEach((day: IDayInfo, dayIndex: number) => {\r\n            const above =\r\n              weeks[weekIndex - 1] &&\r\n              weeks[weekIndex - 1][dayIndex] &&\r\n              weeks[weekIndex - 1][dayIndex].originalDate.getMonth() === weeks[weekIndex][dayIndex].originalDate.getMonth();\r\n            const below =\r\n              weeks[weekIndex + 1] &&\r\n              weeks[weekIndex + 1][dayIndex] &&\r\n              weeks[weekIndex + 1][dayIndex].originalDate.getMonth() === weeks[weekIndex][dayIndex].originalDate.getMonth();\r\n            const left =\r\n              weeks[weekIndex][dayIndex - 1] &&\r\n              weeks[weekIndex][dayIndex - 1].originalDate.getMonth() === weeks[weekIndex][dayIndex].originalDate.getMonth();\r\n            const right =\r\n              weeks[weekIndex][dayIndex + 1] &&\r\n              weeks[weekIndex][dayIndex + 1].originalDate.getMonth() === weeks[weekIndex][dayIndex].originalDate.getMonth();\r\n\r\n            const roundedTopLeft = !above && !left;\r\n            const roundedTopRight = !above && !right;\r\n            const roundedBottomLeft = !below && !left;\r\n            const roundedBottomRight = !below && !right;\r\n\r\n            let style = '';\r\n            if (roundedTopLeft) {\r\n              style = getRTL() ? style.concat(styles.topRightCornerDate + ' ') : style.concat(styles.topLeftCornerDate + ' ');\r\n            }\r\n            if (roundedTopRight) {\r\n              style = getRTL() ? style.concat(styles.topLeftCornerDate + ' ') : style.concat(styles.topRightCornerDate + ' ');\r\n            }\r\n            if (roundedBottomLeft) {\r\n              style = getRTL() ? style.concat(styles.bottomRightCornerDate + ' ') : style.concat(styles.bottomLeftCornerDate + ' ');\r\n            }\r\n            if (roundedBottomRight) {\r\n              style = getRTL() ? style.concat(styles.bottomLeftCornerDate + ' ') : style.concat(styles.bottomRightCornerDate + ' ');\r\n            }\r\n\r\n            if (!above) {\r\n              style = style.concat(styles.topDate + ' ');\r\n            }\r\n\r\n            if (!below) {\r\n              style = style.concat(styles.bottomDate + ' ');\r\n            }\r\n\r\n            if (!right) {\r\n              style = style.concat(styles.rightDate + ' ');\r\n            }\r\n\r\n            if (!left) {\r\n              style = style.concat(styles.leftdate + ' ');\r\n            }\r\n\r\n            weekCornersStyled[weekIndex + '_' + dayIndex] = style;\r\n          });\r\n        });\r\n        break;\r\n      case DateRangeType.Week:\r\n      case DateRangeType.WorkWeek:\r\n        weeks.forEach((week: IDayInfo[], weekIndex: number) => {\r\n          const minIndex = findIndex(week, (item: IDayInfo) => {\r\n            return item.isInBounds;\r\n          });\r\n          const maxIndex = this._findLastIndex(week, (item: IDayInfo) => {\r\n            return item.isInBounds;\r\n          });\r\n\r\n          const leftStyle = styles.topLeftCornerDate + ' ' + styles.bottomLeftCornerDate;\r\n          const rightStyle = styles.topRightCornerDate + ' ' + styles.bottomRightCornerDate;\r\n          weekCornersStyled[weekIndex + '_' + minIndex] = getRTL() ? rightStyle : leftStyle;\r\n          weekCornersStyled[weekIndex + '_' + maxIndex] = getRTL() ? leftStyle : rightStyle;\r\n        });\r\n        break;\r\n    }\r\n\r\n    return weekCornersStyled;\r\n  }\r\n\r\n  private _getHighlightedCornerStyle(weekCorners: IWeekCorners, dayIndex: number, weekIndex: number): string {\r\n    const cornerStyle = weekCorners[weekIndex + '_' + dayIndex] ? weekCorners[weekIndex + '_' + dayIndex] : '';\r\n    return cornerStyle;\r\n  }\r\n\r\n  private _navigateMonthEdge(ev: React.KeyboardEvent<HTMLElement>, date: Date, weekIndex: number, dayIndex: number): void {\r\n    const { minDate, maxDate } = this.props;\r\n    let targetDate: Date | undefined = undefined;\r\n\r\n    if (weekIndex === 0 && ev.which === KeyCodes.up) {\r\n      targetDate = addWeeks(date, -1);\r\n    } else if (weekIndex === this.state.weeks!.length - 1 && ev.which === KeyCodes.down) {\r\n      targetDate = addWeeks(date, 1);\r\n    } else if (dayIndex === 0 && ev.which === getRTLSafeKeyCode(KeyCodes.left)) {\r\n      targetDate = addDays(date, -1);\r\n    } else if (dayIndex === DAYS_IN_WEEK - 1 && ev.which === getRTLSafeKeyCode(KeyCodes.right)) {\r\n      targetDate = addDays(date, 1);\r\n    }\r\n\r\n    // Don't navigate to out-of-bounds date\r\n    if (\r\n      targetDate &&\r\n      (minDate ? compareDatePart(minDate, targetDate) < 1 : true) &&\r\n      (maxDate ? compareDatePart(targetDate, maxDate) < 1 : true)\r\n    ) {\r\n      this.props.onNavigateDate(targetDate, true);\r\n      ev.preventDefault();\r\n    }\r\n  }\r\n\r\n  private _onKeyDown = (callback: () => void, ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter || ev.which === KeyCodes.space) {\r\n      callback();\r\n    }\r\n  };\r\n\r\n  private _onDayKeyDown = (originalDate: Date, weekIndex: number, dayIndex: number): ((ev: React.KeyboardEvent<HTMLElement>) => void) => {\r\n    return (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n      if (ev.which === KeyCodes.enter) {\r\n        this._onSelectDate(originalDate, ev);\r\n      } else {\r\n        this._navigateMonthEdge(ev, originalDate, weekIndex, dayIndex);\r\n      }\r\n    };\r\n  };\r\n\r\n  private _onDayMouseDown = (\r\n    originalDate: Date,\r\n    weekIndex: number,\r\n    dayIndex: number,\r\n    dateRangeType: DateRangeType\r\n  ): ((ev: React.MouseEvent<HTMLElement>) => void) => {\r\n    return (ev: React.MouseEvent<HTMLElement>): void => {\r\n      // set the press styling\r\n      if (dateRangeType === DateRangeType.Month) {\r\n        this._applyFunctionToDayRefs((ref, day) => {\r\n          if (ref && day.originalDate.getMonth() === originalDate.getMonth() && day.isInBounds) {\r\n            ref.classList.add(styles.dayPress);\r\n          }\r\n        });\r\n      } else {\r\n        // week or work week view\r\n        this._applyFunctionToDayRefs((ref, day, dayWeekIndex) => {\r\n          if (ref && dayWeekIndex === weekIndex && day.isInBounds) {\r\n            ref.classList.add(styles.dayPress);\r\n            ref.classList.add(styles.dayIsHighlighted);\r\n          } else if (ref) {\r\n            ref.classList.remove(styles.dayIsHighlighted);\r\n          }\r\n        });\r\n      }\r\n    };\r\n  };\r\n\r\n  private _onDayMouseUp = (\r\n    originalDate: Date,\r\n    weekIndex: number,\r\n    dayIndex: number,\r\n    dateRangeType: DateRangeType\r\n  ): ((ev: React.MouseEvent<HTMLElement>) => void) => {\r\n    return (ev: React.MouseEvent<HTMLElement>): void => {\r\n      // remove press styling\r\n      if (dateRangeType === DateRangeType.Month) {\r\n        this._applyFunctionToDayRefs((ref, day) => {\r\n          if (ref && day.originalDate.getMonth() === originalDate.getMonth() && day.isInBounds) {\r\n            ref.classList.remove(styles.dayPress);\r\n          }\r\n        });\r\n      } else {\r\n        // week or work week view\r\n        this._applyFunctionToDayRefs((ref, day, dayWeekIndex) => {\r\n          if (ref && dayWeekIndex === weekIndex && day.isInBounds) {\r\n            ref.classList.remove(styles.dayPress);\r\n          }\r\n        });\r\n      }\r\n    };\r\n  };\r\n\r\n  private _onDayMouseOver = (\r\n    originalDate: Date,\r\n    weekIndex: number,\r\n    dayIndex: number,\r\n    dateRangeType: DateRangeType\r\n  ): ((ev: React.MouseEvent<HTMLElement>) => void) => {\r\n    return (ev: React.MouseEvent<HTMLElement>): void => {\r\n      // set the hover styling on every day in the same month\r\n      if (dateRangeType === DateRangeType.Month) {\r\n        this._applyFunctionToDayRefs((ref, day) => {\r\n          if (ref && day.originalDate.getMonth() === originalDate.getMonth() && day.isInBounds) {\r\n            ref.classList.add(styles.dayHover);\r\n          }\r\n        });\r\n      } else {\r\n        // week or work week view\r\n        this._applyFunctionToDayRefs((ref, day, dayWeekIndex) => {\r\n          if (ref && dayWeekIndex === weekIndex && day.isInBounds) {\r\n            ref.classList.add(styles.dayHover);\r\n          }\r\n        });\r\n      }\r\n    };\r\n  };\r\n\r\n  private _onDayMouseLeave = (\r\n    originalDate: Date,\r\n    weekIndex: number,\r\n    dayIndex: number,\r\n    dateRangeType: DateRangeType\r\n  ): ((ev: React.MouseEvent<HTMLElement>) => void) => {\r\n    return (ev: React.MouseEvent<HTMLElement>): void => {\r\n      // remove the hover and pressed styling\r\n      if (dateRangeType === DateRangeType.Month) {\r\n        this._applyFunctionToDayRefs((ref, day) => {\r\n          if (ref && day.originalDate.getMonth() === originalDate.getMonth() && day.isInBounds) {\r\n            ref.classList.remove(styles.dayHover);\r\n          }\r\n        });\r\n      } else {\r\n        // week or work week view\r\n        this._applyFunctionToDayRefs((ref, day, dayWeekIndex) => {\r\n          if (ref && dayWeekIndex === weekIndex && day.isInBounds) {\r\n            ref.classList.remove(styles.dayHover);\r\n          }\r\n        });\r\n      }\r\n    };\r\n  };\r\n\r\n  private _onTableMouseLeave = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    if (\r\n      (ev.target as HTMLElement).contains &&\r\n      ev.relatedTarget &&\r\n      (ev.relatedTarget as HTMLElement).contains &&\r\n      (ev.target as HTMLElement).contains(ev.relatedTarget as HTMLElement)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this._applyFunctionToDayRefs((ref, day) => {\r\n      if (ref) {\r\n        ref.classList.remove(styles.dayHover);\r\n        ref.classList.remove(styles.dayPress);\r\n      }\r\n    });\r\n  };\r\n\r\n  private _onTableMouseUp = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    if (\r\n      (ev.target as HTMLElement).contains &&\r\n      ev.relatedTarget &&\r\n      (ev.relatedTarget as HTMLElement).contains &&\r\n      (ev.target as HTMLElement).contains(ev.relatedTarget as HTMLElement)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this._applyFunctionToDayRefs((ref, day) => {\r\n      if (ref) {\r\n        ref.classList.remove(styles.dayPress);\r\n      }\r\n    });\r\n  };\r\n\r\n  private _applyFunctionToDayRefs(func: (ref: HTMLElement | null, day: IDayInfo, weekIndex?: number) => void) {\r\n    if (this.state.weeks) {\r\n      this.state.weeks.map((week: IDayInfo[], weekIndex: number) => {\r\n        week.map(day => {\r\n          const ref = this.days[day.key];\r\n          func(ref, day, weekIndex);\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  private _onSelectDate = (selectedDate: Date, ev: React.SyntheticEvent<HTMLElement>): void => {\r\n    const {\r\n      onSelectDate,\r\n      dateRangeType,\r\n      firstDayOfWeek,\r\n      navigatedDate,\r\n      autoNavigateOnSelection,\r\n      minDate,\r\n      maxDate,\r\n      workWeekDays\r\n    } = this.props;\r\n\r\n    if (ev) {\r\n      ev.stopPropagation();\r\n    }\r\n\r\n    let dateRange = getDateRangeArray(selectedDate, dateRangeType, firstDayOfWeek, workWeekDays);\r\n    if (dateRangeType !== DateRangeType.Day) {\r\n      dateRange = this._getBoundedDateRange(dateRange, minDate, maxDate);\r\n    }\r\n    dateRange = dateRange.filter(d => {\r\n      return !this._getIsRestrictedDate(d);\r\n    });\r\n\r\n    if (onSelectDate) {\r\n      onSelectDate(selectedDate, dateRange);\r\n    }\r\n\r\n    // Navigate to next or previous month if needed\r\n    if (autoNavigateOnSelection && selectedDate.getMonth() !== navigatedDate.getMonth()) {\r\n      const compareResult = compareDatePart(selectedDate, navigatedDate);\r\n      if (compareResult < 0) {\r\n        this._onSelectPrevMonth();\r\n      } else if (compareResult > 0) {\r\n        this._onSelectNextMonth();\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onSelectNextMonth = (): void => {\r\n    this.props.onNavigateDate(addMonths(this.props.navigatedDate, 1), false);\r\n  };\r\n\r\n  private _onSelectPrevMonth = (): void => {\r\n    this.props.onNavigateDate(addMonths(this.props.navigatedDate, -1), false);\r\n  };\r\n\r\n  private _onClose = (): void => {\r\n    if (this.props.onDismiss) {\r\n      this.props.onDismiss();\r\n    }\r\n  };\r\n\r\n  private _onHeaderSelect = (): void => {\r\n    const { onHeaderSelect } = this.props;\r\n    if (onHeaderSelect) {\r\n      onHeaderSelect(true);\r\n    }\r\n  };\r\n\r\n  private _onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    const { onHeaderSelect } = this.props;\r\n    if (onHeaderSelect && (ev.which === KeyCodes.enter || ev.which === KeyCodes.space)) {\r\n      onHeaderSelect(true);\r\n    }\r\n  };\r\n\r\n  private _onPrevMonthKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onKeyDown(this._onSelectPrevMonth, ev);\r\n    }\r\n  };\r\n\r\n  private _onNextMonthKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onKeyDown(this._onSelectNextMonth, ev);\r\n    }\r\n  };\r\n\r\n  private _onCloseButtonKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onKeyDown(this._onClose, ev);\r\n    }\r\n  };\r\n\r\n  private _getWeeks(propsToUse: ICalendarDayProps): IDayInfo[][] {\r\n    const {\r\n      navigatedDate,\r\n      selectedDate,\r\n      dateRangeType,\r\n      firstDayOfWeek,\r\n      today,\r\n      minDate,\r\n      maxDate,\r\n      showSixWeeksByDefault,\r\n      workWeekDays\r\n    } = propsToUse;\r\n    const date = new Date(navigatedDate.getFullYear(), navigatedDate.getMonth(), 1);\r\n    const todaysDate = today || new Date();\r\n    const weeks: IDayInfo[][] = [];\r\n\r\n    // Cycle the date backwards to get to the first day of the week.\r\n    while (date.getDay() !== firstDayOfWeek) {\r\n      date.setDate(date.getDate() - 1);\r\n    }\r\n\r\n    // a flag to indicate whether all days of the week are in the month\r\n    let isAllDaysOfWeekOutOfMonth = false;\r\n\r\n    // in work week view we want to select the whole week\r\n    const selectedDateRangeType = dateRangeType === DateRangeType.WorkWeek ? DateRangeType.Week : dateRangeType;\r\n    let selectedDates = getDateRangeArray(selectedDate, selectedDateRangeType, firstDayOfWeek, workWeekDays);\r\n    if (dateRangeType !== DateRangeType.Day) {\r\n      selectedDates = this._getBoundedDateRange(selectedDates, minDate, maxDate);\r\n    }\r\n\r\n    let shouldGetWeeks = true;\r\n\r\n    for (let weekIndex = 0; shouldGetWeeks; weekIndex++) {\r\n      const week: IDayInfo[] = [];\r\n\r\n      isAllDaysOfWeekOutOfMonth = true;\r\n\r\n      for (let dayIndex = 0; dayIndex < DAYS_IN_WEEK; dayIndex++) {\r\n        const originalDate = new Date(date.toString());\r\n        const dayInfo: IDayInfo = {\r\n          key: date.toString(),\r\n          date: date.getDate().toString(),\r\n          originalDate: originalDate,\r\n          isInMonth: date.getMonth() === navigatedDate.getMonth(),\r\n          isToday: compareDates(todaysDate, date),\r\n          isSelected: isInDateRangeArray(date, selectedDates),\r\n          onSelected: this._onSelectDate.bind(this, originalDate),\r\n          isInBounds:\r\n            (minDate ? compareDatePart(minDate, date) < 1 : true) &&\r\n            (maxDate ? compareDatePart(date, maxDate) < 1 : true) &&\r\n            !this._getIsRestrictedDate(date)\r\n        };\r\n\r\n        week.push(dayInfo);\r\n\r\n        if (dayInfo.isInMonth) {\r\n          isAllDaysOfWeekOutOfMonth = false;\r\n        }\r\n\r\n        date.setDate(date.getDate() + 1);\r\n      }\r\n\r\n      // We append the condition of the loop depending upon the showSixWeeksByDefault prop.\r\n      shouldGetWeeks = showSixWeeksByDefault ? !isAllDaysOfWeekOutOfMonth || weekIndex <= 5 : !isAllDaysOfWeekOutOfMonth;\r\n      if (shouldGetWeeks) {\r\n        weeks.push(week);\r\n      }\r\n    }\r\n\r\n    return weeks;\r\n  }\r\n\r\n  private _getIsRestrictedDate(date: Date): boolean {\r\n    const { restrictedDates } = this.props;\r\n    if (!restrictedDates) {\r\n      return false;\r\n    }\r\n    const restrictedDate = find(restrictedDates, rd => {\r\n      return compareDates(rd, date);\r\n    });\r\n    return restrictedDate ? true : false;\r\n  }\r\n\r\n  private _getBoundedDateRange(dateRange: Date[], minDate?: Date, maxDate?: Date): Date[] {\r\n    let boundedDateRange = [...dateRange];\r\n    if (minDate) {\r\n      boundedDateRange = boundedDateRange.filter(date => compareDatePart(date, minDate as Date) >= 0);\r\n    }\r\n    if (maxDate) {\r\n      boundedDateRange = boundedDateRange.filter(date => compareDatePart(date, maxDate as Date) <= 0);\r\n    }\r\n    return boundedDateRange;\r\n  }\r\n\r\n  /**\r\n   * Returns the index of the last element in the array where the predicate is true, and -1\r\n   * otherwise\r\n   * @param items Array of items to be iterated over using the predicate\r\n   * @param predicate find calls predicate once for each element of the array, in descending\r\n   * order, until it finds one where predicate returns true if such an element is found.\r\n   */\r\n  private _findLastIndex<T>(items: T[], predicate: (item: T) => boolean): number {\r\n    for (let i = items.length - 1; i >= 0; i--) {\r\n      const item = items[i];\r\n\r\n      if (predicate(item)) {\r\n        return i;\r\n      }\r\n    }\r\n\r\n    return -1;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { KeyCodes, css, getRTL } from '../../Utilities';\r\nimport { ICalendarIconStrings } from './Calendar.types';\r\nimport { FocusZone } from '../../FocusZone';\r\nimport * as stylesImport from './Calendar.scss';\r\nimport { Icon } from '../../Icon';\r\n\r\nconst styles: any = stylesImport;\r\n\r\nconst CELL_COUNT = 12;\r\n\r\nexport interface ICalendarYearRange {\r\n  fromYear: number;\r\n  toYear: number;\r\n}\r\n\r\nexport interface ICalendarYearRangeToString {\r\n  (range: ICalendarYearRange): string;\r\n}\r\n\r\nexport interface ICalendarYearStrings {\r\n  rangeAriaLabel?: string | ICalendarYearRangeToString;\r\n  prevRangeAriaLabel?: string | ICalendarYearRangeToString;\r\n  nextRangeAriaLabel?: string | ICalendarYearRangeToString;\r\n}\r\n\r\nexport interface ICalendarYear {\r\n  focus(): void;\r\n}\r\n\r\nexport interface ICalendarYearProps {\r\n  navigationIcons?: ICalendarIconStrings;\r\n  navigatedYear?: number;\r\n  selectedYear?: number;\r\n  minYear?: number;\r\n  maxYear?: number;\r\n  onHeaderSelect?: (focus: boolean) => void;\r\n  onSelectYear?: (year: number) => void;\r\n  onRenderTitle?: (props: ICalendarYearHeaderProps) => React.ReactNode;\r\n  onRenderYear?: (year: number) => React.ReactNode;\r\n  className?: string;\r\n  strings?: ICalendarYearStrings;\r\n}\r\n\r\nconst DefaultCalendarYearStrings: ICalendarYearStrings = {\r\n  prevRangeAriaLabel: undefined,\r\n  nextRangeAriaLabel: undefined\r\n};\r\n\r\nconst DefaultNavigationIcons: ICalendarIconStrings = {\r\n  leftNavigation: 'Up',\r\n  rightNavigation: 'Down',\r\n  closeIcon: 'CalculatorMultiply'\r\n};\r\n\r\ninterface ICalendarYearGridCell {\r\n  focus(): void;\r\n}\r\n\r\ninterface ICalendarYearGridCellProps {\r\n  year: number;\r\n  current?: boolean;\r\n  selected?: boolean;\r\n  disabled?: boolean;\r\n  onSelectYear?: (year: number) => void;\r\n  onRenderYear?: (year: number) => React.ReactNode;\r\n}\r\n\r\nclass CalendarYearGridCell extends React.Component<ICalendarYearGridCellProps, {}> implements ICalendarYearGridCell {\r\n  private _buttonRef = React.createRef<HTMLButtonElement>();\r\n\r\n  public focus() {\r\n    if (this._buttonRef.current) {\r\n      this._buttonRef.current.focus();\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    const { year, selected, disabled, onSelectYear } = this.props;\r\n    return (\r\n      <button\r\n        className={css('ms-DatePicker-yearOption', styles.yearOption, {\r\n          ['ms-DatePicker-day--highlighted ' + styles.yearIsHighlighted]: selected,\r\n          ['ms-DatePicker-yearOption--disabled ' + styles.yearOptionIsDisabled]: disabled\r\n        })}\r\n        type=\"button\"\r\n        role=\"gridcell\"\r\n        onClick={!disabled && onSelectYear ? this._onClick : undefined}\r\n        onKeyDown={!disabled && onSelectYear ? this._onKeyDown : undefined}\r\n        disabled={disabled}\r\n        aria-label={String(year)}\r\n        aria-selected={selected}\r\n        ref={this._buttonRef}\r\n      >\r\n        {this._onRenderYear()}\r\n      </button>\r\n    );\r\n  }\r\n\r\n  private _onRenderYear = () => {\r\n    const { year, onRenderYear } = this.props;\r\n    if (onRenderYear) {\r\n      return onRenderYear(year);\r\n    }\r\n    return year;\r\n  };\r\n\r\n  private _onClick = () => {\r\n    if (this.props.onSelectYear) {\r\n      this.props.onSelectYear(this.props.year);\r\n    }\r\n  };\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    if (this.props.onSelectYear && ev.which === KeyCodes.enter) {\r\n      this.props.onSelectYear(this.props.year);\r\n    }\r\n  };\r\n}\r\n\r\ninterface ICalendarYearGrid {\r\n  focus(): void;\r\n}\r\n\r\ninterface ICalendarYearGridProps extends ICalendarYearProps, ICalendarYearRange {\r\n  selectedYear?: number;\r\n}\r\n\r\nclass CalendarYearGrid extends React.Component<ICalendarYearGridProps, {}> implements ICalendarYearGrid {\r\n  private _selectedCellRef = React.createRef<CalendarYearGridCell>();\r\n  private _currentCellRef = React.createRef<CalendarYearGridCell>();\r\n\r\n  public focus() {\r\n    if (this._selectedCellRef.current) {\r\n      this._selectedCellRef.current.focus();\r\n    } else if (this._currentCellRef.current) {\r\n      this._currentCellRef.current.focus();\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    const { fromYear, toYear } = this.props;\r\n    let year = fromYear;\r\n    const cells = [];\r\n    while (year <= toYear) {\r\n      cells.push(this._renderCell(year));\r\n      year++;\r\n    }\r\n    return (\r\n      <FocusZone>\r\n        <div className={css('ms-DatePicker-optionGrid', styles.optionGrid)} role=\"grid\">\r\n          <div role=\"row\">{cells}</div>\r\n        </div>\r\n      </FocusZone>\r\n    );\r\n  }\r\n\r\n  private _renderCell = (year: number): React.ReactNode => {\r\n    const selected = year === this.props.selectedYear;\r\n    const { minYear, maxYear, onSelectYear } = this.props;\r\n    const disabled = (minYear !== undefined && year < minYear) || (maxYear !== undefined && year > maxYear);\r\n    const current = year === new Date().getFullYear();\r\n    return (\r\n      <CalendarYearGridCell\r\n        key={year}\r\n        year={year}\r\n        selected={selected}\r\n        current={current}\r\n        disabled={disabled}\r\n        onSelectYear={onSelectYear}\r\n        ref={selected ? this._selectedCellRef : current ? this._currentCellRef : undefined}\r\n      />\r\n    );\r\n  };\r\n}\r\n\r\nexport interface ICalendarYearHeaderProps extends ICalendarYearProps, ICalendarYearRange {\r\n  onSelectPrev?: () => void;\r\n  onSelectNext?: () => void;\r\n}\r\n\r\nclass CalendarYearNavPrev extends React.Component<ICalendarYearHeaderProps, any> {\r\n  public render() {\r\n    const iconStrings = this.props.navigationIcons || DefaultNavigationIcons;\r\n    const strings = this.props.strings || DefaultCalendarYearStrings;\r\n    const prevRangeAriaLabel = strings.prevRangeAriaLabel || strings.rangeAriaLabel;\r\n    const prevAriaLabel = prevRangeAriaLabel\r\n      ? typeof prevRangeAriaLabel === 'string'\r\n        ? (prevRangeAriaLabel as string)\r\n        : (prevRangeAriaLabel as ICalendarYearRangeToString)(this.props)\r\n      : undefined;\r\n    const disabled = this.isDisabled;\r\n    const { onSelectPrev } = this.props;\r\n    return (\r\n      <button\r\n        className={css('ms-DatePicker-prevDecade', styles.prevDecade, {\r\n          ['ms-DatePicker-prevDecade--disabled ' + styles.prevDecadeIsDisabled]: disabled\r\n        })}\r\n        onClick={!disabled && onSelectPrev ? this._onSelectPrev : undefined}\r\n        onKeyDown={!disabled && onSelectPrev ? this._onKeyDown : undefined}\r\n        type=\"button\"\r\n        tabIndex={0}\r\n        aria-label={prevAriaLabel}\r\n        disabled={disabled}\r\n      >\r\n        <Icon iconName={getRTL() ? iconStrings.rightNavigation : iconStrings.leftNavigation} />\r\n      </button>\r\n    );\r\n  }\r\n\r\n  get isDisabled() {\r\n    const { minYear } = this.props;\r\n    return minYear !== undefined && this.props.fromYear < minYear;\r\n  }\r\n\r\n  private _onSelectPrev = () => {\r\n    if (!this.isDisabled && this.props.onSelectPrev) {\r\n      this.props.onSelectPrev();\r\n    }\r\n  };\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onSelectPrev();\r\n    }\r\n  };\r\n}\r\n\r\nclass CalendarYearNavNext extends React.Component<ICalendarYearHeaderProps, any> {\r\n  public render() {\r\n    const iconStrings = this.props.navigationIcons || DefaultNavigationIcons;\r\n    const strings = this.props.strings || DefaultCalendarYearStrings;\r\n    const nextRangeAriaLabel = strings.nextRangeAriaLabel || strings.rangeAriaLabel;\r\n    const nextAriaLabel = nextRangeAriaLabel\r\n      ? typeof nextRangeAriaLabel === 'string'\r\n        ? (nextRangeAriaLabel as string)\r\n        : (nextRangeAriaLabel as ICalendarYearRangeToString)(this.props)\r\n      : undefined;\r\n    const { onSelectNext } = this.props;\r\n    const disabled = this.isDisabled;\r\n    return (\r\n      <button\r\n        className={css('ms-DatePicker-nextDecade', styles.nextDecade, {\r\n          ['ms-DatePicker-nextDecade--disabled ' + styles.nextDecadeIsDisabled]: disabled\r\n        })}\r\n        onClick={!disabled && onSelectNext ? this._onSelectNext : undefined}\r\n        onKeyDown={!disabled && onSelectNext ? this._onKeyDown : undefined}\r\n        type=\"button\"\r\n        tabIndex={0}\r\n        aria-label={nextAriaLabel}\r\n        disabled={this.isDisabled}\r\n      >\r\n        <Icon iconName={getRTL() ? iconStrings.leftNavigation : iconStrings.rightNavigation} />\r\n      </button>\r\n    );\r\n  }\r\n\r\n  get isDisabled() {\r\n    const { maxYear } = this.props;\r\n    return maxYear !== undefined && this.props.fromYear + CELL_COUNT > maxYear;\r\n  }\r\n\r\n  private _onSelectNext = () => {\r\n    if (!this.isDisabled && this.props.onSelectNext) {\r\n      this.props.onSelectNext();\r\n    }\r\n  };\r\n\r\n  private _onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onSelectNext();\r\n    }\r\n  };\r\n}\r\n\r\nclass CalendarYearNav extends React.Component<ICalendarYearHeaderProps, any> {\r\n  public render() {\r\n    return (\r\n      <div className={css('ms-DatePicker-decadeComponents', styles.decadeComponents)}>\r\n        <div className={css('ms-DatePicker-navContainer', styles.navContainer)}>\r\n          <CalendarYearNavPrev {...this.props} />\r\n          <CalendarYearNavNext {...this.props} />\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nclass CalendarYearTitle extends React.Component<ICalendarYearHeaderProps, any> {\r\n  public render() {\r\n    const { fromYear, toYear, onHeaderSelect } = this.props;\r\n    if (onHeaderSelect) {\r\n      const strings = this.props.strings || DefaultCalendarYearStrings;\r\n      const rangeAriaLabel = strings.rangeAriaLabel;\r\n      const ariaLabel = rangeAriaLabel\r\n        ? typeof rangeAriaLabel === 'string'\r\n          ? (rangeAriaLabel as string)\r\n          : (rangeAriaLabel as ICalendarYearRangeToString)(this.props)\r\n        : undefined;\r\n      return (\r\n        <div\r\n          className={css('ms-DatePicker-currentDecade js-showYearPicker', styles.currentDecade, styles.headerToggleView)}\r\n          onClick={this._onHeaderSelect}\r\n          onKeyDown={this._onHeaderKeyDown}\r\n          aria-label={ariaLabel}\r\n          role=\"button\"\r\n          tabIndex={0}\r\n        >\r\n          {this._onRenderYear(fromYear)} - {this._onRenderYear(toYear)}\r\n        </div>\r\n      );\r\n    }\r\n    return (\r\n      <div className={css('ms-DatePicker-currentDecade js-showYearPicker', styles.currentDecade)}>\r\n        {this._onRenderYear(fromYear)} - {this._onRenderYear(toYear)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onHeaderSelect = () => {\r\n    if (this.props.onHeaderSelect) {\r\n      this.props.onHeaderSelect(true);\r\n    }\r\n  };\r\n\r\n  private _onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\r\n    if (this.props.onHeaderSelect && (ev.which === KeyCodes.enter || ev.which === KeyCodes.space)) {\r\n      this.props.onHeaderSelect(true);\r\n    }\r\n  };\r\n\r\n  private _onRenderYear = (year: number) => {\r\n    if (this.props.onRenderYear) {\r\n      return this.props.onRenderYear(year);\r\n    }\r\n    return year;\r\n  };\r\n}\r\n\r\nclass CalendarYearHeader extends React.Component<ICalendarYearHeaderProps, any> {\r\n  public render() {\r\n    return (\r\n      <div className={css('ms-DatePicker-header', styles.header)}>\r\n        {this._onRenderTitle()}\r\n        {this._onRenderNav()}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onRenderTitle = () => {\r\n    if (this.props.onRenderTitle) {\r\n      return this.props.onRenderTitle(this.props);\r\n    }\r\n    return <CalendarYearTitle {...this.props} />;\r\n  };\r\n\r\n  private _onRenderNav = () => {\r\n    return <CalendarYearNav {...this.props} />;\r\n  };\r\n}\r\n\r\nexport interface ICalendarYearState {\r\n  fromYear: number;\r\n  navigatedYear?: number;\r\n  selectedYear?: number;\r\n}\r\n\r\nexport class CalendarYear extends React.Component<ICalendarYearProps, ICalendarYearState> implements ICalendarYear {\r\n  private _gridRef = React.createRef<CalendarYearGrid>();\r\n\r\n  public constructor(props: ICalendarYearProps) {\r\n    super(props);\r\n    this.state = this._calculateInitialStateFromProps(props);\r\n  }\r\n\r\n  public focus() {\r\n    if (this._gridRef.current) {\r\n      this._gridRef.current.focus();\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    return (\r\n      <div className={css('ms-DatePicker-yearPicker', styles.yearPicker)}>\r\n        {this._renderHeader()}\r\n        {this._renderGrid()}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onNavNext = () => {\r\n    this.setState({ fromYear: this.state.fromYear + CELL_COUNT });\r\n  };\r\n\r\n  private _onNavPrev = () => {\r\n    this.setState({ fromYear: this.state.fromYear - CELL_COUNT });\r\n  };\r\n\r\n  private _renderHeader = (): React.ReactNode => {\r\n    return (\r\n      <CalendarYearHeader\r\n        {...this.props}\r\n        fromYear={this.state.fromYear}\r\n        toYear={this.state.fromYear + CELL_COUNT - 1}\r\n        onSelectPrev={this._onNavPrev}\r\n        onSelectNext={this._onNavNext}\r\n      />\r\n    );\r\n  };\r\n\r\n  private _renderGrid = (): React.ReactNode => {\r\n    return (\r\n      <CalendarYearGrid {...this.props} fromYear={this.state.fromYear} toYear={this.state.fromYear + CELL_COUNT - 1} ref={this._gridRef} />\r\n    );\r\n  };\r\n\r\n  private _calculateInitialStateFromProps(props: ICalendarYearProps): ICalendarYearState {\r\n    const { selectedYear, navigatedYear } = props;\r\n    const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\r\n    const fromYear = Math.floor(rangeYear / 10) * 10;\r\n    return {\r\n      fromYear: fromYear,\r\n      navigatedYear: navigatedYear,\r\n      selectedYear: selectedYear\r\n    };\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, KeyCodes, css, getRTL, IRefObject } from '../../Utilities';\r\nimport { ICalendarStrings, ICalendarIconStrings, ICalendarFormatDateCallbacks } from './Calendar.types';\r\nimport { FocusZone } from '../../FocusZone';\r\nimport {\r\n  addYears,\r\n  setMonth,\r\n  getYearStart,\r\n  getYearEnd,\r\n  getMonthStart,\r\n  getMonthEnd,\r\n  compareDatePart\r\n} from '../../utilities/dateMath/DateMath';\r\nimport { Icon } from '../../Icon';\r\nimport * as stylesImport from './Calendar.scss';\r\nimport { CalendarYear, ICalendarYearRange } from './CalendarYear';\r\nconst styles: any = stylesImport;\r\n\r\nexport interface ICalendarMonth {\r\n  focus(): void;\r\n}\r\n\r\nexport interface ICalendarMonthProps extends React.ClassAttributes<CalendarMonth> {\r\n  componentRef?: IRefObject<ICalendarMonth>;\r\n  navigatedDate: Date;\r\n  selectedDate: Date;\r\n  strings: ICalendarStrings;\r\n  onNavigateDate: (date: Date, focusOnNavigatedDay: boolean) => void;\r\n  today?: Date;\r\n  highlightCurrentMonth: boolean;\r\n  highlightSelectedMonth: boolean;\r\n  onHeaderSelect?: (focus: boolean) => void;\r\n  navigationIcons: ICalendarIconStrings;\r\n  dateTimeFormatter: ICalendarFormatDateCallbacks;\r\n  minDate?: Date;\r\n  maxDate?: Date;\r\n  yearPickerHidden?: boolean;\r\n}\r\n\r\nexport interface ICalendarMonthState {\r\n  /** State used to show/hide month picker */\r\n  isYearPickerVisible?: boolean;\r\n}\r\n\r\nexport class CalendarMonth extends BaseComponent<ICalendarMonthProps, ICalendarMonthState> {\r\n  public refs: {\r\n    [key: string]: React.ReactInstance;\r\n    navigatedMonth: HTMLElement;\r\n  };\r\n\r\n  private _selectMonthCallbacks: (() => void)[];\r\n  private _calendarYearRef: CalendarYear;\r\n  private _focusOnUpdate: boolean;\r\n\r\n  public constructor(props: ICalendarMonthProps) {\r\n    super(props);\r\n\r\n    this._selectMonthCallbacks = [];\r\n    props.strings.shortMonths.map((month, index) => {\r\n      this._selectMonthCallbacks[index] = this._onSelectMonth.bind(this, index);\r\n    });\r\n\r\n    this._isCurrentMonth = this._isCurrentMonth.bind(this);\r\n    this._onSelectNextYear = this._onSelectNextYear.bind(this);\r\n    this._onSelectPrevYear = this._onSelectPrevYear.bind(this);\r\n    this._onSelectMonth = this._onSelectMonth.bind(this);\r\n\r\n    this.state = { isYearPickerVisible: false };\r\n  }\r\n\r\n  public componentDidUpdate(): void {\r\n    if (this._focusOnUpdate) {\r\n      this.focus();\r\n      this._focusOnUpdate = false;\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      navigatedDate,\r\n      selectedDate,\r\n      strings,\r\n      today,\r\n      highlightCurrentMonth,\r\n      highlightSelectedMonth,\r\n      navigationIcons,\r\n      dateTimeFormatter,\r\n      minDate,\r\n      maxDate,\r\n      yearPickerHidden\r\n    } = this.props;\r\n\r\n    if (this.state.isYearPickerVisible) {\r\n      // default the year picker to the current navigated date\r\n      const currentSelectedDate = navigatedDate ? navigatedDate.getFullYear() : undefined;\r\n      return (\r\n        <CalendarYear\r\n          key={'calendarYear_' + (currentSelectedDate && currentSelectedDate.toString())}\r\n          minYear={minDate ? minDate.getFullYear() : undefined}\r\n          maxYear={maxDate ? maxDate.getFullYear() : undefined}\r\n          onSelectYear={this._onSelectYear}\r\n          navigationIcons={navigationIcons}\r\n          onHeaderSelect={this._onYearPickerHeaderSelect}\r\n          selectedYear={currentSelectedDate}\r\n          onRenderYear={this._onRenderYear}\r\n          strings={{\r\n            rangeAriaLabel: this._yearRangeToString\r\n          }}\r\n          ref={this._onCalendarYearRef}\r\n        />\r\n      );\r\n    }\r\n\r\n    const leftNavigationIcon = navigationIcons.leftNavigation;\r\n    const rightNavigationIcon = navigationIcons.rightNavigation;\r\n\r\n    // determine if previous/next years are in bounds\r\n    const isPrevYearInBounds = minDate ? compareDatePart(minDate, getYearStart(navigatedDate)) < 0 : true;\r\n    const isNextYearInBounds = maxDate ? compareDatePart(getYearEnd(navigatedDate), maxDate) < 0 : true;\r\n\r\n    return (\r\n      <div className={css('ms-DatePicker-monthPicker', styles.monthPicker)}>\r\n        <div className={css('ms-DatePicker-header', styles.header)}>\r\n          {this.props.onHeaderSelect || !yearPickerHidden ? (\r\n            <div\r\n              className={css('ms-DatePicker-currentYear js-showYearPicker', styles.currentYear, styles.headerToggleView)}\r\n              onClick={this._onHeaderSelect}\r\n              onKeyDown={this._onHeaderKeyDown}\r\n              aria-label={dateTimeFormatter.formatYear(navigatedDate)}\r\n              role=\"button\"\r\n              tabIndex={0}\r\n            >\r\n              {dateTimeFormatter.formatYear(navigatedDate)}\r\n            </div>\r\n          ) : (\r\n            <div className={css('ms-DatePicker-currentYear js-showYearPicker', styles.currentYear)}>\r\n              {dateTimeFormatter.formatYear(navigatedDate)}\r\n            </div>\r\n          )}\r\n          <div className={css('ms-DatePicker-yearComponents', styles.yearComponents)}>\r\n            <div className={css('ms-DatePicker-navContainer', styles.navContainer)}>\r\n              <button\r\n                className={css('ms-DatePicker-prevYear js-prevYear', styles.prevYear, {\r\n                  ['ms-DatePicker-prevYear--disabled ' + styles.prevYearIsDisabled]: !isPrevYearInBounds\r\n                })}\r\n                disabled={!isPrevYearInBounds}\r\n                onClick={isPrevYearInBounds ? this._onSelectPrevYear : undefined}\r\n                onKeyDown={isPrevYearInBounds ? this._onSelectPrevYearKeyDown : undefined}\r\n                aria-label={\r\n                  strings.prevYearAriaLabel\r\n                    ? strings.prevYearAriaLabel + ' ' + dateTimeFormatter.formatYear(addYears(navigatedDate, -1))\r\n                    : undefined\r\n                }\r\n                role=\"button\"\r\n                type=\"button\"\r\n              >\r\n                <Icon iconName={getRTL() ? rightNavigationIcon : leftNavigationIcon} />\r\n              </button>\r\n              <button\r\n                className={css('ms-DatePicker-nextYear js-nextYear', styles.nextYear, {\r\n                  ['ms-DatePicker-nextYear--disabled ' + styles.nextYearIsDisabled]: !isNextYearInBounds\r\n                })}\r\n                disabled={!isNextYearInBounds}\r\n                onClick={isNextYearInBounds ? this._onSelectNextYear : undefined}\r\n                onKeyDown={isNextYearInBounds ? this._onSelectNextYearKeyDown : undefined}\r\n                aria-label={\r\n                  strings.nextYearAriaLabel\r\n                    ? strings.nextYearAriaLabel + ' ' + dateTimeFormatter.formatYear(addYears(navigatedDate, 1))\r\n                    : undefined\r\n                }\r\n                role=\"button\"\r\n                type=\"button\"\r\n              >\r\n                <Icon iconName={getRTL() ? leftNavigationIcon : rightNavigationIcon} />\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <FocusZone>\r\n          <div className={css('ms-DatePicker-optionGrid', styles.optionGrid)} role=\"grid\" aria-readonly=\"true\">\r\n            <div role=\"row\">\r\n              {strings.shortMonths.map((month, index) => {\r\n                const indexedMonth = setMonth(navigatedDate, index);\r\n                const isCurrentMonth = this._isCurrentMonth(index, navigatedDate.getFullYear(), today!);\r\n                const isNavigatedMonth = navigatedDate.getMonth() === index;\r\n                const isSelectedMonth = selectedDate.getMonth() === index;\r\n                const isSelectedYear = selectedDate.getFullYear() === navigatedDate.getFullYear();\r\n                const isInBounds =\r\n                  (minDate ? compareDatePart(minDate, getMonthEnd(indexedMonth)) < 1 : true) &&\r\n                  (maxDate ? compareDatePart(getMonthStart(indexedMonth), maxDate) < 1 : true);\r\n\r\n                return (\r\n                  <button\r\n                    role={'gridcell'}\r\n                    className={css('ms-DatePicker-monthOption', styles.monthOption, {\r\n                      ['ms-DatePicker-day--today ' + styles.monthIsCurrentMonth]: highlightCurrentMonth && isCurrentMonth!,\r\n                      ['ms-DatePicker-day--highlighted ' + styles.monthIsHighlighted]:\r\n                        (highlightCurrentMonth || highlightSelectedMonth) && isSelectedMonth && isSelectedYear,\r\n                      ['ms-DatePicker-monthOption--disabled ' + styles.monthOptionIsDisabled]: !isInBounds\r\n                    })}\r\n                    disabled={!isInBounds}\r\n                    key={index}\r\n                    onClick={isInBounds ? this._selectMonthCallbacks[index] : undefined}\r\n                    onKeyDown={isInBounds ? this._onSelectMonthKeyDown(index) : undefined}\r\n                    aria-label={dateTimeFormatter.formatMonthYear(indexedMonth, strings)}\r\n                    aria-selected={isCurrentMonth || isNavigatedMonth}\r\n                    data-is-focusable={isInBounds ? true : undefined}\r\n                    ref={isNavigatedMonth ? 'navigatedMonth' : undefined}\r\n                    type=\"button\"\r\n                  >\r\n                    {month}\r\n                  </button>\r\n                );\r\n              })}\r\n            </div>\r\n          </div>\r\n        </FocusZone>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    if (this._calendarYearRef) {\r\n      this._calendarYearRef.focus();\r\n    } else if (this.refs.navigatedMonth) {\r\n      this.refs.navigatedMonth.tabIndex = 0;\r\n      this.refs.navigatedMonth.focus();\r\n    }\r\n  }\r\n\r\n  private _onCalendarYearRef = (ref: CalendarYear) => {\r\n    this._calendarYearRef = ref;\r\n  };\r\n\r\n  private _isCurrentMonth(month: number, year: number, today: Date): boolean {\r\n    return today.getFullYear() === year && today.getMonth() === month;\r\n  }\r\n\r\n  private _onKeyDown = (callback: () => void, ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      callback();\r\n    }\r\n  };\r\n\r\n  private _onSelectYear = (selectedYear: number) => {\r\n    this._focusOnUpdate = true;\r\n    const { navigatedDate, onNavigateDate, maxDate, minDate } = this.props;\r\n    const navYear = navigatedDate.getFullYear();\r\n    if (navYear !== selectedYear) {\r\n      let newNavigationDate = new Date(navigatedDate.getTime());\r\n      newNavigationDate.setFullYear(selectedYear);\r\n      // for min and max dates, adjust the new navigation date - perhaps this should be\r\n      // checked on the master navigation date handler (i.e. in Calendar)\r\n      if (maxDate && newNavigationDate > maxDate) {\r\n        newNavigationDate = setMonth(newNavigationDate, maxDate.getMonth());\r\n      } else if (minDate && newNavigationDate < minDate) {\r\n        newNavigationDate = setMonth(newNavigationDate, minDate.getMonth());\r\n      }\r\n      onNavigateDate(newNavigationDate, true);\r\n    }\r\n    this.setState({ isYearPickerVisible: false });\r\n  };\r\n\r\n  private _yearToString = (year: number) => {\r\n    const { navigatedDate, dateTimeFormatter } = this.props;\r\n    if (dateTimeFormatter) {\r\n      // create a date based on the current nav date\r\n      const yearFormattingDate = new Date(navigatedDate.getTime());\r\n      yearFormattingDate.setFullYear(year);\r\n      return dateTimeFormatter.formatYear(yearFormattingDate);\r\n    }\r\n    return String(year);\r\n  };\r\n\r\n  private _yearRangeToString = (yearRange: ICalendarYearRange) => {\r\n    return `${this._yearToString(yearRange.fromYear)} - ${this._yearToString(yearRange.toYear)}`;\r\n  };\r\n\r\n  private _onRenderYear = (year: number) => {\r\n    return this._yearToString(year);\r\n  };\r\n\r\n  private _onSelectNextYear = (): void => {\r\n    const { navigatedDate, onNavigateDate } = this.props;\r\n    onNavigateDate(addYears(navigatedDate, 1), false);\r\n  };\r\n\r\n  private _onSelectNextYearKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onKeyDown(this._onSelectNextYear, ev);\r\n    }\r\n  };\r\n\r\n  private _onSelectPrevYear = (): void => {\r\n    const { navigatedDate, onNavigateDate } = this.props;\r\n    onNavigateDate(addYears(navigatedDate, -1), false);\r\n  };\r\n\r\n  private _onSelectPrevYearKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      this._onKeyDown(this._onSelectPrevYear, ev);\r\n    }\r\n  };\r\n\r\n  private _onSelectMonthKeyDown = (index: number): ((ev: React.KeyboardEvent<HTMLElement>) => void) => {\r\n    return (ev: React.KeyboardEvent<HTMLElement>) => this._onKeyDown(() => this._onSelectMonth(index), ev);\r\n  };\r\n\r\n  private _onSelectMonth = (newMonth: number): void => {\r\n    const { navigatedDate, onNavigateDate, onHeaderSelect } = this.props;\r\n\r\n    // If header is clickable the calendars are overlayed, switch back to day picker when month is clicked\r\n    if (onHeaderSelect) {\r\n      onHeaderSelect(true);\r\n    }\r\n    onNavigateDate(setMonth(navigatedDate, newMonth), true);\r\n  };\r\n\r\n  private _onHeaderSelect = (): void => {\r\n    const { onHeaderSelect, yearPickerHidden } = this.props;\r\n    if (!yearPickerHidden) {\r\n      this._focusOnUpdate = true;\r\n      this.setState({ isYearPickerVisible: true });\r\n    } else if (onHeaderSelect) {\r\n      onHeaderSelect(true);\r\n    }\r\n  };\r\n\r\n  private _onYearPickerHeaderSelect = (focus: boolean): void => {\r\n    this._focusOnUpdate = focus;\r\n    this.setState({ isYearPickerVisible: false });\r\n  };\r\n\r\n  private _onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    const { onHeaderSelect } = this.props;\r\n    if (onHeaderSelect && (ev.which === KeyCodes.enter || ev.which === KeyCodes.space)) {\r\n      onHeaderSelect(true);\r\n    }\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { ICalendar, ICalendarProps, ICalendarStrings, ICalendarIconStrings, ICalendarFormatDateCallbacks } from './Calendar.types';\r\nimport { DayOfWeek, FirstWeekOfYear, DateRangeType } from '../../utilities/dateValues/DateValues';\r\nimport { CalendarDay, ICalendarDay } from './CalendarDay';\r\nimport { CalendarMonth, ICalendarMonth } from './CalendarMonth';\r\nimport { compareDates, getDateRangeArray } from '../../utilities/dateMath/DateMath';\r\nimport { css, BaseComponent, KeyCodes, getNativeProps, divProperties } from '../../Utilities';\r\nimport * as stylesImport from './Calendar.scss';\r\nconst styles: any = stylesImport;\r\n\r\nconst leftArrow = 'Up';\r\nconst rightArrow = 'Down';\r\nconst closeIcon = 'CalculatorMultiply';\r\nconst iconStrings: ICalendarIconStrings = {\r\n  leftNavigation: leftArrow,\r\n  rightNavigation: rightArrow,\r\n  closeIcon: closeIcon\r\n};\r\nconst defaultWorkWeekDays: DayOfWeek[] = [DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday];\r\n\r\nconst dateTimeFormatterCallbacks: ICalendarFormatDateCallbacks = {\r\n  formatMonthDayYear: (date: Date, strings: ICalendarStrings) =>\r\n    strings.months[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear(),\r\n  formatMonthYear: (date: Date, strings: ICalendarStrings) => strings.months[date.getMonth()] + ' ' + date.getFullYear(),\r\n  formatDay: (date: Date) => date.getDate().toString(),\r\n  formatYear: (date: Date) => date.getFullYear().toString()\r\n};\r\n\r\nexport interface ICalendarState {\r\n  /** The currently focused date in the day picker, but not necessarily selected */\r\n  navigatedDayDate?: Date;\r\n\r\n  /** The currently focused date in the month picker, but not necessarily selected */\r\n  navigatedMonthDate?: Date;\r\n\r\n  /** The currently selected date in the calendar */\r\n  selectedDate?: Date;\r\n\r\n  /** State used to show/hide month picker */\r\n  isMonthPickerVisible?: boolean;\r\n\r\n  /** State used to show/hide day picker */\r\n  isDayPickerVisible?: boolean;\r\n}\r\n\r\nexport class Calendar extends BaseComponent<ICalendarProps, ICalendarState> implements ICalendar {\r\n  public static defaultProps: ICalendarProps = {\r\n    onSelectDate: undefined,\r\n    onDismiss: undefined,\r\n    isMonthPickerVisible: true,\r\n    isDayPickerVisible: true,\r\n    showMonthPickerAsOverlay: false,\r\n    value: undefined,\r\n    today: new Date(),\r\n    firstDayOfWeek: DayOfWeek.Sunday,\r\n    dateRangeType: DateRangeType.Day,\r\n    autoNavigateOnSelection: false,\r\n    showGoToToday: true,\r\n    strings: null,\r\n    highlightCurrentMonth: false,\r\n    highlightSelectedMonth: false,\r\n    navigationIcons: iconStrings,\r\n    showWeekNumbers: false,\r\n    firstWeekOfYear: FirstWeekOfYear.FirstDay,\r\n    dateTimeFormatter: dateTimeFormatterCallbacks,\r\n    showSixWeeksByDefault: false,\r\n    workWeekDays: defaultWorkWeekDays,\r\n    showCloseButton: false,\r\n    allFocusable: false\r\n  };\r\n\r\n  private _dayPicker = React.createRef<ICalendarDay>();\r\n  private _monthPicker = React.createRef<ICalendarMonth>();\r\n\r\n  private _focusOnUpdate: boolean;\r\n\r\n  constructor(props: ICalendarProps) {\r\n    super(props);\r\n    const currentDate = props.value && !isNaN(props.value.getTime()) ? props.value : props.today || new Date();\r\n\r\n    this.state = {\r\n      selectedDate: currentDate,\r\n      navigatedDayDate: currentDate,\r\n      navigatedMonthDate: currentDate,\r\n\r\n      /** When showMonthPickerAsOverlay is active it overrides isMonthPickerVisible/isDayPickerVisible props\r\n       (These props permanently set the visibility of their respective calendars). */\r\n      isMonthPickerVisible: this.props.showMonthPickerAsOverlay ? false : this.props.isMonthPickerVisible,\r\n      isDayPickerVisible: this.props.showMonthPickerAsOverlay ? true : this.props.isDayPickerVisible\r\n    };\r\n\r\n    this._focusOnUpdate = false;\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: ICalendarProps): void {\r\n    const { autoNavigateOnSelection, value, today = new Date() } = nextProps;\r\n\r\n    // Make sure auto-navigation is supported for programmatic changes to selected date, i.e.,\r\n    // if selected date is updated via props, we may need to modify the navigated date\r\n    const overrideNavigatedDate = autoNavigateOnSelection && !compareDates(value!, this.props.value!);\r\n    if (overrideNavigatedDate) {\r\n      this.setState({\r\n        navigatedMonthDate: value,\r\n        navigatedDayDate: value\r\n      });\r\n    }\r\n\r\n    this.setState({\r\n      selectedDate: value || today\r\n    });\r\n  }\r\n\r\n  public componentDidUpdate(): void {\r\n    if (this._focusOnUpdate) {\r\n      this.focus();\r\n      this._focusOnUpdate = false;\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const rootClass = 'ms-DatePicker';\r\n    const {\r\n      firstDayOfWeek,\r\n      dateRangeType,\r\n      strings,\r\n      showMonthPickerAsOverlay,\r\n      autoNavigateOnSelection,\r\n      showGoToToday,\r\n      highlightCurrentMonth,\r\n      highlightSelectedMonth,\r\n      navigationIcons,\r\n      minDate,\r\n      maxDate,\r\n      restrictedDates,\r\n      className,\r\n      showCloseButton,\r\n      allFocusable,\r\n      yearPickerHidden,\r\n      today\r\n    } = this.props;\r\n    const nativeProps = getNativeProps(this.props, divProperties, ['value']);\r\n\r\n    const { selectedDate, navigatedDayDate, navigatedMonthDate, isMonthPickerVisible, isDayPickerVisible } = this.state;\r\n    const onHeaderSelect = showMonthPickerAsOverlay ? this._onHeaderSelect : undefined;\r\n    const monthPickerOnly = !showMonthPickerAsOverlay && !isDayPickerVisible;\r\n    const overlayedWithButton = showMonthPickerAsOverlay && showGoToToday;\r\n\r\n    let goTodayEnabled = showGoToToday;\r\n\r\n    if (goTodayEnabled && navigatedDayDate && navigatedMonthDate && today) {\r\n      goTodayEnabled =\r\n        navigatedDayDate.getFullYear() !== today.getFullYear() ||\r\n        navigatedDayDate.getMonth() !== today.getMonth() ||\r\n        navigatedMonthDate.getFullYear() !== today.getFullYear() ||\r\n        navigatedMonthDate.getMonth() !== today.getMonth();\r\n    }\r\n\r\n    return (\r\n      <div className={css(rootClass, styles.root, className)} role=\"application\">\r\n        <div\r\n          {...nativeProps}\r\n          className={css(\r\n            'ms-DatePicker-picker ms-DatePicker-picker--opened ms-DatePicker-picker--focused',\r\n            styles.picker,\r\n            styles.pickerIsOpened,\r\n            styles.pickerIsFocused,\r\n            isMonthPickerVisible && 'ms-DatePicker-monthPickerVisible ' + styles.monthPickerVisible,\r\n            isMonthPickerVisible && isDayPickerVisible && 'ms-DatePicker-calendarsInline ' + styles.calendarsInline,\r\n            monthPickerOnly && 'ms-DatePicker-monthPickerOnly ' + styles.monthPickerOnly,\r\n            showMonthPickerAsOverlay && 'ms-DatePicker-monthPickerAsOverlay ' + styles.monthPickerAsOverlay\r\n          )}\r\n        >\r\n          <div\r\n            className={css('ms-DatePicker-holder ms-slideDownIn10', styles.holder, overlayedWithButton && styles.holderWithButton)}\r\n            onKeyDown={this._onDatePickerPopupKeyDown}\r\n          >\r\n            <div className={css('ms-DatePicker-frame', styles.frame)}>\r\n              <div className={css('ms-DatePicker-wrap', styles.wrap, showGoToToday && styles.goTodaySpacing)}>\r\n                {isDayPickerVisible && (\r\n                  <CalendarDay\r\n                    selectedDate={selectedDate!}\r\n                    navigatedDate={navigatedDayDate!}\r\n                    today={this.props.today}\r\n                    onSelectDate={this._onSelectDate}\r\n                    onNavigateDate={this._onNavigateDayDate}\r\n                    onDismiss={this.props.onDismiss}\r\n                    firstDayOfWeek={firstDayOfWeek!}\r\n                    dateRangeType={dateRangeType!}\r\n                    autoNavigateOnSelection={autoNavigateOnSelection!}\r\n                    strings={strings!}\r\n                    onHeaderSelect={onHeaderSelect}\r\n                    navigationIcons={navigationIcons!}\r\n                    showWeekNumbers={this.props.showWeekNumbers}\r\n                    firstWeekOfYear={this.props.firstWeekOfYear!}\r\n                    dateTimeFormatter={this.props.dateTimeFormatter!}\r\n                    showSixWeeksByDefault={this.props.showSixWeeksByDefault}\r\n                    minDate={minDate}\r\n                    maxDate={maxDate}\r\n                    restrictedDates={restrictedDates}\r\n                    workWeekDays={this.props.workWeekDays}\r\n                    componentRef={this._dayPicker}\r\n                    showCloseButton={showCloseButton}\r\n                    allFocusable={allFocusable}\r\n                  />\r\n                )}\r\n                {isDayPickerVisible && isMonthPickerVisible && <div className={styles.divider} />}\r\n                {isMonthPickerVisible && (\r\n                  <CalendarMonth\r\n                    navigatedDate={navigatedMonthDate!}\r\n                    selectedDate={navigatedDayDate!}\r\n                    strings={strings!}\r\n                    onNavigateDate={this._onNavigateMonthDate}\r\n                    today={this.props.today}\r\n                    highlightCurrentMonth={highlightCurrentMonth!}\r\n                    highlightSelectedMonth={highlightSelectedMonth!}\r\n                    onHeaderSelect={onHeaderSelect}\r\n                    navigationIcons={navigationIcons!}\r\n                    dateTimeFormatter={this.props.dateTimeFormatter!}\r\n                    minDate={minDate}\r\n                    maxDate={maxDate}\r\n                    componentRef={this._monthPicker}\r\n                    yearPickerHidden={yearPickerHidden || showMonthPickerAsOverlay}\r\n                  />\r\n                )}\r\n\r\n                {showGoToToday && (\r\n                  <button\r\n                    role=\"button\"\r\n                    className={css('ms-DatePicker-goToday js-goToday', styles.goToday, {\r\n                      [styles.goTodayInlineMonth]: isMonthPickerVisible,\r\n                      [styles.goToTodayIsDisabled]: !goTodayEnabled\r\n                    })}\r\n                    onClick={this._onGotoTodayClick}\r\n                    onKeyDown={this._onGotoTodayKeyDown}\r\n                    tabIndex={0}\r\n                    disabled={!goTodayEnabled}\r\n                    type=\"button\"\r\n                  >\r\n                    {strings!.goToToday}\r\n                  </button>\r\n                )}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    if (this.state.isDayPickerVisible && this._dayPicker.current) {\r\n      this._dayPicker.current.focus();\r\n    } else if (this.state.isMonthPickerVisible && this._monthPicker.current) {\r\n      this._monthPicker.current.focus();\r\n    }\r\n  }\r\n\r\n  private _navigateDayPickerDay = (date: Date): void => {\r\n    this.setState({\r\n      navigatedDayDate: date,\r\n      navigatedMonthDate: date\r\n    });\r\n  };\r\n\r\n  private _navigateMonthPickerDay = (date: Date): void => {\r\n    this.setState({\r\n      navigatedMonthDate: date\r\n    });\r\n  };\r\n\r\n  private _onNavigateDayDate = (date: Date, focusOnNavigatedDay: boolean): void => {\r\n    this._navigateDayPickerDay(date);\r\n    this._focusOnUpdate = focusOnNavigatedDay;\r\n  };\r\n\r\n  private _onNavigateMonthDate = (date: Date, focusOnNavigatedDay: boolean): void => {\r\n    if (!focusOnNavigatedDay) {\r\n      this._navigateMonthPickerDay(date);\r\n      this._focusOnUpdate = focusOnNavigatedDay;\r\n      return;\r\n    }\r\n\r\n    const monthPickerOnly = !this.props.showMonthPickerAsOverlay && !this.props.isDayPickerVisible;\r\n\r\n    if (monthPickerOnly) {\r\n      this._onSelectDate(date);\r\n    }\r\n\r\n    this._navigateDayPickerDay(date);\r\n  };\r\n\r\n  private _onSelectDate = (date: Date, selectedDateRangeArray?: Date[]): void => {\r\n    const { onSelectDate } = this.props;\r\n\r\n    this.setState({\r\n      selectedDate: date\r\n    });\r\n\r\n    if (onSelectDate) {\r\n      onSelectDate(date, selectedDateRangeArray);\r\n    }\r\n  };\r\n\r\n  private _onHeaderSelect = (focus: boolean): void => {\r\n    this.setState({\r\n      isDayPickerVisible: !this.state.isDayPickerVisible,\r\n      isMonthPickerVisible: !this.state.isMonthPickerVisible\r\n    });\r\n\r\n    if (focus) {\r\n      this._focusOnUpdate = true;\r\n    }\r\n  };\r\n\r\n  private _onGotoToday = (): void => {\r\n    const { dateRangeType, firstDayOfWeek, today, workWeekDays, selectDateOnClick } = this.props;\r\n\r\n    if (selectDateOnClick) {\r\n      // When using Defaultprops, TypeScript doesn't know that React is going to inject defaults\r\n      // so we use exclamation mark as a hint to the type checker (see link below)\r\n      // https://decembersoft.com/posts/error-ts2532-optional-react-component-props-in-typescript/\r\n      const dates = getDateRangeArray(today!, dateRangeType!, firstDayOfWeek!, workWeekDays!);\r\n      this._onSelectDate(today!, dates);\r\n    }\r\n\r\n    this._navigateDayPickerDay(today!);\r\n  };\r\n\r\n  private _onGotoTodayClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    this._onGotoToday();\r\n  };\r\n\r\n  private _onGotoTodayKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (ev.which === KeyCodes.enter) {\r\n      ev.preventDefault();\r\n      this._onGotoToday();\r\n    }\r\n  };\r\n\r\n  private _onDatePickerPopupKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    switch (ev.which) {\r\n      case KeyCodes.enter:\r\n        ev.preventDefault();\r\n        break;\r\n\r\n      case KeyCodes.backspace:\r\n        ev.preventDefault();\r\n        break;\r\n\r\n      case KeyCodes.escape:\r\n        this._handleEscKey(ev);\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  private _handleEscKey = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    if (this.props.onDismiss) {\r\n      this.props.onDismiss();\r\n    }\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { IDatePicker, IDatePickerProps, IDatePickerStrings, IDatePickerStyleProps, IDatePickerStyles } from './DatePicker.types';\r\nimport { BaseComponent, KeyCodes, classNamesFunction, getId, getNativeProps, divProperties, css } from '../../Utilities';\r\nimport { Calendar, ICalendar, DayOfWeek } from '../../Calendar';\r\nimport { FirstWeekOfYear } from '../../utilities/dateValues/DateValues';\r\nimport { Callout } from '../../Callout';\r\nimport { DirectionalHint } from '../../common/DirectionalHint';\r\nimport { TextField, ITextField } from '../../TextField';\r\nimport { compareDates, compareDatePart } from '../../utilities/dateMath/DateMath';\r\nimport { FocusTrapZone } from '../../FocusTrapZone';\r\n\r\nconst getClassNames = classNamesFunction<IDatePickerStyleProps, IDatePickerStyles>();\r\n\r\nexport interface IDatePickerState {\r\n  selectedDate?: Date;\r\n  formattedDate?: string;\r\n  isDatePickerShown?: boolean;\r\n  errorMessage?: string;\r\n}\r\n\r\nconst DEFAULT_STRINGS: IDatePickerStrings = {\r\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n\r\n  shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n\r\n  days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n\r\n  shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\r\n\r\n  goToToday: 'Go to today',\r\n  prevMonthAriaLabel: 'Go to previous month',\r\n  nextMonthAriaLabel: 'Go to next month',\r\n  prevYearAriaLabel: 'Go to previous year',\r\n  nextYearAriaLabel: 'Go to next year',\r\n  closeButtonAriaLabel: 'Close date picker'\r\n};\r\n\r\nexport class DatePickerBase extends BaseComponent<IDatePickerProps, IDatePickerState> implements IDatePicker {\r\n  public static defaultProps: IDatePickerProps = {\r\n    allowTextInput: false,\r\n    formatDate: (date: Date) => {\r\n      if (date) {\r\n        return date.toDateString();\r\n      }\r\n\r\n      return '';\r\n    },\r\n    parseDateFromString: (dateStr: string) => {\r\n      const date = Date.parse(dateStr);\r\n      if (date) {\r\n        return new Date(date);\r\n      }\r\n\r\n      return null;\r\n    },\r\n    firstDayOfWeek: DayOfWeek.Sunday,\r\n    initialPickerDate: new Date(),\r\n    isRequired: false,\r\n    isMonthPickerVisible: true,\r\n    showMonthPickerAsOverlay: false,\r\n    strings: DEFAULT_STRINGS,\r\n    highlightCurrentMonth: false,\r\n    highlightSelectedMonth: false,\r\n    borderless: false,\r\n    pickerAriaLabel: 'Calendar',\r\n    showWeekNumbers: false,\r\n    firstWeekOfYear: FirstWeekOfYear.FirstDay,\r\n    showGoToToday: true,\r\n    dateTimeFormatter: undefined,\r\n    showCloseButton: false,\r\n    underlined: false,\r\n    allFocusable: false\r\n  };\r\n\r\n  private _calendar = React.createRef<ICalendar>();\r\n  private _datePickerDiv = React.createRef<HTMLDivElement>();\r\n  private _textField = React.createRef<ITextField>();\r\n  private _preventFocusOpeningPicker: boolean;\r\n  private _id: string;\r\n\r\n  constructor(props: IDatePickerProps) {\r\n    super(props);\r\n    this.state = this._getDefaultState();\r\n\r\n    this._id = props.id || getId('DatePicker');\r\n\r\n    this._preventFocusOpeningPicker = false;\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: IDatePickerProps): void {\r\n    const { formatDate, isRequired, strings, value, minDate, maxDate } = nextProps;\r\n\r\n    if (\r\n      compareDates(this.props.minDate!, nextProps.minDate!) &&\r\n      compareDates(this.props.maxDate!, nextProps.maxDate!) &&\r\n      this.props.isRequired === nextProps.isRequired &&\r\n      compareDates(this.state.selectedDate!, value!) &&\r\n      this.props.formatDate === formatDate\r\n    ) {\r\n      // if the props we care about haven't changed, don't run validation or updates\r\n      return;\r\n    }\r\n\r\n    let errorMessage = isRequired && !value ? strings!.isRequiredErrorMessage || ' ' : undefined;\r\n\r\n    if (!errorMessage && value) {\r\n      errorMessage = this._isDateOutOfBounds(value!, minDate, maxDate) ? strings!.isOutOfBoundsErrorMessage || ' ' : undefined;\r\n    }\r\n\r\n    this._id = nextProps.id || this._id;\r\n\r\n    // Set error message\r\n    this.setState({\r\n      errorMessage: errorMessage\r\n    });\r\n\r\n    // Issue# 1274: Check if the date value changed from old value, i.e., if indeed a new date is being\r\n    // passed in or if the formatting function was modified. We only update the selected date if either of these\r\n    // had a legit change. Note tha the bug will still repro when only the formatDate was passed in props and this\r\n    // is the result of the onSelectDate callback, but this should be a rare scenario.\r\n    const oldValue = this.state.selectedDate;\r\n    if (!compareDates(oldValue!, value!) || this.props.formatDate !== formatDate) {\r\n      this.setState({\r\n        selectedDate: value || undefined,\r\n        formattedDate: formatDate && value ? formatDate(value) : ''\r\n      });\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDatePickerProps, prevState: IDatePickerState) {\r\n    if (prevState.isDatePickerShown && !this.state.isDatePickerShown) {\r\n      // In browsers like IE, textfield gets unfocused when datepicker is collapsed\r\n      if (this.props.allowTextInput) {\r\n        this._async.requestAnimationFrame(() => this.focus());\r\n      }\r\n\r\n      // If DatePicker's menu (Calendar) is closed, run onAfterMenuDismiss\r\n      if (this.props.onAfterMenuDismiss) {\r\n        this.props.onAfterMenuDismiss();\r\n      }\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      firstDayOfWeek,\r\n      strings,\r\n      label,\r\n      theme,\r\n      className,\r\n      styles,\r\n      initialPickerDate,\r\n      isRequired,\r\n      disabled,\r\n      ariaLabel,\r\n      pickerAriaLabel,\r\n      placeholder,\r\n      allowTextInput,\r\n      borderless,\r\n      minDate,\r\n      maxDate,\r\n      showCloseButton,\r\n      calendarProps,\r\n      calloutProps,\r\n      textField: textFieldProps,\r\n      underlined,\r\n      allFocusable,\r\n      calendarAs: CalendarType = Calendar,\r\n      tabIndex\r\n    } = this.props;\r\n    const { isDatePickerShown, formattedDate, selectedDate, errorMessage } = this.state;\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className,\r\n      disabled,\r\n      label: !!label,\r\n      isDatePickerShown\r\n    });\r\n\r\n    const calloutId = getId('DatePicker-Callout');\r\n    const nativeProps = getNativeProps(this.props, divProperties, ['value']);\r\n    const iconProps = textFieldProps && textFieldProps.iconProps;\r\n\r\n    return (\r\n      <div {...nativeProps} className={classNames.root}>\r\n        <div\r\n          ref={this._datePickerDiv}\r\n          role=\"combobox\"\r\n          aria-expanded={isDatePickerShown}\r\n          aria-haspopup=\"true\"\r\n          aria-owns={isDatePickerShown ? calloutId : undefined}\r\n        >\r\n          <TextField\r\n            label={label}\r\n            ariaLabel={ariaLabel}\r\n            aria-controls={isDatePickerShown ? calloutId : undefined}\r\n            required={isRequired}\r\n            disabled={disabled}\r\n            errorMessage={errorMessage}\r\n            placeholder={placeholder}\r\n            borderless={borderless}\r\n            value={formattedDate}\r\n            componentRef={this._textField}\r\n            underlined={underlined}\r\n            tabIndex={tabIndex}\r\n            readOnly={!allowTextInput}\r\n            {...textFieldProps}\r\n            id={this._id + '-label'}\r\n            className={css(classNames.textField, textFieldProps && textFieldProps.className)}\r\n            iconProps={{\r\n              iconName: 'Calendar',\r\n              ...iconProps,\r\n              className: css(classNames.icon, iconProps && iconProps.className),\r\n              onClick: this._onIconClick\r\n            }}\r\n            onKeyDown={this._onTextFieldKeyDown}\r\n            onFocus={this._onTextFieldFocus}\r\n            onBlur={this._onTextFieldBlur}\r\n            onClick={this._onTextFieldClick}\r\n            onChange={this._onTextFieldChanged}\r\n          />\r\n        </div>\r\n        {isDatePickerShown && (\r\n          <Callout\r\n            id={calloutId}\r\n            role=\"dialog\"\r\n            ariaLabel={pickerAriaLabel}\r\n            isBeakVisible={false}\r\n            gapSpace={0}\r\n            doNotLayer={false}\r\n            target={this._datePickerDiv.current}\r\n            directionalHint={DirectionalHint.bottomLeftEdge}\r\n            {...calloutProps}\r\n            className={css(classNames.callout, calloutProps && calloutProps.className)}\r\n            onDismiss={this._calendarDismissed}\r\n            onPositioned={this._onCalloutPositioned}\r\n          >\r\n            <FocusTrapZone isClickableOutsideFocusTrap={true} disableFirstFocus={this.props.disableAutoFocus}>\r\n              <CalendarType\r\n                {...calendarProps}\r\n                onSelectDate={this._onSelectDate}\r\n                onDismiss={this._calendarDismissed}\r\n                isMonthPickerVisible={this.props.isMonthPickerVisible}\r\n                showMonthPickerAsOverlay={this.props.showMonthPickerAsOverlay}\r\n                today={this.props.today}\r\n                value={selectedDate || initialPickerDate}\r\n                firstDayOfWeek={firstDayOfWeek}\r\n                strings={strings!}\r\n                highlightCurrentMonth={this.props.highlightCurrentMonth}\r\n                highlightSelectedMonth={this.props.highlightSelectedMonth}\r\n                showWeekNumbers={this.props.showWeekNumbers}\r\n                firstWeekOfYear={this.props.firstWeekOfYear}\r\n                showGoToToday={this.props.showGoToToday}\r\n                dateTimeFormatter={this.props.dateTimeFormatter}\r\n                minDate={minDate}\r\n                maxDate={maxDate}\r\n                componentRef={this._calendar}\r\n                showCloseButton={showCloseButton}\r\n                allFocusable={allFocusable}\r\n              />\r\n            </FocusTrapZone>\r\n          </Callout>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus(): void {\r\n    if (this._textField.current) {\r\n      this._textField.current.focus();\r\n    }\r\n  }\r\n\r\n  public reset(): void {\r\n    this.setState(this._getDefaultState());\r\n  }\r\n\r\n  private _onSelectDate = (date: Date): void => {\r\n    const { formatDate, onSelectDate } = this.props;\r\n\r\n    if (this.props.calendarProps && this.props.calendarProps.onSelectDate) {\r\n      this.props.calendarProps.onSelectDate(date);\r\n    }\r\n\r\n    this.setState({\r\n      selectedDate: date,\r\n      formattedDate: formatDate && date ? formatDate(date) : ''\r\n    });\r\n\r\n    if (onSelectDate) {\r\n      onSelectDate(date);\r\n    }\r\n\r\n    this._calendarDismissed();\r\n  };\r\n\r\n  private _onCalloutPositioned = (): void => {\r\n    let shouldFocus = true;\r\n    // If the user has specified that the callout shouldn't use initial focus, then respect\r\n    // that and don't attempt to set focus. That will default to true within the callout\r\n    // so we need to check if it's undefined here.\r\n    if (this.props.calloutProps && this.props.calloutProps.setInitialFocus !== undefined) {\r\n      shouldFocus = this.props.calloutProps.setInitialFocus;\r\n    }\r\n    if (this._calendar.current && shouldFocus) {\r\n      this._calendar.current.focus();\r\n    }\r\n  };\r\n\r\n  private _onTextFieldFocus = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    if (this.props.disableAutoFocus) {\r\n      return;\r\n    }\r\n\r\n    if (!this.props.allowTextInput) {\r\n      if (!this._preventFocusOpeningPicker) {\r\n        this._showDatePickerPopup();\r\n      } else {\r\n        this._preventFocusOpeningPicker = false;\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onTextFieldBlur = (ev: React.FocusEvent<HTMLElement>): void => {\r\n    this._validateTextInput();\r\n  };\r\n\r\n  private _onTextFieldChanged = (ev: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>, newValue: string): void => {\r\n    if (this.props.allowTextInput) {\r\n      if (this.state.isDatePickerShown) {\r\n        this._dismissDatePickerPopup();\r\n      }\r\n\r\n      const { isRequired, value, strings } = this.props;\r\n\r\n      this.setState({\r\n        errorMessage: isRequired && !value ? strings!.isRequiredErrorMessage || ' ' : undefined,\r\n        formattedDate: newValue\r\n      });\r\n    }\r\n  };\r\n\r\n  private _onTextFieldKeyDown = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    switch (ev.which) {\r\n      case KeyCodes.enter:\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n        if (!this.state.isDatePickerShown) {\r\n          this._validateTextInput();\r\n          this._showDatePickerPopup();\r\n        } else {\r\n          // When DatePicker allows input date string directly,\r\n          // it is expected to hit another enter to close the popup\r\n          if (this.props.allowTextInput) {\r\n            this._dismissDatePickerPopup();\r\n          }\r\n        }\r\n        break;\r\n\r\n      case KeyCodes.escape:\r\n        this._handleEscKey(ev);\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  private _onTextFieldClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    if (!this.state.isDatePickerShown && !this.props.disabled) {\r\n      this._showDatePickerPopup();\r\n    } else {\r\n      if (this.props.allowTextInput) {\r\n        this.setState({\r\n          isDatePickerShown: false\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  private _onIconClick = (ev: React.MouseEvent<HTMLElement>): void => {\r\n    ev.stopPropagation();\r\n    this._onTextFieldClick(ev);\r\n  };\r\n\r\n  private _showDatePickerPopup(): void {\r\n    if (!this.state.isDatePickerShown) {\r\n      this._preventFocusOpeningPicker = true;\r\n      this.setState({\r\n        isDatePickerShown: true,\r\n        errorMessage: ''\r\n      });\r\n    }\r\n  }\r\n\r\n  private _dismissDatePickerPopup = (): void => {\r\n    if (this.state.isDatePickerShown) {\r\n      this.setState(\r\n        {\r\n          isDatePickerShown: false\r\n        },\r\n        () => {\r\n          // setState is async, so we must call validate in a callback\r\n          this._validateTextInput();\r\n        }\r\n      );\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Callback for closing the calendar callout\r\n   */\r\n  private _calendarDismissed = (): void => {\r\n    this._preventFocusOpeningPicker = true;\r\n    this._dismissDatePickerPopup();\r\n    // don't need to focus the text box, if necessary the focusTrapZone will do it\r\n  };\r\n\r\n  private _handleEscKey = (ev: React.KeyboardEvent<HTMLElement>): void => {\r\n    ev.stopPropagation();\r\n    this._calendarDismissed();\r\n  };\r\n\r\n  private _validateTextInput = (): void => {\r\n    const { isRequired, allowTextInput, strings, parseDateFromString, onSelectDate, formatDate, minDate, maxDate } = this.props;\r\n    const inputValue = this.state.formattedDate;\r\n\r\n    // Do validation only if DatePicker's popup is dismissed\r\n    if (this.state.isDatePickerShown) {\r\n      return;\r\n    }\r\n\r\n    if (allowTextInput) {\r\n      let date = null;\r\n      if (inputValue) {\r\n        // Don't parse if the selected date has the same formatted string as what we're about to parse.\r\n        // The formatted string might be ambiguous (ex: \"1/2/3\" or \"New Year Eve\") and the parser might\r\n        // not be able to come up with the exact same date.\r\n        if (this.state.selectedDate && formatDate && formatDate(this.state.selectedDate) === inputValue) {\r\n          return;\r\n        } else {\r\n          date = parseDateFromString!(inputValue);\r\n\r\n          // Check if date is null, or date is Invalid Date\r\n          if (!date || isNaN(date.getTime())) {\r\n            // Reset invalid input field, if formatting is available\r\n            if (formatDate) {\r\n              date = this.state.selectedDate;\r\n              this.setState({\r\n                formattedDate: formatDate(date!).toString()\r\n              });\r\n            }\r\n\r\n            this.setState({\r\n              errorMessage: strings!.invalidInputErrorMessage || ' '\r\n            });\r\n          } else {\r\n            // Check against optional date boundaries\r\n            if (this._isDateOutOfBounds(date, minDate, maxDate)) {\r\n              this.setState({\r\n                errorMessage: strings!.isOutOfBoundsErrorMessage || ' '\r\n              });\r\n            } else {\r\n              this.setState({\r\n                selectedDate: date,\r\n                errorMessage: ''\r\n              });\r\n\r\n              // When formatting is available. If formatted date is valid, but is different from input, update with formatted date\r\n              // This occurs when an invalid date is entered twice\r\n              if (formatDate && formatDate(date) !== inputValue) {\r\n                this.setState({\r\n                  formattedDate: formatDate(date).toString()\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        // Only show error for empty inputValue if it is a required field\r\n        this.setState({\r\n          errorMessage: isRequired ? strings!.isRequiredErrorMessage || ' ' : ''\r\n        });\r\n      }\r\n\r\n      // Execute onSelectDate callback\r\n      if (onSelectDate) {\r\n        // If no input date string or input date string is invalid\r\n        // date variable will be null, callback should expect null value for this case\r\n        onSelectDate(date);\r\n      }\r\n    } else if (isRequired && !inputValue) {\r\n      // Check when DatePicker is a required field but has NO input value\r\n      this.setState({\r\n        errorMessage: strings!.isRequiredErrorMessage || ' '\r\n      });\r\n    }\r\n  };\r\n\r\n  private _getDefaultState(props: IDatePickerProps = this.props): IDatePickerState {\r\n    return {\r\n      selectedDate: props.value || undefined,\r\n      formattedDate: props.formatDate && props.value ? props.formatDate(props.value) : '',\r\n      isDatePickerShown: false,\r\n      errorMessage: undefined\r\n    };\r\n  }\r\n\r\n  private _isDateOutOfBounds(date: Date, minDate?: Date, maxDate?: Date): boolean {\r\n    return (!!minDate && compareDatePart(minDate!, date) > 0) || (!!maxDate && compareDatePart(maxDate!, date) < 0);\r\n  }\r\n}\r\n","import { IDatePickerStyleProps, IDatePickerStyles } from './DatePicker.types';\r\nimport { IStyle, normalize, getGlobalClassNames, FontSizes } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-DatePicker',\r\n  callout: 'ms-DatePicker-callout',\r\n  withLabel: 'ms-DatePicker-event--with-label',\r\n  withoutLabel: 'ms-DatePicker-event--without-label',\r\n  disabled: 'msDatePickerDisabled '\r\n};\r\n\r\nexport const styles = (props: IDatePickerStyleProps): IDatePickerStyles => {\r\n  const { className, theme, disabled, label, isDatePickerShown } = props;\r\n  const { palette, semanticColors } = theme;\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const DatePickerEvent: IStyle = {\r\n    color: palette.neutralSecondary,\r\n    fontSize: FontSizes.icon,\r\n    lineHeight: '18px',\r\n    pointerEvents: 'none',\r\n    position: 'absolute',\r\n    right: '9px'\r\n  };\r\n\r\n  return {\r\n    root: [classNames.root, theme.fonts.medium, isDatePickerShown && 'is-open', normalize, className],\r\n    textField: [\r\n      {\r\n        position: 'relative',\r\n        selectors: {\r\n          '& input[readonly]': {\r\n            cursor: 'pointer'\r\n          },\r\n          input: {\r\n            selectors: {\r\n              '::-ms-clear': {\r\n                display: 'none'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n      disabled && {\r\n        selectors: {\r\n          '& input[readonly]': {\r\n            cursor: 'default'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    callout: [classNames.callout],\r\n    icon: [\r\n      DatePickerEvent,\r\n      !label && [classNames.withoutLabel, { top: '7px' }],\r\n      label && [classNames.withLabel, { bottom: '5px' }],\r\n      !disabled && [\r\n        classNames.disabled,\r\n        {\r\n          pointerEvents: 'initial',\r\n          cursor: 'pointer'\r\n        }\r\n      ],\r\n      disabled && {\r\n        color: semanticColors.disabledText,\r\n        cursor: 'default'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IDatePickerProps, IDatePickerStyleProps, IDatePickerStyles } from './DatePicker.types';\r\nimport { DatePickerBase } from './DatePicker.base';\r\nimport { styles } from './DatePicker.styles';\r\n\r\n/**\r\n * DatePicker description\r\n */\r\nexport const DatePicker: React.StatelessComponent<IDatePickerProps> = styled<IDatePickerProps, IDatePickerStyleProps, IDatePickerStyles>(\r\n  DatePickerBase,\r\n  styles,\r\n  undefined,\r\n  {\r\n    scope: 'DatePicker'\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction } from '../../../Utilities';\r\nimport { Icon } from '../../../Icon';\r\nimport {\r\n  IPersonaPresenceProps,\r\n  IPersonaPresenceStyleProps,\r\n  IPersonaPresenceStyles,\r\n  PersonaPresence as PersonaPresenceEnum,\r\n  PersonaSize\r\n} from '../Persona.types';\r\nimport { sizeBoolean } from '../PersonaConsts';\r\n\r\nconst coinSizeFontScaleFactor = 6;\r\nconst coinSizePresenceScaleFactor = 3;\r\nconst presenceMaxSize = 40;\r\nconst presenceFontMaxSize = 20;\r\n\r\nconst getClassNames = classNamesFunction<IPersonaPresenceStyleProps, IPersonaPresenceStyles>();\r\n\r\n/**\r\n * PersonaPresence with no default styles.\r\n * [Use the `getStyles` API to add your own styles.](https://github.com/OfficeDev/office-ui-fabric-react/wiki/Styling)\r\n */\r\nexport class PersonaPresenceBase extends BaseComponent<IPersonaPresenceProps, {}> {\r\n  constructor(props: IPersonaPresenceProps) {\r\n    super(props);\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    const {\r\n      coinSize,\r\n      styles, // Use getStyles from props.\r\n      presence,\r\n      theme\r\n    } = this.props;\r\n    const size = sizeBoolean(this.props.size as PersonaSize);\r\n\r\n    // Render Presence Icon if Persona is above size 32.\r\n    const renderIcon =\r\n      !(size.isSize10 || size.isSize16 || size.isSize24 || size.isSize28 || size.isSize32) && (coinSize ? coinSize > 32 : true);\r\n\r\n    const presenceHeightWidth: string = coinSize\r\n      ? coinSize / coinSizePresenceScaleFactor < presenceMaxSize\r\n        ? coinSize / coinSizePresenceScaleFactor + 'px'\r\n        : presenceMaxSize + 'px'\r\n      : '';\r\n    const presenceFontSize: string = coinSize\r\n      ? coinSize / coinSizeFontScaleFactor < presenceFontMaxSize\r\n        ? coinSize / coinSizeFontScaleFactor + 'px'\r\n        : presenceFontMaxSize + 'px'\r\n      : '';\r\n    const coinSizeWithPresenceIconStyle = coinSize ? { fontSize: presenceFontSize, lineHeight: presenceHeightWidth } : undefined;\r\n    const coinSizeWithPresenceStyle = coinSize ? { width: presenceHeightWidth, height: presenceHeightWidth } : undefined;\r\n\r\n    // Use getStyles from props, or fall back to getStyles from styles file.\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      presence,\r\n      size: this.props.size\r\n    });\r\n\r\n    if (presence === PersonaPresenceEnum.none) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <div className={classNames.presence} style={coinSizeWithPresenceStyle}>\r\n        {renderIcon && this._onRenderIcon(classNames.presenceIcon, coinSizeWithPresenceIconStyle)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onRenderIcon = (className?: string, style?: React.CSSProperties): JSX.Element => (\r\n    <Icon className={className} iconName={this._determineIcon()} style={style} />\r\n  );\r\n\r\n  private _determineIcon = (): string | undefined => {\r\n    const { presence } = this.props;\r\n\r\n    if (presence !== PersonaPresenceEnum.none) {\r\n      let userPresence = PersonaPresenceEnum[presence as PersonaPresenceEnum];\r\n\r\n      switch (userPresence) {\r\n        case 'online':\r\n          userPresence = 'SkypeCheck';\r\n          break;\r\n        case 'away':\r\n          userPresence = 'SkypeClock';\r\n          break;\r\n        case 'dnd':\r\n          userPresence = 'SkypeMinus';\r\n          break;\r\n        default:\r\n          userPresence = '';\r\n      }\r\n\r\n      return userPresence;\r\n    }\r\n  };\r\n}\r\n","import { IPersonaPresenceStyleProps, IPersonaPresenceStyles, PersonaPresence, PersonaSize } from '../Persona.types';\r\nimport { FontSizes, HighContrastSelector, getGlobalClassNames } from '../../../Styling';\r\nimport { personaPresenceSize, presenceBoolean, sizeBoolean } from '../PersonaConsts';\r\n\r\nconst GlobalClassNames = {\r\n  presence: 'ms-Persona-presence',\r\n  presenceIcon: 'ms-Persona-presenceIcon'\r\n};\r\n\r\nexport const getStyles = (props: IPersonaPresenceStyleProps): IPersonaPresenceStyles => {\r\n  const { theme } = props;\r\n  const { semanticColors } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const size = sizeBoolean(props.size as PersonaSize);\r\n  const presence = presenceBoolean(props.presence as PersonaPresence);\r\n\r\n  // Presence colors\r\n  const presenceColorAvailable = '#7FBA00';\r\n  const presenceColorAway = '#FCD116';\r\n  const presenceColorBusy = '#D93B3B';\r\n  const presenceColorDnd = '#E81123';\r\n  const presenceColorOffline = '#93ABBD';\r\n\r\n  return {\r\n    presence: [\r\n      classNames.presence,\r\n      {\r\n        position: 'absolute',\r\n        height: personaPresenceSize.size12,\r\n        width: personaPresenceSize.size12,\r\n        borderRadius: '50%',\r\n        top: 'auto',\r\n        right: `-${personaPresenceSize.border}`,\r\n        bottom: `-${personaPresenceSize.border}`,\r\n        border: `${personaPresenceSize.border} solid ${semanticColors.bodyBackground}`,\r\n        textAlign: 'center',\r\n        boxSizing: 'content-box',\r\n        backgroundClip: 'content-box',\r\n        MsHighContrastAdjust: 'none',\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            borderColor: 'Window',\r\n            backgroundColor: 'WindowText'\r\n          }\r\n        }\r\n      },\r\n\r\n      size.isSize10 && {\r\n        right: 'auto',\r\n        top: '7px',\r\n        left: 0,\r\n        border: 0,\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            top: '9px',\r\n            border: '1px solid WindowText'\r\n          }\r\n        }\r\n      },\r\n\r\n      (size.isSize10 || size.isSize24 || size.isSize28 || size.isSize32) && {\r\n        height: personaPresenceSize.size8,\r\n        width: personaPresenceSize.size8\r\n      },\r\n\r\n      size.isSize16 && {\r\n        height: personaPresenceSize.size6,\r\n        width: personaPresenceSize.size6,\r\n        borderWidth: '1.5px'\r\n      },\r\n\r\n      size.isSize72 && {\r\n        height: personaPresenceSize.size20,\r\n        width: personaPresenceSize.size20\r\n      },\r\n\r\n      size.isSize100 && {\r\n        height: personaPresenceSize.size28,\r\n        width: personaPresenceSize.size28\r\n      },\r\n\r\n      presence.isAvailable && {\r\n        backgroundColor: presenceColorAvailable,\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            backgroundColor: 'Highlight'\r\n          }\r\n        }\r\n      },\r\n\r\n      presence.isAway && {\r\n        backgroundColor: presenceColorAway\r\n      },\r\n\r\n      presence.isBlocked && [\r\n        {\r\n          backgroundColor: semanticColors.bodyBackground,\r\n\r\n          selectors: {\r\n            ':before': {\r\n              content: '\"\"',\r\n              width: '100%',\r\n              height: '100%',\r\n              position: 'absolute',\r\n              top: 0,\r\n              left: 0,\r\n              border: `${personaPresenceSize.border} solid ${presenceColorBusy}`,\r\n              borderRadius: '50%',\r\n              boxSizing: 'border-box'\r\n            },\r\n\r\n            // Only show :after at larger sizes\r\n            ':after':\r\n              size.isSize40 || size.isSize48 || size.isSize72 || size.isSize100\r\n                ? {\r\n                    content: '\"\"',\r\n                    width: '100%',\r\n                    height: personaPresenceSize.border,\r\n                    backgroundColor: presenceColorBusy,\r\n                    transform: 'translateY(-50%) rotate(-45deg)',\r\n                    position: 'absolute',\r\n                    top: '50%',\r\n                    left: 0\r\n                  }\r\n                : undefined,\r\n\r\n            [HighContrastSelector]: {\r\n              backgroundColor: 'WindowText',\r\n\r\n              selectors: {\r\n                ':before': {\r\n                  width: `calc(100% - ${personaPresenceSize.border})`,\r\n                  height: `calc(100% - ${personaPresenceSize.border})`,\r\n                  top: parseFloat(personaPresenceSize.border) / 2 + 'px',\r\n                  left: parseFloat(personaPresenceSize.border) / 2 + 'px',\r\n                  borderColor: 'Window'\r\n                },\r\n\r\n                ':after': {\r\n                  width: `calc(100% - ${parseFloat(personaPresenceSize.border) * 2}px)`,\r\n                  left: personaPresenceSize.border,\r\n                  backgroundColor: 'Window'\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      ],\r\n\r\n      presence.isBusy && {\r\n        backgroundColor: presenceColorBusy\r\n      },\r\n\r\n      presence.isDoNotDisturb && {\r\n        backgroundColor: presenceColorDnd\r\n      },\r\n\r\n      presence.isOffline && {\r\n        backgroundColor: presenceColorOffline\r\n      }\r\n    ],\r\n\r\n    presenceIcon: [\r\n      classNames.presenceIcon,\r\n      {\r\n        color: semanticColors.bodyBackground,\r\n        fontSize: '6px',\r\n        lineHeight: personaPresenceSize.size12,\r\n        verticalAlign: 'top',\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'Window'\r\n          }\r\n        }\r\n      },\r\n\r\n      size.isSize72 && {\r\n        fontSize: FontSizes.small,\r\n        lineHeight: personaPresenceSize.size20\r\n      },\r\n\r\n      size.isSize100 && {\r\n        fontSize: FontSizes.medium,\r\n        lineHeight: personaPresenceSize.size28\r\n      },\r\n\r\n      presence.isAway && {\r\n        position: 'relative',\r\n        left: '1px'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../../Utilities';\r\nimport { IPersonaPresenceProps, IPersonaPresenceStyleProps, IPersonaPresenceStyles } from '../Persona.types';\r\nimport { PersonaPresenceBase } from './PersonaPresence.base';\r\nimport { getStyles } from './PersonaPresence.styles';\r\n\r\n/**\r\n * PersonaPresence is used to render an individual's presence.\r\n */\r\nexport const PersonaPresence: React.StatelessComponent<IPersonaPresenceProps> = styled<\r\n  IPersonaPresenceProps,\r\n  IPersonaPresenceStyleProps,\r\n  IPersonaPresenceStyles\r\n>(PersonaPresenceBase, getStyles, undefined, { scope: 'PersonaPresence' });\r\n","import { PersonaInitialsColor, IPersonaProps } from './Persona.types';\r\n\r\n/**\r\n * These colors are considered reserved colors and can only be set with overrides:\r\n * - Red is a color that often has a special meaning.\r\n * - Transparent is not intended to be used with typical initials due to accessibility issues,\r\n *   its primary use is for Facepile overflow buttons.\r\n */\r\nconst COLOR_SWATCHES_LOOKUP: PersonaInitialsColor[] = [\r\n  PersonaInitialsColor.lightGreen,\r\n  PersonaInitialsColor.lightBlue,\r\n  PersonaInitialsColor.lightPink,\r\n  PersonaInitialsColor.green,\r\n  PersonaInitialsColor.darkGreen,\r\n  PersonaInitialsColor.pink,\r\n  PersonaInitialsColor.magenta,\r\n  PersonaInitialsColor.purple,\r\n  PersonaInitialsColor.violet,\r\n  PersonaInitialsColor.teal,\r\n  PersonaInitialsColor.blue,\r\n  PersonaInitialsColor.darkBlue,\r\n  PersonaInitialsColor.orange,\r\n  PersonaInitialsColor.darkRed\r\n];\r\n\r\nconst COLOR_SWATCHES_NUM_ENTRIES = COLOR_SWATCHES_LOOKUP.length;\r\n\r\nfunction getInitialsColorFromName(displayName: string | undefined): PersonaInitialsColor {\r\n  let color = PersonaInitialsColor.blue;\r\n  if (!displayName) {\r\n    return color;\r\n  }\r\n\r\n  let hashCode = 0;\r\n  for (let iLen: number = displayName.length - 1; iLen >= 0; iLen--) {\r\n    const ch: number = displayName.charCodeAt(iLen);\r\n    const shift: number = iLen % 8;\r\n    // tslint:disable-next-line:no-bitwise\r\n    hashCode ^= (ch << shift) + (ch >> (8 - shift));\r\n  }\r\n\r\n  color = COLOR_SWATCHES_LOOKUP[hashCode % COLOR_SWATCHES_NUM_ENTRIES];\r\n\r\n  return color;\r\n}\r\n\r\nfunction personaInitialsColorToHexCode(personaInitialsColor: PersonaInitialsColor): string {\r\n  switch (personaInitialsColor) {\r\n    case PersonaInitialsColor.lightBlue:\r\n      return '#6BA5E7';\r\n    case PersonaInitialsColor.blue:\r\n      return '#2D89EF';\r\n    case PersonaInitialsColor.darkBlue:\r\n      return '#2B5797';\r\n    case PersonaInitialsColor.teal:\r\n      return '#00ABA9';\r\n    case PersonaInitialsColor.lightGreen:\r\n      return '#99B433';\r\n    case PersonaInitialsColor.green:\r\n      return '#00A300';\r\n    case PersonaInitialsColor.darkGreen:\r\n      return '#1E7145';\r\n    case PersonaInitialsColor.lightPink:\r\n      return '#E773BD';\r\n    case PersonaInitialsColor.pink:\r\n      return '#FF0097';\r\n    case PersonaInitialsColor.magenta:\r\n      return '#7E3878';\r\n    case PersonaInitialsColor.purple:\r\n      return '#603CBA';\r\n    case PersonaInitialsColor.black:\r\n      return '#1D1D1D';\r\n    case PersonaInitialsColor.orange:\r\n      return '#DA532C';\r\n    case PersonaInitialsColor.red:\r\n      return '#EE1111';\r\n    case PersonaInitialsColor.darkRed:\r\n      return '#B91D47';\r\n    case PersonaInitialsColor.transparent:\r\n      return 'transparent';\r\n    case PersonaInitialsColor.violet:\r\n      return '#5E4B8B';\r\n  }\r\n}\r\n\r\nexport function initialsColorPropToColorCode(props: IPersonaProps): string {\r\n  const { primaryText, text } = props;\r\n  let { initialsColor } = props;\r\n  let initialsColorCode: string;\r\n  if (typeof initialsColor === 'string') {\r\n    initialsColorCode = initialsColor;\r\n  } else {\r\n    initialsColor = initialsColor !== undefined ? initialsColor : getInitialsColorFromName(text || primaryText);\r\n    initialsColorCode = personaInitialsColorToHexCode(initialsColor);\r\n  }\r\n\r\n  return initialsColorCode;\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction, divProperties, getInitials, getNativeProps, getRTL } from '../../../Utilities';\r\nimport { mergeStyles } from '../../../Styling';\r\nimport { PersonaPresence } from '../PersonaPresence/index';\r\nimport { Icon } from '../../../Icon';\r\nimport { Image, ImageFit, ImageLoadState } from '../../../Image';\r\nimport {\r\n  IPersonaCoinProps,\r\n  IPersonaCoinStyleProps,\r\n  IPersonaCoinStyles,\r\n  IPersonaPresenceProps,\r\n  PersonaPresence as PersonaPresenceEnum,\r\n  PersonaSize\r\n} from '../Persona.types';\r\nimport { initialsColorPropToColorCode } from '../PersonaInitialsColor';\r\nimport { sizeToPixels } from '../PersonaConsts';\r\n\r\nconst getClassNames = classNamesFunction<IPersonaCoinStyleProps, IPersonaCoinStyles>();\r\n\r\nexport interface IPersonaState {\r\n  isImageLoaded?: boolean;\r\n  isImageError?: boolean;\r\n}\r\n\r\n/**\r\n * PersonaCoin with no default styles.\r\n * [Use the `getStyles` API to add your own styles.](https://github.com/OfficeDev/office-ui-fabric-react/wiki/Styling)\r\n */\r\nexport class PersonaCoinBase extends BaseComponent<IPersonaCoinProps, IPersonaState> {\r\n  public static defaultProps: IPersonaCoinProps = {\r\n    size: PersonaSize.size48,\r\n    presence: PersonaPresenceEnum.none,\r\n    imageAlt: ''\r\n  };\r\n\r\n  constructor(props: IPersonaCoinProps) {\r\n    super(props);\r\n\r\n    this._warnDeprecations({ primaryText: 'text' });\r\n\r\n    this.state = {\r\n      isImageLoaded: false,\r\n      isImageError: false\r\n    };\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: IPersonaCoinProps): void {\r\n    if (nextProps.imageUrl !== this.props.imageUrl) {\r\n      this.setState({\r\n        isImageLoaded: false,\r\n        isImageError: false\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    const {\r\n      className,\r\n      coinProps,\r\n      showUnknownPersonaCoin,\r\n      coinSize,\r\n      styles,\r\n      imageUrl,\r\n      onRenderCoin = this._onRenderCoin,\r\n      onRenderInitials = this._onRenderInitials,\r\n      presence,\r\n      showInitialsUntilImageLoads,\r\n      theme\r\n    } = this.props;\r\n\r\n    const size = this.props.size as PersonaSize;\r\n    const divProps = getNativeProps(this.props, divProperties);\r\n    const divCoinProps = getNativeProps(coinProps || {}, divProperties);\r\n    const coinSizeStyle = coinSize ? { width: coinSize, height: coinSize } : undefined;\r\n    const hideImage = showUnknownPersonaCoin;\r\n\r\n    const personaPresenceProps: IPersonaPresenceProps = {\r\n      coinSize,\r\n      presence,\r\n      size,\r\n      theme\r\n    };\r\n\r\n    // Use getStyles from props, or fall back to getStyles from styles file.\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className: coinProps && coinProps.className ? coinProps.className : className,\r\n      size,\r\n      coinSize,\r\n      showUnknownPersonaCoin\r\n    });\r\n\r\n    const shouldRenderInitials = Boolean(\r\n      !this.state.isImageLoaded && ((showInitialsUntilImageLoads && imageUrl) || !imageUrl || this.state.isImageError || hideImage)\r\n    );\r\n\r\n    return (\r\n      <div {...divProps} className={classNames.coin}>\r\n        {// Render PersonaCoin if size is not size10\r\n        size !== PersonaSize.size10 && size !== PersonaSize.tiny ? (\r\n          <div {...divCoinProps} className={classNames.imageArea} style={coinSizeStyle}>\r\n            {shouldRenderInitials && (\r\n              <div\r\n                className={mergeStyles(\r\n                  classNames.initials,\r\n                  !showUnknownPersonaCoin && { backgroundColor: initialsColorPropToColorCode(this.props) }\r\n                )}\r\n                style={coinSizeStyle}\r\n                aria-hidden=\"true\"\r\n              >\r\n                {onRenderInitials(this.props, this._onRenderInitials)}\r\n              </div>\r\n            )}\r\n            {!hideImage && onRenderCoin(this.props, this._onRenderCoin)}\r\n            <PersonaPresence {...personaPresenceProps} />\r\n          </div>\r\n        ) : // Otherwise, render just PersonaPresence.\r\n        this.props.presence ? (\r\n          <PersonaPresence {...personaPresenceProps} />\r\n        ) : (\r\n          // Just render Contact Icon if there isn't a Presence prop.\r\n          <Icon iconName=\"Contact\" className={classNames.size10WithoutPresenceIcon} />\r\n        )}\r\n        {this.props.children}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onRenderCoin = (props: IPersonaCoinProps): JSX.Element | null => {\r\n    const { coinSize, styles, imageUrl, imageAlt, imageShouldFadeIn, imageShouldStartVisible, theme, showUnknownPersonaCoin } = this.props;\r\n\r\n    // Render the Image component only if an image URL is provided\r\n    if (!imageUrl) {\r\n      return null;\r\n    }\r\n\r\n    const size = this.props.size as PersonaSize;\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      size,\r\n      showUnknownPersonaCoin\r\n    });\r\n\r\n    const dimension = coinSize || sizeToPixels[size];\r\n\r\n    return (\r\n      <Image\r\n        className={classNames.image}\r\n        imageFit={ImageFit.cover}\r\n        src={imageUrl}\r\n        width={dimension}\r\n        height={dimension}\r\n        alt={imageAlt}\r\n        shouldFadeIn={imageShouldFadeIn}\r\n        shouldStartVisible={imageShouldStartVisible}\r\n        onLoadingStateChange={this._onPhotoLoadingStateChange}\r\n      />\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Deprecation helper for getting text.\r\n   */\r\n  private _getText(): string {\r\n    return this.props.text || this.props.primaryText || '';\r\n  }\r\n\r\n  private _onRenderInitials = (props: IPersonaCoinProps): JSX.Element => {\r\n    let { imageInitials } = props;\r\n    const { allowPhoneInitials, showUnknownPersonaCoin } = props;\r\n\r\n    if (showUnknownPersonaCoin) {\r\n      return <Icon iconName=\"Help\" />;\r\n    }\r\n\r\n    const isRTL = getRTL();\r\n\r\n    imageInitials = imageInitials || getInitials(this._getText(), isRTL, allowPhoneInitials);\r\n\r\n    return imageInitials !== '' ? <span>{imageInitials}</span> : <Icon iconName=\"Contact\" />;\r\n  };\r\n\r\n  private _onPhotoLoadingStateChange = (loadState: ImageLoadState) => {\r\n    this.setState({\r\n      isImageLoaded: loadState === ImageLoadState.loaded,\r\n      isImageError: loadState === ImageLoadState.error\r\n    });\r\n\r\n    this.props.onPhotoLoadingStateChange && this.props.onPhotoLoadingStateChange(loadState);\r\n  };\r\n}\r\n","import { IPersonaCoinStyleProps, IPersonaCoinStyles, PersonaSize } from '../Persona.types';\r\nimport { HighContrastSelector, FontSizes, FontWeights, getGlobalClassNames } from '../../../Styling';\r\nimport { sizeBoolean, sizeToPixels } from '../PersonaConsts';\r\n\r\nconst GlobalClassNames = {\r\n  coin: 'ms-Persona-coin',\r\n  imageArea: 'ms-Persona-imageArea',\r\n  image: 'ms-Persona-image',\r\n  initials: 'ms-Persona-initials',\r\n  size10: 'ms-Persona--size10',\r\n  size16: 'ms-Persona--size16',\r\n  size24: 'ms-Persona--size24',\r\n  size28: 'ms-Persona--size28',\r\n  size32: 'ms-Persona--size32',\r\n  size40: 'ms-Persona--size40',\r\n  size48: 'ms-Persona--size48',\r\n  size72: 'ms-Persona--size72',\r\n  size100: 'ms-Persona--size100'\r\n};\r\n\r\nexport const getStyles = (props: IPersonaCoinStyleProps): IPersonaCoinStyles => {\r\n  const { className, theme, coinSize } = props;\r\n\r\n  const { palette } = theme;\r\n\r\n  const size = sizeBoolean(props.size as PersonaSize);\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  // Static colors used when displaying 'unknown persona' coin\r\n  const unknownPersonaBackgroundColor = 'rgb(234, 234, 234)';\r\n  const unknownPersonaFontColor = 'rgb(168, 0, 0)';\r\n\r\n  const dimension = coinSize || (props.size && sizeToPixels[props.size]) || 48;\r\n\r\n  return {\r\n    coin: [\r\n      classNames.coin,\r\n      theme.fonts.medium,\r\n      size.isSize10 && classNames.size10,\r\n      size.isSize16 && classNames.size16,\r\n      size.isSize24 && classNames.size24,\r\n      size.isSize28 && classNames.size28,\r\n      size.isSize32 && classNames.size32,\r\n      size.isSize40 && classNames.size40,\r\n      size.isSize48 && classNames.size48,\r\n      size.isSize72 && classNames.size72,\r\n      size.isSize100 && classNames.size100,\r\n      className\r\n    ],\r\n\r\n    size10WithoutPresenceIcon: {\r\n      fontSize: '10px',\r\n      position: 'absolute',\r\n      top: '5px',\r\n      right: 'auto',\r\n      left: 0\r\n    },\r\n\r\n    imageArea: [\r\n      classNames.imageArea,\r\n      {\r\n        position: 'relative',\r\n        textAlign: 'center',\r\n        flex: '0 0 auto',\r\n        height: dimension,\r\n        width: dimension\r\n      },\r\n\r\n      dimension <= 10 && {\r\n        overflow: 'visible',\r\n        background: 'transparent',\r\n        height: 0,\r\n        width: 0\r\n      }\r\n    ],\r\n\r\n    image: [\r\n      classNames.image,\r\n      {\r\n        marginRight: '10px',\r\n        position: 'absolute',\r\n        top: 0,\r\n        left: 0,\r\n        width: '100%',\r\n        height: '100%',\r\n        border: 0,\r\n        borderRadius: '50%',\r\n        perspective: '1px'\r\n      },\r\n\r\n      dimension <= 10 && {\r\n        overflow: 'visible',\r\n        background: 'transparent',\r\n        height: 0,\r\n        width: 0\r\n      },\r\n\r\n      dimension > 10 && {\r\n        height: dimension,\r\n        width: dimension\r\n      }\r\n    ],\r\n\r\n    initials: [\r\n      classNames.initials,\r\n      {\r\n        borderRadius: '50%',\r\n        color: props.showUnknownPersonaCoin ? unknownPersonaFontColor : palette.white,\r\n        fontSize: FontSizes.large,\r\n        fontWeight: FontWeights.regular,\r\n        lineHeight: dimension === 48 ? 46 : dimension, // copying the logic for the dimensions; defaulted to 46 for size48\r\n        height: dimension,\r\n\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            border: '1px solid WindowText',\r\n            MsHighContrastAdjust: 'none',\r\n            color: 'WindowText',\r\n            boxSizing: 'border-box',\r\n            backgroundColor: 'Window !important'\r\n          }\r\n        }\r\n      },\r\n\r\n      props.showUnknownPersonaCoin && {\r\n        backgroundColor: unknownPersonaBackgroundColor\r\n      },\r\n\r\n      dimension < 32 && {\r\n        fontSize: FontSizes.xSmall\r\n      },\r\n\r\n      dimension >= 32 &&\r\n        dimension < 48 && {\r\n          fontSize: FontSizes.medium\r\n        },\r\n\r\n      dimension >= 72 &&\r\n        dimension < 100 && {\r\n          fontSize: FontSizes.xxLarge\r\n        },\r\n\r\n      dimension >= 100 && {\r\n        fontSize: FontSizes.superLarge\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../../Utilities';\r\nimport { IPersonaCoinProps, IPersonaCoinStyleProps, IPersonaCoinStyles } from '../Persona.types';\r\nimport { PersonaCoinBase } from './PersonaCoin.base';\r\nimport { getStyles } from './PersonaCoin.styles';\r\n\r\n/**\r\n * PersonaCoin is used to render an individual's avatar and presence.\r\n */\r\nexport const PersonaCoin: React.StatelessComponent<IPersonaCoinProps> = styled<\r\n  IPersonaCoinProps,\r\n  IPersonaCoinStyleProps,\r\n  IPersonaCoinStyles\r\n>(PersonaCoinBase, getStyles, undefined, {\r\n  scope: 'PersonaCoin'\r\n});\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction, divProperties, getNativeProps, IRenderFunction } from '../../Utilities';\r\nimport { TooltipHost, TooltipOverflowMode, DirectionalHint } from '../../Tooltip';\r\nimport { PersonaCoin } from './PersonaCoin/PersonaCoin';\r\nimport {\r\n  IPersonaProps,\r\n  IPersonaStyleProps,\r\n  IPersonaStyles,\r\n  PersonaPresence as PersonaPresenceEnum,\r\n  PersonaSize,\r\n  IPersonaCoinProps\r\n} from './Persona.types';\r\n\r\nconst getClassNames = classNamesFunction<IPersonaStyleProps, IPersonaStyles>();\r\n\r\n/**\r\n * Persona with no default styles.\r\n * [Use the `styles` API to add your own styles.](https://github.com/OfficeDev/office-ui-fabric-react/wiki/Styling)\r\n */\r\nexport class PersonaBase extends BaseComponent<IPersonaProps, {}> {\r\n  public static defaultProps: IPersonaProps = {\r\n    size: PersonaSize.size48,\r\n    presence: PersonaPresenceEnum.none,\r\n    imageAlt: ''\r\n  };\r\n\r\n  constructor(props: IPersonaProps) {\r\n    super(props);\r\n\r\n    this._warnDeprecations({ primaryText: 'text' });\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    // wrapping default render behavior based on various this.props properties\r\n    const _onRenderPrimaryText = this._onRenderText(this._getText()),\r\n      _onRenderSecondaryText = this._onRenderText(this.props.secondaryText),\r\n      _onRenderTertiaryText = this._onRenderText(this.props.tertiaryText),\r\n      _onRenderOptionalText = this._onRenderText(this.props.optionalText);\r\n\r\n    const {\r\n      hidePersonaDetails,\r\n      onRenderOptionalText = _onRenderOptionalText,\r\n      onRenderPrimaryText = _onRenderPrimaryText,\r\n      onRenderSecondaryText = _onRenderSecondaryText,\r\n      onRenderTertiaryText = _onRenderTertiaryText\r\n    } = this.props;\r\n    const size = this.props.size as PersonaSize;\r\n\r\n    // These properties are to be explicitly passed into PersonaCoin because they are the only props directly used\r\n    const {\r\n      allowPhoneInitials,\r\n      className,\r\n      coinProps,\r\n      showUnknownPersonaCoin,\r\n      coinSize,\r\n      styles,\r\n      imageAlt,\r\n      imageInitials,\r\n      imageShouldFadeIn,\r\n      imageShouldStartVisible,\r\n      imageUrl,\r\n      initialsColor,\r\n      onPhotoLoadingStateChange,\r\n      onRenderCoin,\r\n      onRenderInitials,\r\n      presence,\r\n      showInitialsUntilImageLoads,\r\n      showSecondaryText,\r\n      theme\r\n    } = this.props;\r\n\r\n    const personaCoinProps: IPersonaCoinProps = {\r\n      allowPhoneInitials,\r\n      showUnknownPersonaCoin,\r\n      coinSize,\r\n      imageAlt,\r\n      imageInitials,\r\n      imageShouldFadeIn,\r\n      imageShouldStartVisible,\r\n      imageUrl,\r\n      initialsColor,\r\n      onPhotoLoadingStateChange,\r\n      onRenderCoin,\r\n      onRenderInitials,\r\n      presence,\r\n      showInitialsUntilImageLoads,\r\n      size,\r\n      text: this._getText(),\r\n      ...coinProps\r\n    };\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className,\r\n      showSecondaryText,\r\n      presence,\r\n      size\r\n    });\r\n\r\n    const divProps = getNativeProps(this.props, divProperties);\r\n    const personaDetails = (\r\n      <div className={classNames.details}>\r\n        {this._renderElement(classNames.primaryText, onRenderPrimaryText, _onRenderPrimaryText)}\r\n        {this._renderElement(classNames.secondaryText, onRenderSecondaryText, _onRenderSecondaryText)}\r\n        {this._renderElement(classNames.tertiaryText, onRenderTertiaryText, _onRenderTertiaryText)}\r\n        {this._renderElement(classNames.optionalText, onRenderOptionalText, _onRenderOptionalText)}\r\n        {this.props.children}\r\n      </div>\r\n    );\r\n\r\n    return (\r\n      <div {...divProps} className={classNames.root} style={coinSize ? { height: coinSize, minWidth: coinSize } : undefined}>\r\n        <PersonaCoin {...personaCoinProps} />\r\n        {(!hidePersonaDetails || (size === PersonaSize.size10 || size === PersonaSize.tiny)) && personaDetails}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Renders various types of Text (primaryText, secondaryText, etc)\r\n   * based on the classNames passed\r\n   * @param classNames - element className\r\n   * @param renderFunction - render function\r\n   * @param defaultRenderFunction - default render function\r\n   */\r\n  private _renderElement(\r\n    classNames: string,\r\n    renderFunction: IRenderFunction<IPersonaProps> | undefined,\r\n    defaultRenderFunction: IRenderFunction<IPersonaProps> | undefined\r\n  ): JSX.Element {\r\n    return (\r\n      <div dir=\"auto\" className={classNames}>\r\n        {renderFunction && renderFunction(this.props, defaultRenderFunction)}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Deprecation helper for getting text.\r\n   */\r\n  private _getText(): string {\r\n    return this.props.text || this.props.primaryText || '';\r\n  }\r\n\r\n  /**\r\n   * using closure to wrap the default render behavior\r\n   * to make it independent of the type of text passed\r\n   * @param text - text to render\r\n   */\r\n  private _onRenderText(text: string | undefined): IRenderFunction<IPersonaProps> | undefined {\r\n    // return default render behaviour for valid text or undefined\r\n    return text\r\n      ? (): JSX.Element => {\r\n          // default onRender behaviour\r\n          return (\r\n            <TooltipHost content={text} overflowMode={TooltipOverflowMode.Parent} directionalHint={DirectionalHint.topLeftEdge}>\r\n              {text}\r\n            </TooltipHost>\r\n          );\r\n        }\r\n      : undefined;\r\n  }\r\n}\r\n","import { IPersonaStyleProps, IPersonaStyles, PersonaPresence, PersonaSize } from './Persona.types';\r\nimport { FontSizes, FontWeights, IStyle, normalize, noWrap, getGlobalClassNames } from '../../Styling';\r\nimport { personaSize, presenceBoolean, sizeBoolean } from './PersonaConsts';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Persona',\r\n  size10: 'ms-Persona--size10',\r\n  size16: 'ms-Persona--size16',\r\n  size24: 'ms-Persona--size24',\r\n  size28: 'ms-Persona--size28',\r\n  size32: 'ms-Persona--size32',\r\n  size40: 'ms-Persona--size40',\r\n  size48: 'ms-Persona--size48',\r\n  size72: 'ms-Persona--size72',\r\n  size100: 'ms-Persona--size100',\r\n  available: 'ms-Persona--online',\r\n  away: 'ms-Persona--away',\r\n  blocked: 'ms-Persona--blocked',\r\n  busy: 'ms-Persona--busy',\r\n  doNotDisturb: 'ms-Persona--donotdisturb',\r\n  offline: 'ms-Persona--offline',\r\n  details: 'ms-Persona-details',\r\n  primaryText: 'ms-Persona-primaryText',\r\n  secondaryText: 'ms-Persona-secondaryText',\r\n  tertiaryText: 'ms-Persona-tertiaryText',\r\n  optionalText: 'ms-Persona-optionalText',\r\n  textContent: 'ms-Persona-textContent'\r\n};\r\n\r\nexport const getStyles = (props: IPersonaStyleProps): IPersonaStyles => {\r\n  const { className, showSecondaryText, theme } = props;\r\n\r\n  const { palette } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const size = sizeBoolean(props.size as PersonaSize);\r\n  const presence = presenceBoolean(props.presence as PersonaPresence);\r\n\r\n  const showSecondaryTextDefaultHeight = '16px';\r\n\r\n  const sharedTextStyles: IStyle = {\r\n    color: palette.neutralSecondary,\r\n    fontWeight: FontWeights.regular,\r\n    fontSize: FontSizes.small\r\n  };\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      normalize,\r\n      {\r\n        color: palette.neutralPrimary,\r\n        fontSize: FontSizes.medium,\r\n        fontWeight: FontWeights.regular,\r\n        position: 'relative',\r\n        height: personaSize.size48,\r\n        minWidth: personaSize.size48,\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n\r\n        selectors: {\r\n          '.contextualHost': {\r\n            display: 'none'\r\n          },\r\n\r\n          ':hover': {\r\n            selectors: {\r\n              $primaryText: {\r\n                color: palette.neutralDark\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n\r\n      size.isSize10 && [\r\n        classNames.size10,\r\n        {\r\n          height: personaSize.size10,\r\n          minWidth: personaSize.size10\r\n        }\r\n      ],\r\n\r\n      size.isSize16 && [\r\n        classNames.size16,\r\n        {\r\n          height: personaSize.size16,\r\n          minWidth: personaSize.size16\r\n        }\r\n      ],\r\n\r\n      size.isSize24 && [\r\n        classNames.size24,\r\n        {\r\n          height: personaSize.size24,\r\n          minWidth: personaSize.size24\r\n        }\r\n      ],\r\n\r\n      size.isSize24 &&\r\n        showSecondaryText && {\r\n          height: '36px'\r\n        },\r\n\r\n      size.isSize28 && [\r\n        classNames.size28,\r\n        {\r\n          height: personaSize.size28,\r\n          minWidth: personaSize.size28\r\n        }\r\n      ],\r\n\r\n      size.isSize28 &&\r\n        showSecondaryText && {\r\n          height: '32px'\r\n        },\r\n\r\n      size.isSize32 && [\r\n        classNames.size32,\r\n        {\r\n          height: personaSize.size32,\r\n          minWidth: personaSize.size32\r\n        }\r\n      ],\r\n\r\n      size.isSize40 && [\r\n        classNames.size40,\r\n        {\r\n          height: personaSize.size40,\r\n          minWidth: personaSize.size40\r\n        }\r\n      ],\r\n\r\n      size.isSize48 && classNames.size48,\r\n\r\n      size.isSize72 && [\r\n        classNames.size72,\r\n        {\r\n          height: personaSize.size72,\r\n          minWidth: personaSize.size72\r\n        }\r\n      ],\r\n\r\n      size.isSize100 && [\r\n        classNames.size100,\r\n        {\r\n          height: personaSize.size100,\r\n          minWidth: personaSize.size100\r\n        }\r\n      ],\r\n\r\n      /**\r\n       * Modifiers: presence\r\n       */\r\n      presence.isAvailable && classNames.available,\r\n      presence.isAway && classNames.away,\r\n      presence.isBlocked && classNames.blocked,\r\n      presence.isBusy && classNames.busy,\r\n      presence.isDoNotDisturb && classNames.doNotDisturb,\r\n      presence.isOffline && classNames.offline,\r\n      className\r\n    ],\r\n\r\n    details: [\r\n      classNames.details,\r\n      {\r\n        padding: '0 24px 0 16px',\r\n        minWidth: 0,\r\n        width: '100%',\r\n        textAlign: 'left',\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        justifyContent: 'space-around'\r\n      },\r\n\r\n      size.isSize10 && {\r\n        paddingLeft: '17px'\r\n      },\r\n\r\n      (size.isSize24 || size.isSize28) && {\r\n        padding: '0 12px'\r\n      }\r\n    ],\r\n\r\n    primaryText: [\r\n      classNames.primaryText,\r\n      noWrap,\r\n      {\r\n        color: palette.neutralPrimary,\r\n        fontWeight: FontWeights.regular,\r\n        fontSize: FontSizes.large\r\n      },\r\n\r\n      showSecondaryText && {\r\n        height: showSecondaryTextDefaultHeight,\r\n        lineHeight: showSecondaryTextDefaultHeight,\r\n        overflowX: 'hidden'\r\n      },\r\n\r\n      size.isSize10 && {\r\n        fontSize: FontSizes.small,\r\n        lineHeight: personaSize.size10\r\n      },\r\n\r\n      (size.isSize16 || size.isSize24 || size.isSize28 || size.isSize32 || size.isSize40) && {\r\n        fontSize: FontSizes.medium\r\n      },\r\n\r\n      size.isSize16 && {\r\n        lineHeight: personaSize.size28\r\n      },\r\n\r\n      (size.isSize24 || size.isSize28 || size.isSize32 || size.isSize40) &&\r\n        showSecondaryText && {\r\n          height: '18px'\r\n        },\r\n\r\n      size.isSize72 && {\r\n        fontSize: FontSizes.xLarge\r\n      },\r\n\r\n      size.isSize100 && {\r\n        fontSize: FontSizes.xLarge,\r\n        fontWeight: FontWeights.semilight\r\n      }\r\n    ],\r\n\r\n    secondaryText: [\r\n      classNames.secondaryText,\r\n      noWrap,\r\n      sharedTextStyles,\r\n\r\n      (size.isSize10 || size.isSize16 || size.isSize24 || size.isSize28 || size.isSize32) && {\r\n        display: 'none'\r\n      },\r\n\r\n      size.isSize24 &&\r\n        showSecondaryText && {\r\n          height: '18px'\r\n        },\r\n\r\n      (size.isSize72 || size.isSize100) && {\r\n        fontSize: FontSizes.medium\r\n      },\r\n\r\n      showSecondaryText && {\r\n        display: 'block',\r\n        height: showSecondaryTextDefaultHeight,\r\n        lineHeight: showSecondaryTextDefaultHeight,\r\n        overflowX: 'hidden'\r\n      }\r\n    ],\r\n\r\n    tertiaryText: [\r\n      classNames.tertiaryText,\r\n      noWrap,\r\n      sharedTextStyles,\r\n      {\r\n        display: 'none'\r\n      },\r\n\r\n      (size.isSize72 || size.isSize100) && {\r\n        display: 'block'\r\n      }\r\n    ],\r\n\r\n    optionalText: [\r\n      classNames.optionalText,\r\n      noWrap,\r\n      sharedTextStyles,\r\n      {\r\n        display: 'none'\r\n      },\r\n\r\n      size.isSize100 && {\r\n        display: 'block'\r\n      }\r\n    ],\r\n\r\n    textContent: [classNames.textContent, noWrap]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IPersonaProps, IPersonaStyleProps, IPersonaStyles } from './Persona.types';\r\nimport { PersonaBase } from './Persona.base';\r\nimport { getStyles } from './Persona.styles';\r\n\r\n/**\r\n * Personas are used for rendering an individual's avatar, presence and details.\r\n * They are used within the PeoplePicker components.\r\n */\r\nexport const Persona: React.StatelessComponent<IPersonaProps> = styled<IPersonaProps, IPersonaStyleProps, IPersonaStyles>(\r\n  PersonaBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Persona'\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport * as PropTypes from 'prop-types';\r\n\r\n/**\r\n * @deprecated This function uses the legacy context API, which is deprecated and should not be\r\n * used in new code. Please migrate to the new context API. https://reactjs.org/docs/context.html\r\n */\r\nexport function provideContext<TContext, TProps>(\r\n  contextTypes: PropTypes.ValidationMap<TContext>,\r\n  mapPropsToContext: (props: TProps) => TContext\r\n): React.ComponentType<TProps> {\r\n  class Provider extends React.Component<TProps> {\r\n    public static readonly childContextTypes: PropTypes.ValidationMap<TContext> = contextTypes;\r\n\r\n    public getChildContext(): TContext {\r\n      return mapPropsToContext(this.props);\r\n    }\r\n\r\n    public render(): JSX.Element | null {\r\n      return React.Children.only(this.props.children);\r\n    }\r\n  }\r\n\r\n  return Provider;\r\n}\r\n","import * as React from 'react';\r\nimport { DialogContentBase } from './DialogContent.base';\r\nimport { IButtonProps } from '../Button/Button.types';\r\nimport { ResponsiveMode } from '../../utilities/decorators/withResponsiveMode';\r\nimport { IStyle, ITheme } from '../../Styling';\r\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\r\n\r\n/**\r\n * {@docCategory Dialog}\r\n */\r\nexport interface IDialogContent {}\r\n\r\n/**\r\n * {@docCategory Dialog}\r\n */\r\nexport interface IDialogContentProps extends React.ClassAttributes<DialogContentBase> {\r\n  /**\r\n   * Optional callback to access the IDialogContent interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IDialogContent>;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules\r\n   */\r\n  styles?: IStyleFunctionOrObject<IDialogContentStyleProps, IDialogContentStyles>;\r\n\r\n  /**\r\n   * Theme provided by HOC.\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Is inside a multiline wrapper\r\n   */\r\n  isMultiline?: boolean;\r\n\r\n  /**\r\n   * Show an 'x' close button in the upper-right corner\r\n   */\r\n  showCloseButton?: boolean;\r\n\r\n  /**\r\n   * Other top buttons that will show up next to the close button\r\n   */\r\n  topButtonsProps?: IButtonProps[];\r\n\r\n  /**\r\n   * Optional override class name\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * A callback function for when the Dialog is dismissed from the close button or light dismiss, before the animation completes.\r\n   */\r\n  onDismiss?: (ev?: React.MouseEvent<HTMLButtonElement>) => any;\r\n\r\n  /**\r\n   * The Id for subText container\r\n   */\r\n  subTextId?: string;\r\n\r\n  /**\r\n   * The subtext to display in the dialog\r\n   */\r\n  subText?: string;\r\n\r\n  /**\r\n   * The Id for title container\r\n   */\r\n  titleId?: string;\r\n\r\n  /**\r\n   * The title text to display at the top of the dialog.\r\n   */\r\n  title?: string | JSX.Element;\r\n\r\n  /**\r\n   * Responsive mode passed in from decorator.\r\n   */\r\n  responsiveMode?: ResponsiveMode;\r\n\r\n  /**\r\n   * Label to be passed to to aria-label of close button\r\n   * @defaultvalue Close\r\n   */\r\n  closeButtonAriaLabel?: string;\r\n\r\n  /**\r\n   * The type of Dialog to display.\r\n   * @defaultvalue DialogType.normal\r\n   */\r\n  type?: DialogType;\r\n}\r\n\r\n/**\r\n * {@docCategory Dialog}\r\n */\r\nexport enum DialogType {\r\n  /** Standard dialog */\r\n  normal = 0,\r\n  /** Dialog with large header banner */\r\n  largeHeader = 1,\r\n  /** Dialog with an 'x' close button in the upper-right corner */\r\n  close = 2\r\n}\r\n\r\n/**\r\n * {@docCategory Dialog}\r\n */\r\nexport interface IDialogContentStyleProps {\r\n  /**\r\n   * Accept theme prop.\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Accept custom classNames\r\n   */\r\n  className?: string;\r\n\r\n  isLargeHeader?: boolean;\r\n  isClose?: boolean;\r\n  hidden?: boolean;\r\n\r\n  /**\r\n   * Is inside a multiline wrapper\r\n   */\r\n  isMultiline?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory Dialog}\r\n */\r\nexport interface IDialogContentStyles {\r\n  /**\r\n   * Style for the content element.\r\n   */\r\n  content: IStyle;\r\n  subText: IStyle;\r\n  header: IStyle;\r\n  button: IStyle;\r\n  inner: IStyle;\r\n  innerContent: IStyle;\r\n  title: IStyle;\r\n  topButton: IStyle;\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { Persona, PersonaInitialsColor } from 'office-ui-fabric-react/lib/Persona';\r\n\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\n\r\nimport './Title.css';\r\n\r\nexport interface ITitleState {}\r\n\r\nexport interface ITitleProps {\r\n  icon?: boolean;\r\n  color?: string | PersonaInitialsColor;\r\n  title: string;\r\n}\r\n\r\nexport class Title extends React.PureComponent<ITitleProps, ITitleState> {\r\n  constructor(props: ITitleProps) {\r\n    super(props);\r\n    this.state = {};\r\n  }\r\n  public render(): JSX.Element {\r\n    const { icon, title, color } = this.props;\r\n    const inColor: string | PersonaInitialsColor = color ? color : PersonaInitialsColor.blue;\r\n\r\n    return (\r\n      <div className=\"ms-Grid\">\r\n        {icon && (\r\n          <div className=\"ms-Grid-row\">\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12 title-squarePersona\">\r\n              <Persona text={title} initialsColor={inColor} />\r\n            </div>\r\n          </div>\r\n        )}\r\n        {!icon && (\r\n          <div className=\"ms-Grid-row\">\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n              <Label className=\"ms-font-l\">{title}</Label>\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className=\"ms-Grid-row title-nl-md\">\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { FocusZone, FocusZoneDirection, IFocusZone } from '../../FocusZone';\r\nimport { IKeytipProps } from '../../Keytip';\r\nimport { BaseComponent, classNamesFunction, divProperties, elementContains, focusFirstChild, getNativeProps } from '../../Utilities';\r\nimport { IProcessedStyleSet } from '../../Styling';\r\nimport { KeytipManager } from '../../utilities/keytips/KeytipManager';\r\nimport { IOverflowSet, IOverflowSetItemProps, IOverflowSetProps, IOverflowSetStyles, IOverflowSetStyleProps } from './OverflowSet.types';\r\n\r\nconst getClassNames = classNamesFunction<IOverflowSetStyleProps, IOverflowSetStyles>();\r\n\r\nexport class OverflowSetBase extends BaseComponent<IOverflowSetProps, {}> implements IOverflowSet {\r\n  public static defaultProps: Pick<IOverflowSetProps, 'vertical' | 'role'> = {\r\n    vertical: false,\r\n    role: 'menubar'\r\n  };\r\n\r\n  private _focusZone = React.createRef<IFocusZone>();\r\n  private _persistedKeytips: { [uniqueID: string]: IKeytipProps } = {};\r\n  private _keytipManager: KeytipManager = KeytipManager.getInstance();\r\n  private _divContainer = React.createRef<HTMLDivElement>();\r\n  private _classNames: IProcessedStyleSet<IOverflowSetStyles>;\r\n\r\n  constructor(props: IOverflowSetProps) {\r\n    super(props);\r\n\r\n    if (props.doNotContainWithinFocusZone) {\r\n      this._warnMutuallyExclusive({\r\n        doNotContainWithinFocusZone: 'focusZoneProps'\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { items, overflowItems, className, focusZoneProps, styles, vertical, role, doNotContainWithinFocusZone } = this.props;\r\n\r\n    this._classNames = getClassNames(styles, { className, vertical });\r\n\r\n    let Tag;\r\n    let uniqueComponentProps;\r\n\r\n    if (doNotContainWithinFocusZone) {\r\n      Tag = 'div';\r\n      uniqueComponentProps = {\r\n        ...getNativeProps(this.props, divProperties),\r\n        ref: this._divContainer\r\n      };\r\n    } else {\r\n      Tag = FocusZone;\r\n      uniqueComponentProps = {\r\n        ...getNativeProps(this.props, divProperties),\r\n        ...focusZoneProps,\r\n        componentRef: this._focusZone,\r\n        direction: vertical ? FocusZoneDirection.vertical : FocusZoneDirection.horizontal\r\n      };\r\n    }\r\n\r\n    return (\r\n      <Tag {...uniqueComponentProps} className={this._classNames.root} role={role}>\r\n        {items && this._onRenderItems(items)}\r\n        {overflowItems && overflowItems.length > 0 && this._onRenderOverflowButtonWrapper(overflowItems)}\r\n      </Tag>\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Sets focus to the first tabbable item in the OverflowSet.\r\n   * @param forceIntoFirstElement - If true, focus will be forced into the first element,\r\n   * even if focus is already in theOverflowSet\r\n   * @returns True if focus could be set to an active element, false if no operation was taken.\r\n   */\r\n  public focus(forceIntoFirstElement?: boolean): boolean {\r\n    let focusSucceeded = false;\r\n\r\n    if (this.props.doNotContainWithinFocusZone) {\r\n      if (this._divContainer.current) {\r\n        focusSucceeded = focusFirstChild(this._divContainer.current);\r\n      }\r\n    } else if (this._focusZone.current) {\r\n      focusSucceeded = this._focusZone.current.focus(forceIntoFirstElement);\r\n    }\r\n\r\n    return focusSucceeded;\r\n  }\r\n\r\n  /**\r\n   * Sets focus to a specific child element within the OverflowSet.\r\n   * @param childElement - The child element within the zone to focus.\r\n   * @returns True if focus could be set to an active element, false if no operation was taken.\r\n   */\r\n  public focusElement(childElement?: HTMLElement): boolean {\r\n    let focusSucceeded = false;\r\n\r\n    if (!childElement) {\r\n      return false;\r\n    }\r\n\r\n    if (this.props.doNotContainWithinFocusZone) {\r\n      if (this._divContainer.current && elementContains(this._divContainer.current, childElement)) {\r\n        childElement.focus();\r\n        focusSucceeded = document.activeElement === childElement;\r\n      }\r\n    } else if (this._focusZone.current) {\r\n      focusSucceeded = this._focusZone.current.focusElement(childElement);\r\n    }\r\n\r\n    return focusSucceeded;\r\n  }\r\n\r\n  // Add keytip register/unregister handlers to lifecycle functions to correctly manage persisted keytips\r\n  public componentDidMount() {\r\n    this._registerPersistedKeytips();\r\n  }\r\n\r\n  public componentWillUnmount() {\r\n    this._unregisterPersistedKeytips();\r\n  }\r\n\r\n  public componentWillUpdate() {\r\n    this._unregisterPersistedKeytips();\r\n  }\r\n\r\n  public componentDidUpdate() {\r\n    this._registerPersistedKeytips();\r\n  }\r\n\r\n  private _registerPersistedKeytips() {\r\n    Object.keys(this._persistedKeytips).forEach((key: string) => {\r\n      const keytip = this._persistedKeytips[key];\r\n      const uniqueID = this._keytipManager.register(keytip, true);\r\n      // Update map\r\n      this._persistedKeytips[uniqueID] = keytip;\r\n      delete this._persistedKeytips[key];\r\n    });\r\n  }\r\n\r\n  private _unregisterPersistedKeytips() {\r\n    // Delete all persisted keytips saved\r\n    Object.keys(this._persistedKeytips).forEach((uniqueID: string) => {\r\n      this._keytipManager.unregister(this._persistedKeytips[uniqueID], uniqueID, true);\r\n    });\r\n    this._persistedKeytips = {};\r\n  }\r\n\r\n  private _onRenderItems = (items: IOverflowSetItemProps[]): JSX.Element[] => {\r\n    return items.map((item, i) => {\r\n      const wrapperDivProps: React.HTMLProps<HTMLDivElement> = {\r\n        className: this._classNames.item\r\n      };\r\n      return (\r\n        <div key={item.key} {...wrapperDivProps}>\r\n          {this.props.onRenderItem(item)}\r\n        </div>\r\n      );\r\n    });\r\n  };\r\n\r\n  private _onRenderOverflowButtonWrapper = (items: any[]): JSX.Element => {\r\n    const wrapperDivProps: React.HTMLProps<HTMLDivElement> = {\r\n      className: this._classNames.overflowButton\r\n    };\r\n\r\n    const overflowKeytipSequences = this.props.keytipSequences;\r\n    let newOverflowItems: any[] = [];\r\n\r\n    if (overflowKeytipSequences) {\r\n      items.forEach(overflowItem => {\r\n        const keytip = (overflowItem as IOverflowSetItemProps).keytipProps;\r\n        if (keytip) {\r\n          // Create persisted keytip\r\n          const persistedKeytip: IKeytipProps = {\r\n            content: keytip.content,\r\n            keySequences: keytip.keySequences,\r\n            disabled: keytip.disabled || !!(overflowItem.disabled || overflowItem.isDisabled),\r\n            hasDynamicChildren: keytip.hasDynamicChildren,\r\n            hasMenu: keytip.hasMenu\r\n          };\r\n\r\n          if (keytip.hasDynamicChildren || this._getSubMenuForItem(overflowItem)) {\r\n            // If the keytip has a submenu or children nodes, change onExecute to persistedKeytipExecute\r\n            persistedKeytip.onExecute = this._keytipManager.menuExecute.bind(\r\n              this._keytipManager,\r\n              overflowKeytipSequences,\r\n              overflowItem.keytipProps.keySequences\r\n            );\r\n          } else {\r\n            // If the keytip doesn't have a submenu, just execute the original function\r\n            persistedKeytip.onExecute = keytip.onExecute;\r\n          }\r\n\r\n          // Add this persisted keytip to our internal list, use a temporary uniqueID (its content)\r\n          // uniqueID will get updated on register\r\n          this._persistedKeytips[persistedKeytip.content] = persistedKeytip;\r\n\r\n          // Add the overflow sequence to this item\r\n          const newOverflowItem = {\r\n            ...overflowItem,\r\n            keytipProps: {\r\n              ...keytip,\r\n              overflowSetSequence: overflowKeytipSequences\r\n            }\r\n          };\r\n          newOverflowItems.push(newOverflowItem);\r\n        } else {\r\n          // Nothing to change, add overflowItem to list\r\n          newOverflowItems.push(overflowItem);\r\n        }\r\n      });\r\n    } else {\r\n      newOverflowItems = items;\r\n    }\r\n    return <div {...wrapperDivProps}>{this.props.onRenderOverflowButton(newOverflowItems)}</div>;\r\n  };\r\n\r\n  /**\r\n   * Gets the subMenu for an overflow item\r\n   * Checks if itemSubMenuProvider has been defined, if not defaults to subMenuProps\r\n   */\r\n  private _getSubMenuForItem(item: any): any[] | undefined {\r\n    if (this.props.itemSubMenuProvider) {\r\n      return this.props.itemSubMenuProvider(item);\r\n    }\r\n    if (item.subMenuProps) {\r\n      return item.subMenuProps.items;\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { IOverflowSetStyles, IOverflowSetStyleProps } from './OverflowSet.types';\r\nimport { IStyleFunction } from '../../Utilities';\r\nimport { IStyle } from '../../Styling';\r\n\r\nconst overflowItemStyle: IStyle = {\r\n  flexShrink: 0,\r\n  display: 'inherit'\r\n};\r\n\r\nexport const getStyles: IStyleFunction<IOverflowSetStyleProps, IOverflowSetStyles> = props => {\r\n  const { className, vertical } = props;\r\n  return {\r\n    root: [\r\n      'ms-OverflowSet',\r\n      {\r\n        position: 'relative',\r\n        display: 'flex',\r\n        flexWrap: 'nowrap'\r\n      },\r\n      vertical && { flexDirection: 'column' },\r\n      className\r\n    ],\r\n    item: ['ms-OverflowSet-item', overflowItemStyle],\r\n    overflowButton: ['ms-OverflowSet-overflowButton', overflowItemStyle]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { OverflowSetBase } from './OverflowSet.base';\r\nimport { getStyles } from './OverflowSet.styles';\r\nimport { IOverflowSetProps } from './OverflowSet.types';\r\n\r\nexport const OverflowSet: React.StatelessComponent<IOverflowSetProps> = styled(OverflowSetBase, getStyles, undefined, {\r\n  scope: 'OverflowSet'\r\n});\r\n","import * as React from 'react';\r\nimport * as PropTypes from 'prop-types';\r\nimport { BaseComponent, divProperties, getNativeProps, provideContext } from '../../Utilities';\r\nimport { IResizeGroupProps } from './ResizeGroup.types';\r\n\r\nconst RESIZE_DELAY = 16;\r\n\r\nexport interface IResizeGroupState {\r\n  /**\r\n   * Final data used to render proper sized component\r\n   */\r\n  renderedData?: any;\r\n\r\n  /**\r\n   * Data to render in a hidden div for measurement\r\n   */\r\n  dataToMeasure?: any;\r\n\r\n  /**\r\n   * Set to true when the content container might have new dimensions and should\r\n   * be remeasured.\r\n   */\r\n  measureContainer?: boolean;\r\n\r\n  /**\r\n   * Are we resizing to accommodate having more or less available space?\r\n   * The 'grow' direction is when the container may have more room than the last render,\r\n   * such as when a window resize occurs. This means we will try to fit more content in the window.\r\n   * The 'shrink' direction is when the contents don't fit in the container and we need\r\n   * to find a transformation of the data that makes everything fit.\r\n   */\r\n  resizeDirection?: 'grow' | 'shrink';\r\n}\r\n\r\n/**\r\n * Returns a simple object is able to store measurements with a given key.\r\n */\r\nexport const getMeasurementCache = () => {\r\n  const measurementsCache: { [key: string]: number } = {};\r\n\r\n  return {\r\n    /**\r\n     * Checks if the provided data has a cacheKey. If it has a cacheKey and there is a\r\n     * corresponding entry in the measurementsCache, then it will return that value.\r\n     * Returns undefined otherwise.\r\n     */\r\n    getCachedMeasurement: (data: any): number | undefined => {\r\n      if (data && data.cacheKey && measurementsCache.hasOwnProperty(data.cacheKey)) {\r\n        return measurementsCache[data.cacheKey];\r\n      }\r\n\r\n      return undefined;\r\n    },\r\n    /**\r\n     * Should be called whenever there is a new measurement associated with a given data object.\r\n     * If the data has a cacheKey, store that measurement in the measurementsCache.\r\n     */\r\n    addMeasurementToCache: (data: any, measurement: number): void => {\r\n      if (data.cacheKey) {\r\n        measurementsCache[data.cacheKey] = measurement;\r\n      }\r\n    }\r\n  };\r\n};\r\n\r\n/**\r\n * Returns a function that is able to compute the next state for the ResizeGroup given the current\r\n * state and any measurement updates.\r\n */\r\nexport const getNextResizeGroupStateProvider = (measurementCache = getMeasurementCache()) => {\r\n  const _measurementCache = measurementCache;\r\n  let _containerWidth: number | undefined;\r\n\r\n  /**\r\n   * Gets the width of the data rendered in a hidden div.\r\n   * @param measuredData - The data corresponding to the measurement we wish to take.\r\n   * @param getElementToMeasureWidth - A function that returns the measurement of the rendered data. Only called when the measurement\r\n   * is not in the cache.\r\n   */\r\n  function _getMeasuredWidth(measuredData: any, getElementToMeasureWidth: () => number): number {\r\n    const cachedWidth = _measurementCache.getCachedMeasurement(measuredData);\r\n    if (cachedWidth !== undefined) {\r\n      return cachedWidth;\r\n    }\r\n\r\n    const measuredWidth = getElementToMeasureWidth();\r\n    _measurementCache.addMeasurementToCache(measuredData, measuredWidth);\r\n    return measuredWidth;\r\n  }\r\n\r\n  /**\r\n   * Will get the next IResizeGroupState based on the current data while trying to shrink contents\r\n   * to fit in the container.\r\n   * @param data - The initial data point to start measuring.\r\n   * @param onReduceData - Function that transforms the data into something that should render with less width.\r\n   * @param getElementToMeasureWidth - A function that returns the measurement of the rendered data. Only called when the measurement\r\n   * is not in the cache.\r\n   */\r\n  function _shrinkContentsUntilTheyFit(\r\n    data: any,\r\n    onReduceData: (prevData: any) => any,\r\n    getElementToMeasureWidth: () => number\r\n  ): IResizeGroupState {\r\n    let dataToMeasure = data;\r\n    let measuredWidth: number | undefined = _getMeasuredWidth(data, getElementToMeasureWidth);\r\n\r\n    while (measuredWidth > _containerWidth!) {\r\n      const nextMeasuredData = onReduceData(dataToMeasure);\r\n\r\n      // We don't want to get stuck in an infinite render loop when there are no more\r\n      // scaling steps, so implementations of onReduceData should return undefined when\r\n      // there are no more scaling states to apply.\r\n      if (nextMeasuredData === undefined) {\r\n        return {\r\n          renderedData: dataToMeasure,\r\n          resizeDirection: undefined,\r\n          dataToMeasure: undefined\r\n        };\r\n      }\r\n\r\n      measuredWidth = _measurementCache.getCachedMeasurement(nextMeasuredData);\r\n\r\n      // If the measurement isn't in the cache, we need to rerender with some data in a hidden div\r\n      if (measuredWidth === undefined) {\r\n        return {\r\n          dataToMeasure: nextMeasuredData,\r\n          resizeDirection: 'shrink'\r\n        };\r\n      }\r\n\r\n      dataToMeasure = nextMeasuredData;\r\n    }\r\n\r\n    return {\r\n      renderedData: dataToMeasure,\r\n      resizeDirection: undefined,\r\n      dataToMeasure: undefined\r\n    };\r\n  }\r\n\r\n  /**\r\n   * This function should be called when the state changes in a manner that might allow for more content to fit\r\n   * on the screen, such as the window width growing.\r\n   * @param data - The initial data point to start measuring.\r\n   * @param onGrowData - Function that transforms the data into something that may take up more space when rendering.\r\n   * @param getElementToMeasureWidth - A function that returns the measurement of the rendered data. Only called when the measurement\r\n   * is not in the cache.\r\n   */\r\n  function _growDataUntilItDoesNotFit(\r\n    data: any,\r\n    onGrowData: (prevData: any) => any,\r\n    getElementToMeasureWidth: () => number,\r\n    onReduceData: (prevData: any) => any\r\n  ): IResizeGroupState {\r\n    let dataToMeasure = data;\r\n    let measuredWidth: number | undefined = _getMeasuredWidth(data, getElementToMeasureWidth);\r\n\r\n    while (measuredWidth < _containerWidth!) {\r\n      const nextMeasuredData = onGrowData(dataToMeasure);\r\n\r\n      // We don't want to get stuck in an infinite render loop when there are no more\r\n      // scaling steps, so implementations of onGrowData should return undefined when\r\n      // there are no more scaling states to apply.\r\n      if (nextMeasuredData === undefined) {\r\n        return {\r\n          renderedData: dataToMeasure,\r\n          resizeDirection: undefined,\r\n          dataToMeasure: undefined\r\n        };\r\n      }\r\n\r\n      measuredWidth = _measurementCache.getCachedMeasurement(nextMeasuredData);\r\n      // If the measurement isn't in the cache, we need to rerender with some data in a hidden div\r\n      if (measuredWidth === undefined) {\r\n        return {\r\n          dataToMeasure: nextMeasuredData\r\n        };\r\n      }\r\n\r\n      dataToMeasure = nextMeasuredData;\r\n    }\r\n\r\n    // Once the loop is done, we should now shrink until the contents fit.\r\n    return {\r\n      resizeDirection: 'shrink',\r\n      ..._shrinkContentsUntilTheyFit(dataToMeasure, onReduceData, getElementToMeasureWidth)\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Handles an update to the container width. Should only be called when we knew the previous container width.\r\n   * @param newWidth - The new width of the container.\r\n   * @param fullWidthData - The initial data passed in as a prop to resizeGroup.\r\n   * @param renderedData - The data that was rendered prior to the container size changing.\r\n   * @param onGrowData - Set to true if the Resize group has an onGrowData function.\r\n   */\r\n  function _updateContainerWidth(\r\n    newWidth: number,\r\n    fullWidthData: any,\r\n    renderedData: any,\r\n    onGrowData?: (prevData: any) => any\r\n  ): IResizeGroupState {\r\n    let nextState: IResizeGroupState;\r\n    if (newWidth > _containerWidth!) {\r\n      if (onGrowData) {\r\n        nextState = {\r\n          resizeDirection: 'grow',\r\n          dataToMeasure: onGrowData(renderedData)\r\n        };\r\n      } else {\r\n        nextState = {\r\n          resizeDirection: 'shrink',\r\n          dataToMeasure: fullWidthData\r\n        };\r\n      }\r\n    } else {\r\n      nextState = {\r\n        resizeDirection: 'shrink',\r\n        dataToMeasure: renderedData\r\n      };\r\n    }\r\n    _containerWidth = newWidth;\r\n    return { ...nextState, measureContainer: false };\r\n  }\r\n\r\n  function getNextState(\r\n    props: IResizeGroupProps,\r\n    currentState: IResizeGroupState,\r\n    getElementToMeasureWidth: () => number,\r\n    newContainerWidth?: number\r\n  ): IResizeGroupState | undefined {\r\n    // If there is no new container width or data to measure, there is no need for a new state update\r\n    if (newContainerWidth === undefined && currentState.dataToMeasure === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (newContainerWidth) {\r\n      // If we know what the last container size was and we rendered data at that width, we can do an optimized render\r\n      if (_containerWidth && currentState.renderedData && !currentState.dataToMeasure) {\r\n        return {\r\n          ...currentState,\r\n          ..._updateContainerWidth(newContainerWidth, props.data, currentState.renderedData, props.onGrowData)\r\n        };\r\n      }\r\n\r\n      // If we are just setting the container width for the first time, we can't do any optimizations\r\n      _containerWidth = newContainerWidth;\r\n    }\r\n\r\n    let nextState: IResizeGroupState = {\r\n      ...currentState,\r\n      measureContainer: false\r\n    };\r\n\r\n    if (currentState.dataToMeasure) {\r\n      if (currentState.resizeDirection === 'grow' && props.onGrowData) {\r\n        nextState = {\r\n          ...nextState,\r\n          ..._growDataUntilItDoesNotFit(currentState.dataToMeasure, props.onGrowData, getElementToMeasureWidth, props.onReduceData)\r\n        };\r\n      } else {\r\n        nextState = {\r\n          ...nextState,\r\n          ..._shrinkContentsUntilTheyFit(currentState.dataToMeasure, props.onReduceData, getElementToMeasureWidth)\r\n        };\r\n      }\r\n    }\r\n\r\n    return nextState;\r\n  }\r\n\r\n  /** Function that determines if we need to render content for measurement based on the measurement cache contents. */\r\n  function shouldRenderDataForMeasurement(dataToMeasure: any | undefined): boolean {\r\n    if (!dataToMeasure || _measurementCache.getCachedMeasurement(dataToMeasure) !== undefined) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  function getInitialResizeGroupState(data: any): IResizeGroupState {\r\n    return {\r\n      dataToMeasure: { ...data },\r\n      resizeDirection: 'grow',\r\n      measureContainer: true\r\n    };\r\n  }\r\n\r\n  return {\r\n    getNextState,\r\n    shouldRenderDataForMeasurement,\r\n    getInitialResizeGroupState\r\n  };\r\n};\r\n\r\n// Provides a context property that (if true) tells any child components that\r\n// they are only being used for measurement purposes and will not be visible.\r\nconst MeasuredContext = provideContext(\r\n  {\r\n    isMeasured: PropTypes.bool\r\n  },\r\n  () => {\r\n    return { isMeasured: true };\r\n  }\r\n);\r\n\r\n// Styles for the hidden div used for measurement\r\nconst hiddenDivStyles: React.CSSProperties = { position: 'fixed', visibility: 'hidden' };\r\nconst hiddenParentStyles: React.CSSProperties = { position: 'relative' };\r\n\r\nexport class ResizeGroupBase extends BaseComponent<IResizeGroupProps, IResizeGroupState> {\r\n  private _nextResizeGroupStateProvider = getNextResizeGroupStateProvider();\r\n  // The root div which is the container inside of which we are trying to fit content.\r\n  private _root = React.createRef<HTMLDivElement>();\r\n  // A div that can be used for the initial measurement so that we can avoid mounting a second instance\r\n  // of the component being measured for the initial render.\r\n  private _initialHiddenDiv = React.createRef<HTMLDivElement>();\r\n  // A hidden div that is used for mounting a new instance of the component for measurement in a hidden\r\n  // div without unmounting the currently visible content.\r\n  private _updateHiddenDiv = React.createRef<HTMLDivElement>();\r\n  // Tracks if any content has been rendered to the user. This enables us to do some performance optimizations\r\n  // for the initial render.\r\n  private _hasRenderedContent = false;\r\n\r\n  constructor(props: IResizeGroupProps) {\r\n    super(props);\r\n    this.state = this._nextResizeGroupStateProvider.getInitialResizeGroupState(this.props.data);\r\n\r\n    this._warnDeprecations({\r\n      styles: 'className'\r\n    });\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, onRenderData } = this.props;\r\n    const { dataToMeasure, renderedData } = this.state;\r\n    const divProps = getNativeProps(this.props, divProperties, ['data']);\r\n\r\n    const dataNeedsMeasuring = this._nextResizeGroupStateProvider.shouldRenderDataForMeasurement(dataToMeasure);\r\n\r\n    const isInitialMeasure = !this._hasRenderedContent && dataNeedsMeasuring;\r\n\r\n    // We only ever render the final content to the user. All measurements are done in a hidden div.\r\n    // For the initial render, we want this to be as fast as possible, so we need to make sure that we only mount one version of the\r\n    // component for measurement and the final render. For renders that update what is on screen, we want to make sure that\r\n    // there are no jarring effects such as the screen flashing as we apply scaling steps for meassurement. In the update case,\r\n    // we mount a second version of the component just for measurement purposes and leave the rendered content untouched until we know the\r\n    // next state sto show to the user.\r\n    return (\r\n      <div {...divProps} className={className} ref={this._root}>\r\n        <div style={hiddenParentStyles}>\r\n          {dataNeedsMeasuring && !isInitialMeasure && (\r\n            <div style={hiddenDivStyles} ref={this._updateHiddenDiv}>\r\n              <MeasuredContext>{onRenderData(dataToMeasure)}</MeasuredContext>\r\n            </div>\r\n          )}\r\n\r\n          <div ref={this._initialHiddenDiv} style={isInitialMeasure ? hiddenDivStyles : undefined} data-automation-id=\"visibleContent\">\r\n            {isInitialMeasure ? onRenderData(dataToMeasure) : renderedData && onRenderData(renderedData)}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public componentDidMount(): void {\r\n    this._afterComponentRendered();\r\n    this._events.on(window, 'resize', this._async.debounce(this._onResize, RESIZE_DELAY, { leading: true }));\r\n  }\r\n\r\n  public componentWillReceiveProps(nextProps: IResizeGroupProps): void {\r\n    this.setState({\r\n      dataToMeasure: { ...nextProps.data },\r\n      resizeDirection: 'grow',\r\n      measureContainer: true // Receiving new props means the parent might rerender and the root width might change\r\n    });\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IResizeGroupProps) {\r\n    if (this.state.renderedData) {\r\n      this._hasRenderedContent = true;\r\n      if (this.props.dataDidRender) {\r\n        this.props.dataDidRender(this.state.renderedData);\r\n      }\r\n    }\r\n    this._afterComponentRendered();\r\n  }\r\n\r\n  public remeasure(): void {\r\n    if (this._root.current) {\r\n      this.setState({ measureContainer: true });\r\n    }\r\n  }\r\n\r\n  private _afterComponentRendered(): void {\r\n    this._async.requestAnimationFrame(() => {\r\n      let containerWidth = undefined;\r\n      if (this.state.measureContainer && this._root.current) {\r\n        containerWidth = this._root.current.getBoundingClientRect().width;\r\n      }\r\n      const nextState = this._nextResizeGroupStateProvider.getNextState(\r\n        this.props,\r\n        this.state,\r\n        () => {\r\n          const refToMeasure = !this._hasRenderedContent ? this._initialHiddenDiv : this._updateHiddenDiv;\r\n          return refToMeasure.current ? refToMeasure.current.scrollWidth : 0;\r\n        },\r\n        containerWidth\r\n      );\r\n\r\n      if (nextState) {\r\n        this.setState(nextState);\r\n      }\r\n    });\r\n  }\r\n\r\n  private _onResize(): void {\r\n    if (this._root.current) {\r\n      this.setState({ measureContainer: true });\r\n    }\r\n  }\r\n}\r\n","import { ResizeGroupBase } from './ResizeGroup.base';\r\n\r\nexport const ResizeGroup = ResizeGroupBase;\r\n","import * as React from 'react';\r\n\r\nimport { BaseComponent, css, nullRender } from '../../Utilities';\r\nimport { ICommandBar, ICommandBarItemProps, ICommandBarProps, ICommandBarStyleProps, ICommandBarStyles } from './CommandBar.types';\r\nimport { IOverflowSet, OverflowSet } from '../../OverflowSet';\r\nimport { IResizeGroup, ResizeGroup } from '../../ResizeGroup';\r\nimport { FocusZone, FocusZoneDirection } from '../../FocusZone';\r\nimport { classNamesFunction } from '../../Utilities';\r\nimport { CommandBarButton, IButtonProps } from '../../Button';\r\nimport { TooltipHost } from '../../Tooltip';\r\n\r\nconst getClassNames = classNamesFunction<ICommandBarStyleProps, ICommandBarStyles>();\r\n\r\nexport interface ICommandBarData {\r\n  /**\r\n   * Items being rendered in the primary region\r\n   */\r\n  primaryItems: ICommandBarItemProps[];\r\n  /**\r\n   * Items being rendered in the overflow\r\n   */\r\n  overflowItems: ICommandBarItemProps[];\r\n  /**\r\n   * Items being rendered on the far side\r\n   */\r\n  farItems: ICommandBarItemProps[] | undefined;\r\n  /**\r\n   * Length of original overflowItems to ensure that they are not moved into primary region on resize\r\n   */\r\n  minimumOverflowItems: number;\r\n  /**\r\n   * Unique string used to cache the width of the command bar\r\n   */\r\n  cacheKey: string;\r\n}\r\n\r\nexport class CommandBarBase extends BaseComponent<ICommandBarProps, {}> implements ICommandBar {\r\n  public static defaultProps: ICommandBarProps = {\r\n    items: [],\r\n    overflowItems: []\r\n  };\r\n\r\n  private _overflowSet = React.createRef<IOverflowSet>();\r\n  private _resizeGroup = React.createRef<IResizeGroup>();\r\n  private _classNames: { [key in keyof ICommandBarStyles]: string };\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      className,\r\n      items,\r\n      overflowItems,\r\n      farItems,\r\n      styles,\r\n      theme,\r\n      onReduceData = this._onReduceData,\r\n      onGrowData = this._onGrowData\r\n    } = this.props;\r\n\r\n    const commandBarData: ICommandBarData = {\r\n      primaryItems: [...items],\r\n      overflowItems: [...overflowItems!],\r\n      minimumOverflowItems: [...overflowItems!].length, // for tracking\r\n      farItems,\r\n      cacheKey: ''\r\n    };\r\n\r\n    this._classNames = getClassNames(styles!, { theme: theme! });\r\n\r\n    return (\r\n      <ResizeGroup\r\n        componentRef={this._resizeGroup}\r\n        className={className}\r\n        data={commandBarData}\r\n        onReduceData={onReduceData}\r\n        onGrowData={onGrowData}\r\n        onRenderData={this._onRenderData}\r\n      />\r\n    );\r\n  }\r\n\r\n  public focus(): void {\r\n    const { current: overflowSet } = this._overflowSet;\r\n\r\n    overflowSet && overflowSet.focus();\r\n  }\r\n\r\n  public remeasure(): void {\r\n    this._resizeGroup.current && this._resizeGroup.current.remeasure();\r\n  }\r\n\r\n  private _onRenderData = (data: ICommandBarData): JSX.Element => {\r\n    return (\r\n      <FocusZone\r\n        className={css(this._classNames.root)}\r\n        direction={FocusZoneDirection.horizontal}\r\n        role={'menubar'}\r\n        aria-label={this.props.ariaLabel}\r\n      >\r\n        {/*Primary Items*/}\r\n        <OverflowSet\r\n          componentRef={this._resolveRef('_overflowSet')}\r\n          className={css(this._classNames.primarySet)}\r\n          doNotContainWithinFocusZone={true}\r\n          role={'presentation'}\r\n          items={data.primaryItems}\r\n          overflowItems={data.overflowItems.length ? data.overflowItems : undefined}\r\n          onRenderItem={this._onRenderItem}\r\n          onRenderOverflowButton={this._onRenderOverflowButton}\r\n        />\r\n\r\n        {/*Secondary Items*/}\r\n        {data.farItems && (\r\n          <OverflowSet\r\n            className={css(this._classNames.secondarySet)}\r\n            doNotContainWithinFocusZone={true}\r\n            role={'presentation'}\r\n            items={data.farItems}\r\n            onRenderItem={this._onRenderItem}\r\n            onRenderOverflowButton={nullRender}\r\n          />\r\n        )}\r\n      </FocusZone>\r\n    );\r\n  };\r\n\r\n  private _onRenderItem = (item: ICommandBarItemProps): JSX.Element | React.ReactNode => {\r\n    const CommandButtonType = this.props.buttonAs || item.commandBarButtonAs || CommandBarButton;\r\n\r\n    const itemText = item.text || item.name;\r\n\r\n    if (item.onRender) {\r\n      // These are the top level items, there is no relevant menu dismissing function to\r\n      // provide for the IContextualMenuItem onRender function. Pass in a no op function instead.\r\n      return item.onRender(item, () => undefined);\r\n    }\r\n    const commandButtonProps: ICommandBarItemProps = {\r\n      allowDisabledFocus: true,\r\n      role: 'menuitem',\r\n      ...item,\r\n      styles: { root: { height: '100%' }, label: { whiteSpace: 'nowrap' }, ...item.buttonStyles },\r\n      className: css('ms-CommandBarItem-link', item.className),\r\n      text: !item.iconOnly ? itemText : undefined,\r\n      menuProps: item.subMenuProps,\r\n      onClick: this._onButtonClick(item)\r\n    };\r\n\r\n    if (item.iconOnly && itemText !== undefined) {\r\n      return (\r\n        <TooltipHost content={itemText} {...item.tooltipHostProps}>\r\n          <CommandButtonType {...commandButtonProps as IButtonProps} defaultRender={CommandBarButton} />\r\n        </TooltipHost>\r\n      );\r\n    }\r\n\r\n    return <CommandButtonType {...commandButtonProps as IButtonProps} defaultRender={CommandBarButton} />;\r\n  };\r\n\r\n  private _onButtonClick(item: ICommandBarItemProps): (ev: React.MouseEvent<HTMLButtonElement>) => void {\r\n    return ev => {\r\n      // inactive is deprecated. remove check in 7.0\r\n      if (item.inactive) {\r\n        return;\r\n      }\r\n      if (item.onClick) {\r\n        item.onClick(ev, item);\r\n      }\r\n    };\r\n  }\r\n\r\n  private _onRenderOverflowButton = (overflowItems: ICommandBarItemProps[]): JSX.Element => {\r\n    const {\r\n      overflowButtonAs: OverflowButtonType = CommandBarButton,\r\n      overflowButtonProps = {} // assure that props is not empty\r\n    } = this.props;\r\n\r\n    const combinedOverflowItems: ICommandBarItemProps[] = [\r\n      ...(overflowButtonProps.menuProps ? overflowButtonProps.menuProps.items : []),\r\n      ...overflowItems\r\n    ];\r\n\r\n    const overflowProps: IButtonProps = {\r\n      ...overflowButtonProps,\r\n      styles: { menuIcon: { fontSize: '17px' }, ...overflowButtonProps.styles },\r\n      className: css('ms-CommandBar-overflowButton', overflowButtonProps.className),\r\n      menuProps: { ...overflowButtonProps.menuProps, items: combinedOverflowItems },\r\n      menuIconProps: { iconName: 'More', ...overflowButtonProps.menuIconProps }\r\n    };\r\n\r\n    return <OverflowButtonType {...overflowProps as IButtonProps} />;\r\n  };\r\n\r\n  private _computeCacheKey(data: ICommandBarData): string {\r\n    const { primaryItems, farItems = [], overflowItems } = data;\r\n    const returnKey = (acc: string, current: ICommandBarItemProps): string => {\r\n      const { cacheKey = current.key } = current;\r\n      return acc + cacheKey;\r\n    };\r\n\r\n    const primaryKey = primaryItems.reduce(returnKey, '');\r\n    const farKey = farItems.reduce(returnKey, '');\r\n    const overflowKey = !!overflowItems.length ? 'overflow' : '';\r\n\r\n    return [primaryKey, farKey, overflowKey].join(' ');\r\n  }\r\n\r\n  private _onReduceData = (data: ICommandBarData): ICommandBarData | undefined => {\r\n    const { shiftOnReduce, onDataReduced } = this.props;\r\n    let { primaryItems, overflowItems, cacheKey } = data;\r\n\r\n    // Use first item if shiftOnReduce, otherwise use last item\r\n    const movedItem = primaryItems[shiftOnReduce ? 0 : primaryItems.length - 1];\r\n\r\n    if (movedItem !== undefined) {\r\n      movedItem.renderedInOverflow = true;\r\n\r\n      overflowItems = [movedItem, ...overflowItems];\r\n      primaryItems = shiftOnReduce ? primaryItems.slice(1) : primaryItems.slice(0, -1);\r\n\r\n      const newData = { ...data, primaryItems, overflowItems };\r\n      cacheKey = this._computeCacheKey(newData);\r\n\r\n      if (onDataReduced) {\r\n        onDataReduced(movedItem);\r\n      }\r\n\r\n      newData.cacheKey = cacheKey;\r\n      return newData;\r\n    }\r\n\r\n    return undefined;\r\n  };\r\n\r\n  private _onGrowData = (data: ICommandBarData): ICommandBarData | undefined => {\r\n    const { shiftOnReduce, onDataGrown } = this.props;\r\n    const { minimumOverflowItems } = data;\r\n    let { primaryItems, overflowItems, cacheKey } = data;\r\n    const movedItem = overflowItems[0];\r\n\r\n    // Make sure that moved item exists and is not one of the original overflow items\r\n    if (movedItem !== undefined && overflowItems.length > minimumOverflowItems) {\r\n      movedItem.renderedInOverflow = false;\r\n\r\n      overflowItems = overflowItems.slice(1);\r\n      // if shiftOnReduce, movedItem goes first, otherwise, last.\r\n      primaryItems = shiftOnReduce ? [movedItem, ...primaryItems] : [...primaryItems, movedItem];\r\n\r\n      const newData = { ...data, primaryItems, overflowItems };\r\n      cacheKey = this._computeCacheKey(newData);\r\n\r\n      if (onDataGrown) {\r\n        onDataGrown(movedItem);\r\n      }\r\n\r\n      newData.cacheKey = cacheKey;\r\n      return newData;\r\n    }\r\n\r\n    return undefined;\r\n  };\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { ICommandBarProps, ICommandBarStyleProps, ICommandBarStyles } from './CommandBar.types';\r\nimport { CommandBarBase } from './CommandBar.base';\r\nimport { getStyles } from './CommandBar.styles';\r\n\r\n// Create a CommandBar variant which uses these default styles and this styled subcomponent.\r\nexport const CommandBar: React.StatelessComponent<ICommandBarProps> = styled<ICommandBarProps, ICommandBarStyleProps, ICommandBarStyles>(\r\n  CommandBarBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'CommandBar'\r\n  }\r\n);\r\n","import { ICommandBarStyleProps, ICommandBarStyles } from './CommandBar.types';\r\n\r\nexport const getStyles = (props: ICommandBarStyleProps): ICommandBarStyles => {\r\n  const { className, theme } = props;\r\n  const { palette } = theme;\r\n\r\n  return {\r\n    root: [\r\n      theme.fonts.medium,\r\n      'ms-CommandBar',\r\n      {\r\n        display: 'flex',\r\n        backgroundColor: palette.neutralLighter,\r\n        padding: '0 16px',\r\n        height: '40px'\r\n      },\r\n      className\r\n    ],\r\n    primarySet: [\r\n      'ms-CommandBar-primaryCommand',\r\n      {\r\n        flexGrow: '1',\r\n        display: 'flex',\r\n        alignItems: 'stretch'\r\n      }\r\n    ],\r\n    secondarySet: [\r\n      'ms-CommandBar-secondaryCommand',\r\n      {\r\n        flexShrink: '0',\r\n        display: 'flex',\r\n        alignItems: 'stretch'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { IModalStyleProps, IModalStyles } from './Modal.types';\r\nimport { AnimationVariables, getGlobalClassNames, ZIndexes } from '../../Styling';\r\n\r\nexport const animationDuration = AnimationVariables.durationValue2;\r\n\r\nconst globalClassNames = {\r\n  root: 'ms-Modal',\r\n  main: 'ms-Dialog-main',\r\n  scrollableContent: 'ms-Modal-scrollableContent',\r\n  isOpen: 'is-open',\r\n  layer: 'ms-Modal-Layer'\r\n};\r\n\r\nexport const getStyles = (props: IModalStyleProps): IModalStyles => {\r\n  const {\r\n    className,\r\n    containerClassName,\r\n    scrollableContentClassName,\r\n    isOpen,\r\n    isVisible,\r\n    hasBeenOpened,\r\n    modalRectangleTop,\r\n    theme,\r\n    topOffsetFixed,\r\n    isModeless,\r\n    layerClassName\r\n  } = props;\r\n  const { palette } = theme;\r\n\r\n  const classNames = getGlobalClassNames(globalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        backgroundColor: 'transparent',\r\n        position: isModeless ? 'absolute' : 'fixed',\r\n        height: '100%',\r\n        width: '100%',\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        opacity: 0,\r\n        pointerEvents: 'none',\r\n        transition: `opacity ${animationDuration}`\r\n      },\r\n      topOffsetFixed &&\r\n        hasBeenOpened && {\r\n          alignItems: 'flex-start'\r\n        },\r\n      isOpen && classNames.isOpen,\r\n      isVisible && {\r\n        opacity: 1,\r\n        pointerEvents: 'auto'\r\n      },\r\n      className\r\n    ],\r\n    main: [\r\n      classNames.main,\r\n      {\r\n        boxShadow: '0 0 5px 0 rgba(0, 0, 0, 0.4)',\r\n        backgroundColor: palette.white,\r\n        boxSizing: 'border-box',\r\n        position: 'relative',\r\n        textAlign: 'left',\r\n        outline: '3px solid transparent',\r\n        maxHeight: '100%',\r\n        overflowY: 'auto',\r\n        zIndex: isModeless ? ZIndexes.Layer : undefined\r\n      },\r\n      topOffsetFixed &&\r\n        hasBeenOpened && {\r\n          top: modalRectangleTop\r\n        },\r\n      containerClassName\r\n    ],\r\n    scrollableContent: [\r\n      classNames.scrollableContent,\r\n      {\r\n        overflowY: 'auto',\r\n        flexGrow: 1,\r\n        maxHeight: '100vh',\r\n        selectors: {\r\n          ['@supports (-webkit-overflow-scrolling: touch)']: {\r\n            maxHeight: window.innerHeight\r\n          }\r\n        }\r\n      },\r\n      scrollableContentClassName\r\n    ],\r\n    layer: isModeless && [\r\n      layerClassName,\r\n      classNames.layer,\r\n      {\r\n        position: 'static',\r\n        width: 'unset',\r\n        height: 'unset'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction, getId, allowScrollOnElement } from '../../Utilities';\r\nimport { FocusTrapZone, IFocusTrapZone } from '../FocusTrapZone/index';\r\nimport { animationDuration } from './Modal.styles';\r\nimport { IModalProps, IModalStyleProps, IModalStyles, IModal } from './Modal.types';\r\nimport { Overlay } from '../../Overlay';\r\nimport { ILayerProps, Layer } from '../../Layer';\r\nimport { Popup } from '../Popup/index';\r\nimport { withResponsiveMode, ResponsiveMode } from '../../utilities/decorators/withResponsiveMode';\r\n\r\n// @TODO - need to change this to a panel whenever the breakpoint is under medium (verify the spec)\r\n\r\nconst DefaultLayerProps: ILayerProps = {\r\n  eventBubblingEnabled: false\r\n};\r\n\r\nexport interface IDialogState {\r\n  isOpen?: boolean;\r\n  isVisible?: boolean;\r\n  isVisibleClose?: boolean;\r\n  id?: string;\r\n  hasBeenOpened?: boolean;\r\n  modalRectangleTop?: number;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IModalStyleProps, IModalStyles>();\r\n\r\n@withResponsiveMode\r\nexport class ModalBase extends BaseComponent<IModalProps, IDialogState> implements IModal {\r\n  public static defaultProps: IModalProps = {\r\n    isOpen: false,\r\n    isDarkOverlay: true,\r\n    isBlocking: false,\r\n    className: '',\r\n    containerClassName: ''\r\n  };\r\n\r\n  private _onModalCloseTimer: number;\r\n  private _focusTrapZone = React.createRef<IFocusTrapZone>();\r\n  private _scrollableContent: HTMLDivElement | null;\r\n\r\n  constructor(props: IModalProps) {\r\n    super(props);\r\n    this.state = {\r\n      id: getId('Modal'),\r\n      isOpen: props.isOpen,\r\n      isVisible: props.isOpen,\r\n      hasBeenOpened: props.isOpen\r\n    };\r\n\r\n    this._warnDeprecations({\r\n      onLayerDidMount: 'layerProps.onLayerDidMount'\r\n    });\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IModalProps): void {\r\n    clearTimeout(this._onModalCloseTimer);\r\n\r\n    // Opening the dialog\r\n    if (newProps.isOpen) {\r\n      if (!this.state.isOpen) {\r\n        // First Open\r\n        this.setState({\r\n          isOpen: true\r\n        });\r\n      } else {\r\n        // Modal has been opened\r\n        // Reopen during closing\r\n        this.setState({\r\n          hasBeenOpened: true,\r\n          isVisible: true\r\n        });\r\n\r\n        if (newProps.topOffsetFixed) {\r\n          const dialogMain = document.getElementsByClassName('ms-Dialog-main');\r\n          let modalRectangle;\r\n          if (dialogMain.length > 0) {\r\n            modalRectangle = dialogMain[0].getBoundingClientRect();\r\n            this.setState({\r\n              modalRectangleTop: modalRectangle.top\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Closing the dialog\r\n    if (!newProps.isOpen && this.state.isOpen) {\r\n      this._onModalCloseTimer = this._async.setTimeout(this._onModalClose, parseFloat(animationDuration) * 1000);\r\n      this.setState({\r\n        isVisible: false\r\n      });\r\n    }\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IModalProps, prevState: IDialogState) {\r\n    if (!prevProps.isOpen && !prevState.isVisible) {\r\n      this.setState({\r\n        isVisible: true\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element | null {\r\n    const {\r\n      className,\r\n      containerClassName,\r\n      scrollableContentClassName,\r\n      elementToFocusOnDismiss,\r\n      firstFocusableSelector,\r\n      forceFocusInsideTrap,\r\n      ignoreExternalFocusing,\r\n      isBlocking,\r\n      isClickableOutsideFocusTrap,\r\n      isDarkOverlay,\r\n      onDismiss,\r\n      layerProps,\r\n      responsiveMode,\r\n      titleAriaId,\r\n      styles,\r\n      subtitleAriaId,\r\n      theme,\r\n      topOffsetFixed,\r\n      onLayerDidMount,\r\n      isModeless\r\n    } = this.props;\r\n    const { isOpen, isVisible, hasBeenOpened, modalRectangleTop } = this.state;\r\n\r\n    if (!isOpen) {\r\n      return null;\r\n    }\r\n\r\n    const layerClassName = layerProps === undefined ? '' : layerProps.className;\r\n\r\n    const classNames = getClassNames(styles, {\r\n      theme: theme!,\r\n      className,\r\n      containerClassName,\r\n      scrollableContentClassName,\r\n      isOpen,\r\n      isVisible,\r\n      hasBeenOpened,\r\n      modalRectangleTop,\r\n      topOffsetFixed,\r\n      isModeless,\r\n      layerClassName\r\n    });\r\n\r\n    const mergedLayerProps = {\r\n      ...DefaultLayerProps,\r\n      ...this.props.layerProps,\r\n      onLayerDidMount: layerProps && layerProps.onLayerDidMount ? layerProps.onLayerDidMount : onLayerDidMount,\r\n      insertFirst: isModeless,\r\n      className: classNames.layer\r\n    };\r\n\r\n    // @temp tuatology - Will adjust this to be a panel at certain breakpoints\r\n    if (responsiveMode! >= ResponsiveMode.small) {\r\n      return (\r\n        <Layer {...mergedLayerProps}>\r\n          <Popup\r\n            role={isModeless || !isBlocking ? 'dialog' : 'alertdialog'}\r\n            aria-modal={!isModeless}\r\n            ariaLabelledBy={titleAriaId}\r\n            ariaDescribedBy={subtitleAriaId}\r\n            onDismiss={onDismiss}\r\n          >\r\n            <div className={classNames.root}>\r\n              {!isModeless && <Overlay isDarkThemed={isDarkOverlay} onClick={isBlocking ? undefined : (onDismiss as any)} />}\r\n              <FocusTrapZone\r\n                componentRef={this._focusTrapZone}\r\n                className={classNames.main}\r\n                elementToFocusOnDismiss={elementToFocusOnDismiss}\r\n                isClickableOutsideFocusTrap={isModeless || isClickableOutsideFocusTrap || !isBlocking}\r\n                ignoreExternalFocusing={ignoreExternalFocusing}\r\n                forceFocusInsideTrap={isModeless ? !isModeless : forceFocusInsideTrap}\r\n                firstFocusableSelector={firstFocusableSelector}\r\n              >\r\n                <div ref={this._allowScrollOnModal} className={classNames.scrollableContent} data-is-scrollable={true}>\r\n                  {this.props.children}\r\n                </div>\r\n              </FocusTrapZone>\r\n            </div>\r\n          </Popup>\r\n        </Layer>\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  public focus() {\r\n    if (this._focusTrapZone.current) {\r\n      this._focusTrapZone.current.focus();\r\n    }\r\n  }\r\n\r\n  // Allow the user to scroll within the modal but not on the body\r\n  private _allowScrollOnModal = (elt: HTMLDivElement | null): void => {\r\n    if (elt) {\r\n      allowScrollOnElement(elt, this._events);\r\n    } else {\r\n      this._events.off(this._scrollableContent);\r\n    }\r\n    this._scrollableContent = elt;\r\n  };\r\n\r\n  // Watch for completed animations and set the state\r\n  private _onModalClose(): void {\r\n    this.setState({\r\n      isOpen: false\r\n    });\r\n\r\n    // Call the onDismiss callback\r\n    if (this.props.onDismissed) {\r\n      this.props.onDismissed();\r\n    }\r\n  }\r\n}\r\n","import { styled } from '../../Utilities';\r\nimport { IModalProps, IModalStyleProps, IModalStyles } from './Modal.types';\r\nimport { ModalBase } from './Modal.base';\r\nimport { getStyles } from './Modal.styles';\r\n\r\nexport const Modal: React.StatelessComponent<IModalProps> = styled<IModalProps, IModalStyleProps, IModalStyles>(\r\n  ModalBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'Modal'\r\n  }\r\n);\r\n","import * as React from 'react';\r\nimport { IDialogFooterProps, IDialogFooterStyleProps, IDialogFooterStyles } from './DialogFooter.types';\r\nimport { BaseComponent, classNamesFunction } from '../../Utilities';\r\nimport { IProcessedStyleSet } from '../../Styling';\r\n\r\nconst getClassNames = classNamesFunction<IDialogFooterStyleProps, IDialogFooterStyles>();\r\n\r\nexport class DialogFooterBase extends BaseComponent<IDialogFooterProps, {}> {\r\n  private _classNames: IProcessedStyleSet<IDialogFooterStyles>;\r\n\r\n  public render(): JSX.Element {\r\n    const { className, styles, theme } = this.props;\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className\r\n    });\r\n\r\n    return (\r\n      <div className={this._classNames.actions}>\r\n        <div className={this._classNames.actionsRight}>{this._renderChildrenAsActions()}</div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderChildrenAsActions(): (JSX.Element | null)[] {\r\n    return React.Children.map(this.props.children, child => (child ? <span className={this._classNames.action}>{child}</span> : null));\r\n  }\r\n}\r\n","import { IDialogFooterStyleProps, IDialogFooterStyles } from './DialogFooter.types';\r\nimport { getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  actions: 'ms-Dialog-actions',\r\n  action: 'ms-Dialog-action',\r\n  actionsRight: 'ms-Dialog-actionsRight'\r\n};\r\n\r\nexport const getStyles = (props: IDialogFooterStyleProps): IDialogFooterStyles => {\r\n  const { className, theme } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    actions: [\r\n      classNames.actions,\r\n      {\r\n        position: 'relative',\r\n        width: '100%',\r\n        minHeight: '24px',\r\n        lineHeight: '24px',\r\n        margin: '20px 0 0',\r\n        fontSize: '0',\r\n\r\n        selectors: {\r\n          '.ms-Button': {\r\n            lineHeight: 'normal'\r\n          }\r\n        }\r\n      },\r\n      className\r\n    ],\r\n\r\n    action: [classNames.action],\r\n\r\n    actionsRight: [\r\n      classNames.actionsRight,\r\n      {\r\n        textAlign: 'right',\r\n        marginRight: '-4px',\r\n        fontSize: '0',\r\n\r\n        selectors: {\r\n          $action: {\r\n            margin: '0 4px'\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IDialogFooterProps, IDialogFooterStyleProps, IDialogFooterStyles } from './DialogFooter.types';\r\nimport { DialogFooterBase } from './DialogFooter.base';\r\nimport { getStyles } from './DialogFooter.styles';\r\n\r\nexport const DialogFooter: React.StatelessComponent<IDialogFooterProps> = styled<\r\n  IDialogFooterProps,\r\n  IDialogFooterStyleProps,\r\n  IDialogFooterStyles\r\n>(DialogFooterBase, getStyles, undefined, { scope: 'DialogFooter' });\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction } from '../../Utilities';\r\nimport { DialogType, IDialogContentProps, IDialogContentStyleProps, IDialogContentStyles } from './DialogContent.types';\r\nimport { IconButton } from '../../Button';\r\nimport { DialogFooter } from './DialogFooter';\r\nimport { IDialogFooterProps } from './DialogFooter.types';\r\nimport { withResponsiveMode } from '../../utilities/decorators/withResponsiveMode';\r\n\r\nconst getClassNames = classNamesFunction<IDialogContentStyleProps, IDialogContentStyles>();\r\n\r\nconst DialogFooterType = (<DialogFooter /> as React.ReactElement<IDialogFooterProps>).type;\r\n\r\n@withResponsiveMode\r\nexport class DialogContentBase extends BaseComponent<IDialogContentProps, {}> {\r\n  public static defaultProps: IDialogContentProps = {\r\n    showCloseButton: false,\r\n    className: '',\r\n    topButtonsProps: [],\r\n    closeButtonAriaLabel: 'Close'\r\n  };\r\n\r\n  constructor(props: IDialogContentProps) {\r\n    super(props);\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      showCloseButton,\r\n      className,\r\n      closeButtonAriaLabel,\r\n      onDismiss,\r\n      subTextId,\r\n      subText,\r\n      titleId,\r\n      title,\r\n      type,\r\n      styles,\r\n      theme\r\n    } = this.props;\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      isLargeHeader: type === DialogType.largeHeader,\r\n      isClose: type === DialogType.close\r\n    });\r\n\r\n    const groupings = this._groupChildren();\r\n    let subTextContent;\r\n    if (subText) {\r\n      subTextContent = (\r\n        <p className={classNames.subText} id={subTextId}>\r\n          {subText}\r\n        </p>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <div className={classNames.content}>\r\n        <div className={classNames.header}>\r\n          <p className={classNames.title} id={titleId} role=\"heading\" aria-level={2}>\r\n            {title}\r\n          </p>\r\n          <div className={classNames.topButton}>\r\n            {this.props.topButtonsProps!.map((props, index) => (\r\n              <IconButton key={props.uniqueId || index} {...props} />\r\n            ))}\r\n            {(type === DialogType.close || (showCloseButton && type !== DialogType.largeHeader)) && (\r\n              <IconButton\r\n                className={classNames.button}\r\n                iconProps={{ iconName: 'Cancel' }}\r\n                ariaLabel={closeButtonAriaLabel}\r\n                onClick={onDismiss as any}\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n        <div className={classNames.inner}>\r\n          <div className={classNames.innerContent}>\r\n            {subTextContent}\r\n            {groupings.contents}\r\n          </div>\r\n          {groupings.footers}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // @TODO - typing the footers as an array of DialogFooter is difficult because\r\n  // casing \"child as DialogFooter\" causes a problem because\r\n  // \"Neither type 'ReactElement<any>' nor type 'DialogFooter' is assignable to the other.\"\r\n  private _groupChildren(): { footers: any[]; contents: any[] } {\r\n    const groupings: { footers: any[]; contents: any[] } = {\r\n      footers: [],\r\n      contents: []\r\n    };\r\n\r\n    React.Children.map(this.props.children, child => {\r\n      if (typeof child === 'object' && child !== null && child.type === DialogFooterType) {\r\n        groupings.footers.push(child);\r\n      } else {\r\n        groupings.contents.push(child);\r\n      }\r\n    });\r\n\r\n    return groupings;\r\n  }\r\n}\r\n","import { IDialogContentStyleProps, IDialogContentStyles } from './DialogContent.types';\r\nimport { FontWeights, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  contentLgHeader: 'ms-Dialog-lgHeader',\r\n  close: 'ms-Dialog--close',\r\n  subText: 'ms-Dialog-subText',\r\n  header: 'ms-Dialog-header',\r\n  headerLg: 'ms-Dialog--lgHeader',\r\n  button: 'ms-Dialog-button ms-Dialog-button--close',\r\n  inner: 'ms-Dialog-inner',\r\n  content: 'ms-Dialog-content',\r\n  title: 'ms-Dialog-title'\r\n};\r\n\r\nexport const getStyles = (props: IDialogContentStyleProps): IDialogContentStyles => {\r\n  const { className, theme, isLargeHeader, isClose, hidden, isMultiline } = props;\r\n\r\n  const { palette, fonts } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    content: [\r\n      isLargeHeader && classNames.contentLgHeader,\r\n      isClose && classNames.close,\r\n      {\r\n        flexGrow: 1,\r\n        overflowY: 'hidden' // required for allowScrollOnElement\r\n      },\r\n      className\r\n    ],\r\n\r\n    subText: [\r\n      classNames.subText,\r\n      isLargeHeader ? fonts.medium : fonts.small,\r\n      {\r\n        margin: '0 0 20px 0',\r\n        paddingTop: '8px',\r\n        color: palette.neutralPrimary,\r\n        lineHeight: '1.5',\r\n        wordWrap: 'break-word',\r\n        fontWeight: FontWeights.semilight\r\n      }\r\n    ],\r\n\r\n    header: [\r\n      classNames.header,\r\n      {\r\n        position: 'relative',\r\n        width: '100%',\r\n        boxSizing: 'border-box'\r\n      },\r\n      isLargeHeader && [\r\n        classNames.headerLg,\r\n        {\r\n          backgroundColor: palette.themePrimary\r\n        }\r\n      ],\r\n      isClose && classNames.close\r\n    ],\r\n\r\n    button: [\r\n      classNames.button,\r\n      hidden && {\r\n        selectors: {\r\n          '.ms-Icon.ms-Icon--Cancel': {\r\n            color: palette.neutralSecondary,\r\n            fontSize: '16px'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    inner: [\r\n      classNames.inner,\r\n      {\r\n        padding: isMultiline ? '0 20px 20px' : '0 28px 20px'\r\n      }\r\n    ],\r\n\r\n    innerContent: [\r\n      classNames.content,\r\n      {\r\n        position: 'relative',\r\n        width: '100%',\r\n\r\n        selectors: {\r\n          '.ms-Button.ms-Button--compount': {\r\n            marginBottom: '20px',\r\n\r\n            selectors: {\r\n              '&:last-child': {\r\n                marginBottom: '0'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n      className\r\n    ],\r\n\r\n    title: [\r\n      classNames.title,\r\n      {\r\n        color: palette.neutralPrimary,\r\n        margin: '0',\r\n        padding: '20px 36px 20px 28px'\r\n      },\r\n      fonts.xLarge,\r\n      isLargeHeader && [\r\n        {\r\n          color: palette.white,\r\n          marginBottom: '8px',\r\n          padding: '26px 28px 28px'\r\n        },\r\n        fonts.xxLarge\r\n      ],\r\n      isMultiline && fonts.xxLarge\r\n    ],\r\n\r\n    topButton: [\r\n      {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        flexWrap: 'nowrap',\r\n        position: 'absolute',\r\n        top: '0',\r\n        right: '0',\r\n        padding: '12px 12px 0 0',\r\n\r\n        selectors: {\r\n          '> *': {\r\n            flex: '0 0 auto'\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IDialogContentProps, IDialogContentStyleProps, IDialogContentStyles } from './DialogContent.types';\r\nimport { DialogContentBase } from './DialogContent.base';\r\nimport { getStyles } from './DialogContent.styles';\r\n\r\nexport const DialogContent: React.StatelessComponent<IDialogContentProps> = styled<\r\n  IDialogContentProps,\r\n  IDialogContentStyleProps,\r\n  IDialogContentStyles\r\n>(DialogContentBase, getStyles, undefined, { scope: 'DialogContent' });\r\n","import * as React from 'react';\r\nimport { warnDeprecations, classNamesFunction, getId } from '../../Utilities';\r\nimport { IDialogProps, IDialogStyleProps, IDialogStyles } from './Dialog.types';\r\nimport { DialogType, IDialogContentProps } from './DialogContent.types';\r\nimport { Modal, IModalProps } from '../../Modal';\r\nimport { ILayerProps } from '../../Layer';\r\nimport { withResponsiveMode } from '../../utilities/decorators/withResponsiveMode';\r\n\r\nconst getClassNames = classNamesFunction<IDialogStyleProps, IDialogStyles>();\r\n\r\nimport { DialogContent } from './DialogContent';\r\n\r\nconst DefaultModalProps: IModalProps = {\r\n  isDarkOverlay: false,\r\n  isBlocking: false,\r\n  className: '',\r\n  containerClassName: '',\r\n  topOffsetFixed: false\r\n};\r\n\r\nconst DefaultDialogContentProps: IDialogContentProps = {\r\n  type: DialogType.normal,\r\n  className: '',\r\n  topButtonsProps: []\r\n};\r\n\r\n@withResponsiveMode\r\nexport class DialogBase extends React.Component<IDialogProps, {}> {\r\n  public static defaultProps: IDialogProps = {\r\n    hidden: true\r\n  };\r\n\r\n  private _id: string;\r\n  private _defaultTitleTextId: string;\r\n  private _defaultSubTextId: string;\r\n\r\n  constructor(props: IDialogProps) {\r\n    super(props);\r\n\r\n    this._id = getId('Dialog');\r\n    this._defaultTitleTextId = this._id + '-title';\r\n    this._defaultSubTextId = this._id + '-subText';\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnDeprecations('Dialog', props, {\r\n        isOpen: 'hidden',\r\n        type: 'dialogContentProps.type',\r\n        subText: 'dialogContentProps.subText',\r\n        contentClassName: 'dialogContentProps.className',\r\n        topButtonsProps: 'dialogContentProps.topButtonsProps',\r\n        className: 'modalProps.className',\r\n        isDarkOverlay: 'modalProps.isDarkOverlay',\r\n        isBlocking: 'modalProps.isBlocking',\r\n        containerClassName: 'modalProps.containerClassName',\r\n        onDismissed: 'modalProps.onDismissed',\r\n        onLayerDidMount: 'modalProps.layerProps.onLayerDidMount',\r\n        ariaDescribedById: 'modalProps.subtitleAriaId',\r\n        ariaLabelledById: 'modalProps.titleAriaId'\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      className,\r\n      containerClassName,\r\n      contentClassName,\r\n      elementToFocusOnDismiss,\r\n      firstFocusableSelector,\r\n      forceFocusInsideTrap,\r\n      styles,\r\n      hidden,\r\n      ignoreExternalFocusing,\r\n      isBlocking,\r\n      isClickableOutsideFocusTrap,\r\n      isDarkOverlay,\r\n      isOpen,\r\n      onDismiss,\r\n      onDismissed,\r\n      onLayerDidMount,\r\n      responsiveMode,\r\n      subText,\r\n      theme,\r\n      title,\r\n      topButtonsProps,\r\n      type,\r\n      minWidth,\r\n      maxWidth,\r\n      modalProps\r\n    } = this.props;\r\n\r\n    const mergedLayerProps: ILayerProps = {\r\n      ...(modalProps ? modalProps.layerProps : { onLayerDidMount })\r\n    };\r\n    if (onLayerDidMount && !mergedLayerProps.onLayerDidMount) {\r\n      mergedLayerProps.onLayerDidMount = onLayerDidMount;\r\n    }\r\n\r\n    const mergedModalProps = {\r\n      ...DefaultModalProps,\r\n      ...modalProps,\r\n      layerProps: mergedLayerProps\r\n    };\r\n\r\n    const dialogContentProps: IDialogContentProps = {\r\n      ...DefaultDialogContentProps,\r\n      ...this.props.dialogContentProps\r\n    };\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className: className || mergedModalProps.className,\r\n      containerClassName: containerClassName || mergedModalProps.containerClassName,\r\n      hidden,\r\n      dialogDefaultMinWidth: minWidth,\r\n      dialogDefaultMaxWidth: maxWidth\r\n    });\r\n\r\n    return (\r\n      <Modal\r\n        elementToFocusOnDismiss={elementToFocusOnDismiss}\r\n        firstFocusableSelector={firstFocusableSelector}\r\n        forceFocusInsideTrap={forceFocusInsideTrap}\r\n        ignoreExternalFocusing={ignoreExternalFocusing}\r\n        isClickableOutsideFocusTrap={isClickableOutsideFocusTrap}\r\n        onDismissed={onDismissed}\r\n        responsiveMode={responsiveMode}\r\n        {...mergedModalProps}\r\n        isDarkOverlay={isDarkOverlay !== undefined ? isDarkOverlay : mergedModalProps.isDarkOverlay}\r\n        isBlocking={isBlocking !== undefined ? isBlocking : mergedModalProps.isBlocking}\r\n        isOpen={isOpen !== undefined ? isOpen : !hidden}\r\n        className={classNames.root}\r\n        containerClassName={classNames.main}\r\n        onDismiss={onDismiss ? onDismiss : mergedModalProps.onDismiss}\r\n        subtitleAriaId={this._getSubTextId()}\r\n        titleAriaId={this._getTitleTextId()}\r\n      >\r\n        <DialogContent\r\n          titleId={this._defaultTitleTextId}\r\n          subTextId={this._defaultSubTextId}\r\n          title={title}\r\n          subText={subText}\r\n          showCloseButton={isBlocking !== undefined ? !isBlocking : !mergedModalProps.isBlocking}\r\n          topButtonsProps={topButtonsProps ? topButtonsProps : dialogContentProps!.topButtonsProps}\r\n          type={type !== undefined ? type : dialogContentProps!.type}\r\n          onDismiss={onDismiss ? onDismiss : dialogContentProps!.onDismiss}\r\n          className={contentClassName || dialogContentProps!.className}\r\n          {...dialogContentProps}\r\n        >\r\n          {this.props.children}\r\n        </DialogContent>\r\n      </Modal>\r\n    );\r\n  }\r\n\r\n  private _getSubTextId = (): string | undefined => {\r\n    const { ariaDescribedById, modalProps, dialogContentProps, subText } = this.props;\r\n    let id = ariaDescribedById || (modalProps && modalProps.subtitleAriaId);\r\n\r\n    if (!id) {\r\n      id = (subText || (dialogContentProps && dialogContentProps.subText)) && this._defaultSubTextId;\r\n    }\r\n\r\n    return id;\r\n  };\r\n\r\n  private _getTitleTextId = (): string | undefined => {\r\n    const { ariaLabelledById, modalProps, dialogContentProps, title } = this.props;\r\n    let id = ariaLabelledById || (modalProps && modalProps.titleAriaId);\r\n\r\n    if (!id) {\r\n      id = (title || (dialogContentProps && dialogContentProps.title)) && this._defaultTitleTextId;\r\n    }\r\n\r\n    return id;\r\n  };\r\n}\r\n","import { IDialogStyleProps, IDialogStyles } from './Dialog.types';\r\nimport { ScreenWidthMinMedium, getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Dialog'\r\n};\r\n\r\nexport const getStyles = (props: IDialogStyleProps): IDialogStyles => {\r\n  const { className, containerClassName, dialogDefaultMinWidth = '288px', dialogDefaultMaxWidth = '340px', hidden, theme } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [classNames.root, theme.fonts.medium, className],\r\n\r\n    main: [\r\n      {\r\n        width: dialogDefaultMinWidth,\r\n        outline: '3px solid transparent',\r\n\r\n        selectors: {\r\n          [`@media (min-width: ${ScreenWidthMinMedium}px)`]: {\r\n            width: 'auto',\r\n            maxWidth: dialogDefaultMaxWidth,\r\n            minWidth: dialogDefaultMinWidth\r\n          }\r\n        }\r\n      },\r\n      !hidden && { display: 'flex' },\r\n      containerClassName\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { IDialogProps, IDialogStyleProps, IDialogStyles } from './Dialog.types';\r\nimport { DialogBase } from './Dialog.base';\r\nimport { getStyles } from './Dialog.styles';\r\n\r\nexport const Dialog: React.StatelessComponent<IDialogProps> = styled<IDialogProps, IDialogStyleProps, IDialogStyles>(\r\n  DialogBase,\r\n  getStyles,\r\n  undefined,\r\n  { scope: 'Dialog' }\r\n);\r\n","export const FieldTypeEnum = {\r\n  PICKUP: 'pickup',\r\n  LOOKUP: 'lookup',\r\n  INPUT: 'input',\r\n  DATEPICKER: 'datepicker',\r\n  MOVABLE: 'movable'\r\n};","import {\r\n  ITemplateFieldValueDto,\r\n  ITemplateFormRow,\r\n  ITemplateDto,\r\n  ITemplateFormSearchObject\r\n} from '../components/TemplateForm/TemplateForm.types';\r\n\r\nimport { ITemplateFormState } from '../components/TemplateForm/TemplateForm.base';\r\n\r\nimport { FieldTypeEnum } from './Utils.types';\r\n\r\nexport function toTemplateResult(dto: ITemplateDto): string {\r\n  const properties: ITemplateFormRow[] = [];\r\n\r\n  dto.data.forEach(element => {\r\n    const operations: ITemplateFieldValueDto[] = element.operations;\r\n\r\n    let operation: string | number = '';\r\n\r\n    operations.forEach(operationElement => {\r\n      if (operationElement.selected) {\r\n        operation = operationElement.key;\r\n      }\r\n    });\r\n\r\n    const values: any[] = [];\r\n\r\n    if (element.field === FieldTypeEnum.LOOKUP || element.field === FieldTypeEnum.PICKUP) {\r\n      element.values.forEach(value => {\r\n        if (value.selected) {\r\n          const fieldValue = {\r\n            key: value.key,\r\n            text: value.text\r\n          };\r\n          values.push(fieldValue);\r\n        }\r\n      });\r\n    } else {\r\n      const fieldValue = {\r\n        key: element.values[0].key,\r\n        text: element.values[0].text\r\n      };\r\n      values.push(fieldValue);\r\n    }\r\n\r\n    const property: ITemplateFormRow = {\r\n      id: element.id,\r\n      name: element.name,\r\n      isSystemField: element.isSystemField,\r\n      operation: operation,\r\n      values: values\r\n    };\r\n\r\n    properties.push(property);\r\n  });\r\n\r\n  const jsonString = JSON.stringify({\r\n    id: dto.id,\r\n    name: dto.name,\r\n    properties: properties,\r\n    main: dto.main,\r\n    displayColumns: dto.displayColumns\r\n  });\r\n\r\n  console.log('Dto -> Template:', jsonString);\r\n\r\n  return encodeURIComponent(jsonString);\r\n}\r\n\r\nexport function formToTemplateResult(state: ITemplateFormState, result: ITemplateFormSearchObject): string {\r\n  if (result === null) {\r\n    console.log('result empty');\r\n    return '';\r\n  }\r\n\r\n  logResult(state, result);\r\n\r\n  let properties: ITemplateFormRow[] = [];\r\n\r\n  result.values.forEach((row: ITemplateFormRow, key: number) => {\r\n    properties.push(row);\r\n  });\r\n\r\n  const jsonResult = JSON.stringify({\r\n    id: state.id,\r\n    name: state.name,\r\n    properties: properties,\r\n    main: result.main,\r\n    displayColumns: result.displayColumns\r\n  });\r\n\r\n  console.log('Data Submited to server in raw format:', jsonResult);\r\n\r\n  return encodeURIComponent(jsonResult);\r\n}\r\n\r\nfunction logResult(state: ITemplateFormState, result: ITemplateFormSearchObject): void {\r\n  if (!result || !result.values) {\r\n    console.log('result empty');\r\n    return;\r\n  }\r\n\r\n  let msg = '\\n\\n------------------------\\n';\r\n  msg += '      Form Values       \\n';\r\n  msg += '------------------------';\r\n  msg += '\\n   Id: ' + state.id;\r\n  msg += '\\n   Name: ' + state.name;\r\n  msg += '\\n   Main Values: ';\r\n  result.main.forEach(element => {\r\n    msg += '\\n\\t Id:' + element.id + '; Name:' + element.name;\r\n    if (element.values != null) {\r\n      element.values.forEach((value: any) => {\r\n        msg += '\\n\\t\\t Key:' + value.key + '; Value:' + value.text;\r\n      });\r\n    }\r\n  });\r\n  result.values.forEach((row: ITemplateFormRow, key: number) => {\r\n    msg += '\\n   ID: ' + row.id + '\\n';\r\n    msg += 'Name: ' + row.name + '\\n';\r\n    msg += 'System Field: ' + row.isSystemField + '\\n';\r\n    msg += '   Operation ID: ' + row.operation + '\\n';\r\n\r\n    let valuesMsg = '   Values:\\n';\r\n    row.values.forEach((item: any, key: number) => {\r\n      valuesMsg += '\\t' + item.key + '\\n';\r\n      valuesMsg += '\\t' + item.text + '\\n';\r\n    });\r\n    msg += valuesMsg;\r\n    msg += '------------------------';\r\n  });\r\n  msg += '\\n   Columns to Display: ' + result.displayColumns + '\\n';\r\n  var displayMsg = '\\nDisplay Properties:\\n';\r\n  result.displayColumns.forEach(element => {\r\n    displayMsg += `\\tkey=${element.key}; name=${element.text};isSystemField=${element.isSystemField}\\n`;\r\n  });\r\n  msg += displayMsg + '\\n\\n';\r\n  console.log(msg);\r\n}\r\n","import { ITheme, IStyle } from 'office-ui-fabric-react/lib/Styling';\r\n\r\nimport { IStyleFunctionOrObject } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nexport interface ITemplateFormProps {\r\n  user: string;\r\n  url: string;\r\n  styles?: IStyleFunctionOrObject<ITemplateFormStyleProps, ITemplateFormStyles>;\r\n  theme?: ITheme;\r\n  className?: string;\r\n  renderType?: RenderType;\r\n  hideExternalSurface?: boolean;\r\n  labelCmdBarSearch?: string;\r\n  labelCmdBarCancel?: string;\r\n  onCancel: () => any;\r\n  onSubmit: (formAsJsonEncoded: string) => void;\r\n}\r\n\r\nexport interface ITemplateFormStyleProps {\r\n  theme: ITheme;\r\n  className?: string;\r\n  renderType?: RenderType;\r\n}\r\n\r\nexport interface ITemplateFormStyles {\r\n  root?: IStyle;\r\n  title?: IStyle;\r\n  commandBar?: IStyle;\r\n  form?: IStyle;\r\n}\r\n\r\nexport interface ITemplateFormRow {\r\n  id: number;\r\n  name: string;\r\n  isSystemField: boolean;\r\n  operation: string | number;\r\n  values: any[];\r\n}\r\n\r\nexport interface ITemplateFormSearchObject {\r\n  main: any[];\r\n  values: Map<number, ITemplateFormRow>;\r\n  displayColumns: any[];\r\n}\r\n\r\nexport enum RenderType {\r\n  COMMANDBAR,\r\n  DIALOG,\r\n  PANEL\r\n}\r\n\r\nexport interface ITemplateDto {\r\n  id: number;\r\n  name: string;\r\n  main: ITemplateMainFieldDto[];\r\n  data: ITemplatePropertyFieldDto[];\r\n  displayColumns: string[];\r\n}\r\n\r\nexport interface ITemplateMainFieldDto {\r\n  id: number;\r\n  name: string;\r\n  values: ITemplateFieldValueDto[];\r\n}\r\n\r\nexport interface ITemplatePropertyFieldDto extends ITemplateMainFieldDto {\r\n  field: string;\r\n  isSystemField: boolean;\r\n  types: ITemplateFieldValueDto[];\r\n  operations: ITemplateFieldValueDto[];\r\n}\r\n\r\nexport interface ITemplateFieldValueDto {\r\n  key: number | string;\r\n  text: string;\r\n  selected?: boolean;\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\n\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\n\r\nimport { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';\r\n\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\n\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\n\r\nimport { Title } from '../Title';\r\n\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\n\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\n\r\nimport { ActionButton, DefaultButton, PrimaryButton } from 'office-ui-fabric-react/lib/Button';\r\n\r\nimport { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel';\r\n\r\nimport { FieldTypeEnum } from '../../Utils/Utils.types';\r\n\r\nimport { formToTemplateResult } from '../../Utils/TemplateUtils';\r\n\r\nimport update from 'immutability-helper';\r\n\r\nimport './TemplateForm.css';\r\n\r\nimport {\r\n  ITemplateFormProps,\r\n  ITemplateFormStyleProps,\r\n  ITemplateFormStyles,\r\n  ITemplateFormRow,\r\n  ITemplateFormSearchObject,\r\n  RenderType,\r\n  ITemplateDto\r\n} from './TemplateForm.types';\r\nimport Axios from 'axios';\r\n\r\nconst getClassNames = classNamesFunction<ITemplateFormStyleProps, ITemplateFormStyles>();\r\n\r\nexport interface ITemplateFormState {\r\n  id: number;\r\n  name: string;\r\n  properties: any[];\r\n  hideExternalSurface: boolean;\r\n  error: any;\r\n}\r\n\r\nexport class TemplateFormBase extends React.PureComponent<ITemplateFormProps, ITemplateFormState> {\r\n  public static defaultProps = {\r\n    renderType: RenderType.COMMANDBAR,\r\n    labelCmdBarSearch: 'Search',\r\n    labelCmdBarCancel: 'Cancel'\r\n  };\r\n  private result: ITemplateFormSearchObject = { values: new Map<number, ITemplateFormRow>(), displayColumns: [], main: [] };\r\n  constructor(props: ITemplateFormProps) {\r\n    super(props);\r\n    this.state = {\r\n      id: -1,\r\n      name: '',\r\n      properties: [],\r\n      hideExternalSurface: this.props.hideExternalSurface != null ? this.props.hideExternalSurface : true,\r\n      error: undefined\r\n    };\r\n    this.onSubmit = this.onSubmit.bind(this);\r\n    this.onCancel = this.onCancel.bind(this);\r\n    this.getRowFromId = this.getRowFromId.bind(this);\r\n    this.setSingleValue = this.setSingleValue.bind(this);\r\n  }\r\n\r\n  public componentDidMount() {\r\n    Axios.get(this.props.url)\r\n      .then(response => {\r\n        const dto: ITemplateDto = response.data;\r\n        this.setState({\r\n          id: dto.id,\r\n          name: dto.name,\r\n          properties: dto.data\r\n        });\r\n        this.resetResultValues(dto.data);\r\n        this.result.displayColumns = dto.displayColumns;\r\n        this.result.main = dto.main;\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n  }\r\n\r\n  private renderForm(): JSX.Element {\r\n    const { className, styles, theme } = this.props;\r\n    const { name, properties } = this.state;\r\n    const { renderType } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme!, className, renderType });\r\n\r\n    return (\r\n      <div>\r\n        {renderType === RenderType.COMMANDBAR && (\r\n          <div className={`ms-Grid-row ${classNames.commandBar}`}>\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n              <CommandBar items={this.getCommandBarItems()} />\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className=\"ms-Grid-row tpl-f-nl-sm\">\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n        </div>\r\n        {renderType !== RenderType.DIALOG && (\r\n          <div className={`ms-Grid-row ${classNames.title}`}>\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n              <Title title={name} icon={true} />\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className={`${classNames.form}`}>\r\n          {properties.map(element => {\r\n            let field = undefined;\r\n            const rowKey = `Row_${element.id}`;\r\n            const fieldName = element.name;\r\n            const operationsKey = `DropdownOperations_${element.id}`;\r\n\r\n            switch (element.field) {\r\n              case FieldTypeEnum.INPUT: {\r\n                const key = `TextField_${element.id}`;\r\n                field = (\r\n                  <TextField\r\n                    key={key}\r\n                    value={this.getSafeValue(element.values)}\r\n                    required={element.required}\r\n                    onBlur={e => this.handleTextInput(e, element.id, element.name, element.isSystemField)}\r\n                  />\r\n                );\r\n                break;\r\n              }\r\n              case FieldTypeEnum.LOOKUP: {\r\n                const key = `Dropdown_${element.id}`;\r\n                field = (\r\n                  <Dropdown\r\n                    multiSelect\r\n                    key={key}\r\n                    options={element.values}\r\n                    onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                      this.onChangeValues(event, element.id, element.name, element.isSystemField, option)\r\n                    }\r\n                    required={element.required}\r\n                  />\r\n                );\r\n                break;\r\n              }\r\n              case FieldTypeEnum.PICKUP: {\r\n                const key = `Pickup_${element.id}`;\r\n                field = (\r\n                  <Dropdown\r\n                    key={key}\r\n                    options={element.values}\r\n                    onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                      this.onChangeValuesPickup(event, element.id, element.name, element.isSystemField, option)\r\n                    }\r\n                    required={element.required}\r\n                  />\r\n                );\r\n                break;\r\n              }\r\n              case FieldTypeEnum.DATEPICKER: {\r\n                const key = `DatePicker_${element.id}`;\r\n                field = (\r\n                  <DatePicker\r\n                    key={key}\r\n                    onSelectDate={(d: Date | null | undefined) => this.handleDateInput(d, element.id, element.name, element.isSystemField)}\r\n                    value={this.getSafeDateValue(element.values)}\r\n                  />\r\n                );\r\n                break;\r\n              }\r\n              default: {\r\n                break;\r\n              }\r\n            }\r\n            return (\r\n              <div className=\"ms-Grid-row\" key={rowKey}>\r\n                <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\">\r\n                  <Label className=\"ms-font-m-plus\">{fieldName}:</Label>\r\n                </div>\r\n                <div className=\"ms-Grid-col ms-sm4 ms-md4 ms-lg4\">\r\n                  <Dropdown\r\n                    key={operationsKey}\r\n                    options={element.operations}\r\n                    onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                      this.onChangeOperation(event, element.id, element.name, element.isSystemField, option)\r\n                    }\r\n                  />\r\n                </div>\r\n                <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\">{field}</div>\r\n                <div className=\"ms-Grid-row tpl-f-nl-md\">\r\n                  <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n                </div>\r\n              </div>\r\n            );\r\n          })}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, styles, theme, renderType, labelCmdBarSearch, labelCmdBarCancel } = this.props;\r\n    const { name, hideExternalSurface } = this.state;\r\n    const classNames = getClassNames(styles, { theme: theme!, className, renderType });\r\n\r\n    return (\r\n      <Fabric className={`ms-Grid ${classNames.root}`}>\r\n        {renderType === RenderType.DIALOG && !hideExternalSurface && (\r\n          <Dialog\r\n            hidden={hideExternalSurface}\r\n            minWidth={'650px'}\r\n            title={name}\r\n            onDismiss={this.closeExternalSurface}\r\n            dialogContentProps={{\r\n              type: DialogType.normal\r\n            }}\r\n            modalProps={{\r\n              isDarkOverlay: true,\r\n              isBlocking: true,\r\n              containerClassName: 'ms-dialogMainOverride'\r\n            }}\r\n          >\r\n            {this.renderForm()}\r\n            <DialogFooter>\r\n              <PrimaryButton onClick={this.onSubmit} text={labelCmdBarSearch} />\r\n              <DefaultButton onClick={this.onCancel} text={labelCmdBarCancel} />\r\n            </DialogFooter>\r\n          </Dialog>\r\n        )}\r\n        {renderType === RenderType.PANEL && !hideExternalSurface && (\r\n          <Panel\r\n            isOpen={!hideExternalSurface}\r\n            type={PanelType.custom}\r\n            customWidth=\"650px\"\r\n            onDismiss={this.closeExternalSurface}\r\n            closeButtonAriaLabel=\"Close\"\r\n          >\r\n            {this.renderForm()}\r\n            <div className=\"ms-Grid\">\r\n              <div className=\"ms-Grid-row tpl-f-nl-md\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm8 ms-md8 ms-lg8\" />\r\n                <div className=\"ms-Grid-col ms-sm2 ms-md2 ms-lg2\">\r\n                  <ActionButton iconProps={{ iconName: 'Search' }} onClick={this.onSubmit}>\r\n                    {labelCmdBarSearch}\r\n                  </ActionButton>\r\n                </div>\r\n                <div className=\"ms-Grid-col ms-sm2 ms-md2 ms-lg2\">\r\n                  <ActionButton iconProps={{ iconName: 'Cancel' }} onClick={this.onCancel}>\r\n                    {labelCmdBarCancel}\r\n                  </ActionButton>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </Panel>\r\n        )}\r\n        {renderType === RenderType.COMMANDBAR && this.renderForm()}\r\n      </Fabric>\r\n    );\r\n  }\r\n\r\n  private closeExternalSurface = (): void => {\r\n    this.setState({ hideExternalSurface: true });\r\n  };\r\n\r\n  private getSafeValue = (values: any[]): any => {\r\n    return values.length ? values[0].text : '';\r\n  };\r\n\r\n  private getSafeDateValue = (values: any[]): any => {\r\n    return values.length ? this.getSafeTextToDate(values[0].text) : null;\r\n  };\r\n\r\n  private getSafeTextToDate = (value: any): any => {\r\n    let safeDate = null;\r\n    try {\r\n      const asNumber: number = Number(value);\r\n      safeDate = new Date(0);\r\n      safeDate.setUTCSeconds(asNumber);\r\n    } catch (e) {\r\n      console.log('Error converting text to date:', value);\r\n    }\r\n\r\n    return safeDate;\r\n  };\r\n\r\n  private setSingleValue(id: number, name: string, isSystemField: boolean, value: any): void {\r\n    const formRow = this.getRowFromId(id, name, isSystemField);\r\n    const fieldValue = {\r\n      key: id,\r\n      text: name\r\n    };\r\n    formRow.values[0] = fieldValue;\r\n    this.result.values.set(id, formRow);\r\n  }\r\n\r\n  private handleTextInput(event: any, id: number, name: string, isSystemField: boolean): void {\r\n    this.setSingleValue(id, name, isSystemField, event.target.value);\r\n  }\r\n\r\n  private handleDateInput(date: Date | null | undefined, id: number, name: string, isSystemField: boolean): void {\r\n    this.setSingleValue(id, name, isSystemField, date);\r\n  }\r\n\r\n  private onChangeOperation = (\r\n    event: React.FormEvent<HTMLDivElement>,\r\n    id: number,\r\n    name: string,\r\n    isSystemField: boolean,\r\n    option?: IDropdownOption | undefined\r\n  ): void => {\r\n    if (!option) {\r\n      return;\r\n    }\r\n\r\n    const formRow = this.getRowFromId(id, name, isSystemField);\r\n    formRow.operation = Number(option.key);\r\n\r\n    this.result.values.set(id, formRow);\r\n  };\r\n\r\n  private onChangeValues = (\r\n    event: React.FormEvent<HTMLDivElement>,\r\n    id: number,\r\n    name: string,\r\n    isSystemField: boolean,\r\n    option?: IDropdownOption | undefined\r\n  ): void => {\r\n    if (!option) {\r\n      return;\r\n    }\r\n    const formRow = this.getRowFromId(id, name, isSystemField);\r\n\r\n    let updatedSelectedItems: any = [];\r\n\r\n    if (option.selected) {\r\n      // add the option if it's checked\r\n      const fieldValue = {\r\n        key: option.key,\r\n        text: option.text\r\n      };\r\n      updatedSelectedItems = update(formRow.values, { $push: [fieldValue] });\r\n    } else {\r\n      // remove the option if it's unchecked\r\n      const currIndex = formRow.values\r\n        .map(function(x) {\r\n          return x.id;\r\n        })\r\n        .indexOf(option.key);\r\n      if (currIndex > -1) {\r\n        updatedSelectedItems = update(formRow.values, { $splice: [[currIndex, 1]] });\r\n      }\r\n    }\r\n\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.values.set(id, formRow);\r\n  };\r\n\r\n  private onChangeValuesPickup = (\r\n    event: React.FormEvent<HTMLDivElement>,\r\n    id: number,\r\n    name: string,\r\n    isSystemField: boolean,\r\n    option?: IDropdownOption | undefined\r\n  ): void => {\r\n    if (!option) {\r\n      return;\r\n    }\r\n\r\n    const formRow = this.getRowFromId(id, name, isSystemField);\r\n\r\n    const fieldValue = {\r\n      key: option.key,\r\n      text: option.text\r\n    };\r\n    const updatedSelectedItems = update(formRow.values, { $push: [fieldValue] });\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.values.set(id, formRow);\r\n  };\r\n\r\n  private getRowFromId = (id: number, name: string, isSystemField: boolean): ITemplateFormRow => {\r\n    let formRow = this.result.values.get(id);\r\n    if (!formRow) {\r\n      formRow = {\r\n        id: id,\r\n        name: name,\r\n        isSystemField: isSystemField,\r\n        operation: -1,\r\n        values: []\r\n      };\r\n    }\r\n    return formRow;\r\n  };\r\n\r\n  private getCommandBarItems = () => {\r\n    const { labelCmdBarSearch, labelCmdBarCancel } = this.props;\r\n    const formCommandBarItems = [\r\n      {\r\n        key: 'Search',\r\n        name: labelCmdBarSearch,\r\n        iconProps: {\r\n          iconName: 'Search'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Cancel',\r\n        name: labelCmdBarCancel,\r\n        iconProps: {\r\n          iconName: 'Cancel'\r\n        },\r\n        onClick: () => this.props.onCancel()\r\n      }\r\n    ];\r\n    return formCommandBarItems;\r\n  };\r\n\r\n  private resetResultValues = (data: any[]): void => {\r\n    this.result.values.clear();\r\n\r\n    for (let item of data) {\r\n      const row: ITemplateFormRow = {\r\n        id: item.id,\r\n        name: item.name,\r\n        isSystemField: item.isSystemField,\r\n        operation: this.getOperationsValue(item.operations),\r\n        values: this.getValues(item.values)\r\n      };\r\n      this.result.values.set(item.id, row);\r\n    }\r\n  };\r\n\r\n  private getOperationsValue = (operations: any[]): any => {\r\n    let result = -1;\r\n    for (let item of operations) {\r\n      if (item.selected) {\r\n        result = item.key;\r\n        break;\r\n      }\r\n    }\r\n    return result;\r\n  };\r\n\r\n  private getValues = (values: any[]): any => {\r\n    let result: any[] = [];\r\n    for (let item of values) {\r\n      const fieldValue = {\r\n        key: item.key,\r\n        text: item.text\r\n      };\r\n      if (item.selected === null) {\r\n        result.push(fieldValue);\r\n      } else {\r\n        if (item.selected) {\r\n          result.push(fieldValue);\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  };\r\n\r\n  private onCancel = (): void => {\r\n    this.setState({ hideExternalSurface: true }, () => this.props.onCancel());\r\n  };\r\n\r\n  private onSubmit = (): void => {\r\n    const { onSubmit } = this.props;\r\n    const encoded = formToTemplateResult(this.state, this.result);\r\n\r\n    this.setState({ hideExternalSurface: true }, () => onSubmit(encoded));\r\n  };\r\n}\r\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { TemplateFormBase } from './TemplateForm.base';\r\nimport { ITemplateFormProps, ITemplateFormStyleProps, ITemplateFormStyles } from './TemplateForm.types';\r\nimport { getStyles } from './TemplateForm.styles';\r\n\r\nexport const TemplateForm: React.StatelessComponent<ITemplateFormProps> = styled<\r\n  ITemplateFormProps,\r\n  ITemplateFormStyleProps,\r\n  ITemplateFormStyles\r\n>(TemplateFormBase, getStyles);\r\n","import { ITemplateFormStyleProps, ITemplateFormStyles, RenderType } from './TemplateForm.types';\r\n\r\nexport function getStyles(props: ITemplateFormStyleProps): ITemplateFormStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceTemplate', {}, className],\r\n    title: [\r\n      'enChoiceTemplateTitle',\r\n      {\r\n        padding: 0,\r\n        marginRight: '0px !important',\r\n        marginLeft: '0px !important'\r\n      }\r\n    ],\r\n    commandBar: [\r\n      'enChoiceTemplateCBar',\r\n      {\r\n        padding: 0,\r\n        marginRight: '0px !important',\r\n        marginLeft: '0px !important'\r\n      }\r\n    ],\r\n    form: [\r\n      'enChoiceTemplateForm',\r\n      {\r\n        /* styles */\r\n      },\r\n\r\n      props.renderType === undefined || props.renderType === RenderType.COMMANDBAR\r\n        ? {\r\n            padding: '0 20px'\r\n          }\r\n        : {\r\n            padding: '0'\r\n          }\r\n    ]\r\n  };\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { createRef, classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { Callout } from 'office-ui-fabric-react/lib/Callout';\r\nimport { SearchBox as FabricSearchBox } from 'office-ui-fabric-react/lib/SearchBox';\r\nimport { GroupedList, IGroup } from 'office-ui-fabric-react/lib/components/GroupedList/index';\r\nimport { DetailsRow } from 'office-ui-fabric-react/lib/components/DetailsList/DetailsRow';\r\nimport { Selection, SelectionMode } from 'office-ui-fabric-react/lib/utilities/selection/index';\r\n\r\nimport { ISearchBoxProps, ISearchBoxStyleProps, ISearchBoxStyles, ISearchBoxGroupItem } from './SearchBox.types';\r\n\r\nimport './SearchBox.css';\r\nimport { IColumn } from 'office-ui-fabric-react/lib/DetailsList';\r\n\r\nexport interface ISearchBoxState {\r\n  isSearchCalloutVisible: boolean;\r\n  items: any[];\r\n  groups: IGroup[];\r\n  input?: string;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<ISearchBoxStyleProps, ISearchBoxStyles>();\r\n\r\nexport class SearchBoxBase extends React.PureComponent<ISearchBoxProps, ISearchBoxState> {\r\n  private _searchElement = createRef<HTMLElement>();\r\n  private _selection: Selection;\r\n\r\n  constructor(props: any) {\r\n    super(props);\r\n    this.state = {\r\n      isSearchCalloutVisible: false,\r\n      items: [],\r\n      groups: []\r\n    };\r\n\r\n    this._onRenderCell = this._onRenderCell.bind(this);\r\n\r\n    this._selection = new Selection({\r\n      onSelectionChanged: () => {\r\n        this.props.onSelectionChanged ? this.props.onSelectionChanged(this._selection.getSelection()) : null;\r\n      }\r\n    });\r\n  }\r\n\r\n  static getDerivedStateFromProps(props: ISearchBoxProps, state: ISearchBoxState) {\r\n    let groups: any[] = [];\r\n    let items: any[] = [];\r\n    let itemIdx = 0;\r\n\r\n    if (props.groupItems)\r\n      props.groupItems!.forEach(element => {\r\n        element.items.forEach(item => {\r\n          item.onItemClick = element.onItemClick;\r\n        });\r\n\r\n        groups = [...groups, { key: element.key, name: element.name, startIndex: itemIdx, count: element.items.length }];\r\n        items = [...items, ...element.items];\r\n        itemIdx = itemIdx + element.items.length;\r\n      });\r\n\r\n    return { groups: groups, items: items };\r\n  }\r\n\r\n  private onFocus = (): void => {\r\n    this.setState({\r\n      isSearchCalloutVisible: true\r\n    });\r\n\r\n    this.props.onFocus ? this.props.onFocus() : null;\r\n  };\r\n\r\n  private onBlur = (): void => {\r\n    this.props.onBlur ? this.props.onBlur() : null;\r\n  };\r\n\r\n  private onSearch = (search: string): void => {\r\n    this._onSearchCalloutDismiss();\r\n\r\n    this.props.onSearch(search);\r\n  };\r\n\r\n  private _onSearchCalloutDismiss = (): void => {\r\n    this.setState({\r\n      isSearchCalloutVisible: false\r\n    });\r\n  };\r\n\r\n  private onItemClick(item: any): void {\r\n    this.setState({ input: item.input, isSearchCalloutVisible: false });\r\n    item.onItemClick(item);\r\n  }\r\n\r\n  private onRenderRow(item: ISearchBoxGroupItem): IColumn[] {\r\n    return item.onRenderColumns(item);\r\n  }\r\n\r\n  private _onRenderCell(nestingDepth?: number, item?: any, itemIndex?: number): JSX.Element {\r\n    const { _selection: selection } = this;\r\n    return (\r\n      <div onClick={event => this.onItemClick(item)}>\r\n        <DetailsRow\r\n          columns={this.onRenderRow(item)}\r\n          groupNestingDepth={nestingDepth}\r\n          item={item}\r\n          itemIndex={itemIndex!}\r\n          selection={selection}\r\n          selectionMode={SelectionMode.none}\r\n          className=\"sbRows\"\r\n          indentWidth={this.props.indentWidth}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, styles, theme } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n\r\n    return (\r\n      <div className={`${classNames.root}`}>\r\n        <div ref={this._searchElement}>\r\n          <FabricSearchBox\r\n            placeholder={this.props.placeholder ? this.props.placeholder : 'Search'}\r\n            value={this.state.input ? this.state.input : this.props.value}\r\n            underlined={this.props.underlined}\r\n            onFocus={this.onFocus}\r\n            onBlur={this.onBlur}\r\n            onChange={this.props.onChange}\r\n            onClear={this.props.onClear}\r\n            onSearch={this.onSearch}\r\n            theme={theme}\r\n            styles={styles}\r\n          />\r\n        </div>\r\n\r\n        <Callout\r\n          ariaLabelledBy={'callout-label-1'}\r\n          ariaDescribedBy={'callout-description-1'}\r\n          role={'alertdialog'}\r\n          gapSpace={1}\r\n          isBeakVisible={false}\r\n          onDismiss={this._onSearchCalloutDismiss}\r\n          setInitialFocus={true}\r\n          hidden={!this.state.isSearchCalloutVisible}\r\n          target={this._searchElement.value}\r\n          theme={theme}\r\n          styles={styles}\r\n        >\r\n          <GroupedList\r\n            items={this.state.items || []}\r\n            onRenderCell={this._onRenderCell}\r\n            selection={this._selection}\r\n            selectionMode={SelectionMode.none}\r\n            groups={this.state.groups}\r\n            groupProps={{\r\n              showEmptyGroups: true\r\n            }}\r\n            theme={theme}\r\n            styles={styles}\r\n          />\r\n        </Callout>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default SearchBoxBase;\r\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { SearchBoxBase } from './SearchBox.base';\r\nimport { ISearchBoxProps, ISearchBoxStyleProps, ISearchBoxStyles } from './SearchBox.types';\r\nimport { getStyles } from './SearchBox.styles';\r\n\r\nexport const SearchBox: React.StatelessComponent<ISearchBoxProps> = styled<ISearchBoxProps, ISearchBoxStyleProps, ISearchBoxStyles>(\r\n  SearchBoxBase,\r\n  getStyles\r\n);\r\n","import { ISearchBoxStyleProps, ISearchBoxStyles } from \"./SearchBox.types\"\r\n\r\nexport function getStyles(props: ISearchBoxStyleProps): ISearchBoxStyles {\r\n    const { theme, className } = props;\r\n    const { } = theme;\r\n\r\n    return {\r\n        root: ['enChoiceSearch',\r\n            {},\r\n            className\r\n        ]\r\n    }\r\n}  ","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","import * as React from 'react';\r\nimport { Image } from '../../../Image';\r\nimport { Icon } from '../../../Icon';\r\nimport { IChoiceGroupOptionProps, IChoiceGroupOptionStyleProps, IChoiceGroupOptionStyles } from './ChoiceGroupOption.types';\r\nimport { classNamesFunction, getNativeProps, inputProperties, css } from '../../../Utilities';\r\nimport { IProcessedStyleSet } from '../../../Styling';\r\n\r\nconst getClassNames = classNamesFunction<IChoiceGroupOptionStyleProps, IChoiceGroupOptionStyles>();\r\n\r\nexport class ChoiceGroupOptionBase extends React.Component<IChoiceGroupOptionProps, any> {\r\n  private _inputElement = React.createRef<HTMLInputElement>();\r\n  private _classNames: IProcessedStyleSet<IChoiceGroupOptionStyles>;\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      ariaLabel,\r\n      focused,\r\n      required,\r\n      theme,\r\n      iconProps,\r\n      imageSrc,\r\n      imageSize = { width: 32, height: 32 },\r\n      disabled,\r\n      checked,\r\n      id,\r\n      styles,\r\n      name,\r\n      onRenderField = this._onRenderField,\r\n      ...rest\r\n    } = this.props;\r\n\r\n    this._classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      hasIcon: !!iconProps,\r\n      hasImage: !!imageSrc,\r\n      checked,\r\n      disabled,\r\n      imageIsLarge: !!imageSrc && (imageSize.width > 71 || imageSize.height > 71),\r\n      focused\r\n    });\r\n\r\n    const { className, ...nativeProps } = getNativeProps<{ className: string }>(rest, inputProperties);\r\n\r\n    return (\r\n      <div className={this._classNames.root}>\r\n        <div className={this._classNames.choiceFieldWrapper}>\r\n          <input\r\n            aria-label={ariaLabel ? ariaLabel : undefined}\r\n            ref={this._inputElement}\r\n            id={id}\r\n            className={css(this._classNames.input, className)}\r\n            type=\"radio\"\r\n            name={name}\r\n            disabled={disabled}\r\n            checked={checked}\r\n            required={required}\r\n            onChange={this._onChange.bind(this, this.props)}\r\n            onFocus={this._onFocus.bind(this, this.props)}\r\n            onBlur={this._onBlur.bind(this, this.props)}\r\n            {...nativeProps}\r\n          />\r\n          {onRenderField(this.props, this._onRenderField)}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _onChange(props: IChoiceGroupOptionProps, evt: React.FormEvent<HTMLInputElement>): void {\r\n    const { onChange } = props;\r\n    if (onChange) {\r\n      onChange(evt, props);\r\n    }\r\n  }\r\n\r\n  private _onBlur(props: IChoiceGroupOptionProps, evt: React.FocusEvent<HTMLElement>) {\r\n    const { onBlur } = props;\r\n    if (onBlur) {\r\n      onBlur(evt, props);\r\n    }\r\n  }\r\n\r\n  private _onFocus(props: IChoiceGroupOptionProps, evt: React.FocusEvent<HTMLElement>) {\r\n    const { onFocus } = props;\r\n    if (onFocus) {\r\n      onFocus(evt, props);\r\n    }\r\n  }\r\n\r\n  private _onRenderField = (props: IChoiceGroupOptionProps): JSX.Element => {\r\n    const { onRenderLabel = this._onRenderLabel, id, imageSrc, imageAlt, selectedImageSrc, iconProps } = props;\r\n\r\n    const imageSize = props.imageSize ? props.imageSize : { width: 32, height: 32 };\r\n\r\n    return (\r\n      <label htmlFor={id} className={this._classNames.field}>\r\n        {imageSrc && (\r\n          <div className={this._classNames.innerField} style={{ height: imageSize.height, width: imageSize.width }}>\r\n            <div className={this._classNames.imageWrapper}>\r\n              <Image src={imageSrc} alt={imageAlt ? imageAlt : ''} width={imageSize.width} height={imageSize.height} />\r\n            </div>\r\n            <div className={this._classNames.selectedImageWrapper}>\r\n              <Image src={selectedImageSrc} alt={imageAlt ? imageAlt : ''} width={imageSize.width} height={imageSize.height} />\r\n            </div>\r\n          </div>\r\n        )}\r\n        {iconProps ? (\r\n          <div className={this._classNames.innerField}>\r\n            <div className={this._classNames.iconWrapper}>\r\n              <Icon {...iconProps} />\r\n            </div>\r\n          </div>\r\n        ) : null}\r\n        {imageSrc || iconProps ? (\r\n          <div className={this._classNames.labelWrapper} style={{ maxWidth: imageSize.width * 2 }}>\r\n            {onRenderLabel!(props)}\r\n          </div>\r\n        ) : (\r\n          onRenderLabel!(props)\r\n        )}\r\n      </label>\r\n    );\r\n  };\r\n\r\n  private _onRenderLabel = (props: IChoiceGroupOptionProps): JSX.Element => {\r\n    return (\r\n      <span id={props.labelId} className=\"ms-ChoiceFieldLabel\">\r\n        {props.text}\r\n      </span>\r\n    );\r\n  };\r\n}\r\n","import { FontSizes, FontWeights, HighContrastSelector, IStyle, IPalette, getGlobalClassNames } from '../../../Styling';\r\nimport { IsFocusVisibleClassName } from '../../../Utilities';\r\nimport { IChoiceGroupOptionStyleProps, IChoiceGroupOptionStyles } from './ChoiceGroupOption.types';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-ChoiceField',\r\n  choiceFieldWrapper: 'ms-ChoiceField-wrapper',\r\n  input: 'ms-ChoiceField-input',\r\n  field: 'ms-ChoiceField-field',\r\n  innerField: 'ms-ChoiceField-innerField',\r\n  imageWrapper: 'ms-ChoiceField-imageWrapper',\r\n  iconWrapper: 'ms-ChoiceField-iconWrapper',\r\n  labelWrapper: 'ms-ChoiceField-labelWrapper',\r\n  checked: 'is-checked'\r\n};\r\n\r\nconst labelWrapperLineHeight = 15;\r\nconst iconSize = 32;\r\nconst choiceFieldSize = 20;\r\nconst choiceFieldTransitionDuration = '200ms';\r\nconst choiceFieldTransitionTiming = 'cubic-bezier(.4, 0, .23, 1)';\r\nconst radioButtonSpacing = 3;\r\nconst radioButtonInnerSize = 5;\r\n\r\nfunction getChoiceGroupFocusStyle(palette: Partial<IPalette>, hasIconOrImage?: boolean): IStyle {\r\n  return [\r\n    'is-inFocus',\r\n    {\r\n      selectors: {\r\n        [`.${IsFocusVisibleClassName} &`]: {\r\n          position: 'relative',\r\n          outline: 'transparent',\r\n          selectors: {\r\n            '::-moz-focus-inner': {\r\n              border: 0\r\n            },\r\n            ':after': {\r\n              content: '\"\"',\r\n              top: -2,\r\n              right: -2,\r\n              bottom: -2,\r\n              left: -2,\r\n              pointerEvents: 'none',\r\n              border: '1px solid ' + (hasIconOrImage ? palette.neutralSecondary : palette.neutralPrimary),\r\n              position: 'absolute',\r\n              selectors: {\r\n                [HighContrastSelector]: {\r\n                  borderColor: 'WindowText',\r\n                  borderWidth: hasIconOrImage ? 1 : 2\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  ];\r\n}\r\n\r\nfunction getImageWrapperStyle(isSelectedImageWrapper: boolean, className?: string, checked?: boolean): IStyle {\r\n  return [\r\n    className,\r\n    {\r\n      paddingBottom: 2,\r\n      transitionProperty: 'opacity',\r\n      transitionDuration: choiceFieldTransitionDuration,\r\n      transitionTimingFunction: 'ease',\r\n      selectors: {\r\n        '.ms-Image': {\r\n          display: 'inline-block',\r\n          borderStyle: 'none'\r\n        }\r\n      }\r\n    },\r\n    (checked ? !isSelectedImageWrapper : isSelectedImageWrapper) && [\r\n      'is-hidden',\r\n      {\r\n        position: 'absolute',\r\n        left: 0,\r\n        top: 0,\r\n        width: '100%',\r\n        height: '100%',\r\n        overflow: 'hidden',\r\n        opacity: 0\r\n      }\r\n    ]\r\n  ];\r\n}\r\n\r\nexport const getStyles = (props: IChoiceGroupOptionStyleProps): IChoiceGroupOptionStyles => {\r\n  const { theme, hasIcon, hasImage, checked, disabled, imageIsLarge, focused } = props;\r\n  const { palette, semanticColors } = theme;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const fieldHoverOrFocusProperties = {\r\n    selectors: {\r\n      '.ms-ChoiceFieldLabel': {\r\n        color: semanticColors.bodyTextChecked\r\n      },\r\n      ':before': {\r\n        borderColor: checked ? semanticColors.inputBackgroundCheckedHovered : semanticColors.inputBorderHovered\r\n      }\r\n    }\r\n  };\r\n\r\n  const enabledFieldWithImageHoverOrFocusProperties = {\r\n    borderColor: checked ? palette.themeDark : palette.neutralTertiaryAlt,\r\n    selectors: {\r\n      ':before': {\r\n        opacity: 1,\r\n        borderColor: checked ? palette.themeDark : semanticColors.inputBorderHovered\r\n      }\r\n    }\r\n  };\r\n\r\n  const circleAreaProperties: IStyle = [\r\n    {\r\n      content: '\"\"',\r\n      display: 'inline-block',\r\n      backgroundColor: semanticColors.bodyBackground,\r\n      borderWidth: 1,\r\n      borderStyle: 'solid',\r\n      borderColor: semanticColors.smallInputBorder,\r\n      width: choiceFieldSize,\r\n      height: choiceFieldSize,\r\n      fontWeight: 'normal',\r\n      position: 'absolute',\r\n      top: 0,\r\n      left: 0,\r\n      boxSizing: 'border-box',\r\n      transitionProperty: 'border-color',\r\n      transitionDuration: choiceFieldTransitionDuration,\r\n      transitionTimingFunction: choiceFieldTransitionTiming,\r\n      borderRadius: '50%'\r\n    },\r\n    disabled && {\r\n      backgroundColor: checked ? semanticColors.bodyBackground : semanticColors.disabledText,\r\n      borderColor: semanticColors.disabledText,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          color: 'GrayText'\r\n        }\r\n      }\r\n    },\r\n    checked && {\r\n      borderWidth: 1,\r\n      borderStyle: 'solid',\r\n      borderColor: disabled ? semanticColors.disabledText : semanticColors.inputBackgroundChecked,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          borderColor: 'Highlight'\r\n        }\r\n      }\r\n    },\r\n    (hasIcon || hasImage) && {\r\n      top: radioButtonSpacing,\r\n      right: radioButtonSpacing,\r\n      left: 'auto', // To reset the value of 'left' to its default value, so that 'right' works\r\n      opacity: !disabled && checked ? 1 : 0\r\n    }\r\n  ];\r\n\r\n  const dotAreaProperties: IStyle = [\r\n    {\r\n      content: '\"\"',\r\n      width: 0,\r\n      height: 0,\r\n      borderRadius: '50%',\r\n      position: 'absolute',\r\n      left: choiceFieldSize / 2,\r\n      right: 0,\r\n      transitionProperty: 'border-width',\r\n      transitionDuration: choiceFieldTransitionDuration,\r\n      transitionTimingFunction: choiceFieldTransitionTiming,\r\n      boxSizing: 'border-box'\r\n    },\r\n    checked && {\r\n      borderWidth: 5,\r\n      borderStyle: 'solid',\r\n      borderColor: disabled ? semanticColors.disabledText : semanticColors.inputBackgroundChecked,\r\n      left: 5,\r\n      top: 5,\r\n      width: 10,\r\n      height: 10,\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          borderColor: 'Highlight'\r\n        }\r\n      }\r\n    },\r\n    checked &&\r\n      (hasIcon || hasImage) && {\r\n        top: radioButtonSpacing + radioButtonInnerSize,\r\n        right: radioButtonSpacing + radioButtonInnerSize,\r\n        left: 'auto' // To reset the value of 'left' to its default value, so that 'right' works\r\n      }\r\n  ];\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        boxSizing: 'border-box',\r\n        color: semanticColors.bodyText,\r\n        fontSize: FontSizes.medium,\r\n        fontWeight: FontWeights.regular,\r\n        minHeight: 26,\r\n        border: 'none',\r\n        position: 'relative',\r\n        marginTop: 8,\r\n        selectors: {\r\n          '.ms-ChoiceFieldLabel': {\r\n            fontSize: FontSizes.medium,\r\n            display: 'inline-block'\r\n          }\r\n        }\r\n      },\r\n      !hasIcon &&\r\n        !hasImage && {\r\n          selectors: {\r\n            '.ms-ChoiceFieldLabel': {\r\n              paddingLeft: '26px'\r\n            }\r\n          }\r\n        },\r\n      hasImage && 'ms-ChoiceField--image',\r\n      hasIcon && 'ms-ChoiceField--icon',\r\n      (hasIcon || hasImage) && {\r\n        display: 'inline-flex',\r\n        fontSize: 0,\r\n        margin: '0 4px 4px 0',\r\n        paddingLeft: 0,\r\n        backgroundColor: palette.neutralLighter,\r\n        height: '100%'\r\n      }\r\n    ],\r\n    choiceFieldWrapper: [classNames.choiceFieldWrapper, focused && getChoiceGroupFocusStyle(palette, hasIcon || hasImage)],\r\n    // The hidden input\r\n    input: [\r\n      classNames.input,\r\n      {\r\n        position: 'absolute',\r\n        opacity: 0,\r\n        top: 0,\r\n        right: 0,\r\n        width: '100%',\r\n        height: '100%',\r\n        margin: 0\r\n      }\r\n    ],\r\n    field: [\r\n      classNames.field,\r\n      checked && classNames.checked,\r\n      {\r\n        display: 'inline-block',\r\n        cursor: 'pointer',\r\n        marginTop: 0,\r\n        position: 'relative',\r\n        verticalAlign: 'top',\r\n        userSelect: 'none',\r\n        minHeight: 20,\r\n        selectors: {\r\n          ':hover': !disabled && fieldHoverOrFocusProperties,\r\n          ':focus': !disabled && fieldHoverOrFocusProperties,\r\n\r\n          // The circle\r\n          ':before': circleAreaProperties,\r\n\r\n          // The dot\r\n          ':after': dotAreaProperties\r\n        }\r\n      },\r\n      hasIcon && 'ms-ChoiceField--icon',\r\n      hasImage && 'ms-ChoiceField-field--image',\r\n      (hasIcon || hasImage) && {\r\n        boxSizing: 'content-box',\r\n        cursor: 'pointer',\r\n        paddingTop: 22,\r\n        margin: 0,\r\n        textAlign: 'center',\r\n        transitionProperty: 'all',\r\n        transitionDuration: choiceFieldTransitionDuration,\r\n        transitionTimingFunction: 'ease',\r\n        border: '2px solid transparent',\r\n        justifyContent: 'center',\r\n        alignItems: 'center',\r\n        display: 'flex',\r\n        flexDirection: 'column'\r\n      },\r\n      checked && {\r\n        borderColor: palette.themePrimary\r\n      },\r\n      (hasIcon || hasImage) &&\r\n        !disabled && {\r\n          selectors: {\r\n            ':hover': enabledFieldWithImageHoverOrFocusProperties,\r\n            ':focus': enabledFieldWithImageHoverOrFocusProperties\r\n          }\r\n        },\r\n      disabled && {\r\n        cursor: 'default',\r\n        selectors: {\r\n          '.ms-ChoiceFieldLabel': {\r\n            color: semanticColors.disabledBodyText\r\n          },\r\n          [HighContrastSelector]: {\r\n            color: 'GrayText'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    innerField: [\r\n      classNames.innerField,\r\n      (hasIcon || hasImage) && {\r\n        position: 'relative',\r\n        display: 'inline-block',\r\n        paddingLeft: 30,\r\n        paddingRight: 30\r\n      },\r\n      (hasIcon || hasImage) &&\r\n        imageIsLarge && {\r\n          paddingLeft: 24,\r\n          paddingRight: 24\r\n        },\r\n      (hasIcon || hasImage) &&\r\n        disabled && {\r\n          opacity: 0.25,\r\n          selectors: {\r\n            [HighContrastSelector]: {\r\n              color: 'GrayText',\r\n              opacity: 1\r\n            }\r\n          }\r\n        }\r\n    ],\r\n    imageWrapper: getImageWrapperStyle(false, classNames.imageWrapper, checked),\r\n    selectedImageWrapper: getImageWrapperStyle(true, classNames.imageWrapper, checked),\r\n    iconWrapper: [\r\n      classNames.iconWrapper,\r\n      {\r\n        fontSize: iconSize,\r\n        lineHeight: iconSize,\r\n        height: iconSize\r\n      }\r\n    ],\r\n    labelWrapper: [\r\n      classNames.labelWrapper,\r\n      (hasIcon || hasImage) && {\r\n        display: 'block',\r\n        position: 'relative',\r\n        margin: '4px 8px',\r\n        height: labelWrapperLineHeight * 2,\r\n        lineHeight: labelWrapperLineHeight,\r\n        overflow: 'hidden',\r\n        whiteSpace: 'pre-wrap',\r\n        textOverflow: 'ellipsis',\r\n        fontSize: FontSizes.medium,\r\n        fontWeight: FontWeights.regular\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../../Utilities';\r\nimport { ChoiceGroupOptionBase } from './ChoiceGroupOption.base';\r\nimport { IChoiceGroupOptionProps, IChoiceGroupOptionStyleProps, IChoiceGroupOptionStyles } from './ChoiceGroupOption.types';\r\nimport { getStyles } from './ChoiceGroupOption.styles';\r\n\r\nexport const ChoiceGroupOption: React.StatelessComponent<IChoiceGroupOptionProps> = styled<\r\n  IChoiceGroupOptionProps,\r\n  IChoiceGroupOptionStyleProps,\r\n  IChoiceGroupOptionStyles\r\n>(ChoiceGroupOptionBase, getStyles, undefined, { scope: 'ChoiceGroupOption' });\r\n","import * as React from 'react';\r\n\r\nimport { Label } from '../../Label';\r\nimport { initializeComponentRef, warnDeprecations, warnMutuallyExclusive, classNamesFunction, find, getId } from '../../Utilities';\r\nimport { IChoiceGroup, IChoiceGroupOption, IChoiceGroupProps, IChoiceGroupStyleProps, IChoiceGroupStyles } from './ChoiceGroup.types';\r\nimport { ChoiceGroupOption, OnChangeCallback, OnFocusCallback } from './ChoiceGroupOption/index';\r\n\r\nconst getClassNames = classNamesFunction<IChoiceGroupStyleProps, IChoiceGroupStyles>();\r\n\r\nexport interface IChoiceGroupState {\r\n  keyChecked: string | number;\r\n\r\n  /** Is true when the control has focus. */\r\n  keyFocused?: string | number;\r\n}\r\n\r\nexport class ChoiceGroupBase extends React.Component<IChoiceGroupProps, IChoiceGroupState> implements IChoiceGroup {\r\n  public static defaultProps: IChoiceGroupProps = {\r\n    options: []\r\n  };\r\n\r\n  private _id: string;\r\n  private _labelId: string;\r\n  private _inputElement = React.createRef<HTMLInputElement>();\r\n  private focusedVars: { [key: string]: OnFocusCallback } = {};\r\n  private changedVars: { [key: string]: OnChangeCallback } = {};\r\n\r\n  constructor(props: IChoiceGroupProps) {\r\n    super(props);\r\n\r\n    initializeComponentRef(this);\r\n\r\n    if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\r\n      warnDeprecations('ChoiceGroup', props, { onChanged: 'onChange' });\r\n      warnMutuallyExclusive('ChoiceGroup', props, {\r\n        selectedKey: 'defaultSelectedKey'\r\n      });\r\n    }\r\n\r\n    const validDefaultSelectedKey: boolean = !!props.options && props.options.some(option => option.key === props.defaultSelectedKey);\r\n\r\n    this.state = {\r\n      keyChecked:\r\n        props.defaultSelectedKey === undefined || !validDefaultSelectedKey ? this._getKeyChecked(props)! : props.defaultSelectedKey,\r\n      keyFocused: undefined\r\n    };\r\n\r\n    this._id = getId('ChoiceGroup');\r\n    this._labelId = getId('ChoiceGroupLabel');\r\n  }\r\n\r\n  /**\r\n   * Gets the current checked option.\r\n   */\r\n  public get checkedOption(): IChoiceGroupOption | undefined {\r\n    const { options = [] } = this.props;\r\n    const { keyChecked: key } = this.state;\r\n    return find(options, (value: IChoiceGroupOption) => value.key === key);\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IChoiceGroupProps): void {\r\n    const newKeyChecked = this._getKeyChecked(newProps);\r\n    const oldKeyChecked = this._getKeyChecked(this.props);\r\n\r\n    if (newKeyChecked !== oldKeyChecked) {\r\n      this.setState({\r\n        keyChecked: newKeyChecked!\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, theme, styles, options, label, required, disabled, name, role } = this.props;\r\n    const { keyChecked, keyFocused } = this.state;\r\n\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      optionsContainIconOrImage: options!.some(option => Boolean(option.iconProps || option.imageSrc))\r\n    });\r\n\r\n    const ariaLabelledBy = this.props.ariaLabelledBy\r\n      ? this.props.ariaLabelledBy\r\n      : label\r\n      ? this._id + '-label'\r\n      : (this.props as any)['aria-labelledby'];\r\n\r\n    return (\r\n      <div role={role} className={classNames.applicationRole}>\r\n        <div className={classNames.root} role=\"radiogroup\" {...ariaLabelledBy && { 'aria-labelledby': ariaLabelledBy }}>\r\n          {label && (\r\n            <Label className={classNames.label} required={required} id={this._id + '-label'}>\r\n              {label}\r\n            </Label>\r\n          )}\r\n          <div className={classNames.flexContainer}>\r\n            {options!.map((option: IChoiceGroupOption) => {\r\n              const innerOptionProps = {\r\n                ...option,\r\n                focused: option.key === keyFocused,\r\n                checked: option.key === keyChecked,\r\n                disabled: option.disabled || disabled,\r\n                id: `${this._id}-${option.key}`,\r\n                labelId: `${this._labelId}-${option.key}`,\r\n                name: name || this._id,\r\n                required\r\n              };\r\n\r\n              return (\r\n                <ChoiceGroupOption\r\n                  key={option.key}\r\n                  onBlur={this._onBlur}\r\n                  onFocus={this._onFocus(option.key)}\r\n                  onChange={this._onChange(option.key)}\r\n                  {...innerOptionProps}\r\n                />\r\n              );\r\n            })}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    const { options } = this.props;\r\n    if (options) {\r\n      for (const option of options) {\r\n        const elementToFocus = document.getElementById(`${this._id}-${option.key}`);\r\n        if (elementToFocus && elementToFocus.getAttribute('data-is-focusable') === 'true') {\r\n          elementToFocus.focus(); // focus on checked or default focusable key\r\n          return;\r\n        }\r\n      }\r\n    }\r\n    if (this._inputElement.current) {\r\n      this._inputElement.current.focus();\r\n    }\r\n  }\r\n\r\n  private _onFocus = (key: string) =>\r\n    this.focusedVars[key]\r\n      ? this.focusedVars[key]\r\n      : (this.focusedVars[key] = (ev: React.FocusEvent<HTMLElement>, option: IChoiceGroupOption) => {\r\n          this.setState({\r\n            keyFocused: key,\r\n            keyChecked: this.state.keyChecked\r\n          });\r\n        });\r\n\r\n  private _onBlur = (ev: React.FocusEvent<HTMLElement>, option: IChoiceGroupOption) => {\r\n    this.setState({\r\n      keyFocused: undefined,\r\n      keyChecked: this.state.keyChecked\r\n    });\r\n  };\r\n\r\n  private _onChange = (key: string) =>\r\n    this.changedVars[key]\r\n      ? this.changedVars[key]\r\n      : (this.changedVars[key] = (evt, option: IChoiceGroupOption) => {\r\n          const { onChanged, onChange, selectedKey, options = [] } = this.props;\r\n\r\n          // Only manage state in uncontrolled scenarios.\r\n          if (selectedKey === undefined) {\r\n            this.setState({\r\n              keyChecked: key\r\n            });\r\n          }\r\n\r\n          const originalOption = find(options, (value: IChoiceGroupOption) => value.key === key);\r\n\r\n          // TODO: onChanged deprecated, remove else if after 07/17/2017 when onChanged has been removed.\r\n          if (onChange) {\r\n            onChange(evt, originalOption);\r\n          } else if (onChanged) {\r\n            onChanged(originalOption!);\r\n          }\r\n        });\r\n\r\n  private _getKeyChecked(props: IChoiceGroupProps): string | number | undefined {\r\n    if (props.selectedKey !== undefined) {\r\n      return props.selectedKey;\r\n    }\r\n\r\n    const { options = [] } = props;\r\n\r\n    const optionsChecked = options.filter((option: IChoiceGroupOption) => {\r\n      return option.checked;\r\n    });\r\n\r\n    if (optionsChecked.length === 0) {\r\n      return undefined;\r\n    } else {\r\n      return optionsChecked[0].key;\r\n    }\r\n  }\r\n}\r\n","import { IChoiceGroupStyleProps, IChoiceGroupStyles } from './ChoiceGroup.types';\r\nimport { getGlobalClassNames } from '../../Styling';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-ChoiceFieldGroup',\r\n  flexContainer: 'ms-ChoiceFieldGroup-flexContainer'\r\n};\r\n\r\nexport const getStyles = (props: IChoiceGroupStyleProps): IChoiceGroupStyles => {\r\n  const { className, optionsContainIconOrImage, theme } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    applicationRole: className,\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      {\r\n        display: 'block'\r\n      }\r\n    ],\r\n    flexContainer: [\r\n      classNames.flexContainer,\r\n      optionsContainIconOrImage && {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        flexWrap: 'wrap'\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { ChoiceGroupBase } from './ChoiceGroup.base';\r\nimport { IChoiceGroupProps, IChoiceGroupStyles, IChoiceGroupStyleProps } from './ChoiceGroup.types';\r\nimport { getStyles } from './ChoiceGroup.styles';\r\n\r\nexport const ChoiceGroup: React.StatelessComponent<IChoiceGroupProps> = styled<\r\n  IChoiceGroupProps,\r\n  IChoiceGroupStyleProps,\r\n  IChoiceGroupStyles\r\n>(ChoiceGroupBase, getStyles, undefined, { scope: 'ChoiceGroup' });\r\n","import * as React from 'react';\r\n\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\n\r\nimport { ScrollablePane, IScrollablePane } from 'office-ui-fabric-react/lib/ScrollablePane';\r\n\r\nimport { DetailsList, DetailsListLayoutMode, SelectionMode, Selection, IColumn } from 'office-ui-fabric-react/lib/DetailsList';\r\n\r\nimport { classNamesFunction, createRef, RefObject } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\n\r\n/*\r\nimport { IconButton, IButtonStyles } from 'office-ui-fabric-react/lib/Button';\r\nimport { createTheme } from \"office-ui-fabric-react/lib/Styling\";\r\n*/\r\nimport { IconButton } from 'office-ui-fabric-react/lib/Button';\r\n\r\nimport update from 'immutability-helper';\r\n\r\nimport { Title } from '../Title';\r\n\r\nimport './MovableOptionsList.css';\r\n\r\nimport {\r\n  IMovableOptionsListProps,\r\n  IMovableOptionsListStyleProps,\r\n  IMovableOptionsListStyles,\r\n  IMovableOptionsListElement\r\n} from './MovableOptionsList.types';\r\n\r\nconst getClassNames = classNamesFunction<IMovableOptionsListStyleProps, IMovableOptionsListStyles>();\r\n\r\n/*\r\nconst iconsTheme = createTheme({\r\n  semanticColors: {\r\n    disabledBackground: \"#ffff00\"\r\n  }\r\n});\r\n\r\nconst iconButtonStyles: IButtonStyles = {\r\n  rootDisabled: {\r\n    backgroundColor: \"#ff0000\",\r\n  }\r\n};\r\n*/\r\n\r\nexport const MoveModeEnum = {\r\n  SELECTED_TO_AVAILABLE: 0,\r\n  AVAILABLE_TO_SELECTED: 1\r\n};\r\n\r\nexport const MoveDirectionEnum = {\r\n  UP: -1,\r\n  DOWN: 1\r\n};\r\n\r\nexport interface IMovableOptionsListState {\r\n  isAvailableSelected: boolean;\r\n  isSelectedSelected: boolean;\r\n  availableElems: IMovableOptionsListElement[];\r\n  selectedElems: IMovableOptionsListElement[];\r\n  error: any;\r\n}\r\n\r\nexport class MovableOptionsListBase extends React.PureComponent<IMovableOptionsListProps, IMovableOptionsListState> {\r\n  private scrollablePaneAvailable: RefObject<IScrollablePane> = createRef<IScrollablePane>();\r\n  private scrollablePaneSelected: RefObject<IScrollablePane> = createRef<IScrollablePane>();\r\n  private selectionAvailable: Selection;\r\n  private selectionSelected: Selection;\r\n\r\n  private columns: IColumn[] = [\r\n    {\r\n      key: 'Property',\r\n      name: 'Property',\r\n      fieldName: 'text',\r\n      minWidth: 70,\r\n      maxWidth: 90\r\n    }\r\n  ];\r\n\r\n  constructor(props: IMovableOptionsListProps) {\r\n    super(props);\r\n    this.state = {\r\n      availableElems: [],\r\n      selectedElems: [],\r\n      error: undefined,\r\n      isAvailableSelected: false,\r\n      isSelectedSelected: false\r\n    };\r\n\r\n    this.swapElements = this.swapElements.bind(this);\r\n    this.moveSelected = this.moveSelected.bind(this);\r\n    this.checkElements = this.checkElements.bind(this);\r\n    this.handleSwapChange = this.handleSwapChange.bind(this);\r\n    this.handleMoveUpAndDownChange = this.handleMoveUpAndDownChange.bind(this);\r\n\r\n    this.selectionAvailable = new Selection({\r\n      onSelectionChanged: () => {\r\n        this.setState({ isAvailableSelected: this.selectionAvailable.getSelection().length > 0 });\r\n      }\r\n    });\r\n\r\n    this.selectionSelected = new Selection({\r\n      onSelectionChanged: () => {\r\n        this.setState({ isSelectedSelected: this.selectionSelected.getSelection().length > 0 });\r\n      }\r\n    });\r\n  }\r\n\r\n  public componentDidMount() {\r\n    const { property } = this.props;\r\n    if (property) {\r\n      this.columns[0].name = property;\r\n    }\r\n    this.checkElements();\r\n  }\r\n\r\n  public checkElements() {\r\n    const { elements } = this.props;\r\n    const availableElems: IMovableOptionsListElement[] = [];\r\n    const selectedElems: IMovableOptionsListElement[] = [];\r\n\r\n    if (elements) {\r\n      for (let elem of elements) {\r\n        const elementsPointer = elem.selected ? selectedElems : availableElems;\r\n        elementsPointer.push(elem);\r\n      }\r\n    }\r\n    this.setState({ availableElems: availableElems, selectedElems: selectedElems });\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IMovableOptionsListProps) {\r\n    if (this.props.elements !== prevProps.elements) {\r\n      this.checkElements();\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, styles, theme, availableLabel, selectedLabel, title, disableUpAndDown } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n    const { availableElems, selectedElems } = this.state;\r\n\r\n    return (\r\n      <Fabric className={`ms-Grid ${classNames.root}`}>\r\n        {title && <Title title={title} icon={true} />}\r\n\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\">\r\n            <Label className=\"ms-font-l ms-fontWeight-regular\">{availableLabel ? availableLabel : 'Available'}</Label>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm1 ms-md1 ms-lg1\" />\r\n          <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\">\r\n            <Label className=\"ms-font-l  ms-fontWeight-regular\">{selectedLabel ? selectedLabel : 'Selected'}</Label>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm1 ms-md1 ms-lg1\" />\r\n        </div>\r\n\r\n        <div className=\"ms-Grid-row ml-nl-md\">\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n        </div>\r\n\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\" style={{ position: 'relative' }}>\r\n            <ScrollablePane componentRef={this.scrollablePaneAvailable} style={{ height: this.props.height }}>\r\n              <DetailsList\r\n                key=\"availableListKey\"\r\n                columns={this.columns}\r\n                items={availableElems}\r\n                selectionMode={SelectionMode.multiple}\r\n                setKey=\"setAvailable\"\r\n                layoutMode={DetailsListLayoutMode.justified}\r\n                isHeaderVisible={true}\r\n                selectionPreservedOnEmptyClick={true}\r\n                enterModalSelectionOnTouch={true}\r\n                selection={this.selectionAvailable}\r\n              />\r\n            </ScrollablePane>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm1 ms-md1 ms-lg1\">\r\n            <div className=\"ms-Grid\">\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" style={{ textAlign: 'center' }}>\r\n                  <IconButton\r\n                    iconProps={{ iconName: 'ChevronLeft' }}\r\n                    disabled={!this.state.isSelectedSelected}\r\n                    onClick={() => this.swapElements(MoveModeEnum.SELECTED_TO_AVAILABLE)}\r\n                    //styles={iconButtonStyles}\r\n                  />\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" style={{ textAlign: 'center' }}>\r\n                  <IconButton\r\n                    iconProps={{ iconName: 'ChevronRight' }}\r\n                    disabled={!this.state.isAvailableSelected}\r\n                    onClick={() => this.swapElements(MoveModeEnum.AVAILABLE_TO_SELECTED)}\r\n                    //theme={iconsTheme}\r\n                  />\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\" style={{ position: 'relative' }}>\r\n            <ScrollablePane componentRef={this.scrollablePaneSelected} style={{ height: this.props.height }}>\r\n              <DetailsList\r\n                key=\"selectedListKey\"\r\n                columns={this.columns}\r\n                items={selectedElems}\r\n                selectionMode={SelectionMode.multiple}\r\n                setKey=\"setSelected\"\r\n                layoutMode={DetailsListLayoutMode.justified}\r\n                isHeaderVisible={true}\r\n                selectionPreservedOnEmptyClick={true}\r\n                enterModalSelectionOnTouch={true}\r\n                selection={this.selectionSelected}\r\n              />\r\n            </ScrollablePane>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm1 ms-md1 ms-lg1\">\r\n            {!disableUpAndDown && (\r\n              <div className=\"ms-Grid\">\r\n                <div className=\"ms-Grid-row\">\r\n                  <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                    <IconButton\r\n                      iconProps={{ iconName: 'ChevronUp' }}\r\n                      disabled={!this.state.isSelectedSelected}\r\n                      onClick={() => this.moveSelected(MoveDirectionEnum.UP)}\r\n                    />\r\n                  </div>\r\n                </div>\r\n                <div className=\"ms-Grid-row\">\r\n                  <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                    <IconButton\r\n                      iconProps={{ iconName: 'ChevronDown' }}\r\n                      disabled={!this.state.isSelectedSelected}\r\n                      onClick={() => this.moveSelected(MoveDirectionEnum.DOWN)}\r\n                    />\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </Fabric>\r\n    );\r\n  }\r\n\r\n  private swapElements = (mode: number) => {\r\n    const selection = mode === MoveModeEnum.SELECTED_TO_AVAILABLE ? this.selectionSelected : this.selectionAvailable;\r\n    const selectedItems: any[] = selection.getSelection();\r\n    const { availableElems, selectedElems } = this.state;\r\n\r\n    let selectedElemsCopy: any[] = [];\r\n    let availableElemsCopy: any[] = [];\r\n\r\n    if (selectedItems.length > 0) {\r\n      for (let item of selectedItems) {\r\n        const selectedListOrigin = selectedElemsCopy.length > 0 ? selectedElemsCopy : selectedElems;\r\n        const availableListOrigin = availableElemsCopy.length > 0 ? availableElemsCopy : availableElems;\r\n\r\n        item.selected = mode === MoveModeEnum.SELECTED_TO_AVAILABLE ? false : true;\r\n\r\n        const listToSearchIndex = mode === MoveModeEnum.SELECTED_TO_AVAILABLE ? selectedListOrigin : availableListOrigin;\r\n        const indexToRemove = listToSearchIndex.findIndex(value => value.key === item.key);\r\n\r\n        if (indexToRemove >= 0) {\r\n          if (mode === MoveModeEnum.SELECTED_TO_AVAILABLE) {\r\n            selectedElemsCopy = update(selectedListOrigin, { $splice: [[indexToRemove, 1]] });\r\n            availableElemsCopy = update(availableListOrigin, { $push: [item] });\r\n          } else {\r\n            availableElemsCopy = update(availableListOrigin, { $splice: [[indexToRemove, 1]] });\r\n            selectedElemsCopy = update(selectedListOrigin, { $push: [item] });\r\n          }\r\n        }\r\n      }\r\n      this.setState({ selectedElems: selectedElemsCopy, availableElems: availableElemsCopy }, () => this.handleSwapChange());\r\n    }\r\n  };\r\n\r\n  private moveSelected = (pos: number): void => {\r\n    const { selectedElems } = this.state;\r\n\r\n    const selectedItems: any[] = this.selectionSelected.getSelection();\r\n\r\n    if (selectedItems.length === 1) {\r\n      const item = selectedItems[0];\r\n      const index = selectedElems.findIndex(value => value.key === item.key);\r\n\r\n      if (index >= 0) {\r\n        const element = selectedElems[index];\r\n        let selectedElemsCopy = update(selectedElems, { $splice: [[index, 1]] });\r\n        selectedElemsCopy = update(selectedElemsCopy, { $splice: [[index + pos, 0, element]] });\r\n        this.setState({ selectedElems: selectedElemsCopy }, () => this.handleMoveUpAndDownChange());\r\n      }\r\n    }\r\n  };\r\n\r\n  private handleSwapChange = (): void => {\r\n    const { selectedElems } = this.state;\r\n    const { handleSwapChange } = this.props;\r\n\r\n    if (handleSwapChange) {\r\n      handleSwapChange(selectedElems);\r\n    }\r\n  };\r\n\r\n  private handleMoveUpAndDownChange = (): void => {\r\n    const { selectedElems } = this.state;\r\n    const { handleMoveUpAndDownChange } = this.props;\r\n\r\n    if (handleMoveUpAndDownChange) {\r\n      handleMoveUpAndDownChange(selectedElems);\r\n    }\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { BaseButton, Button } from '../../Button';\r\nimport { ITheme, IStyle } from '../../Styling';\r\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\r\n\r\n/**\r\n * {@docCategory MessageBar}\r\n */\r\nexport interface IMessageBar {}\r\n\r\n/**\r\n * {@docCategory MessageBar}\r\n */\r\nexport interface IMessageBarProps extends React.HTMLAttributes<HTMLElement> {\r\n  /**\r\n   * Optional callback to access the IMessageBar interface. Use this instead of ref for accessing\r\n   * the public methods and properties of the component.\r\n   */\r\n  componentRef?: IRefObject<IMessageBar>;\r\n\r\n  /**\r\n   * The type of MessageBar to render.\r\n   * @defaultvalue MessageBarType.info\r\n   */\r\n  messageBarType?: MessageBarType;\r\n\r\n  /**\r\n   * The actions you want to show on the other side.\r\n   */\r\n  actions?: JSX.Element;\r\n\r\n  /**\r\n   * A description of the message bar for the benefit of screen readers.\r\n   * @deprecated Use native prop `aria-label` instead.\r\n   */\r\n  ariaLabel?: string;\r\n\r\n  /**\r\n   * Whether the message bar has a dismiss button and its callback.\r\n   * If null, we don't show a dismiss button.\r\n   * @defaultvalue null\r\n   */\r\n  onDismiss?: (ev?: React.MouseEvent<HTMLButtonElement | BaseButton | HTMLAnchorElement | HTMLDivElement | Button>) => any;\r\n\r\n  /**\r\n   * Determines if the message bar is multi lined.\r\n   * If false, and the text overflows over buttons or to another line, it is clipped.\r\n   * @defaultvalue true\r\n   */\r\n  isMultiline?: boolean;\r\n\r\n  /**\r\n   * Aria label on dismiss button if onDismiss is defined.\r\n   */\r\n  dismissButtonAriaLabel?: string;\r\n\r\n  /**\r\n   * Determines if the message bar text is truncated.\r\n   * If true, a button will render to toggle between a single line view and multiline view.\r\n   * This prop is for single line message bars with no buttons only in a limited space scenario.\r\n   * @defaultvalue false\r\n   */\r\n  truncated?: boolean;\r\n\r\n  /**\r\n   * Aria label on overflow button if truncated is defined.\r\n   */\r\n  overflowButtonAriaLabel?: string;\r\n\r\n  /**\r\n   * Additional CSS class(es) to apply to the MessageBar.\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Theme (provided through customization.)\r\n   */\r\n  theme?: ITheme;\r\n\r\n  /**\r\n   * Call to provide customized styling that will layer on top of the variant rules.\r\n   */\r\n  styles?: IStyleFunctionOrObject<IMessageBarStyleProps, IMessageBarStyles>;\r\n}\r\n\r\n/**\r\n * {@docCategory MessageBar}\r\n */\r\nexport interface IMessageBarStyleProps {\r\n  /**\r\n   * Theme (provided through customization).\r\n   */\r\n  theme: ITheme;\r\n\r\n  /**\r\n   * Additional CSS class(es).\r\n   */\r\n  className?: string;\r\n\r\n  /**\r\n   * Type of the MessageBar.\r\n   */\r\n  messageBarType?: MessageBarType;\r\n\r\n  /**\r\n   * Whether the MessageBar contains a dismiss button.\r\n   */\r\n  onDismiss?: boolean;\r\n\r\n  /**\r\n   * Whether the text is truncated.\r\n   */\r\n  truncated?: boolean;\r\n\r\n  /**\r\n   * Whether the MessageBar is rendered in multi line (as opposed to single line) mode.\r\n   */\r\n  isMultiline?: boolean;\r\n\r\n  /**\r\n   * Whether the single line MessageBar is being expanded.\r\n   */\r\n  expandSingleLine?: boolean;\r\n\r\n  /**\r\n   * Whether the MessageBar contains any action elements.\r\n   */\r\n  actions?: boolean;\r\n}\r\n\r\n/**\r\n * {@docCategory MessageBar}\r\n */\r\nexport interface IMessageBarStyles {\r\n  /**\r\n   * Style set for the root element.\r\n   */\r\n  root?: IStyle;\r\n\r\n  /**\r\n   * Style set for the element containing the icon, text, and optional dismiss button.\r\n   */\r\n  content?: IStyle;\r\n\r\n  /**\r\n   * Style set for the element containing the icon.\r\n   */\r\n  iconContainer?: IStyle;\r\n\r\n  /**\r\n   * Style set for the icon.\r\n   */\r\n  icon?: IStyle;\r\n\r\n  /**\r\n   * Style set for the element containing the text.\r\n   */\r\n  text?: IStyle;\r\n\r\n  /**\r\n   * Style set for the text.\r\n   */\r\n  innerText?: IStyle;\r\n\r\n  /**\r\n   * Style set for the optional dismiss button.\r\n   */\r\n  dismissal?: IStyle;\r\n\r\n  /**\r\n   * Style set for the icon used to expand and collapse the MessageBar.\r\n   */\r\n  expand?: IStyle;\r\n\r\n  /**\r\n   * Style set for the element containing the dismiss button.\r\n   */\r\n  dismissSingleLine?: IStyle;\r\n\r\n  /**\r\n   * Style set for the element containing the expand icon.\r\n   */\r\n  expandSingleLine?: IStyle;\r\n\r\n  /**\r\n   * Style set for the optional element containing the action elements.\r\n   */\r\n  actions?: IStyle;\r\n}\r\n\r\n/**\r\n * {@docCategory MessageBar}\r\n */\r\nexport enum MessageBarType {\r\n  /** Info styled MessageBar */\r\n  info = 0,\r\n  /** Error styled MessageBar */\r\n  error = 1,\r\n  /** Blocked styled MessageBar */\r\n  blocked = 2,\r\n  /** SevereWarning styled MessageBar */\r\n  severeWarning = 3,\r\n  /** Success styled MessageBar */\r\n  success = 4,\r\n  /** Warning styled MessageBar */\r\n  warning = 5,\r\n  /**\r\n   * Deprecated at v0.48.0, to be removed at \\>= v1.0.0. Use `blocked` instead.\r\n   * @deprecated Use `blocked` instead.\r\n   */\r\n  remove = 90000\r\n}\r\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { MovableOptionsListBase } from './MovableOptionsList.base';\r\nimport { IMovableOptionsListProps, IMovableOptionsListStyleProps, IMovableOptionsListStyles } from './MovableOptionsList.types';\r\nimport { getStyles } from './MovableOptionsList.styles';\r\n\r\nexport const MovableOptionsList: React.StatelessComponent<IMovableOptionsListProps> = styled<\r\n  IMovableOptionsListProps,\r\n  IMovableOptionsListStyleProps,\r\n  IMovableOptionsListStyles\r\n>(MovableOptionsListBase, getStyles);\r\n","import { IMovableOptionsListStyleProps, IMovableOptionsListStyles } from './MovableOptionsList.types';\r\n\r\nexport function getStyles(props: IMovableOptionsListStyleProps): IMovableOptionsListStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceMovableOptionsList', {}, className]\r\n  };\r\n}\r\n","export function deepClone<T>(obj: T): T {\r\n  return JSON.parse(JSON.stringify(obj as T));\r\n}\r\n\r\nexport function cloneMap<T, V>(map: Map<T, V>): Map<T, V> {\r\n  return new Map<T, V>(map);\r\n}","import * as React from 'react';\r\nimport { BaseComponent, DelayedRender, getId, classNamesFunction, getNativeProps, htmlElementProperties } from '../../Utilities';\r\nimport { IconButton } from '../../Button';\r\nimport { Icon } from '../../Icon';\r\nimport { IMessageBarProps, IMessageBarStyleProps, IMessageBarStyles, MessageBarType } from './MessageBar.types';\r\n\r\nconst getClassNames = classNamesFunction<IMessageBarStyleProps, IMessageBarStyles>();\r\n\r\nexport interface IMessageBarState {\r\n  labelId?: string;\r\n  showContent?: boolean;\r\n  expandSingleLine?: boolean;\r\n}\r\n\r\nexport class MessageBarBase extends BaseComponent<IMessageBarProps, IMessageBarState> {\r\n  public static defaultProps: IMessageBarProps = {\r\n    messageBarType: MessageBarType.info,\r\n    onDismiss: undefined,\r\n    isMultiline: true\r\n  };\r\n\r\n  private ICON_MAP = {\r\n    [MessageBarType.info]: 'Info',\r\n    [MessageBarType.warning]: 'Info',\r\n    [MessageBarType.error]: 'ErrorBadge',\r\n    [MessageBarType.blocked]: 'Blocked2',\r\n    [MessageBarType.remove]: 'Blocked', // TODO remove deprecated value at >= 1.0.0\r\n    [MessageBarType.severeWarning]: 'Warning',\r\n    [MessageBarType.success]: 'Completed'\r\n  };\r\n\r\n  private _classNames: { [key in keyof IMessageBarStyles]: string };\r\n\r\n  constructor(props: IMessageBarProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      labelId: getId('MessageBar'),\r\n      showContent: false,\r\n      expandSingleLine: false\r\n    };\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { isMultiline } = this.props;\r\n\r\n    this._classNames = this._getClassNames();\r\n\r\n    return isMultiline ? this._renderMultiLine() : this._renderSingleLine();\r\n  }\r\n\r\n  private _getActionsDiv(): JSX.Element | null {\r\n    if (this.props.actions) {\r\n      return <div className={this._classNames.actions}>{this.props.actions}</div>;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _getDismissDiv(): JSX.Element | null {\r\n    if (this.props.onDismiss) {\r\n      return (\r\n        <IconButton\r\n          disabled={false}\r\n          className={this._classNames.dismissal}\r\n          onClick={this.props.onDismiss}\r\n          iconProps={{ iconName: 'Clear' }}\r\n          ariaLabel={this.props.dismissButtonAriaLabel}\r\n        />\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _getDismissSingleLine(): JSX.Element | null {\r\n    if (this.props.onDismiss) {\r\n      return <div className={this._classNames.dismissSingleLine}>{this._getDismissDiv()}</div>;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _getExpandSingleLine(): JSX.Element | null {\r\n    if (!this.props.actions && this.props.truncated) {\r\n      return (\r\n        <div className={this._classNames.expandSingleLine}>\r\n          <IconButton\r\n            disabled={false}\r\n            className={this._classNames.expand}\r\n            onClick={this._onClick}\r\n            iconProps={{ iconName: this.state.expandSingleLine ? 'DoubleChevronUp' : 'DoubleChevronDown' }}\r\n            ariaLabel={this.props.overflowButtonAriaLabel}\r\n            aria-expanded={this.state.expandSingleLine}\r\n            aria-controls={this.state.labelId}\r\n          />\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  private _getIconSpan(): JSX.Element {\r\n    return (\r\n      <div className={this._classNames.iconContainer}>\r\n        <Icon iconName={this.ICON_MAP[this.props.messageBarType!]} className={this._classNames.icon} />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderMultiLine(): React.ReactElement<React.HTMLAttributes<HTMLAreaElement>> {\r\n    const { theme } = this.props;\r\n    return (\r\n      <div style={{ background: theme!.semanticColors.bodyBackground }}>\r\n        <div className={this._classNames.root}>\r\n          <div className={this._classNames.content}>\r\n            {this._getIconSpan()}\r\n            {this._renderInnerText()}\r\n            {this._getDismissDiv()}\r\n          </div>\r\n          {this._getActionsDiv()}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderSingleLine(): React.ReactElement<React.HTMLAttributes<HTMLAreaElement>> {\r\n    const { theme } = this.props;\r\n    return (\r\n      <div style={{ background: theme!.semanticColors.bodyBackground }}>\r\n        <div className={this._classNames.root}>\r\n          <div className={this._classNames.content}>\r\n            {this._getIconSpan()}\r\n            {this._renderInnerText()}\r\n            {this._getExpandSingleLine()}\r\n            {this._getActionsDiv()}\r\n            {this._getDismissSingleLine()}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _renderInnerText(): JSX.Element {\r\n    const nativeProps = getNativeProps(this.props, htmlElementProperties, ['className']);\r\n\r\n    return (\r\n      <div className={this._classNames.text} id={this.state.labelId}>\r\n        <span className={this._classNames.innerText} role=\"status\" aria-live={this._getAnnouncementPriority()} {...nativeProps}>\r\n          <DelayedRender>\r\n            <span>{this.props.children}</span>\r\n          </DelayedRender>\r\n        </span>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private _getClassNames(): { [key in keyof IMessageBarStyles]: string } {\r\n    const { theme, className, messageBarType, onDismiss, actions, truncated, isMultiline } = this.props;\r\n    const { expandSingleLine } = this.state;\r\n\r\n    return getClassNames(this.props.styles!, {\r\n      theme: theme!,\r\n      messageBarType: messageBarType || MessageBarType.info,\r\n      onDismiss: onDismiss !== undefined,\r\n      actions: actions !== undefined,\r\n      truncated: truncated,\r\n      isMultiline: isMultiline,\r\n      expandSingleLine: expandSingleLine,\r\n      className\r\n    });\r\n  }\r\n\r\n  private _getAnnouncementPriority(): 'assertive' | 'polite' {\r\n    switch (this.props.messageBarType) {\r\n      case MessageBarType.blocked:\r\n      case MessageBarType.error:\r\n      case MessageBarType.severeWarning:\r\n        return 'assertive';\r\n    }\r\n    return 'polite';\r\n  }\r\n\r\n  private _onClick = (ev: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {\r\n    this.setState({ expandSingleLine: !this.state.expandSingleLine });\r\n  };\r\n}\r\n","import {\r\n  IStyle,\r\n  IPalette,\r\n  ISemanticColors,\r\n  HighContrastSelector,\r\n  ScreenWidthMaxSmall,\r\n  getScreenSelector,\r\n  getFocusStyle,\r\n  getGlobalClassNames\r\n} from '../../Styling';\r\nimport { IMessageBarStyleProps, IMessageBarStyles, MessageBarType } from './MessageBar.types';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-MessageBar',\r\n  error: 'ms-MessageBar--error',\r\n  blocked: 'ms-MessageBar--blocked',\r\n  severeWarning: 'ms-MessageBar--severeWarning',\r\n  success: 'ms-MessageBar--success',\r\n  warning: 'ms-MessageBar--warning',\r\n  multiline: 'ms-MessageBar-multiline',\r\n  singleline: 'ms-MessageBar-singleline',\r\n  dismissalSingleLine: 'ms-MessageBar-dismissalSingleLine',\r\n  expandingSingleLine: 'ms-MessageBar-expandingSingleLine',\r\n  content: 'ms-MessageBar-content',\r\n  iconContainer: 'ms-MessageBar-icon',\r\n  text: 'ms-MessageBar-text',\r\n  innerText: 'ms-MessageBar-innerText',\r\n  dismissSingleLine: 'ms-MessageBar-dismissSingleLine',\r\n  expandSingleLine: 'ms-MessageBar-expandSingleLine',\r\n  dismissal: 'ms-MessageBar-dismissal',\r\n  expand: 'ms-MessageBar-expand',\r\n  actions: 'ms-MessageBar-actions',\r\n  actionsSingleline: 'ms-MessageBar-actionsSingleLine'\r\n};\r\n\r\n// Returns the background color of the MessageBar root element based on the type of MessageBar.\r\nconst getRootBackground = (messageBarType: MessageBarType | undefined, palette: IPalette, semanticColors: ISemanticColors): string => {\r\n  switch (messageBarType) {\r\n    case MessageBarType.error:\r\n    case MessageBarType.blocked:\r\n      return semanticColors.errorBackground;\r\n    case MessageBarType.severeWarning:\r\n      return semanticColors.blockingBackground;\r\n    case MessageBarType.success:\r\n      return semanticColors.successBackground;\r\n    case MessageBarType.warning:\r\n      return semanticColors.warningBackground;\r\n  }\r\n  return palette.neutralLighter;\r\n};\r\n\r\n// Returns the icon color based on the type of MessageBar.\r\nconst getIconColor = (messageBarType: MessageBarType | undefined, palette: IPalette, semanticColors: ISemanticColors): string => {\r\n  switch (messageBarType) {\r\n    case MessageBarType.error:\r\n    case MessageBarType.blocked:\r\n    case MessageBarType.severeWarning:\r\n      return semanticColors.errorText;\r\n    case MessageBarType.success:\r\n      return palette.green;\r\n    case MessageBarType.warning:\r\n      return semanticColors.warningText;\r\n  }\r\n  return palette.neutralSecondary;\r\n};\r\n\r\nexport const getStyles = (props: IMessageBarStyleProps): IMessageBarStyles => {\r\n  const { theme, className, messageBarType, onDismiss, actions, truncated, isMultiline, expandSingleLine } = props;\r\n  const { semanticColors, palette, fonts } = theme;\r\n\r\n  const SmallScreenSelector = getScreenSelector(0, ScreenWidthMaxSmall);\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const dismissalAndExpandIconStyle: IStyle = {\r\n    fontSize: 12,\r\n    height: 12,\r\n    lineHeight: '12px',\r\n    color: palette.neutralPrimary,\r\n    selectors: {\r\n      [HighContrastSelector]: {\r\n        MsHighContrastAdjust: 'none',\r\n        color: 'window'\r\n      }\r\n    }\r\n  };\r\n\r\n  const dismissalAndExpandSingleLineStyle: IStyle = {\r\n    display: 'flex',\r\n    selectors: {\r\n      '& .ms-Button-icon': dismissalAndExpandIconStyle\r\n    }\r\n  };\r\n\r\n  const dismissalAndExpandStyle: IStyle = {\r\n    flexShrink: 0,\r\n    margin: 8,\r\n    marginLeft: 0,\r\n    selectors: {\r\n      '& .ms-Button-icon': dismissalAndExpandIconStyle,\r\n      [SmallScreenSelector]: {\r\n        margin: '0px 0px 0px 8px'\r\n      }\r\n    }\r\n  };\r\n\r\n  const focusStyle = getFocusStyle(theme, 0, 'relative', undefined, palette.black);\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      theme.fonts.medium,\r\n      messageBarType === MessageBarType.error && classNames.error,\r\n      messageBarType === MessageBarType.blocked && classNames.blocked,\r\n      messageBarType === MessageBarType.severeWarning && classNames.severeWarning,\r\n      messageBarType === MessageBarType.success && classNames.success,\r\n      messageBarType === MessageBarType.warning && classNames.warning,\r\n      isMultiline ? classNames.multiline : classNames.singleline,\r\n      !isMultiline && onDismiss && classNames.dismissalSingleLine,\r\n      !isMultiline && truncated && classNames.expandingSingleLine,\r\n      {\r\n        background: getRootBackground(messageBarType, palette, semanticColors),\r\n        color: palette.neutralPrimary,\r\n        minHeight: 32,\r\n        width: '100%',\r\n        boxSizing: 'border-box',\r\n        display: 'flex',\r\n        wordBreak: 'break-word',\r\n        selectors: {\r\n          '& .ms-Link': {\r\n            color: palette.themeDark,\r\n            ...fonts.small\r\n          },\r\n          [HighContrastSelector]: {\r\n            background: 'windowText',\r\n            color: 'Window'\r\n          }\r\n        }\r\n      },\r\n      isMultiline && {\r\n        flexDirection: 'column'\r\n      },\r\n      !isMultiline && {\r\n        selectors: {\r\n          [SmallScreenSelector]: {\r\n            flexDirection: 'column'\r\n          }\r\n        }\r\n      },\r\n      truncated && {\r\n        flexDirection: 'column',\r\n        selectors: {\r\n          '& .ms-Button-icon': dismissalAndExpandIconStyle\r\n        }\r\n      },\r\n      className\r\n    ],\r\n    content: [\r\n      classNames.content,\r\n      {\r\n        display: 'flex',\r\n        lineHeight: 'normal',\r\n        width: '100%',\r\n        boxSizing: 'border-box'\r\n      },\r\n      !isMultiline && {\r\n        selectors: {\r\n          [SmallScreenSelector]: {\r\n            flexDirection: 'row'\r\n          }\r\n        }\r\n      },\r\n      (truncated || isMultiline) && {\r\n        flexDirection: 'row'\r\n      }\r\n    ],\r\n    iconContainer: [\r\n      classNames.iconContainer,\r\n      {\r\n        fontSize: 16,\r\n        minWidth: 16,\r\n        minHeight: 16,\r\n        display: 'flex',\r\n        color: palette.neutralSecondary,\r\n        flexShrink: 0,\r\n        margin: 16,\r\n        marginRight: 0,\r\n        selectors: {\r\n          [SmallScreenSelector]: {\r\n            margin: '8px 0px 8px 8px'\r\n          }\r\n        }\r\n      }\r\n    ],\r\n    icon: {\r\n      color: getIconColor(messageBarType, palette, semanticColors),\r\n      selectors: {\r\n        [HighContrastSelector]: {\r\n          MsHighContrastAdjust: 'none',\r\n          color: 'window'\r\n        }\r\n      }\r\n    },\r\n    text: [\r\n      classNames.text,\r\n      {\r\n        minWidth: 0,\r\n        display: 'flex',\r\n        flexGrow: 1,\r\n        margin: '16px 8px',\r\n        ...fonts.small,\r\n        selectors: {\r\n          [SmallScreenSelector]: {\r\n            margin: '8px 0px 8px 8px'\r\n          },\r\n          [HighContrastSelector]: {\r\n            MsHighContrastAdjust: 'none',\r\n            color: 'window'\r\n          }\r\n        }\r\n      },\r\n      !onDismiss && {\r\n        marginRight: 16,\r\n        selectors: {\r\n          [SmallScreenSelector]: {\r\n            marginRight: 8\r\n          }\r\n        }\r\n      },\r\n      isMultiline &&\r\n        actions && {\r\n          marginBottom: 8,\r\n          selectors: {\r\n            [SmallScreenSelector]: {\r\n              marginBottom: 0\r\n            }\r\n          }\r\n        },\r\n      !isMultiline &&\r\n        actions && {\r\n          selectors: {\r\n            [SmallScreenSelector]: {\r\n              marginBottom: 0\r\n            }\r\n          }\r\n        }\r\n    ],\r\n    innerText: [\r\n      classNames.innerText,\r\n      {\r\n        lineHeight: 16,\r\n        selectors: {\r\n          '& span': {\r\n            selectors: {\r\n              '& a': {\r\n                paddingLeft: 4\r\n              }\r\n            }\r\n          }\r\n        }\r\n      },\r\n      truncated && {\r\n        overflow: 'visible',\r\n        whiteSpace: 'pre-wrap'\r\n      },\r\n      !isMultiline && {\r\n        overflow: 'hidden',\r\n        textOverflow: 'ellipsis',\r\n        whiteSpace: 'nowrap'\r\n      },\r\n      !isMultiline &&\r\n        !truncated && {\r\n          selectors: {\r\n            [SmallScreenSelector]: {\r\n              overflow: 'visible',\r\n              whiteSpace: 'pre-wrap'\r\n            }\r\n          }\r\n        },\r\n      expandSingleLine && {\r\n        overflow: 'visible',\r\n        whiteSpace: 'pre-wrap'\r\n      }\r\n    ],\r\n    dismissSingleLine: [classNames.dismissSingleLine, dismissalAndExpandSingleLineStyle],\r\n    expandSingleLine: [classNames.expandSingleLine, dismissalAndExpandSingleLineStyle],\r\n    dismissal: [classNames.dismissal, dismissalAndExpandStyle, focusStyle],\r\n    expand: [classNames.expand, dismissalAndExpandStyle, focusStyle],\r\n    actions: [\r\n      isMultiline ? classNames.actions : classNames.actionsSingleline,\r\n      {\r\n        display: 'flex',\r\n        flexGrow: 0,\r\n        flexShrink: 0,\r\n        flexBasis: 'auto',\r\n        flexDirection: 'row-reverse',\r\n        alignItems: 'center',\r\n        margin: '8px 8px 8px 0',\r\n        selectors: {\r\n          '& button:nth-child(n+2)': {\r\n            marginLeft: 8\r\n          }\r\n        }\r\n      },\r\n      isMultiline && {\r\n        margin: '0px 12px 12px 0',\r\n        selectors: {\r\n          '& button:nth-child(n+2)': {\r\n            marginLeft: 12\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import { styled } from '../../Utilities';\r\nimport { MessageBarBase } from './MessageBar.base';\r\nimport { getStyles } from './MessageBar.styles';\r\nimport { IMessageBarProps, IMessageBarStyleProps, IMessageBarStyles } from './MessageBar.types';\r\n\r\nexport const MessageBar: React.StatelessComponent<IMessageBarProps> = styled<IMessageBarProps, IMessageBarStyleProps, IMessageBarStyles>(\r\n  MessageBarBase,\r\n  getStyles,\r\n  undefined,\r\n  {\r\n    scope: 'MessageBar'\r\n  }\r\n);\r\n","import { ITheme, IStyle } from 'office-ui-fabric-react/lib/Styling';\r\n\r\nimport { IStyleFunctionOrObject } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nexport interface ITemplateAdminFormProps {\r\n  id?: string;\r\n  styles?: IStyleFunctionOrObject<ITemplateAdminFormStyleProps, ITemplateAdminFormStyles>;\r\n  theme?: ITheme;\r\n  className?: string;\r\n  baseUrl: string;\r\n  useName?: boolean;\r\n  titleOnPanels?: boolean;\r\n  labelTitleNew?: string;\r\n  labelTitleEdit?: string;\r\n  allowDisplayProperties?: boolean;\r\n  allowMenus?: boolean;  \r\n  labelFormTemplateName?: string;\r\n  labelDialogTitleDelete?: string;\r\n  labelDialogSubtextPrefixDelete?: string;\r\n  labelDialogSubtextSuffixDelete?: string;\r\n  labelDialogBtnDelete?: string;\r\n  labelDialogBtnCancel?: string;\r\n  labelPanelSettingsPropertyTitle?: string;\r\n  labelPanelSettingsOperatorsTitle?: string;\r\n  labelPanelSettingsBtnUseAll?: string;\r\n  labelPanelSettingsBtnUseSelected?: string;\r\n  labelPanelSettingsEquals?: string;\r\n  labelPanelSettingsStartsWith?: string;\r\n  labelPanelSettingsContains?: string;\r\n  labelPanelSettingsIsEmpty?: string;\r\n  labelPanelSettingsGreaterThan?: string;\r\n  labelPanelSettingsLessThan?: string;\r\n  labelPanelSettingsWithin?: string;\r\n  labelPanelSettingsIncludes?: string;\r\n  labelDialogTitleReset?: string;\r\n  labelDialogSubtextReset?: string;\r\n  labelDialogBtnReset?: string;\r\n  labelPanelDisplayPropertiesTitle?: string;\r\n  labelPanelAddPropertiesTitle?: string;\r\n  labelPanelMenusTitle?: string;\r\n  labelPanelAddBtnAdd?: string;\r\n  labelPanelAddBtnCancel?: string;\r\n  labelIconOperatorDelete?: string;\r\n  labelIconOperatorSetting?: string;\r\n  labelIconOperatorUp?: string;\r\n  labelIconOperatorDown?: string;\r\n  labelCmdBarBtnSave?: string;\r\n  labelCmdBarBtnEdit?: string;\r\n  labelCmdBarBtnCancel?: string;\r\n  labelCmdBarFarBtnAdd?: string;\r\n  labelCmdBarFarBtnReset?: string;\r\n  labelCmdBarFarBtnResults?: string;\r\n  labelMovListAvailable?: string;\r\n  labelMovListSelected?: string;\r\n  labelFormFieldset?: string;\r\n  labelMenuRemoveSelection?:string;\r\n  labelDialogTitleConfirmMainChange?:string;\r\n  labelDialogSubtextConfirmMainChange?:string;\r\n  labelDialogBtnConfirmMainChange?:string;\r\n  labelMainValidationMessage?: string;\r\n  labelPropertiesValidationMessage?: string;  \r\n  labelDisplayPropertiesValidationMessage?: string;  \r\n  getDynamicTranslation?: (key: string) => string;\r\n  getPropertiesDetailsUrl?: () => string;\r\n  onCancel: () => any;\r\n  onSubmitSuccess: (response: any) => void;\r\n  onSubmitError: (error: any) => void;\r\n}\r\n\r\nexport interface ITemplateAdminFormStyleProps {\r\n  theme: ITheme;\r\n  className?: string;\r\n}\r\n\r\nexport interface ITemplateAdminFormStyles {\r\n  root?: IStyle;\r\n}\r\n\r\nexport interface IFieldValue {\r\n  id: any;\r\n  value: string;  \r\n  selected?: boolean;\r\n}\r\n\r\nexport interface ITemplateAdminMainRow {\r\n  id: number;\r\n  name: string;\r\n  values: IFieldValue[];\r\n}\r\n\r\nexport interface ITemplateAdminPropertiesRow {\r\n  id: number;\r\n  name: string;\r\n  isSystemField: boolean;\r\n  selectedOperation: number;\r\n  values: IFieldValue[];\r\n  propertyType: any;\r\n  operations: any[];\r\n}\r\n\r\nexport interface ITemplateAdminFormObject {\r\n  id: string;\r\n  name: string;\r\n  main: Map<number, ITemplateAdminMainRow>;\r\n  properties: Map<number, ITemplateAdminPropertiesRow>;\r\n  displayProperties: any[];\r\n  menuId: string;\r\n}\r\n\r\nexport const OperatorsSettingsTypeEnum = {\r\n  USE_ALL: 'A',\r\n  USE_SELECTED: 'US'\r\n};\r\n\r\nexport enum FormModeEnum {\r\n  NEW,\r\n  EDIT\r\n}\r\n","import * as React from 'react';\r\n\r\nimport Axios from 'axios';\r\n\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nimport { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel';\r\nimport { ChoiceGroup, IChoiceGroupOption } from 'office-ui-fabric-react/lib/ChoiceGroup';\r\nimport { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nimport { SelectionMode, Selection } from 'office-ui-fabric-react/lib/DetailsList';\r\nimport { ActionButton, DefaultButton, PrimaryButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport update from 'immutability-helper';\r\nimport { List } from '../List';\r\nimport { MovableOptionsList, IMovableOptionsListElement } from '../MovableOptionsList';\r\nimport { Title } from '../Title';\r\nimport { FieldTypeEnum } from '../../Utils/Utils.types';\r\nimport { cloneMap, deepClone } from '../../Utils/Utils';\r\nimport { MessageBar, MessageBarType } from 'office-ui-fabric-react/lib/MessageBar';\r\n\r\nimport './TemplateAdminForm.css';\r\n\r\nimport {\r\n  ITemplateAdminFormProps,\r\n  ITemplateAdminFormStyleProps,\r\n  ITemplateAdminFormStyles,\r\n  OperatorsSettingsTypeEnum,\r\n  ITemplateAdminMainRow,\r\n  ITemplateAdminPropertiesRow,\r\n  ITemplateAdminFormObject,\r\n  IFieldValue,\r\n  FormModeEnum\r\n} from './TemplateAdminForm.types';\r\nimport { Stack } from 'office-ui-fabric-react';\r\n\r\nconst getClassNames = classNamesFunction<ITemplateAdminFormStyleProps, ITemplateAdminFormStyles>();\r\n\r\nexport interface IInitialState {\r\n  name: string;\r\n  main: any[];\r\n  properties: any[];\r\n  displayProperties: IMovableOptionsListElement[];\r\n  movableMainValues: Map<number, IMovableOptionsListElement[]>;\r\n  fieldProperties: IDropdownOption[];\r\n  operatorsProperties: Map<number, IDropdownOption[]>;\r\n  hideConfirmMainChange: boolean;\r\n}\r\n\r\nexport interface ITemplateAdminFormState {\r\n  id: string;\r\n  name: string;\r\n  main: any[];\r\n  properties: any[];\r\n  propertiesTemp: any[];\r\n  showSettingsPanel: boolean[];\r\n  showMovablePanel: boolean[];\r\n  displayPropertiesPanel: boolean;\r\n  menusPanel: boolean;\r\n  addPropertiesPanel: boolean;\r\n  settingsOperators: Map<number, boolean[]>;\r\n  settingsOperatorsPropertyType: Map<number, any>;\r\n  settingsOperatorsSelectionType: string[];\r\n  displayProperties: IMovableOptionsListElement[];\r\n  movableMainValues: Map<number, IMovableOptionsListElement[]>;\r\n  error: any;\r\n  hideDeleteDialogs: boolean[];\r\n  hideResetDialog: boolean;\r\n  previewItems: any[];\r\n  previewLabel: string | undefined;\r\n  fieldProperties: IDropdownOption[];\r\n  operatorsProperties: Map<number, IDropdownOption[]>;\r\n  hideConfirmMainChange: boolean;\r\n  validateMainFieldsError: string | undefined;\r\n  validatePropertiesFieldsError: boolean;\r\n  validateDisplayPropertiesError: boolean;\r\n}\r\n\r\nexport interface IMainLastState {\r\n  main: any;\r\n  rows: Map<number, ITemplateAdminMainRow>;\r\n  movableMainValues: Map<number, IMovableOptionsListElement[]>;\r\n}\r\n\r\nexport class TemplateAdminFormBase extends React.PureComponent<ITemplateAdminFormProps, ITemplateAdminFormState> {\r\n  public static defaultProps = {\r\n    useName: false,\r\n    allowDisplayProperties: true,\r\n    allowMenus: true,\r\n    labelTitleNew: 'Create New Template',\r\n    labelTitleEdit: 'Edit Template',\r\n    labelFormTemplateName: 'Template Name',\r\n    labelDialogTitleDelete: 'Delete',\r\n    labelDialogSubtextPrefixDelete: 'This action will Delete the Property',\r\n    labelDialogSubtextSuffixDelete: 'from the Template. Are you sure you want to proceed?',\r\n    labelDialogBtnDelete: 'Delete',\r\n    labelDialogBtnCancel: 'Cancel',\r\n    labelPanelSettingsPropertyTitle: 'Property Is',\r\n    labelPanelSettingsOperatorsTitle: 'Operators',\r\n    labelPanelSettingsBtnUseAll: 'Use All',\r\n    labelPanelSettingsBtnUseSelected: 'Use Selected',\r\n    labelPanelSettingsEquals: 'Equals',\r\n    labelPanelSettingsStartsWith: 'Starts With',\r\n    labelPanelSettingsContains: 'Contains',\r\n    labelPanelSettingsIsEmpty: 'Is Empty',\r\n    labelPanelSettingsGreaterThan: 'Greater Than',\r\n    labelPanelSettingsLessThan: 'Less Than',\r\n    labelPanelSettingsWithin: 'Within',\r\n    labelPanelSettingsIncludes: 'Includes',\r\n    labelDialogTitleReset: 'Reset',\r\n    labelDialogSubtextReset: 'This action will reset the Form to its Initial values. Are you sure you want to proceed?',\r\n    labelDialogBtnReset: 'Reset',\r\n    labelPanelDisplayPropertiesTitle: 'Display Properties',\r\n    labelPanelAddPropertiesTitle: 'Add Properties',\r\n    labelPanelMenusTitle: 'Add Menu',\r\n    labelPanelAddBtnAdd: 'Add',\r\n    labelPanelAddBtnCancel: 'Cancel',\r\n    labelIconOperatorDelete: ' Delete',\r\n    labelIconOperatorSetting: ' Settings',\r\n    labelIconOperatorUp: ' Up',\r\n    labelIconOperatorDown: ' Down',\r\n    labelCmdBarBtnSave: 'Save',\r\n    labelCmdBarBtnEdit: 'Edit',\r\n    labelCmdBarBtnCancel: 'Cancel',\r\n    labelCmdBarFarBtnAdd: 'Add Property',\r\n    labelCmdBarFarBtnReset: 'Reset',\r\n    labelCmdBarFarBtnResults: 'Display results',\r\n    labelMovListAvailable: 'Available',\r\n    labelMovListSelected: 'Selected',\r\n    labelFormFieldset: 'Selected Menu Preview',\r\n    labelMenuRemoveSelection: 'Remove Menu',\r\n    labelDialogTitleConfirmMainChange: 'Please confirm change!',\r\n    labelDialogSubtextConfirmMainChange: 'This change will reset the Properties Data. Are you sure you want to proceed?',\r\n    labelDialogBtnConfirmMainChange: 'Confirm',\r\n    labelMainValidationMessage: 'The following fields are required: ',\r\n    labelPropertiesValidationMessage: 'There are no Properties defined.',\r\n    labelDisplayPropertiesValidationMessage: 'No Display Property has been selected.'\r\n  };\r\n  private mode: FormModeEnum;\r\n  private initialState: IInitialState = {\r\n    name: '',\r\n    main: [],\r\n    properties: [],\r\n    displayProperties: [],\r\n    fieldProperties: [],\r\n    operatorsProperties: new Map<number, IDropdownOption[]>(),\r\n    movableMainValues: new Map<number, IMovableOptionsListElement[]>(),\r\n    hideConfirmMainChange: true\r\n  };\r\n  private result: ITemplateAdminFormObject = {\r\n    id: '',\r\n    name: '',\r\n    main: new Map<number, ITemplateAdminMainRow>(),\r\n    properties: new Map<number, ITemplateAdminPropertiesRow>(),\r\n    displayProperties: [],\r\n    menuId: ''\r\n  };\r\n  private emptyState: ITemplateAdminFormState;\r\n\r\n  private selection: Selection;\r\n\r\n  private menusSelection: Selection;\r\n\r\n  private url: string;\r\n\r\n  private canLoadDisplayProperties: boolean = true;\r\n\r\n  private canResetMovableResult: boolean = true;\r\n\r\n  private delayedTimeout = 10000;\r\n\r\n  private lastMainState: IMainLastState = {\r\n    main: undefined,\r\n    rows: new Map<number, ITemplateAdminMainRow>(),\r\n    movableMainValues: new Map<number, IMovableOptionsListElement[]>()\r\n  };\r\n\r\n  constructor(props: ITemplateAdminFormProps) {\r\n    super(props);\r\n\r\n    const { id } = this.props;\r\n    const idValue = id ? id : '';\r\n\r\n    this.mode = id ? FormModeEnum.EDIT : FormModeEnum.NEW;\r\n    this.url = `${this.props.baseUrl}/templates`;\r\n\r\n    this.emptyState = {\r\n      id: idValue,\r\n      name: '',\r\n      main: [],\r\n      properties: [],\r\n      propertiesTemp: [],\r\n      showSettingsPanel: [],\r\n      showMovablePanel: [],\r\n      displayPropertiesPanel: false,\r\n      addPropertiesPanel: false,\r\n      menusPanel: false,\r\n      settingsOperators: new Map<number, boolean[]>(),\r\n      settingsOperatorsPropertyType: new Map<number, number>(),\r\n      settingsOperatorsSelectionType: [],\r\n      displayProperties: [],\r\n      movableMainValues: new Map<number, IMovableOptionsListElement[]>(),\r\n      error: undefined,\r\n      hideDeleteDialogs: [],\r\n      hideResetDialog: true,\r\n      previewItems: [],\r\n      previewLabel: this.props.labelFormFieldset,\r\n      fieldProperties: [],\r\n      operatorsProperties: new Map<number, IDropdownOption[]>(),\r\n      hideConfirmMainChange: true,\r\n      validateMainFieldsError: undefined,\r\n      validatePropertiesFieldsError: false,\r\n      validateDisplayPropertiesError: false\r\n    };\r\n\r\n    this.state = this.emptyState;\r\n\r\n    this.removeProperty = this.removeProperty.bind(this);\r\n    this.onShowSettingsPanel = this.onShowSettingsPanel.bind(this);\r\n    this.onChangeSettingsOperators = this.onChangeSettingsOperators.bind(this);\r\n    this.isSettingsOperatorChecked = this.isSettingsOperatorChecked.bind(this);\r\n    this.onChangeSettingsOperatorType = this.onChangeSettingsOperatorType.bind(this);\r\n    this.onChangePropertyType = this.onChangePropertyType.bind(this);\r\n    this.getFormCommandBarItems = this.getFormCommandBarItems.bind(this);\r\n    this.onShowAddPropertiesPanel = this.onShowAddPropertiesPanel.bind(this);\r\n    this.onShowMenusPanel = this.onShowMenusPanel.bind(this);\r\n    this.onDisplayPropertiesSelectionChanged = this.onDisplayPropertiesSelectionChanged.bind(this);\r\n    this.onAddProperties = this.onAddProperties.bind(this);\r\n    this.reset = this.reset.bind(this);\r\n    this.componentDidMountInEditMode = this.componentDidMountInEditMode.bind(this);\r\n    this.componentDidMountInNewMode = this.componentDidMountInNewMode.bind(this);\r\n    this.getPropertiesUrl = this.getPropertiesUrl.bind(this);\r\n    this.getMenusUrl = this.getMenusUrl.bind(this);\r\n    this.onSubmit = this.onSubmit.bind(this);\r\n    this.showResetDialog = this.showResetDialog.bind(this);\r\n    this.closeResetDialog = this.closeResetDialog.bind(this);\r\n    this.onDismissMovablePanel = this.onDismissMovablePanel.bind(this);\r\n    this.onShowMovablePanel = this.onShowMovablePanel.bind(this);\r\n    this.updateChildMainField = this.updateChildMainField.bind(this);\r\n    this.populatePreviewItems = this.populatePreviewItems.bind(this);\r\n    this.setResultPropertiesValues = this.setResultPropertiesValues.bind(this);\r\n    this.getFieldTypeForProperty = this.getFieldTypeForProperty.bind(this);\r\n    this.getOperationsForProperty = this.getOperationsForProperty.bind(this);\r\n    this.getDynamicTranslationInternal = this.getDynamicTranslationInternal.bind(this);\r\n    this.getElementOperatorProperties = this.getElementOperatorProperties.bind(this);\r\n    this.resetValuesDueToMainchange = this.resetValuesDueToMainchange.bind(this);\r\n    this.openConfirmMainChange = this.openConfirmMainChange.bind(this);\r\n    this.restoreLastMainState = this.restoreLastMainState.bind(this);\r\n\r\n    this.selection = new Selection({\r\n      onSelectionChanged: () => {\r\n        this.onDisplayPropertiesSelectionChanged(this.selection.getSelection());\r\n      }\r\n    });\r\n\r\n    this.menusSelection = new Selection({\r\n      onSelectionChanged: () => {\r\n        this.onMenusSelectionChanged(this.menusSelection.getSelection());\r\n      }\r\n    });\r\n  }\r\n\r\n  public componentDidMount() {\r\n    this.init();\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: ITemplateAdminFormProps) {\r\n    if (this.props.id !== prevProps.id) {\r\n      this.init();\r\n    }\r\n  }\r\n\r\n  private init() {\r\n    if (this.mode === FormModeEnum.EDIT) {\r\n      this.componentDidMountInEditMode();\r\n    } else {\r\n      this.componentDidMountInNewMode();\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { id, className, styles, theme, titleOnPanels } = this.props;\r\n    const {\r\n      useName,\r\n      labelTitleNew,\r\n      labelTitleEdit,\r\n      labelFormTemplateName,\r\n      labelDialogTitleDelete,\r\n      labelDialogSubtextPrefixDelete,\r\n      labelDialogSubtextSuffixDelete,\r\n      labelDialogBtnDelete,\r\n      labelDialogBtnCancel,\r\n      labelPanelSettingsPropertyTitle,\r\n      labelPanelSettingsOperatorsTitle,\r\n      labelPanelSettingsBtnUseAll,\r\n      labelPanelSettingsBtnUseSelected,\r\n      labelDialogTitleReset,\r\n      labelDialogSubtextReset,\r\n      labelDialogBtnReset,\r\n      labelPanelDisplayPropertiesTitle,\r\n      labelPanelAddPropertiesTitle,\r\n      labelPanelMenusTitle,\r\n      labelPanelAddBtnAdd,\r\n      labelPanelAddBtnCancel,\r\n      labelMovListAvailable,\r\n      labelMovListSelected,\r\n      labelMenuRemoveSelection,\r\n      labelDialogTitleConfirmMainChange,\r\n      labelDialogSubtextConfirmMainChange,\r\n      labelDialogBtnConfirmMainChange,\r\n      labelMainValidationMessage,\r\n      labelPropertiesValidationMessage,\r\n      labelDisplayPropertiesValidationMessage\r\n    } = this.props;\r\n    const {\r\n      name,\r\n      main,\r\n      properties,\r\n      showSettingsPanel,\r\n      showMovablePanel,\r\n      settingsOperatorsPropertyType,\r\n      settingsOperatorsSelectionType,\r\n      displayPropertiesPanel,\r\n      addPropertiesPanel,\r\n      menusPanel,\r\n      displayProperties,\r\n      movableMainValues,\r\n      previewItems,\r\n      previewLabel,\r\n      fieldProperties,\r\n      validateMainFieldsError,\r\n      validatePropertiesFieldsError,\r\n      validateDisplayPropertiesError\r\n    } = this.state;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n    const title = id ? `${labelTitleEdit} ${name}` : labelTitleNew;\r\n    const propertiesLength = properties.length;\r\n\r\n    let propertiesIdx = 0;\r\n\r\n    return (\r\n      <Fabric className={`ms-Grid ${classNames.root}`}>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm12\">\r\n            <CommandBar farItems={this.getFormCommandBarFarItems()} items={this.getFormCommandBarItems(id)} />\r\n          </div>\r\n        </div>\r\n        <div className=\"ms-Grid-row tpl-a-f-nl-sm\">\r\n          <div className=\"ms-Grid-col ms-sm12\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm12\">\r\n            <Title title={title ? title : ''} icon={true} />\r\n          </div>\r\n        </div>\r\n        {validateMainFieldsError && (\r\n          <div className=\"ms-Grid-row\" style={{ marginTop: '5px', marginBottom: '5px' }}>\r\n            <div className=\"ms-Grid-col ms-sm12\">\r\n              <MessageBar\r\n                messageBarType={MessageBarType.error}\r\n                isMultiline={false}\r\n                onDismiss={this.closeMainFieldsMessage}\r\n                dismissButtonAriaLabel=\"Close\"\r\n              >\r\n                {labelMainValidationMessage} {validateMainFieldsError}\r\n              </MessageBar>\r\n            </div>\r\n          </div>\r\n        )}\r\n        {validatePropertiesFieldsError && (\r\n          <div className=\"ms-Grid-row\" style={{ marginTop: '5px', marginBottom: '5px' }}>\r\n            <div className=\"ms-Grid-col ms-sm12\">\r\n              <MessageBar\r\n                messageBarType={MessageBarType.error}\r\n                isMultiline={false}\r\n                onDismiss={this.closePropertiesFieldsMessage}\r\n                dismissButtonAriaLabel=\"Close\"\r\n              >\r\n                {labelPropertiesValidationMessage}\r\n              </MessageBar>\r\n            </div>\r\n          </div>\r\n        )}\r\n        {validateDisplayPropertiesError && (\r\n          <div className=\"ms-Grid-row\" style={{ marginTop: '5px', marginBottom: '5px' }}>\r\n            <div className=\"ms-Grid-col ms-sm12\">\r\n              <MessageBar\r\n                messageBarType={MessageBarType.error}\r\n                isMultiline={false}\r\n                onDismiss={this.closeDisplayPropertiesMessage}\r\n                dismissButtonAriaLabel=\"Close\"\r\n              >\r\n                {labelDisplayPropertiesValidationMessage}\r\n              </MessageBar>\r\n            </div>\r\n          </div>\r\n        )}\r\n        {useName && (\r\n          <div className=\"ms-Grid-row\">\r\n            <div className=\"ms-Grid-col ms-sm12\">\r\n              <TextField\r\n                key=\"TemplateName\"\r\n                value={name}\r\n                label={labelFormTemplateName}\r\n                required\r\n                onBlur={e => {\r\n                  this.result.name = e.target.value;\r\n                  this.setState({ name: this.result.name });\r\n                }}\r\n              />\r\n            </div>\r\n          </div>\r\n        )}\r\n        {main.map(element => {\r\n          let field = undefined;\r\n          const rowKey = `MainRow_${element.id}`;\r\n          const movablePanelKey = `MovablePanel_${element.id}`;\r\n          const label = this.getDynamicTranslationInternal(element.name);\r\n          const movableElements = movableMainValues.get(element.id)\r\n            ? (movableMainValues.get(element.id) as IMovableOptionsListElement[])\r\n            : element.values;\r\n          const lastMovableElementsState = deepClone(movableElements);\r\n\r\n          switch (element.field) {\r\n            case FieldTypeEnum.INPUT: {\r\n              const key = `MainTextField_${element.id}`;\r\n              field = (\r\n                <TextField\r\n                  key={key}\r\n                  onBlur={e => this.handleMainTextInput(e, element)}\r\n                  value={this.getSafeValue(element.values)}\r\n                  label={label}\r\n                  required={element.required}\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.LOOKUP: {\r\n              const key = `MainDropdown_${element.id}`;\r\n              field = (\r\n                <Dropdown\r\n                  multiSelect\r\n                  key={key}\r\n                  options={element.values}\r\n                  selectedKeys={this.getSelectedKeys(element.values)}\r\n                  label={label}\r\n                  required={element.required}\r\n                  onChange={(event, option?: IDropdownOption) => this.onMainChangeValues(event, element, option)}\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.PICKUP: {\r\n              const key = `MainPickup_${element.id}`;\r\n              field = (\r\n                <Dropdown\r\n                  key={key}\r\n                  options={element.values}\r\n                  selectedKey={this.getSelectedKey(element.values)}\r\n                  label={label}\r\n                  required={element.required}\r\n                  onChange={(event, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                    this.onMainChangeValuesPickup(event, element, option)\r\n                  }\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.DATEPICKER: {\r\n              const key = `MainDatePicker_${element.id}`;\r\n              field = (\r\n                <DatePicker\r\n                  key={key}\r\n                  label={label}\r\n                  onSelectDate={(date: Date | null | undefined) => this.handleMainDateInput(date, element)}\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.MOVABLE: {\r\n              const key = `MainMovable_${element.id}`;\r\n\r\n              const value = this.getArrayAsString(movableElements);\r\n\r\n              field = (\r\n                <TextField\r\n                  readOnly\r\n                  key={key}\r\n                  value={value}\r\n                  label={label}\r\n                  required={element.required}\r\n                  onClick={() => this.onShowMovablePanel(element, lastMovableElementsState)}\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            default: {\r\n              break;\r\n            }\r\n          }\r\n          return (\r\n            <div className=\"ms-Grid-row\" key={rowKey}>\r\n              <div className=\"ms-Grid-col ms-sm12\">{field}</div>\r\n              <div className=\"ms-Grid-row tpl-a-f-nl-md\">\r\n                <div className=\"ms-Grid-col ms-sm12\">\r\n                  {!this.state.hideConfirmMainChange && (\r\n                    <Dialog\r\n                      hidden={this.state.hideConfirmMainChange}\r\n                      onDismiss={() => this.restoreLastMainState()}\r\n                      dialogContentProps={{\r\n                        type: DialogType.normal,\r\n                        title: `${labelDialogTitleConfirmMainChange}`,\r\n                        subText: `${labelDialogSubtextConfirmMainChange}`\r\n                      }}\r\n                      modalProps={{\r\n                        titleAriaId: `confirmMainChangeLabelId`,\r\n                        subtitleAriaId: `confirmMainChangeSubTextId`,\r\n                        isBlocking: true,\r\n                        containerClassName: 'ms-dialogMainOverride'\r\n                      }}\r\n                    >\r\n                      <DialogFooter>\r\n                        <PrimaryButton onClick={() => this.resetValuesDueToMainchange()} text={labelDialogBtnConfirmMainChange} />\r\n                        <DefaultButton onClick={() => this.restoreLastMainState()} text={labelDialogBtnCancel} />\r\n                      </DialogFooter>\r\n                    </Dialog>\r\n                  )}\r\n                  {showMovablePanel[element.id] && (\r\n                    <Panel\r\n                      key={movablePanelKey}\r\n                      isOpen={showMovablePanel[element.id]}\r\n                      type={PanelType.medium}\r\n                      onDismiss={() => this.onDismissMovablePanel(element, lastMovableElementsState)}\r\n                      closeButtonAriaLabel=\"Close\"\r\n                      headerText={titleOnPanels ? '' : element.name}\r\n                    >\r\n                      <div className=\"ms-Grid\">\r\n                        <div className=\"ms-Grid-row\">\r\n                          <div className=\"ms-Grid-col ms-sm12\" style={{ height: '500px' }}>\r\n                            {titleOnPanels && (\r\n                              <MovableOptionsList\r\n                                elements={movableElements}\r\n                                height={'350px'}\r\n                                title={element.name}\r\n                                disableUpAndDown={true}\r\n                                availableLabel={labelMovListAvailable}\r\n                                selectedLabel={labelMovListSelected}\r\n                              />\r\n                            )}\r\n                            {!titleOnPanels && (\r\n                              <MovableOptionsList\r\n                                elements={\r\n                                  movableMainValues.get(element.id)\r\n                                    ? (movableMainValues.get(element.id) as IMovableOptionsListElement[])\r\n                                    : element.values\r\n                                }\r\n                                height={'350px'}\r\n                                disableUpAndDown={true}\r\n                              />\r\n                            )}\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    </Panel>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          );\r\n        })}\r\n        <div className=\"ms-Grid-row tpl-f-nl-sm\">\r\n          <div className=\"ms-Grid-col ms-sm12\" />\r\n        </div>\r\n        {properties.map(element => {\r\n          let field = undefined;\r\n          const rowKey = `PropertiesRow_${element.id}`;\r\n          const fieldName = element.name;\r\n          const operationsKey = `PropertiesDropdownOperations_${element.id}`;\r\n          const typesKey = `PropertiesDropdownTypes_${element.id}`;\r\n          const panelSettingsKey = `PropertiesPanelSettings_${element.id}`;\r\n          const panelSettingsTitle = `${element.name}`;\r\n          const operatorsChoiceGroupKey = `PropertieOperatorsChoiceGroup_${element.id}`;\r\n          const elementOperatorProperties: IDropdownOption[] = this.getElementOperatorProperties(element.id);\r\n\r\n          switch (element.field) {\r\n            case FieldTypeEnum.INPUT: {\r\n              const key = `PropertiesTextField_${element.id}`;\r\n              field = (\r\n                <TextField key={key} value={this.getSafeValue(element.values)} onBlur={e => this.handlePropertiesTextInput(e, element)} />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.LOOKUP: {\r\n              const key = `PropertiesDropdown_${element.id}`;\r\n              field = (\r\n                <Dropdown\r\n                  multiSelect\r\n                  key={key}\r\n                  options={element.values}\r\n                  onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                    this.onPropertiesChangeValues(event, element, option)\r\n                  }\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.PICKUP: {\r\n              const key = `PropertiesPickup_${element.id}`;\r\n              field = (\r\n                <Dropdown\r\n                  key={key}\r\n                  options={element.values}\r\n                  onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                    this.onPropertiesChangeValuesPickup(event, element, option)\r\n                  }\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            case FieldTypeEnum.DATEPICKER: {\r\n              const key = `PropertiesDatePicker_${element.id}`;\r\n              field = (\r\n                <DatePicker\r\n                  key={key}\r\n                  value={this.getSafeDateValue(element.values)}\r\n                  onSelectDate={(date: Date | null | undefined) => this.handlePropertiesDateInput(date, element)}\r\n                />\r\n              );\r\n              break;\r\n            }\r\n            default: {\r\n              break;\r\n            }\r\n          }\r\n          return (\r\n            <div key={rowKey} style={{ marginBottom: 10 }}>\r\n              <Stack horizontal verticalFill wrap horizontalAlign=\"space-between\" verticalAlign=\"center\">\r\n                <Stack.Item grow={1}>\r\n                  <Label className=\"ms-font-m-plus\">{fieldName}:</Label>\r\n                </Stack.Item>\r\n                <Stack.Item grow={0} styles={{ root: { minWidth: 160 } }}>\r\n                  <CommandBar\r\n                    items={this.getOperatorActionItems(element, propertiesIdx++, propertiesLength)}\r\n                    styles={{ root: { backgroundColor: '#fff', padding: 0 } }}\r\n                  />\r\n                </Stack.Item>\r\n              </Stack>\r\n              <Stack horizontal wrap tokens={{ childrenGap: 5 }}>\r\n                <Stack.Item grow={0} disableShrink styles={{ root: { width: 180 } }}>\r\n                  <Dropdown\r\n                    key={operationsKey}\r\n                    options={element.operations}\r\n                    onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption | undefined, index?: number | undefined) =>\r\n                      this.onChangePropertyOperation(event, element, option)\r\n                    }\r\n                  />\r\n                </Stack.Item>\r\n                <Stack.Item grow={2}>{field}</Stack.Item>\r\n              </Stack>\r\n\r\n              <div>\r\n                {!this.state.hideDeleteDialogs[element.id] && (\r\n                  <Dialog\r\n                    hidden={this.state.hideDeleteDialogs[element.id]}\r\n                    onDismiss={() => this.closeDeleteDialog(element.id)}\r\n                    dialogContentProps={{\r\n                      type: DialogType.normal,\r\n                      title: `${labelDialogTitleDelete} [${element.name}]`,\r\n                      subText: `${labelDialogSubtextPrefixDelete} [${element.name}] ${labelDialogSubtextSuffixDelete}`\r\n                    }}\r\n                    modalProps={{\r\n                      titleAriaId: `deletePropertyLabelId${element.id}`,\r\n                      subtitleAriaId: `deletePropertySubTextId${element.id}`,\r\n                      isBlocking: false,\r\n                      containerClassName: 'ms-dialogMainOverride'\r\n                    }}\r\n                  >\r\n                    <DialogFooter>\r\n                      <PrimaryButton onClick={() => this.removeProperty(element.id)} text={labelDialogBtnDelete} />\r\n                      <DefaultButton onClick={() => this.closeDeleteDialog(element.id)} text={labelDialogBtnCancel} />\r\n                    </DialogFooter>\r\n                  </Dialog>\r\n                )}\r\n                {showSettingsPanel[element.id] && (\r\n                  <Panel\r\n                    key={panelSettingsKey}\r\n                    isOpen={showSettingsPanel[element.id]}\r\n                    type={PanelType.smallFixedFar}\r\n                    onDismiss={() => this.onDismissSettingsPanel(element)}\r\n                    closeButtonAriaLabel=\"Close\"\r\n                    headerText={titleOnPanels ? '' : panelSettingsTitle}\r\n                  >\r\n                    <div className=\"ms-Grid\">\r\n                      {titleOnPanels && (\r\n                        <div className=\"ms-Grid-row\">\r\n                          <div className=\"ms-Grid-col ms-sm12\">\r\n                            <Title title={panelSettingsTitle} icon={true} />\r\n                          </div>\r\n                        </div>\r\n                      )}\r\n                      <div className=\"ms-Grid-row\">\r\n                        <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\">\r\n                          <Label className=\"ms-font-m-plus\">{labelPanelSettingsPropertyTitle}</Label>\r\n                        </div>\r\n                        <div className=\"ms-Grid-col ms-sm7 ms-md7 ms-lg7\">\r\n                          <Dropdown\r\n                            key={typesKey}\r\n                            options={fieldProperties}\r\n                            onChange={(event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption) =>\r\n                              this.onChangePropertyType(event, option, element)\r\n                            }\r\n                            selectedKey={String(settingsOperatorsPropertyType.get(element.id))}\r\n                          />\r\n                        </div>\r\n                      </div>\r\n                      <div className=\"ms-Grid-row tpl-a-f-nl-x-sm\">\r\n                        <div className=\"ms-Grid-col ms-sm12\" />\r\n                      </div>\r\n                      <div className=\"ms-Grid-row\">\r\n                        <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\">\r\n                          <Label className=\"ms-font-m-plus\">{labelPanelSettingsOperatorsTitle}</Label>\r\n                        </div>\r\n                        <div className=\"ms-Grid-col ms-sm7 ms-md7 ms-lg7\">\r\n                          <ChoiceGroup\r\n                            key={operatorsChoiceGroupKey}\r\n                            onChange={(\r\n                              ev?: React.FormEvent<HTMLElement | HTMLInputElement> | undefined,\r\n                              option?: IChoiceGroupOption | undefined\r\n                            ) => this.onChangeSettingsOperatorType(ev, option, element)}\r\n                            defaultSelectedKey={\r\n                              settingsOperatorsSelectionType[element.id]\r\n                                ? settingsOperatorsSelectionType[element.id]\r\n                                : OperatorsSettingsTypeEnum.USE_ALL\r\n                            }\r\n                            options={[\r\n                              {\r\n                                key: OperatorsSettingsTypeEnum.USE_ALL,\r\n                                text: labelPanelSettingsBtnUseAll ? labelPanelSettingsBtnUseAll : ''\r\n                              },\r\n                              {\r\n                                key: OperatorsSettingsTypeEnum.USE_SELECTED,\r\n                                text: labelPanelSettingsBtnUseSelected ? labelPanelSettingsBtnUseSelected : ''\r\n                              }\r\n                            ]}\r\n                            required={true}\r\n                          />\r\n                        </div>\r\n                      </div>\r\n                      <div className=\"ms-Grid-row tpl-a-f-nl-x-sm\">\r\n                        <div className=\"ms-Grid-col ms-sm12\" />\r\n                      </div>\r\n                      <div className=\"ms-Grid-row\">\r\n                        <div className=\"ms-Grid-col ms-sm5 ms-md5 ms-lg5\" />\r\n                        <div className=\"ms-Grid-col ms-sm7 ms-md7 ms-lg7\">\r\n                          <div className=\"ms-Grid\">\r\n                            {elementOperatorProperties.map(operator => {\r\n                              const operatorKey = Number(operator.key);\r\n                              return (\r\n                                <div key={`DivOperatorKey${operatorKey}`} className=\"ms-Grid-row tpl-a-f-nl-sm-c\">\r\n                                  <div className=\"ms-Grid-col ms-sm12\">\r\n                                    <Checkbox\r\n                                      key={`OperatorKey${operatorKey}`}\r\n                                      label={operator.text}\r\n                                      checked={this.isSettingsOperatorChecked(element.id, operatorKey)}\r\n                                      onChange={(\r\n                                        ev?: React.FormEvent<HTMLElement | HTMLInputElement> | undefined,\r\n                                        checked?: boolean | undefined\r\n                                      ) => this.onChangeSettingsOperators(element.id, operatorKey, ev, checked)}\r\n                                    />\r\n                                  </div>\r\n                                </div>\r\n                              );\r\n                            })}\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    </div>\r\n                  </Panel>\r\n                )}\r\n              </div>\r\n            </div>\r\n          );\r\n        })}\r\n        {!this.state.hideResetDialog && (\r\n          <Dialog\r\n            hidden={this.state.hideResetDialog}\r\n            onDismiss={this.closeResetDialog}\r\n            dialogContentProps={{\r\n              type: DialogType.normal,\r\n              title: labelDialogTitleReset,\r\n              subText: labelDialogSubtextReset\r\n            }}\r\n            modalProps={{\r\n              titleAriaId: 'resetLabelId',\r\n              subtitleAriaId: 'resetSubTextId',\r\n              isBlocking: false,\r\n              containerClassName: 'ms-dialogMainOverride'\r\n            }}\r\n          >\r\n            <DialogFooter>\r\n              <PrimaryButton onClick={() => this.reset()} text={labelDialogBtnReset} />\r\n              <DefaultButton onClick={this.closeResetDialog} text={labelDialogBtnCancel} />\r\n            </DialogFooter>\r\n          </Dialog>\r\n        )}\r\n        {displayPropertiesPanel && (\r\n          <Panel\r\n            key=\"DisplayPropertiesPanelKey\"\r\n            isOpen={displayPropertiesPanel}\r\n            type={PanelType.medium}\r\n            onDismiss={() => this.onDismissDisplayPropertiesPanel()}\r\n            closeButtonAriaLabel=\"Close\"\r\n            headerText={titleOnPanels ? '' : labelPanelDisplayPropertiesTitle}\r\n          >\r\n            <div className=\"ms-Grid\">\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12\" style={{ height: '500px' }}>\r\n                  {titleOnPanels && (\r\n                    <MovableOptionsList\r\n                      elements={displayProperties}\r\n                      height={'350px'}\r\n                      title={'Display Properties'}\r\n                      handleMoveUpAndDownChange={this.onUpDownDisplayProperties}\r\n                    />\r\n                  )}\r\n                  {!titleOnPanels && (\r\n                    <MovableOptionsList\r\n                      elements={displayProperties}\r\n                      height={'350px'}\r\n                      handleMoveUpAndDownChange={this.onUpDownDisplayProperties}\r\n                    />\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </Panel>\r\n        )}\r\n        {addPropertiesPanel && (\r\n          <Panel\r\n            key=\"AddPropertiesPanelKey\"\r\n            isOpen={addPropertiesPanel}\r\n            type={PanelType.medium}\r\n            onDismiss={() => this.onShowAddPropertiesPanel(false)}\r\n            closeButtonAriaLabel=\"Close\"\r\n            headerText={titleOnPanels ? '' : labelPanelAddPropertiesTitle}\r\n          >\r\n            <div className=\"ms-Grid\">\r\n              {titleOnPanels && (\r\n                <div className=\"ms-Grid-row\">\r\n                  <div className=\"ms-Grid-col ms-sm12\">\r\n                    <Title title={labelPanelAddPropertiesTitle ? labelPanelAddPropertiesTitle : ''} icon={true} />\r\n                  </div>\r\n                </div>\r\n              )}\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12\" style={{ height: '300px' }}>\r\n                  <List\r\n                    getUrl={this.getPropertiesUrl}\r\n                    handleResponse={this.handleGetPropertiesResponse}\r\n                    onCustomBuildColumns={this.onBuildPropertiesColumns}\r\n                    enableSearch={true}\r\n                    enableSort={true}\r\n                    selection={this.selection}\r\n                    selectionMode={SelectionMode.multiple}\r\n                    height={'250px'}\r\n                  />\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row tpl-a-f-nl-sm\">\r\n                <div className=\"ms-Grid-col ms-sm12\" />\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm8 ms-md8 ms-lg8\" />\r\n                <div className=\"ms-Grid-col ms-sm2 ms-md2 ms-lg2\">\r\n                  <ActionButton iconProps={{ iconName: 'Add' }} onClick={() => this.onAddProperties()}>\r\n                    {labelPanelAddBtnAdd}\r\n                  </ActionButton>\r\n                </div>\r\n                <div className=\"ms-Grid-col ms-sm2 ms-md2 ms-lg2\">\r\n                  <ActionButton iconProps={{ iconName: 'Cancel' }} onClick={() => this.onShowAddPropertiesPanel(false)}>\r\n                    {labelPanelAddBtnCancel}\r\n                  </ActionButton>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </Panel>\r\n        )}\r\n        {menusPanel && (\r\n          <Panel\r\n            key=\"MenusPanelKey\"\r\n            isOpen={menusPanel}\r\n            type={PanelType.medium}\r\n            onDismiss={() => this.onShowMenusPanel(false)}\r\n            closeButtonAriaLabel=\"Close\"\r\n            headerText={titleOnPanels ? '' : labelPanelMenusTitle}\r\n          >\r\n            <div className=\"ms-Grid\">\r\n              {titleOnPanels && (\r\n                <div className=\"ms-Grid-row\">\r\n                  <div className=\"ms-Grid-col ms-sm12\">\r\n                    <Title title={labelPanelMenusTitle ? labelPanelMenusTitle : ''} icon={true} />\r\n                  </div>\r\n                </div>\r\n              )}\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12\">\r\n                  <fieldset style={{ borderWidth: 'thin', borderColor: '#fff' }}>\r\n                    <legend>{previewLabel}</legend>\r\n                    <CommandBar items={previewItems} />\r\n                  </fieldset>\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row\" style={{ paddingTop: '30px' }}>\r\n                <div className=\"ms-Grid-col ms-sm12\" style={{ height: '300px' }}>\r\n                  <List\r\n                    getUrl={this.getMenusUrl}\r\n                    handleResponse={this.handleGetMenusResponse}\r\n                    onCustomBuildColumns={this.onBuildMenusColumns}\r\n                    enableSearch={true}\r\n                    enableSort={true}\r\n                    selection={this.menusSelection}\r\n                    selectionMode={SelectionMode.single}\r\n                    height={'250px'}\r\n                  />\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm8 ms-md8 ms-lg8\" />\r\n                <div className=\"ms-Grid-col ms-sm4 ms-md4 ms-lg4\" style={{ textAlign: 'right' }}>\r\n                  <ActionButton iconProps={{ iconName: 'Delete' }} onClick={this.unLinkMenu}>\r\n                    {labelMenuRemoveSelection}\r\n                  </ActionButton>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </Panel>\r\n        )}\r\n      </Fabric>\r\n    );\r\n  }\r\n\r\n  private getElementOperatorProperties = (id: any): IDropdownOption[] => {\r\n    const { operatorsProperties } = this.state;\r\n    let elementOperatorProperties: IDropdownOption[] | undefined = operatorsProperties.get(id);\r\n    if (!elementOperatorProperties) {\r\n      elementOperatorProperties = [];\r\n    }\r\n    return elementOperatorProperties;\r\n  };\r\n\r\n  private unLinkMenu = (): void => {\r\n    this.result.menuId = '';\r\n    this.setState({ previewItems: [], previewLabel: this.props.labelFormFieldset });\r\n  };\r\n\r\n  private checkIfCanOpenDisplayProperties = (): boolean => {\r\n    return this.canLoadDisplayProperties;\r\n  };\r\n\r\n  private resetValuesDueToMainchange = (): void => {\r\n    const { movableMainValues } = this.state;\r\n    this.result.properties.clear();\r\n    this.canLoadDisplayProperties = true;\r\n    this.result.displayProperties.splice(0, this.result.displayProperties.length);\r\n\r\n    if (this.canResetMovableResult) {\r\n      movableMainValues.forEach((values: IMovableOptionsListElement[], key: number) => {\r\n        const row = this.result.main.get(key);\r\n        if (row) {\r\n          row.values.splice(0, row.values.length);\r\n          this.result.main.set(key, row);\r\n        }\r\n      });\r\n    }\r\n\r\n    this.setState({\r\n      properties: [],\r\n      displayProperties: [],\r\n      hideConfirmMainChange: true\r\n    });\r\n  };\r\n\r\n  private loadDisplayProperties = (show: boolean): void => {\r\n    if (show) {\r\n      if (!this.checkIfCanOpenDisplayProperties()) {\r\n        console.log('No need to load Display Properties');\r\n        this.setState({ displayPropertiesPanel: true });\r\n        return;\r\n      }\r\n    }\r\n\r\n    const { id } = this.props;\r\n    const mainBodyValues = this.getEncodedMainValues('?');\r\n    const url = this.mode === FormModeEnum.EDIT ? `${this.url}/${id}/display/${mainBodyValues}` : `${this.url}/display/${mainBodyValues}`;\r\n\r\n    console.log(url);\r\n\r\n    Axios.get(url)\r\n      .then(response => {\r\n        const displayDto = response.data;\r\n        this.setDisplayProperties(displayDto.data);\r\n        this.initialState.displayProperties = deepClone(displayDto.data);\r\n        if (show) {\r\n          this.setState({ displayPropertiesPanel: true }, () => (this.canLoadDisplayProperties = false));\r\n        } else {\r\n          this.canLoadDisplayProperties = false;\r\n          this.onDismissDisplayPropertiesPanel();\r\n        }\r\n      })\r\n      .catch(error => console.log(error));\r\n  };\r\n\r\n  private componentDidMountInEditMode() {\r\n    const { id, allowDisplayProperties, allowMenus } = this.props;\r\n    const mainUrl = `${this.url}/${id}/main`;\r\n    const propertiesUrl = `${this.url}/${id}/properties`;\r\n\r\n    Axios.get(mainUrl)\r\n      .then(response => {\r\n        const mainDto = response.data;\r\n        this.setState({\r\n          name: mainDto.name,\r\n          main: mainDto.data\r\n        });\r\n        this.resetResultMainValues(id, mainDto.name, mainDto.data);\r\n        this.initialState.name = mainDto.name;\r\n        this.initialState.main = deepClone(mainDto.data);\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n\r\n    Axios.get(propertiesUrl)\r\n      .then(response => {\r\n        const propertiesDto = response.data;\r\n        this.setState({\r\n          properties: propertiesDto.data\r\n        });\r\n        this.setResultPropertiesValues(propertiesDto.data);\r\n        this.initialState.properties = deepClone(propertiesDto.data);\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n\r\n    if (allowMenus) {\r\n      this.loadMenuData();\r\n    }\r\n\r\n    this.loadFieldProperties();\r\n\r\n    if (allowDisplayProperties) {\r\n      this.loadDisplayProperties(false);\r\n    }\r\n  }\r\n\r\n  private componentDidMountInNewMode() {\r\n    const mainUrl = `${this.url}/main`;\r\n    const nullId = -1;\r\n\r\n    Axios.get(mainUrl)\r\n      .then(response => {\r\n        const mainDto = response.data;\r\n        this.setState({\r\n          main: mainDto.data\r\n        });\r\n        this.resetResultMainValues(nullId, '', mainDto.data);\r\n        this.initialState.main = deepClone(mainDto.data);\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n\r\n    this.loadFieldProperties();\r\n  }\r\n\r\n  private loadMenuData = (): void => {\r\n    const { id } = this.props;\r\n    const menuUrl = `${this.url}/${id}/menu`;\r\n\r\n    Axios.get(menuUrl)\r\n      .then(response => {\r\n        const menuDto = response.data;\r\n        this.result.menuId = menuDto.id;\r\n        this.populatePreviewItems(menuDto);\r\n      })\r\n      .catch(error => console.log(error));\r\n  };\r\n\r\n  private loadFieldProperties = (): void => {\r\n    const { baseUrl } = this.props;\r\n    const url = `${baseUrl}/properties`;\r\n\r\n    Axios.get(url)\r\n      .then(response => {\r\n        const dto = response.data;\r\n        this.setState({ fieldProperties: dto.data });\r\n        this.initialState.displayProperties = deepClone(dto.data);\r\n      })\r\n      .catch(error => console.log(error));\r\n  };\r\n\r\n  private loadOperatorProperties = (element: any): void => {\r\n    const { baseUrl } = this.props;\r\n    const { operatorsProperties } = this.state;\r\n    const url = `${baseUrl}/properties/operators?id=${element.id}&name=${element.name}&isSystemField=${element.isSystemField}&type=${\r\n      element.type\r\n    }&field=${element.field}`;\r\n\r\n    console.log(url);\r\n\r\n    Axios.get(url)\r\n      .then(response => {\r\n        const dto = response.data;\r\n\r\n        const newOperatorProperties = cloneMap(operatorsProperties);\r\n        newOperatorProperties.set(element.id, dto);\r\n\r\n        this.setState({ operatorsProperties: newOperatorProperties });\r\n\r\n        const id = element.id;\r\n        const { showSettingsPanel } = this.state;\r\n        const newShowSettingsPanel = update(showSettingsPanel, { [id]: { $set: true } });\r\n        this.setState({ showSettingsPanel: newShowSettingsPanel });\r\n      })\r\n      .catch(error => console.log(error));\r\n  };\r\n\r\n  private getSafeValue = (values: any[]): any => {\r\n    return values != null && values.length ? values[0].text : '';\r\n  };\r\n\r\n  private getSafeDateValue = (values: any[]): any => {\r\n    return values != null && values.length ? this.getSafeTextToDate(values[0].text) : null;\r\n  };\r\n\r\n  private getSafeTextToDate = (value: any): any => {\r\n    if (!value) {\r\n      return null;\r\n    }\r\n\r\n    let safeDate = null;\r\n    try {\r\n      const asNumber: number = Number(value);\r\n      safeDate = new Date(0);\r\n      safeDate.setUTCSeconds(asNumber);\r\n    } catch (e) {\r\n      console.log('Error converting text to date:', value);\r\n    }\r\n\r\n    return safeDate;\r\n  };\r\n\r\n  private removeProperty = (id: number): void => {\r\n    const { properties } = this.state;\r\n    const indexToRemove = properties.findIndex(p => p.id === id);\r\n\r\n    if (indexToRemove >= 0) {\r\n      const newProperties = update(properties, { $splice: [[indexToRemove, 1]] });\r\n      this.setResultPropertiesValues(newProperties);\r\n      this.setState({ properties: newProperties }, () => this.closeDeleteDialog(id));\r\n    } else {\r\n      this.closeDeleteDialog(id);\r\n    }\r\n  };\r\n\r\n  private movePropertyUp = (id: number): void => {\r\n    this.moveProperty(id, -1);\r\n  };\r\n\r\n  private movePropertyDown = (id: number): void => {\r\n    this.moveProperty(id, 1);\r\n  };\r\n\r\n  private moveProperty = (id: number, pos: number): void => {\r\n    const { properties } = this.state;\r\n    const index = properties.findIndex(p => p.id === id);\r\n\r\n    if (index >= 0) {\r\n      const element = properties[index];\r\n      let newProperties = update(properties, { $splice: [[index, 1]] });\r\n      newProperties = update(newProperties, { $splice: [[index + pos, 0, element]] });\r\n      this.setResultPropertiesValues(newProperties);\r\n      this.setState({ properties: newProperties });\r\n    }\r\n  };\r\n\r\n  private getArrayAsString = (values: IMovableOptionsListElement[]): string => {\r\n    return values != null\r\n      ? values\r\n          .filter((value: any) => value.selected === true)\r\n          .map((item: any) => item.text)\r\n          .join(', ')\r\n      : '';\r\n  };\r\n\r\n  private onDismissMovablePanel = (element: any, lastMovableElements: IMovableOptionsListElement[]): void => {\r\n    const { showMovablePanel, movableMainValues } = this.state;\r\n    const newShowMovablePanel = update(showMovablePanel, { [element.id]: { $set: false } });\r\n    const values: IFieldValue[] = [];\r\n    const elementValues = movableMainValues.get(element.id) ? movableMainValues.get(element.id) : element.values;\r\n\r\n    let numberOfNotSelectedElements = 0;\r\n\r\n    const valuesHaveNotChanged =\r\n      elementValues.length == lastMovableElements.length &&\r\n      elementValues.every(function(element: IMovableOptionsListElement, index: number) {\r\n        return element.selected === lastMovableElements[index].selected;\r\n      });\r\n\r\n    for (let lastElement of lastMovableElements) {\r\n      if (!lastElement.selected) {\r\n        numberOfNotSelectedElements++;\r\n      }\r\n    }\r\n\r\n    elementValues.forEach((elem: any) => {\r\n      if (elem.selected) {\r\n        const fieldValue: IFieldValue = {\r\n          id: elem.key,\r\n          value: elem.text\r\n        };\r\n        values.push(fieldValue);\r\n      }\r\n    });\r\n\r\n    const formRow = this.getMainRowFromId(element.id, element.name);\r\n    const updatedSelectedItems = update(formRow.values, { $set: values });\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.main.set(element.id, formRow);\r\n\r\n    const noElementWasSelected = numberOfNotSelectedElements === lastMovableElements.length;\r\n\r\n    if (!elementValues || valuesHaveNotChanged || noElementWasSelected) {\r\n      this.setState({ showMovablePanel: newShowMovablePanel });\r\n      return;\r\n    }\r\n\r\n    this.setState({ showMovablePanel: newShowMovablePanel }, () => this.openConfirmMainChange());\r\n  };\r\n\r\n  private onShowMovablePanel = (element: any, lastMovableElements: IMovableOptionsListElement[]): void => {\r\n    const id = element.id;\r\n    const lastValues: IFieldValue[] = [];\r\n\r\n    this.canResetMovableResult = false;\r\n\r\n    lastMovableElements.map(element => {\r\n      const value: IFieldValue = {\r\n        id: element.key,\r\n        value: element.text,\r\n        selected: element.selected\r\n      };\r\n      lastValues.push(value);\r\n    });\r\n\r\n    const { movableMainValues } = this.state;\r\n    const newMovableMainValues = cloneMap(movableMainValues);\r\n    newMovableMainValues.set(id, lastMovableElements);\r\n    this.setState({ movableMainValues: newMovableMainValues }, () => this.storeLastMainState());\r\n\r\n    const { showMovablePanel } = this.state;\r\n    const newShowMovablePanel = update(showMovablePanel, { [id]: { $set: true } });\r\n    this.setState({ showMovablePanel: newShowMovablePanel });\r\n  };\r\n\r\n  private onShowSettingsPanel = (element: any): void => {\r\n    this.loadOperatorProperties(element);\r\n  };\r\n\r\n  private onDismissSettingsPanel = (element: any): void => {\r\n    const id = element.id;\r\n    const { showSettingsPanel, properties, settingsOperators } = this.state;\r\n    const operators = settingsOperators.get(id);\r\n    const newOperations: any = [];\r\n    let firstKey: any = undefined;\r\n\r\n    const elementOperatorProperties: IDropdownOption[] = this.getElementOperatorProperties(element.id);\r\n\r\n    if (operators) {\r\n      operators.forEach((selected: boolean, key: number) => {\r\n        const index = elementOperatorProperties.findIndex(p => String(p.key) === String(key));\r\n        const obj = elementOperatorProperties[index];\r\n        if (obj && selected) {\r\n          if (!firstKey) {\r\n            firstKey = key;\r\n          }\r\n          const value = {\r\n            key: key,\r\n            text: obj.text,\r\n            selected: firstKey ? true : false\r\n          };\r\n          newOperations.splice(key, 0, value);\r\n        }\r\n      });\r\n    }\r\n\r\n    const index = properties.findIndex(p => p.id === id);\r\n    const newProperties = update(properties, { [index]: { operations: { $set: newOperations } } });\r\n    const newShowSettingsPanel = update(showSettingsPanel, { [id]: { $set: false } });\r\n    this.setResultPropertiesValues(newProperties);\r\n    this.setState({ properties: newProperties, showSettingsPanel: newShowSettingsPanel });\r\n  };\r\n\r\n  private onChangePropertyOperation = (event: React.FormEvent<HTMLDivElement>, element: any, item: IDropdownOption | undefined): void => {\r\n    if (!item) {\r\n      return;\r\n    }\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    const formRow = this.getPropertiesRowFromId(id, fieldName, element.isSystemField);\r\n    formRow.selectedOperation = Number(item.key);\r\n    this.result.properties.set(id, formRow);\r\n  };\r\n\r\n  private onChangeSettingsOperators = (\r\n    id: number,\r\n    index: number,\r\n    ev?: React.FormEvent<HTMLElement | HTMLInputElement> | undefined,\r\n    isChecked?: boolean | undefined\r\n  ): void => {\r\n    const { settingsOperators } = this.state;\r\n    const operatorsArray = settingsOperators.get(id) ? settingsOperators.get(id) : [];\r\n    const newOperatorsArray = update(operatorsArray, { [index]: { $set: isChecked! } });\r\n    const newSettingsOperators = cloneMap(settingsOperators);\r\n    newSettingsOperators.set(id, newOperatorsArray as any[]);\r\n\r\n    this.setState({ settingsOperators: newSettingsOperators });\r\n  };\r\n\r\n  private isSettingsOperatorChecked = (id: number, index: number): boolean => {\r\n    const { settingsOperators } = this.state;\r\n    const operatorsArray = settingsOperators.get(id) ? settingsOperators.get(id) : [];\r\n    const result = operatorsArray ? operatorsArray[index] : false;\r\n\r\n    return result ? result : false;\r\n  };\r\n\r\n  private onChangeSettingsOperatorType = (\r\n    ev: React.FormEvent<HTMLElement | HTMLInputElement> | undefined,\r\n    option: any,\r\n    element: any\r\n  ): void => {\r\n    const { settingsOperators, settingsOperatorsSelectionType } = this.state;\r\n\r\n    const id = element.id;\r\n\r\n    const newSettingsOperatorsSelectionType = update(settingsOperatorsSelectionType, { [id]: { $set: option.key } });\r\n\r\n    let newSettingsOperatorsValues: boolean[] = [];\r\n\r\n    const isSelectOption = OperatorsSettingsTypeEnum.USE_ALL === option.key ? true : false;\r\n\r\n    const elementOperatorProperties: IDropdownOption[] = this.getElementOperatorProperties(element.id);\r\n\r\n    for (let operator of elementOperatorProperties) {\r\n      newSettingsOperatorsValues[operator.key] = isSelectOption;\r\n    }\r\n\r\n    const newSettingsOperators = cloneMap(settingsOperators);\r\n    newSettingsOperators.set(id, newSettingsOperatorsValues);\r\n\r\n    this.setState({\r\n      settingsOperatorsSelectionType: newSettingsOperatorsSelectionType,\r\n      settingsOperators: newSettingsOperators\r\n    });\r\n  };\r\n\r\n  private onShowDisplayPropertiesPanel = () => {\r\n    if (this.validateMainFields(false)) {\r\n      this.loadDisplayProperties(true);\r\n    }\r\n  };\r\n\r\n  private processDisplayProperties = (elements: IMovableOptionsListElement[]): IMovableOptionsListElement[] => {\r\n    const newDisplayProperties: any[] = [];\r\n    for (let property of elements) {\r\n      if (property.selected) {\r\n        newDisplayProperties.push(property);\r\n      }\r\n    }\r\n    return newDisplayProperties;\r\n  };\r\n\r\n  private onDismissDisplayPropertiesPanel = () => {\r\n    const { displayProperties } = this.state;\r\n    const newDisplayProperties = this.processDisplayProperties(displayProperties);\r\n    this.result.displayProperties = newDisplayProperties;\r\n    this.setState({ displayPropertiesPanel: false });\r\n  };\r\n\r\n  private onUpDownDisplayProperties = (elements: IMovableOptionsListElement[]) => {\r\n    const { displayProperties } = this.state;\r\n    const newDisplayProperties = this.processDisplayProperties(elements);\r\n    const temp: IMovableOptionsListElement[] = [];\r\n\r\n    displayProperties.forEach(element => {\r\n      const index = newDisplayProperties.findIndex(p => p.key === element.key);\r\n      if (index < 0) {\r\n        const newElement: IMovableOptionsListElement = {\r\n          key: element.key,\r\n          text: element.text,\r\n          selected: false\r\n        };\r\n        temp.push(newElement);\r\n      }\r\n    });\r\n    newDisplayProperties.push(...temp);\r\n    this.setState({ displayProperties: newDisplayProperties });\r\n  };\r\n\r\n  private onShowAddPropertiesPanel = (show: boolean) => {\r\n    if (this.validateMainFields(false)) {\r\n      this.setState({ addPropertiesPanel: show });\r\n    }\r\n  };\r\n\r\n  private onShowMenusPanel = (show: boolean) => {\r\n    this.setState({ menusPanel: show });\r\n  };\r\n\r\n  private handleGetPropertiesResponse = (items: any): any => {\r\n    return items;\r\n  };\r\n\r\n  private handleGetMenusResponse = (items: any[]): any[] => {\r\n    return items;\r\n  };\r\n\r\n  private onDisplayPropertiesSelectionChanged = (selection: any[]): any => {\r\n    const { properties } = this.state;\r\n    const newPropertiesTemp = [];\r\n\r\n    for (let element of selection) {\r\n      const newElement = { ...element };\r\n      const indexProperties = properties.findIndex(p => p.id === element.id);\r\n      if (indexProperties < 0) {\r\n        newPropertiesTemp.push(newElement);\r\n      }\r\n    }\r\n    this.setState({ propertiesTemp: newPropertiesTemp });\r\n  };\r\n\r\n  private onMenusSelectionChanged = (selection: any[]): void => {\r\n    const menu = selection[0];\r\n    if (menu) {\r\n      this.result.menuId = menu.id;\r\n      this.populatePreviewItems(menu);\r\n    }\r\n  };\r\n\r\n  private populatePreviewItems = (menuDto: any): void => {\r\n    const { labelFormFieldset } = this.props;\r\n    const previewCmdbarItems: any[] = [];\r\n    const previewName: string = `${labelFormFieldset}: [ ${menuDto.name} ]`;\r\n\r\n    const items = menuDto.items;\r\n\r\n    items.forEach((element: any) => {\r\n      const item = {\r\n        key: element.id,\r\n        name: element.name,\r\n        iconProps: {\r\n          iconName: element.icon\r\n        },\r\n        iconOnly: !element.textMode\r\n      };\r\n      previewCmdbarItems.push(item);\r\n    });\r\n\r\n    this.setState({ previewLabel: previewName, previewItems: previewCmdbarItems });\r\n  };\r\n\r\n  private isNull = (value: any): boolean => {\r\n    return value == null || value === 'null' || value == undefined;\r\n  };\r\n\r\n  private getPropertiesUrl = (search: string, page: number, sortBy?: string, sortDesc?: boolean): string => {\r\n    const { id } = this.props;\r\n    const { properties } = this.state;\r\n    const qValue = this.isNull(search) ? '' : `&q=${search}`;\r\n    const sortByValue = this.isNull(sortBy) ? '' : `&_sort=${sortBy}`;\r\n    const urlSuffix = id ? `/${id}/properties/add` : '/properties/add';\r\n    let sortDescValue = '';\r\n\r\n    if (!this.isNull(sortDesc)) {\r\n      sortDescValue = sortDesc ? '&_order=desc' : '&_order=asc';\r\n    }\r\n\r\n    const propertiesDetails: IFieldValue[] = [];\r\n\r\n    for (let property of properties) {\r\n      const detail: IFieldValue = {\r\n        id: property.id,\r\n        value: property.name\r\n      };\r\n      propertiesDetails.push(detail);\r\n    }\r\n\r\n    const propertiesDetailsEncodedValues = encodeURIComponent(JSON.stringify({ details: propertiesDetails }));\r\n    const propertiesValues =\r\n      propertiesDetailsEncodedValues && propertiesDetailsEncodedValues.length > 0 ? `&properties=${propertiesDetailsEncodedValues}` : '';\r\n\r\n    const mainBodyValues = this.getEncodedMainValues('&');\r\n    const url = `${\r\n      this.url\r\n    }${urlSuffix}?_start=${page}&_limit=20${qValue}${sortByValue}${sortDescValue}${mainBodyValues}${propertiesValues}`;\r\n\r\n    console.log(url);\r\n    return url;\r\n  };\r\n\r\n  private getEncodedMainValues = (separator: string): string => {\r\n    const main: ITemplateAdminMainRow[] = [];\r\n\r\n    this.result.main.forEach((value: ITemplateAdminMainRow, key: number) => {\r\n      main.push(value);\r\n    });\r\n\r\n    const mainValues = encodeURIComponent(JSON.stringify({ main: main }));\r\n    return mainValues && mainValues.length > 0 ? `${separator}main=${mainValues}` : '';\r\n  };\r\n\r\n  private onAddProperties = (): void => {\r\n    const { propertiesTemp, properties, id } = this.state;\r\n    let propertiesUrl = id ? `${this.url}/${id}/properties/details?` : `${this.url}/properties/details?`;\r\n\r\n    const details: IFieldValue[] = [];\r\n\r\n    for (let property of propertiesTemp) {\r\n      const detail: IFieldValue = {\r\n        id: property.key,\r\n        value: property.text\r\n      };\r\n      details.push(detail);\r\n    }\r\n\r\n    const encodedDetails = encodeURIComponent(JSON.stringify({ details: details }));\r\n    const detailValues = encodedDetails && encodedDetails.length > 0 ? `&properties=${encodedDetails}` : '';\r\n\r\n    propertiesUrl = propertiesUrl + this.getEncodedMainValues('&') + detailValues;\r\n    console.log(propertiesUrl);\r\n\r\n    Axios.get(propertiesUrl).then(response => {\r\n      if (response.data.data.length > 0) {\r\n        const values = response.data.data;\r\n        const newProperties = update(properties, { $push: values });\r\n        this.setResultPropertiesValues(newProperties);\r\n        this.setState({ properties: newProperties, propertiesTemp: [] }, () => this.onShowAddPropertiesPanel(false));\r\n      } else {\r\n        this.onShowAddPropertiesPanel(false);\r\n      }\r\n    });\r\n  };\r\n\r\n  private getMenusUrl = (search: string, page: number, sortBy?: string, sortDesc?: boolean): string => {\r\n    const { baseUrl } = this.props;\r\n    const qValue = this.isNull(search) ? '' : `&q=${search}`;\r\n    const sortByValue = this.isNull(sortBy) ? '' : `&_sort=${sortBy}`;\r\n    let sortDescValue = '';\r\n    let idsUriValues = '';\r\n\r\n    if (!this.isNull(sortDesc)) {\r\n      sortDescValue = sortDesc ? '&_order=desc' : '&_order=asc';\r\n    }\r\n    const url = `${baseUrl}/menus?_start=${page}&_limit=20${qValue}${sortByValue}${sortDescValue}${idsUriValues}`;\r\n    console.log(url);\r\n    return url;\r\n  };\r\n\r\n  private reset = (): void => {\r\n    this.setState(this.emptyState, () => this.resetState());\r\n  };\r\n\r\n  private setMainSingleValue(id: number, fieldName: string, value: any): void {\r\n    const { main } = this.state;\r\n    const formRow = this.getMainRowFromId(id, fieldName);\r\n    const currentValue: string = formRow.values != null && formRow.values.length ? String(formRow.values[0].value) : '';\r\n\r\n    if (currentValue == String(value).trim()) {\r\n      return;\r\n    }\r\n\r\n    //this.storeLastMainState(id, main, formRow);\r\n\r\n    const fieldValue: IFieldValue = {\r\n      id: '',\r\n      value: value\r\n    };\r\n    formRow.values[0] = fieldValue;\r\n\r\n    this.result.main.set(id, formRow);\r\n\r\n    const index = main.findIndex(p => p.id === id);\r\n    const newMain = update(main, { [index]: { values: { $set: [{ text: value }] } } });\r\n    //this.setState({ main: newMain }, () => this.openConfirmMainChange(id));\r\n    this.setState({ main: newMain });\r\n  }\r\n\r\n  private cloneMovableOptions = (map: Map<number, IMovableOptionsListElement[]>): Map<number, IMovableOptionsListElement[]> => {\r\n    const clonedMap = new Map<number, IMovableOptionsListElement[]>();\r\n    map.forEach((values: IMovableOptionsListElement[], key: number) => {\r\n      const clonedArray: IMovableOptionsListElement[] = [];\r\n      values.forEach(value => {\r\n        const element = {\r\n          key: value.key,\r\n          text: value.text,\r\n          selected: value.selected\r\n        };\r\n        clonedArray.push(element);\r\n      });\r\n      clonedMap.set(key, clonedArray);\r\n    });\r\n    return clonedMap;\r\n  };\r\n\r\n  private storeLastMainState = (): void => {\r\n    const { main, movableMainValues } = this.state;\r\n    const rows = new Map<number, ITemplateAdminMainRow>();\r\n    this.lastMainState.main = deepClone(main);\r\n\r\n    main.map(element => {\r\n      const formRow = this.getMainRowFromId(element.id, element.name);\r\n      const newFormRow: ITemplateAdminMainRow = {\r\n        id: formRow.id,\r\n        name: formRow.name,\r\n        values: deepClone(formRow.values)\r\n      };\r\n      rows.set(element.id, newFormRow);\r\n    });\r\n\r\n    this.lastMainState.rows = rows;\r\n    this.lastMainState.movableMainValues = this.cloneMovableOptions(movableMainValues);\r\n  };\r\n\r\n  private restoreLastMainState = (): void => {\r\n    this.setState({ main: this.lastMainState.main, movableMainValues: this.lastMainState.movableMainValues, hideConfirmMainChange: true });\r\n    this.lastMainState.rows.forEach((row: ITemplateAdminMainRow, id: number) => {\r\n      this.result.main.set(id, row);\r\n    });\r\n  };\r\n\r\n  private setPropertiesSingleValue(id: number, fieldName: string, isSystemField: boolean, value: any): void {\r\n    const { properties } = this.state;\r\n    const formRow = this.getPropertiesRowFromId(id, fieldName, isSystemField);\r\n    const fieldValue: IFieldValue = {\r\n      id: null,\r\n      value: value\r\n    };\r\n    formRow.values[0] = fieldValue;\r\n    this.result.properties.set(id, formRow);\r\n\r\n    const index = properties.findIndex(p => p.id === id);\r\n    const newProperties = update(properties, { [index]: { values: { $set: [{ text: value }] } } });\r\n    this.setState({ properties: newProperties });\r\n  }\r\n\r\n  private handleMainTextInput(event: any, element: any): void {\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    this.setMainSingleValue(id, fieldName, event.target.value);\r\n  }\r\n\r\n  private handlePropertiesTextInput(event: any, element: any): void {\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    this.setPropertiesSingleValue(id, fieldName, element.isSystemField, event.target.value);\r\n  }\r\n\r\n  private handleMainDateInput(date: Date | null | undefined, element: any): void {\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    if (!date) {\r\n      return;\r\n    }\r\n    this.setMainSingleValue(id, fieldName, date.getTime() / 1000);\r\n  }\r\n\r\n  private handlePropertiesDateInput(date: Date | null | undefined, element: any): void {\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    if (!date) {\r\n      return;\r\n    }\r\n\r\n    this.setPropertiesSingleValue(id, fieldName, element.isSystemField, date.getTime() / 1000);\r\n  }\r\n\r\n  private onMainChangeValues = (event: React.FormEvent<HTMLDivElement>, element: any, item?: IDropdownOption): void => {\r\n    if (!item) {\r\n      return;\r\n    }\r\n    this.canResetMovableResult = true;\r\n\r\n    const { main } = this.state;\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n\r\n    const formRow = this.getMainRowFromId(id, fieldName);\r\n    this.storeLastMainState();\r\n\r\n    let updatedSelectedItems: any = [];\r\n\r\n    if (item.selected) {\r\n      // add the option if it's checked\r\n      const fieldValue: IFieldValue = {\r\n        id: item.key,\r\n        value: item.text\r\n      };\r\n      updatedSelectedItems = update(formRow.values, { $push: [fieldValue] });\r\n    } else {\r\n      // remove the option if it's unchecked\r\n      const currIndex = formRow.values\r\n        .map(function(x) {\r\n          return x.id;\r\n        })\r\n        .indexOf(item!.key);\r\n\r\n      if (currIndex > -1) {\r\n        updatedSelectedItems = update(formRow.values, { $splice: [[currIndex, 1]] });\r\n      }\r\n    }\r\n\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.main.set(id, formRow);\r\n\r\n    const newElementValues = deepClone(element.values);\r\n\r\n    for (let option of newElementValues) {\r\n      if (String(item.text) == String(option.text)) {\r\n        option.selected = item.selected;\r\n      }\r\n    }\r\n\r\n    const index = main.findIndex(p => p.id === id);\r\n    const newMain = update(main, { [index]: { values: { $set: newElementValues } } });\r\n    this.setState({ main: newMain }, () => this.openConfirmMainChange());\r\n  };\r\n\r\n  private onPropertiesChangeValues = (event: React.FormEvent<HTMLDivElement>, element: any, item?: IDropdownOption): void => {\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    const formRow = this.getPropertiesRowFromId(id, fieldName, element.isSystemField);\r\n\r\n    let updatedSelectedItems: any = [];\r\n\r\n    if (!item) {\r\n      return;\r\n    }\r\n\r\n    if (item.selected) {\r\n      // add the option if it's checked\r\n      const fieldValue: IFieldValue = {\r\n        id: item.key,\r\n        value: item.text\r\n      };\r\n      updatedSelectedItems = update(formRow.values, { $push: [fieldValue] });\r\n    } else {\r\n      // remove the option if it's unchecked\r\n      const currIndex = formRow.values\r\n        .map(function(x) {\r\n          return x.id;\r\n        })\r\n        .indexOf(item.key);\r\n      if (currIndex > -1) {\r\n        updatedSelectedItems = update(formRow.values, { $splice: [[currIndex, 1]] });\r\n      }\r\n    }\r\n\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.properties.set(id, formRow);\r\n  };\r\n\r\n  private onMainChangeValuesPickup = (event: React.FormEvent<HTMLDivElement>, element: any, item?: IDropdownOption): void => {\r\n    if (!item) {\r\n      return;\r\n    }\r\n\r\n    this.canResetMovableResult = true;\r\n\r\n    const { main } = this.state;\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    const formRow = this.getMainRowFromId(id, fieldName);\r\n    this.storeLastMainState();\r\n\r\n    const fieldValue: IFieldValue = {\r\n      id: item.key,\r\n      value: item.text,\r\n      selected: true\r\n    };\r\n    const updatedSelectedItems = update(formRow.values, { $set: [fieldValue] });\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.main.set(id, formRow);\r\n\r\n    if (element.dependentChildId) {\r\n      this.onChangeParentPickupField(event, item, id, element.dependentChildId);\r\n    }\r\n    const newElementValues = deepClone(element.values);\r\n\r\n    for (let option of newElementValues) {\r\n      if (String(item.text) === String(option.text)) {\r\n        option.selected = true;\r\n      } else {\r\n        option.selected = false;\r\n      }\r\n    }\r\n    const index = main.findIndex(p => p.id === id);\r\n    const newMain = update(main, { [index]: { values: { $set: newElementValues } } });\r\n    this.setState({ main: newMain }, () => this.openConfirmMainChange());\r\n  };\r\n\r\n  private onPropertiesChangeValuesPickup = (event: React.FormEvent<HTMLDivElement>, element: any, item?: IDropdownOption): void => {\r\n    if (!item) {\r\n      return;\r\n    }\r\n\r\n    const id: number = element.id;\r\n    const fieldName: string = element.name;\r\n    const formRow = this.getPropertiesRowFromId(id, fieldName, element.isSystemField);\r\n\r\n    const fieldValue: IFieldValue = {\r\n      id: item.key,\r\n      value: item.text,\r\n      selected: true\r\n    };\r\n\r\n    const updatedSelectedItems = update(formRow.values, { $set: [fieldValue] });\r\n    formRow.values = updatedSelectedItems;\r\n\r\n    this.result.properties.set(id, formRow);\r\n  };\r\n\r\n  private onChangePropertyType = (event: React.FormEvent<HTMLDivElement>, item: IDropdownOption | undefined, element: any): void => {\r\n    if (!item) return;\r\n\r\n    const id: any = element.id;\r\n    const fieldName: string = element.name;\r\n    const { properties, settingsOperatorsPropertyType } = this.state;\r\n    const index = properties.findIndex(p => String(p.id) === String(id));\r\n    const itemKey = item.key;\r\n    const formRow = this.getPropertiesRowFromId(id, fieldName, element.isSystemField);\r\n\r\n    formRow.propertyType = itemKey;\r\n\r\n    this.result.properties.set(id, formRow);\r\n\r\n    const newProperties = update(properties, { [index]: { type: { $set: itemKey } } });\r\n\r\n    const newSettingsOperatorsPropertyType = cloneMap(settingsOperatorsPropertyType);\r\n    newSettingsOperatorsPropertyType.set(id, itemKey);\r\n\r\n    this.setState({ properties: newProperties, settingsOperatorsPropertyType: newSettingsOperatorsPropertyType });\r\n  };\r\n\r\n  private getMainRowFromId = (id: number, name: string): ITemplateAdminMainRow => {\r\n    let formRow = this.result.main.get(id);\r\n    if (!formRow) {\r\n      formRow = {\r\n        id: id,\r\n        name: name,\r\n        values: []\r\n      };\r\n    }\r\n    return formRow;\r\n  };\r\n\r\n  private getPropertiesRowFromId = (id: number, name: string, isSystemField: boolean): ITemplateAdminPropertiesRow => {\r\n    let formRow = this.result.properties.get(id);\r\n    if (!formRow) {\r\n      formRow = {\r\n        id: id,\r\n        name: name,\r\n        isSystemField: isSystemField,\r\n        selectedOperation: -1,\r\n        values: [],\r\n        operations: [],\r\n        propertyType: -1\r\n      };\r\n    }\r\n    return formRow;\r\n  };\r\n\r\n  private resetState = (): void => {\r\n    const { id } = this.state;\r\n    const newMain = deepClone(this.initialState.main);\r\n    const newProperties = deepClone(this.initialState.properties);\r\n    const newDisplayProperties = deepClone(this.initialState.displayProperties);\r\n    const newFieldProperties = deepClone(this.initialState.fieldProperties);\r\n    const newOperatorsProperties = cloneMap(this.initialState.operatorsProperties);\r\n\r\n    this.setState(\r\n      {\r\n        name: this.initialState.name,\r\n        main: newMain,\r\n        properties: newProperties,\r\n        displayProperties: newDisplayProperties,\r\n        hideDeleteDialogs: [],\r\n        hideResetDialog: true,\r\n        fieldProperties: newFieldProperties,\r\n        operatorsProperties: newOperatorsProperties,\r\n        movableMainValues: new Map<number, IMovableOptionsListElement[]>()\r\n      },\r\n      () => {\r\n        this.resetResultMainValues(id, this.initialState.name, newMain);\r\n        this.setResultPropertiesValues(newProperties);\r\n        this.setDisplayProperties(newDisplayProperties);\r\n      }\r\n    );\r\n  };\r\n\r\n  private resetResultMainValues = (id: any, name: string, main: any[]): void => {\r\n    this.result.id = id;\r\n    this.result.name = name;\r\n    this.result.main.clear();\r\n\r\n    for (let item of main) {\r\n      const row: ITemplateAdminMainRow = {\r\n        id: item.id,\r\n        name: item.name,\r\n        values: this.getItemValues(item)\r\n      };\r\n      this.result.main.set(item.id, row);\r\n    }\r\n  };\r\n\r\n  private setDisplayProperties = (display: any[]): void => {\r\n    const newProperties = [];\r\n    this.result.displayProperties.splice(0, this.result.displayProperties.length);\r\n    for (let property of display) {\r\n      const cloneProperty = deepClone(property);\r\n      newProperties.push(cloneProperty);\r\n      if (property.selected) {\r\n        this.result.displayProperties.push(property.key);\r\n      }\r\n    }\r\n    this.setState({\r\n      displayProperties: newProperties\r\n    });\r\n  };\r\n\r\n  private setResultPropertiesValues = (properties: any[]): void => {\r\n    const oldProperties = cloneMap(this.result.properties);\r\n    this.result.properties.clear();\r\n\r\n    const newSettingsOperators = new Map<number, boolean[]>();\r\n    const newSettingsOperatorsSelectionType: string[] = [];\r\n    const newSettingsOperatorsPropertyType = new Map<number, number>();\r\n\r\n    for (let item of properties) {\r\n      let operCount = 0;\r\n      const settingsValues: boolean[] = [];\r\n      const newOperations: any[] = [];\r\n      for (let operation of item.operations) {\r\n        settingsValues[operation.key] = true;\r\n        const value = {\r\n          key: operation.key,\r\n          text: operation.text,\r\n          selected: operation.selected\r\n        };\r\n        newOperations.push(value);\r\n        operCount++;\r\n      }\r\n\r\n      const elementOperatorProperties: IDropdownOption[] = this.getElementOperatorProperties(item.id);\r\n\r\n      newSettingsOperatorsSelectionType[item.id] =\r\n        operCount === elementOperatorProperties.length ? OperatorsSettingsTypeEnum.USE_ALL : OperatorsSettingsTypeEnum.USE_SELECTED;\r\n\r\n      newSettingsOperators.set(item.id, settingsValues);\r\n\r\n      newSettingsOperatorsPropertyType.set(item.id, item.type);\r\n\r\n      const oldPropertiesRow: ITemplateAdminPropertiesRow | undefined = oldProperties.get(item.id);\r\n      const oldPropertyValues: IFieldValue[] | undefined = oldPropertiesRow ? oldPropertiesRow.values : undefined;\r\n\r\n      const row: ITemplateAdminPropertiesRow = {\r\n        id: item.id,\r\n        name: item.name,\r\n        isSystemField: item.isSystemField,\r\n        selectedOperation: this.getOperationValues(item),\r\n        values: this.getItemValues(item, oldPropertyValues),\r\n        operations: newOperations,\r\n        propertyType: item.type\r\n      };\r\n      this.result.properties.set(item.id, row);\r\n    }\r\n\r\n    this.setState({\r\n      settingsOperators: newSettingsOperators,\r\n      settingsOperatorsSelectionType: newSettingsOperatorsSelectionType,\r\n      settingsOperatorsPropertyType: newSettingsOperatorsPropertyType\r\n    });\r\n  };\r\n\r\n  private getItemValues = (item: any, oldValues: IFieldValue[] | undefined = undefined): any[] => {\r\n    const result: any[] = [];\r\n\r\n    if (item.values == null) {\r\n      return result;\r\n    }\r\n\r\n    const singleField = item.field !== FieldTypeEnum.LOOKUP && item.field !== FieldTypeEnum.PICKUP && item.field !== FieldTypeEnum.MOVABLE;\r\n\r\n    for (let obj of item.values) {\r\n      const olderValue = oldValues ? oldValues.find(i => i.id === obj.key) : undefined;\r\n      const fieldValue: IFieldValue = {\r\n        id: obj.key,\r\n        value: olderValue ? olderValue.value : obj.text\r\n      };\r\n      if (!singleField) {\r\n        if (obj.selected || olderValue) {\r\n          result.push(fieldValue);\r\n        }\r\n      } else {\r\n        result.push(fieldValue);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  };\r\n\r\n  private getOperationValues = (item: any): any => {\r\n    let operation = '';\r\n    for (let obj of item.operations) {\r\n      if (obj.selected) {\r\n        operation = obj.key;\r\n        break;\r\n      }\r\n    }\r\n\r\n    return operation;\r\n  };\r\n\r\n  private showDeleteDialog = (id: any): void => {\r\n    const { hideDeleteDialogs } = this.state;\r\n    const newHideDeleteDialogs = update(hideDeleteDialogs, { [id]: { $set: false } });\r\n    this.setState({ hideDeleteDialogs: newHideDeleteDialogs });\r\n  };\r\n\r\n  private closeDeleteDialog = (id: any): void => {\r\n    const { hideDeleteDialogs } = this.state;\r\n    const newHideDeleteDialogs = update(hideDeleteDialogs, { [id]: { $set: true } });\r\n    this.setState({ hideDeleteDialogs: newHideDeleteDialogs });\r\n  };\r\n\r\n  private showResetDialog = (): void => {\r\n    this.setState({ hideResetDialog: false });\r\n  };\r\n\r\n  private closeResetDialog = (): void => {\r\n    this.setState({ hideResetDialog: true });\r\n  };\r\n\r\n  private onChangeParentPickupField = (\r\n    event: React.FormEvent<HTMLDivElement>,\r\n    item: IDropdownOption,\r\n    id: number,\r\n    dependentId: number\r\n  ): void => {\r\n    const values: any[] = [];\r\n    values.push(item.key);\r\n    this.onChangeParentField(id, values, dependentId);\r\n  };\r\n\r\n  private onChangeParentField = (parentId: number, values: any[], dependentId: number): void => {\r\n    let idsUriValues = '';\r\n\r\n    for (let id of values) {\r\n      idsUriValues = idsUriValues + `&ids=${id}`;\r\n    }\r\n\r\n    const url = `${this.url}/main/dependent/${parentId}/${dependentId}?${idsUriValues}`;\r\n\r\n    console.log(url);\r\n\r\n    Axios.get(url)\r\n      .then(response => {\r\n        this.updateChildMainField(response.data, dependentId);\r\n      })\r\n      .catch(error => console.log(error));\r\n  };\r\n\r\n  private updateChildMainField = (response: any, dependentId: number): void => {\r\n    const { movableMainValues } = this.state;\r\n    const newMovableMainValues = cloneMap(movableMainValues);\r\n\r\n    newMovableMainValues.set(dependentId, response.data);\r\n    this.setState({ movableMainValues: newMovableMainValues });\r\n  };\r\n\r\n  private getOperatorActionItems = (element: any, idx: number, length: number) => {\r\n    const { labelIconOperatorDelete, labelIconOperatorSetting, labelIconOperatorUp, labelIconOperatorDown } = this.props;\r\n    const isFirst: boolean = idx == 0;\r\n    const isLast: boolean = idx == length - 1;\r\n    const upIndex = 2;\r\n    const downIndex = 3;\r\n\r\n    const items = [\r\n      {\r\n        key: 'Delete',\r\n        name: labelIconOperatorDelete,\r\n        iconProps: {\r\n          iconName: 'DeleteRows'\r\n        },\r\n        iconOnly: true,\r\n        onClick: () => this.showDeleteDialog(element.id),\r\n        style: { backgroundColor: '#fff' }\r\n      },\r\n      {\r\n        key: 'Settings',\r\n        name: labelIconOperatorSetting,\r\n        iconProps: {\r\n          iconName: 'Settings'\r\n        },\r\n        iconOnly: true,\r\n        onClick: () => this.onShowSettingsPanel(element),\r\n        style: { backgroundColor: '#fff' }\r\n      },\r\n      {\r\n        key: 'Up',\r\n        name: labelIconOperatorUp,\r\n        iconProps: {\r\n          iconName: 'Up'\r\n        },\r\n        iconOnly: true,\r\n        onClick: () => this.movePropertyUp(element.id),\r\n        style: { backgroundColor: '#fff' }\r\n      },\r\n      {\r\n        key: 'Down',\r\n        name: labelIconOperatorDown,\r\n        iconProps: {\r\n          iconName: 'Down'\r\n        },\r\n        iconOnly: true,\r\n        onClick: () => this.movePropertyDown(element.id),\r\n        style: { backgroundColor: '#fff' }\r\n      }\r\n    ];\r\n\r\n    if (isFirst || isLast) {\r\n      const removeIndex = isFirst ? upIndex : downIndex;\r\n      items.splice(removeIndex, 1);\r\n    }\r\n\r\n    return items;\r\n  };\r\n\r\n  private getFormCommandBarItems = (id: any) => {\r\n    const { labelCmdBarBtnSave, labelCmdBarBtnEdit, labelCmdBarBtnCancel } = this.props;\r\n\r\n    const formCommandBarItems = [\r\n      {\r\n        key: 'Save',\r\n        name: labelCmdBarBtnSave,\r\n        iconProps: {\r\n          iconName: 'Save'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Edit',\r\n        name: labelCmdBarBtnEdit,\r\n        iconProps: {\r\n          iconName: 'Edit'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Cancel',\r\n        name: labelCmdBarBtnCancel,\r\n        iconProps: {\r\n          iconName: 'Cancel'\r\n        },\r\n        onClick: () => this.props.onCancel()\r\n      }\r\n    ];\r\n\r\n    const removeIdx = id ? 0 : 1;\r\n    formCommandBarItems.splice(removeIdx, 1);\r\n\r\n    return formCommandBarItems;\r\n  };\r\n\r\n  private getFormCommandBarFarItems = () => {\r\n    const { labelCmdBarFarBtnAdd, labelCmdBarFarBtnReset, labelCmdBarFarBtnResults, allowDisplayProperties, allowMenus } = this.props;\r\n    const displaycommandsIndex = 2;\r\n    const menuCommandsIndex = 3;\r\n\r\n    const commands = [\r\n      {\r\n        key: 'Add Property',\r\n        name: labelCmdBarFarBtnAdd,\r\n        iconProps: {\r\n          iconName: 'Add'\r\n        },\r\n        onClick: () => this.onShowAddPropertiesPanel(true)\r\n      },\r\n      {\r\n        key: 'Reset',\r\n        name: labelCmdBarFarBtnReset,\r\n        iconProps: {\r\n          iconName: 'Refresh'\r\n        },\r\n        onClick: () => this.showResetDialog()\r\n      },\r\n      {\r\n        key: 'Display Results',\r\n        name: labelCmdBarFarBtnResults,\r\n        iconProps: {\r\n          iconName: 'ShowResults'\r\n        },\r\n        onClick: () => this.onShowDisplayPropertiesPanel()\r\n      },\r\n      {\r\n        key: 'Add Menu',\r\n        name: 'Add Menu',\r\n        iconProps: {\r\n          iconName: 'CollapseMenu'\r\n        },\r\n        onClick: () => this.onShowMenusPanel(true)\r\n      }\r\n    ];\r\n\r\n    if (!allowDisplayProperties) {\r\n      commands.splice(displaycommandsIndex, 1);\r\n    }\r\n\r\n    if (!allowMenus) {\r\n      commands.splice(menuCommandsIndex, 1);\r\n    }\r\n\r\n    return commands;\r\n  };\r\n\r\n  private onBuildPropertiesColumns = () => {\r\n    return [\r\n      {\r\n        key: 'Property',\r\n        name: 'Property',\r\n        fieldName: 'text',\r\n        minWidth: 50,\r\n        maxWidth: 70,\r\n        isRowHeader: true,\r\n        isResizable: false,\r\n        isSorted: true,\r\n        isSortedDescending: false,\r\n        sortAscendingAriaLabel: 'Sorted A to Z',\r\n        sortDescendingAriaLabel: 'Sorted Z to A',\r\n        data: 'string',\r\n        isPadded: true\r\n      }\r\n    ];\r\n  };\r\n\r\n  private onBuildMenusColumns = () => {\r\n    return [\r\n      {\r\n        key: 'Name',\r\n        name: 'Menu',\r\n        fieldName: 'name',\r\n        minWidth: 50,\r\n        maxWidth: 100,\r\n        isRowHeader: true,\r\n        isResizable: false,\r\n        isSorted: true,\r\n        isSortedDescending: false,\r\n        sortAscendingAriaLabel: 'Sorted A to Z',\r\n        sortDescendingAriaLabel: 'Sorted Z to A',\r\n        data: 'string',\r\n        isPadded: true\r\n      },\r\n      {\r\n        key: 'Description',\r\n        name: 'Description',\r\n        fieldName: 'description',\r\n        minWidth: 150,\r\n        maxWidth: 200,\r\n        isRowHeader: true,\r\n        isResizable: false,\r\n        isSorted: true,\r\n        isSortedDescending: false,\r\n        sortAscendingAriaLabel: 'Sorted A to Z',\r\n        sortDescendingAriaLabel: 'Sorted Z to A',\r\n        data: 'string',\r\n        isPadded: true\r\n      }\r\n    ];\r\n  };\r\n\r\n  private getFieldTypeForProperty = (id: number): any => {\r\n    const index = this.state.fieldProperties.findIndex(p => Number(p.key) === Number(id));\r\n    const item = this.state.fieldProperties[index];\r\n    return item\r\n      ? {\r\n          id: item.key,\r\n          value: item.text,\r\n          selected: true\r\n        }\r\n      : {};\r\n  };\r\n\r\n  private getOperationsForProperty = (id: number, operations: any[]): any[] => {\r\n    const propertyOperations: any[] = [];\r\n\r\n    operations.forEach((obj: any, key: number) => {\r\n      const operId = Number(obj.key);\r\n      const operation = {\r\n        id: operId,\r\n        value: obj.text,\r\n        selected: operId == id ? true : false\r\n      };\r\n      propertyOperations.push(operation);\r\n    });\r\n\r\n    return propertyOperations;\r\n  };\r\n\r\n  private getDynamicTranslationInternal = (key: string): string => {\r\n    const { getDynamicTranslation } = this.props;\r\n    return getDynamicTranslation ? getDynamicTranslation(key) : key;\r\n  };\r\n\r\n  private openConfirmMainChange = (): void => {\r\n    const { properties, movableMainValues } = this.state;\r\n    let hasMovableValues = false;\r\n\r\n    movableMainValues.forEach((values: IMovableOptionsListElement[], key: number) => {\r\n      for (let value of values) {\r\n        if (value.selected) {\r\n          hasMovableValues = true;\r\n          break;\r\n        }\r\n      }\r\n    });\r\n\r\n    const hasPropertiesElements = properties.length > 0 || !this.checkIfCanOpenDisplayProperties() || hasMovableValues;\r\n\r\n    if (hasPropertiesElements) {\r\n      this.setState({ hideConfirmMainChange: false });\r\n    }\r\n  };\r\n\r\n  private validate = (): boolean => {\r\n    this.setState({ validateMainFieldsError: undefined, validatePropertiesFieldsError: false, validateDisplayPropertiesError: false });\r\n    const isValidMainFields = this.validateMainFields();\r\n    const isValidPropertiesFields = this.validatePropertiesFields();\r\n    const isValidDisplayProperties = this.validateDisplayProperties();\r\n    return isValidMainFields && isValidPropertiesFields && isValidDisplayProperties;\r\n  };\r\n\r\n  private validatePropertiesFields = (): boolean => {\r\n    const isValid = this.result.properties.size > 0;\r\n\r\n    if (!isValid) {\r\n      this.setState({ validatePropertiesFieldsError: true });\r\n      this.delayedExecution(this.closePropertiesFieldsMessage);\r\n    }\r\n    return isValid;\r\n  };\r\n\r\n  private validateDisplayProperties = (): boolean => {\r\n    const { allowDisplayProperties } = this.props;\r\n    if (!allowDisplayProperties) {\r\n      return true;\r\n    }\r\n    const isValid = this.result.displayProperties.length > 0;\r\n\r\n    if (!isValid) {\r\n      this.setState({ validateDisplayPropertiesError: true });\r\n      this.delayedExecution(this.closeDisplayPropertiesMessage);\r\n    }\r\n    return isValid;\r\n  };\r\n\r\n  private validateMainFields = (checkInput: boolean = true): boolean => {\r\n    let invalid: string[] = [];\r\n\r\n    if (this.result === null) {\r\n      return false;\r\n    }\r\n\r\n    const { main } = this.state;\r\n    let isValid = true;\r\n\r\n    this.result.main.forEach((row: ITemplateAdminMainRow, key: number) => {\r\n      const index = main.findIndex(p => p.id === row.id);\r\n      const element = main[index];\r\n\r\n      const isInputFied = element.field === FieldTypeEnum.INPUT || element.field === FieldTypeEnum.DATEPICKER;\r\n      const needToCheckInput = checkInput && isInputFied;\r\n\r\n      if (element.required) {\r\n        if (!isInputFied || needToCheckInput) {\r\n          const isValid = row.values && row.values.length > 0;\r\n          if (!isValid) {\r\n            invalid.push(row.name);\r\n          }\r\n        }\r\n      }\r\n    });\r\n\r\n    if (invalid.length > 0) {\r\n      const errorsAsString = invalid.map((error: string) => error).join(' | ');\r\n      this.setState({ validateMainFieldsError: `[ ${errorsAsString} ]` });\r\n      isValid = false;\r\n      this.delayedExecution(this.closeMainFieldsMessage);\r\n    }\r\n\r\n    return isValid;\r\n  };\r\n\r\n  private onSubmit = (): void => {\r\n    const { id, onSubmitSuccess, onSubmitError } = this.props;\r\n\r\n    if (!this.validate()) {\r\n      return;\r\n    }\r\n\r\n    let main: ITemplateAdminMainRow[] = [];\r\n    let properties: ITemplateAdminPropertiesRow[] = [];\r\n\r\n    this.result.main.forEach((row: ITemplateAdminMainRow, key: number) => {\r\n      main.push(row);\r\n    });\r\n\r\n    this.result.properties.forEach((row: ITemplateAdminPropertiesRow, key: number) => {\r\n      row.propertyType = this.getFieldTypeForProperty(row.propertyType);\r\n      row.operations = this.getOperationsForProperty(row.selectedOperation, row.operations);\r\n      properties.push(row);\r\n    });\r\n\r\n    this.logResult(this.result);\r\n\r\n    const jsonResult = JSON.stringify({\r\n      id: this.result.id,\r\n      name: this.result.name,\r\n      main: main,\r\n      properties: properties,\r\n      displayProperties: this.result.displayProperties,\r\n      menuId: this.result.menuId\r\n    });\r\n\r\n    const method = id ? 'post' : 'put';\r\n    const url = id ? `${this.url}/${id}` : this.url;\r\n\r\n    console.log('Data Submited to server by', method, jsonResult);\r\n\r\n    Axios.request({\r\n      url: url,\r\n      method: method,\r\n      data: jsonResult,\r\n      headers: {\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json'\r\n      }\r\n    })\r\n      .then(response => {\r\n        onSubmitSuccess(response.data);\r\n      })\r\n      .catch(error => onSubmitError(error));\r\n  };\r\n\r\n  private getSelectedKeys = (values: any[]): any => {\r\n    let keys = [];\r\n\r\n    for (let option of values) {\r\n      if (option.selected) {\r\n        keys.push(option.key);\r\n      }\r\n    }\r\n    return keys;\r\n  };\r\n\r\n  private getSelectedKey = (values: any[]): any => {\r\n    let key = 0;\r\n\r\n    for (let option of values) {\r\n      if (option.selected) {\r\n        key = option.key;\r\n        break;\r\n      }\r\n    }\r\n    return key;\r\n  };\r\n\r\n  private delayedExecution = (callback: any): void => {\r\n    setTimeout(callback, this.delayedTimeout);\r\n  };\r\n\r\n  private closeMainFieldsMessage = (): void => {\r\n    this.setState({ validateMainFieldsError: undefined });\r\n  };\r\n\r\n  private closePropertiesFieldsMessage = (): void => {\r\n    this.setState({ validatePropertiesFieldsError: false });\r\n  };\r\n\r\n  private closeDisplayPropertiesMessage = (): void => {\r\n    this.setState({ validateDisplayPropertiesError: false });\r\n  };\r\n\r\n  private logResult = (result: ITemplateAdminFormObject): void => {\r\n    if (result === null) {\r\n      console.log('result empty');\r\n      return;\r\n    }\r\n\r\n    let msg = '\\n\\n------------------------\\n';\r\n    msg += '      Form Values       \\n';\r\n    msg += '------------------------';\r\n    msg += '\\nId:' + result.id;\r\n    msg += '\\nName:' + result.name;\r\n    var displayMsg = '\\nDisplay Properties:\\n';\r\n    result.displayProperties.forEach(element => {\r\n      displayMsg += `\\tkey=${element.key}; name=${element.text};isSystemField=${element.isSystemField}\\n`;\r\n    });\r\n    msg += displayMsg;\r\n    msg += '\\nMenu ID: ' + result.menuId;\r\n    msg += '\\n------------------------\\n';\r\n    msg += '\\n Main Values';\r\n    msg += '\\n------------------------';\r\n\r\n    result.main.forEach((row: ITemplateAdminMainRow, key: number) => {\r\n      msg += '\\n   ID: ' + row.id + '\\n';\r\n      msg += '\\n   Name: ' + row.name + '\\n';\r\n\r\n      let valuesMsg = '   Values:\\n';\r\n      row.values.forEach((field: IFieldValue, key: number) => {\r\n        valuesMsg += `\\t${field.id};${field.value}\\n`;\r\n      });\r\n      msg += valuesMsg;\r\n      msg += '------------------------';\r\n    });\r\n\r\n    msg += '\\n------------------------\\n';\r\n    msg += '\\n Properties Values';\r\n    msg += '\\n------------------------';\r\n\r\n    result.properties.forEach((row: ITemplateAdminPropertiesRow, key: number) => {\r\n      msg += '\\n   ID: ' + row.id + '\\n';\r\n      msg += '\\n   Name: ' + row.name + '\\n';\r\n      msg += '\\n   System Field: ' + row.isSystemField + '\\n';\r\n\r\n      let valuesMsg = '   Values:\\n';\r\n      row.values.forEach((field: IFieldValue, key: number) => {\r\n        valuesMsg += `\\t${field.id};${field.value}\\n`;\r\n      });\r\n      msg += valuesMsg;\r\n      msg += '------------------------\\n\\n';\r\n\r\n      let settingsMsg = '   Operations:\\n';\r\n      settingsMsg += `\\tProperty Type: ${row.propertyType.id}:${row.propertyType.value}\\n`;\r\n\r\n      row.operations.forEach((operation: any, key: number) => {\r\n        settingsMsg += `\\tid: ${operation.id} => ${operation.value} : ${operation.selected}\\n`;\r\n      });\r\n      msg += settingsMsg;\r\n      msg += '------------------------';\r\n    });\r\n\r\n    msg += '\\n\\n';\r\n    console.log(msg);\r\n  };\r\n}\r\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { TemplateAdminFormBase } from './TemplateAdminForm.base';\r\nimport { ITemplateAdminFormProps, ITemplateAdminFormStyleProps, ITemplateAdminFormStyles } from './TemplateAdminForm.types';\r\nimport { getStyles } from './TemplateAdminForm.styles';\r\n\r\nexport const TemplateAdminForm: React.StatelessComponent<ITemplateAdminFormProps> = styled<\r\n  ITemplateAdminFormProps,\r\n  ITemplateAdminFormStyleProps,\r\n  ITemplateAdminFormStyles\r\n>(TemplateAdminFormBase, getStyles);\r\n","import { ITemplateAdminFormStyleProps, ITemplateAdminFormStyles } from './TemplateAdminForm.types';\r\n\r\nexport function getStyles(props: ITemplateAdminFormStyleProps): ITemplateAdminFormStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceTemplateAdminForm', {}, className]\r\n  };\r\n}\r\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return $split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = regexpExec.call(separatorCopy, string)) {\n        lastIndex = separatorCopy[LAST_INDEX];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n    };\n  } else {\n    internalSplit = $split;\n  }\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = defined(this);\n      var splitter = separator == undefined ? undefined : separator[SPLIT];\n      return splitter !== undefined\n        ? splitter.call(separator, O, limit)\n        : internalSplit.call(String(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (regexp, limit) {\n      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (SUPPORTS_Y ? 'y' : 'g');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = SUPPORTS_Y ? q : 0;\n        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n        var e;\n        if (\n          z === null ||\n          (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          A.push(S.slice(p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            A.push(z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      A.push(S.slice(p));\n      return A;\n    }\n  ];\n});\n","import { ITheme, IStyle } from 'office-ui-fabric-react/lib/Styling';\r\n\r\nimport { IStyleFunctionOrObject } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { IconProp, IconLookup, IconName } from '@fortawesome/fontawesome-svg-core';\r\n\r\nexport interface IQuickButtonFormProps {\r\n  url: string;\r\n  id?: number;\r\n  title?: string;\r\n  labelCmdBarBtnSave?: string;\r\n  labelCmdBarBtnEdit?: string;\r\n  labelCmdBarBtnCancel?: string;\r\n  labelFormTitleName?: string;\r\n  labelFormTitleTemplate?: string;\r\n  labelFormTitleIcon?: string;\r\n  styles?: IStyleFunctionOrObject<IQuickButtonFormStyleProps, IQuickButtonFormStyles>;\r\n  theme?: ITheme;\r\n  className?: string;\r\n  onSubmitSuccess: (response: any) => void;\r\n  onSubmitError: (error: any) => void;\r\n  onCancel: () => any;\r\n}\r\n\r\nexport interface IQuickButtonFormStyleProps {\r\n  theme: ITheme;\r\n  className?: string;\r\n}\r\n\r\nexport interface IQuickButtonFormStyles {\r\n  root?: IStyle;\r\n}\r\n\r\nexport interface IQuickButtonFormResult {\r\n  id?: number;\r\n  name: string;\r\n  template: string | number;\r\n  icon: string;\r\n}\r\n\r\nexport function getFAIcon(name?: string): IconProp {\r\n  if (name) {\r\n    const cleanIcon = name.trim();\r\n    const splitIcon = cleanIcon.split(' ');\r\n    if (splitIcon.length > 1) {\r\n      return { prefix: splitIcon[0], iconName: splitIcon[1] } as IconLookup;\r\n    } else {\r\n      cleanIcon as IconName;\r\n    }\r\n  }\r\n\r\n  return name as IconName;\r\n}\r\n","import * as React from 'react';\r\n\r\nimport Axios from 'axios';\r\n\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport {\r\n  IQuickButtonFormProps,\r\n  IQuickButtonFormStyleProps,\r\n  IQuickButtonFormStyles /* IQuickButtonFormResult */,\r\n  getFAIcon\r\n} from './QuickButtonForm.types';\r\n\r\nimport { Title } from '../Title';\r\n\r\nimport './QuickButtonForm.css';\r\n\r\nconst getClassNames = classNamesFunction<IQuickButtonFormStyleProps, IQuickButtonFormStyles>();\r\n\r\nexport interface IQuickButtonFormState {\r\n  id?: number;\r\n  name?: string;\r\n  selectedTemplateKey?: number;\r\n  icon?: string;\r\n  templates: any[];\r\n  error: any;\r\n}\r\n\r\nexport class QuickButtonFormBase extends React.PureComponent<IQuickButtonFormProps, IQuickButtonFormState> {\r\n  //private result: IQuickButtonFormResult = { name: '', template: '', icon: '' };\r\n  public static defaultProps = {\r\n    labelCmdBarBtnSave: 'Save',\r\n    labelCmdBarBtnEdit: 'Edit',\r\n    labelCmdBarBtnCancel: 'Cancel',\r\n    labelFormTitleName: 'Button Label',\r\n    labelFormTitleTemplate: 'Search Template',\r\n    labelFormTitleIcon: 'Name of Icon'\r\n  };\r\n\r\n  constructor(props: IQuickButtonFormProps) {\r\n    super(props);\r\n    this.state = {\r\n      id: this.props.id,\r\n      name: '',\r\n      templates: [],\r\n      icon: '',\r\n      selectedTemplateKey: undefined,\r\n      error: undefined\r\n    };\r\n    this.onSubmit = this.onSubmit.bind(this);\r\n  }\r\n\r\n  public componentDidMount() {\r\n    this.init();\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IQuickButtonFormProps) {\r\n    if (this.props.id !== prevProps.id) {\r\n      this.init();\r\n    }\r\n  }\r\n\r\n  public componentDidMountNew() {\r\n    const { url } = this.props;\r\n    const templatesUrl = `${url}/templates`;\r\n\r\n    this.loadTemplates(templatesUrl);\r\n  }\r\n\r\n  private init() {\r\n    const { id } = this.props;\r\n    if (id) {\r\n      this.componentDidMountEdit();\r\n    } else {\r\n      this.componentDidMountNew();\r\n    }\r\n  }\r\n\r\n  private loadTemplates = (url: string, selectedId?: any) => {\r\n    Axios.get(url)\r\n      .then(response => {\r\n        const values: any[] = [];\r\n        response.data.data.forEach((element: any) => {\r\n          const isSelected = selectedId ? element.id === selectedId : false;\r\n          const value = { key: element.id, text: element.name, selected: isSelected };\r\n          values.push(value);\r\n        });\r\n        this.setState({\r\n          selectedTemplateKey: selectedId,\r\n          templates: values\r\n        });\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n  };\r\n\r\n  public componentDidMountEdit() {\r\n    const { url, id } = this.props;\r\n    const editUrl = `${url}/quickbuttons/${id}`;\r\n    const templatesUrl = `${url}/templates`;\r\n\r\n    console.log(editUrl);\r\n\r\n    Axios.get(editUrl)\r\n      .then(response => {\r\n        /*         this.result.name = response.data.name;\r\n        this.result.id = response.data.id;\r\n        this.result.icon = response.data.icon;\r\n        this.result.template = response.data.template; */\r\n\r\n        this.setState(\r\n          {\r\n            name: response.data.name,\r\n            id: response.data.id,\r\n            icon: response.data.icon\r\n          },\r\n          () => this.loadTemplates(templatesUrl, response.data.template)\r\n        );\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const { className, styles, theme, id, title, labelFormTitleName, labelFormTitleIcon, labelFormTitleTemplate } = this.props;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n    const { name, templates, icon, selectedTemplateKey } = this.state;\r\n    const titleFull = title ? (name ? `${title} [${name}]` : title) : '';\r\n\r\n    return (\r\n      <Fabric className={`ms-Grid ${classNames.root}`}>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n            <CommandBar items={this.getFormCommandBarItems(id)} />\r\n          </div>\r\n        </div>\r\n        <div className=\"ms-Grid-row qb-nl-lg\">\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n        </div>\r\n\r\n        {title && (\r\n          <div className=\"ms-Grid-row\">\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n              <Title title={titleFull} icon={true} />\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm10 ms-md10 ms-lg10\">\r\n            <div className=\"ms-Grid\">\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                  <TextField\r\n                    key=\"TemplateName\"\r\n                    value={name}\r\n                    label={labelFormTitleName}\r\n                    required\r\n                    onChange={(e, value) => {\r\n                      /*  this.result.name = e.target.value; */\r\n                      this.setState({ name: value });\r\n                    }}\r\n                  />\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                  <Dropdown\r\n                    key=\"TemplatesDropdown\"\r\n                    options={templates}\r\n                    label={labelFormTitleTemplate}\r\n                    required={true}\r\n                    onChange={(event, option?: IDropdownOption) => {\r\n                      //this.result.template = option.key;\r\n                      this.setState({ selectedTemplateKey: option!.key as number });\r\n                    }}\r\n                    defaultSelectedKey={selectedTemplateKey}\r\n                  />\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                  <TextField\r\n                    key=\"IconName\"\r\n                    value={icon}\r\n                    label={labelFormTitleIcon}\r\n                    required\r\n                    onChange={(e, icon) => {\r\n                      // this.result.icon = icon || '';\r\n                      this.setState({ icon: icon });\r\n                    }}\r\n                  />\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm2 ms-md2 ms-lg2 icon-preview-col\">\r\n            <FontAwesomeIcon className=\"icon-preview\" icon={getFAIcon(icon)} />\r\n          </div>\r\n        </div>\r\n      </Fabric>\r\n    );\r\n  }\r\n\r\n  private getFormCommandBarItems = (id: any) => {\r\n    const { labelCmdBarBtnSave, labelCmdBarBtnEdit, labelCmdBarBtnCancel } = this.props;\r\n\r\n    const formCommandBarItems = [\r\n      {\r\n        key: 'Save',\r\n        name: labelCmdBarBtnSave,\r\n        iconProps: {\r\n          iconName: 'Save'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Edit',\r\n        name: labelCmdBarBtnEdit,\r\n        iconProps: {\r\n          iconName: 'Edit'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Cancel',\r\n        name: labelCmdBarBtnCancel,\r\n        iconProps: {\r\n          iconName: 'Cancel'\r\n        },\r\n        onClick: () => this.props.onCancel()\r\n      }\r\n    ];\r\n\r\n    const removeIdx = id ? 0 : 1;\r\n    formCommandBarItems.splice(removeIdx, 1);\r\n\r\n    return formCommandBarItems;\r\n  };\r\n\r\n  private logResult = () => {\r\n    let msg = '\\n----------------------';\r\n    msg += '\\n Quick Button form Details';\r\n    msg += '\\n----------------------';\r\n    msg += '\\n';\r\n    if (this.state.id) {\r\n      msg += `\\n\\tId: ${this.state.id}`;\r\n    }\r\n\r\n    msg += `\\n\\tName: ${this.state.name}`;\r\n    msg += `\\n\\tTemplate ID: ${this.state.selectedTemplateKey}`;\r\n    msg += `\\n\\tIcon: ${this.state.icon}`;\r\n    msg += '\\n----------------------';\r\n\r\n    console.log(msg);\r\n  };\r\n\r\n  private onSubmit() {\r\n    const { id, url, onSubmitSuccess, onSubmitError } = this.props;\r\n\r\n    if (!this.state.name || !this.state.selectedTemplateKey || !this.state.icon) {\r\n      console.log('result empty');\r\n      return;\r\n    }\r\n\r\n    this.logResult();\r\n\r\n    const jsonResult = JSON.stringify({\r\n      id: this.state.id,\r\n      name: this.state.name,\r\n      template: this.state.selectedTemplateKey,\r\n      icon: this.state.icon\r\n    });\r\n\r\n    const method = id ? 'post' : 'put';\r\n    const apiUrl = id ? `${url}/quickbuttons/${id}` : `${url}/quickbuttons`;\r\n\r\n    console.log('Data Submited to server by', method, jsonResult);\r\n\r\n    Axios.request({\r\n      url: apiUrl,\r\n      method: method,\r\n      data: jsonResult,\r\n      headers: {\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json'\r\n      }\r\n    })\r\n      .then(response => {\r\n        onSubmitSuccess(response.data);\r\n      })\r\n      .catch(error => onSubmitError(error));\r\n  }\r\n}\r\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { QuickButtonFormBase } from './QuickButtonForm.base';\r\nimport { IQuickButtonFormProps, IQuickButtonFormStyleProps, IQuickButtonFormStyles } from './QuickButtonForm.types';\r\nimport { getStyles } from './QuickButtonForm.styles';\r\n\r\nexport const QuickButtonForm: React.StatelessComponent<IQuickButtonFormProps> = styled<\r\n  IQuickButtonFormProps,\r\n  IQuickButtonFormStyleProps,\r\n  IQuickButtonFormStyles\r\n>(QuickButtonFormBase, getStyles);\r\n","import { IQuickButtonFormStyleProps, IQuickButtonFormStyles } from './QuickButtonForm.types';\r\n\r\nexport function getStyles(props: IQuickButtonFormStyleProps): IQuickButtonFormStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceQuickButtonForm', {}, className]\r\n  };\r\n}\r\n","import * as React from 'react';\r\nimport { BaseComponent, classNamesFunction, getId, inputProperties, getNativeProps } from '../../Utilities';\r\nimport { IToggleProps, IToggle, IToggleStyleProps, IToggleStyles } from './Toggle.types';\r\nimport { Label } from '../../Label';\r\nimport { KeytipData } from '../../KeytipData';\r\n\r\nexport interface IToggleState {\r\n  checked: boolean;\r\n}\r\n\r\nconst getClassNames = classNamesFunction<IToggleStyleProps, IToggleStyles>();\r\n\r\nexport class ToggleBase extends BaseComponent<IToggleProps, IToggleState> implements IToggle {\r\n  private _id: string;\r\n  private _toggleButton = React.createRef<HTMLButtonElement>();\r\n\r\n  constructor(props: IToggleProps) {\r\n    super(props);\r\n\r\n    this._warnMutuallyExclusive({\r\n      checked: 'defaultChecked'\r\n    });\r\n\r\n    this._warnDeprecations({\r\n      onAriaLabel: 'ariaLabel',\r\n      offAriaLabel: undefined,\r\n      onChanged: 'onChange'\r\n    });\r\n\r\n    this.state = {\r\n      checked: !!(props.checked || props.defaultChecked)\r\n    };\r\n    this._id = props.id || getId('Toggle');\r\n  }\r\n\r\n  /**\r\n   * Gets the current checked state of the toggle.\r\n   */\r\n  public get checked(): boolean {\r\n    return this.state.checked;\r\n  }\r\n\r\n  public componentWillReceiveProps(newProps: IToggleProps): void {\r\n    if (newProps.checked !== undefined) {\r\n      this.setState({\r\n        checked: !!newProps.checked // convert null to false\r\n      });\r\n    }\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      as: RootType = 'div',\r\n      className,\r\n      theme,\r\n      disabled,\r\n      keytipProps,\r\n      label,\r\n      ariaLabel,\r\n      onAriaLabel,\r\n      offAriaLabel,\r\n      offText,\r\n      onText,\r\n      styles,\r\n      inlineLabel\r\n    } = this.props;\r\n    const { checked } = this.state;\r\n    const stateText = checked ? onText : offText;\r\n    const badAriaLabel = checked ? onAriaLabel : offAriaLabel;\r\n    const toggleNativeProps = getNativeProps(this.props, inputProperties, ['defaultChecked']);\r\n    const classNames = getClassNames(styles!, {\r\n      theme: theme!,\r\n      className,\r\n      disabled,\r\n      checked,\r\n      inlineLabel,\r\n      onOffMissing: !onText && !offText\r\n    });\r\n\r\n    const labelId = `${this._id}-label`;\r\n    const stateTextId = `${this._id}-stateText`;\r\n\r\n    // The following properties take priority for what Narrator should read:\r\n    // 1. ariaLabel\r\n    // 2. onAriaLabel (if checked) or offAriaLabel (if not checked)\r\n    // 3. label\r\n    // 4. onText (if checked) or offText (if not checked)\r\n    let labelledById: string | undefined = undefined;\r\n    if (!ariaLabel && !badAriaLabel) {\r\n      if (label) {\r\n        labelledById = labelId;\r\n      } else if (stateText) {\r\n        labelledById = stateTextId;\r\n      }\r\n    }\r\n\r\n    return (\r\n      <RootType className={classNames.root} hidden={(toggleNativeProps as any).hidden}>\r\n        {label && (\r\n          <Label htmlFor={this._id} className={classNames.label} id={labelId}>\r\n            {label}\r\n          </Label>\r\n        )}\r\n\r\n        <div className={classNames.container}>\r\n          <KeytipData keytipProps={keytipProps} ariaDescribedBy={(toggleNativeProps as any)['aria-describedby']} disabled={disabled}>\r\n            {(keytipAttributes: any): JSX.Element => (\r\n              <button\r\n                {...toggleNativeProps}\r\n                {...keytipAttributes}\r\n                className={classNames.pill}\r\n                disabled={disabled}\r\n                id={this._id}\r\n                type=\"button\"\r\n                role=\"switch\" // ARIA 1.1 definition; \"checkbox\" in ARIA 1.0\r\n                ref={this._toggleButton}\r\n                aria-disabled={disabled}\r\n                aria-checked={checked}\r\n                aria-label={ariaLabel ? ariaLabel : badAriaLabel}\r\n                data-is-focusable={true}\r\n                onChange={this._noop}\r\n                onClick={this._onClick}\r\n                aria-labelledby={labelledById}\r\n              >\r\n                <div className={classNames.thumb} />\r\n              </button>\r\n            )}\r\n          </KeytipData>\r\n          {stateText && (\r\n            <Label htmlFor={this._id} className={classNames.text} id={stateTextId}>\r\n              {stateText}\r\n            </Label>\r\n          )}\r\n        </div>\r\n      </RootType>\r\n    );\r\n  }\r\n\r\n  public focus() {\r\n    if (this._toggleButton.current) {\r\n      this._toggleButton.current.focus();\r\n    }\r\n  }\r\n\r\n  private _onClick = (ev: React.MouseEvent<HTMLElement>) => {\r\n    const { disabled, checked: checkedProp, onChange, onChanged, onClick } = this.props;\r\n    const { checked } = this.state;\r\n\r\n    if (!disabled) {\r\n      // Only update the state if the user hasn't provided it.\r\n      if (checkedProp === undefined) {\r\n        this.setState({\r\n          checked: !checked\r\n        });\r\n      }\r\n\r\n      if (onChange) {\r\n        onChange(ev, !checked);\r\n      }\r\n\r\n      if (onChanged) {\r\n        onChanged(!checked);\r\n      }\r\n\r\n      if (onClick) {\r\n        onClick(ev);\r\n      }\r\n    }\r\n  };\r\n\r\n  private _noop(): void {\r\n    /* no-op */\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { styled } from '../../Utilities';\r\nimport { ToggleBase } from './Toggle.base';\r\nimport { getStyles } from './Toggle.styles';\r\nimport { IToggleProps, IToggleStyleProps, IToggleStyles } from './Toggle.types';\r\n\r\nexport const Toggle: React.StatelessComponent<IToggleProps> = styled<IToggleProps, IToggleStyleProps, IToggleStyles>(\r\n  ToggleBase,\r\n  getStyles,\r\n  undefined,\r\n  { scope: 'Toggle' }\r\n);\r\n","import { HighContrastSelector, getFocusStyle } from '../../Styling';\r\nimport { IToggleStyleProps, IToggleStyles } from './Toggle.types';\r\n\r\nexport const getStyles = (props: IToggleStyleProps): IToggleStyles => {\r\n  const { theme, className, disabled, checked, inlineLabel, onOffMissing } = props;\r\n  const { semanticColors } = theme;\r\n  const pillUncheckedBackground = semanticColors.bodyBackground;\r\n  const pillCheckedBackground = semanticColors.inputBackgroundChecked;\r\n  const pillCheckedHoveredBackground = semanticColors.inputBackgroundCheckedHovered;\r\n  const pillCheckedDisabledBackground = semanticColors.disabledBodySubtext;\r\n  const thumbBackground = semanticColors.inputBorderHovered;\r\n  const thumbCheckedBackground = semanticColors.inputForegroundChecked;\r\n  const thumbDisabledBackground = semanticColors.disabledBodySubtext;\r\n  const thumbCheckedDisabledBackground = semanticColors.disabledBackground;\r\n  const pillBorderColor = semanticColors.smallInputBorder;\r\n  const pillBorderHoveredColor = semanticColors.inputBorderHovered;\r\n  const pillBorderDisabledColor = semanticColors.disabledBodySubtext;\r\n  const textDisabledColor = semanticColors.disabledText;\r\n\r\n  return {\r\n    root: [\r\n      'ms-Toggle',\r\n      checked && 'is-checked',\r\n      !disabled && 'is-enabled',\r\n      disabled && 'is-disabled',\r\n      theme.fonts.medium,\r\n      {\r\n        marginBottom: '8px'\r\n      },\r\n      inlineLabel && {\r\n        display: 'flex',\r\n        alignItems: 'center'\r\n      },\r\n      className\r\n    ],\r\n\r\n    label: [\r\n      'ms-Toggle-label',\r\n      disabled && {\r\n        color: textDisabledColor,\r\n        selectors: {\r\n          [HighContrastSelector]: {\r\n            color: 'GrayText'\r\n          }\r\n        }\r\n      },\r\n      inlineLabel &&\r\n        !onOffMissing && {\r\n          marginRight: 16\r\n        },\r\n      onOffMissing &&\r\n        inlineLabel && {\r\n          order: 1,\r\n          marginLeft: 16\r\n        }\r\n    ],\r\n\r\n    container: [\r\n      'ms-Toggle-innerContainer',\r\n      {\r\n        display: 'inline-flex',\r\n        position: 'relative'\r\n      }\r\n    ],\r\n\r\n    pill: [\r\n      'ms-Toggle-background',\r\n      getFocusStyle(theme, -3),\r\n      {\r\n        fontSize: '20px',\r\n        boxSizing: 'border-box',\r\n        width: '2.2em',\r\n        height: '1em',\r\n        borderRadius: '1em',\r\n        transition: 'all 0.1s ease',\r\n        borderWidth: '1px',\r\n        borderStyle: 'solid',\r\n        background: pillUncheckedBackground,\r\n        borderColor: pillBorderColor,\r\n        cursor: 'pointer',\r\n        display: 'flex',\r\n        alignItems: 'center',\r\n        padding: '0 .2em'\r\n      },\r\n      !disabled && [\r\n        !checked && {\r\n          selectors: {\r\n            ':hover': [\r\n              {\r\n                borderColor: pillBorderHoveredColor\r\n              }\r\n            ],\r\n            ':hover .ms-Toggle-thumb': [\r\n              {\r\n                selectors: {\r\n                  [HighContrastSelector]: {\r\n                    borderColor: 'Highlight'\r\n                  }\r\n                }\r\n              }\r\n            ]\r\n          }\r\n        },\r\n        checked && [\r\n          {\r\n            background: pillCheckedBackground,\r\n            borderColor: 'transparent',\r\n            justifyContent: 'flex-end'\r\n          },\r\n          {\r\n            selectors: {\r\n              ':hover': [\r\n                {\r\n                  backgroundColor: pillCheckedHoveredBackground,\r\n                  borderColor: 'transparent',\r\n                  selectors: {\r\n                    [HighContrastSelector]: {\r\n                      backgroundColor: 'Highlight'\r\n                    }\r\n                  }\r\n                }\r\n              ],\r\n              [HighContrastSelector]: {\r\n                backgroundColor: 'WindowText'\r\n              }\r\n            }\r\n          }\r\n        ]\r\n      ],\r\n      disabled && [\r\n        {\r\n          cursor: 'default'\r\n        },\r\n        !checked && [\r\n          {\r\n            borderColor: pillBorderDisabledColor\r\n          }\r\n        ],\r\n        checked && [\r\n          {\r\n            backgroundColor: pillCheckedDisabledBackground,\r\n            borderColor: 'transparent',\r\n            justifyContent: 'flex-end'\r\n          }\r\n        ]\r\n      ],\r\n      !disabled && {\r\n        selectors: {\r\n          '&:hover': {\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                borderColor: 'Highlight'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    ],\r\n\r\n    thumb: [\r\n      'ms-Toggle-thumb',\r\n      {\r\n        width: '.5em',\r\n        height: '.5em',\r\n        borderRadius: '.5em',\r\n        transition: 'all 0.1s ease',\r\n        backgroundColor: thumbBackground,\r\n        /* Border is added to handle high contrast mode for Firefox */\r\n        borderColor: 'transparent',\r\n        borderWidth: '.28em',\r\n        borderStyle: 'solid',\r\n        boxSizing: 'border-box'\r\n      },\r\n      !disabled &&\r\n        checked && [\r\n          {\r\n            backgroundColor: thumbCheckedBackground,\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                backgroundColor: 'Window',\r\n                borderColor: 'Window'\r\n              }\r\n            }\r\n          }\r\n        ],\r\n      disabled && [\r\n        !checked && [\r\n          {\r\n            backgroundColor: thumbDisabledBackground\r\n          }\r\n        ],\r\n        checked && [\r\n          {\r\n            backgroundColor: thumbCheckedDisabledBackground\r\n          }\r\n        ]\r\n      ]\r\n    ],\r\n\r\n    text: [\r\n      'ms-Toggle-stateText',\r\n      {\r\n        selectors: {\r\n          // Workaround: make rules more specific than Label rules.\r\n          '&&': {\r\n            padding: '0',\r\n            margin: '0 8px',\r\n            userSelect: 'none'\r\n          }\r\n        }\r\n      },\r\n      disabled && {\r\n        selectors: {\r\n          '&&': {\r\n            color: textDisabledColor,\r\n            selectors: {\r\n              [HighContrastSelector]: {\r\n                color: 'GrayText'\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    ]\r\n  };\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\n\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\n\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\n\r\nimport { Toggle } from 'office-ui-fabric-react/lib/Toggle';\r\n\r\nimport { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel';\r\n\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\n\r\nimport Axios from 'axios';\r\n\r\nimport update from 'immutability-helper';\r\n\r\nimport {\r\n  IMenusAdminFormProps,\r\n  IMenusAdminFormStyleProps,\r\n  IMenusAdminFormStyles,\r\n  IMenuCommand,\r\n  IMenusAdminFormResult\r\n} from './MenusAdminForm.types';\r\n\r\nimport { MovableOptionsList, IMovableOptionsListElement } from '../MovableOptionsList';\r\n\r\nimport { Title } from '../Title';\r\n\r\nimport './MenusAdminForm.css';\r\n\r\nconst getClassNames = classNamesFunction<IMenusAdminFormStyleProps, IMenusAdminFormStyles>();\r\n\r\nexport interface IMenusAdminFormState {\r\n  id: string;\r\n  name: string;\r\n  description: string;\r\n  existingCommands: IMenuCommand[];\r\n  movableCommands: IMovableOptionsListElement[];\r\n  previewItems: any[];\r\n  toggleTextMode: boolean;\r\n  showPanel: boolean;\r\n  editableCommand: any;\r\n  error: any;\r\n}\r\n\r\nexport class MenusAdminFormBase extends React.PureComponent<IMenusAdminFormProps, IMenusAdminFormState> {\r\n  public static defaultProps = {\r\n    labelFormId: 'ID',\r\n    labelFormName: 'Name',\r\n    labelFormDescription: 'Description',\r\n    labelFormCommand: 'Menu Item',\r\n    labelCmdBarBtnSave: 'Save',\r\n    labelCmdBarBtnEdit: 'Edit',\r\n    labelCmdBarBtnCancel: 'Cancel',\r\n    labelFormFieldset: 'Menu Preview',\r\n    labelToggleOn: 'Icon & Text',\r\n    labelToggleOff: 'Icon Only',\r\n    labelFormMenuItemId: 'ID',\r\n    labelFormMenuItemName: 'Name',\r\n    labelFormMenuItemIcon: 'Icon'\r\n  };\r\n  constructor(props: IMenusAdminFormProps) {\r\n    super(props);\r\n    this.state = {\r\n      id: this.props.id ? this.props.id : '',\r\n      name: '',\r\n      description: '',\r\n      existingCommands: [],\r\n      movableCommands: [],\r\n      previewItems: [],\r\n      toggleTextMode: false,\r\n      showPanel: false,\r\n      editableCommand: undefined,\r\n      error: undefined\r\n    };\r\n\r\n    this.getFormCommandBarItems = this.getFormCommandBarItems.bind(this);\r\n    this.changePreviewCommandBarMode = this.changePreviewCommandBarMode.bind(this);\r\n    this.onShowPanel = this.onShowPanel.bind(this);\r\n    this.onDismissPanel = this.onDismissPanel.bind(this);\r\n    this.editCommand = this.editCommand.bind(this);\r\n    this.changeEditableCommandIcon = this.changeEditableCommandIcon.bind(this);\r\n  }\r\n\r\n  public componentDidMount() {\r\n    this.init();\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IMenusAdminFormProps) {\r\n    if (this.props.id !== prevProps.id) {\r\n      this.init();\r\n    }\r\n  }\r\n  private init() {\r\n    const { id } = this.props;\r\n    if (id) {\r\n      this.componentDidMountEdit();\r\n    } else {\r\n      this.componentDidMountNew();\r\n    }\r\n  }\r\n\r\n  public componentDidMountNew() {\r\n    const { commands } = this.props;\r\n    const movableCommandsNew = this.itemsToIMovableOptionsListElements(commands);\r\n\r\n    this.setState({ movableCommands: movableCommandsNew, existingCommands: commands });\r\n  }\r\n\r\n  public componentDidMountEdit() {\r\n    const { url, id, commands } = this.props;\r\n    const editUrl = `${url}/menus/${id}`;\r\n\r\n    console.log('editUrl', editUrl);\r\n\r\n    Axios.get(editUrl)\r\n      .then(response => {\r\n        const data = response.data;\r\n        const selectedCommands: IMenuCommand[] = data.items;\r\n        const movableCommandsNew = this.itemsToIMovableOptionsListElements(commands, selectedCommands);\r\n        const previewItemsNew = this.getPreviewCommandBarItems(movableCommandsNew);\r\n\r\n        this.setState({\r\n          name: data.name,\r\n          description: data.description,\r\n          existingCommands: commands,\r\n          movableCommands: movableCommandsNew,\r\n          previewItems: previewItemsNew\r\n        });\r\n      })\r\n      .catch(error => this.setState({ error: error }));\r\n  }\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      className,\r\n      styles,\r\n      theme,\r\n      height,\r\n      labelFormId,\r\n      labelFormName,\r\n      labelFormDescription,\r\n      labelFormCommand,\r\n      title,\r\n      labelFormFieldset,\r\n      labelToggleOn,\r\n      labelToggleOff,\r\n      labelFormMenuItemId,\r\n      labelFormMenuItemName,\r\n      labelFormMenuItemIcon\r\n    } = this.props;\r\n    const { name, description, movableCommands, previewItems, toggleTextMode, showPanel, editableCommand, id } = this.state;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n    const titleFull = title ? (name ? `${title} [${name}]` : title) : '';\r\n\r\n    return (\r\n      <Fabric className={`ms-Grid ${classNames.root}`}>\r\n        <div className=\"ms-Grid-row\" style={{ paddingBottom: '15px' }}>\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12\">\r\n            <CommandBar items={this.getFormCommandBarItems(this.props.id)} />\r\n          </div>\r\n        </div>\r\n        {title && (\r\n          <div className=\"ms-Grid-row\">\r\n            <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n              <Title title={titleFull} icon={true} />\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm9 ms-md9 ms-lg9\">\r\n            <TextField\r\n              key=\"FormId\"\r\n              value={id}\r\n              label={labelFormId}\r\n              required\r\n              onBlur={e => {\r\n                this.setState({ id: e.target.value });\r\n              }}\r\n            />\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm9 ms-md9 ms-lg9\">\r\n            <TextField\r\n              key=\"FormName\"\r\n              value={name}\r\n              label={labelFormName}\r\n              required\r\n              onBlur={e => {\r\n                this.setState({ name: e.target.value });\r\n              }}\r\n            />\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm9 ms-md9 ms-lg9\">\r\n            <TextField\r\n              key=\"FormDescription\"\r\n              value={description}\r\n              label={labelFormDescription}\r\n              required\r\n              onBlur={e => {\r\n                this.setState({ description: e.target.value });\r\n              }}\r\n            />\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\" style={{ paddingBottom: '10px' }}>\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm9 ms-md9 ms-lg9\">\r\n            <fieldset style={{ borderWidth: 'thin', borderColor: '#fff' }}>\r\n              <legend>{labelFormFieldset}</legend>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm10 ms-md10 ms-lg10\">\r\n                  <CommandBar items={previewItems} />\r\n                </div>\r\n                <div className=\"ms-Grid-col ms-sm2 ms-md2 ms-lg2\" style={{ paddingTop: '5px', textAlign: 'right' }}>\r\n                  <Toggle\r\n                    defaultChecked={toggleTextMode}\r\n                    onText={labelToggleOn}\r\n                    offText={labelToggleOff}\r\n                    onChange={() => this.changePreviewCommandBarMode(toggleTextMode)}\r\n                  />\r\n                </div>\r\n              </div>\r\n            </fieldset>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\" style={{ paddingBottom: '20px' }}>\r\n          <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\" />\r\n        </div>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm9 ms-md9 ms-lg9\">\r\n            <MovableOptionsList\r\n              elements={movableCommands}\r\n              property={labelFormCommand}\r\n              height={height ? height : '400px'}\r\n              handleSwapChange={this.handleSwapChange}\r\n              handleMoveUpAndDownChange={this.handleSwapChange}\r\n            />\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\" />\r\n        </div>\r\n        {showPanel && (\r\n          <Panel key=\"ConfigButtonPanel\" isOpen={showPanel} type={PanelType.medium} onDismiss={this.onDismissPanel}>\r\n            <div className=\"ms-Grid\">\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                  <Title icon title={`Configure [${editableCommand.name}]`} />\r\n                </div>\r\n              </div>\r\n              <div className=\"ms-Grid-row\">\r\n                <div className=\"ms-Grid-col ms-sm9 ms-md9 ms-lg9\">\r\n                  <div className=\"ms-Grid\">\r\n                    <div className=\"ms-Grid-row\">\r\n                      <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                        <TextField key=\"CmdKey\" value={editableCommand.key} label={labelFormMenuItemId} disabled />\r\n                      </div>\r\n                    </div>\r\n                    <div className=\"ms-Grid-row\">\r\n                      <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                        <TextField key=\"CmdName\" value={editableCommand.name} label={labelFormMenuItemName} disabled />\r\n                      </div>\r\n                    </div>\r\n                    <div className=\"ms-Grid-row\">\r\n                      <div className=\"ms-Grid-col ms-sm12 ms-md12 ms-lg12\">\r\n                        <TextField\r\n                          key=\"CmdIcon\"\r\n                          value={editableCommand.iconProps.iconName}\r\n                          label={labelFormMenuItemIcon}\r\n                          required\r\n                          onBlur={e => {\r\n                            this.changeEditableCommandIcon(editableCommand, e.target.value);\r\n                          }}\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n                <div className=\"ms-Grid-col ms-sm3 ms-md3 ms-lg3\">\r\n                  <div className=\"menu-icon-preview\">\r\n                    <Icon iconName={editableCommand.iconProps.iconName} className=\"menu-icon-preview-col\" />\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </Panel>\r\n        )}\r\n      </Fabric>\r\n    );\r\n  }\r\n\r\n  private itemsToIMovableOptionsListElements = (\r\n    allCommands: IMenuCommand[],\r\n    existingCommands: IMenuCommand[] = []\r\n  ): IMovableOptionsListElement[] => {\r\n    const commands: IMovableOptionsListElement[] = [];\r\n\r\n    allCommands.forEach(element => {\r\n      const selected = existingCommands.some(({ id }) => id == element.id);\r\n      const mvElement: IMovableOptionsListElement = {\r\n        key: element.id,\r\n        text: element.name,\r\n        selected: selected,\r\n        icon: element.icon\r\n      };\r\n      commands.push(mvElement);\r\n    });\r\n\r\n    return commands;\r\n  };\r\n\r\n  private getPreviewCommandBarItems = (elements: IMovableOptionsListElement[]): any => {\r\n    const { toggleTextMode } = this.state;\r\n    const previewCmdbarItems: any[] = [];\r\n\r\n    elements.forEach(element => {\r\n      if (element.selected) {\r\n        const key = element.key;\r\n        const item = {\r\n          key: key,\r\n          name: element.text,\r\n          iconProps: {\r\n            iconName: element.icon\r\n          },\r\n          iconOnly: !toggleTextMode,\r\n          onClick: () => this.editCommand(key)\r\n        };\r\n        previewCmdbarItems.push(item);\r\n      }\r\n    });\r\n\r\n    return previewCmdbarItems;\r\n  };\r\n\r\n  private getFormCommandBarItems = (id: any) => {\r\n    const { labelCmdBarBtnSave, labelCmdBarBtnEdit, labelCmdBarBtnCancel } = this.props;\r\n\r\n    const formCommandBarItems = [\r\n      {\r\n        key: 'Save',\r\n        name: labelCmdBarBtnSave,\r\n        iconProps: {\r\n          iconName: 'Save'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Edit',\r\n        name: labelCmdBarBtnEdit,\r\n        iconProps: {\r\n          iconName: 'Edit'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Cancel',\r\n        name: labelCmdBarBtnCancel,\r\n        iconProps: {\r\n          iconName: 'Cancel'\r\n        },\r\n        onClick: () => this.props.onCancel()\r\n      }\r\n    ];\r\n\r\n    const removeIdx = id ? 0 : 1;\r\n    formCommandBarItems.splice(removeIdx, 1);\r\n\r\n    return formCommandBarItems;\r\n  };\r\n\r\n  private handleSwapChange = (elements: IMovableOptionsListElement[]): void => {\r\n    const { commands } = this.props;\r\n    const { existingCommands } = this.state;\r\n\r\n    const newExistingCommands: IMenuCommand[] = [];\r\n\r\n    elements.forEach(element => {\r\n      if (element.selected) {\r\n        const existingCommand: any = this.getElementOnArray(existingCommands, 'id', element.key);\r\n        const icon = existingCommand ? existingCommand.icon : element.icon;\r\n        const command: IMenuCommand = {\r\n          id: element.key,\r\n          name: element.text,\r\n          icon: icon\r\n        };\r\n        newExistingCommands.push(command);\r\n        element.icon = icon;\r\n      } else {\r\n        const originalCommand: any = this.getElementOnArray(commands, 'id', element.key);\r\n        element.icon = originalCommand.icon;\r\n      }\r\n    });\r\n\r\n    const previewItemsNew = this.getPreviewCommandBarItems(elements);\r\n    this.setState({ previewItems: previewItemsNew, existingCommands: newExistingCommands });\r\n  };\r\n\r\n  private changePreviewCommandBarMode = (mode: boolean): void => {\r\n    const { previewItems } = this.state;\r\n    const previewItemsNew: any[] = [];\r\n\r\n    previewItems.forEach(element => {\r\n      const item = {\r\n        key: element.key,\r\n        name: element.name,\r\n        iconProps: {\r\n          iconName: element.iconProps.iconName\r\n        },\r\n        iconOnly: mode,\r\n        onClick: () => this.editCommand(element.key)\r\n      };\r\n      previewItemsNew.push(item);\r\n    });\r\n\r\n    this.setState({ toggleTextMode: !mode, previewItems: previewItemsNew });\r\n  };\r\n\r\n  private onShowPanel = (): void => {\r\n    this.setState({ showPanel: true });\r\n  };\r\n\r\n  private onDismissPanel = (): void => {\r\n    this.setState({ showPanel: false });\r\n  };\r\n\r\n  private editCommand = (cmdKey: any): void => {\r\n    const { previewItems } = this.state;\r\n    const command: any = previewItems.find(({ key }) => key === cmdKey);\r\n    this.setState({ editableCommand: command }, () => this.onShowPanel());\r\n  };\r\n\r\n  private changeEditableCommandIcon = (editableCommand: any, icon: string): void => {\r\n    const { previewItems, existingCommands } = this.state;\r\n    const key = editableCommand.key;\r\n\r\n    const newEditableCommand = {\r\n      key: key,\r\n      name: editableCommand.name,\r\n      iconProps: {\r\n        iconName: icon\r\n      },\r\n      iconOnly: editableCommand.mode,\r\n      onClick: () => this.editCommand(key)\r\n    };\r\n\r\n    const previewIndex = previewItems.findIndex(p => p.key === key);\r\n    const command: any = previewItems[previewIndex];\r\n    command.iconProps.iconName = icon;\r\n    const newPreviewItems = update(previewItems, { [previewIndex]: { $set: command } });\r\n\r\n    const exCommandIndex = existingCommands.findIndex(p => p.id === key);\r\n    const exCommand: any = existingCommands[exCommandIndex];\r\n    exCommand.icon = icon;\r\n    const newExistingCommands = update(existingCommands, { [exCommandIndex]: { $set: exCommand } });\r\n\r\n    this.setState({ editableCommand: newEditableCommand, previewItems: newPreviewItems, existingCommands: newExistingCommands });\r\n  };\r\n\r\n  private getElementOnArray = (values: any[], id: string, key: string): any => {\r\n    const index = values.findIndex(p => p[id] === key);\r\n    return values[index];\r\n  };\r\n\r\n  private onSubmit = (): void => {\r\n    const { url, onSubmitSuccess, onSubmitError } = this.props;\r\n    const { name, description, toggleTextMode, previewItems, id } = this.state;\r\n\r\n    const items: IMenuCommand[] = [];\r\n\r\n    previewItems.forEach(element => {\r\n      const item: IMenuCommand = {\r\n        id: element.key,\r\n        name: element.name,\r\n        icon: element.iconProps.iconName\r\n      };\r\n      items.push(item);\r\n    });\r\n\r\n    const result: IMenusAdminFormResult = {\r\n      id: id,\r\n      name: name,\r\n      description: description,\r\n      textMode: toggleTextMode,\r\n      items: items\r\n    };\r\n\r\n    this.logResult(result);\r\n\r\n    const jsonResult = JSON.stringify(result);\r\n    const method = id ? 'post' : 'put';\r\n\r\n    console.log('Data Submited to server by', method, jsonResult);\r\n\r\n    Axios.request({\r\n      url: `${url}/menus`,\r\n      method: method,\r\n      data: jsonResult,\r\n      headers: {\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json'\r\n      }\r\n    })\r\n      .then(response => {\r\n        onSubmitSuccess(response.data);\r\n      })\r\n      .catch(error => onSubmitError(error));\r\n  };\r\n\r\n  private logResult = (result: IMenusAdminFormResult): void => {\r\n    let msg = '\\n\\n------------------------\\n';\r\n    msg += '      Form Values       \\n';\r\n    msg += '------------------------';\r\n    msg += '\\nId:' + result.id;\r\n    msg += '\\nName:' + result.name;\r\n    msg += '\\nDescription:' + result.description;\r\n    msg += '\\n------------------------\\n';\r\n    msg += '\\n Menu Items';\r\n    msg += '\\n------------------------';\r\n\r\n    result.items.forEach((row: IMenuCommand, key: number) => {\r\n      msg += '\\n   ID: ' + row.id + '\\n';\r\n      msg += '\\n   Name: ' + row.name + '\\n';\r\n      msg += '\\n   Icon: ' + row.icon + '\\n';\r\n      msg += '------------------------';\r\n    });\r\n\r\n    console.log(msg);\r\n  };\r\n}\r\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { MenusAdminFormBase } from './MenusAdminForm.base';\r\nimport { IMenusAdminFormProps, IMenusAdminFormStyleProps, IMenusAdminFormStyles } from './MenusAdminForm.types';\r\nimport { getStyles } from './MenusAdminForm.styles';\r\n\r\nexport const MenusAdminForm: React.StatelessComponent<IMenusAdminFormProps> = styled<\r\n  IMenusAdminFormProps,\r\n  IMenusAdminFormStyleProps,\r\n  IMenusAdminFormStyles\r\n>(MenusAdminFormBase, getStyles);\r\n","import { IMenusAdminFormStyleProps, IMenusAdminFormStyles } from './MenusAdminForm.types';\r\n\r\nexport function getStyles(props: IMenusAdminFormStyleProps): IMenusAdminFormStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceMenusAdminForm', {}, className]\r\n  };\r\n}\r\n","import { __assign } from 'tslib';\r\nexport const assign = __assign;\r\n","import * as React from 'react';\r\nimport { IStyle, mergeStyles } from '@uifabric/styling';\r\nimport { memoizeFunction } from '@uifabric/utilities';\r\nimport { assign } from './utilities';\r\nimport { IFactoryOptions } from './IComponent';\r\nimport {\r\n  ISlottableReactType,\r\n  ISlot,\r\n  ISlots,\r\n  ISlotDefinition,\r\n  ISlotFactory,\r\n  ISlotProps,\r\n  ISlotPropValue,\r\n  ISlotRenderer,\r\n  IDefaultSlotProps,\r\n  IProcessedSlotProps\r\n} from './ISlots';\r\n\r\n// TODO: Is getting only div props for 'root' slots is pretty limiting? Or is it exactly as it needs to be?\r\n//        Another example is getting Toggle state for `label` slot render functions. Should it get Toggle props instead?\r\n//        Needs more usage to rationalize the best approach. If we want component props, component props are passed\r\n//        as each slot as rendered and aren't available when getSlots is called. This would substantially change this approach.\r\n\r\n/**\r\n * This function is required for any module that uses slots.\r\n *\r\n * This function is a slot resolver that automatically evaluates slot functions to generate React elements.\r\n * A byproduct of this resolver is that it removes slots from the React hierarchy by bypassing React.createElement.\r\n *\r\n * To use this function on a per-file basis, use the jsx directive targeting withSlots.\r\n * This directive must be the FIRST LINE in the file to work correctly.\r\n * Usage of this pragma also requires withSlots import statement.\r\n *\r\n * See React.createElement\r\n */\r\n// Can't use typeof on React.createElement since it's overloaded. Approximate createElement's signature for now and widen as needed.\r\nexport function withSlots<P>(\r\n  type: ISlot<P> | React.SFC<P> | string,\r\n  props?: React.Attributes & P | null,\r\n  // tslint:disable-next-line:missing-optional-annotation\r\n  ...children: React.ReactNode[]\r\n): React.ReactElement<P> | JSX.Element | null {\r\n  const slotType = type as ISlot<P>;\r\n  if (slotType.isSlot) {\r\n    // TODO: There is something weird going on here with children embedded in props vs. rest args.\r\n    // Comment out these lines to see. Make sure this function is doing the right things.\r\n    const numChildren = React.Children.count(children);\r\n    if (numChildren === 0) {\r\n      return slotType(props);\r\n    }\r\n\r\n    // Since we are bypassing createElement, use React.Children.toArray to make sure children are properly assigned keys.\r\n    // TODO: should this be mutating? does React mutate children subprop with createElement?\r\n    // TODO: will toArray clobber existing keys?\r\n    // TODO: React generates warnings because it doesn't detect hidden member _store that is set in createElement.\r\n    //        Even children passed to createElement without keys don't generate this warning.\r\n    //        Is there a better way to prevent slots from appearing in hierarchy? toArray doesn't address root issue.\r\n    children = React.Children.toArray(children);\r\n\r\n    return slotType({ ...(props as any), children });\r\n  } else {\r\n    // TODO: Are there some cases where children should NOT be spread? Also, spreading reraises perf question.\r\n    //        Children had to be spread to avoid breaking KeytipData in Toggle.view:\r\n    //        react-dom.development.js:18931 Uncaught TypeError: children is not a function\r\n    //        Without spread, function child is a child array of one element\r\n    // TODO: is there a reason this can't be:\r\n    // return React.createElement.apply(this, arguments);\r\n    return React.createElement(type, props, ...children);\r\n  }\r\n}\r\n\r\n/**\r\n * This function creates factories that render ouput depending on the user ISlotProp props passed in.\r\n * @param ComponentType - Base component to render when not overridden by user props.\r\n * @param options - Factory options, including defaultProp value for shorthand prop mapping.\r\n * @returns ISlotFactory function used for rendering slots.\r\n */\r\nexport function createFactory<TProps>(\r\n  ComponentType: React.ComponentType<TProps>,\r\n  options: IFactoryOptions<TProps> = {}\r\n): ISlotFactory<TProps> {\r\n  const { defaultProp = 'children' } = options;\r\n\r\n  const result: ISlotFactory<TProps> = (componentProps, userProps, defaultStyles) => {\r\n    // If they passed in raw JSX, just return that.\r\n    if (React.isValidElement(userProps)) {\r\n      return userProps;\r\n    }\r\n\r\n    // If we're rendering a function, let the user resolve how to render given the original component and final args.\r\n    if (typeof userProps === 'function') {\r\n      const render: ISlotRenderer<TProps> = (slotRenderFunction, renderProps) => {\r\n        // TODO: _translateShorthand is returning TProps, so why is the finalProps cast required?\r\n        // TS isn't respecting the difference between props arg type and return type and instead treating both as ISlotPropValue.\r\n        let finalRenderProps = _translateShorthand(defaultProp, renderProps) as TProps;\r\n        finalRenderProps = _constructFinalProps(defaultStyles, componentProps, finalRenderProps);\r\n\r\n        return slotRenderFunction(ComponentType, finalRenderProps);\r\n      };\r\n      return userProps(render);\r\n    }\r\n\r\n    userProps = _translateShorthand(defaultProp, userProps);\r\n    // TODO: _translateShorthand is returning TProps, so why is the finalProps cast required?\r\n    // TS isn't respecting the difference between props arg type and return type and instead treating both as ISlotPropValue.\r\n    const finalProps = _constructFinalProps(defaultStyles, componentProps, userProps) as TProps;\r\n\r\n    return <ComponentType {...finalProps} />;\r\n  };\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * Default factory for components without explicit factories.\r\n */\r\nconst defaultFactory = memoizeFunction(type => createFactory(type));\r\n\r\n/**\r\n * This function generates slots that can be used in JSX given a definition of slots and their corresponding types.\r\n * @param userProps - Props as pass to component.\r\n * @param slots - Slot definition object defining the default slot component for each slot.\r\n * @returns A set of created slots that components can render in JSX.\r\n */\r\nexport function getSlots<TProps extends TSlots, TSlots extends ISlotProps<TProps, TSlots>>(\r\n  userProps: TProps,\r\n  slots: ISlotDefinition<Required<TSlots>>\r\n): ISlots<Required<TSlots>> {\r\n  const result: ISlots<Required<TSlots>> = {} as ISlots<Required<TSlots>>;\r\n\r\n  // userProps already has default props mixed in by createComponent. Recast here to gain typing for this function.\r\n  const mixedProps = userProps as TProps & IDefaultSlotProps<TSlots>;\r\n\r\n  for (const name in slots) {\r\n    if (slots.hasOwnProperty(name)) {\r\n      // This closure method requires the use of withSlots to prevent unnecessary rerenders. This is because React detects\r\n      //  each closure as a different component (since it is a new instance) from the previous one and then forces a rerender of the entire\r\n      //  slot subtree. For now, the only way to avoid this is to use withSlots, which bypasses the call to React.createElement.\r\n      const slot: ISlot<keyof TSlots> = (componentProps, ...args: any[]) => {\r\n        if (args.length > 0) {\r\n          // If React.createElement is being incorrectly used with slots, there will be additional arguments.\r\n          // We can detect these additional arguments and error on their presence.\r\n          throw new Error('Any module using getSlots must use withSlots. Please see withSlots javadoc for more info.');\r\n        }\r\n        return _renderSlot(\r\n          slots[name],\r\n          // TODO: this cast to any is hiding a relationship issue between the first two args\r\n          componentProps as any,\r\n          mixedProps[name],\r\n          // _defaultStyles should always be present, but a check for existence is added to make view tests easier to use.\r\n          mixedProps._defaultStyles && mixedProps._defaultStyles[name]\r\n        );\r\n      };\r\n      slot.isSlot = true;\r\n      result[name] = slot;\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * Helper function that constructs a props object when given shorthand props.\r\n */\r\nfunction _translateShorthand<TProps>(defaultProp: string, props: ISlotPropValue<TProps>): TProps {\r\n  if (typeof props === 'string' || typeof props === 'number' || typeof props === 'boolean') {\r\n    props = {\r\n      [defaultProp]: props as any\r\n    } as TProps;\r\n  }\r\n  return props;\r\n}\r\n\r\n/**\r\n * Helper function that constructs final styles and props given a series of props ordered by increasing priority.\r\n */\r\nfunction _constructFinalProps<TProps extends IProcessedSlotProps>(defaultStyles: IStyle, ...allProps: (TProps | undefined)[]): TProps {\r\n  const finalProps: TProps = {} as any;\r\n  const classNames: (string | undefined)[] = [];\r\n\r\n  for (const props of allProps) {\r\n    classNames.push(props && props.className);\r\n    assign(finalProps, ...(props as any));\r\n  }\r\n\r\n  finalProps.className = mergeStyles(defaultStyles, classNames);\r\n\r\n  return finalProps;\r\n}\r\n\r\n/**\r\n * Render a slot given component and user props. Uses component factory if available, otherwise falls back\r\n * to default factory.\r\n * @param ComponentType Factory component type.\r\n * @param componentProps The properties passed into slot from within the component.\r\n * @param userProps The user properties passed in from outside of the component.\r\n */\r\nfunction _renderSlot<TComponent extends ISlottableReactType<TProps>, TProps, TSlots>(\r\n  ComponentType: TComponent,\r\n  componentProps: TProps,\r\n  userProps: TProps,\r\n  defaultStyles: IStyle\r\n): JSX.Element {\r\n  if (ComponentType.create !== undefined) {\r\n    return ComponentType.create(componentProps, userProps, defaultStyles);\r\n  } else {\r\n    return defaultFactory(ComponentType)(componentProps, userProps, defaultStyles);\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { concatStyleSets, IStyleSet, ITheme } from '@uifabric/styling';\r\nimport { Customizations, CustomizerContext, ICustomizerContext } from '@uifabric/utilities';\r\nimport { createFactory } from './slots';\r\nimport { assign } from './utilities';\r\n\r\nimport { IComponent, ICustomizationProps, IStyleableComponentProps, IStylesFunctionOrObject, IToken, IViewRenderer } from './IComponent';\r\nimport { IDefaultSlotProps, ISlotCreator } from './ISlots';\r\n\r\n/**\r\n * Assembles a higher order component based on the following: styles, theme, view, and state.\r\n * Imposes a separation of concern and centralizes styling processing to increase ease of use and robustness\r\n * in how components use and apply styling and theming.\r\n *\r\n * Automatically merges and applies themes and styles with theme / styleprops having the highest priority.\r\n * State component, if provided, is passed in props for processing. Props from state / user are automatically processed\r\n * and styled before finally being passed to view.\r\n *\r\n * State components should contain all stateful behavior and should not generate any JSX, but rather simply call the view prop.\r\n * Views should simply be stateless pure functions that receive all props needed for rendering their output.\r\n * State component is optional. If state is not provided, created component is essentially a functional stateless component.\r\n *\r\n * @param component - component Component options. See IComponent for more detail.\r\n */\r\nexport function createComponent<\r\n  TComponentProps,\r\n  TTokens,\r\n  TStyleSet extends IStyleSet<TStyleSet>,\r\n  TViewProps = TComponentProps,\r\n  TStatics = {}\r\n>(component: IComponent<TComponentProps, TTokens, TStyleSet, TViewProps, TStatics>): React.StatelessComponent<TComponentProps> & TStatics {\r\n  const { factoryOptions = {} } = component;\r\n  const { defaultProp } = factoryOptions;\r\n\r\n  const result: React.StatelessComponent<TComponentProps> = (componentProps: TComponentProps) => {\r\n    return (\r\n      // TODO: createComponent is also affected by https://github.com/OfficeDev/office-ui-fabric-react/issues/6603\r\n      <CustomizerContext.Consumer>\r\n        {(context: ICustomizerContext) => {\r\n          // TODO: this next line is basically saying 'theme' prop will ALWAYS be available from getCustomizations\r\n          //        via ICustomizationProps cast. Is there mechanism that guarantees theme and other request fields will be defined?\r\n          //        is there a static init that guarantees theme will be provided?\r\n          //        what happens if createTheme/loadTheme is not called?\r\n          //        if so, convey through getCustomizations typing keying off fields. can we convey this\r\n          //          all the way from Customizations with something like { { K in fields }: object}? hmm\r\n          //        if not, how does existing \"theme!\" styles code work without risk of failing (assuming it doesn't fail)?\r\n          // For now cast return value as if theme is always available.\r\n          const settings: ICustomizationProps<TViewProps, TTokens, TStyleSet> = _getCustomizations(\r\n            component.displayName,\r\n            context,\r\n            component.fields\r\n          );\r\n\r\n          const renderView: IViewRenderer<TViewProps> = viewProps => {\r\n            // The approach here is to allow state components to provide only the props they care about, automatically\r\n            //    merging user props and state props together. This ensures all props are passed properly to view,\r\n            //    including children and styles.\r\n            // TODO: for full 'fields' support, 'rest' props from customizations need to pass onto view.\r\n            //        however, customized props like theme will break snapshots. how is styled not showing theme output in snapshots?\r\n            const mergedProps: TViewProps & IStyleableComponentProps<TViewProps, TTokens, TStyleSet> = viewProps\r\n              ? {\r\n                  ...(componentProps as any),\r\n                  ...(viewProps as any)\r\n                }\r\n              : componentProps;\r\n\r\n            const theme = mergedProps.theme || settings.theme;\r\n\r\n            const tokens = _resolveTokens(mergedProps, theme, component.tokens, settings.tokens, mergedProps.tokens);\r\n            const styles = _resolveStyles(mergedProps, theme, tokens, component.styles, settings.styles, mergedProps.styles);\r\n\r\n            const viewComponentProps: typeof mergedProps & IDefaultSlotProps<any> = {\r\n              ...(mergedProps as any),\r\n              styles,\r\n              tokens,\r\n              _defaultStyles: styles\r\n            };\r\n\r\n            return component.view(viewComponentProps);\r\n          };\r\n          return component.state ? <component.state {...componentProps} renderView={renderView} /> : renderView();\r\n        }}\r\n      </CustomizerContext.Consumer>\r\n    );\r\n  };\r\n\r\n  result.displayName = component.displayName;\r\n\r\n  // If a shorthand prop is defined, create a factory for the component.\r\n  // TODO: This shouldn't be a concern of createComponent.. factoryOptions should just be forwarded.\r\n  //       Need to weigh creating default factories on component creation vs. memozing them on use in slots.tsx.\r\n  if (defaultProp) {\r\n    (result as ISlotCreator<TComponentProps>).create = createFactory(result, { defaultProp });\r\n  }\r\n\r\n  assign(result, component.statics);\r\n\r\n  // Later versions of TypeSript should allow us to merge objects in a type safe way and avoid this cast.\r\n  return result as React.StatelessComponent<TComponentProps> & TStatics;\r\n}\r\n\r\n/**\r\n * Resolve all styles functions with both props and tokens and flatten results along with all styles objects.\r\n */\r\nfunction _resolveStyles<TProps, TTokens, TStyleSet extends IStyleSet<TStyleSet>>(\r\n  props: TProps,\r\n  theme: ITheme,\r\n  tokens: TTokens,\r\n  ...allStyles: (IStylesFunctionOrObject<TProps, TTokens, TStyleSet> | undefined)[]\r\n): ReturnType<typeof concatStyleSets> {\r\n  return concatStyleSets(\r\n    ...allStyles.map((styles: IStylesFunctionOrObject<TProps, TTokens, TStyleSet> | undefined) =>\r\n      typeof styles === 'function' ? styles(props, theme, tokens) : styles\r\n    )\r\n  );\r\n}\r\n\r\n/**\r\n * Resolve all tokens functions with props flatten results along with all tokens objects.\r\n */\r\nfunction _resolveTokens<TViewProps, TTokens>(\r\n  props: TViewProps,\r\n  theme: ITheme,\r\n  ...allTokens: (IToken<TViewProps, TTokens> | false | null | undefined)[]\r\n): TTokens {\r\n  const tokens = {};\r\n\r\n  for (let currentTokens of allTokens) {\r\n    if (currentTokens) {\r\n      currentTokens = typeof currentTokens === 'function' ? currentTokens(props, theme) : currentTokens;\r\n\r\n      if (Array.isArray(currentTokens)) {\r\n        currentTokens = _resolveTokens(props, theme, ...currentTokens);\r\n      }\r\n\r\n      assign(tokens, ...(currentTokens as any));\r\n    }\r\n  }\r\n\r\n  return tokens as TTokens;\r\n}\r\n\r\n/**\r\n * Helper function for calling Customizations.getSettings falling back to default fields.\r\n *\r\n * @param displayName Displayable name for component.\r\n * @param context React context passed to component containing contextual settings.\r\n * @param fields Optional list of properties to grab from global store and context.\r\n */\r\nfunction _getCustomizations<TViewProps, TTokens, TStyleSet extends IStyleSet<TStyleSet>>(\r\n  displayName: string,\r\n  context: ICustomizerContext,\r\n  fields?: string[]\r\n): ICustomizationProps<TViewProps, TTokens, TStyleSet> {\r\n  // TODO: do we want field props? should fields be part of IComponent and used here?\r\n  // TODO: should we centrally define DefaultFields? (not exported from styling)\r\n  // TOOD: tie this array to ICustomizationProps, such that each array element is keyof ICustomizationProps\r\n  const DefaultFields = ['theme', 'styles', 'tokens'];\r\n  return Customizations.getSettings(fields || DefaultFields, displayName, context.customizations);\r\n}\r\n","// @uifabric/foundation@0.7.4\n  // Do not modify this file, the file is generated as part of publish. The checked in version is a placeholder only.\n  import { setVersion } from '@uifabric/set-version';\n  setVersion('@uifabric/foundation', '0.7.4');","import { getGlobalClassNames } from '../../../Styling';\r\nimport { IStackItemComponent, IStackItemStyles, IStackItemStylesReturnType } from './StackItem.types';\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-StackItem'\r\n};\r\n\r\nconst alignMap: { [key: string]: string } = {\r\n  start: 'flex-start',\r\n  end: 'flex-end'\r\n};\r\n\r\nexport const StackItemStyles: IStackItemComponent['styles'] = (props, theme, tokens): IStackItemStylesReturnType => {\r\n  const { grow, shrink, disableShrink, align, verticalFill, order, className } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  return {\r\n    root: [\r\n      theme.fonts.medium,\r\n      classNames.root,\r\n      {\r\n        margin: tokens.margin,\r\n        height: verticalFill ? '100%' : 'auto',\r\n        width: 'auto'\r\n      },\r\n      grow && { flexGrow: grow === true ? 1 : grow },\r\n      (disableShrink || (!grow && !shrink)) && {\r\n        flexShrink: 0\r\n      },\r\n      shrink &&\r\n        !disableShrink && {\r\n          flexShrink: 1\r\n        },\r\n      align && {\r\n        alignSelf: alignMap[align] || align\r\n      },\r\n      order && {\r\n        order: order\r\n      },\r\n      className\r\n    ]\r\n    // TODO: this cast may be hiding some potential issues with styling and name\r\n    //        lookups and should be removed\r\n  } as IStackItemStyles;\r\n};\r\n","/** @jsx withSlots */\r\nimport * as React from 'react';\r\nimport { withSlots, createComponent, getSlots } from '../../../Foundation';\r\nimport { IStackItemComponent, IStackItemProps, IStackItemSlots } from './StackItem.types';\r\nimport { StackItemStyles as styles } from './StackItem.styles';\r\n\r\nconst view: IStackItemComponent['view'] = props => {\r\n  const { children } = props;\r\n  if (React.Children.count(children) < 1) {\r\n    return null;\r\n  }\r\n\r\n  const Slots = getSlots<IStackItemProps, IStackItemSlots>(props, {\r\n    root: 'div'\r\n  });\r\n\r\n  return <Slots.root>{children}</Slots.root>;\r\n};\r\n\r\nexport const StackItem: React.StatelessComponent<IStackItemProps> = createComponent({\r\n  displayName: 'StackItem',\r\n  styles,\r\n  view\r\n});\r\n\r\nexport default StackItem;\r\n","/**\r\n * Functions used by Stack components to simplify style-related computations\r\n */\r\n\r\nimport { ITheme } from '../../Styling';\r\nimport { IStackProps } from './Stack.types';\r\n\r\n// Helper function that converts a themed spacing key (if given) to the corresponding themed spacing value.\r\nconst _getThemedSpacing = (space: string, theme: ITheme): string => {\r\n  if (theme.spacing.hasOwnProperty(space)) {\r\n    return theme.spacing[space as keyof typeof theme.spacing];\r\n  }\r\n  return space;\r\n};\r\n\r\n// Helper function that takes a gap as a string and converts it into a { value, unit } representation.\r\nconst _getValueUnitGap = (gap: string): { value: number; unit: string } => {\r\n  const numericalPart = parseFloat(gap);\r\n  const numericalValue = isNaN(numericalPart) ? 0 : numericalPart;\r\n  const numericalString = isNaN(numericalPart) ? '' : numericalPart.toString();\r\n\r\n  const unitPart = gap.substring(numericalString.toString().length);\r\n\r\n  return {\r\n    value: numericalValue,\r\n    unit: unitPart || 'px'\r\n  };\r\n};\r\n\r\n/**\r\n * Takes in a gap size in either a CSS-style format (e.g. 10 or \"10px\")\r\n *  or a key of a themed spacing value (e.g. \"s1\").\r\n * Returns the separate numerical value of the padding (e.g. 10)\r\n *  and the CSS unit (e.g. \"px\").\r\n */\r\nexport const parseGap = (\r\n  gap: IStackProps['gap'],\r\n  theme: ITheme\r\n): { rowGap: { value: number; unit: string }; columnGap: { value: number; unit: string } } => {\r\n  if (gap === undefined || gap === '') {\r\n    return {\r\n      rowGap: {\r\n        value: 0,\r\n        unit: 'px'\r\n      },\r\n      columnGap: {\r\n        value: 0,\r\n        unit: 'px'\r\n      }\r\n    };\r\n  }\r\n\r\n  if (typeof gap === 'number') {\r\n    return {\r\n      rowGap: {\r\n        value: gap,\r\n        unit: 'px'\r\n      },\r\n      columnGap: {\r\n        value: gap,\r\n        unit: 'px'\r\n      }\r\n    };\r\n  }\r\n\r\n  const splitGap = gap.split(' ');\r\n\r\n  // If the array has more than two values, then return 0px.\r\n  if (splitGap.length > 2) {\r\n    return {\r\n      rowGap: {\r\n        value: 0,\r\n        unit: 'px'\r\n      },\r\n      columnGap: {\r\n        value: 0,\r\n        unit: 'px'\r\n      }\r\n    };\r\n  }\r\n\r\n  // If the array has two values, then parse each one.\r\n  if (splitGap.length === 2) {\r\n    return {\r\n      rowGap: _getValueUnitGap(_getThemedSpacing(splitGap[0], theme)),\r\n      columnGap: _getValueUnitGap(_getThemedSpacing(splitGap[1], theme))\r\n    };\r\n  }\r\n\r\n  // Else, parse the numerical value and pass it as both the vertical and horizontal gap.\r\n  const calculatedGap = _getValueUnitGap(_getThemedSpacing(gap, theme));\r\n\r\n  return {\r\n    rowGap: calculatedGap,\r\n    columnGap: calculatedGap\r\n  };\r\n};\r\n\r\n/**\r\n * Takes in a padding in a CSS-style format (e.g. 10, \"10px\", \"10px 10px\", etc.)\r\n *  where the separate padding values can also be the key of a themed spacing value\r\n *  (e.g. \"s1 m\", \"10px l1 20px l2\", etc.).\r\n * Returns a CSS-style padding.\r\n */\r\nexport const parsePadding = (padding: number | string | undefined, theme: ITheme): number | string | undefined => {\r\n  if (padding === undefined || typeof padding === 'number' || padding === '') {\r\n    return padding;\r\n  }\r\n\r\n  const paddingValues = padding.split(' ');\r\n  if (paddingValues.length < 2) {\r\n    return _getThemedSpacing(padding, theme);\r\n  }\r\n\r\n  return paddingValues.reduce((padding1: string, padding2: string) => {\r\n    return _getThemedSpacing(padding1, theme) + ' ' + _getThemedSpacing(padding2, theme);\r\n  });\r\n};\r\n","import { IStackComponent, IStackStyles, IStackStylesReturnType } from './Stack.types';\r\nimport { parseGap, parsePadding } from './StackUtils';\r\nimport { getGlobalClassNames } from '../../Styling';\r\n\r\nconst nameMap: { [key: string]: string } = {\r\n  start: 'flex-start',\r\n  end: 'flex-end'\r\n};\r\n\r\nconst GlobalClassNames = {\r\n  root: 'ms-Stack',\r\n  inner: 'ms-Stack-inner'\r\n};\r\n\r\nexport const styles: IStackComponent['styles'] = (props, theme, tokens): IStackStylesReturnType => {\r\n  const {\r\n    verticalFill,\r\n    maxWidth,\r\n    maxHeight,\r\n    horizontal,\r\n    reversed,\r\n    gap,\r\n    grow,\r\n    wrap,\r\n    padding,\r\n    horizontalAlign,\r\n    verticalAlign,\r\n    disableShrink,\r\n    className\r\n  } = props;\r\n\r\n  const classNames = getGlobalClassNames(GlobalClassNames, theme);\r\n\r\n  const childrenGap = tokens && tokens.childrenGap ? tokens.childrenGap : gap;\r\n  const { rowGap, columnGap } = parseGap(childrenGap, theme);\r\n\r\n  const horizontalMargin = `${-0.5 * columnGap.value}${columnGap.unit}`;\r\n  const verticalMargin = `${-0.5 * rowGap.value}${rowGap.unit}`;\r\n\r\n  // styles to be applied to all direct children regardless of wrap or direction\r\n  const childStyles = {\r\n    textOverflow: 'ellipsis'\r\n  };\r\n\r\n  // selectors to be applied regardless of wrap or direction\r\n  const commonSelectors = {\r\n    // flexShrink styles are applied by the StackItem\r\n    '> *:not(.ms-StackItem)': {\r\n      flexShrink: disableShrink ? 0 : 1\r\n    }\r\n  };\r\n\r\n  if (wrap) {\r\n    return {\r\n      root: [\r\n        classNames.root,\r\n        {\r\n          flexWrap: 'wrap',\r\n          maxWidth,\r\n          maxHeight,\r\n          width: 'auto',\r\n          overflow: 'visible',\r\n          height: '100%'\r\n        },\r\n        horizontalAlign && {\r\n          [horizontal ? 'justifyContent' : 'alignItems']: nameMap[horizontalAlign] || horizontalAlign\r\n        },\r\n        verticalAlign && {\r\n          [horizontal ? 'alignItems' : 'justifyContent']: nameMap[verticalAlign] || verticalAlign\r\n        },\r\n        className,\r\n        {\r\n          // not allowed to be overridden by className\r\n          // since this is necessary in order to prevent collapsing margins\r\n          display: 'flex'\r\n        },\r\n        horizontal && {\r\n          height: verticalFill ? '100%' : 'auto'\r\n        }\r\n      ],\r\n\r\n      inner: [\r\n        classNames.inner,\r\n        {\r\n          display: 'flex',\r\n          flexWrap: 'wrap',\r\n          marginLeft: horizontalMargin,\r\n          marginRight: horizontalMargin,\r\n          marginTop: verticalMargin,\r\n          marginBottom: verticalMargin,\r\n          overflow: 'visible',\r\n          boxSizing: 'border-box',\r\n          padding: parsePadding(padding, theme),\r\n          // avoid unnecessary calc() calls if horizontal gap is 0\r\n          width: columnGap.value === 0 ? '100%' : `calc(100% + ${columnGap.value}${columnGap.unit})`,\r\n          maxWidth: '100vw',\r\n\r\n          selectors: {\r\n            '> *': {\r\n              margin: `${0.5 * rowGap.value}${rowGap.unit} ${0.5 * columnGap.value}${columnGap.unit}`,\r\n\r\n              ...childStyles\r\n            },\r\n            ...commonSelectors\r\n          }\r\n        },\r\n        horizontalAlign && {\r\n          [horizontal ? 'justifyContent' : 'alignItems']: nameMap[horizontalAlign] || horizontalAlign\r\n        },\r\n        verticalAlign && {\r\n          [horizontal ? 'alignItems' : 'justifyContent']: nameMap[verticalAlign] || verticalAlign\r\n        },\r\n        horizontal && {\r\n          flexDirection: reversed ? 'row-reverse' : 'row',\r\n\r\n          // avoid unnecessary calc() calls if vertical gap is 0\r\n          height: rowGap.value === 0 ? '100%' : `calc(100% + ${rowGap.value}${rowGap.unit})`,\r\n\r\n          selectors: {\r\n            '> *': {\r\n              maxWidth: columnGap.value === 0 ? '100%' : `calc(100% - ${columnGap.value}${columnGap.unit})`\r\n            }\r\n          }\r\n        },\r\n        !horizontal && {\r\n          flexDirection: reversed ? 'column-reverse' : 'column',\r\n          height: `calc(100% + ${rowGap.value}${rowGap.unit})`,\r\n\r\n          selectors: {\r\n            '> *': {\r\n              maxHeight: rowGap.value === 0 ? '100%' : `calc(100% - ${rowGap.value}${rowGap.unit})`\r\n            }\r\n          }\r\n        }\r\n      ]\r\n    } as IStackStyles;\r\n  }\r\n\r\n  return {\r\n    root: [\r\n      classNames.root,\r\n      {\r\n        display: 'flex',\r\n        flexDirection: horizontal ? (reversed ? 'row-reverse' : 'row') : reversed ? 'column-reverse' : 'column',\r\n        flexWrap: 'nowrap',\r\n        width: 'auto',\r\n        height: verticalFill ? '100%' : 'auto',\r\n        maxWidth,\r\n        maxHeight,\r\n        padding: parsePadding(padding, theme),\r\n        boxSizing: 'border-box',\r\n\r\n        selectors: {\r\n          '> *': childStyles,\r\n\r\n          // apply gap margin to every direct child except the first direct child if the direction is not reversed,\r\n          // and the last direct one if it is\r\n          [reversed ? '> *:not(:last-child)' : '> *:not(:first-child)']: [\r\n            horizontal && {\r\n              marginLeft: `${columnGap.value}${columnGap.unit}`\r\n            },\r\n            !horizontal && {\r\n              marginTop: `${rowGap.value}${rowGap.unit}`\r\n            }\r\n          ],\r\n\r\n          ...commonSelectors\r\n        }\r\n      },\r\n      grow && {\r\n        flexGrow: grow === true ? 1 : grow,\r\n        overflow: 'hidden'\r\n      },\r\n      horizontalAlign && {\r\n        [horizontal ? 'justifyContent' : 'alignItems']: nameMap[horizontalAlign] || horizontalAlign\r\n      },\r\n      verticalAlign && {\r\n        [horizontal ? 'alignItems' : 'justifyContent']: nameMap[verticalAlign] || verticalAlign\r\n      },\r\n      className\r\n    ]\r\n    // TODO: this cast may be hiding some potential issues with styling and name\r\n    //        lookups and should be removed\r\n  } as IStackStyles;\r\n};\r\n","/** @jsx withSlots */\r\nimport * as React from 'react';\r\nimport { withSlots, createComponent, getSlots } from '../../Foundation';\r\nimport StackItem from './StackItem/StackItem';\r\nimport { IStackItemProps } from './StackItem/StackItem.types';\r\nimport { IStackComponent, IStackProps, IStackSlots } from './Stack.types';\r\nimport { styles } from './Stack.styles';\r\nimport { getNativeProps, htmlElementProperties } from '../../Utilities';\r\n\r\nconst StackItemType = (<StackItem /> as React.ReactElement<IStackItemProps>).type;\r\n\r\nconst view: IStackComponent['view'] = props => {\r\n  const { as: RootType = 'div', disableShrink, wrap, ...rest } = props;\r\n\r\n  const stackChildren: (React.ReactChild | null)[] = React.Children.map(\r\n    props.children,\r\n    (child: React.ReactElement<IStackItemProps>, index: number) => {\r\n      if (!child) {\r\n        return null;\r\n      }\r\n\r\n      if (child.type === StackItemType) {\r\n        const defaultItemProps: IStackItemProps = {\r\n          shrink: !disableShrink\r\n        };\r\n\r\n        return React.cloneElement(child, {\r\n          ...defaultItemProps,\r\n          ...child.props\r\n        });\r\n      }\r\n\r\n      return child;\r\n    }\r\n  );\r\n\r\n  const nativeProps = getNativeProps(rest, htmlElementProperties);\r\n\r\n  const Slots = getSlots<IStackProps, IStackSlots>(props, {\r\n    root: RootType,\r\n    inner: 'div'\r\n  });\r\n\r\n  if (wrap) {\r\n    return (\r\n      <Slots.root {...nativeProps}>\r\n        <Slots.inner>{stackChildren}</Slots.inner>\r\n      </Slots.root>\r\n    );\r\n  }\r\n\r\n  return <Slots.root {...nativeProps}>{stackChildren}</Slots.root>;\r\n};\r\n\r\nconst StackStatics = {\r\n  Item: StackItem\r\n};\r\n\r\nexport const Stack: React.StatelessComponent<IStackProps> & {\r\n  Item: React.StatelessComponent<IStackItemProps>;\r\n} = createComponent({\r\n  displayName: 'Stack',\r\n  styles,\r\n  view,\r\n  statics: StackStatics\r\n});\r\n\r\nexport default Stack;\r\n","import * as React from 'react';\r\n\r\nimport Axios from 'axios';\r\n\r\nimport { Fabric } from 'office-ui-fabric-react/lib/Fabric';\r\n\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\n\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\n\r\nimport { Stack } from 'office-ui-fabric-react/lib/Stack';\r\n\r\nimport { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';\r\n\r\nimport { Title } from '../Title';\r\n\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\n\r\nimport { IDrawerGroupsProps, IDrawerGroupsStyleProps, IDrawerGroupsStyles } from './DrawerGroups.types';\r\n\r\nimport { IMovableOptionsListElement, MovableOptionsList } from '../MovableOptionsList';\r\n\r\nimport { MessageBar, MessageBarType } from 'office-ui-fabric-react/lib/MessageBar';\r\n\r\nimport './DrawerGroups.css';\r\n\r\nconst getClassNames = classNamesFunction<IDrawerGroupsStyleProps, IDrawerGroupsStyles>();\r\n\r\nconst delayedTimeout = 10000;\r\n\r\nexport interface IDrawerGroupsState {\r\n  name: string;\r\n  description: string;\r\n  sites: IDropdownOption[];\r\n  selectedSite?: number;\r\n  drawers: IMovableOptionsListElement[];\r\n  validateFieldsMessage: string | undefined;\r\n}\r\n\r\nexport class DrawerGroupsBase extends React.PureComponent<IDrawerGroupsProps, IDrawerGroupsState> {\r\n  public static defaultProps = {\r\n    labelCmdBarBtnSave: 'Save',\r\n    labelCmdBarBtnEdit: 'Edit',\r\n    labelCmdBarBtnCancel: 'Cancel',\r\n    labelValidationMessage: 'The following fields are required:',\r\n    labelDrawerGroupsValidationMessage: 'Drawer Groups needs to have at least one Drawer',\r\n    labelFormName: 'Drawer Group Name',\r\n    labelFormSite: 'Site',\r\n    labelFormSitePlaceholder: 'Select a Site',\r\n    labelFormDescription: 'Drawer Group Description',\r\n    labelFormMovableAvailable: 'Site Drawers',\r\n    labelFormMovableSelected: 'Group Drawers',\r\n    labelFormMovableProperty: 'Name'\r\n  };\r\n  private initialState: IDrawerGroupsState = {\r\n    name: '',\r\n    description: '',\r\n    sites: [],\r\n    drawers: [],\r\n    validateFieldsMessage: undefined\r\n  };\r\n\r\n  constructor(props: IDrawerGroupsProps) {\r\n    super(props);\r\n    this.state = this.initialState;\r\n  }\r\n\r\n  public componentDidMount() {\r\n    this.init();\r\n  }\r\n\r\n  public componentDidUpdate(prevProps: IDrawerGroupsProps) {\r\n    if (this.props.id !== prevProps.id) {\r\n      this.init();\r\n    }\r\n  }\r\n\r\n  private delayedExecution = (callback: any): void => {\r\n    setTimeout(callback, delayedTimeout);\r\n  };\r\n\r\n  private closeErrorsMessage = (): void => {\r\n    this.setState({ validateFieldsMessage: undefined });\r\n  };\r\n\r\n  private init() {\r\n    if (this.props.id) {\r\n      this.componentDidMountInEditMode();\r\n    } else {\r\n      this.componentDidMountInNewMode();\r\n    }\r\n  }\r\n\r\n  private componentDidMountInNewMode() {\r\n    Axios.get(this.props.baseUrl + '/sites')\r\n      .then(response => {\r\n        const data = response.data.data;\r\n        const options: IDropdownOption[] = [];\r\n        for (let element of data) {\r\n          const option: IDropdownOption = {\r\n            key: element.id,\r\n            text: element.name,\r\n            selected: false\r\n          };\r\n          options.push(option);\r\n        }\r\n        this.setState({ sites: options });\r\n      })\r\n      .catch(error => console.log(error));\r\n  }\r\n\r\n  private componentDidMountInEditMode() {\r\n    const { baseUrl, id } = this.props;\r\n    Axios.get(`${baseUrl}/drawergroups/${id}`)\r\n      .then(response => {\r\n        const dto = response.data;\r\n\r\n        Axios.get(this.props.baseUrl + '/sites')\r\n          .then(response => {\r\n            const data = response.data.data;\r\n            const options: IDropdownOption[] = [];\r\n            for (let element of data) {\r\n              const option: IDropdownOption = {\r\n                key: element.id,\r\n                text: element.name,\r\n                selected: element.id == dto.site ? true : false\r\n              };\r\n              options.push(option);\r\n            }\r\n            this.setState({ name: dto.name, description: dto.description, sites: options, selectedSite: dto.site, drawers: dto.groups });\r\n          })\r\n          .catch(error => console.log(error));\r\n      })\r\n      .catch(error => console.log(error));\r\n  }\r\n\r\n  private loadSiteDrawers(id: any) {\r\n    const url = `${this.props.baseUrl}/sites/${id}/drawers`;\r\n    Axios.get(url)\r\n      .then(response => {\r\n        const data = response.data.data;\r\n        this.setState({ selectedSite: id, drawers: data });\r\n      })\r\n      .catch(error => console.log(error));\r\n  }\r\n\r\n  private getFormCommandBarItems = (id: any) => {\r\n    const { labelCmdBarBtnSave, labelCmdBarBtnEdit, labelCmdBarBtnCancel } = this.props;\r\n    const formCommandBarItems = [\r\n      {\r\n        key: 'Save',\r\n        name: labelCmdBarBtnSave,\r\n        iconProps: {\r\n          iconName: 'Save'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Edit',\r\n        name: labelCmdBarBtnEdit,\r\n        iconProps: {\r\n          iconName: 'Edit'\r\n        },\r\n        onClick: () => this.onSubmit()\r\n      },\r\n      {\r\n        key: 'Cancel',\r\n        name: labelCmdBarBtnCancel,\r\n        iconProps: {\r\n          iconName: 'Cancel'\r\n        },\r\n        onClick: () => this.props.onCancel()\r\n      }\r\n    ];\r\n\r\n    const removeIdx = id ? 0 : 1;\r\n    formCommandBarItems.splice(removeIdx, 1);\r\n\r\n    return formCommandBarItems;\r\n  };\r\n\r\n  private onSubmit = (): void => {\r\n    if (!this.validate()) {\r\n      return;\r\n    }\r\n\r\n    const { baseUrl, id, onSubmitSuccess, onSubmitError } = this.props;\r\n    const { name, selectedSite, description, drawers } = this.state;\r\n\r\n    const drawerGroups = [];\r\n\r\n    for (let drawer of drawers) {\r\n      if (drawer.selected) {\r\n        const dgroup = {\r\n          id: drawer.key,\r\n          name: drawer.text\r\n        };\r\n        drawerGroups.push(dgroup);\r\n      }\r\n    }\r\n\r\n    const jsonResult = JSON.stringify({\r\n      id: id,\r\n      name: name,\r\n      description: description,\r\n      site: selectedSite,\r\n      groups: drawerGroups\r\n    });\r\n\r\n    const method = id ? 'post' : 'put';\r\n    const url = `${baseUrl}/drawergroups`;\r\n\r\n    console.log(url);\r\n    console.log('Data Submited to server by', method, jsonResult);\r\n\r\n    Axios.request({\r\n      url: url,\r\n      method: method,\r\n      data: jsonResult,\r\n      headers: {\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json'\r\n      }\r\n    })\r\n      .then(response => {\r\n        onSubmitSuccess(response.data);\r\n      })\r\n      .catch(error => onSubmitError(error));\r\n  };\r\n\r\n  private validate = (): boolean => {\r\n    const { labelDrawerGroupsValidationMessage } = this.props;\r\n    const { name, selectedSite, drawers } = this.state;\r\n    const invalid: string[] = [];\r\n\r\n    if (!name) {\r\n      invalid.push('Name');\r\n    }\r\n    if (!selectedSite) {\r\n      invalid.push('Site');\r\n    }\r\n\r\n    let selected = 0;\r\n    for (let group of drawers) {\r\n      if (group.selected) {\r\n        selected++;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (selected === 0) {\r\n      const msg = '' + labelDrawerGroupsValidationMessage;\r\n      invalid.push(msg);\r\n    }\r\n\r\n    if (invalid.length > 0) {\r\n      const errorsAsString = invalid.map((error: string) => error).join(' | ');\r\n      this.setState({ validateFieldsMessage: `[ ${errorsAsString} ]` });\r\n      this.delayedExecution(this.closeErrorsMessage);\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  };\r\n\r\n  public render(): JSX.Element {\r\n    const {\r\n      className,\r\n      id,\r\n      styles,\r\n      theme,\r\n      title,\r\n      labelValidationMessage,\r\n      labelFormName,\r\n      labelFormSite,\r\n      labelFormSitePlaceholder,\r\n      labelFormDescription,\r\n      labelFormMovableAvailable,\r\n      labelFormMovableSelected,\r\n      labelFormMovableProperty\r\n    } = this.props;\r\n    const { description, drawers, name, selectedSite, sites, validateFieldsMessage } = this.state;\r\n    const classNames = getClassNames(styles, { theme: theme!, className });\r\n\r\n    return (\r\n      <Fabric className={`ms-Grid ${classNames.root}`}>\r\n        <div className=\"ms-Grid-row\" style={{ marginTop: '1px', marginBottom: '15px' }}>\r\n          <div className=\"ms-Grid-col ms-sm12\">\r\n            <CommandBar items={this.getFormCommandBarItems(id)} />\r\n          </div>\r\n        </div>\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm12\">\r\n            <Title title={title ? title : ''} icon={true} />\r\n          </div>\r\n        </div>\r\n        {validateFieldsMessage && (\r\n          <div className=\"ms-Grid-row\">\r\n            <div className=\"ms-Grid-col ms-sm12\">\r\n              <MessageBar\r\n                messageBarType={MessageBarType.error}\r\n                isMultiline={false}\r\n                onDismiss={this.closeErrorsMessage}\r\n                dismissButtonAriaLabel=\"Close\"\r\n              >\r\n                {labelValidationMessage} {validateFieldsMessage}\r\n              </MessageBar>\r\n            </div>\r\n          </div>\r\n        )}\r\n        <div className=\"ms-Grid-row\">\r\n          <div className=\"ms-Grid-col ms-sm4\">\r\n            <Stack\r\n              horizontalAlign=\"start\"\r\n              tokens={{\r\n                childrenGap: 10\r\n              }}\r\n              padding={10}\r\n            >\r\n              <span>\r\n                <TextField\r\n                  key=\"DrawerGroupName\"\r\n                  value={name}\r\n                  label={labelFormName}\r\n                  required\r\n                  styles={{ fieldGroup: { width: 250 } }}\r\n                  onBlur={e => {\r\n                    this.setState({ name: e.target.value });\r\n                  }}\r\n                />\r\n              </span>\r\n              <span>\r\n                <Dropdown\r\n                  label={labelFormSite}\r\n                  options={sites}\r\n                  required\r\n                  placeholder={labelFormSitePlaceholder}\r\n                  defaultSelectedKey={selectedSite}\r\n                  styles={{ dropdown: { width: 250 } }}\r\n                  onChange={(event, option?: IDropdownOption) => this.loadSiteDrawers(option ? option.key : -1)}\r\n                />\r\n              </span>\r\n              <span>\r\n                <TextField\r\n                  key=\"DrawerGroupDesc\"\r\n                  value={description}\r\n                  label={labelFormDescription}\r\n                  multiline\r\n                  styles={{ fieldGroup: { width: 250 } }}\r\n                  rows={5}\r\n                  onBlur={e => {\r\n                    this.setState({ description: e.target.value });\r\n                  }}\r\n                />\r\n              </span>\r\n            </Stack>\r\n          </div>\r\n          <div className=\"ms-Grid-col ms-sm8\" style={{ marginTop: '10px' }}>\r\n            <MovableOptionsList\r\n              elements={drawers}\r\n              height=\"400px\"\r\n              disableUpAndDown={true}\r\n              availableLabel={labelFormMovableAvailable}\r\n              selectedLabel={labelFormMovableSelected}\r\n              property={labelFormMovableProperty}\r\n            />\r\n          </div>\r\n        </div>\r\n      </Fabric>\r\n    );\r\n  }\r\n}\r\n","import { styled } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { DrawerGroupsBase } from './DrawerGroups.base';\r\nimport { IDrawerGroupsProps, IDrawerGroupsStyleProps, IDrawerGroupsStyles } from './DrawerGroups.types';\r\nimport { getStyles } from './DrawerGroups.styles';\r\n\r\nexport const DrawerGroups: React.StatelessComponent<IDrawerGroupsProps> = styled<\r\n  IDrawerGroupsProps,\r\n  IDrawerGroupsStyleProps,\r\n  IDrawerGroupsStyles\r\n>(DrawerGroupsBase, getStyles);\r\n","import { IDrawerGroupsStyleProps, IDrawerGroupsStyles } from './DrawerGroups.types';\r\n\r\nexport function getStyles(props: IDrawerGroupsStyleProps): IDrawerGroupsStyles {\r\n  const { theme, className } = props;\r\n  const {} = theme;\r\n\r\n  return {\r\n    root: ['enChoiceDrawerGroups', {}, className]\r\n  };\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons\"`,\r\n      src: `url('${baseUrl}fabric-icons-a13498cf.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      GlobalNavButton: '\\uE700',\r\n      ChevronDown: '\\uE70D',\r\n      ChevronUp: '\\uE70E',\r\n      Edit: '\\uE70F',\r\n      Add: '\\uE710',\r\n      Cancel: '\\uE711',\r\n      More: '\\uE712',\r\n      Settings: '\\uE713',\r\n      Mail: '\\uE715',\r\n      Filter: '\\uE71C',\r\n      Search: '\\uE721',\r\n      Share: '\\uE72D',\r\n      BlockedSite: '\\uE72F',\r\n      FavoriteStar: '\\uE734',\r\n      FavoriteStarFill: '\\uE735',\r\n      CheckMark: '\\uE73E',\r\n      Delete: '\\uE74D',\r\n      ChevronLeft: '\\uE76B',\r\n      ChevronRight: '\\uE76C',\r\n      Calendar: '\\uE787',\r\n      Megaphone: '\\uE789',\r\n      Undo: '\\uE7A7',\r\n      Flag: '\\uE7C1',\r\n      Page: '\\uE7C3',\r\n      Pinned: '\\uE840',\r\n      View: '\\uE890',\r\n      Clear: '\\uE894',\r\n      Download: '\\uE896',\r\n      Upload: '\\uE898',\r\n      Folder: '\\uE8B7',\r\n      Sort: '\\uE8CB',\r\n      AlignRight: '\\uE8E2',\r\n      AlignLeft: '\\uE8E4',\r\n      Tag: '\\uE8EC',\r\n      AddFriend: '\\uE8FA',\r\n      Info: '\\uE946',\r\n      SortLines: '\\uE9D0',\r\n      List: '\\uEA37',\r\n      CircleRing: '\\uEA3A',\r\n      Heart: '\\uEB51',\r\n      HeartFill: '\\uEB52',\r\n      Tiles: '\\uECA5',\r\n      Embed: '\\uECCE',\r\n      Glimmer: '\\uECF4',\r\n      Ascending: '\\uEDC0',\r\n      Descending: '\\uEDC1',\r\n      SortUp: '\\uEE68',\r\n      SortDown: '\\uEE69',\r\n      SyncToPC: '\\uEE6E',\r\n      LargeGrid: '\\uEECB',\r\n      SkypeCheck: '\\uEF80',\r\n      SkypeClock: '\\uEF81',\r\n      SkypeMinus: '\\uEF82',\r\n      ClearFilter: '\\uEF8F',\r\n      Flow: '\\uEF90',\r\n      StatusCircleCheckmark: '\\uF13E',\r\n      MoreVertical: '\\uF2BC'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-0\"`,\r\n      src: `url('${baseUrl}fabric-icons-0-2a8db1f5.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      InternetSharing: '\\uE704',\r\n      Brightness: '\\uE706',\r\n      MapPin: '\\uE707',\r\n      Airplane: '\\uE709',\r\n      Tablet: '\\uE70A',\r\n      QuickNote: '\\uE70B',\r\n      Video: '\\uE714',\r\n      People: '\\uE716',\r\n      Phone: '\\uE717',\r\n      Pin: '\\uE718',\r\n      Shop: '\\uE719',\r\n      Stop: '\\uE71A',\r\n      Link: '\\uE71B',\r\n      AllApps: '\\uE71D',\r\n      Zoom: '\\uE71E',\r\n      ZoomOut: '\\uE71F',\r\n      Microphone: '\\uE720',\r\n      Camera: '\\uE722',\r\n      Attach: '\\uE723',\r\n      Send: '\\uE724',\r\n      FavoriteList: '\\uE728',\r\n      PageSolid: '\\uE729',\r\n      Forward: '\\uE72A',\r\n      Back: '\\uE72B',\r\n      Refresh: '\\uE72C',\r\n      Lock: '\\uE72E',\r\n      ReportHacked: '\\uE730',\r\n      EMI: '\\uE731',\r\n      MiniLink: '\\uE732',\r\n      Blocked: '\\uE733',\r\n      ReadingMode: '\\uE736',\r\n      Favicon: '\\uE737',\r\n      Remove: '\\uE738',\r\n      Checkbox: '\\uE739',\r\n      CheckboxComposite: '\\uE73A',\r\n      CheckboxFill: '\\uE73B',\r\n      CheckboxIndeterminate: '\\uE73C',\r\n      CheckboxCompositeReversed: '\\uE73D',\r\n      BackToWindow: '\\uE73F',\r\n      FullScreen: '\\uE740',\r\n      Print: '\\uE749',\r\n      Up: '\\uE74A',\r\n      Down: '\\uE74B',\r\n      OEM: '\\uE74C',\r\n      Save: '\\uE74E',\r\n      ReturnKey: '\\uE751',\r\n      Cloud: '\\uE753',\r\n      Flashlight: '\\uE754',\r\n      CommandPrompt: '\\uE756',\r\n      Sad: '\\uE757',\r\n      RealEstate: '\\uE758',\r\n      SIPMove: '\\uE759',\r\n      EraseTool: '\\uE75C',\r\n      GripperTool: '\\uE75E',\r\n      Dialpad: '\\uE75F',\r\n      PageLeft: '\\uE760',\r\n      PageRight: '\\uE761',\r\n      MultiSelect: '\\uE762',\r\n      KeyboardClassic: '\\uE765',\r\n      Play: '\\uE768',\r\n      Pause: '\\uE769',\r\n      InkingTool: '\\uE76D',\r\n      Emoji2: '\\uE76E',\r\n      GripperBarHorizontal: '\\uE76F',\r\n      System: '\\uE770',\r\n      Personalize: '\\uE771',\r\n      SearchAndApps: '\\uE773',\r\n      Globe: '\\uE774',\r\n      EaseOfAccess: '\\uE776',\r\n      ContactInfo: '\\uE779',\r\n      Unpin: '\\uE77A',\r\n      Contact: '\\uE77B',\r\n      Memo: '\\uE77C',\r\n      IncomingCall: '\\uE77E',\r\n      Paste: '\\uE77F',\r\n      WindowsLogo: '\\uE782',\r\n      Error: '\\uE783',\r\n      GripperBarVertical: '\\uE784',\r\n      Unlock: '\\uE785',\r\n      Slideshow: '\\uE786',\r\n      AutoEnhanceOn: '\\uE78D',\r\n      AutoEnhanceOff: '\\uE78E',\r\n      Color: '\\uE790',\r\n      SaveAs: '\\uE792',\r\n      Light: '\\uE793',\r\n      Filters: '\\uE795',\r\n      AspectRatio: '\\uE799',\r\n      Contrast: '\\uE7A1',\r\n      Redo: '\\uE7A6',\r\n      Crop: '\\uE7A8',\r\n      PhotoCollection: '\\uE7AA',\r\n      Album: '\\uE7AB',\r\n      Rotate: '\\uE7AD',\r\n      PanoIndicator: '\\uE7B0',\r\n      Translate: '\\uE7B2',\r\n      RedEye: '\\uE7B3',\r\n      ThumbnailView: '\\uE7B6',\r\n      Package: '\\uE7B8',\r\n      Telemarketer: '\\uE7B9',\r\n      Warning: '\\uE7BA'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-1\"`,\r\n      src: `url('${baseUrl}fabric-icons-1-360e3054.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      Financial: '\\uE7BB',\r\n      Education: '\\uE7BE',\r\n      ShoppingCart: '\\uE7BF',\r\n      Train: '\\uE7C0',\r\n      Move: '\\uE7C2',\r\n      TouchPointer: '\\uE7C9',\r\n      Merge: '\\uE7D5',\r\n      TurnRight: '\\uE7DB',\r\n      Ferry: '\\uE7E3',\r\n      Highlight: '\\uE7E6',\r\n      PowerButton: '\\uE7E8',\r\n      Tab: '\\uE7E9',\r\n      Admin: '\\uE7EF',\r\n      TVMonitor: '\\uE7F4',\r\n      Speakers: '\\uE7F5',\r\n      Game: '\\uE7FC',\r\n      UnstackSelected: '\\uE7FE',\r\n      StackIndicator: '\\uE7FF',\r\n      Nav2DMapView: '\\uE800',\r\n      StreetsideSplitMinimize: '\\uE802',\r\n      Car: '\\uE804',\r\n      Bus: '\\uE806',\r\n      EatDrink: '\\uE807',\r\n      SeeDo: '\\uE808',\r\n      LocationCircle: '\\uE80E',\r\n      Home: '\\uE80F',\r\n      SwitcherStartEnd: '\\uE810',\r\n      ParkingLocation: '\\uE811',\r\n      IncidentTriangle: '\\uE814',\r\n      Touch: '\\uE815',\r\n      MapDirections: '\\uE816',\r\n      CaretHollow: '\\uE817',\r\n      CaretSolid: '\\uE818',\r\n      History: '\\uE81C',\r\n      Location: '\\uE81D',\r\n      MapLayers: '\\uE81E',\r\n      SearchNearby: '\\uE820',\r\n      Work: '\\uE821',\r\n      Recent: '\\uE823',\r\n      Hotel: '\\uE824',\r\n      Bank: '\\uE825',\r\n      LocationDot: '\\uE827',\r\n      Dictionary: '\\uE82D',\r\n      ChromeBack: '\\uE830',\r\n      FolderOpen: '\\uE838',\r\n      PinnedFill: '\\uE842',\r\n      RevToggleKey: '\\uE845',\r\n      USB: '\\uE88E',\r\n      Previous: '\\uE892',\r\n      Next: '\\uE893',\r\n      Sync: '\\uE895',\r\n      Help: '\\uE897',\r\n      Emoji: '\\uE899',\r\n      MailForward: '\\uE89C',\r\n      ClosePane: '\\uE89F',\r\n      OpenPane: '\\uE8A0',\r\n      PreviewLink: '\\uE8A1',\r\n      ZoomIn: '\\uE8A3',\r\n      Bookmarks: '\\uE8A4',\r\n      Document: '\\uE8A5',\r\n      ProtectedDocument: '\\uE8A6',\r\n      OpenInNewWindow: '\\uE8A7',\r\n      MailFill: '\\uE8A8',\r\n      ViewAll: '\\uE8A9',\r\n      Switch: '\\uE8AB',\r\n      Rename: '\\uE8AC',\r\n      Go: '\\uE8AD',\r\n      Remote: '\\uE8AF',\r\n      SelectAll: '\\uE8B3',\r\n      Orientation: '\\uE8B4',\r\n      Import: '\\uE8B5',\r\n      Picture: '\\uE8B9',\r\n      ChromeClose: '\\uE8BB',\r\n      ShowResults: '\\uE8BC',\r\n      Message: '\\uE8BD',\r\n      CalendarDay: '\\uE8BF',\r\n      CalendarWeek: '\\uE8C0',\r\n      MailReplyAll: '\\uE8C2',\r\n      Read: '\\uE8C3',\r\n      Cut: '\\uE8C6',\r\n      PaymentCard: '\\uE8C7',\r\n      Copy: '\\uE8C8',\r\n      Important: '\\uE8C9',\r\n      MailReply: '\\uE8CA',\r\n      GotoToday: '\\uE8D1',\r\n      Font: '\\uE8D2',\r\n      FontColor: '\\uE8D3',\r\n      FolderFill: '\\uE8D5',\r\n      Permissions: '\\uE8D7',\r\n      DisableUpdates: '\\uE8D8',\r\n      Unfavorite: '\\uE8D9',\r\n      Italic: '\\uE8DB',\r\n      Underline: '\\uE8DC',\r\n      Bold: '\\uE8DD',\r\n      MoveToFolder: '\\uE8DE',\r\n      Dislike: '\\uE8E0',\r\n      Like: '\\uE8E1',\r\n      AlignCenter: '\\uE8E3',\r\n      OpenFile: '\\uE8E5',\r\n      FontDecrease: '\\uE8E7'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-2\"`,\r\n      src: `url('${baseUrl}fabric-icons-2-8820ef0b.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      FontIncrease: '\\uE8E8',\r\n      FontSize: '\\uE8E9',\r\n      CellPhone: '\\uE8EA',\r\n      RepeatOne: '\\uE8ED',\r\n      RepeatAll: '\\uE8EE',\r\n      Calculator: '\\uE8EF',\r\n      Library: '\\uE8F1',\r\n      PostUpdate: '\\uE8F3',\r\n      NewFolder: '\\uE8F4',\r\n      CalendarReply: '\\uE8F5',\r\n      UnsyncFolder: '\\uE8F6',\r\n      SyncFolder: '\\uE8F7',\r\n      BlockContact: '\\uE8F8',\r\n      Accept: '\\uE8FB',\r\n      BulletedList: '\\uE8FD',\r\n      Preview: '\\uE8FF',\r\n      News: '\\uE900',\r\n      Chat: '\\uE901',\r\n      Group: '\\uE902',\r\n      World: '\\uE909',\r\n      Comment: '\\uE90A',\r\n      DockLeft: '\\uE90C',\r\n      DockRight: '\\uE90D',\r\n      Repair: '\\uE90F',\r\n      Accounts: '\\uE910',\r\n      Street: '\\uE913',\r\n      RadioBullet: '\\uE915',\r\n      Stopwatch: '\\uE916',\r\n      Clock: '\\uE917',\r\n      WorldClock: '\\uE918',\r\n      AlarmClock: '\\uE919',\r\n      Photo: '\\uE91B',\r\n      ActionCenter: '\\uE91C',\r\n      Hospital: '\\uE91D',\r\n      Timer: '\\uE91E',\r\n      FullCircleMask: '\\uE91F',\r\n      LocationFill: '\\uE920',\r\n      ChromeMinimize: '\\uE921',\r\n      ChromeRestore: '\\uE923',\r\n      Annotation: '\\uE924',\r\n      Fingerprint: '\\uE928',\r\n      Handwriting: '\\uE929',\r\n      ChromeFullScreen: '\\uE92D',\r\n      Completed: '\\uE930',\r\n      Label: '\\uE932',\r\n      FlickDown: '\\uE935',\r\n      FlickUp: '\\uE936',\r\n      FlickLeft: '\\uE937',\r\n      FlickRight: '\\uE938',\r\n      MiniExpand: '\\uE93A',\r\n      MiniContract: '\\uE93B',\r\n      Streaming: '\\uE93E',\r\n      MusicInCollection: '\\uE940',\r\n      OneDriveLogo: '\\uE941',\r\n      CompassNW: '\\uE942',\r\n      Code: '\\uE943',\r\n      LightningBolt: '\\uE945',\r\n      CalculatorMultiply: '\\uE947',\r\n      CalculatorAddition: '\\uE948',\r\n      CalculatorSubtract: '\\uE949',\r\n      CalculatorPercentage: '\\uE94C',\r\n      CalculatorEqualTo: '\\uE94E',\r\n      PrintfaxPrinterFile: '\\uE956',\r\n      StorageOptical: '\\uE958',\r\n      Communications: '\\uE95A',\r\n      Headset: '\\uE95B',\r\n      Health: '\\uE95E',\r\n      FrontCamera: '\\uE96B',\r\n      ChevronUpSmall: '\\uE96D',\r\n      ChevronDownSmall: '\\uE96E',\r\n      ChevronLeftSmall: '\\uE96F',\r\n      ChevronRightSmall: '\\uE970',\r\n      ChevronUpMed: '\\uE971',\r\n      ChevronDownMed: '\\uE972',\r\n      ChevronLeftMed: '\\uE973',\r\n      ChevronRightMed: '\\uE974',\r\n      Devices2: '\\uE975',\r\n      PC1: '\\uE977',\r\n      PresenceChickletVideo: '\\uE979',\r\n      Reply: '\\uE97A',\r\n      HalfAlpha: '\\uE97E',\r\n      ConstructionCone: '\\uE98F',\r\n      DoubleChevronLeftMed: '\\uE991',\r\n      Volume0: '\\uE992',\r\n      Volume1: '\\uE993',\r\n      Volume2: '\\uE994',\r\n      Volume3: '\\uE995',\r\n      Chart: '\\uE999',\r\n      Robot: '\\uE99A',\r\n      Manufacturing: '\\uE99C',\r\n      LockSolid: '\\uE9A2',\r\n      FitPage: '\\uE9A6',\r\n      FitWidth: '\\uE9A7',\r\n      BidiLtr: '\\uE9AA',\r\n      BidiRtl: '\\uE9AB',\r\n      RightDoubleQuote: '\\uE9B1',\r\n      Sunny: '\\uE9BD',\r\n      CloudWeather: '\\uE9BE',\r\n      Cloudy: '\\uE9BF',\r\n      PartlyCloudyDay: '\\uE9C0'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-3\"`,\r\n      src: `url('${baseUrl}fabric-icons-3-7c253e01.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      PartlyCloudyNight: '\\uE9C1',\r\n      ClearNight: '\\uE9C2',\r\n      RainShowersDay: '\\uE9C3',\r\n      Rain: '\\uE9C4',\r\n      Thunderstorms: '\\uE9C6',\r\n      RainSnow: '\\uE9C7',\r\n      Snow: '\\uE9C8',\r\n      BlowingSnow: '\\uE9C9',\r\n      Frigid: '\\uE9CA',\r\n      Fog: '\\uE9CB',\r\n      Squalls: '\\uE9CC',\r\n      Duststorm: '\\uE9CD',\r\n      Unknown: '\\uE9CE',\r\n      Precipitation: '\\uE9CF',\r\n      Ribbon: '\\uE9D1',\r\n      AreaChart: '\\uE9D2',\r\n      Assign: '\\uE9D3',\r\n      FlowChart: '\\uE9D4',\r\n      CheckList: '\\uE9D5',\r\n      Diagnostic: '\\uE9D9',\r\n      Generate: '\\uE9DA',\r\n      LineChart: '\\uE9E6',\r\n      Equalizer: '\\uE9E9',\r\n      BarChartHorizontal: '\\uE9EB',\r\n      BarChartVertical: '\\uE9EC',\r\n      Freezing: '\\uE9EF',\r\n      FunnelChart: '\\uE9F1',\r\n      Processing: '\\uE9F5',\r\n      Quantity: '\\uE9F8',\r\n      ReportDocument: '\\uE9F9',\r\n      StackColumnChart: '\\uE9FC',\r\n      SnowShowerDay: '\\uE9FD',\r\n      HailDay: '\\uEA00',\r\n      WorkFlow: '\\uEA01',\r\n      HourGlass: '\\uEA03',\r\n      StoreLogoMed20: '\\uEA04',\r\n      TimeSheet: '\\uEA05',\r\n      TriangleSolid: '\\uEA08',\r\n      UpgradeAnalysis: '\\uEA0B',\r\n      VideoSolid: '\\uEA0C',\r\n      RainShowersNight: '\\uEA0F',\r\n      SnowShowerNight: '\\uEA11',\r\n      Teamwork: '\\uEA12',\r\n      HailNight: '\\uEA13',\r\n      PeopleAdd: '\\uEA15',\r\n      Glasses: '\\uEA16',\r\n      DateTime2: '\\uEA17',\r\n      Shield: '\\uEA18',\r\n      Header1: '\\uEA19',\r\n      PageAdd: '\\uEA1A',\r\n      NumberedList: '\\uEA1C',\r\n      PowerBILogo: '\\uEA1E',\r\n      Info2: '\\uEA1F',\r\n      MusicInCollectionFill: '\\uEA36',\r\n      Asterisk: '\\uEA38',\r\n      ErrorBadge: '\\uEA39',\r\n      CircleFill: '\\uEA3B',\r\n      Record2: '\\uEA3F',\r\n      AllAppsMirrored: '\\uEA40',\r\n      BookmarksMirrored: '\\uEA41',\r\n      BulletedListMirrored: '\\uEA42',\r\n      CaretHollowMirrored: '\\uEA45',\r\n      CaretSolidMirrored: '\\uEA46',\r\n      ChromeBackMirrored: '\\uEA47',\r\n      ClosePaneMirrored: '\\uEA49',\r\n      DockLeftMirrored: '\\uEA4C',\r\n      DoubleChevronLeftMedMirrored: '\\uEA4D',\r\n      GoMirrored: '\\uEA4F',\r\n      HelpMirrored: '\\uEA51',\r\n      ImportMirrored: '\\uEA52',\r\n      ImportAllMirrored: '\\uEA53',\r\n      ListMirrored: '\\uEA55',\r\n      MailForwardMirrored: '\\uEA56',\r\n      MailReplyMirrored: '\\uEA57',\r\n      MailReplyAllMirrored: '\\uEA58',\r\n      MiniContractMirrored: '\\uEA59',\r\n      MiniExpandMirrored: '\\uEA5A',\r\n      OpenPaneMirrored: '\\uEA5B',\r\n      ParkingLocationMirrored: '\\uEA5E',\r\n      SendMirrored: '\\uEA63',\r\n      ShowResultsMirrored: '\\uEA65',\r\n      ThumbnailViewMirrored: '\\uEA67',\r\n      Media: '\\uEA69',\r\n      Devices3: '\\uEA6C',\r\n      Focus: '\\uEA6F',\r\n      VideoLightOff: '\\uEA74',\r\n      Lightbulb: '\\uEA80',\r\n      StatusTriangle: '\\uEA82',\r\n      VolumeDisabled: '\\uEA85',\r\n      Puzzle: '\\uEA86',\r\n      EmojiNeutral: '\\uEA87',\r\n      EmojiDisappointed: '\\uEA88',\r\n      HomeSolid: '\\uEA8A',\r\n      Ringer: '\\uEA8F',\r\n      PDF: '\\uEA90',\r\n      HeartBroken: '\\uEA92',\r\n      StoreLogo16: '\\uEA96',\r\n      MultiSelectMirrored: '\\uEA98',\r\n      Broom: '\\uEA99',\r\n      Cocktails: '\\uEA9D'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-4\"`,\r\n      src: `url('${baseUrl}fabric-icons-4-15a649f8.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      Wines: '\\uEABF',\r\n      Articles: '\\uEAC1',\r\n      Cycling: '\\uEAC7',\r\n      DietPlanNotebook: '\\uEAC8',\r\n      Pill: '\\uEACB',\r\n      ExerciseTracker: '\\uEACC',\r\n      HandsFree: '\\uEAD0',\r\n      Medical: '\\uEAD4',\r\n      Running: '\\uEADA',\r\n      Weights: '\\uEADB',\r\n      Trackers: '\\uEADF',\r\n      AddNotes: '\\uEAE3',\r\n      AllCurrency: '\\uEAE4',\r\n      BarChart4: '\\uEAE7',\r\n      CirclePlus: '\\uEAEE',\r\n      Coffee: '\\uEAEF',\r\n      Cotton: '\\uEAF3',\r\n      Market: '\\uEAFC',\r\n      Money: '\\uEAFD',\r\n      PieDouble: '\\uEB04',\r\n      PieSingle: '\\uEB05',\r\n      RemoveFilter: '\\uEB08',\r\n      Savings: '\\uEB0B',\r\n      Sell: '\\uEB0C',\r\n      StockDown: '\\uEB0F',\r\n      StockUp: '\\uEB11',\r\n      Lamp: '\\uEB19',\r\n      Source: '\\uEB1B',\r\n      MSNVideos: '\\uEB1C',\r\n      Cricket: '\\uEB1E',\r\n      Golf: '\\uEB1F',\r\n      Baseball: '\\uEB20',\r\n      Soccer: '\\uEB21',\r\n      MoreSports: '\\uEB22',\r\n      AutoRacing: '\\uEB24',\r\n      CollegeHoops: '\\uEB25',\r\n      CollegeFootball: '\\uEB26',\r\n      ProFootball: '\\uEB27',\r\n      ProHockey: '\\uEB28',\r\n      Rugby: '\\uEB2D',\r\n      SubstitutionsIn: '\\uEB31',\r\n      Tennis: '\\uEB33',\r\n      Arrivals: '\\uEB34',\r\n      Design: '\\uEB3C',\r\n      Website: '\\uEB41',\r\n      Drop: '\\uEB42',\r\n      HistoricalWeather: '\\uEB43',\r\n      SkiResorts: '\\uEB45',\r\n      Snowflake: '\\uEB46',\r\n      BusSolid: '\\uEB47',\r\n      FerrySolid: '\\uEB48',\r\n      AirplaneSolid: '\\uEB4C',\r\n      TrainSolid: '\\uEB4D',\r\n      Ticket: '\\uEB54',\r\n      WifiWarning4: '\\uEB63',\r\n      Devices4: '\\uEB66',\r\n      AzureLogo: '\\uEB6A',\r\n      BingLogo: '\\uEB6B',\r\n      MSNLogo: '\\uEB6C',\r\n      OutlookLogoInverse: '\\uEB6D',\r\n      OfficeLogo: '\\uEB6E',\r\n      SkypeLogo: '\\uEB6F',\r\n      Door: '\\uEB75',\r\n      EditMirrored: '\\uEB7E',\r\n      GiftCard: '\\uEB8E',\r\n      DoubleBookmark: '\\uEB8F',\r\n      StatusErrorFull: '\\uEB90',\r\n      Certificate: '\\uEB95',\r\n      FastForward: '\\uEB9D',\r\n      Rewind: '\\uEB9E',\r\n      Photo2: '\\uEB9F',\r\n      OpenSource: '\\uEBC2',\r\n      Movers: '\\uEBCD',\r\n      CloudDownload: '\\uEBD3',\r\n      Family: '\\uEBDA',\r\n      WindDirection: '\\uEBE6',\r\n      Bug: '\\uEBE8',\r\n      SiteScan: '\\uEBEC',\r\n      BrowserScreenShot: '\\uEBED',\r\n      F12DevTools: '\\uEBEE',\r\n      CSS: '\\uEBEF',\r\n      JS: '\\uEBF0',\r\n      DeliveryTruck: '\\uEBF4',\r\n      ReminderPerson: '\\uEBF7',\r\n      ReminderGroup: '\\uEBF8',\r\n      TabletMode: '\\uEBFC',\r\n      Umbrella: '\\uEC04',\r\n      NetworkTower: '\\uEC05',\r\n      CityNext: '\\uEC06',\r\n      CityNext2: '\\uEC07',\r\n      Section: '\\uEC0C',\r\n      OneNoteLogoInverse: '\\uEC0D',\r\n      ToggleFilled: '\\uEC11',\r\n      ToggleBorder: '\\uEC12',\r\n      SliderThumb: '\\uEC13',\r\n      ToggleThumb: '\\uEC14',\r\n      Documentation: '\\uEC17',\r\n      Badge: '\\uEC1B',\r\n      Giftbox: '\\uEC1F',\r\n      VisualStudioLogo: '\\uEC22'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-5\"`,\r\n      src: `url('${baseUrl}fabric-icons-5-f6de453a.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      HomeGroup: '\\uEC26',\r\n      ExcelLogoInverse: '\\uEC28',\r\n      WordLogoInverse: '\\uEC29',\r\n      PowerPointLogoInverse: '\\uEC2A',\r\n      Cafe: '\\uEC32',\r\n      SpeedHigh: '\\uEC4A',\r\n      Commitments: '\\uEC4D',\r\n      ThisPC: '\\uEC4E',\r\n      MusicNote: '\\uEC4F',\r\n      MicOff: '\\uEC54',\r\n      EdgeLogo: '\\uEC60',\r\n      CompletedSolid: '\\uEC61',\r\n      AlbumRemove: '\\uEC62',\r\n      MessageFill: '\\uEC70',\r\n      TabletSelected: '\\uEC74',\r\n      MobileSelected: '\\uEC75',\r\n      LaptopSelected: '\\uEC76',\r\n      TVMonitorSelected: '\\uEC77',\r\n      DeveloperTools: '\\uEC7A',\r\n      Shapes: '\\uEC7C',\r\n      InsertTextBox: '\\uEC7D',\r\n      LowerBrightness: '\\uEC8A',\r\n      WebComponents: '\\uEC8B',\r\n      OfflineStorage: '\\uEC8C',\r\n      DOM: '\\uEC8D',\r\n      CloudUpload: '\\uEC8E',\r\n      ScrollUpDown: '\\uEC8F',\r\n      DateTime: '\\uEC92',\r\n      Event: '\\uECA3',\r\n      Cake: '\\uECA4',\r\n      Org: '\\uECA6',\r\n      PartyLeader: '\\uECA7',\r\n      DRM: '\\uECA8',\r\n      CloudAdd: '\\uECA9',\r\n      AppIconDefault: '\\uECAA',\r\n      Photo2Add: '\\uECAB',\r\n      Photo2Remove: '\\uECAC',\r\n      POI: '\\uECAF',\r\n      AddTo: '\\uECC8',\r\n      RadioBtnOff: '\\uECCA',\r\n      RadioBtnOn: '\\uECCB',\r\n      ExploreContent: '\\uECCD',\r\n      Product: '\\uECDC',\r\n      ProgressLoopInner: '\\uECDE',\r\n      ProgressLoopOuter: '\\uECDF',\r\n      Blocked2: '\\uECE4',\r\n      FangBody: '\\uECEB',\r\n      PageHeader: '\\uECEE',\r\n      ChatInviteFriend: '\\uECFE',\r\n      Brush: '\\uECFF',\r\n      Shirt: '\\uED00',\r\n      Crown: '\\uED01',\r\n      Diamond: '\\uED02',\r\n      ScaleUp: '\\uED09',\r\n      QRCode: '\\uED14',\r\n      Feedback: '\\uED15',\r\n      SharepointLogoInverse: '\\uED18',\r\n      YammerLogo: '\\uED19',\r\n      Hide: '\\uED1A',\r\n      Uneditable: '\\uED1D',\r\n      ReturnToSession: '\\uED24',\r\n      OpenFolderHorizontal: '\\uED25',\r\n      CalendarMirrored: '\\uED28',\r\n      SwayLogoInverse: '\\uED29',\r\n      OutOfOffice: '\\uED34',\r\n      Trophy: '\\uED3F',\r\n      ReopenPages: '\\uED50',\r\n      EmojiTabSymbols: '\\uED58',\r\n      AADLogo: '\\uED68',\r\n      AccessLogo: '\\uED69',\r\n      AdminALogoInverse32: '\\uED6A',\r\n      AdminCLogoInverse32: '\\uED6B',\r\n      AdminDLogoInverse32: '\\uED6C',\r\n      AdminELogoInverse32: '\\uED6D',\r\n      AdminLLogoInverse32: '\\uED6E',\r\n      AdminMLogoInverse32: '\\uED6F',\r\n      AdminOLogoInverse32: '\\uED70',\r\n      AdminPLogoInverse32: '\\uED71',\r\n      AdminSLogoInverse32: '\\uED72',\r\n      AdminYLogoInverse32: '\\uED73',\r\n      DelveLogoInverse: '\\uED76',\r\n      ExchangeLogoInverse: '\\uED78',\r\n      LyncLogo: '\\uED79',\r\n      OfficeVideoLogoInverse: '\\uED7A',\r\n      SocialListeningLogo: '\\uED7C',\r\n      VisioLogoInverse: '\\uED7D',\r\n      Balloons: '\\uED7E',\r\n      Cat: '\\uED7F',\r\n      MailAlert: '\\uED80',\r\n      MailCheck: '\\uED81',\r\n      MailLowImportance: '\\uED82',\r\n      MailPause: '\\uED83',\r\n      MailRepeat: '\\uED84',\r\n      SecurityGroup: '\\uED85',\r\n      Table: '\\uED86',\r\n      VoicemailForward: '\\uED87',\r\n      VoicemailReply: '\\uED88',\r\n      Waffle: '\\uED89',\r\n      RemoveEvent: '\\uED8A',\r\n      EventInfo: '\\uED8B'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-6\"`,\r\n      src: `url('${baseUrl}fabric-icons-6-32b702b9.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      ForwardEvent: '\\uED8C',\r\n      WipePhone: '\\uED8D',\r\n      AddOnlineMeeting: '\\uED8E',\r\n      JoinOnlineMeeting: '\\uED8F',\r\n      RemoveLink: '\\uED90',\r\n      PeopleBlock: '\\uED91',\r\n      PeopleRepeat: '\\uED92',\r\n      PeopleAlert: '\\uED93',\r\n      PeoplePause: '\\uED94',\r\n      TransferCall: '\\uED95',\r\n      AddPhone: '\\uED96',\r\n      UnknownCall: '\\uED97',\r\n      NoteReply: '\\uED98',\r\n      NoteForward: '\\uED99',\r\n      NotePinned: '\\uED9A',\r\n      RemoveOccurrence: '\\uED9B',\r\n      Timeline: '\\uED9C',\r\n      EditNote: '\\uED9D',\r\n      CircleHalfFull: '\\uED9E',\r\n      Room: '\\uED9F',\r\n      Unsubscribe: '\\uEDA0',\r\n      Subscribe: '\\uEDA1',\r\n      HardDrive: '\\uEDA2',\r\n      RecurringTask: '\\uEDB2',\r\n      TaskManager: '\\uEDB7',\r\n      TaskManagerMirrored: '\\uEDB8',\r\n      Combine: '\\uEDBB',\r\n      Split: '\\uEDBC',\r\n      DoubleChevronUp: '\\uEDBD',\r\n      DoubleChevronLeft: '\\uEDBE',\r\n      DoubleChevronRight: '\\uEDBF',\r\n      TextBox: '\\uEDC2',\r\n      TextField: '\\uEDC3',\r\n      NumberField: '\\uEDC4',\r\n      Dropdown: '\\uEDC5',\r\n      PenWorkspace: '\\uEDC6',\r\n      BookingsLogo: '\\uEDC7',\r\n      ClassNotebookLogoInverse: '\\uEDC8',\r\n      DelveAnalyticsLogo: '\\uEDCA',\r\n      DocsLogoInverse: '\\uEDCB',\r\n      Dynamics365Logo: '\\uEDCC',\r\n      DynamicSMBLogo: '\\uEDCD',\r\n      OfficeAssistantLogo: '\\uEDCE',\r\n      OfficeStoreLogo: '\\uEDCF',\r\n      OneNoteEduLogoInverse: '\\uEDD0',\r\n      PlannerLogo: '\\uEDD1',\r\n      PowerApps: '\\uEDD2',\r\n      Suitcase: '\\uEDD3',\r\n      ProjectLogoInverse: '\\uEDD4',\r\n      CaretLeft8: '\\uEDD5',\r\n      CaretRight8: '\\uEDD6',\r\n      CaretUp8: '\\uEDD7',\r\n      CaretDown8: '\\uEDD8',\r\n      CaretLeftSolid8: '\\uEDD9',\r\n      CaretRightSolid8: '\\uEDDA',\r\n      CaretUpSolid8: '\\uEDDB',\r\n      CaretDownSolid8: '\\uEDDC',\r\n      ClearFormatting: '\\uEDDD',\r\n      Superscript: '\\uEDDE',\r\n      Subscript: '\\uEDDF',\r\n      Strikethrough: '\\uEDE0',\r\n      Export: '\\uEDE1',\r\n      ExportMirrored: '\\uEDE2',\r\n      SingleBookmark: '\\uEDFF',\r\n      SingleBookmarkSolid: '\\uEE00',\r\n      DoubleChevronDown: '\\uEE04',\r\n      FollowUser: '\\uEE05',\r\n      ReplyAll: '\\uEE0A',\r\n      WorkforceManagement: '\\uEE0F',\r\n      RecruitmentManagement: '\\uEE12',\r\n      Questionnaire: '\\uEE19',\r\n      ManagerSelfService: '\\uEE23',\r\n      ProductRelease: '\\uEE2E',\r\n      ReplyMirrored: '\\uEE35',\r\n      ReplyAllMirrored: '\\uEE36',\r\n      Medal: '\\uEE38',\r\n      AddGroup: '\\uEE3D',\r\n      QuestionnaireMirrored: '\\uEE4B',\r\n      TemporaryUser: '\\uEE58',\r\n      CaretSolid16: '\\uEE62',\r\n      GroupedDescending: '\\uEE66',\r\n      GroupedAscending: '\\uEE67',\r\n      AwayStatus: '\\uEE6A',\r\n      MyMoviesTV: '\\uEE6C',\r\n      GenericScan: '\\uEE6F',\r\n      AustralianRules: '\\uEE70',\r\n      WifiEthernet: '\\uEE77',\r\n      TrackersMirrored: '\\uEE92',\r\n      DateTimeMirrored: '\\uEE93',\r\n      StopSolid: '\\uEE95',\r\n      DoubleChevronUp12: '\\uEE96',\r\n      DoubleChevronDown12: '\\uEE97',\r\n      DoubleChevronLeft12: '\\uEE98',\r\n      DoubleChevronRight12: '\\uEE99',\r\n      CalendarAgenda: '\\uEE9A',\r\n      AddEvent: '\\uEEB5',\r\n      AssetLibrary: '\\uEEB6',\r\n      DataConnectionLibrary: '\\uEEB7',\r\n      DocLibrary: '\\uEEB8',\r\n      FormLibrary: '\\uEEB9'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-7\"`,\r\n      src: `url('${baseUrl}fabric-icons-7-bbebf62d.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      FormLibraryMirrored: '\\uEEBA',\r\n      ReportLibrary: '\\uEEBB',\r\n      ReportLibraryMirrored: '\\uEEBC',\r\n      ContactCard: '\\uEEBD',\r\n      CustomList: '\\uEEBE',\r\n      CustomListMirrored: '\\uEEBF',\r\n      IssueTracking: '\\uEEC0',\r\n      IssueTrackingMirrored: '\\uEEC1',\r\n      PictureLibrary: '\\uEEC2',\r\n      OfficeAddinsLogo: '\\uEEC7',\r\n      OfflineOneDriveParachute: '\\uEEC8',\r\n      OfflineOneDriveParachuteDisabled: '\\uEEC9',\r\n      TriangleSolidUp12: '\\uEECC',\r\n      TriangleSolidDown12: '\\uEECD',\r\n      TriangleSolidLeft12: '\\uEECE',\r\n      TriangleSolidRight12: '\\uEECF',\r\n      TriangleUp12: '\\uEED0',\r\n      TriangleDown12: '\\uEED1',\r\n      TriangleLeft12: '\\uEED2',\r\n      TriangleRight12: '\\uEED3',\r\n      ArrowUpRight8: '\\uEED4',\r\n      ArrowDownRight8: '\\uEED5',\r\n      DocumentSet: '\\uEED6',\r\n      DelveAnalytics: '\\uEEEE',\r\n      ArrowUpRightMirrored8: '\\uEEEF',\r\n      ArrowDownRightMirrored8: '\\uEEF0',\r\n      CompanyDirectory: '\\uEF0D',\r\n      OpenEnrollment: '\\uEF1C',\r\n      CompanyDirectoryMirrored: '\\uEF2B',\r\n      OneDriveAdd: '\\uEF32',\r\n      ProfileSearch: '\\uEF35',\r\n      Header2: '\\uEF36',\r\n      Header3: '\\uEF37',\r\n      Header4: '\\uEF38',\r\n      RingerSolid: '\\uEF3A',\r\n      Eyedropper: '\\uEF3C',\r\n      MarketDown: '\\uEF42',\r\n      CalendarWorkWeek: '\\uEF51',\r\n      SidePanel: '\\uEF52',\r\n      GlobeFavorite: '\\uEF53',\r\n      CaretTopLeftSolid8: '\\uEF54',\r\n      CaretTopRightSolid8: '\\uEF55',\r\n      ViewAll2: '\\uEF56',\r\n      DocumentReply: '\\uEF57',\r\n      PlayerSettings: '\\uEF58',\r\n      ReceiptForward: '\\uEF59',\r\n      ReceiptReply: '\\uEF5A',\r\n      ReceiptCheck: '\\uEF5B',\r\n      Fax: '\\uEF5C',\r\n      RecurringEvent: '\\uEF5D',\r\n      ReplyAlt: '\\uEF5E',\r\n      ReplyAllAlt: '\\uEF5F',\r\n      EditStyle: '\\uEF60',\r\n      EditMail: '\\uEF61',\r\n      Lifesaver: '\\uEF62',\r\n      LifesaverLock: '\\uEF63',\r\n      InboxCheck: '\\uEF64',\r\n      FolderSearch: '\\uEF65',\r\n      CollapseMenu: '\\uEF66',\r\n      ExpandMenu: '\\uEF67',\r\n      Boards: '\\uEF68',\r\n      SunAdd: '\\uEF69',\r\n      SunQuestionMark: '\\uEF6A',\r\n      LandscapeOrientation: '\\uEF6B',\r\n      DocumentSearch: '\\uEF6C',\r\n      PublicCalendar: '\\uEF6D',\r\n      PublicContactCard: '\\uEF6E',\r\n      PublicEmail: '\\uEF6F',\r\n      PublicFolder: '\\uEF70',\r\n      WordDocument: '\\uEF71',\r\n      PowerPointDocument: '\\uEF72',\r\n      ExcelDocument: '\\uEF73',\r\n      GroupedList: '\\uEF74',\r\n      ClassroomLogo: '\\uEF75',\r\n      Sections: '\\uEF76',\r\n      EditPhoto: '\\uEF77',\r\n      Starburst: '\\uEF78',\r\n      ShareiOS: '\\uEF79',\r\n      AirTickets: '\\uEF7A',\r\n      PencilReply: '\\uEF7B',\r\n      Tiles2: '\\uEF7C',\r\n      SkypeCircleCheck: '\\uEF7D',\r\n      SkypeCircleClock: '\\uEF7E',\r\n      SkypeCircleMinus: '\\uEF7F',\r\n      SkypeMessage: '\\uEF83',\r\n      ClosedCaption: '\\uEF84',\r\n      ATPLogo: '\\uEF85',\r\n      OfficeFormsLogoInverse: '\\uEF86',\r\n      RecycleBin: '\\uEF87',\r\n      EmptyRecycleBin: '\\uEF88',\r\n      Hide2: '\\uEF89',\r\n      Breadcrumb: '\\uEF8C',\r\n      BirthdayCake: '\\uEF8D',\r\n      TimeEntry: '\\uEF95',\r\n      CRMProcesses: '\\uEFB1',\r\n      PageEdit: '\\uEFB6',\r\n      PageArrowRight: '\\uEFB8',\r\n      PageRemove: '\\uEFBA',\r\n      Database: '\\uEFC7',\r\n      DataManagementSettings: '\\uEFC8'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-8\"`,\r\n      src: `url('${baseUrl}fabric-icons-8-50fd817c.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      CRMServices: '\\uEFD2',\r\n      EditContact: '\\uEFD3',\r\n      ConnectContacts: '\\uEFD4',\r\n      AppIconDefaultAdd: '\\uEFDA',\r\n      AppIconDefaultList: '\\uEFDE',\r\n      ActivateOrders: '\\uEFE0',\r\n      DeactivateOrders: '\\uEFE1',\r\n      DocumentManagement: '\\uEFFC',\r\n      CRMReport: '\\uEFFE',\r\n      KnowledgeArticle: '\\uF000',\r\n      Relationship: '\\uF003',\r\n      HomeVerify: '\\uF00E',\r\n      ZipFolder: '\\uF012',\r\n      SurveyQuestions: '\\uF01B',\r\n      TextDocument: '\\uF029',\r\n      TextDocumentShared: '\\uF02B',\r\n      PageCheckedOut: '\\uF02C',\r\n      SaveAndClose: '\\uF038',\r\n      Script: '\\uF03A',\r\n      Archive: '\\uF03F',\r\n      ActivityFeed: '\\uF056',\r\n      Compare: '\\uF057',\r\n      EventDate: '\\uF059',\r\n      ArrowUpRight: '\\uF069',\r\n      CaretRight: '\\uF06B',\r\n      SetAction: '\\uF071',\r\n      CaretSolidLeft: '\\uF08D',\r\n      CaretSolidDown: '\\uF08E',\r\n      CaretSolidRight: '\\uF08F',\r\n      CaretSolidUp: '\\uF090',\r\n      PowerAppsLogo: '\\uF091',\r\n      PowerApps2Logo: '\\uF092',\r\n      SearchIssue: '\\uF09A',\r\n      SearchIssueMirrored: '\\uF09B',\r\n      FabricAssetLibrary: '\\uF09C',\r\n      FabricDataConnectionLibrary: '\\uF09D',\r\n      FabricDocLibrary: '\\uF09E',\r\n      FabricFormLibrary: '\\uF09F',\r\n      FabricFormLibraryMirrored: '\\uF0A0',\r\n      FabricReportLibrary: '\\uF0A1',\r\n      FabricReportLibraryMirrored: '\\uF0A2',\r\n      FabricPublicFolder: '\\uF0A3',\r\n      FabricFolderSearch: '\\uF0A4',\r\n      FabricMovetoFolder: '\\uF0A5',\r\n      FabricUnsyncFolder: '\\uF0A6',\r\n      FabricSyncFolder: '\\uF0A7',\r\n      FabricOpenFolderHorizontal: '\\uF0A8',\r\n      FabricFolder: '\\uF0A9',\r\n      FabricFolderFill: '\\uF0AA',\r\n      FabricNewFolder: '\\uF0AB',\r\n      FabricPictureLibrary: '\\uF0AC',\r\n      AddFavorite: '\\uF0C8',\r\n      AddFavoriteFill: '\\uF0C9',\r\n      BufferTimeBefore: '\\uF0CF',\r\n      BufferTimeAfter: '\\uF0D0',\r\n      BufferTimeBoth: '\\uF0D1',\r\n      PublishContent: '\\uF0D4',\r\n      ClipboardList: '\\uF0E3',\r\n      ClipboardListMirrored: '\\uF0E4',\r\n      CannedChat: '\\uF0F2',\r\n      SkypeForBusinessLogo: '\\uF0FC',\r\n      TabCenter: '\\uF100',\r\n      PageCheckedin: '\\uF104',\r\n      PageList: '\\uF106',\r\n      ReadOutLoud: '\\uF112',\r\n      CaretBottomLeftSolid8: '\\uF121',\r\n      CaretBottomRightSolid8: '\\uF122',\r\n      FolderHorizontal: '\\uF12B',\r\n      MicrosoftStaffhubLogo: '\\uF130',\r\n      GiftboxOpen: '\\uF133',\r\n      StatusCircleOuter: '\\uF136',\r\n      StatusCircleInner: '\\uF137',\r\n      StatusCircleRing: '\\uF138',\r\n      StatusTriangleOuter: '\\uF139',\r\n      StatusTriangleInner: '\\uF13A',\r\n      StatusTriangleExclamation: '\\uF13B',\r\n      StatusCircleExclamation: '\\uF13C',\r\n      StatusCircleErrorX: '\\uF13D',\r\n      StatusCircleInfo: '\\uF13F',\r\n      StatusCircleBlock: '\\uF140',\r\n      StatusCircleBlock2: '\\uF141',\r\n      StatusCircleQuestionMark: '\\uF142',\r\n      StatusCircleSync: '\\uF143',\r\n      Toll: '\\uF160',\r\n      ExploreContentSingle: '\\uF164',\r\n      CollapseContent: '\\uF165',\r\n      CollapseContentSingle: '\\uF166',\r\n      InfoSolid: '\\uF167',\r\n      ProgressRingDots: '\\uF16A',\r\n      CaloriesAdd: '\\uF172',\r\n      BranchFork: '\\uF173',\r\n      AddHome: '\\uF17B',\r\n      MobileReport: '\\uF18A',\r\n      ScaleVolume: '\\uF18C',\r\n      HardDriveGroup: '\\uF18F',\r\n      FastMode: '\\uF19A',\r\n      ToggleLeft: '\\uF19E',\r\n      ToggleRight: '\\uF19F',\r\n      TriangleShape: '\\uF1A7',\r\n      RectangleShape: '\\uF1A9'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-9\"`,\r\n      src: `url('${baseUrl}fabric-icons-9-88060b8a.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      Trophy2: '\\uF1AE',\r\n      BucketColor: '\\uF1B6',\r\n      BucketColorFill: '\\uF1B7',\r\n      Taskboard: '\\uF1C2',\r\n      SingleColumn: '\\uF1D3',\r\n      DoubleColumn: '\\uF1D4',\r\n      TripleColumn: '\\uF1D5',\r\n      ColumnLeftTwoThirds: '\\uF1D6',\r\n      ColumnRightTwoThirds: '\\uF1D7',\r\n      AccessLogoFill: '\\uF1DB',\r\n      AnalyticsLogo: '\\uF1DE',\r\n      AnalyticsQuery: '\\uF1DF',\r\n      NewAnalyticsQuery: '\\uF1E0',\r\n      AnalyticsReport: '\\uF1E1',\r\n      WordLogo: '\\uF1E3',\r\n      WordLogoFill: '\\uF1E4',\r\n      ExcelLogo: '\\uF1E5',\r\n      ExcelLogoFill: '\\uF1E6',\r\n      OneNoteLogo: '\\uF1E7',\r\n      OneNoteLogoFill: '\\uF1E8',\r\n      OutlookLogo: '\\uF1E9',\r\n      OutlookLogoFill: '\\uF1EA',\r\n      PowerPointLogo: '\\uF1EB',\r\n      PowerPointLogoFill: '\\uF1EC',\r\n      PublisherLogo: '\\uF1ED',\r\n      PublisherLogoFill: '\\uF1EE',\r\n      ScheduleEventAction: '\\uF1EF',\r\n      FlameSolid: '\\uF1F3',\r\n      ServerProcesses: '\\uF1FE',\r\n      Server: '\\uF201',\r\n      SaveAll: '\\uF203',\r\n      LinkedInLogo: '\\uF20A',\r\n      Decimals: '\\uF218',\r\n      SidePanelMirrored: '\\uF221',\r\n      ProtectRestrict: '\\uF22A',\r\n      Blog: '\\uF22B',\r\n      UnknownMirrored: '\\uF22E',\r\n      PublicContactCardMirrored: '\\uF230',\r\n      GridViewSmall: '\\uF232',\r\n      GridViewMedium: '\\uF233',\r\n      GridViewLarge: '\\uF234',\r\n      Step: '\\uF241',\r\n      StepInsert: '\\uF242',\r\n      StepShared: '\\uF243',\r\n      StepSharedAdd: '\\uF244',\r\n      StepSharedInsert: '\\uF245',\r\n      ViewDashboard: '\\uF246',\r\n      ViewList: '\\uF247',\r\n      ViewListGroup: '\\uF248',\r\n      ViewListTree: '\\uF249',\r\n      TriggerAuto: '\\uF24A',\r\n      TriggerUser: '\\uF24B',\r\n      PivotChart: '\\uF24C',\r\n      StackedBarChart: '\\uF24D',\r\n      StackedLineChart: '\\uF24E',\r\n      BuildQueue: '\\uF24F',\r\n      BuildQueueNew: '\\uF250',\r\n      UserFollowed: '\\uF25C',\r\n      ContactLink: '\\uF25F',\r\n      Stack: '\\uF26F',\r\n      Bullseye: '\\uF272',\r\n      VennDiagram: '\\uF273',\r\n      FiveTileGrid: '\\uF274',\r\n      FocalPoint: '\\uF277',\r\n      RingerRemove: '\\uF279',\r\n      TeamsLogoInverse: '\\uF27A',\r\n      TeamsLogo: '\\uF27B',\r\n      TeamsLogoFill: '\\uF27C',\r\n      SkypeForBusinessLogoFill: '\\uF27D',\r\n      SharepointLogo: '\\uF27E',\r\n      SharepointLogoFill: '\\uF27F',\r\n      DelveLogo: '\\uF280',\r\n      DelveLogoFill: '\\uF281',\r\n      OfficeVideoLogo: '\\uF282',\r\n      OfficeVideoLogoFill: '\\uF283',\r\n      ExchangeLogo: '\\uF284',\r\n      ExchangeLogoFill: '\\uF285',\r\n      Signin: '\\uF286',\r\n      DocumentApproval: '\\uF28B',\r\n      CloneToDesktop: '\\uF28C',\r\n      InstallToDrive: '\\uF28D',\r\n      Blur: '\\uF28E',\r\n      Build: '\\uF28F',\r\n      ProcessMetaTask: '\\uF290',\r\n      BranchFork2: '\\uF291',\r\n      BranchLocked: '\\uF292',\r\n      BranchCommit: '\\uF293',\r\n      BranchCompare: '\\uF294',\r\n      BranchMerge: '\\uF295',\r\n      BranchPullRequest: '\\uF296',\r\n      BranchSearch: '\\uF297',\r\n      BranchShelveset: '\\uF298',\r\n      RawSource: '\\uF299',\r\n      MergeDuplicate: '\\uF29A',\r\n      RowsGroup: '\\uF29B',\r\n      RowsChild: '\\uF29C',\r\n      Deploy: '\\uF29D',\r\n      Redeploy: '\\uF29E',\r\n      ServerEnviroment: '\\uF29F',\r\n      VisioDiagram: '\\uF2A0'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-10\"`,\r\n      src: `url('${baseUrl}fabric-icons-10-1ca3e4a1.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      HighlightMappedShapes: '\\uF2A1',\r\n      TextCallout: '\\uF2A2',\r\n      IconSetsFlag: '\\uF2A4',\r\n      VisioLogo: '\\uF2A7',\r\n      VisioLogoFill: '\\uF2A8',\r\n      VisioDocument: '\\uF2A9',\r\n      TimelineProgress: '\\uF2AA',\r\n      TimelineDelivery: '\\uF2AB',\r\n      Backlog: '\\uF2AC',\r\n      TeamFavorite: '\\uF2AD',\r\n      TaskGroup: '\\uF2AE',\r\n      TaskGroupMirrored: '\\uF2AF',\r\n      ScopeTemplate: '\\uF2B0',\r\n      AssessmentGroupTemplate: '\\uF2B1',\r\n      NewTeamProject: '\\uF2B2',\r\n      CommentAdd: '\\uF2B3',\r\n      CommentNext: '\\uF2B4',\r\n      CommentPrevious: '\\uF2B5',\r\n      ShopServer: '\\uF2B6',\r\n      LocaleLanguage: '\\uF2B7',\r\n      QueryList: '\\uF2B8',\r\n      UserSync: '\\uF2B9',\r\n      UserPause: '\\uF2BA',\r\n      StreamingOff: '\\uF2BB',\r\n      ArrowTallUpLeft: '\\uF2BD',\r\n      ArrowTallUpRight: '\\uF2BE',\r\n      ArrowTallDownLeft: '\\uF2BF',\r\n      ArrowTallDownRight: '\\uF2C0',\r\n      FieldEmpty: '\\uF2C1',\r\n      FieldFilled: '\\uF2C2',\r\n      FieldChanged: '\\uF2C3',\r\n      FieldNotChanged: '\\uF2C4',\r\n      RingerOff: '\\uF2C5',\r\n      PlayResume: '\\uF2C6',\r\n      BulletedList2: '\\uF2C7',\r\n      BulletedList2Mirrored: '\\uF2C8',\r\n      ImageCrosshair: '\\uF2C9',\r\n      GitGraph: '\\uF2CA',\r\n      Repo: '\\uF2CB',\r\n      RepoSolid: '\\uF2CC',\r\n      FolderQuery: '\\uF2CD',\r\n      FolderList: '\\uF2CE',\r\n      FolderListMirrored: '\\uF2CF',\r\n      LocationOutline: '\\uF2D0',\r\n      POISolid: '\\uF2D1',\r\n      CalculatorNotEqualTo: '\\uF2D2',\r\n      BoxSubtractSolid: '\\uF2D3',\r\n      BoxAdditionSolid: '\\uF2D4',\r\n      BoxMultiplySolid: '\\uF2D5',\r\n      BoxPlaySolid: '\\uF2D6',\r\n      BoxCheckmarkSolid: '\\uF2D7',\r\n      CirclePauseSolid: '\\uF2D8',\r\n      CirclePause: '\\uF2D9',\r\n      MSNVideosSolid: '\\uF2DA',\r\n      CircleStopSolid: '\\uF2DB',\r\n      CircleStop: '\\uF2DC',\r\n      NavigateBack: '\\uF2DD',\r\n      NavigateBackMirrored: '\\uF2DE',\r\n      NavigateForward: '\\uF2DF',\r\n      NavigateForwardMirrored: '\\uF2E0',\r\n      UnknownSolid: '\\uF2E1',\r\n      UnknownMirroredSolid: '\\uF2E2',\r\n      CircleAddition: '\\uF2E3',\r\n      CircleAdditionSolid: '\\uF2E4',\r\n      FilePDB: '\\uF2E5',\r\n      FileTemplate: '\\uF2E6',\r\n      FileSQL: '\\uF2E7',\r\n      FileJAVA: '\\uF2E8',\r\n      FileASPX: '\\uF2E9',\r\n      FileCSS: '\\uF2EA',\r\n      FileSass: '\\uF2EB',\r\n      FileLess: '\\uF2EC',\r\n      FileHTML: '\\uF2ED',\r\n      JavaScriptLanguage: '\\uF2EE',\r\n      CSharpLanguage: '\\uF2EF',\r\n      CSharp: '\\uF2F0',\r\n      VisualBasicLanguage: '\\uF2F1',\r\n      VB: '\\uF2F2',\r\n      CPlusPlusLanguage: '\\uF2F3',\r\n      CPlusPlus: '\\uF2F4',\r\n      FSharpLanguage: '\\uF2F5',\r\n      FSharp: '\\uF2F6',\r\n      TypeScriptLanguage: '\\uF2F7',\r\n      PythonLanguage: '\\uF2F8',\r\n      PY: '\\uF2F9',\r\n      CoffeeScript: '\\uF2FA',\r\n      MarkDownLanguage: '\\uF2FB',\r\n      FullWidth: '\\uF2FE',\r\n      FullWidthEdit: '\\uF2FF',\r\n      Plug: '\\uF300',\r\n      PlugSolid: '\\uF301',\r\n      PlugConnected: '\\uF302',\r\n      PlugDisconnected: '\\uF303',\r\n      UnlockSolid: '\\uF304',\r\n      Variable: '\\uF305',\r\n      Parameter: '\\uF306',\r\n      CommentUrgent: '\\uF307',\r\n      Storyboard: '\\uF308',\r\n      DiffInline: '\\uF309',\r\n      DiffSideBySide: '\\uF30A'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-11\"`,\r\n      src: `url('${baseUrl}fabric-icons-11-93bad8ee.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      ImageDiff: '\\uF30B',\r\n      ImagePixel: '\\uF30C',\r\n      FileBug: '\\uF30D',\r\n      FileCode: '\\uF30E',\r\n      FileComment: '\\uF30F',\r\n      BusinessHoursSign: '\\uF310',\r\n      FileImage: '\\uF311',\r\n      FileSymlink: '\\uF312',\r\n      AutoFillTemplate: '\\uF313',\r\n      WorkItem: '\\uF314',\r\n      WorkItemBug: '\\uF315',\r\n      LogRemove: '\\uF316',\r\n      ColumnOptions: '\\uF317',\r\n      Packages: '\\uF318',\r\n      BuildIssue: '\\uF319',\r\n      AssessmentGroup: '\\uF31A',\r\n      VariableGroup: '\\uF31B',\r\n      FullHistory: '\\uF31C',\r\n      SingleColumnEdit: '\\uF321',\r\n      DoubleColumnEdit: '\\uF322',\r\n      TripleColumnEdit: '\\uF323',\r\n      ColumnLeftTwoThirdsEdit: '\\uF324',\r\n      ColumnRightTwoThirdsEdit: '\\uF325',\r\n      StreamLogo: '\\uF329',\r\n      PassiveAuthentication: '\\uF32A',\r\n      AlertSolid: '\\uF331',\r\n      MegaphoneSolid: '\\uF332',\r\n      TaskSolid: '\\uF333',\r\n      ConfigurationSolid: '\\uF334',\r\n      BugSolid: '\\uF335',\r\n      CrownSolid: '\\uF336',\r\n      Trophy2Solid: '\\uF337',\r\n      QuickNoteSolid: '\\uF338',\r\n      ConstructionConeSolid: '\\uF339',\r\n      PageListSolid: '\\uF33A',\r\n      PageListMirroredSolid: '\\uF33B',\r\n      StarburstSolid: '\\uF33C',\r\n      ReadingModeSolid: '\\uF33D',\r\n      SadSolid: '\\uF33E',\r\n      HealthSolid: '\\uF33F',\r\n      ShieldSolid: '\\uF340',\r\n      GiftBoxSolid: '\\uF341',\r\n      ShoppingCartSolid: '\\uF342',\r\n      MailSolid: '\\uF343',\r\n      ChatSolid: '\\uF344',\r\n      RibbonSolid: '\\uF345',\r\n      FinancialSolid: '\\uF346',\r\n      FinancialMirroredSolid: '\\uF347',\r\n      HeadsetSolid: '\\uF348',\r\n      PermissionsSolid: '\\uF349',\r\n      ParkingSolid: '\\uF34A',\r\n      ParkingMirroredSolid: '\\uF34B',\r\n      DiamondSolid: '\\uF34C',\r\n      AsteriskSolid: '\\uF34D',\r\n      OfflineStorageSolid: '\\uF34E',\r\n      BankSolid: '\\uF34F',\r\n      DecisionSolid: '\\uF350',\r\n      Parachute: '\\uF351',\r\n      ParachuteSolid: '\\uF352',\r\n      FiltersSolid: '\\uF353',\r\n      ColorSolid: '\\uF354',\r\n      ReviewSolid: '\\uF355',\r\n      ReviewRequestSolid: '\\uF356',\r\n      ReviewRequestMirroredSolid: '\\uF357',\r\n      ReviewResponseSolid: '\\uF358',\r\n      FeedbackRequestSolid: '\\uF359',\r\n      FeedbackRequestMirroredSolid: '\\uF35A',\r\n      FeedbackResponseSolid: '\\uF35B',\r\n      WorkItemBar: '\\uF35C',\r\n      WorkItemBarSolid: '\\uF35D',\r\n      Separator: '\\uF35E',\r\n      NavigateExternalInline: '\\uF35F',\r\n      PlanView: '\\uF360',\r\n      TimelineMatrixView: '\\uF361',\r\n      EngineeringGroup: '\\uF362',\r\n      ProjectCollection: '\\uF363',\r\n      CaretBottomRightCenter8: '\\uF364',\r\n      CaretBottomLeftCenter8: '\\uF365',\r\n      CaretTopRightCenter8: '\\uF366',\r\n      CaretTopLeftCenter8: '\\uF367',\r\n      DonutChart: '\\uF368',\r\n      ChevronUnfold10: '\\uF369',\r\n      ChevronFold10: '\\uF36A',\r\n      DoubleChevronDown8: '\\uF36B',\r\n      DoubleChevronUp8: '\\uF36C',\r\n      DoubleChevronLeft8: '\\uF36D',\r\n      DoubleChevronRight8: '\\uF36E',\r\n      ChevronDownEnd6: '\\uF36F',\r\n      ChevronUpEnd6: '\\uF370',\r\n      ChevronLeftEnd6: '\\uF371',\r\n      ChevronRightEnd6: '\\uF372',\r\n      ContextMenu: '\\uF37C',\r\n      AzureAPIManagement: '\\uF37F',\r\n      AzureServiceEndpoint: '\\uF380',\r\n      VSTSLogo: '\\uF381',\r\n      VSTSAltLogo1: '\\uF382',\r\n      VSTSAltLogo2: '\\uF383',\r\n      FileTypeSolution: '\\uF387',\r\n      WordLogoInverse16: '\\uF390',\r\n      WordLogo16: '\\uF391'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-12\"`,\r\n      src: `url('${baseUrl}fabric-icons-12-d9534567.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      WordLogoFill16: '\\uF392',\r\n      PowerPointLogoInverse16: '\\uF393',\r\n      PowerPointLogo16: '\\uF394',\r\n      PowerPointLogoFill16: '\\uF395',\r\n      ExcelLogoInverse16: '\\uF396',\r\n      ExcelLogo16: '\\uF397',\r\n      ExcelLogoFill16: '\\uF398',\r\n      OneNoteLogoInverse16: '\\uF399',\r\n      OneNoteLogo16: '\\uF39A',\r\n      OneNoteLogoFill16: '\\uF39B',\r\n      OutlookLogoInverse16: '\\uF39C',\r\n      OutlookLogo16: '\\uF39D',\r\n      OutlookLogoFill16: '\\uF39E',\r\n      PublisherLogoInverse16: '\\uF39F',\r\n      PublisherLogo16: '\\uF3A0',\r\n      PublisherLogoFill16: '\\uF3A1',\r\n      VisioLogoInverse16: '\\uF3A2',\r\n      VisioLogo16: '\\uF3A3',\r\n      VisioLogoFill16: '\\uF3A4',\r\n      TestBeaker: '\\uF3A5',\r\n      TestBeakerSolid: '\\uF3A6',\r\n      TestExploreSolid: '\\uF3A7',\r\n      TestAutoSolid: '\\uF3A8',\r\n      TestUserSolid: '\\uF3A9',\r\n      TestImpactSolid: '\\uF3AA',\r\n      TestPlan: '\\uF3AB',\r\n      TestStep: '\\uF3AC',\r\n      TestParameter: '\\uF3AD',\r\n      TestSuite: '\\uF3AE',\r\n      TestCase: '\\uF3AF',\r\n      Sprint: '\\uF3B0',\r\n      SignOut: '\\uF3B1',\r\n      TriggerApproval: '\\uF3B2',\r\n      Rocket: '\\uF3B3',\r\n      AzureKeyVault: '\\uF3B4',\r\n      Onboarding: '\\uF3BA',\r\n      Transition: '\\uF3BC',\r\n      LikeSolid: '\\uF3BF',\r\n      DislikeSolid: '\\uF3C0',\r\n      CRMCustomerInsightsApp: '\\uF3C8',\r\n      EditCreate: '\\uF3C9',\r\n      UnSetColor: '\\uF3F9',\r\n      DeclineCall: '\\uF405',\r\n      RectangularClipping: '\\uF407',\r\n      TeamsLogo16: '\\uF40A',\r\n      TeamsLogoFill16: '\\uF40B',\r\n      Spacer: '\\uF40D',\r\n      SkypeLogo16: '\\uF40E',\r\n      SkypeForBusinessLogo16: '\\uF40F',\r\n      SkypeForBusinessLogoFill16: '\\uF410',\r\n      FilterSolid: '\\uF412',\r\n      MailUndelivered: '\\uF415',\r\n      MailTentative: '\\uF416',\r\n      MailTentativeMirrored: '\\uF417',\r\n      MailReminder: '\\uF418',\r\n      ReceiptUndelivered: '\\uF419',\r\n      ReceiptTentative: '\\uF41A',\r\n      ReceiptTentativeMirrored: '\\uF41B',\r\n      Inbox: '\\uF41C',\r\n      IRMReply: '\\uF41D',\r\n      IRMReplyMirrored: '\\uF41E',\r\n      IRMForward: '\\uF41F',\r\n      IRMForwardMirrored: '\\uF420',\r\n      VoicemailIRM: '\\uF421',\r\n      EventAccepted: '\\uF422',\r\n      EventTentative: '\\uF423',\r\n      EventTentativeMirrored: '\\uF424',\r\n      EventDeclined: '\\uF425',\r\n      IDBadge: '\\uF427',\r\n      BackgroundColor: '\\uF42B',\r\n      OfficeFormsLogoInverse16: '\\uF433',\r\n      OfficeFormsLogo: '\\uF434',\r\n      OfficeFormsLogoFill: '\\uF435',\r\n      OfficeFormsLogo16: '\\uF436',\r\n      OfficeFormsLogoFill16: '\\uF437',\r\n      OfficeFormsLogoInverse24: '\\uF43A',\r\n      OfficeFormsLogo24: '\\uF43B',\r\n      OfficeFormsLogoFill24: '\\uF43C',\r\n      PageLock: '\\uF43F',\r\n      NotExecuted: '\\uF440',\r\n      NotImpactedSolid: '\\uF441',\r\n      FieldReadOnly: '\\uF442',\r\n      FieldRequired: '\\uF443',\r\n      BacklogBoard: '\\uF444',\r\n      ExternalBuild: '\\uF445',\r\n      ExternalTFVC: '\\uF446',\r\n      ExternalXAML: '\\uF447',\r\n      IssueSolid: '\\uF448',\r\n      DefectSolid: '\\uF449',\r\n      LadybugSolid: '\\uF44A',\r\n      NugetLogo: '\\uF44C',\r\n      TFVCLogo: '\\uF44D',\r\n      ProjectLogo32: '\\uF47E',\r\n      ProjectLogoFill32: '\\uF47F',\r\n      ProjectLogo16: '\\uF480',\r\n      ProjectLogoFill16: '\\uF481',\r\n      SwayLogo32: '\\uF482',\r\n      SwayLogoFill32: '\\uF483',\r\n      SwayLogo16: '\\uF484',\r\n      SwayLogoFill16: '\\uF485'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-13\"`,\r\n      src: `url('${baseUrl}fabric-icons-13-0b48c801.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      ClassNotebookLogo32: '\\uF486',\r\n      ClassNotebookLogoFill32: '\\uF487',\r\n      ClassNotebookLogo16: '\\uF488',\r\n      ClassNotebookLogoFill16: '\\uF489',\r\n      ClassNotebookLogoInverse32: '\\uF48A',\r\n      ClassNotebookLogoInverse16: '\\uF48B',\r\n      StaffNotebookLogo32: '\\uF48C',\r\n      StaffNotebookLogoFill32: '\\uF48D',\r\n      StaffNotebookLogo16: '\\uF48E',\r\n      StaffNotebookLogoFill16: '\\uF48F',\r\n      StaffNotebookLogoInverted32: '\\uF490',\r\n      StaffNotebookLogoInverted16: '\\uF491',\r\n      KaizalaLogo: '\\uF492',\r\n      TaskLogo: '\\uF493',\r\n      ProtectionCenterLogo32: '\\uF494',\r\n      GallatinLogo: '\\uF496',\r\n      Globe2: '\\uF49A',\r\n      Guitar: '\\uF49B',\r\n      Breakfast: '\\uF49C',\r\n      Brunch: '\\uF49D',\r\n      BeerMug: '\\uF49E',\r\n      Vacation: '\\uF49F',\r\n      Teeth: '\\uF4A0',\r\n      Taxi: '\\uF4A1',\r\n      Chopsticks: '\\uF4A2',\r\n      SyncOccurence: '\\uF4A3',\r\n      UnsyncOccurence: '\\uF4A4',\r\n      GIF: '\\uF4A9',\r\n      PrimaryCalendar: '\\uF4AE',\r\n      SearchCalendar: '\\uF4AF',\r\n      VideoOff: '\\uF4B0',\r\n      MicrosoftFlowLogo: '\\uF4B1',\r\n      BusinessCenterLogo: '\\uF4B2',\r\n      ToDoLogoBottom: '\\uF4B3',\r\n      ToDoLogoTop: '\\uF4B4',\r\n      EditSolid12: '\\uF4B5',\r\n      EditSolidMirrored12: '\\uF4B6',\r\n      UneditableSolid12: '\\uF4B7',\r\n      UneditableSolidMirrored12: '\\uF4B8',\r\n      UneditableMirrored: '\\uF4B9',\r\n      AdminALogo32: '\\uF4BA',\r\n      AdminALogoFill32: '\\uF4BB',\r\n      ToDoLogoInverse: '\\uF4BC',\r\n      Snooze: '\\uF4BD',\r\n      WaffleOffice365: '\\uF4E0',\r\n      ImageSearch: '\\uF4E8',\r\n      NewsSearch: '\\uF4E9',\r\n      VideoSearch: '\\uF4EA',\r\n      R: '\\uF4EB',\r\n      FontColorA: '\\uF4EC',\r\n      FontColorSwatch: '\\uF4ED',\r\n      LightWeight: '\\uF4EE',\r\n      NormalWeight: '\\uF4EF',\r\n      SemiboldWeight: '\\uF4F0',\r\n      GroupObject: '\\uF4F1',\r\n      UngroupObject: '\\uF4F2',\r\n      AlignHorizontalLeft: '\\uF4F3',\r\n      AlignHorizontalCenter: '\\uF4F4',\r\n      AlignHorizontalRight: '\\uF4F5',\r\n      AlignVerticalTop: '\\uF4F6',\r\n      AlignVerticalCenter: '\\uF4F7',\r\n      AlignVerticalBottom: '\\uF4F8',\r\n      HorizontalDistributeCenter: '\\uF4F9',\r\n      VerticalDistributeCenter: '\\uF4FA',\r\n      Ellipse: '\\uF4FB',\r\n      Line: '\\uF4FC',\r\n      Octagon: '\\uF4FD',\r\n      Hexagon: '\\uF4FE',\r\n      Pentagon: '\\uF4FF',\r\n      RightTriangle: '\\uF500',\r\n      HalfCircle: '\\uF501',\r\n      QuarterCircle: '\\uF502',\r\n      ThreeQuarterCircle: '\\uF503',\r\n      '6PointStar': '\\uF504',\r\n      '12PointStar': '\\uF505',\r\n      ArrangeBringToFront: '\\uF506',\r\n      ArrangeSendToBack: '\\uF507',\r\n      ArrangeSendBackward: '\\uF508',\r\n      ArrangeBringForward: '\\uF509',\r\n      BorderDash: '\\uF50A',\r\n      BorderDot: '\\uF50B',\r\n      LineStyle: '\\uF50C',\r\n      LineThickness: '\\uF50D',\r\n      WindowEdit: '\\uF50E',\r\n      HintText: '\\uF50F',\r\n      MediaAdd: '\\uF510',\r\n      AnchorLock: '\\uF511',\r\n      AutoHeight: '\\uF512',\r\n      ChartSeries: '\\uF513',\r\n      ChartXAngle: '\\uF514',\r\n      ChartYAngle: '\\uF515',\r\n      Combobox: '\\uF516',\r\n      LineSpacing: '\\uF517',\r\n      Padding: '\\uF518',\r\n      PaddingTop: '\\uF519',\r\n      PaddingBottom: '\\uF51A',\r\n      PaddingLeft: '\\uF51B',\r\n      PaddingRight: '\\uF51C',\r\n      NavigationFlipper: '\\uF51D',\r\n      AlignJustify: '\\uF51E'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-14\"`,\r\n      src: `url('${baseUrl}fabric-icons-14-9a8324a9.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      TextOverflow: '\\uF51F',\r\n      VisualsFolder: '\\uF520',\r\n      VisualsStore: '\\uF521',\r\n      PictureCenter: '\\uF522',\r\n      PictureFill: '\\uF523',\r\n      PicturePosition: '\\uF524',\r\n      PictureStretch: '\\uF525',\r\n      PictureTile: '\\uF526',\r\n      Slider: '\\uF527',\r\n      SliderHandleSize: '\\uF528',\r\n      DefaultRatio: '\\uF529',\r\n      NumberSequence: '\\uF52A',\r\n      GUID: '\\uF52B',\r\n      ReportAdd: '\\uF52C',\r\n      DashboardAdd: '\\uF52D',\r\n      MapPinSolid: '\\uF52E',\r\n      WebPublish: '\\uF52F',\r\n      PieSingleSolid: '\\uF530',\r\n      BlockedSolid: '\\uF531',\r\n      DrillDown: '\\uF532',\r\n      DrillDownSolid: '\\uF533',\r\n      DrillExpand: '\\uF534',\r\n      DrillShow: '\\uF535',\r\n      SpecialEvent: '\\uF536',\r\n      OneDriveFolder16: '\\uF53B',\r\n      FunctionalManagerDashboard: '\\uF542',\r\n      BIDashboard: '\\uF543',\r\n      CodeEdit: '\\uF544',\r\n      RenewalCurrent: '\\uF545',\r\n      RenewalFuture: '\\uF546',\r\n      SplitObject: '\\uF547',\r\n      BulkUpload: '\\uF548',\r\n      DownloadDocument: '\\uF549',\r\n      Flower: '\\uF54E',\r\n      WaitlistConfirm: '\\uF550',\r\n      WaitlistConfirmMirrored: '\\uF551',\r\n      LaptopSecure: '\\uF552',\r\n      DragObject: '\\uF553',\r\n      EntryView: '\\uF554',\r\n      EntryDecline: '\\uF555',\r\n      ContactCardSettings: '\\uF556',\r\n      ContactCardSettingsMirrored: '\\uF557',\r\n      CalendarSettings: '\\uF558',\r\n      CalendarSettingsMirrored: '\\uF559',\r\n      HardDriveLock: '\\uF55A',\r\n      HardDriveUnlock: '\\uF55B',\r\n      AccountManagement: '\\uF55C',\r\n      TransitionPop: '\\uF5B2',\r\n      TransitionPush: '\\uF5B3',\r\n      TransitionEffect: '\\uF5B4',\r\n      LookupEntities: '\\uF5B5',\r\n      ExploreData: '\\uF5B6',\r\n      AddBookmark: '\\uF5B7',\r\n      SearchBookmark: '\\uF5B8',\r\n      DrillThrough: '\\uF5B9',\r\n      MasterDatabase: '\\uF5BA',\r\n      CertifiedDatabase: '\\uF5BB',\r\n      MaximumValue: '\\uF5BC',\r\n      MinimumValue: '\\uF5BD',\r\n      VisualStudioIDELogo32: '\\uF5D0',\r\n      PasteAsText: '\\uF5D5',\r\n      PasteAsCode: '\\uF5D6',\r\n      BrowserTab: '\\uF5D7',\r\n      BrowserTabScreenshot: '\\uF5D8',\r\n      DesktopScreenshot: '\\uF5D9',\r\n      FileYML: '\\uF5DA',\r\n      ClipboardSolid: '\\uF5DC',\r\n      FabricUserFolder: '\\uF5E5',\r\n      FabricNetworkFolder: '\\uF5E6',\r\n      AnalyticsView: '\\uF5F1',\r\n      Video360Generic: '\\uF609',\r\n      Leave: '\\uF627',\r\n      Trending12: '\\uF62D',\r\n      Blocked12: '\\uF62E',\r\n      Warning12: '\\uF62F',\r\n      CheckedOutByOther12: '\\uF630',\r\n      CheckedOutByYou12: '\\uF631',\r\n      CircleShapeSolid: '\\uF63C',\r\n      SquareShapeSolid: '\\uF63D',\r\n      TriangleShapeSolid: '\\uF63E',\r\n      DropShapeSolid: '\\uF63F',\r\n      RectangleShapeSolid: '\\uF640',\r\n      ZoomToFit: '\\uF649',\r\n      InsertColumnsLeft: '\\uF64A',\r\n      InsertColumnsRight: '\\uF64B',\r\n      InsertRowsAbove: '\\uF64C',\r\n      InsertRowsBelow: '\\uF64D',\r\n      DeleteColumns: '\\uF64E',\r\n      DeleteRows: '\\uF64F',\r\n      DeleteRowsMirrored: '\\uF650',\r\n      DeleteTable: '\\uF651',\r\n      AccountBrowser: '\\uF652',\r\n      VersionControlPush: '\\uF664',\r\n      StackedColumnChart2: '\\uF666',\r\n      TripleColumnWide: '\\uF66E',\r\n      QuadColumn: '\\uF66F',\r\n      WhiteBoardApp16: '\\uF673',\r\n      WhiteBoardApp32: '\\uF674',\r\n      InsertSignatureLine: '\\uF677',\r\n      ArrangeByFrom: '\\uF678'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-15\"`,\r\n      src: `url('${baseUrl}fabric-icons-15-65272067.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      Phishing: '\\uF679',\r\n      CreateMailRule: '\\uF67A',\r\n      PublishCourse: '\\uF699',\r\n      DictionaryRemove: '\\uF69A',\r\n      UserRemove: '\\uF69B',\r\n      UserEvent: '\\uF69C',\r\n      Encryption: '\\uF69D',\r\n      PasswordField: '\\uF6AA',\r\n      OpenInNewTab: '\\uF6AB',\r\n      Hide3: '\\uF6AC',\r\n      VerifiedBrandSolid: '\\uF6AD',\r\n      MarkAsProtected: '\\uF6AE',\r\n      AuthenticatorApp: '\\uF6B1',\r\n      WebTemplate: '\\uF6B2',\r\n      DefenderTVM: '\\uF6B3',\r\n      MedalSolid: '\\uF6B9',\r\n      D365TalentLearn: '\\uF6BB',\r\n      D365TalentInsight: '\\uF6BC',\r\n      D365TalentHRCore: '\\uF6BD',\r\n      BacklogList: '\\uF6BF',\r\n      ButtonControl: '\\uF6C0',\r\n      TableGroup: '\\uF6D9',\r\n      MountainClimbing: '\\uF6DB',\r\n      TagUnknown: '\\uF6DF',\r\n      TagUnknownMirror: '\\uF6E0',\r\n      TagUnknown12: '\\uF6E1',\r\n      TagUnknown12Mirror: '\\uF6E2',\r\n      Link12: '\\uF6E3',\r\n      Presentation: '\\uF6E4',\r\n      Presentation12: '\\uF6E5',\r\n      Lock12: '\\uF6E6',\r\n      BuildDefinition: '\\uF6E9',\r\n      ReleaseDefinition: '\\uF6EA',\r\n      SaveTemplate: '\\uF6EC',\r\n      UserGauge: '\\uF6ED',\r\n      BlockedSiteSolid12: '\\uF70A',\r\n      TagSolid: '\\uF70E',\r\n      OfficeChat: '\\uF70F',\r\n      OfficeChatSolid: '\\uF710',\r\n      MailSchedule: '\\uF72E',\r\n      WarningSolid: '\\uF736',\r\n      Blocked2Solid: '\\uF737',\r\n      SkypeCircleArrow: '\\uF747',\r\n      SkypeArrow: '\\uF748',\r\n      SyncStatus: '\\uF751',\r\n      SyncStatusSolid: '\\uF752',\r\n      ProjectDocument: '\\uF759',\r\n      ToDoLogoOutline: '\\uF75B',\r\n      VisioOnlineLogoFill32: '\\uF75F',\r\n      VisioOnlineLogo32: '\\uF760',\r\n      VisioOnlineLogoCloud32: '\\uF761',\r\n      VisioDiagramSync: '\\uF762',\r\n      Event12: '\\uF763',\r\n      EventDateMissed12: '\\uF764',\r\n      UserOptional: '\\uF767',\r\n      ResponsesMenu: '\\uF768',\r\n      DoubleDownArrow: '\\uF769',\r\n      DistributeDown: '\\uF76A',\r\n      BookmarkReport: '\\uF76B',\r\n      FilterSettings: '\\uF76C',\r\n      GripperDotsVertical: '\\uF772',\r\n      MailAttached: '\\uF774',\r\n      AddIn: '\\uF775',\r\n      LinkedDatabase: '\\uF779',\r\n      PromotedDatabase: '\\uF77D',\r\n      BarChartVerticalFilter: '\\uF77E',\r\n      BarChartVerticalFilterSolid: '\\uF77F',\r\n      MicrosoftTranslatorLogo: '\\uF782',\r\n      ShowTimeAs: '\\uF787',\r\n      FileRequest: '\\uF789',\r\n      WorkItemAlert: '\\uF78F',\r\n      PowerBILogo16: '\\uF790',\r\n      PowerBILogoBackplate16: '\\uF791',\r\n      BulletedListText: '\\uF792',\r\n      BulletedListBullet: '\\uF793',\r\n      BulletedListTextMirrored: '\\uF794',\r\n      BulletedListBulletMirrored: '\\uF795',\r\n      NumberedListText: '\\uF796',\r\n      NumberedListNumber: '\\uF797',\r\n      NumberedListTextMirrored: '\\uF798',\r\n      NumberedListNumberMirrored: '\\uF799',\r\n      RemoveLinkChain: '\\uF79A',\r\n      RemoveLinkX: '\\uF79B',\r\n      FabricTextHighlight: '\\uF79C',\r\n      ClearFormattingA: '\\uF79D',\r\n      ClearFormattingEraser: '\\uF79E',\r\n      Photo2Fill: '\\uF79F',\r\n      IncreaseIndentText: '\\uF7A0',\r\n      IncreaseIndentArrow: '\\uF7A1',\r\n      DecreaseIndentText: '\\uF7A2',\r\n      DecreaseIndentArrow: '\\uF7A3',\r\n      IncreaseIndentTextMirrored: '\\uF7A4',\r\n      IncreaseIndentArrowMirrored: '\\uF7A5',\r\n      DecreaseIndentTextMirrored: '\\uF7A6',\r\n      DecreaseIndentArrowMirrored: '\\uF7A7',\r\n      CheckListText: '\\uF7A8',\r\n      CheckListCheck: '\\uF7A9',\r\n      CheckListTextMirrored: '\\uF7AA',\r\n      CheckListCheckMirrored: '\\uF7AB',\r\n      NumberSymbol: '\\uF7AC'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\n\r\n// tslint:disable:max-line-length\r\n\r\nimport { IIconOptions, IIconSubset, registerIcons } from '@uifabric/styling';\r\n\r\nexport function initializeIcons(baseUrl: string = '', options?: IIconOptions): void {\r\n  const subset: IIconSubset = {\r\n    style: {\r\n      MozOsxFontSmoothing: 'grayscale',\r\n      WebkitFontSmoothing: 'antialiased',\r\n      fontStyle: 'normal',\r\n      fontWeight: 'normal',\r\n      speak: 'none'\r\n    },\r\n    fontFace: {\r\n      fontFamily: `\"FabricMDL2Icons-16\"`,\r\n      src: `url('${baseUrl}fabric-icons-16-dff5b9a6.woff') format('woff')`\r\n    },\r\n    icons: {\r\n      Coupon: '\\uF7BC',\r\n      VerifiedBrand: '\\uF7BD',\r\n      ReleaseGate: '\\uF7BE',\r\n      ReleaseGateCheck: '\\uF7BF',\r\n      ReleaseGateError: '\\uF7C0',\r\n      M365InvoicingLogo: '\\uF7C1',\r\n      FabricTextHighlightComposite: '\\uF7DA',\r\n      Dataflows: '\\uF7DD',\r\n      GenericScanFilled: '\\uF7DE',\r\n      DiagnosticDataBarTooltip: '\\uF7DF',\r\n      SaveToMobile: '\\uF7E0',\r\n      Orientation2: '\\uF7E1',\r\n      ScreenCast: '\\uF7E2',\r\n      ShowGrid: '\\uF7E3',\r\n      SnapToGrid: '\\uF7E4',\r\n      ContactList: '\\uF7E5',\r\n      NewMail: '\\uF7EA',\r\n      EyeShadow: '\\uF7EB',\r\n      FabricFolderConfirm: '\\uF7FF',\r\n      InformationBarriers: '\\uF803',\r\n      CommentActive: '\\uF804',\r\n      ColumnVerticalSectionEdit: '\\uF806',\r\n      WavingHand: '\\uF807',\r\n      ShakeDevice: '\\uF80A',\r\n      SmartGlassRemote: '\\uF80B',\r\n      Rotate90Clockwise: '\\uF80D',\r\n      Rotate90CounterClockwise: '\\uF80E',\r\n      CampaignTemplate: '\\uF811',\r\n      ChartTemplate: '\\uF812',\r\n      PageListFilter: '\\uF813',\r\n      SecondaryNav: '\\uF814',\r\n      ColumnVerticalSection: '\\uF81E',\r\n      SkypeCircleSlash: '\\uF825',\r\n      SkypeSlash: '\\uF826',\r\n      CustomizeToolbar: '\\uF828',\r\n      DuplicateRow: '\\uF82A',\r\n      RemoveFromTrash: '\\uF82B',\r\n      MailOptions: '\\uF82C',\r\n      Childof: '\\uF82D',\r\n      Footer: '\\uF82E',\r\n      Header: '\\uF82F',\r\n      BarChartVerticalFill: '\\uF830',\r\n      StackedColumnChart2Fill: '\\uF831',\r\n      PlainText: '\\uF834',\r\n      AccessibiltyChecker: '\\uF835',\r\n      DatabaseSync: '\\uF842',\r\n      ReservationOrders: '\\uF845',\r\n      TabOneColumn: '\\uF849',\r\n      TabTwoColumn: '\\uF84A',\r\n      TabThreeColumn: '\\uF84B',\r\n      MicrosoftTranslatorLogoGreen: '\\uF852',\r\n      MicrosoftTranslatorLogoBlue: '\\uF853',\r\n      InternalInvestigation: '\\uF854',\r\n      AppleTVPlay: '\\uF859',\r\n      AppleTVMonitor: '\\uF85A',\r\n      AppleTVMicrophone: '\\uF85B',\r\n      AppleTVMenu: '\\uF85C',\r\n      AddReaction: '\\uF85D',\r\n      DecreaseIndentLegacy: '\\uE290',\r\n      IncreaseIndentLegacy: '\\uE291',\r\n      SizeLegacy: '\\uE2B2'\r\n    }\r\n  };\r\n\r\n  registerIcons(subset, options);\r\n}\r\n","// @uifabric/icons@6.5.1\n  // Do not modify this file, the file is generated as part of publish. The checked in version is a placeholder only.\n  import { setVersion } from '@uifabric/set-version';\n  setVersion('@uifabric/icons', '6.5.1');","import { initializeIcons as i } from './fabric-icons';\r\nimport { initializeIcons as i0 } from './fabric-icons-0';\r\nimport { initializeIcons as i1 } from './fabric-icons-1';\r\nimport { initializeIcons as i2 } from './fabric-icons-2';\r\nimport { initializeIcons as i3 } from './fabric-icons-3';\r\nimport { initializeIcons as i4 } from './fabric-icons-4';\r\nimport { initializeIcons as i5 } from './fabric-icons-5';\r\nimport { initializeIcons as i6 } from './fabric-icons-6';\r\nimport { initializeIcons as i7 } from './fabric-icons-7';\r\nimport { initializeIcons as i8 } from './fabric-icons-8';\r\nimport { initializeIcons as i9 } from './fabric-icons-9';\r\nimport { initializeIcons as i10 } from './fabric-icons-10';\r\nimport { initializeIcons as i11 } from './fabric-icons-11';\r\nimport { initializeIcons as i12 } from './fabric-icons-12';\r\nimport { initializeIcons as i13 } from './fabric-icons-13';\r\nimport { initializeIcons as i14 } from './fabric-icons-14';\r\nimport { initializeIcons as i15 } from './fabric-icons-15';\r\nimport { initializeIcons as i16 } from './fabric-icons-16';\r\n\r\nimport { IIconOptions } from '@uifabric/styling';\r\nimport { registerIconAliases } from './iconAliases';\r\nconst DEFAULT_BASE_URL = 'https://spoprod-a.akamaihd.net/files/fabric/assets/icons/';\r\n\r\nexport function initializeIcons(baseUrl: string = DEFAULT_BASE_URL, options?: IIconOptions): void {\r\n  [i, i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16].forEach(\r\n    (initialize: (url: string, options?: IIconOptions) => void) => initialize(baseUrl, options)\r\n  );\r\n\r\n  registerIconAliases();\r\n}\r\n\r\nexport { IconNames } from './IconNames';\r\n\r\nimport './version';\r\n","import { registerIconAlias } from '@uifabric/styling';\r\n\r\nexport const registerIconAliases = () => {\r\n  registerIconAlias('trash', 'delete');\r\n  registerIconAlias('onedrive', 'onedrivelogo');\r\n  registerIconAlias('alertsolid12', 'eventdatemissed12');\r\n  registerIconAlias('sixpointstar', '6pointstar');\r\n  registerIconAlias('twelvepointstar', '12pointstar');\r\n  registerIconAlias('toggleon', 'toggleleft');\r\n  registerIconAlias('toggleoff', 'toggleright');\r\n};\r\n\r\nexport default registerIconAliases;\r\n","export const MimeTypes = {\r\n    PDF: 'application/pdf',\r\n    XLSX: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n  };","import * as React from 'react';\r\nimport { Slide, toast, ToastContainer } from 'react-toastify';\r\n\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nexport interface ISuccessMessage {\r\n  title: string;\r\n  message: string;\r\n}\r\n\r\nexport interface IWarningMessage {\r\n  title: string;\r\n  message: string;\r\n}\r\n\r\nexport interface IErrorMessage {\r\n  title: string;\r\n  message: string;\r\n  error: any;\r\n}\r\n\r\nexport function renderToastContainer(): JSX.Element {\r\n  return <ToastContainer autoClose={3000} pauseOnFocusLoss={false} pauseOnHover={false} transition={Slide} hideProgressBar={true} />;\r\n}\r\n\r\nexport function successToast(msg: ISuccessMessage): void {\r\n  toast.info(msg.message);\r\n}\r\n\r\nexport function warningToast(msg: IWarningMessage): void {\r\n  toast.warn(msg.message);\r\n}\r\n\r\nexport function errorToast(msg: IErrorMessage): void {\r\n  toast.error(msg.message);\r\n  console.log(msg.title, msg.error);\r\n}\r\n","import Axios from 'axios';\r\n\r\nimport FileSaver from 'file-saver';\r\n\r\nexport interface IExportCommand {\r\n  urlCommand: string;\r\n  contentType: string;\r\n  fileType: string;\r\n}\r\n\r\nexport function executeExportCommand(url: string, id: string, command: IExportCommand, ids: string[]) {\r\n  let idsUriValues: string | undefined = undefined;\r\n\r\n  if (!ids || ids.length === 0) {\r\n    console.log('Nothing to export.');\r\n    return;\r\n  }\r\n\r\n  ids.forEach(id => {\r\n    idsUriValues = idsUriValues ? idsUriValues + `&ids=${id}` : `?ids=${id}`;\r\n  });\r\n\r\n  const commandUrl = `${url}/${command.urlCommand}/${id}/${command.fileType}${idsUriValues}`;\r\n\r\n  console.log(`Invoking ${commandUrl}`);\r\n\r\n  Axios.get(commandUrl, {\r\n    headers: { accept: command.contentType },\r\n    responseType: 'blob'\r\n  }).then(response => {\r\n    const blob = new Blob([response.data]);\r\n    FileSaver.saveAs(blob, `Exported_${id}.${command.fileType}`);\r\n  });\r\n}\r\n"]}