{"version":3,"file":"static/js/1.4e613a42f1b9298dd53f.chunk.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/alert/Alert.tsx?44c5","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/back-to-top/BackToTop.tsx?0cf6","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/button/Button.tsx?457f","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/collapse/Collapse.tsx?27f6","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/common/KeyCodes.ts?0c24","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/common/stringExtensions.ts?f421","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/common/telemetryHelper.ts?068b","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/common/utilities.ts?93e6","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/drawer/ControlledDrawer.tsx?9a39","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/drawer/Drawer.tsx?da2c","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/fade/Fade.tsx?31ba","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/flipper/Flipper.tsx?36cd","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/form-builder/form-builder.tsx?c7f3","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/heading/Heading.tsx?c36b","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/incremental-quantity/IncrementalQuantity.tsx?1af1","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/isMobile/isMobile.tsx?1fd3","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/isMobile/isMobile.props.ts?d9d2","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/labeled-dropdown/LabeledDropdown.tsx?ab7c","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/Portal.tsx?c937","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/Modal.tsx?7d4b","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalBody.tsx?c097","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalFooter.tsx?8e31","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalHeader.tsx?627d","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/Pagination.tsx?ebf9","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/PaginationItem.tsx?6f25","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/PaginationLink.tsx?b97e","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/UncontrolledPagination.tsx?4877","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/popover/Popover.tsx?3cf4","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/popper-content/PopperContent.tsx?1148","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/popup-products/Popup-products.tsx?2288","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/popup/Popup.tsx?0173","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/price/price-editor-mode-selection.tsx?3c70","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/price/price-editor.tsx?ca15","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/progress/Progress.tsx?fbb5","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/quantity/Quantity.tsx?b66b","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/single-slide-carousel/SingleSlideCarousel.tsx?b47d","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/slider/SliderThumb.tsx?5d3f","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/slider/Slider.tsx?bb4c","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/table/Table.tsx?8faf","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/table/checkbox.tsx?36f8","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/tooltip/Tooltip.tsx?8355","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/tooltip/UncontrolledTooltip.tsx?30ec","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/waiting/Waiting.tsx?ba13","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/wrapper/module.tsx?dadb","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/wrapper/node.tsx?cdf8","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/zoom-image/ImagefullView.tsx?adc9","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/utilities/src/zoom-image/ZoomImage.tsx?3088"],"sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport Fade from '../fade/Fade';\nimport UncontrolledTooltip from '../tooltip/UncontrolledTooltip';\nimport { IAlertProps } from './Alert.props';\n\n/**\n * Alert component.\n */\nexport default class Alert extends React.PureComponent {\n\n public static defaultProps: Partial = {\n color: 'success',\n isOpen: true,\n tag: 'div',\n closeAriaLabel: 'Close',\n fade: true,\n assertive: false,\n includeAlertClass: true,\n transition: {\n ...Fade.defaultProps,\n unmountOnExit: true\n }\n };\n\n public render(): JSX.Element {\n const {\n id,\n className,\n closeClassName,\n cssModule,\n tag,\n toggle,\n color,\n isOpen,\n children,\n transition,\n fade,\n assertive,\n includeAlertClass,\n 'aria-label': ariaLabel\n } = this.props;\n\n const classes = includeAlertClass ? mapToCssModules(\n classNames(\n className,\n 'msc-alert',\n `msc-alert-${color}`\n ),\n cssModule\n ) : className;\n\n const closeClasses = mapToCssModules(classNames('close', closeClassName), cssModule);\n\n const alertTransition = {\n ...Fade.defaultProps,\n ...transition,\n baseClass: fade ? 'fade' : '',\n timeout: fade ? (transition ? transition.timeout : 0) : 0,\n appear: !!fade,\n enter: !!fade,\n exit: !!fade\n };\n\n const Tag = tag || 'div';\n const buttonId = fade ? 'buttonDismiss' : 'buttonFadeless';\n\n const innerContent = (\n <>\n {toggle ?
\n \n \n close\n \n
: null}\n {children}\n \n );\n\n const style = isOpen ? undefined : { display: 'none' };\n\n // When using assertive alerts, you need to have the assertive region rendered on the page from\n // the start. When using fade, the entire fade region doesn't render. So you gotta first wrap the\n // fade region in a tag, keep that tag hidden if the alert is closed.\n //\n // Note that this current approach will have some issues if tag is something like li. But that is a bridge\n // that can be crossed when/if we need to cross it this works for divs/spans so it should be good enough for now\n if (fade && assertive) {\n return (\n \n \n {innerContent}\n \n \n );\n } else if (fade) {\n return (\n \n {innerContent}\n \n );\n }\n return (\n \n {innerContent}\n \n );\n\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { getPayloadObject, getTelemetryAttributes, TelemetryConstant } from '..';\nimport { IBackToTopProps } from './BackToTop.props';\n\nexport interface IBackToTopStateAttributes {\n 'aria-hidden': boolean;\n 'tabIndex': number;\n}\n\nexport interface IBackToTopState extends React.ComponentState {\n attributes: IBackToTopStateAttributes;\n}\n\n/**\n * Back To Top - This component is used to scroll to the top of the page.\n */\nexport default class BackToTop extends React.PureComponent {\n public static defaultProps: Partial = {\n className: 'btn btn-lg btn-secondary',\n delayInMs: 0,\n scrollStepInPx: 25\n };\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: IBackToTopProps) {\n super(props);\n this.state = { attributes: { 'aria-hidden': true, tabIndex: -1 } };\n this._reevaluatePosition = this._reevaluatePosition.bind(this);\n this._scrollToTop = this._scrollToTop.bind(this);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.BackToTop);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public componentDidMount(): void {\n window.addEventListener('resize', this._reevaluatePosition);\n window.addEventListener('scroll', this._reevaluatePosition);\n this._reevaluatePosition();\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this._reevaluatePosition);\n window.removeEventListener('scroll', this._reevaluatePosition);\n }\n\n public render(): JSX.Element {\n const { className, threshold, delayInMs, scrollStepInPx, ...props } = this.props;\n const children = this.props.children || ();\n if (this.props.text) {\n return (\n \n {this._renderHeading(this.props.text)}\n );\n }\n return (\n \n {children}\n );\n\n }\n\n private readonly _renderHeading = (text: string): JSX.Element | undefined => {\n return (\n \n );\n };\n\n private _scrollStep(): void {\n if ((document.documentElement.scrollTop || document.body.scrollTop) === 0) {\n clearInterval(this.state.intervalId);\n this.setState({ intervalId: 0 });\n this._reevaluatePosition();\n }\n\n if (this.state.intervalId !== 0) {\n window.scrollTo(0, document.body.scrollTop - this.props.scrollStepInPx);\n document.body.scrollTop = document.body.scrollTop > 0 ? document.body.scrollTop - this.props.scrollStepInPx : 0;\n }\n }\n\n private _scrollToTop(e: any): void {\n e.preventDefault();\n const intervalId = setInterval(this._scrollStep.bind(this), this.props.delayInMs);\n this.setState({ intervalId });\n }\n\n private _reevaluatePosition(): void {\n // TODO:\n // change the threshold minimum to zero\n // add a prop for specifying multiplier of page height instead of absolute threshold\n // add clientWidth check to hide at < 768\n const scrollTop = window.pageYOffset || document.body.scrollTop;\n const height = Math.min(window.innerHeight, document.documentElement.clientHeight);\n const threshold = Math.min(this.props.threshold !== undefined ? this.props.threshold : -1, 100);\n const hide = scrollTop > 0 && threshold >= 0 ? scrollTop < (document.documentElement.scrollHeight - height) * threshold / 100 : scrollTop < height * 2;\n const tabIndexValue = hide ? -1 : 0;\n this.setState({ attributes: { 'aria-hidden': hide, tabIndex: tabIndexValue } });\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport { IButtonProps } from './Button.props';\n\n/**\n * Button component.\n */\nexport default class Button extends React.PureComponent {\n\n public static defaultProps: Partial = {\n tag: 'button',\n outline: false\n };\n\n public props: IButtonProps;\n\n constructor(props: IButtonProps) {\n super(props);\n this.props = props;\n this.onClick = this.onClick.bind(this); // Put this in componentDidMount\n }\n\n public render(): JSX.Element {\n const {\n active,\n block,\n className,\n cssModule,\n color,\n outline,\n size,\n tag,\n innerRef,\n ...attributes\n } = this.props;\n const classes = mapToCssModules(\n classNames(\n className,\n 'msc-btn',\n outline && color ? `btn-outline-${color}` : (color && outline === false ? `btn-${color}` : color === undefined && outline === true ? 'btn-outline' : ''),\n size ? `btn-${size}` : false,\n block ? 'btn-block' : false,\n { active, disabled: this.props.disabled }\n ),\n cssModule\n );\n\n let Tag = tag || 'button';\n\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n\n return (\n \n );\n }\n\n private readonly onClick = (e: React.MouseEvent) => {\n if (this.props.disabled) {\n e.preventDefault();\n\n return;\n }\n\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport Transition from 'react-transition-group/Transition';\n\nimport { mapToCssModules, TransitionStatuses, TransitionTimeouts } from '../common/utilities';\nimport { ICollapseProps } from './Collapse.props';\n\nexport interface ICollapseState {\n height: number | null;\n}\n\ntype IHash = {\n [key in TransitionStatuses]: string;\n};\n\n/**\n * This is the controlled version of a Collapse component, and as such the toggle behavior is expected to be handled in a parent component.\n * @see See [Uncontrolled Components - React](https://reactjs.org/docs/uncontrolled-components.html) to learn more.\n * @visibleName Collapse (controlled)\n */\nexport default class Collapse extends React.Component {\n public static defaultProps: Partial = {\n isOpen: false,\n tag: 'div',\n timeout: TransitionTimeouts.Collapse\n };\n\n public props: ICollapseProps;\n\n public state: ICollapseState;\n\n private readonly _transitionStatusToClassHash: IHash = {\n entering: 'collapsing',\n entered: 'collapse show',\n exiting: 'collapsing',\n exited: 'collapse'\n };\n\n private readonly _tagRef: React.RefObject = React.createRef();\n\n constructor(props: ICollapseProps) {\n super(props);\n this.props = props;\n\n this.state = {\n height: 0\n };\n\n this._onEntering = this._onEntering.bind(this);\n this._onExit = this._onExit.bind(this);\n this._onExited = this._onExited.bind(this);\n this._onExiting = this._onExiting.bind(this);\n this._reevaluateHeight = this._reevaluateHeight.bind(this);\n }\n\n public componentDidMount(): void {\n window && window.addEventListener('resize', this._reevaluateHeight);\n }\n\n public componentDidUpdate(nextProps: ICollapseProps): void {\n if (nextProps.children !== this.props.children) {\n this._reevaluateHeight();\n }\n }\n\n public componentWillUnmount(): void {\n window && window.removeEventListener('resize', this._reevaluateHeight);\n }\n\n public shouldComponentUpdate(nextProps: ICollapseProps,\n nextState: ICollapseState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n tag,\n isOpen,\n className,\n children,\n navbar,\n cssModule,\n\n in: collapseIn,\n mountOnEnter,\n unmountOnExit,\n appear,\n enter,\n exit,\n timeout,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n\n ...otherProps\n } = this.props;\n\n const Tag = tag || 'div';\n const transitionProps = {\n in: collapseIn,\n mountOnEnter,\n unmountOnExit,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited\n };\n\n const { height } = this.state;\n const style = height === null || height === 0 ? null : { minHeight: height };\n\n return (\n \n {(status: TransitionStatuses) => {\n const collapseClass = this._getTransitionClass(status);\n const classes = mapToCssModules(classNames(className, collapseClass, navbar && 'navbar-collapse'), cssModule);\n\n return (\n \n {children}\n \n );\n }}\n \n );\n }\n\n private _reevaluateHeight(): void {\n const node = this._tagRef.current;\n if (node !== null && node.firstElementChild && node.firstElementChild.scrollHeight > 0) {\n this.setState({ height: node.firstElementChild.scrollHeight });\n }\n }\n\n private _getTransitionClass(status: TransitionStatuses): string {\n return this._transitionStatusToClassHash[status] || 'collapse';\n }\n\n private _onEntering(node: HTMLElement, isAppearing: boolean): void {\n this.setState({ height: node.scrollHeight });\n\n if (this.props.onEntering) {\n this.props.onEntering(node, isAppearing);\n }\n }\n\n private _onExit(node: HTMLElement): void {\n this.setState({ height: node.scrollHeight });\n\n if (this.props.onExit) {\n this.props.onExit(node);\n }\n }\n\n private _onExiting(node: HTMLElement): void {\n this.setState({ height: 0 });\n\n if (this.props.onExiting) {\n this.props.onExiting(node);\n }\n }\n\n /**\n * Get Parent element.\n * @param node - HTML Element.\n */\n private readonly _updateParentElement = (node: HTMLElement): void => {\n const parentElement = node.parentElement;\n if (parentElement) {\n if (parentElement.classList.contains('collapse') && parentElement.classList.contains('show')) {\n parentElement.style.minHeight = 'auto';\n }\n this._updateParentElement(parentElement);\n }\n };\n\n private _onExited(node: HTMLElement): void {\n this.setState({ height: null });\n this._updateParentElement(node);\n\n if (this.props.onExited) {\n this.props.onExited(node);\n }\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport enum KeyCodes {\n Back = 8,\n Tab = 9,\n Enter = 13,\n Shift = 16,\n Ctrl = 17,\n Alt = 18,\n Break = 19,\n CapsLock = 20,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40,\n Print = 44,\n Insert = 45,\n Delete = 46,\n Colon2 = 59, // Opera and Firefox\n Equals2 = 61, // Opera\n Equals3 = 107, // Firefox\n Minus2 = 109, // Opera and Firefox\n Period = 190,\n WindowsLeft = 91,\n WindowsRight = 92,\n WindowsOpera = 219, // Opera\n Menu = 93,\n NumPad0 = 96,\n NumPad1 = 97,\n NumPad2 = 98,\n NumPad3 = 99,\n NumPad4 = 100,\n NumPad5 = 101,\n NumPad6 = 102,\n NumPad7 = 103,\n NumPad8 = 104,\n NumPad9 = 105,\n NumPadMultiply = 106,\n NumPadPlus = 107,\n NumPadMinus = 109,\n NumPadDot = 110,\n NumPadDivide = 111,\n Function1 = 112,\n Function2 = 113,\n Function3 = 114,\n Function4 = 115,\n Function5 = 116,\n Function6 = 117,\n Function7 = 118,\n Function8 = 119,\n Function9 = 120,\n Function10 = 121,\n Function11 = 122,\n Function12 = 123,\n NavigationUp = 138,\n NavigationDown = 139,\n NavigationLeft = 140,\n NavigationRight = 141,\n NavigationAccept = 142,\n NumLock = 144,\n ScrollLock = 145,\n Colon = 186,\n Equals = 187,\n Comma = 188,\n Minus = 189,\n ForwardSlash = 191,\n Tilde = 192,\n GamepadA = 195,\n GamepadB = 196,\n GamepadX = 197,\n GamepadY = 198,\n GamepadRightButton = 199,\n GamepadLeftButton = 200,\n GamepadLeftTrigger = 201,\n GamepadRightTrigger = 202,\n GamepadDPadUp = 203,\n GamepadDPadDown = 204,\n GamepadDPadLeft = 205,\n GamepadDPadRight = 206,\n GamepadSelect = 207,\n GamepadStart = 208,\n GamepadLeftThumbstick = 209,\n GamepadRightThumbstick = 210,\n GamepadLeftThumbstickUp = 211,\n GamepadLeftThumbstickDown = 212,\n GamepadLeftThumbstickRight = 213,\n GamepadLeftThumbstickLeft = 214,\n GamepadRightThumbstickUp = 215,\n GamepadRightThumbstickDown = 216,\n GamepadRightThumbstickRight = 217,\n GamepadRightThumbstickLeft = 218,\n OpenBracket = 219,\n BackSlash = 220,\n CloseBracket = 221,\n Quote = 222\n}\n\n/**\n * Here for test coverage.\n */\nexport class KeycodesClass {\n public testCoverage(): string {\n return ':(';\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport function format(formatSpecifier: string, ...parameters: any[]): string {\n if (!formatSpecifier) {\n return '';\n }\n\n return formatSpecifier.replace(/{(\\d+)}/g, (match: string, index: number) => {\n\n if (index >= parameters.length) {\n return match;\n }\n\n const value = parameters[index];\n\n if (typeof value !== 'number' && !value) {\n return '';\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return value.toString();\n });\n}\n\n/**\n * @name - isNullOrWhiteSpace\n * @description - Determines if the specified string is undefined, null, empty, or whitespace.\n * @export\n * @public\n * @param {string} value - The string to examine.\n * @returns {boolean} - True if the value is undefined, null, empty, or whitespace, otherwise false.\n */\nexport function isNullOrWhiteSpace(value: string): boolean {\n return (!value) || (typeof value !== 'string') || (!trim(value));\n}\n\n/**\n * @name - trim\n * @description - Trims leading and trailing whitespace from the string.\n * @export\n * @public\n * @param {string} value - The string to examine.\n * @returns {string} - The trimmed string.\n */\nexport function trim(value: string): string {\n // Any flavor of !value (ie. null/undefined/'') should return itself.\n if (!value || (typeof value !== 'string')) {\n return value;\n }\n\n if (value.trim) {\n return value.trim();\n }\n\n return value.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * @name - startsWith\n * @description - Determines if the specified string starts with the specified value.\n * @param ignoreCase\n * @export\n * @public\n * @param {string} value - The string to look in.\n * @param {string} prefix - The prefix to look for.\n * @returns {boolean} - True if the string starts with the prefix, otherwise false.\n */\nexport function startsWith(value: string, prefix: string, ignoreCase: boolean = true): boolean {\n if (!value || !prefix) {\n return false;\n }\n\n if (ignoreCase) {\n value = value.toLocaleLowerCase();\n prefix = prefix.toLocaleLowerCase();\n }\n\n // @ts-expect-error\n if ((value).startsWith) {\n return (value).startsWith(prefix);\n }\n\n return value.startsWith(prefix);\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IDictionary, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\n\nexport interface IContentAction {\n pgname: string;\n mname: string;\n etext?: string;\n recid?: string;\n etype?: string;\n}\n\nexport interface IPayLoad {\n contentCategory: string;\n contentAction: IContentAction;\n}\n\nexport interface ITelemetryContent {\n pageName: string;\n moduleName: string;\n telemetry?: ITelemetry;\n}\n\nexport enum TelemetryConstant {\n ShopSimliarLooks = 'shop similar looks',\n ShopSimliarDescription = 'shop similar description',\n PickupInStore = 'pick up in store',\n PreferredStore = 'set as preferred store',\n RemovePreferredStore = 'remove preferred store',\n IncrementQuantity = 'Increment quantity',\n DecrementQuantity = 'Decrement quantity',\n Checkout = 'Checkout',\n GuestCheckout = 'Guest checkout',\n BackToShopping = 'Back to shopping',\n ApplyPromoCode = 'Apply promo code',\n ViewMore = 'View more',\n OrderDetails = 'Order details',\n AvailablePoints = 'Available points',\n ExpiringPoints = 'Expiring points',\n AddUser = 'Add user',\n BuyItAgain = 'Buy it again',\n ContactNumber = 'ContactNumber',\n CheckoutChange = 'Change',\n Save = 'Save',\n SaveContinue = 'Save and Continue',\n Cancel = 'Cancel',\n DeliveryOptions = 'Delivery options',\n CheckoutTermsAndConditions = 'Checkout terms and conditions',\n ExpandAll = 'Expand all',\n CollapseAll = 'Collapse all',\n Expand = 'Expand',\n Collapse = 'Collapse',\n SignIn = 'Sign in',\n SignUp = 'Sign up',\n SignOut = 'Sign out',\n LoyaltyDetailLink = 'Loyalty detail ink',\n LoyaltyTermsLink = 'Loyalty terms link',\n LoyaltyTermsCancel = 'Loyalty terms cancel',\n LoyaltyTermsSubmit = 'Loyalty terms submit',\n LoyaltyTermsAgree = 'Loyalty terms agree',\n RemoveCartItem = 'Remove cart item',\n EditCart = 'Edit cart',\n BackToTop = 'Back to top',\n Logo = 'Logo',\n NavIcon = 'Navigation icon',\n ViewBagAndCheckout = 'View bag and checkout',\n ContinueShopping = 'Continue shopping',\n AddOrderTemplateToCart = 'Add order template to cart',\n PromoBannerClose = 'Close promo banner',\n WriteReview = 'Write Review',\n Next = 'Next',\n Previous = 'Previous',\n SubmitReview = 'Submit review',\n SuccessButton = 'Success',\n SearchStore = 'Search store',\n ShowAllStore = 'Show all store',\n ToggleMapView = 'Toggle map view',\n PrivacyPolicy = 'Privacy policy',\n ViewShoppingBag = 'View shopping bag',\n MyProfile = 'My profile',\n seeDetails = 'See Details'\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param pageName\n * @param {string} moduleName - Module Name.\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n * @param telemetry\n */\nexport function getTelemetryObject(pageName: string, moduleName: string, telemetry: ITelemetry): ITelemetryContent {\n const telemetryContent: ITelemetryContent = { pageName, moduleName, telemetry };\n return telemetryContent;\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param {string} moduleName - Module Name.\n * @param eventType\n * @param telemetryContent\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n */\nexport function getPayloadObject(eventType: string, telemetryContent: ITelemetryContent, etext: string, recid?: string): IPayLoad {\n const pageName = telemetryContent && telemetryContent.pageName ? telemetryContent.pageName : '';\n const moduleName = telemetryContent && telemetryContent.moduleName ? telemetryContent.moduleName : '';\n const payload: IPayLoad = {\n contentCategory: eventType,\n contentAction: {\n pgname: pageName,\n mname: moduleName,\n etext,\n recid,\n etype: eventType\n }\n };\n return payload;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param telemetryContent\n * @param {IPayLoad} payLoad - Pay Load.\n */\nexport function getTelemetryAttributes(telemetryContent: ITelemetryContent, payLoad: IPayLoad): IDictionary | undefined {\n const contentData = payLoad.contentAction.recid ? payLoad.contentAction.recid : payLoad.contentAction.etext;\n const attributes: IDictionary | undefined = telemetryContent &&\n telemetryContent.telemetry &&\n telemetryContent.telemetry.setTelemetryAttribute &&\n telemetryContent.telemetry.setTelemetryAttribute(contentData!, payLoad.contentAction);\n return attributes;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param {IPayLoad} payLoad - Pay Load.\n */\n\nexport const onTelemetryClick = (telemetryContent: ITelemetryContent, payLoad: IPayLoad, linkText: string) => () => {\n payLoad.contentAction.etext = linkText;\n if (telemetryContent && telemetryContent.telemetry) {\n telemetryContent.telemetry.logEvent(TelemetryEvent.Custom, payLoad);\n }\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport interface IClientDimension {\n width: number;\n height: number;\n}\n\n/* A type safe Dictionary */\nexport interface IDictionaryStringString {\n [key: string]: string;\n}\n\n/**\n * @interface IGrid\n * @classdesc - The IGrid interface contract.\n * @export\n */\nexport interface IGrid {\n rows: number;\n columns: number;\n}\n\n/**\n * Clamp position between a range.\n * @param {number} value - Value to be clamped.\n * @param {number} min - Minimum value in range.\n * @param {number} max - Maximum value in range.\n * @returns The clap value if min passed is less than max else returns 0.\n */\nexport function clamp(value: number, min: number, max: number): number {\n if (min <= max) {\n return Math.min(Math.max(value, min), max);\n }\n return 0;\n\n}\n\n/**\n * Upper case the first letter of the string, if only one char exists on the string, uppercase it.\n * @param {string} value - Value to be upper cased.\n * @returns The upper cased string of the passed value, if it has just one char uppercase it.\n */\nexport function toUpperCaseFirstChar(value: string): string {\n if (value.length > 1) {\n return value.charAt(0).toUpperCase() + value.substr(1);\n }\n if (value.length === 1) {\n return value.charAt(0).toUpperCase();\n }\n return '';\n\n}\n\nexport function htmlCollectionToArray(nodeList: HTMLCollection): HTMLElement[] {\n return Array.prototype.slice.call(nodeList);\n}\n\nexport function getCSS(element: HTMLElement, property: string): string {\n let style = element.style[property];\n\n if (!style) {\n style = getComputedStyle(element)[property];\n }\n\n return style;\n}\n\nexport function createThrottledEvent(listener: EventListener, threshold: number):\n(event: Event) => void {\n let timer: any;\n let last = 0;\n\n return (event: Event) => {\n const now = Date.now();\n\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n\n if (last && (now < last + threshold)) {\n timer = setTimeout(() => {\n last = Date.now();\n listener(event);\n },\n threshold - (now - last));\n } else {\n last = now;\n listener(event);\n }\n };\n}\n\nexport function addThrottledEvent(target: EventTarget, name: string, listener: EventListener, threshold: number = 150):\n(event: Event) => void {\n\n const throttledEventHandler = createThrottledEvent(listener, threshold);\n target.addEventListener(name, throttledEventHandler, false);\n\n return throttledEventHandler;\n}\n\n/* RTS utilities */\n/* TODO: Using any here for now, need to convert cssmodules into a dictionary in all modules */\nexport function mapToCssModules(className: string = '', cssModule: any): string {\n if (!cssModule) {\n return className;\n }\n\n return className\n .split(' ')\n .map((c: string) => cssModule[c] || c)\n .join(' ');\n}\n\nexport function isRef(target: any): boolean {\n if (!target) {\n return false;\n }\n\n return (>target).current !== undefined;\n}\n\nexport function isElement(target: any): boolean {\n if (!target) {\n return false;\n }\n\n return (target).addEventListener !== undefined;\n}\n\nexport const keyCodes = {\n esc: 27,\n space: 32,\n tab: 9,\n up: 38,\n down: 40,\n enter: 13\n};\n\ninterface IMap {\n [key: string]: T;\n}\nconst warned: IMap = {};\n\nexport function warnOnce(message: string): void {\n if (!warned[message]) {\n if (typeof console !== 'undefined') {\n throw new Error(message);\n }\n warned[message] = true;\n }\n}\n\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nexport function findDOMElements(target: string): NodeListOf | string | null {\n try {\n if (typeof target === 'string' && canUseDOM) {\n let selection = document.querySelectorAll(target);\n\n if (selection.length === 0) {\n selection = document.querySelectorAll(`#${target}`);\n }\n\n if (selection.length === 0) {\n throw new Error();\n }\n return selection;\n }\n\n return target;\n } catch {\n console.error(`The target '${target}' could not be identified in the dom, tip: check spelling`);\n return null;\n }\n}\n\nexport function getTarget(target: string | HTMLElement | React.Ref): HTMLElement | React.Ref | null | string {\n const selection = findDOMElements(target);\n if (selection && selection.length > 0) {\n return selection[0];\n }\n\n return target;\n}\n\nexport function getTargetElement(target: string | HTMLElement | React.Ref): HTMLElement | null {\n const targetElement = getTarget(target);\n if (isRef(targetElement)) {\n return (>targetElement).current;\n }\n if (isElement(targetElement)) {\n return targetElement;\n }\n\n return null;\n}\n\nexport const TransitionTimeouts = {\n Fade: 150,\n Collapse: 350,\n Modal: 300,\n Carousel: 600\n};\n\nexport type TransitionStatuses = 'entering' | 'entered' | 'exiting' | 'exited';\n\nexport const focusableElements = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[tabindex]:not(.modal)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])'\n];\n\n/**\n * @name - extend\n * @description - extends an object with properties/values from one or more others.\n * @export\n * @public\n * @param {any[]} parameters - The objects to merge together.\n * @returns {any} - The extended object.\n */\n\nexport function extend(...parameters: any[]): any {\n if (!parameters || parameters.length === 0) {\n return null;\n }\n\n const recursive = (typeof (parameters[0]) === 'boolean') && parameters[0];\n\n if (parameters.length < 2) {\n return recursive ? null : parameters[0];\n }\n\n if (recursive && (parameters.length < 3)) {\n return parameters[1];\n }\n\n const target = recursive ? parameters[1] : parameters[0];\n\n for (let paramIndex = recursive ? 2 : 1; paramIndex < parameters.length; paramIndex++) {\n if (parameters[paramIndex] !== undefined) {\n for (const key of Object.keys(parameters[paramIndex])) {\n if (parameters[paramIndex].hasOwnProperty(key)) {\n const source = parameters[paramIndex][key];\n\n if (recursive) {\n let isSourceArray = Array.isArray ? Array.isArray(source) : ({}).toString.call(source) === '[object Array]';\n let isTargetArray = !!target[key] && (Array.isArray ? Array.isArray(target[key]) : ({}).toString.call(target[key]) === '[object Array]');\n let isSourceObject = !isSourceArray && (typeof source === 'object');\n let isTargetObject = !isTargetArray && !!target[key] && (typeof target[key] === 'object');\n\n if (isSourceArray && isTargetArray) {\n for (const [arrayIndex, element] of source.entries()) {\n isSourceArray = Array.isArray ? Array.isArray(element) : ({}).toString.call(element) === '[object Array]';\n isTargetArray = !!target[key][arrayIndex] && (Array.isArray ? Array.isArray(target[key][arrayIndex]) : ({}).toString.call(target[key][arrayIndex]) === '[object Array]');\n isSourceObject = !isSourceArray && (typeof element === 'object');\n isTargetObject = !isTargetArray && !!target[key][arrayIndex] && (typeof target[key][arrayIndex] === 'object');\n\n if (isSourceArray) {\n target[key][arrayIndex] = extend(true, isTargetArray ? target[key][arrayIndex] : [], element);\n } else if (isSourceObject) {\n target[key][arrayIndex] = extend(true, isTargetObject ? target[key][arrayIndex] : {}, element);\n } else {\n target[key][arrayIndex] = element;\n }\n }\n continue;\n } else if (isSourceArray) {\n target[key] = extend(true, [], source);\n continue;\n } else if (isSourceObject) {\n target[key] = extend(true, isTargetObject ? target[key] : {}, source);\n continue;\n }\n }\n\n target[key] = source;\n }\n }\n }\n }\n\n return target;\n}\n\n/**\n * @name - getDimensions\n * @description - Gets the dimension of an element.\n * @export\n * @param {HTMLElement} containerElement - The container element.\n * @returns {IClientDimension} - The client dimension.\n * {IClientDimension.width} - The client width\n * {IClientDimension.height} - The client height.\n */\nexport function getDimensions(containerElement: HTMLElement): IClientDimension | null {\n if (containerElement === null) {\n return null;\n }\n return {\n width: containerElement.clientWidth,\n height: containerElement.clientHeight\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { Button, getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '..';\nimport Collapse from '../collapse/Collapse';\nimport { ICollapseProps } from '../collapse/Collapse.props';\nimport { IDrawerProps } from './Drawer.props';\n\nexport interface IControlledDrawerState {\n isOpen: boolean;\n}\n\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * ControlledDrawer - This is a full width controlled collapse where the button glyph changes\n * when the drawer is open and closed. The toggle function can be managed by the parent.\n */\n\nexport default class ControlledDrawer extends React.PureComponent {\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n private isExpanded: boolean;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: IDrawerProps) {\n super(props);\n const { openGlyph, closeGlyph } = this.props;\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps && props.collapseProps.isOpen) || false };\n this.isExpanded = this.state.isOpen;\n this.drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName || '');\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames([this.drawerGlyphClass, openGlyph || closeGlyph || '']);\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames([this.drawerGlyphClass, openGlyph || '']);\n this.drawerCloseGlyph = classnames([this.drawerGlyphClass, closeGlyph || '']);\n }\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n collapseProps.isOpen = this.isManuallyToggled ? this.state.isOpen : collapseProps.isOpen || false;\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className || '');\n this.isManuallyToggled = false;\n this.isExpanded = collapseProps.isOpen;\n this.state = { isOpen: collapseProps.isOpen };\n this.payLoad.contentAction.etext = collapseProps.isOpen ? TelemetryConstant.Collapse : TelemetryConstant.Expand;\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const { toggleButtonText } = this.props;\n const drawerButtonTextClass = classnames('drawer__buttontext', this.props.toggleButtonClassName || '');\n if (this.props.glyphPlacement === 'end') {\n return (\n <>\n {this._generateTitle(classnames(drawerButtonTextClass, '__start'), toggleButtonText.toString())}\n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n const isStart = this.props.glyphPlacement === 'start';\n const additionalClassName = `__${isStart ? 'end' : 'start'}`;\n return (\n <>\n {isStart && this._generateGlyphMarkup('drawer__glyph__start', collapseState)}\n {this._generateTitle(classnames(drawerButtonTextClass, additionalClassName), this.props.toggleButtonText.toString())}\n \n );\n }\n\n private _generateTitle(titleLClassName: string, title: string): JSX.Element {\n if (this.props.onTextChange && this.props.requestContext) {\n return (\n \n );\n }\n return (\n \n {title}\n \n );\n\n }\n\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n const glyphClass = `${collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph} ${location}`;\n return (\n \n );\n }\n\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.isExpanded = !this.isExpanded;\n this.setState({ isOpen: this.isExpanded });\n this.isManuallyToggled = true;\n if (this.props.onToggle) {\n this.props.onToggle(this.state);\n }\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { Button } from '..';\nimport Collapse from '../collapse/Collapse';\nimport { ICollapseProps } from '../collapse/Collapse.props';\nimport { IDrawerProps } from './Drawer.props';\n\n/**\n * Drawer State Interface\n */\nexport interface IDrawerState {\n isOpen: boolean;\n buttonText?: string;\n}\n\n/**\n * Glyph placement type.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\n\nexport default class Drawer extends React.PureComponent {\n public state: IDrawerState;\n\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n constructor(props: IDrawerProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps?.isOpen) ?? false, buttonText: '' };\n this.drawerGlyphClass = classnames('drawer__glyph',\n\n this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(this.drawerGlyphClass,\n\n this.props.openGlyph ? this.props.openGlyph : (this.props.closeGlyph ? this.props.closeGlyph : ''));\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(this.drawerGlyphClass,\n\n this.props.openGlyph ? this.props.openGlyph : '');\n this.drawerCloseGlyph = classnames(this.drawerGlyphClass,\n\n this.props.closeGlyph ? this.props.closeGlyph : '');\n }\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this.isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n } else {\n this.state.isOpen = collapseProps.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer',\n\n this.props.className ? this.props.className : '');\n this.isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n /**\n * Method generate drawer inner markup.\n * @param collapseState -Drawer button collapse state.\n * @returns Jsx element.\n */\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const drawerButtonTextClass = classnames('drawer__buttontext',\n\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : '');\n if (this.props.glyphPlacement === 'end') {\n return (\n <>\n \n {this.props.toggleButtonText}\n \n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n if (this.props.glyphPlacement === 'start') {\n return (\n <>\n {this._generateGlyphMarkup('drawer__glyph__start', collapseState)}\n \n {this.props.toggleButtonText}\n \n \n );\n }\n return (\n {this.props.toggleButtonText}\n );\n\n }\n\n /**\n * Method generate glyph markup.\n * @param location -Glyph icon location.\n * @param collapseState -Drawer button collapse state.\n * @returns Jsx element.\n */\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n let glyphClass = collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return (\n \n );\n }\n\n /**\n * Method on click of drawer button.\n * @param e -Mouse event for drawer button.\n */\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.isManuallyToggled = true;\n\n if (this.props.onToggle) {\n this.setState({ isOpen: !this.state.isOpen, buttonText: e.currentTarget.innerText }, () => this.props.onToggle && this.props.onToggle(this.state));\n } else {\n this.setState({ isOpen: !this.state.isOpen });\n }\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport Transition, { ENTERED, ENTERING, EXITED, EXITING, UNMOUNTED } from 'react-transition-group/Transition';\n\nimport { mapToCssModules, TransitionTimeouts } from '../common/utilities';\nimport { IFadeProps } from './Fade.props';\n\nexport interface IFadeState {\n fadeIn: boolean;\n}\n\ntype TransitionStatus =\n typeof ENTERING |\n typeof ENTERED |\n typeof EXITING |\n typeof EXITED |\n typeof UNMOUNTED;\n\n/**\n * Fade component.\n */\nexport default class Fade extends React.Component {\n\n public static defaultProps: Partial = {\n tag: 'div',\n baseClass: 'fade',\n baseClassActive: 'show',\n timeout: TransitionTimeouts.Fade,\n in: true,\n appear: true,\n enter: true,\n exit: true\n };\n\n public shouldComponentUpdate(nextProps: IFadeProps): boolean {\n if (nextProps.in || (this.props.in !== nextProps.in)) {\n return true;\n }\n return false;\n }\n\n public render(): JSX.Element | null {\n const {\n tag,\n className,\n cssModule,\n baseClass,\n baseClassActive,\n\n appear,\n enter,\n exit,\n in: fadeIn,\n mountOnEnter,\n unmountOnExit,\n timeout: timeoutOrUndefined,\n addEndListener,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n children,\n\n ...otherProps } = this.props;\n const timeout = timeoutOrUndefined !== undefined ? timeoutOrUndefined : TransitionTimeouts.Fade;\n\n const transitionProps = {\n appear,\n enter,\n exit,\n in: fadeIn,\n mountOnEnter,\n unmountOnExit,\n timeout,\n addEndListener,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n children\n };\n\n const Tag = this.props.tag ? this.props.tag : 'div';\n const baseClassAlways = baseClass || 'fade';\n const baseClassActiveAlways = baseClassActive || 'show';\n\n return (\n \n {(status: TransitionStatus) => {\n const isActive = status === 'entered';\n const classes = mapToCssModules(\n classNames([\n className,\n baseClassAlways,\n isActive && baseClassActiveAlways\n ]),\n cssModule\n );\n\n return (\n \n {children}\n \n );\n }}\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, UncontrolledTooltip } from '..';\nimport { IFlipperProps } from './Flipper.props';\n\nexport type FlipperSize = 'small' | 'medium' | 'large';\n\n/**\n * Flipper Component - This component is used to add\n * flippers to a carousel/jumbotron.\n */\nexport default class Flipper extends React.PureComponent {\n private readonly payLoad: IPayLoad;\n\n constructor(props: IFlipperProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, this.props.telemetryLabel!);\n }\n\n public render(): JSX.Element {\n const { className, glyphProps, size, displayTooltip, disabled, telemetryContent, telemetryLabel, ...props } = this.props;\n const sizeClass = size === 'small' ? 'msc-flipper__small' : (size === 'large' ? 'msc-flipper__large' : '');\n const classNames = className ? `msc-flipper ${sizeClass} ${className}` : `msc-flipper ${sizeClass}`;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n\n // Do not flip next/previous glyphs in RTL (commonly chevron-left and chevron-right)\n glyphProps.className = `${glyphProps.className} msc-no-rtl-flip-required`;\n\n return (\n <>\n \n \n \n {displayTooltip && !disabled && \n {' '}\n {props['aria-label']}\n }\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ArrayExtensions, Dictionary, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport Button from '../button/Button';\nimport { IFormKeyProps } from './form-builder.props';\n\n/**\n * The state of the form builder.\n */\nexport interface IFormBuilderState {\n\n /**\n * The captured values.\n */\n values: string[];\n\n /**\n * If the form has been submitted.\n */\n isSubmitted: boolean;\n}\n\n/**\n * The properties of the form builder.\n */\nexport interface IFormBuilderProps {\n\n /**\n * The component showing confirmation after form submitted successfully.\n */\n confirmationComponent: React.ReactNode;\n\n /**\n * The heading for the component shown above the input boxes.\n */\n heading: string;\n\n /**\n * The text shown on the submit button.\n */\n submitButtonText: string;\n\n /**\n * The keys of the form values to capture, which will be shown as labels for the inputs.\n */\n keys: IFormKeyProps[];\n\n /**\n * The error message shown when submitting the form and required value is missing.\n */\n requiredValueMissingErrorMessage: string;\n\n /**\n * The action to perform when the form is submitted.\n * @param { formKey: IFormKeyProps, value: string[] } entry - The form data as key-value pairs to submit.\n */\n onSubmit(entry?: { formKey: IFormKeyProps; value: string }[]): Promise;\n}\n\n/**\n * The interface for properties of form builder error.\n */\nexport interface IFormBuilderErrorProps {\n errorMessage?: string;\n}\n\n/**\n * The error component in form builder.\n * @param errorProperties - The error properties.\n * @param errorProperties.errorMessage - The error message to show.\n * @returns The error component.\n */\nexport const FormBuilderErrorComponent: React.FC = ({\n errorMessage\n}) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n \n {errorMessage}\n \n \n );\n};\n\n/**\n * The component to capture form data.\n */\nexport class FormBuilder extends React.Component {\n private readonly requiredValueMissing: Dictionary;\n\n public constructor(props: IFormBuilderProps) {\n super(props);\n this.state = { values: this.props.keys.map(() => ''), isSubmitted: false };\n\n // Setup a boolean dictionary to keep track if required value is missing for every field to submit.\n this.requiredValueMissing = new Dictionary();\n for (const formKey of this.props.keys) {\n if (formKey.resourceId) {\n this.requiredValueMissing.setValue(formKey.resourceId, formKey.isRequired ?? false);\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: IFormBuilderProps, nextState: IFormBuilderState): boolean {\n if (this.props.heading !== nextProps.heading ||\n this.props.confirmationComponent !== nextProps.confirmationComponent ||\n this.props.submitButtonText !== nextProps.submitButtonText ||\n this.props.requiredValueMissingErrorMessage !== nextProps.requiredValueMissingErrorMessage) {\n return true;\n }\n\n // If any form key has changed, the component should update.\n if (!this.props.keys.every((formKey: IFormKeyProps, index: number) => {\n return nextProps.keys[Number(index)].isRequired === formKey.isRequired &&\n nextProps.keys[Number(index)].resourceId === formKey.resourceId &&\n nextProps.keys[Number(index)].resourceValue === formKey.resourceValue;\n })) {\n return true;\n }\n\n // If any value has changed, the component should update.\n if (this.state.isSubmitted !== nextState.isSubmitted ||\n !this.state.values.every((value: string, index: number) => {\n return value === nextState[Number(index)];\n })) {\n return true;\n }\n\n return false;\n }\n\n public render(): JSX.Element {\n return (\n <>\n {\n !this.state.isSubmitted && ArrayExtensions.hasElements(this.props.keys) &&\n
\n

\n {this.props.heading}\n

\n
\n \n {\n this.props.keys.filter((formKey: IFormKeyProps) => {\n return !ObjectExtensions.isNullOrUndefined(formKey.resourceId) &&\n !ObjectExtensions.isNullOrUndefined(formKey.resourceValue);\n }).map((formKey: IFormKeyProps, index: number) => {\n const currentValue: string = this.state.values[Number(index)];\n return (\n
\n \n
\n );\n })\n }\n
\n \n {this.props.submitButtonText}\n \n
\n \n
\n
\n }\n {\n this.state.isSubmitted &&\n this.props.confirmationComponent\n }\n \n );\n }\n\n private get isAnyRequiredValueMissing(): boolean {\n const notFound: number = -1;\n return this.requiredValueMissing.getValues().findIndex((isMissing: boolean) => isMissing) !== notFound;\n }\n\n /**\n * The action to perform when the submit button is clicked.\n * @param event - The click event.\n * @returns The async result.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n const formData: { formKey: IFormKeyProps; value: string }[] = this.props.keys.map((formKey: IFormKeyProps, index: number) => {\n const currentValue: string = this.state.values[Number(index)];\n return {\n formKey: { resourceId: formKey.resourceId!, resourceValue: formKey.resourceValue },\n value: currentValue\n };\n });\n await this.props.onSubmit(formData);\n this.setState((previousState: Readonly) => {\n return { values: previousState.values, isSubmitted: true };\n });\n };\n\n /**\n * The action to perform when any input in the form has changed.\n * @param event - The input change event.\n * @returns The async result.\n */\n private readonly _onInputChange = async (event: React.ChangeEvent): Promise => {\n event.preventDefault();\n const changedValueIndex: number = Number.parseInt(event.target.getAttribute('data-index') ?? '', 10);\n if (ObjectExtensions.isNullOrUndefined(changedValueIndex)) {\n return Promise.reject(new Error('form-builder: invalid value index.'));\n }\n const newState = {\n values: this.state.values.map((value: string, index: number) => {\n const currentKey: IFormKeyProps = this.props.keys[Number(index)];\n if (index === changedValueIndex && currentKey.resourceId) {\n this.requiredValueMissing.setValue(currentKey.resourceId, (currentKey.isRequired ?? false) && event.target.value === '');\n return event.target.value;\n }\n return value;\n })\n };\n this.setState(newState);\n return Promise.resolve();\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeadingProps } from './Heading.props';\n\n/**\n * Heading component.\n * @extends {React.PureComponent}\n */\n\nconst Heading = ({ headingTag: HTag = 'h1', tag: Tag, className, text }: IHeadingProps) => (\n Tag ? \n {text}\n : \n {text}\n \n);\n\nexport default Heading;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { debounce } from 'lodash';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '../common/telemetryHelper';\nimport { IIncrementalQuantityProps } from './IncrementalQuantity.props';\n\ninterface IIncrementalQuantityState {\n currentInput: number;\n isUpdating: boolean;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class IncrementalQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly _minValue: number;\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: IIncrementalQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount ?? 1, isUpdating: false };\n this._onIncrement = this._onIncrement.bind(this);\n this._onDecrement = this._onDecrement.bind(this);\n this._handleChange = this._handleChange.bind(this);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n this._minValue = this.props.min ?? IncrementalQuantity.defaultProps.min!;\n }\n\n public static getDerivedStateFromProps(props: Readonly, state: IIncrementalQuantityState): IIncrementalQuantityState {\n const nextState = { ...state };\n\n if (props.disabled && !state.isUpdating) {\n nextState.isUpdating = true;\n }\n\n if (!props.disabled && state.isUpdating) {\n nextState.currentInput = props.currentCount ?? 1;\n nextState.isUpdating = false;\n }\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n min,\n max\n } = this.props;\n\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const decrementDisabled = this.state.currentInput <= (min ?? 1) || this.props.isGiftCard;\n const incrementDisabled = this.state.currentInput >= max || this.props.isGiftCard;\n const currentValue = this.state.currentInput;\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n let extraClassDecrement = '';\n if (decrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassDecrement = 'disabled';\n\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassDecrement = 'transition';\n }\n let extraClassIncrement = '';\n if (incrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassIncrement = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassIncrement = 'transition';\n }\n\n return (\n <>\n
\n \n \n \n \n \n \n \n
\n \n );\n }\n\n private _onIncrement(): void {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n\n if (currQuantity < this.props.max) {\n invokeCallback = true;\n updatedQuantity = currQuantity + 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this.props.max;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _onDecrement(): void {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n\n if (currQuantity >= this._minValue) {\n invokeCallback = true;\n updatedQuantity = currQuantity - 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this._minValue;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n let currentValue = Number.parseInt((e.target.value), 10);\n if (!Number.isNaN(currentValue)) {\n currentValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\n }\n this.setState(\n { currentInput: currentValue },\n this._handleUpdateState\n );\n }\n\n /**\n * Updates html element and triggers callbacks whenever state is changed.\n */\n private readonly _handleUpdateState = () => {\n debounce(() => {\n if (Number.isNaN(this.state.currentInput)) {\n return;\n }\n\n // Due of usage debouncer, we may ignore onChange return value\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n const inputElement = this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', this.state.currentInput.toString());\n inputElement.setAttribute('value', this.state.currentInput.toString());\n }\n }, 200)();\n };\n\n private readonly _validateMin = (): void => {\n if (Number.isNaN(this.state.currentInput)) {\n this.setState(\n { currentInput: this._minValue },\n this._handleUpdateState\n );\n } else {\n const currentValue = Math.min(this.props.max, Math.max(this._minValue, this.state.currentInput));\n if (currentValue !== this.state.currentInput) {\n this.setState(\n { currentInput: currentValue },\n this._handleUpdateState\n );\n } else {\n this._handleUpdateState();\n }\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365 from '@msdyn365-commerce/core';\n\nimport { IMobileProps, VariantType } from './isMobile.props';\n\n/**\n * IsMobile component.\n * @param props\n */\nexport const isMobile = (props: IMobileProps) => {\n const { variant, context } = props;\n switch (variant) {\n case VariantType.Browser:\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context?.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n\n }\n }\n\n return 'lg';\n case VariantType.Viewport:\n const viewport = context?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n return viewport;\n default:\n return 'lg';\n }\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\n\nexport enum VariantType {\n Browser,\n Viewport\n}\n\n/**\n * IsMobile properties.\n */\nexport interface IMobileProps {\n\n /**\n * Contains variant i.e browser | viewport.\n */\n variant?: VariantType;\n context?: Msdyn365.IRequestContext;\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { ILabeledDropdownProps } from './LabeledDropdown.props';\n\nexport interface ILabeledDropdownState {\n selectedIndex: number;\n}\n\n/**\n * Labeled Dropdown component.\n */\nexport default class LabeledDropdown extends React.PureComponent {\n public static defaultProps: Partial = {\n toggleColor: 'link'\n };\n\n constructor(props: ILabeledDropdownProps) {\n super(props);\n this._onSelectOption = this._onSelectOption.bind(this);\n const selectedKey = this.props.selectedOption.key;\n const keys = this.props.dropdownOptions.map(option => (option.key));\n this.state = { selectedIndex: keys.indexOf(selectedKey) };\n }\n\n public render(): JSX.Element {\n const {\n labelText,\n labelClassname,\n dropdownId,\n dropdownOptions,\n dropdownClassname\n } = this.props;\n\n const labelClassNames = classNames('msc-l-dropdown__label', labelClassname);\n const dropdownClassNames = classNames('msc-l-dropdown', dropdownClassname);\n const selectedIndex = this._getSelectedIndex();\n\n return (\n <>\n \n \n \n );\n }\n\n private _getSelectedIndex(): number {\n if (this.props.controlledByParent) {\n let selectedIndex = -1;\n const selectedKey = this.props.selectedOption.key;\n for (let i = 0; i < this.props.dropdownOptions.length; i++) {\n if (this.props.dropdownOptions[i].key === selectedKey) {\n selectedIndex = i;\n break;\n }\n }\n\n return selectedIndex;\n }\n\n return this.state.selectedIndex;\n }\n\n private _onSelectOption(event: React.ChangeEvent): void {\n const {\n dropdownOptions,\n onSelectOption\n } = this.props;\n const index = event.currentTarget.selectedOptions[0].index;\n const selectedOption = dropdownOptions[index];\n this.setState({ selectedIndex: index });\n onSelectOption({ selectedOption });\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { canUseDOM } from '../common/utilities';\nimport { IPortalProps } from './Portal.props';\n\nexport interface IPortalState {\n defaultNode: Element | null;\n}\n\n/**\n * Portal component.\n */\nexport default class Portal extends React.PureComponent {\n constructor(props: IPortalProps) {\n super(props);\n\n this.state = {\n defaultNode: null\n };\n }\n\n public componentWillUnmount(): void {\n if (this.state.defaultNode) {\n this.state.defaultNode.remove();\n }\n }\n\n public render(): React.ReactPortal | null {\n let node = null;\n if (!canUseDOM) {\n return null;\n }\n\n if (!this.props.node && !this.state.defaultNode) {\n node = document.createElement('div');\n document.body.appendChild(node);\n this.setState({ defaultNode: node });\n }\n return createPortal(this.props.children, this.props.node || node);\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { focusableElements, TransitionTimeouts } from '../common/utilities';\nimport Fade from '../fade/Fade';\nimport IModalProps from './Modal.props';\nimport Portal from './Portal';\n\nexport interface IModalState {\n wasOpen: boolean;\n isOpen: boolean;\n mouseDownElement: EventTarget | null;\n}\n\nexport type ModalVerticalPosition = 'top' | 'center' | 'bottom';\nexport type ModalHorizontalPosition = 'left' | 'center' | 'right';\n\n/**\n * Modal component.\n */\nexport default class Modal extends React.PureComponent {\n public static defaultProps: Partial = {\n isOpen: false,\n autoFocus: true,\n verticalPosition: 'top', // Needs to be non-null since we use non-null assertion in getVerticalPositionClass\n horizontalPosition: 'center', // Needs to be non-null since we use non-null assertion in getHorizontalPositionClass\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1000,\n tabIndex: 0,\n fade: true,\n modalTransition: {\n timeout: TransitionTimeouts.Modal\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade // Uses standard fade transition\n }\n };\n\n private static openCount: number = 0;\n\n private element: HTMLElement | null;\n\n private mounted: boolean;\n\n private readonly ref: React.RefObject;\n\n /**\n * This property is initialized in componentDidMount rather than constructor in case the dialog needs to be pre-rendered.\n */\n private applicationNode!: HTMLElement | null;\n\n constructor(props: IModalProps) {\n super(props);\n this.element = null;\n this.ref = React.createRef();\n this.mounted = false;\n\n this._getFocusableChildren = this._getFocusableChildren.bind(this);\n this._handleBackdropClick = this._handleBackdropClick.bind(this);\n this._handleBackdropMouseDown = this._handleBackdropMouseDown.bind(this);\n this._handleEscape = this._handleEscape.bind(this);\n this._handleTab = this._handleTab.bind(this);\n this._onOpened = this._onOpened.bind(this);\n this._onClosed = this._onClosed.bind(this);\n\n this.state = {\n wasOpen: false,\n isOpen: props.isOpen || false,\n mouseDownElement: null\n };\n\n if (props.isOpen) {\n this._open();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.onEnter) {\n this.props.onEnter();\n }\n this.mounted = true;\n\n const element = document.createElement('div');\n element.setAttribute('tabindex', '-1');\n element.style.visibility = 'hidden';\n element.style.position = 'position';\n this.element = element;\n document.body.appendChild(element);\n\n this.applicationNode = (this.props.applicationNode instanceof HTMLElement) ? this.props.applicationNode : document.querySelector(`#${this.props.applicationNode}`);\n\n if (this.state.isOpen && !this.state.wasOpen) {\n this._open();\n }\n }\n\n public componentWillUnmount(): void {\n if (this.props.onExit) {\n this.props.onExit();\n }\n if (this.state.isOpen) {\n this._close();\n }\n this.mounted = false;\n\n if (this.element) {\n this.element.remove();\n }\n }\n\n public componentDidUpdate(_prevProps: IModalProps, prevState: IModalState): void {\n if ((this.state.isOpen && !prevState.isOpen) || (this.props.shouldUpdateFocusToFirstElement && !_prevProps.shouldUpdateFocusToFirstElement)) {\n setTimeout(() => {\n const focusableElementArr = this._getFocusableChildren();\n if (focusableElementArr && focusableElementArr.length > 0 && focusableElementArr[0]) {\n const firstFocusableElement = focusableElementArr[0] as HTMLElement;\n firstFocusableElement.focus();\n }\n }, 100);\n }\n }\n\n public componentWillReceiveProps(nextProps: IModalProps): void {\n if (nextProps.isOpen && !this.props.isOpen) {\n this.setState({ isOpen: nextProps.isOpen });\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.isOpen && !this.state.wasOpen) {\n this._open();\n }\n if (this.element !== null) {\n const {\n wrapClassName, modalClassName, backdropClassName, contentClassName, className, cssModule,\n modalTransition, backdropTransition, backdrop, isOpen, onOpened, onClosed,\n role, size, tabIndex, external, verticalPosition, horizontalPosition, keyboard, zIndex, fade, toggle,\n children, applicationNode, returnFocusRef, 'aria-labelledby': ariaLabelledbyId,\n ...dialogAttributes\n } = this.props;\n\n const modalAttributes = {\n onClick: this._handleBackdropClick,\n onMouseDown: this._handleBackdropMouseDown,\n onKeyUp: this._handleEscape,\n onKeyDown: this._handleTab,\n style: { display: 'block' }\n };\n\n const modalTransitions = {\n ...Fade.defaultProps,\n ...modalTransition,\n baseClass: fade && modalTransition ? modalTransition.baseClass : '',\n timeout: fade && modalTransition ? modalTransition.timeout : 0\n };\n const backdropTransitions = {\n ...Fade.defaultProps,\n ...backdropTransition,\n baseClass: fade && backdropTransition ? backdropTransition.baseClass : '',\n timeout: fade && backdropTransition ? backdropTransition.timeout : 0\n };\n\n const Backdrop = fade ? (\n \n ) :
;\n\n const dialogBaseClass = 'msc-modal__dialog';\n const dialogClasses =\n classNames([\n dialogBaseClass,\n className,\n size ? `msc-modal__${size}` : null\n ]);\n\n const dialog = (\n \n \n {children}\n
\n \n );\n\n return (\n \n
\n \n {external}\n {dialog}\n \n {Backdrop}\n
\n
\n );\n }\n\n return null;\n }\n\n private _open(): void {\n if (this.element) {\n this.element.style.zIndex = `${this.props.zIndex || 1000}`;\n this.element.style.display = 'block';\n this.element.style.visibility = 'visible';\n if (Modal.openCount === 0) {\n if (window) {\n const scrollY = window.scrollY;\n const scrollbarWidth = window.innerWidth - document.body.clientWidth;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.right = `${scrollbarWidth}px`;\n document.body.style.left = '0px';\n }\n\n document.body.className = classNames(\n document.body.className,\n 'modal-open'\n );\n }\n Modal.openCount += 1;\n document.body.firstElementChild?.setAttribute('aria-hidden', 'true');\n if (this.applicationNode) {\n this.applicationNode.setAttribute('aria-hidden', 'true');\n }\n\n this.setState({ ...this.state, wasOpen: true });\n }\n }\n\n private _close(): void {\n if (!this.state.isOpen) {\n return;\n }\n\n if (this.element) {\n this.element.style.display = 'none';\n setTimeout(() => {\n if (this.element) {\n this.element.style.visibility = 'hidden';\n this.element.style.removeProperty('display');\n }\n }, 0);\n\n }\n\n if (Modal.openCount <= 1) {\n const modalOpenClassName = 'modal-open';\n document.body.firstElementChild?.setAttribute('aria-hidden', 'false');\n\n // Use regex to prevent matching `modal-open` as part of a different class, e.g. `my-modal-opened`\n const modalOpenClassNameRegex = new RegExp(`(^| )${modalOpenClassName}( |$)`);\n document.body.className = document.body.className.replace(modalOpenClassNameRegex, ' ').trim();\n\n if (window) {\n const scrollY = document.body.style.top;\n document.body.style.position = '';\n document.body.style.top = '';\n document.body.style.right = '';\n document.body.style.left = '';\n window.scrollTo(0, -Number.parseInt(scrollY || '0', 10));\n }\n }\n Modal.openCount -= 1;\n\n if (this.applicationNode) {\n this.applicationNode.setAttribute('aria-hidden', 'false');\n }\n\n if (this.props.returnFocusRef && this.props.returnFocusRef.current) {\n this.props.returnFocusRef.current.focus();\n }\n\n this.setState({ ...this.state, wasOpen: false });\n }\n\n private _getFocusableChildren(): NodeListOf | null {\n if (this.element === null) {\n return null;\n }\n\n return this.element.querySelectorAll(focusableElements.join(', '));\n }\n\n private _getFocusedChild(): Element | null {\n const focusableChildren = this._getFocusableChildren();\n\n try {\n return document.activeElement;\n } catch {\n return focusableChildren === null ? null : focusableChildren[0];\n }\n }\n\n private _handleBackdropClick(e: React.MouseEvent): void {\n if (e.target === this.state.mouseDownElement) {\n e.stopPropagation();\n if (!this.props.isOpen || this.props.backdrop !== true) {\n return;\n }\n\n const container = this.ref.current;\n\n if (e.target && container && !container.contains(e.target as Node) && this.props.toggle) {\n this.props.toggle();\n }\n }\n }\n\n private _handleTab(e: React.KeyboardEvent): void {\n if (e.which !== 9) {\n return;\n }\n\n const focusableChildren = this._getFocusableChildren();\n if (focusableChildren === null) {\n return;\n }\n\n const totalFocusable = focusableChildren.length;\n const currentFocus = this._getFocusedChild();\n\n let focusedIndex = 0;\n\n for (let i = 0; i < totalFocusable; i += 1) {\n if (focusableChildren[i] === currentFocus) {\n focusedIndex = i;\n break;\n }\n }\n\n let el: HTMLElement | null = null;\n if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n el = focusableChildren[totalFocusable - 1] as HTMLElement;\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n el = focusableChildren[0] as HTMLElement;\n }\n if (el) {\n el.focus();\n }\n }\n\n private _handleBackdropMouseDown(e: React.MouseEvent): void {\n this.setState({\n mouseDownElement: e.target\n });\n }\n\n private _handleEscape(e: React.KeyboardEvent): void {\n if (this.props.isOpen && this.props.keyboard && e.keyCode === 27 && this.props.toggle) {\n this.props.toggle();\n }\n }\n\n private _onOpened(node: HTMLElement, isAppearing: boolean): void {\n if (this.props.onOpened !== undefined) {\n this.props.onOpened();\n }\n if (this.props.modalTransition !== undefined && this.props.modalTransition.onEntered !== undefined) {\n this.props.modalTransition.onEntered(node, isAppearing);\n }\n }\n\n private _onClosed(node: HTMLElement): void {\n if (this.props.onClosed !== undefined) {\n this.props.onClosed();\n }\n this._close();\n if (this.props.modalTransition !== undefined && this.props.modalTransition.onExited !== undefined) {\n this.props.modalTransition.onExited(node);\n }\n if (this.mounted) {\n this.setState({ isOpen: false });\n }\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport IModalBodyProps from './ModalBody.props';\n\n/**\n * ModalBody component.\n */\nexport default class ModalBody extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'div'\n };\n\n public render(): JSX.Element {\n const { className, cssModule, tag, id, ...attributes } = this.props;\n const Tag = tag || 'div';\n const classes = mapToCssModules(classNames(className, 'msc-modal__body'), cssModule);\n return ;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport IModalFooterProps from './ModalFooter.props';\n\n/**\n * ModalFooter component.\n */\nexport default class ModalFooter extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'div'\n };\n\n public render(): JSX.Element {\n const { className, cssModule, tag, ...attributes } = this.props;\n const Tag = tag || 'div';\n const classes = mapToCssModules(classNames(className, 'msc-modal__footer'), cssModule);\n return ;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport IModalHeaderProps from './ModalHeader.props';\n\n/**\n * ModalHeader component.\n */\nexport default class ModalHeader extends React.PureComponent {\n public render(): JSX.Element {\n let closeButton;\n const {\n className,\n cssModule,\n children,\n toggle,\n tag,\n wrapTag,\n closeAriaLabel,\n closeButtonLabel,\n id,\n ...attributes\n } = this.props;\n\n const Tag = tag || 'h5';\n const WrapTag = wrapTag || 'div';\n const classes = mapToCssModules(classNames(className, 'msc-modal__header'), cssModule);\n\n if (toggle) {\n closeButton = (\n \n );\n }\n\n return (\n \n { children && \n {children}\n }\n {closeButton}\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport { IPaginationProps } from './Pagination.props';\n\n/**\n * Pagination component.\n */\nexport default class Pagination extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'nav',\n listTag: 'ul',\n 'aria-label': 'pagination'\n };\n\n public render(): JSX.Element {\n const {\n className,\n listClassName,\n cssModule,\n size,\n tag: Tag,\n listTag: ListTag,\n 'aria-label': label,\n role,\n ...props\n\n }: any = this.props;\n\n const paginationClasses = mapToCssModules(classNames(className), cssModule);\n\n const listpaginationClasses = mapToCssModules(\n classNames(listClassName, 'msc-pagination', {\n [`msc-pagination-${size}`]: !!size\n }),\n cssModule\n );\n\n return (\n \n \n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { mapToCssModules } from '../common/utilities';\nimport { IPaginationItemProps } from './PaginationItem.props';\n\n/**\n * PaginationItem component.\n */\nexport default class PaginationItem extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'li'\n };\n\n public render(): JSX.Element {\n const { active, className, cssModule, disabled, tag: Tag, ...props }: any = this.props;\n\n const paginationItemClasses = mapToCssModules(\n classNames(className, 'msc-page-item', {\n active,\n disabled\n }),\n cssModule\n );\n\n return ;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '../common/telemetryHelper';\nimport { mapToCssModules } from '../common/utilities';\nimport { IPaginationLinkProps } from './PaginationLink.props';\n\n/**\n * PaginationLink component.\n */\nexport default class PaginationLink extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'a',\n role: 'link'\n };\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: IPaginationLinkProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n let { className, cssModule, next, previous, tag: Tag, children, telemetryContent, ...props }: any = this.props;\n let etext: string = children;\n const paginationLinkclasses = mapToCssModules(classNames(className, 'msc-page-link'), cssModule);\n\n let defaultCaret;\n if (previous) {\n defaultCaret = '\\u00AB';\n etext = 'previous';\n } else if (next) {\n defaultCaret = '\\u00BB';\n etext = 'next';\n }\n\n if (children && Array.isArray(children) && children.length === 0) {\n children = null;\n }\n if (!props.href && Tag === 'a') {\n Tag = 'span';\n }\n\n if (previous || next) {\n children = [\n (\n \n {children || defaultCaret}\n \n )\n ];\n }\n\n this.payLoad.contentAction.etext = etext;\n const attribute = getTelemetryAttributes(telemetryContent, this.payLoad);\n\n return (\n \n {children}\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { UncontrolledTooltip } from '..';\nimport { mapToCssModules } from '../common/utilities';\nimport PaginationItem from './PaginationItem';\nimport PaginationLink from './PaginationLink';\nimport { IUncontrolledPaginationProps } from './UncontrolledPagination.props';\n\n/**\n * Uncontrolled Pagination component.\n */\nexport default class UncontrolledPagination extends React.PureComponent {\n public static defaultProps: Partial = {\n tag: 'nav',\n listTag: 'ul',\n 'aria-label': 'pagination',\n items: 0,\n itemsPerPage: 25,\n startingItem: 0\n };\n\n private static readonly pagesDisplayed: number = 7;\n\n private maxPages: number;\n\n private activePage: number = 0;\n\n private qsps: { [param: string]: string };\n\n private url: string;\n\n private hash: string;\n\n constructor(props: IUncontrolledPaginationProps) {\n super(props);\n this.maxPages = this.props.items ? Math.ceil(this.props.items / this.props.itemsPerPage!) : 0;\n this.activePage = Math.floor((this.props.startingItem || 0) / this.props.itemsPerPage!);\n this.qsps = {};\n const splitUrl = this.props.url.split('?');\n\n if (splitUrl[1]) {\n this.url = splitUrl[0];\n const secondSplit = splitUrl[1].split('#');\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n const parsedQsps = secondSplit[0].split('&');\n\n for (const qsp of parsedQsps) {\n const qspPair = qsp.split('=');\n\n if (this.props.qsp !== qspPair[0]) {\n this.qsps[qspPair[0]] = qspPair[1];\n }\n }\n } else {\n const secondSplit = splitUrl[0].split('#');\n this.url = secondSplit[0];\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n }\n }\n\n public render(): JSX.Element {\n const {\n className,\n baseUrl,\n qsp,\n items,\n itemsPerPage,\n startingItem,\n previousText,\n nextText,\n previousAriaLabel,\n nextAriaLabel,\n listClassName,\n cssModule,\n children,\n size,\n tag: Tag,\n listTag: ListTag,\n 'aria-label': label,\n role,\n ...props\n\n }: any = this.props;\n\n this.maxPages = this.props.items ? Math.ceil(this.props.items / this.props.itemsPerPage!) : 0;\n this.activePage = Math.floor((this.props.startingItem || 0) / this.props.itemsPerPage!);\n this.qsps = {};\n const splitUrl = this.props.url.split('?');\n\n if (splitUrl[1]) {\n this.url = splitUrl[0];\n const secondSplit = splitUrl[1].split('#');\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n const parsedQsps = secondSplit[0].split('&');\n\n for (const activeQsp of parsedQsps) {\n const qspPair = activeQsp.split('=');\n\n if (this.props.qsp !== qspPair[0]) {\n this.qsps[qspPair[0]] = qspPair[1];\n }\n }\n } else {\n const secondSplit = splitUrl[0].split('#');\n this.url = secondSplit[0];\n this.hash = secondSplit[1] ? `#${secondSplit[1]}` : '';\n }\n\n const paginationClasses = mapToCssModules(\n classNames(\n className\n ),\n cssModule\n );\n\n const listpaginationClasses = mapToCssModules(\n classNames(\n listClassName,\n 'msc-pagination',\n {\n [`msc-pagination-${size}`]: !!size\n }\n ),\n cssModule\n );\n\n return (\n \n \n {this._generatePageLinks()}\n \n \n );\n }\n\n private _generateUrl(page: number): string {\n const items = this.props.itemsPerPage! * page;\n const keys = Object.keys(this.qsps);\n let qspUrl = page > 0 ? `?${this.props.qsp}=${items}` : '';\n\n keys.forEach((key: string) => {\n qspUrl = qspUrl ? `${qspUrl}&${key}=${this.qsps[key]}` : `?${key}=${this.qsps[key]}`;\n });\n\n return this.url + qspUrl + this.hash;\n }\n\n private _generatePaginationArrow(next: boolean, disable: boolean, className: string): React.ReactElement {\n const url = disable ? undefined : this._generateUrl(this.activePage + (next ? 1 : -1));\n const tooltipId = next ? this.props.nextId : this.props.prevId;\n const ariaDescribedBy = next ? this.props.nextAreaDescribed : this.props.prevAreaDescribed;\n const placement = next ? 'right' : 'left';\n const tag = disable ? 'span' : 'a';\n\n return (\n \n \n {next ? this.props.nextText : this.props.previousText}\n \n {tooltipId && (\n \n {next ? 'next' : 'previous'}\n \n )}\n \n );\n }\n\n private _generatePaginationItem(page: number): React.ReactElement {\n const active = this.activePage === page;\n const url = this._generateUrl(page);\n page += 1;\n\n return (\n \n \n {page}\n \n \n );\n }\n\n private _generateEllipse(): React.ReactElement {\n return (\n \n \n ...\n \n \n );\n }\n\n private _generatePageLinks(): React.ReactFragment {\n const displayCountSide = 3;\n let leftDistance = this.activePage;\n let rightDistance = this.maxPages - this.activePage - 1;\n const leftEllipse = this.maxPages > UncontrolledPagination.pagesDisplayed && leftDistance > 3;\n const rightEllipse = this.maxPages > UncontrolledPagination.pagesDisplayed && rightDistance > 3;\n\n leftDistance = Math.min(leftDistance, displayCountSide);\n rightDistance = Math.min(rightDistance, displayCountSide);\n const pages = [];\n const ellipseOffset = leftEllipse ? -1 : 0;\n const displayedPagesOnLeft = leftDistance + (displayCountSide - rightDistance) + ellipseOffset;\n const startingIndex = Math.max(this.activePage - displayedPagesOnLeft, 0);\n const endIndex = Math.min((startingIndex + 5 + (rightEllipse ? 0 : 1) + (leftEllipse ? 0 : 1)),\n (rightEllipse ? this.maxPages - 1 : this.maxPages));\n\n if (leftEllipse) {\n pages.push(this._generatePaginationItem(0));\n pages.push(this._generateEllipse());\n }\n\n for (let i = startingIndex; i < endIndex; i++) {\n pages.push(this._generatePaginationItem(i));\n }\n\n if (rightEllipse) {\n pages.push(this._generateEllipse());\n pages.push(this._generatePaginationItem(this.maxPages - 1));\n }\n\n return (\n <>\n { this._generatePaginationArrow(false, (this.activePage === 0), 'previous') }\n {pages}\n { this._generatePaginationArrow(true, (this.activePage === this.maxPages - 1), 'next') }\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { canUseDOM, getTargetElement, mapToCssModules } from '../common/utilities';\nimport PopperContent from '../popper-content/PopperContent';\nimport { IPopoverProps } from './Popover.props';\n\n/**\n * Popover component.\n */\nexport default class Popover extends React.PureComponent {\n public static defaultProps: Partial = {\n isOpen: false,\n placement: 'right',\n toggle: () => {\n return;\n }\n };\n\n public props: IPopoverProps;\n\n private target: HTMLElement | null;\n\n private popover: HTMLDivElement | null;\n\n private tabPressed: boolean = false;\n\n constructor(props: IPopoverProps) {\n super(props);\n this.props = props;\n\n this.popover = null;\n this._addTargetEvents = this._addTargetEvents.bind(this);\n this._handleDocumentClick = this._handleDocumentClick.bind(this);\n this._removeTargetEvents = this._removeTargetEvents.bind(this);\n this.getRef = this.getRef.bind(this);\n this._toggle = this._toggle.bind(this);\n this._focusOutTarget = this._focusOutTarget.bind(this);\n this._focusOutPopover = this._focusOutPopover.bind(this);\n this._keyDown = this._keyDown.bind(this);\n this._show = this._show.bind(this);\n this._hide = this._hide.bind(this);\n this.target = null;\n }\n\n public componentDidMount(): void {\n this.target = getTargetElement(this.props.target);\n this._handleProps();\n }\n\n public componentDidUpdate(): void {\n this._handleProps();\n }\n\n public componentWillUnmount(): void {\n this._removeTargetEvents();\n }\n\n public getRef(ref: HTMLDivElement | null): void {\n this.popover = ref;\n }\n\n public render(): JSX.Element | null {\n if (!this.props.isOpen) {\n return null;\n }\n\n const {\n cssModule,\n isOpen,\n target,\n placementPrefix,\n hideArrow,\n className,\n innerClassName,\n modifiers,\n placement,\n container,\n offset,\n toggle,\n boundariesElement,\n role,\n ...attributes\n } = this.props;\n\n const classes = mapToCssModules(\n classNames(\n 'msc-popover-inner',\n this.props.innerClassName\n ),\n this.props.cssModule\n );\n\n const popperClasses = mapToCssModules(\n classNames(\n 'msc-popover',\n 'show',\n this.props.className\n ),\n this.props.cssModule\n );\n\n return (\n \n \n \n );\n }\n\n private _handleProps(): void {\n if (this.props.isOpen) {\n this._show();\n } else {\n this._hide();\n }\n }\n\n private _show(): void {\n this.tabPressed = false;\n this._addTargetEvents();\n if (!this.props.isOpen) {\n this._toggle();\n }\n }\n\n private _hide(): void {\n this._removeTargetEvents();\n if (this.props.isOpen) {\n this._toggle();\n }\n }\n\n private _handleDocumentClick(e: Event): void {\n if (!this.target) {\n return;\n }\n\n const target = e.target as HTMLElement;\n\n if (e.target !== this.target &&\n !this.target.contains(target) &&\n e.target !== this.popover &&\n !(this.popover && this.popover.contains(target))\n ) {\n if (this.props.isOpen) {\n this._toggle();\n }\n }\n }\n\n private _addTargetEvents(): void {\n if (!this.target) {\n return;\n }\n if (canUseDOM) {\n ['click', 'touchstart'].forEach((event: string) => {\n document.addEventListener(event, this._handleDocumentClick, true);\n });\n this.target.addEventListener('focusout', this._focusOutTarget, true);\n this.target.addEventListener('keydown', this._keyDown, true);\n }\n }\n\n private _removeTargetEvents(): void {\n if (!this.target) {\n return;\n }\n if (canUseDOM) {\n ['click', 'touchstart'].forEach((event: string) => {\n document.removeEventListener(event, this._handleDocumentClick, true);\n });\n this.target.removeEventListener('focusout', this._focusOutTarget, true);\n this.target.removeEventListener('keydown', this._keyDown, true);\n }\n }\n\n private _focusOutPopover(): void {\n setTimeout(() => {\n const nextFocus = document.activeElement;\n if (this.popover && !this.popover.contains(nextFocus)) {\n this._hide();\n }\n }, 1);\n }\n\n private _focusOutTarget(): void {\n if (this.tabPressed) {\n this.tabPressed = false;\n setTimeout(() => {\n const nextFocus = document.activeElement;\n if (this.popover && !this.popover.contains(nextFocus)) {\n this._hide();\n }\n }, 1);\n }\n }\n\n private _keyDown(e: KeyboardEvent): void {\n if (e.keyCode === 9) {\n this.tabPressed = true;\n } else if (this.props.isOpen && e.keyCode === 27 && this.props.toggle) {\n this.props.toggle();\n }\n }\n\n private _toggle(): void {\n if (this.props.disabled) {\n return;\n }\n\n if (this.props.toggle) {\n this.props.toggle();\n }\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport { Data } from 'popper.js';\nimport * as React from 'react';\nimport { Arrow, Popper as ReactPopper } from 'react-popper';\n\nimport { getTargetElement, mapToCssModules } from '../common/utilities';\nimport { IPopperContentProps } from './PopperContent.props';\n\nexport interface IPopperContentState {\n placement?: string;\n isOpen: boolean;\n}\n\n/**\n * Renders popper content. This is an internal helper class shared between components.\n */\nexport default class PopperContent extends React.Component {\n\n public static defaultProps: Partial = {\n boundariesElement: 'scrollParent',\n placement: 'auto',\n hideArrow: false,\n isOpen: false,\n offset: 0,\n fallbackPlacement: 'flip',\n flip: true,\n container: 'body',\n modifiers: {}\n };\n\n constructor(props: IPopperContentProps) {\n super(props);\n\n this._handlePlacementChange = this._handlePlacementChange.bind(this);\n this.state = { isOpen: props.isOpen };\n }\n\n public componentDidMount(): void {\n this._handleProps();\n }\n\n public componentDidUpdate(prevProps: IPopperContentProps): void {\n if (this.props.isOpen !== prevProps.isOpen) {\n this._handleProps();\n }\n }\n\n public shouldComponentUpdate(nextProps: IPopperContentProps,\n nextState: IPopperContentState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n return this.props.isOpen ? this._renderChildren() : null;\n }\n\n private _handlePlacementChange(data: Data): Data {\n if (this.state.placement !== data.placement) {\n this.setState({ placement: data.placement });\n }\n\n return data;\n }\n\n private _handleProps(): void {\n if (this.props.container !== 'inline') {\n if (this.props.isOpen) {\n this._show();\n } else {\n this._hide();\n }\n }\n }\n\n private _hide(): void {\n this.setState({ isOpen: false });\n }\n\n private _show(): void {\n this.setState({ isOpen: true });\n }\n\n private _renderChildren(): JSX.Element | null {\n const {\n cssModule,\n children,\n isOpen,\n flip,\n offset,\n target,\n fallbackPlacement,\n focusOut,\n placementPrefix,\n arrowClassName: arrowClassNameOrUndefined,\n hideArrow,\n className,\n tag,\n modifiers,\n boundariesElement,\n ...attrs\n } = this.props;\n\n const arrowClassName = mapToCssModules(\n classNames(\n 'msc-arrow',\n arrowClassNameOrUndefined\n ),\n cssModule\n );\n\n const placement = (this.state.placement || attrs.placement || 'auto').split('-')[0];\n const popperClassName = mapToCssModules(\n classNames(\n className,\n placementPrefix ? `${placementPrefix}-${placement}` : placement\n ),\n this.props.cssModule\n );\n\n const extendedModifiers = {\n offset: { offset },\n flip: { enabled: flip, behavior: fallbackPlacement },\n preventOverflow: { boundariesElement },\n update: {\n enabled: true,\n order: 950,\n fn: this._handlePlacementChange\n },\n ...modifiers\n };\n\n const targetElement = getTargetElement(target);\n if (targetElement === null) {\n return null;\n }\n\n return (\n \n {children}\n {!hideArrow && }\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { Button } from '..';\nimport { Modal, ModalBody, ModalHeader } from '../modal';\n\nexport interface IPopupProductsProps {\n dialogStrings?: {\n closeWindowButtonText: string;\n };\n\n className: string;\n processStatusClass: string;\n text: string;\n\n modalOpen: boolean | undefined;\n setModalOpen(newValue: boolean): void;\n}\n\nexport const PopupProducts = (popupProps: IPopupProductsProps) => {\n const { processStatusClass, dialogStrings, className, text, modalOpen, setModalOpen } = popupProps;\n\n const closeModal = React.useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n\n if (!dialogStrings || !text) {\n return null;\n }\n\n return (\n \n \n \n
\n
\n {text}\n
\n \n \n \n );\n};\n\nexport default PopupProducts;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '..';\nimport { Modal, ModalBody, ModalHeader } from '../modal';\n\nexport interface IPopupProps extends IComponentProps<{ product: SimpleProduct | undefined; price: ProductPrice | undefined }> {\n dialogStrings?: {\n goToCartText: string;\n continueShoppingText: string;\n headerItemOneText: string;\n headerItemFormatText: string;\n headerMessageText: string;\n freePriceText: string;\n originalPriceText: string;\n currentPriceText: string;\n };\n\n className: string;\n imageSettings?: IImageSettings;\n gridSettings: IGridSettings | undefined;\n productQuantity: number;\n priceComponent: React.ReactNode;\n navigationUrl?: string;\n modalOpen: boolean | undefined;\n telemetryContent?: ITelemetryContent;\n setModalOpen(newValue: boolean): void;\n}\n\nexport const Popup = (popupProps: IPopupProps) => {\n const { dialogStrings, className, imageSettings, gridSettings, data: { product, price }, productQuantity, priceComponent, navigationUrl, modalOpen, telemetryContent, setModalOpen, context } = popupProps;\n const closeModal = React.useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n if (!dialogStrings || !product) {\n return null;\n }\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.ContinueShopping);\n const continueShoppingAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ViewBagAndCheckout;\n const viewBagAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n const fallbackImageUrl = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const quantity = productQuantity !== undefined ? productQuantity : 1;\n const itemsString = quantity === 1 ? dialogStrings.headerItemOneText : dialogStrings.headerItemFormatText.replace('{0}', quantity.toString());\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const shouldDisplayUnitOfMeasure = context.app.config?.unitOfMeasureDisplayType && context.app.config.unitOfMeasureDisplayType !== 'none';\n\n const reducedDimensions: string = product.Dimensions ? product.Dimensions.reduce(\n (str, productDimension) => {\n if (productDimension.DimensionValue && productDimension.DimensionValue.Value) {\n if (str) {\n return `${str}, ${productDimension.DimensionValue.Value}`;\n }\n\n return `${productDimension.DimensionValue.Value}`;\n }\n\n return str;\n },\n '') : '';\n\n return (\n \n \n \n {itemsString}\n \n \n {dialogStrings.headerMessageText}\n \n \n \n \n \n {product.Name}\n \n {reducedDimensions !== '' ?
\n {reducedDimensions}\n
: ''}\n {price ? (\n
\n {priceComponent}\n
\n ) : ''}\n {product.DefaultUnitOfMeasure && shouldDisplayUnitOfMeasure ? (\n
\n \n {product.DefaultUnitOfMeasure}\n \n
\n ) : ''}\n \n {dialogStrings.goToCartText}\n \n \n {dialogStrings.continueShoppingText}\n \n
\n \n );\n};\n\nexport default Popup;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { EnumExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\nimport Button from '../button/Button';\nimport { Popover } from '../popover';\n\n/**\n * Resources for the price editor mode selection.\n */\nexport interface IPriceEditorModeSelectionResources {\n specifyAmountButtonText: string;\n payFullAmountButtonText: string;\n}\n\n/**\n * Props for the price editor mode selection.\n */\nexport interface IPriceEditorModeSelectionProps {\n className: string;\n\n resources: IPriceEditorModeSelectionResources;\n\n currentState: PriceEditorModeSelectionState;\n onStateChanged(state: PriceEditorModeSelectionState): void;\n}\n\n/**\n * Defines editor modes for the amount.\n */\nexport enum PriceEditorModeSelectionState {\n full = 0,\n partial = 1\n}\n\n/**\n * Retrieves resource value based by the given mode state.\n * @param modeState - Given state.\n * @param resources - All resources.\n * @returns Resource value for the given state.\n */\nconst getPriceEditorModeSelectionStateResources = (modeState: PriceEditorModeSelectionState, resources: IPriceEditorModeSelectionResources): string => {\n switch (modeState) {\n case PriceEditorModeSelectionState.full:\n return resources.payFullAmountButtonText;\n case PriceEditorModeSelectionState.partial:\n return resources.specifyAmountButtonText;\n default:\n throw new Error('Failed to retrieve resource description for unknown price editor selection state.');\n }\n};\n\n/**\n * On click functionality.\n * @param handleStateChange - Handle change state function.\n * @param modeState - New state.\n * @returns Event handler.\n */\nconst onClickHandler = (handleStateChange: (modeState: PriceEditorModeSelectionState) => void, modeState: PriceEditorModeSelectionState) => () => {\n handleStateChange(modeState);\n};\n\n/**\n * Renders a button that allows to update the mode to the given state.\n * @param modeState - The state to render.\n * @param resources - Resource values.\n * @param className - Element class name.\n * @param handleStateChange - Event handler to update the state.\n * @returns React node.\n */\nconst renderModeStateItem = (\n modeState: PriceEditorModeSelectionState,\n resources: IPriceEditorModeSelectionResources,\n className: string,\n handleStateChange: (modeState: PriceEditorModeSelectionState) => void): React.ReactNode => {\n\n const stateStringRepresentation = PriceEditorModeSelectionState[modeState];\n\n return (\n \n );\n};\n\n/**\n * On Toggle Popover functionality.\n * @param setPopoverState -Set popover state function.\n * @param isPopoverState -Boolean value.\n * @returns Set toggle popover state functionality.\n */\nconst togglePopoverHandler = (setPopoverState: React.Dispatch>, isPopoverState: boolean) => () => {\n setPopoverState(!isPopoverState);\n};\n\n/**\n * Price editor component which handles selection modes (for instance, full or partial amount).\n * @param props - Configuration of the component.\n * @returns React element.\n */\nexport const PriceEditorModeSelectionComponent: React.FC = (props: IPriceEditorModeSelectionProps) => {\n const popoverReference = React.createRef();\n const [isPopoverShown, setIsPopoverShown] = React.useState(false);\n\n const [modeState, setModeState] = React.useState(props.currentState);\n\n /**\n * Updates component state when a selection is changed.\n * @param clickedState - New mode state.\n */\n const onChangeMode = (clickedState: PriceEditorModeSelectionState) => {\n setModeState(clickedState);\n setIsPopoverShown(false);\n props.onStateChanged(clickedState);\n };\n\n return (\n
\n \n {getPriceEditorModeSelectionStateResources(modeState, props.resources)}\n \n \n {\n EnumExtensions.getEnumValues(PriceEditorModeSelectionState).map(state => {\n return renderModeStateItem(state, props.resources, props.className, onChangeMode);\n })\n }\n \n
\n );\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IPriceEditorModeSelectionResources, PriceEditorModeSelectionComponent, PriceEditorModeSelectionState } from './price-editor-mode-selection';\n\n/**\n * Resources for price editor.\n */\nexport interface IPriceEditorResources extends IPriceEditorModeSelectionResources {\n priceEditorInputAriaLabel: string;\n}\n\n/**\n * The props required to render the component.\n */\nexport interface IPriceEditorProps {\n className: string;\n\n defaultAmount: number;\n\n resources: IPriceEditorResources;\n\n minimumValue?: number;\n maximumValue?: number;\n\n handleChange?(newValue: number): void;\n}\n\n/**\n * The state of the component.\n */\nexport interface IPriceEditorState {\n currentValue?: number;\n isInputFocused: boolean;\n}\n\n/**\n * Provides an input field which allows entering a price amount.\n */\nexport class PriceEditor extends React.PureComponent {\n\n private static readonly _precision = 2;\n\n private readonly _inputRef: React.RefObject;\n\n public constructor(props: IPriceEditorProps) {\n super(props);\n\n this._inputRef = React.createRef();\n\n let defaultValue = props.defaultAmount;\n\n if (!ObjectExtensions.isNullOrUndefined(this.props.minimumValue) && defaultValue < this.props.minimumValue) {\n defaultValue = this.props.minimumValue;\n } else if (!ObjectExtensions.isNullOrUndefined(this.props.maximumValue) && defaultValue > this.props.maximumValue) {\n defaultValue = this.props.maximumValue;\n }\n\n this.state = {\n currentValue: defaultValue,\n isInputFocused: false\n };\n }\n\n public render(): JSX.Element {\n const containerClassName = 'msc-price-editor';\n\n const hasMultipleModes = !ObjectExtensions.isNullOrUndefined(this.props.maximumValue);\n\n let mode = PriceEditorModeSelectionState.partial;\n\n if (!ObjectExtensions.isNullOrUndefined(this.props.maximumValue) && this.state.currentValue === this.props.maximumValue) {\n mode = PriceEditorModeSelectionState.full;\n }\n\n const formattedValue = this.state.currentValue?.toFixed(PriceEditor._precision) ?? '';\n const editedValue = this.state.currentValue ?? '';\n\n return (\n
\n \n {\n hasMultipleModes &&
\n \n
\n }\n
\n );\n }\n\n /**\n * Handles input focus.\n */\n private readonly _handleInputFocus = () => {\n this.setState({ isInputFocused: true });\n };\n\n /**\n * Handles input blur.\n */\n private readonly _handleInputBlur = () => {\n this.setState({ isInputFocused: false });\n };\n\n /**\n * Handles editor mode state change.\n * @param newState - New selection mode state.\n */\n private readonly _handleEditorModeStateChange = (newState: PriceEditorModeSelectionState) => {\n if (newState === PriceEditorModeSelectionState.full) {\n this._updateAmount(this.props.maximumValue!);\n } else {\n this.setState({ currentValue: undefined });\n this._inputRef.current?.focus();\n }\n };\n\n /**\n * Update the price and calls corresponding callbacks.\n * @param newAmount - New price amount.\n */\n private readonly _updateAmount = (newAmount: number) => {\n this.setState({ currentValue: newAmount });\n\n if (this.props.handleChange) {\n this.props.handleChange(newAmount);\n }\n };\n\n /**\n * Handles value change.\n * @param event - React change event.\n */\n private readonly _handleChange = (event: React.ChangeEvent) => {\n let currentValue = Number.parseFloat(event.target.value);\n\n if (Number.isNaN(currentValue)) {\n this.setState({ currentValue: undefined });\n return;\n }\n\n currentValue = +currentValue.toFixed(PriceEditor._precision);\n\n if (!ObjectExtensions.isNullOrUndefined(this.props.minimumValue) && currentValue < this.props.minimumValue) {\n this._updateAmount(this.props.minimumValue);\n } else if (!ObjectExtensions.isNullOrUndefined(this.props.maximumValue) && currentValue > this.props.maximumValue) {\n this._updateAmount(this.props.maximumValue);\n } else {\n this._updateAmount(currentValue);\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classname from 'classnames';\nimport * as React from 'react';\n\nexport interface IProgressProps {\n id?: string;\n className?: string;\n max: number;\n min?: number;\n value: number;\n ariaLabel?: string;\n}\n\nexport const Progress: React.FC = (props: IProgressProps) => {\n const { id, className, max, min, value, ariaLabel } = props;\n const percent = Math.max(0, Math.min(value * 100 / max, 100));\n const style = { width: `${percent}%` };\n\n return (\n
\n \n
\n );\n};\n\n// Set default props\nProgress.defaultProps = {\n 'aria-valuemax': 100,\n 'aria-valuenow': 0\n} as Partial;\n\nexport default Progress;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport debounce from 'lodash/debounce';\nimport * as React from 'react';\n\nimport { IQuantityProps } from './Quantity.props';\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to allow input of quantity between a\n * range of values.\n */\n\nexport default class Quantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount ?? 1 };\n this._handleChange = this._handleChange.bind(this);\n }\n\n public render(): JSX.Element {\n const currentValue = this.state.currentInput;\n\n return (\n \n );\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt((e.target.value), 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement = this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState(\n { currentInput: this.props.max },\n () => {\n debounce(\n () => {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n },\n 200)();\n }\n );\n } else {\n this.setState(\n { currentInput: currentValue },\n () => {\n debounce(\n () => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }\n },\n 200)();\n }\n );\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n if (isNaN(this.state.currentInput) || (this.state.currentInput < minValue)) {\n this.setState({ currentInput: minValue }, () => {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n });\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nimport { addThrottledEvent, getCSS } from '../common/utilities';\nimport Flipper from '../flipper/Flipper';\nimport { ISingleSlideCarouselProps } from './SingleSlideCarousel.props';\n\ninterface ISingleSlideCarouselState {\n showPrevious: boolean;\n showNext: boolean;\n offset: number;\n}\n\n/**\n * SingleSlideCarousel - yup.\n */\nexport default class SingleSlideCarousel extends React.PureComponent {\n private static readonly itemsSelector: string = 'msc-ss-carousel-item';\n\n private static readonly verticalItemsSelector: string = 'msc-ss-carousel-vert-item';\n\n private direction: string;\n\n private item: HTMLElement | undefined;\n\n private slide: HTMLElement | undefined;\n\n private carousel: HTMLElement | undefined;\n\n private carouselSize: number = 0;\n\n private slideSize: number = 0;\n\n private itemSize: number = 0;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private readonly ref: React.RefObject;\n\n private readonly slideRef: React.RefObject;\n\n private readonly itemRef: React.RefObject;\n\n private readonly id: string;\n\n private scrollStart: number | undefined;\n\n private readonly scrollThreshold: number;\n\n private readonly flipperNextLabel: string = 'next';\n\n private readonly flipperPrevLabel: string = 'prev';\n\n constructor(props: ISingleSlideCarouselProps) {\n super(props);\n this._nextSlide = this._nextSlide.bind(this);\n this._previousSlide = this._previousSlide.bind(this);\n this._handleTouchStart = this._handleTouchStart.bind(this);\n this._handleTouchEnd = this._handleTouchEnd.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onResized = this._onResized.bind(this);\n this.state = { showPrevious: false, showNext: false, offset: 0 };\n this.ref = React.createRef();\n this.slideRef = React.createRef();\n this.itemRef = React.createRef();\n this.direction = 'left';\n this.id = props.parentId || '';\n this.scrollThreshold = this.props.touchScrollThreshold !== undefined ? this.props.touchScrollThreshold : 100;\n }\n\n public componentDidUpdate(): void {\n this.carousel = this.ref.current!;\n this.slide = this.slideRef.current!;\n this.item = this.itemRef.current!;\n this._setSizes();\n this._updateFlippers(this.state.offset);\n }\n\n public componentDidMount(): void {\n this.direction = this.props.vertical ? 'top' : 'left';\n this.carousel = this.ref.current!;\n this.slide = this.slideRef.current!;\n this.item = this.itemRef.current!;\n this._setSizes();\n this.resizeThrottledEventHandler =\n window && addThrottledEvent(window, 'resize', this._onResized as EventListener);\n this._updateFlippers(0);\n }\n\n public componentWillUnmount(): void {\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n\n public render(): JSX.Element {\n const isVert: boolean = this.props.vertical === true;\n const slidePositionStyle = {} as React.CSSProperties;\n const modifiedChildren = this._getClonedChildren(isVert);\n slidePositionStyle[this.direction] = `${this.state.offset}px`;\n const carouselClass = (isVert) ? 'msc-ss-carousel-vert' : 'msc-ss-carousel';\n const carouselSlideClass = (isVert) ? 'msc-ss-carousel-vert-slide' : 'msc-ss-carousel-slide';\n const overflowClass = (isVert) ? 'msc-ss-carousel-vert-strip' : 'msc-ss-carousel-strip';\n const previousFlipperGlyph = (isVert) ? 'msi-chevron-up' : 'msi-chevron-left';\n const nextFlipperGlyph = (isVert) ? 'msi-chevron-down' : 'msi-chevron-right';\n const previousFlipperClassName = (isVert) ? 'msc-ss-carousel-vert__flipper' : 'msc-ss-carousel__flipper';\n const nextFlipperClassName = (isVert) ? 'msc-ss-carousel-vert__flipper msc-ss-carousel-vert__flipper--next' : 'msc-ss-carousel__flipper msc-ss-carousel__flipper--next';\n const disableClassName = !this.state.showPrevious || !this.state.showNext ? 'disabled' : null;\n return (\n \n 0)}\n telemetryContent={this.props.telemetryContent}\n telemetryLabel={this.flipperPrevLabel}\n />\n 0)}\n telemetryContent={this.props.telemetryContent}\n telemetryLabel={this.flipperNextLabel}\n />\n
\n \n {modifiedChildren}\n \n
\n
\n );\n }\n\n private _getClonedChildren(isVert: boolean): React.DetailedReactHTMLElement, HTMLElement>[] {\n return React.Children.map(this.props.children, (child: React.ReactNode, index: number) => {\n const castChild = (child as React.ReactChild) as React.ReactElement;\n if (index === 1) {\n return React.cloneElement(castChild, {\n className: `${isVert ? SingleSlideCarousel.verticalItemsSelector : SingleSlideCarousel.itemsSelector} ${castChild.props.className}`,\n\n // @ts-expect-error\n ref: this.itemRef,\n onFocus: this._onFocus\n });\n }\n return React.cloneElement(castChild, {\n className: `${isVert ? SingleSlideCarousel.verticalItemsSelector : SingleSlideCarousel.itemsSelector} ${castChild.props.className}`,\n\n // @ts-expect-error\n onFocus: this._onFocus\n });\n });\n }\n\n private _nextSlide(): void {\n this._moveSingleSlide(true);\n }\n\n private _previousSlide(): void {\n this._moveSingleSlide(false);\n }\n\n private _handleTouchStart(evt: React.TouchEvent): void {\n if (evt.touches.length === 0) {\n this.scrollStart = undefined;\n } else {\n this.scrollStart = this.props.vertical === true ? evt.touches[0].screenY : evt.touches[0].screenX;\n }\n }\n\n private _handleTouchEnd(evt: React.TouchEvent): void {\n if (evt.changedTouches.length > 0 && this.scrollStart !== undefined) {\n const newTarget: number = this.props.vertical === true ? evt.changedTouches[0].screenY : evt.changedTouches[0].screenX;\n\n const delta = newTarget - this.scrollStart;\n\n if (delta > this.scrollThreshold) {\n this._previousSlide();\n }\n\n if (delta < -this.scrollThreshold) {\n this._nextSlide();\n }\n }\n\n this.scrollStart = undefined;\n\n return;\n }\n\n private _moveSingleSlide(next: boolean): void {\n let currentOffset = Number.parseInt(getCSS(this.slide!, this.direction), 10);\n const carouselSize = this.carouselSize;\n let maxScrollCount = Math.floor(carouselSize / (this.itemSize));\n const directionModifier = next ? -1 : 1;\n currentOffset = !isNaN(currentOffset) && typeof currentOffset === 'number' ? currentOffset : 0;\n\n if (maxScrollCount === 0) {\n maxScrollCount = 1;\n }\n\n maxScrollCount = carouselSize % (this.itemSize) === 0 ? maxScrollCount - 1 : maxScrollCount;\n maxScrollCount = Math.max(maxScrollCount, 1);\n const maxScrollDistance = maxScrollCount * (this.itemSize);\n let distanceToEdge = next ? this.slideSize - carouselSize + currentOffset : Math.abs(currentOffset);\n distanceToEdge = Math.max(0, distanceToEdge);\n\n const offset =\n maxScrollDistance <= distanceToEdge ? maxScrollDistance * directionModifier + currentOffset : distanceToEdge * directionModifier + currentOffset;\n\n this._updateFlippers(offset);\n }\n\n private _setSizes(): void {\n const item = this.item;\n if (item) {\n this.itemSize = this.props.vertical ? item.scrollHeight : item.scrollWidth;\n } else {\n this.itemSize = 0;\n }\n\n this.carouselSize = this._calculateCarouselSize();\n this.slideSize = this.slide ? (this.props.vertical ? this.slide.scrollHeight : this.slide.scrollWidth) : 0;\n }\n\n private _calculateCarouselSize(): number {\n if (!this.carousel) {\n return 0;\n }\n\n const carouselStyle = getComputedStyle(this.carousel);\n\n const padding = this.props.vertical ? Number.parseFloat(carouselStyle.paddingTop || '') + Number.parseFloat(carouselStyle.paddingBottom || '') : Number.parseFloat(carouselStyle.paddingLeft || '') + Number.parseFloat(carouselStyle.paddingRight || '');\n\n return this.props.vertical ? this.carousel.clientHeight - padding : this.carousel.clientWidth - padding;\n }\n\n private _canScrollPrevious(offset: number): boolean {\n return !isNaN(offset) && offset !== 0;\n }\n\n private _canScrollNext(offset: number): boolean {\n if (this.carouselSize + Math.abs(offset) >= this.slideSize) {\n return false;\n }\n\n return true;\n }\n\n private _updateFlippers(offset: number): void {\n this.setState({\n showPrevious: this._canScrollPrevious(offset),\n showNext: this._canScrollNext(offset),\n offset\n });\n }\n\n private _scrollItemIntoView(item: HTMLElement): void {\n const carouselSize = this.carouselSize;\n let offset = (this.props.vertical) ? item.offsetTop : item.offsetLeft;\n let updateOffset = false;\n\n const left = Number.parseInt(getCSS(this.slide!, 'left'), 10) || 0;\n const top = Number.parseInt(getCSS(this.slide!, 'top'), 10) || 0;\n\n if (this.props.vertical) {\n if (top < 0 && -top > offset) {\n if (offset !== 0) {\n offset = -offset + 1;\n }\n updateOffset = true;\n } else if (top + offset > carouselSize - this.itemSize) {\n offset = carouselSize - this.itemSize - offset - 1;\n updateOffset = true;\n }\n } else if (this.direction === 'left') {\n if (left < 0 && -left > offset) {\n if (offset !== 0) {\n offset = -offset + 1;\n }\n updateOffset = true;\n } else if (left + offset > carouselSize - this.itemSize) {\n offset = carouselSize - this.itemSize - offset + 19;\n updateOffset = true;\n }\n }\n\n if (updateOffset) {\n this._updateFlippers(offset);\n\n if (this.props.vertical) {\n setTimeout(() => {\n (this.slide as Node).parentElement!.scrollTop = 0;\n }, 0);\n } else {\n setTimeout(() => {\n (this.slide as Node).parentElement!.scrollLeft = 0;\n }, 0);\n }\n }\n }\n\n private _onFocus(event: React.FocusEvent): void {\n const target = event.currentTarget as HTMLElement;\n this._scrollItemIntoView(target);\n }\n\n private _onCarouselResized(): void {\n this._setSizes();\n let offset = Number.parseInt(getCSS(this.slide!, this.direction), 10);\n\n // Ensure the carousel slide fits across the entire alotted space\n if (!isNaN(offset) && offset < 0 && this.slideSize + offset < this.carouselSize) {\n offset = Math.min(0, this.carouselSize - this.slideSize);\n }\n\n this._updateFlippers(offset);\n }\n\n private readonly _onResized = (): void => {\n this._onCarouselResized();\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nimport { UncontrolledTooltip } from '..';\nimport { ISliderThumbProps } from './SliderThumb.props';\n\n/**\n * Sliderthumb - This is a sliderthumb component this component which is\n * used to control the slider thumb.\n */\nexport default class SliderThumb extends React.PureComponent {\n\n public static defaultProps: Partial = {\n showTooltip: true,\n tooltip: {\n placement: 'top'\n }\n };\n\n public sliderButtonRef: React.RefObject = React.createRef();\n\n public render(): JSX.Element {\n const sliderThumbBaseClass = 'slider__thumb ';\n const sliderThumbClass = this.props.trackThumbClass ? `${sliderThumbBaseClass} ${this.props.trackThumbClass}` : sliderThumbBaseClass;\n\n return (\n <>\n \n { this.props.showTooltip &&\n \n {this.props.handleTooltipText ? this.props.handleTooltipText(this.props.sliderValue!) : this.props.sliderValue!.toString()}\n }\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { format, isMobile, Progress, VariantType } from '..';\nimport { clamp, toUpperCaseFirstChar } from '../common/utilities';\nimport { ISliderChangeNotification, ISliderLabel, ISliderProps, ISliderThumbProps } from './Slider.props';\nimport SliderThumb from './SliderThumb';\n\n// This maintains the min and max values for the 2 thumbs\nexport interface ISliderState {\n sliderThumbs: ISliderThumbProps[];\n limit: number;\n grab: number;\n active: boolean;\n id: string;\n}\n\nconst orientations = {\n horizontal: {\n dimension: 'width',\n direction: 'left',\n coordinate: 'x'\n },\n vertical: {\n dimension: 'height',\n direction: 'top',\n coordinate: 'y'\n }\n};\n\ninterface IFillCoordinates {\n fill: number;\n handle: number;\n label: number;\n}\n\nenum EventType {\n Start,\n End,\n Change\n}\n\nconst rangeDefaultChkValue = 0;\n\n/**\n * Slider - This is a slider component this component morphs into a range slider\n * based on flags.\n */\n\nexport default class Slider extends React.Component {\n public static defaultProps: Partial = {\n showTooltip: true,\n inForm: false,\n orientation: 'horizontal',\n min: 0,\n max: 100,\n step: 1,\n sliderThumbs: [{ id: 'slider_thumb_id', value: 50 }]\n };\n\n private static readonly sliderBaseClass: string = 'slider';\n\n public isRangeSlider: boolean;\n\n private readonly ref: React.RefObject = React.createRef();\n\n private readonly thumb1Ref: React.RefObject = React.createRef();\n\n private readonly thumb2Ref: React.RefObject = React.createRef();\n\n public static getDerivedStateFromProps(props: ISliderProps, state: ISliderState): ISliderState | null {\n if ((props.sliderThumbs.length > 0 && props.sliderThumbs[0].value !== state.sliderThumbs[0].value) ||\n (props.sliderThumbs.length > 1 && props.sliderThumbs[1].value !== state.sliderThumbs[1].value)) {\n const nextState = { ...state };\n nextState.sliderThumbs[0].value = props.sliderThumbs[0].value;\n if (props.sliderThumbs.length > 1) {\n nextState.sliderThumbs[1].value = props.sliderThumbs[1].value;\n }\n return nextState;\n }\n return null;\n }\n\n constructor(props: ISliderProps) {\n super(props);\n this.isRangeSlider = this.props.sliderThumbs.length === 2;\n this.state = {\n sliderThumbs: this.props.sliderThumbs,\n grab: 0,\n limit: 0,\n active: false,\n id: ''\n };\n this._handleUpdate = this._handleUpdate.bind(this);\n this._handleDrag = this._handleDrag.bind(this);\n this._handleEnd = this._handleEnd.bind(this);\n this._handleStart = this._handleStart.bind(this);\n this._handleOnChange = this._handleOnChange.bind(this);\n this._setSliderValue = this._setSliderValue.bind(this);\n this._getThumbFromProps = this._getThumbFromProps.bind(this);\n this._publishNotification = this._publishNotification.bind(this);\n this._getThumbAndPublishEvent = this._getThumbAndPublishEvent.bind(this);\n this._willThumbsCrossOver = this._willThumbsCrossOver.bind(this);\n this._handleOnClick = this._handleOnClick.bind(this);\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl' && (this.props.shouldSliderAdjustToRTL === undefined || this.props.shouldSliderAdjustToRTL)) {\n orientations.horizontal.direction = 'right';\n }\n }\n\n public componentDidMount(): void {\n this._handleUpdate();\n MsDyn365.isBrowser && window.addEventListener('resize', this._handleUpdate);\n }\n\n public componentDidUpdate(): void {\n if (this.ref.current && this.ref.current.offsetWidth > rangeDefaultChkValue && this.state.limit === rangeDefaultChkValue) {\n this._handleUpdate();\n }\n }\n\n public shouldComponentUpdate(nextProps: ISliderProps, _nextState: ISliderState): boolean {\n let shouldRender = true;\n if (this.isRangeSlider) {\n const thumb1Position = this._getPositionFromValue(nextProps.sliderThumbs[0].value);\n const thumb2Position = this._getPositionFromValue(nextProps.sliderThumbs[1].value);\n\n /**\n * During first render the second thumb isn't positioned since handleUpdate positions it after it's mounted\n * in the componentDidMount method. This check is to make sure that the first render happens correctly and then\n * for all subsequent renders and updates, the thumb2 position cannot be 0 thanks to this condition.\n */\n shouldRender = thumb2Position > 0 ? thumb2Position >= thumb1Position + nextProps.step : true;\n }\n return shouldRender;\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this._handleUpdate);\n }\n\n public render(): JSX.Element {\n const { orientation } = this.props;\n const sliderClass = this.props.className ? `${Slider.sliderBaseClass} slider-${orientation} ${this.props.className}` : `${Slider.sliderBaseClass} slider-${orientation}`;\n\n const sliderId = this.props.id;\n const dimension = orientations[orientation].dimension;\n const direction = orientations[orientation].direction;\n const camelCasedDirection = toUpperCaseFirstChar(direction);\n const positionThumb1 = this._getPositionFromValue(this.props.sliderThumbs[0].value);\n const coordsThumb1 = this._coordinates(positionThumb1);\n let fillStyle = { [dimension]: `${coordsThumb1.fill}px` };\n const handleStyle: React.CSSProperties[] = [];\n handleStyle.push({ [direction]: `${coordsThumb1.handle}px` });\n const trackProgressClass = classnames('progress-bar', this.props.trackProgressClass ? this.props.trackProgressClass : '');\n const sliderKey = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n\n if (this.isRangeSlider) {\n const positionThumb2 = this._getPositionFromValue(this.props.sliderThumbs[1].value);\n const coordsThumb2 = this._coordinates(positionThumb2);\n handleStyle.push({ [direction]: `${coordsThumb2.handle}px` });\n if (orientation === 'vertical') {\n fillStyle = {\n 'marginBottom': `${coordsThumb1.fill}px`,\n [dimension]: `${coordsThumb2.fill - coordsThumb1.fill}px`\n };\n } else {\n fillStyle = {\n [`margin${camelCasedDirection}`]: `${orientations.horizontal.direction === 'right' ? coordsThumb1.fill - this.state.grab : coordsThumb1.fill}px`,\n [dimension]: `${coordsThumb2.handle - coordsThumb1.handle}px`\n };\n }\n }\n\n return (\n
\n
\n {this.props.showProgressBar && (\n \n )}\n
\n {this._renderSliderThumbs(handleStyle)}\n
\n {this.props.showLabels ? this._renderLabels(this.props.labels!) : null}\n
\n );\n }\n\n private readonly _renderLabels = (labels: ISliderLabel[]): JSX.Element => {\n return (\n
\n {labels.map((label: ISliderLabel) => {\n return (\n
\n {label.labelString}\n
\n );\n })}\n
\n );\n };\n\n private readonly _renderSliderThumbs = (thumbStyles: React.CSSProperties[]): React.ReactFragment | JSX.Element | null => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Added gridsetting values.\n const context = {\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as IRequestContext;\n\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n const isMobileView = isMobileCheck === 'xs' || isMobileCheck === 'sm';\n\n const sliderAriaLabelMin = format('{0} {1}', this.props.sliderThumbs[0].ariaLabel, this.state.sliderThumbs[0].value);\n\n const sliderAriaLabelMax = this.isRangeSlider ? format('{0} {1}', this.props.sliderThumbs[1].ariaLabel, this.state.sliderThumbs[1].value) : '';\n return (\n <>\n \n \n {' '}\n {this.isRangeSlider && (\n <>\n \n \n \n )}\n \n );\n };\n\n private readonly _handleUpdate = (): void => {\n const { orientation } = this.props;\n const dimensionStr = toUpperCaseFirstChar(orientations[orientation].dimension);\n\n // To get the offsetWidth and offsetHeight of the slider element\n const sliderPos = this.ref.current![`offset${dimensionStr}`];\n const handlePos = this.thumb1Ref.current!.sliderButtonRef.current![`offset${dimensionStr}`];\n\n this.setState({\n limit: sliderPos - handlePos,\n grab: orientations.horizontal.direction === 'right' ? -handlePos / 2 : handlePos / 2\n });\n };\n\n private readonly _handleStart = (e: React.TouchEvent | React.KeyboardEvent | React.MouseEvent): void => {\n e.stopPropagation();\n const eventType = e.type;\n document.addEventListener('mousemove', (this._handleDrag as unknown) as EventListener);\n document.addEventListener('mouseup', (this._handleEnd as unknown) as EventListener);\n const castTarget = e.target as HTMLElement;\n const thumbid = castTarget && castTarget.id;\n this.setState(\n (_prevState: ISliderState) => {\n return { active: true, id: thumbid };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Start, eventType);\n }\n );\n };\n\n private _handleEnd(e: React.KeyboardEvent | React.MouseEvent | React.TouchEvent): void {\n e.stopPropagation();\n const eventType = e.type;\n const castTarget = e.target as HTMLElement;\n this.setState(\n (_prevState: ISliderState) => {\n return { active: false, id: '' };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.End, eventType);\n }\n );\n document.removeEventListener('mousemove', (this._handleDrag as unknown) as EventListener);\n document.removeEventListener('mouseup', (this._handleEnd as unknown) as EventListener);\n }\n\n private _handleDrag(e: React.MouseEvent | React.TouchEvent): void {\n e.stopPropagation();\n const value = this._position(e);\n const eventType = e.type;\n const castThumb = e.target as HTMLElement;\n const thumbId = this.state.id || (castThumb && castThumb.id);\n const thumbPressed = this._getThumbFromProps(thumbId);\n\n if (thumbPressed && !this._willThumbsCrossOver(thumbPressed[0], e)) {\n thumbPressed[0].value = value;\n this._setSliderValue(thumbPressed, castThumb, eventType);\n }\n }\n\n private _handleOnClick(e: React.MouseEvent | React.TouchEvent): void {\n e.stopPropagation();\n const position = this._position(e);\n const castThumb = e.target as HTMLElement;\n const eventType = e.type;\n const thumb1 = this._getThumbFromProps(this.props.sliderThumbs[0].id);\n\n if (this.isRangeSlider) {\n const thumb2 = this._getThumbFromProps(this.props.sliderThumbs[1].id);\n\n if (thumb1 && thumb2) {\n const currentMinValue = thumb1[0].value;\n const currentMaxValue = thumb2[0].value;\n const lengthToMinValue = position - currentMinValue;\n const lengthToMaxValue = currentMaxValue - position;\n\n if (lengthToMinValue < lengthToMaxValue) {\n thumb1[0].value = position;\n } else {\n thumb2[0].value = position;\n }\n\n this.setState(\n (_prevState: ISliderState) => {\n return ({ sliderThumbs: [thumb1[0], thumb2[0]] });\n },\n () => {\n this._getThumbAndPublishEvent(castThumb, EventType.Change, eventType);\n }\n );\n }\n\n } else if (thumb1) {\n thumb1[0].value = position;\n this.setState(\n (_prevState: ISliderState) => {\n return ({ sliderThumbs: thumb1 });\n },\n () => {\n this._getThumbAndPublishEvent(castThumb, EventType.Change, eventType);\n }\n );\n }\n }\n\n private readonly _position = (e: React.KeyboardEvent | React.MouseEvent | React.TouchEvent): number => {\n const { grab } = this.state;\n const { orientation } = this.props;\n const castEvent = (e as unknown) as TouchEvent;\n const node = this.ref;\n const coordinateStyle = toUpperCaseFirstChar(orientations[orientation].coordinate);\n const directionStyle = orientations[orientation].direction;\n\n // String conversion to the right property value\n const clientCoordinateStyle = `client${coordinateStyle}`;\n const coordinate = !castEvent.touches ? e[clientCoordinateStyle] : castEvent.touches[0][clientCoordinateStyle];\n const direction = node.current!.getBoundingClientRect()[directionStyle];\n const pos = orientations.horizontal.direction === 'right' ? direction - coordinate - grab : coordinate - direction - grab;\n return this._getValueFromPosition(pos);\n };\n\n private readonly _getPositionFromValue = (value: number): number => {\n const { limit } = this.state;\n const { min, max } = this.props;\n const diffMaxMin = max - min;\n const diffValMin = value - min;\n const percentage = diffValMin / diffMaxMin;\n return Math.round(percentage * limit);\n };\n\n /**\n * Translate position of slider to slider value.\n * @param {number} pos - Current position/coordinates of slider.\n * @returns {number} Value - Slider value.\n */\n private readonly _getValueFromPosition = (pos: number): number => {\n const { limit } = this.state;\n const { orientation, min, max, step } = this.props;\n\n const percentage = clamp(pos, 0, limit) / (limit || 1);\n const baseVal = step * Math.round((percentage * (max - min)) / step);\n const value = orientation === 'horizontal' ? baseVal + min : max - baseVal;\n\n return clamp(value, min, max);\n };\n\n /**\n * Grab coordinates of slider.\n * @param {Object} pos - Position object.\n * @returns {Object} - Slider fill/handle coordinates.\n */\n private readonly _coordinates = (pos: number): IFillCoordinates => {\n const { limit, grab } = this.state;\n const { orientation } = this.props;\n const value = this._getValueFromPosition(pos);\n const position = this._getPositionFromValue(value);\n const handlePos = orientation === 'horizontal' ? position + grab : position;\n const fillPos = orientation === 'horizontal' ? handlePos : limit - handlePos;\n\n return {\n fill: fillPos,\n handle: handlePos,\n label: handlePos\n };\n };\n\n private _handleOnChange(e: React.ChangeEvent): void {\n e.stopPropagation();\n const castTarget = e.target as HTMLInputElement;\n const thumbInteractedWith = castTarget && this._getThumbFromProps(castTarget.id.replace('range', ''));\n const eventType = e.type;\n thumbInteractedWith![0].value = Number.parseInt(e.target.value, 10);\n this._setSliderValue(thumbInteractedWith!, castTarget, eventType);\n }\n\n private readonly _setSliderValue = (sliderThumb: ISliderThumbProps[], castTarget: HTMLElement, eventType: string): void => {\n if (this.isRangeSlider) {\n if (this.props.sliderThumbs[0].value > this.props.sliderThumbs[1].value) {\n this.props.sliderThumbs[0].value = this.props.sliderThumbs[1].value;\n }\n this.setState((_prevState: ISliderState) => {\n return {\n sliderThumbs: { ...this.props.sliderThumbs }\n };\n }, () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Change, eventType);\n });\n } else {\n this.setState((_prevState: ISliderState) => {\n return {\n sliderThumbs: sliderThumb\n };\n }, () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Change, eventType);\n });\n }\n };\n\n private _getThumbFromProps(thumbId: string): ISliderThumbProps[] | null {\n let thumbFound;\n\n thumbFound = this.props.sliderThumbs.filter((thumb: ISliderThumbProps) => {\n return thumb.id === thumbId;\n });\n\n return thumbFound.length > 0 ? thumbFound : null;\n }\n\n private readonly _publishNotification = (\n thumb: ISliderThumbProps | null,\n delegate: (sliderNotification: Readonly) => void,\n eventType: string\n ): void => {\n delegate({\n id: (thumb && thumb.id) || '',\n slider: this,\n firstThumbValue: this.state.sliderThumbs[0].value,\n secondThumbValue: (this.state.sliderThumbs[1] && this.state.sliderThumbs[1].value) || Number.NaN,\n eventType\n });\n };\n\n private readonly _getThumbAndPublishEvent = (element: HTMLElement, eventType: EventType, nativeEventType: string): void => {\n let elmenentId = '';\n if (element && element.id && eventType === EventType.Change) {\n elmenentId = element.id.replace('range', '');\n }\n const thumb = element && this._getThumbFromProps(elmenentId);\n\n if (eventType === EventType.End) {\n if (this.props.onChangeEnd) {\n this._publishNotification(thumb && thumb[0], this.props.onChangeEnd, nativeEventType);\n }\n }\n if (eventType === EventType.Start) {\n if (this.props.onChangeStart) {\n this._publishNotification(thumb && thumb[0], this.props.onChangeStart, nativeEventType);\n }\n }\n if (eventType === EventType.Change) {\n if (this.props.onChange) {\n this._publishNotification(thumb && thumb[0], this.props.onChange, nativeEventType);\n }\n }\n };\n\n private _willThumbsCrossOver(\n thumbPressed: ISliderThumbProps,\n event: React.KeyboardEvent | React.MouseEvent | React.TouchEvent\n ): boolean {\n if (!this.isRangeSlider) {\n return false;\n }\n let keycode = 0;\n let checkCondition = false;\n\n if (event.type === 'keydown') {\n const castEvent = (event as unknown) as KeyboardEvent;\n keycode = castEvent.keyCode;\n if (\n (thumbPressed === this.props.sliderThumbs[1] && (keycode === 38 || keycode === 39)) ||\n (thumbPressed === this.props.sliderThumbs[0] && (keycode === 37 || keycode === 40))\n ) {\n return false;\n }\n checkCondition = true;\n\n }\n if (event.type === 'touchmove' || event.type === 'mousemove' || event.type === 'click') {\n const value = this._position(event);\n if (\n (this.state.sliderThumbs[1].value < value && thumbPressed.id === this.props.sliderThumbs[1].id) ||\n (this.state.sliderThumbs[0].value > value && thumbPressed.id === this.props.sliderThumbs[0].id)\n ) {\n return false;\n }\n checkCondition = true;\n\n }\n\n return !(checkCondition && this.props.sliderThumbs[1].value - this.props.step * 2 >= this.props.sliderThumbs[0].value);\n\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { Button, format, KeyCodes, Node, UncontrolledPagination } from '..';\nimport CheckBoxButton from './checkbox';\n\n/**\n * Table Resources.\n */\nexport interface ITableResources {\n\n}\n\n/**\n * Table props.\n */\nexport interface IDataTableProps {\n resources: ITableResources;\n headings: (IHeadingsProperty | undefined)[];\n rows: ITableRowProps[];\n className?: string;\n editLinkText?: string;\n actionLinkText?: string;\n deleteLinkText?: string;\n viewLinkText?: string;\n editLinkTooltip?: string;\n actionLinkTooltip?: string;\n deleteLinkTooltip?: string;\n viewLinkTooltip?: string;\n enableToModify: boolean;\n showCheckBoxes?: boolean;\n isSortable?: boolean;\n showPagination?: boolean;\n paginationProperty: IPaginationProperty;\n minifyActions?: boolean;\n minifiedButtonText?: string;\n excludedColumns?: string[]; // Filled with ITableItemProps.id of columns not to show\n isSingleSelectOnly: boolean;\n businessUserSelectCheckBoxAriaLabelText?: string;\n sortByAscending?: string;\n sortByDescending?: string;\n resourcePrefix?: string;\n actions: {\n onDelete?(userData: ITableItemProps[], referenceBack?: HTMLButtonElement | null): void | undefined;\n onEdit?(userData: ITableItemProps[], referenceBack?: HTMLButtonElement | null): void | undefined;\n onView?(userData: ITableItemProps[]): void | undefined;\n };\n checkBoxCallback?(records: ITableRowProps[]): void;\n formatPrice?(price: number): string;\n}\n\n/**\n * Table IPaginationProperty props.\n */\nexport interface IPaginationProperty {\n itemPerPage: number;\n skipCount: number;\n prevText: string;\n nextText: string;\n paginationText: string;\n url: string;\n}\n\n/**\n * Table ITableItemProps props.\n */\nexport interface ITableItemProps {\n id: string;\n type: TableDataType;\n value: boolean | number | string;\n className?: string;\n}\n\n/**\n * Table IButtonReferences props.\n */\nexport interface IButtonReferences {\n edit?: React.RefObject;\n delete?: React.RefObject;\n}\n\n/**\n * Table ITableRowProps props.\n */\nexport interface ITableRowProps {\n row: ITableItemProps[];\n isSelected: boolean;\n buttonReferences?: IButtonReferences;\n}\n\n/**\n * Table IDataTableCells props.\n */\ninterface IDataTableCells {\n header: boolean;\n className: string;\n content: string | number | React.ReactNode;\n cellIndex: number;\n scope: 'col' | 'row';\n colSpan?: number;\n records?: ITableRowProps;\n}\n\n/**\n * Table IHeadingsProperty props.\n */\nexport interface IHeadingsProperty {\n name: string;\n sortable: boolean;\n ariaLabel?: string;\n}\n\n/**\n * Table ITableState props.\n */\nexport interface ITableState {\n sortingKey: string;\n ascendingOrder: boolean;\n showActions: boolean;\n selectedIndex: string;\n}\n\n/**\n * Table TableDataType props.\n */\nexport enum TableDataType {\n Number = 'Number',\n Text = 'Text',\n Price = 'Price'\n}\n\nexport default class Table extends React.PureComponent {\n public componentClassName: string = 'ms-table';\n\n private readonly headingPrefix: string = 'table';\n\n private readonly capitalizeHeadingPrefix: string = 'Table';\n\n constructor(props: IDataTableProps) {\n super(props);\n this.state = {\n ascendingOrder: true,\n sortingKey: props.headings[0] && props.headings[0].name || '',\n showActions: props.minifyActions !== undefined ? !props.minifyActions : true,\n selectedIndex: ''\n };\n }\n\n public render(): JSX.Element {\n const { className, headings, rows, isSortable, showPagination, paginationProperty } = this.props;\n const { sortingKey, ascendingOrder } = this.state;\n\n const classname = classnames(this.componentClassName, className);\n let tableRows = isSortable && sortingKey ? this._sortTableRow(rows, sortingKey, ascendingOrder) : rows;\n let paginationLinks = null;\n\n if (showPagination) {\n const { skipCount, itemPerPage, nextText, prevText, paginationText, url } = paginationProperty;\n\n paginationLinks = (\n \n );\n\n tableRows = this._getCurrentPageData(tableRows, skipCount, skipCount + itemPerPage);\n }\n\n const tableBody = this._renderRow(tableRows);\n const tableHead = this._renderHeadingRow(headings);\n\n return (\n
\n \n \n {tableHead}\n \n \n {tableBody}\n \n
\n {paginationLinks}\n
\n );\n }\n\n /**\n * Set sorting key.\n * @param event -The mouse event.\n */\n private readonly _selectSortingKey = (event: React.MouseEvent | React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const columnName = target.getAttribute('data-sort-name') ? target.getAttribute('data-sort-name') as string : '';\n const { sortingKey, ascendingOrder } = this.state;\n let newOrder = true;\n\n if (sortingKey === columnName) {\n newOrder = !ascendingOrder;\n }\n\n this.setState({\n sortingKey: columnName,\n ascendingOrder: newOrder,\n showActions: false\n });\n };\n\n /**\n * Checkbox change.\n * @param rows -Table rows.\n * @param checkBoxCallback -Checkboxcallback function.\n * @param index -Index value for row.\n * @returns Checkbox rows.\n */\n private readonly _onCheckBoxChangeHandler = (rows: ITableRowProps[], checkBoxCallback: (records: ITableRowProps[]) => void, index?: number) => () => {\n if (ObjectExtensions.isNumber(index)) {\n rows[index].isSelected = !rows[index].isSelected;\n }\n checkBoxCallback(rows);\n };\n\n private readonly _renderHeadingRow = (columnData: (IHeadingsProperty | undefined)[]) => {\n const {\n resources, showCheckBoxes, enableToModify, minifyActions, rows,\n actionLinkText, isSortable, checkBoxCallback, resourcePrefix,\n isSingleSelectOnly, businessUserSelectCheckBoxAriaLabelText, sortByAscending, sortByDescending\n } = this.props;\n const { sortingKey, ascendingOrder } = this.state;\n\n const sortingClassName = ascendingOrder ? 'asc' : 'dsc';\n\n const sortingValue = ascendingOrder ? sortByAscending : sortByDescending;\n\n const columns = columnData.map((data, cellIndex) => {\n if (!data) {\n return;\n }\n const counterAddition = 1;\n const updatedCellIndex = cellIndex + counterAddition;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- unsafe assignment.\n const heading = resources[`${this.headingPrefix}${data.name}HeadingText`] ||\n resources[`${resourcePrefix!}${this.capitalizeHeadingPrefix}${data.name}HeadingText`] ||\n resources[`${data.name}HeadingText`] || data.name;\n\n const columnSortValue = (sortingKey === data.name && sortingValue !== undefined) ? sortingValue : '';\n\n const columnAriaLabel = data.ariaLabel ? `${format(data.ariaLabel, heading)} ${columnSortValue}` : '';\n\n const content = isSortable && data.sortable && (\n \n \n {heading}\n
\n \n ) || \n {heading}\n ;\n\n return (\n content\n );\n });\n\n const radioCheckBox = showCheckBoxes && checkBoxCallback && !isSingleSelectOnly && (\n \n );\n\n const actionContent = (\n \n {minifyActions ? '' : actionLinkText}\n \n );\n\n return (\n \n { showCheckBoxes && this.tableCell({\n header: true,\n className: `${this.componentClassName}__heading-row-data__checkbox checkbox`, content: radioCheckBox,\n cellIndex: -1,\n scope: 'col' }) }\n { columns }\n { enableToModify && this.tableCell({\n header: true,\n className: `${this.componentClassName}__heading-row-data action-links`,\n content: actionContent,\n cellIndex: 1,\n scope: 'col'\n }) }\n \n );\n };\n\n private readonly _renderRow = (rows: ITableRowProps[]) => {\n const {\n enableToModify, showCheckBoxes, excludedColumns, actions,\n checkBoxCallback, formatPrice, isSingleSelectOnly,\n businessUserSelectCheckBoxAriaLabelText\n } = this.props;\n\n const tableRows = rows.map((rowsData, index) => {\n let className = index % 2 ? `${this.componentClassName}__row even-row` : `${this.componentClassName}__row odd-row`;\n let showActions = false;\n\n const additionalNameAriaLabel = rowsData.row[0].value.toString();\n const columnData = rowsData.row.map(cell => {\n if (excludedColumns && excludedColumns.includes(cell.id)) {\n return;\n }\n\n // Numbers/price data types will always be right-aligned per design standards\n const extraClass = cell.type === TableDataType.Number || cell.type === TableDataType.Price ? 'num-type' : '';\n const cellContent = cell.type === TableDataType.Price && formatPrice ? formatPrice(cell.value as number) : cell.value;\n const columnSpecificClass = cell.className || '';\n return this.tableCell({ header: false, className: classnames(`${this.componentClassName}__row-data`, extraClass, columnSpecificClass), content: cellContent, cellIndex: index, scope: 'row' });\n });\n\n const radioCheckBox = showCheckBoxes && checkBoxCallback && (\n \n );\n const rowKey = `row-${index}`;\n\n if (rowKey === this.state.selectedIndex && this.state.showActions) {\n className += ' selected';\n showActions = true;\n }\n\n const actionButtons = actions && this._renderActions(rowsData.row, showActions, rowKey, rowsData.buttonReferences);\n\n return (\n \n { showCheckBoxes && this.tableCell({ header: false, className: `${this.componentClassName}__row-data`, content: radioCheckBox, cellIndex: index, scope: 'row', records: rowsData }) }\n { columnData }\n { enableToModify && this.tableCell({ header: false, className: `${this.componentClassName}__row-data`, content: actionButtons, cellIndex: index, scope: 'row', records: rowsData }) }\n \n );\n });\n\n return tableRows;\n };\n\n private readonly _renderActions = (data: ITableItemProps[], showActions: boolean, key: string, buttonReference?: IButtonReferences): React.ReactNode => {\n const { editLinkText, deleteLinkText, viewLinkText, editLinkTooltip, deleteLinkTooltip, viewLinkTooltip, actionLinkTooltip,\n minifyActions, minifiedButtonText, actionLinkText, actions: { onEdit, onDelete, onView } } = this.props;\n const handleClickEdit = onEdit !== undefined ? () => {\n onEdit(data, buttonReference?.edit?.current);\n } : undefined;\n const handleClickDelete = onDelete !== undefined ? () => {\n onDelete(data, buttonReference?.delete?.current);\n } : undefined;\n const handleClickView = onView !== undefined ? () => {\n onView(data);\n } : undefined;\n\n const actionButtons = (\n \n { handleClickView && \n {viewLinkText}\n }\n { handleClickEdit && \n {editLinkText}\n }\n { handleClickDelete && \n {deleteLinkText}\n }\n \n );\n\n if (minifyActions) {\n return (\n \n \n {minifiedButtonText ? minifiedButtonText : ''}\n \n { showActions && actionButtons }\n \n );\n }\n return actionButtons;\n\n };\n\n private readonly _toggleActions = (event: React.MouseEvent) => {\n const target = event && event.target as HTMLElement;\n const newKey = target && target.getAttribute('data-type') ? target.getAttribute('data-type') as string : '';\n this.setState({\n showActions: !this.state.showActions,\n selectedIndex: newKey\n });\n };\n\n private readonly _sortTableRow = (table: ITableRowProps[], sortingkey: string, ascendingOrder: boolean): ITableRowProps[] => {\n return table.sort((userOne: ITableRowProps, userTwo: ITableRowProps) => {\n const userOneData = userOne.row.find(cell => {\n return cell.id === sortingkey;\n });\n const userTwoData = userTwo.row.find(cell => {\n return cell.id === sortingkey;\n });\n\n if (!userOneData || !userTwoData) {\n return -1;\n }\n\n if (typeof userOneData.value === 'number' && typeof userTwoData.value === 'number') {\n return ascendingOrder ? (userOneData.value - userTwoData.value) : (userTwoData.value - userOneData.value);\n }\n\n const cleanFirst = userOneData.value as string && userOneData.value.toString().toLowerCase().trim();\n const cleanSecond = userOneData.value as string && userTwoData.value.toString().toLowerCase().trim();\n\n if (!cleanFirst || !cleanSecond) {\n return -1;\n }\n if (ascendingOrder) {\n return cleanFirst < cleanSecond ? -1 : 1;\n }\n return cleanFirst > cleanSecond ? -1 : 1;\n\n });\n };\n\n private readonly _getCurrentPageData = (tableRows: ITableRowProps[], start: number, end: number): ITableRowProps[] => {\n if (start >= end) {\n return tableRows;\n }\n\n const result = [];\n for (let i = start; i < end; i++) {\n tableRows[i] && result.push(tableRows[i]);\n }\n\n return result;\n };\n\n private readonly tableCell = (props: IDataTableCells) => {\n const { className, header, cellIndex, scope, colSpan, content } = props;\n const hiddenTabIndex = -1;\n const initialTabIndex = 0;\n return header ? (\n initialTabIndex ? initialTabIndex : hiddenTabIndex}\n >\n {content}\n \n ) : (\n \n {content}\n \n );\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n \n {paginationNextText}\n \n
\n );\n };\n\n /**\n * Calls method display result.\n * @param event - Keyboard event.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this._selectSortingKey(event);\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IRadioButtonProps {\n isChecked?: boolean;\n value?: string;\n ariaSetSize?: number;\n ariaPosInSet?: number;\n ariaLabel?: string;\n name: string;\n className?: string;\n isSingleSelectOnly?: boolean;\n onChange(reacords: object): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaLabel\n * @param root0.name\n * @param root0.className\n * @param root0.onChange\n * @param root0.isSingleSelectOnly\n * @extends {React.FC}\n */\nconst CheckBoxButton: React.FC = ({\n isChecked,\n value,\n ariaLabel,\n name,\n className,\n onChange,\n isSingleSelectOnly\n}) => {\n\n const cssClass = classnames('ms-input-radio', className ? className : '');\n return (\n \n );\n};\n\nexport default CheckBoxButton;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { getTargetElement, mapToCssModules } from '../common/utilities';\nimport PopperContent from '../popper-content/PopperContent';\nimport { ITooltipProps } from './Tooltip.props';\n\nconst DEFAULT_DELAYS = {\n show: 0,\n hide: 250\n};\n\n/**\n * Tooltip component.\n */\nexport default class Tooltip extends React.PureComponent {\n public static defaultProps: Partial = {\n isOpen: false,\n shouldShowMiniCart: false,\n shouldShowCloseButton: false,\n hideArrow: false,\n placement: 'top',\n placementPrefix: 'msc-bs-tooltip',\n delay: DEFAULT_DELAYS,\n toggle: () => {\n return;\n }\n };\n\n public ref: React.RefObject;\n\n public hideTimeout?: number;\n\n public showTimeout?: number;\n\n public target: HTMLElement | null;\n\n public isMobile: boolean;\n\n public tabPressed: boolean;\n\n constructor(props: ITooltipProps) {\n super(props);\n\n this.ref = React.createRef();\n this.addTargetEvents = this.addTargetEvents.bind(this);\n this.handleDocumentClick = this.handleDocumentClick.bind(this);\n this.removeTargetEvents = this.removeTargetEvents.bind(this);\n this.toggle = this.toggle.bind(this);\n this.onMouseOverTooltip = this.onMouseOverTooltip.bind(this);\n this.onMouseLeaveTooltip = this.onMouseLeaveTooltip.bind(this);\n this.onMouseOverTooltipContent = this.onMouseOverTooltipContent.bind(this);\n this.onMouseLeaveTooltipContent = this.onMouseLeaveTooltipContent.bind(this);\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this.onFocusOutTarget = this.onFocusOutTarget.bind(this);\n this.onEscKeyDown = this.onEscKeyDown.bind(this);\n this.onEscKeyDownNative = this.onEscKeyDownNative.bind(this);\n this.target = null;\n this.isMobile = false;\n this.tabPressed = false;\n }\n\n public componentDidMount(): void {\n this.target = getTargetElement(this.props.target);\n this.addTargetEvents();\n\n // Remove the attr from parent obj when tooltip is hidden\n\n const body = document.getElementsByTagName('body').item(0);\n if (body) {\n const bodyClasses = body.getAttribute('class');\n if (bodyClasses && bodyClasses.includes('mobile')) {\n this.isMobile = true;\n }\n }\n\n if (this.target !== null && this.target.attributes.getNamedItem('aria-describedby') !== null) {\n this.target.attributes.removeNamedItem('aria-describedby');\n }\n }\n\n public componentWillUnmount(): void {\n this.clearHideTimeout();\n this.clearShowTimeout();\n this.removeTargetEvents();\n }\n\n public onMouseOverTooltip(e: MouseEvent): void {\n if (this.hideTimeout) {\n this.clearHideTimeout();\n }\n this.showTimeout = window.setTimeout(this.show.bind(this, e), this.getDelay('show'));\n }\n\n public onMouseLeaveTooltip(e: MouseEvent): void {\n if (this.showTimeout) {\n this.clearShowTimeout();\n }\n this.hideTimeout = window.setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n\n public onMouseOverTooltipContent(): void {\n if (this.hideTimeout) {\n this.clearHideTimeout();\n }\n }\n\n public onMouseLeaveTooltipContent(e: React.MouseEvent): void {\n if (this.showTimeout) {\n this.clearShowTimeout();\n }\n this.hideTimeout = window.setTimeout(this.hide.bind(this, e.nativeEvent), this.getDelay('hide'));\n }\n\n public onFocusOutTarget(e: Event): void {\n if (!this.props.isOpen) {\n return;\n }\n\n if (this.tabPressed) {\n this.tabPressed = false;\n setTimeout(() => {\n const nextFocus = document.activeElement;\n\n if (!this.ref || !this.ref.current || !this.ref.current.contains(nextFocus)) {\n this.hide(e);\n }\n }, 1);\n } else {\n this.hide(e);\n }\n }\n\n public onEscKeyDown(e: React.KeyboardEvent): void {\n if (e.keyCode === 9) {\n this.tabPressed = true;\n } else if (e.key === 'Escape') {\n this.hide(e.nativeEvent);\n }\n }\n\n public onEscKeyDownNative(e: KeyboardEvent): void {\n if (e.keyCode === 9) {\n this.tabPressed = true;\n } else if (e.key === 'Escape') {\n this.hide(e);\n }\n }\n\n public getDelay(key: 'show' | 'hide'): number {\n const { delay } = this.props;\n if (typeof delay === 'object') {\n return (isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key]);\n }\n\n return delay || 0;\n }\n\n public show(e: Event): void {\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this.toggle(e);\n\n // Create a new attr for parent obj when tooltip shown\n if (this.target !== null) {\n const ariaAttr = document.createAttribute('aria-describedby');\n ariaAttr.value = this.props.id as string;\n this.target.attributes.setNamedItem(ariaAttr);\n }\n }\n }\n\n public hide(e: Event): void {\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this.toggle(e);\n\n // Remove the attr from parent obj when tooltip is hidden\n if (this.target !== null && this.target.attributes.getNamedItem('aria-describedby') !== null) {\n this.target.attributes.removeNamedItem('aria-describedby');\n }\n }\n }\n\n public clearShowTimeout(): void {\n clearTimeout(this.showTimeout);\n this.showTimeout = undefined;\n }\n\n public clearHideTimeout(): void {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n }\n\n public handleDocumentClick(e: Event): void {\n if (!this.target) {\n return;\n }\n\n const target = e.target as HTMLElement;\n if (e.target === this.target || this.target.contains(target)) {\n if (this.hideTimeout) {\n this.clearHideTimeout();\n }\n\n if (!this.props.isOpen) {\n this.toggle(e);\n }\n } else if (this.props.isOpen && target.getAttribute('role') !== 'tooltip') {\n if (this.showTimeout) {\n this.clearShowTimeout();\n }\n this.hideTimeout = window.setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }\n\n public addTargetEvents(): void {\n if (!this.target) {\n return;\n }\n\n if (this.props.trigger) {\n const triggers = this.props.trigger.split(' ');\n if (!triggers.includes('manual')) {\n if (triggers.includes('click')) {\n ['click', 'touchstart'].forEach((event: string) => {\n document.addEventListener(event, this.handleDocumentClick, true);\n });\n }\n if (triggers.includes('hover')) {\n this.target.addEventListener('mouseover', this.onMouseOverTooltip, true);\n this.target.addEventListener('mouseout', this.onMouseLeaveTooltip, true);\n }\n if (triggers.includes('focus')) {\n this.target.addEventListener('focusin', this.show, true);\n if (this.props.displayMode === 'FLYOUT') {\n this.target.addEventListener('focusout', this.onFocusOutTarget, true);\n } else {\n this.target.addEventListener('focusout', this.hide, true);\n }\n }\n this.target.addEventListener('keydown', this.onEscKeyDownNative, true);\n }\n } else {\n this.target.addEventListener('mouseover', this.onMouseOverTooltip, true);\n this.target.addEventListener('mouseout', this.onMouseLeaveTooltip, true);\n this.target.addEventListener('keydown', this.onEscKeyDownNative, true);\n this.target.addEventListener('focusin', this.show, true);\n if (this.props.displayMode === 'FLYOUT') {\n this.target.addEventListener('focusout', this.onFocusOutTarget, true);\n } else {\n this.target.addEventListener('focusout', this.hide, true);\n }\n\n ['click', 'touchstart'].forEach((event: string) => {\n document.addEventListener(event, this.handleDocumentClick, true);\n });\n }\n }\n\n public removeTargetEvents(): void {\n if (!this.target) {\n return;\n }\n\n this.target.removeEventListener('mouseover', this.onMouseOverTooltip, true);\n this.target.removeEventListener('mouseout', this.onMouseLeaveTooltip, true);\n this.target.removeEventListener('keydown', this.onEscKeyDownNative, true);\n this.target.removeEventListener('focusin', this.show, true);\n this.target.removeEventListener('focusout', this.onFocusOutTarget, true);\n this.target.removeEventListener('focusout', this.hide, true);\n\n ['click', 'touchstart'].forEach((event: string) => {\n document.removeEventListener(event, this.handleDocumentClick, true);\n });\n }\n\n public toggle(e?: Event): void {\n if (e && this.props.disabled) {\n e.preventDefault();\n }\n\n if (this.props.toggle) {\n this.props.toggle();\n }\n }\n\n public render(): JSX.Element | null {\n if (!this.props.isOpen || this.isMobile) {\n return null;\n }\n\n const {\n cssModule,\n isOpen,\n target,\n placementPrefix,\n hideArrow,\n className,\n innerClassName,\n innerRef,\n modifiers,\n toggle,\n delay,\n placement,\n disabled,\n trigger,\n boundariesElement,\n offset,\n arrowClassName,\n displayMode,\n id,\n ...attributes\n } = this.props;\n\n const classes = mapToCssModules(classNames(\n displayMode === 'FLYOUT' ? 'msc-flyout-inner' : 'msc-tooltip-inner',\n this.props.innerClassName\n ), this.props.cssModule);\n\n const popperClasses = mapToCssModules(classNames(\n displayMode === 'FLYOUT' ? 'msc-flyout' : 'msc-tooltip',\n 'show',\n this.props.className\n ), this.props.cssModule);\n\n return (\n
\n \n {this.props.toggle && this.props.shouldShowCloseButton ? : ''}\n \n \n
\n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport Tooltip from './Tooltip';\nimport { IUncontrolledTooltipProps } from './Tooltip.props';\n\nexport interface IUncontrolledTooltipState {\n isOpen: boolean;\n}\n\n/**\n * UncontrolledTooltip examples.\n */\nexport default class UncontrolledTooltip extends React.PureComponent {\n private _isAutoDisplayTriggered: boolean;\n\n constructor(props: IUncontrolledTooltipProps) {\n super(props);\n this.state = { isOpen: false };\n this._toggle = this._toggle.bind(this);\n this._isAutoDisplayTriggered = false;\n }\n\n public render(): JSX.Element {\n const isCartPage = !StringExtensions.isNullOrWhitespace(this.props.cartPageUrl) &&\n window.location.toString().includes(this.props.cartPageUrl!);\n\n if (this.props.shouldShowMiniCart && !isCartPage) {\n if (!this._isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isOpen: true });\n this._isAutoDisplayTriggered = true;\n } else if (!this.state.isOpen) {\n // If tooptip is closed, reset the flag.\n this._isAutoDisplayTriggered = false;\n }\n }\n\n return ;\n }\n\n private _toggle(): void {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nimport { IWaitingProps } from './Waiting.props';\n\n/**\n * Waiting - this component is a visual indication of a pre-loader.\n */\nexport default class Waiting extends React.PureComponent {\n public static defaultProps: Partial = {\n className: 'msc-waiting-circular'\n };\n\n public render(): JSX.Element {\n const { className, ...props } = this.props;\n const watingClassName = `msc-waiting ${className}`;\n\n return (
);\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { INodeProps } from './node';\n\nexport interface IModuleProps extends INodeProps {\n moduleProps: Msdyn365.IModule;\n}\n\nexport const Module: React.FC = ({ className = '', id = '', tag: Tag = 'div', moduleProps, ...restAttribute }) => (\n \n);\n\nexport default Module;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nexport type NodeTag = React.ReactType;\n\nexport interface INodeProps {\n\n /* Wrapper class */\n className: string;\n\n /* Children node */\n children?: React.ReactNode;\n\n /* Wrapper Tag */\n tag?: NodeTag;\n\n /* Other attrributes */\n [x: string]: any;\n}\n\nexport type IComponentNodeProps = INodeProps & T & {\n\n /* Wrapper Tag */\n tag?: React.ReactType;\n};\n\nexport const Node: React.FC = React.forwardRef(({ className = '', tag: Tag = 'div', element: Element, ...restAttribute }, ref) => {\n return ();\n});\n\nexport default Node;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport { Modal, ModalBody, ModalHeader, Node } from '..';\n\nexport interface IModalViewProps {\n classNames?: string;\n galleryCarousel: React.ReactElement;\n modalIsOpen: boolean;\n ontoggle(): void;\n}\n\nexport const ImagefullView: React.FC = (props: IModalViewProps): React.ReactElement => {\n const body = (\n \n { props.galleryCarousel }\n \n );\n\n const modalWindow = (\n \n );\n\n const modalHeader = (\n \n );\n\n return React.cloneElement(modalWindow, {}, modalHeader, body);\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport function removeInlineZoomStyle(): void {\n const zoomedImage: HTMLImageElement | null = document.body.querySelector('.ms-inline-zoom__zoomedImg');\n if (zoomedImage) {\n zoomedImage.style.width = '0';\n zoomedImage.style.height = '0';\n }\n}\n\n/**\n * Represents default data scale value which should be used in case improper value specified in module config.\n */\nexport const defaultDataScale = 2;\n\n/**\n * Clears zooming state and reverts to initial image.\n * @param event - Event of moving the mouse out of the image.\n */\nexport function onMouseOutLensContainer(event: React.MouseEvent): void {\n const zoomLens = event.currentTarget;\n zoomLens.style.visibility = 'hidden';\n zoomLens.classList.remove('ms-containerZoom__zoom-lens__opacity');\n\n const zoomedImageContainer = document.body.querySelector('.ms-containerZoom__result');\n if (zoomedImageContainer) {\n zoomedImageContainer.style.visibility = 'hidden';\n }\n}\n\n/**\n * Represents size dimensions.\n */\ninterface ISize {\n width: number;\n height: number;\n}\n\n/**\n * Represents two-dimensional position.\n */\ninterface ILocation {\n\n /**\n * Left offset.\n */\n x: number; // eslint-disable-line @typescript-eslint/naming-convention -- To align with html standards.\n\n /**\n * Top offset.\n */\n y: number; // eslint-disable-line @typescript-eslint/naming-convention -- To align with html standards.\n}\n\n/**\n * Retrieves the displayed image size preserving image proportions.\n * @param imageElement - The html image element which is displayed.\n * @returns The dimensions of the displayed image ignoring all the offsets and paddings.\n */\nfunction getDisplayedImageSize(imageElement: HTMLImageElement): ISize {\n const imageInitialHeight = imageElement.naturalHeight;\n const imageInitialWidth = imageElement.naturalWidth;\n const imageContainerHeight = imageElement.height;\n const imageContainerWidth = imageElement.width;\n\n const widthScaleRatio = imageContainerWidth / imageInitialWidth;\n const heightScaleRatio = imageContainerHeight / imageInitialHeight;\n\n const scaleRatio = Math.min(widthScaleRatio, heightScaleRatio);\n\n return {\n width: imageInitialWidth * scaleRatio,\n height: imageInitialHeight * scaleRatio\n };\n}\n\n/**\n * Retrieves the center point based on the given dimensions.\n * @param size - Dimensions of an element.\n * @returns The point of the center.\n */\nfunction getCenter(size: ISize): ILocation {\n const centerDivider = 2;\n return {\n x: size.width / centerDivider,\n y: size.height / centerDivider\n };\n}\n\n/**\n * Retrieves the position where the lens must be placed based by the mouse position, lens size, and container size.\n * @param cursorPosition - The location of the mouse.\n * @param lensSize - The size of the lens.\n * @param originalSize - The container in which the lens should be placed.\n * @returns The location where the lens must be placed.\n */\nfunction getLensPosition(cursorPosition: ILocation, lensSize: ISize, originalSize: ISize) {\n const lensCenter = getCenter(lensSize);\n\n const position: ILocation = {\n x: cursorPosition.x - lensCenter.x,\n y: cursorPosition.y - lensCenter.y\n };\n\n // Limit lens to be inside the image element.\n const minPositionX = 0;\n const maxPositionX = originalSize.width - lensSize.width;\n position.x = Math.min(Math.max(position.x, minPositionX), maxPositionX);\n\n const minPositionY = 0;\n const maxPositionY = originalSize.height - lensSize.height;\n position.y = Math.min(Math.max(position.y, minPositionY), maxPositionY);\n\n return position;\n}\n\n/**\n * Retrieves mouse position.\n * @param event - Mouse event.\n * @param element - Element in which the event happened.\n * @returns Mouse position inside the given element.\n */\nfunction getCursorPosition(event: React.MouseEvent, element: HTMLElement): ILocation {\n const containerBoundingRect = element.getBoundingClientRect();\n return {\n x: event.pageX - containerBoundingRect.left - window.pageXOffset,\n y: event.pageY - containerBoundingRect.top - window.pageYOffset\n };\n}\n\n/**\n * Formats number to represent pixels, e.g. 42px.\n * @param numericValue - The numeric value of pixels.\n * @returns String in pixel format.\n */\nfunction formatPixelsValue(numericValue: number): string {\n return `${numericValue}px`;\n}\n\n/**\n * Formats the given url to be a background image style value.\n * @param sourceUrl - The image source.\n * @returns Background image style value.\n */\nfunction formatBackgroundImageUrl(sourceUrl: string): string {\n return `url('${sourceUrl}')`;\n}\n\n/**\n * Get the cursor position on image click.\n * @param zoomedImage - The target image.\n * @param dataScaleText - Zoom factor for image.\n * @param event - Mouse event action.\n */\nfunction handleInlineStyles(zoomedImage: EventTarget & HTMLImageElement, dataScaleText: string, event: React.MouseEvent): void {\n zoomedImage.removeAttribute('style');\n const imageElement = zoomedImage.parentElement!.previousElementSibling!.querySelector('img')!;\n\n const dataScale = Number(dataScaleText);\n\n const imageContainerSize: ISize = {\n width: imageElement.offsetWidth,\n height: imageElement.offsetHeight\n };\n\n const zoomedImageSize: ISize = {\n width: imageContainerSize.width * dataScale,\n height: imageContainerSize.height * dataScale\n };\n\n zoomedImage.style.width = formatPixelsValue(zoomedImageSize.width);\n zoomedImage.style.height = formatPixelsValue(zoomedImageSize.height);\n zoomedImage.style.opacity = '1';\n\n const cursorPosition = getCursorPosition(event, imageElement);\n const imageCenter = getCenter(imageContainerSize);\n const offset: ILocation = {\n x: cursorPosition.x - imageCenter.x,\n y: cursorPosition.y - imageCenter.y\n };\n\n const scaledCursorPosition: ILocation = {\n x: cursorPosition.x * dataScale,\n y: cursorPosition.y * dataScale\n };\n scaledCursorPosition.x -= offset.x;\n scaledCursorPosition.y -= offset.y;\n\n const zoomedImagePosition = getLensPosition(scaledCursorPosition, imageContainerSize, zoomedImageSize);\n\n zoomedImage.style.left = formatPixelsValue(-zoomedImagePosition.x);\n zoomedImage.style.top = formatPixelsValue(-zoomedImagePosition.y);\n}\n\n/**\n * ZoomIn functionality on image click.\n * @param event -The mouse event.\n * @param dataScale -The zoom factor.\n */\nexport function inlineZoomInitClick(event: React.MouseEvent, dataScale?: string): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const zoomImg = event.currentTarget.parentElement?.nextElementSibling?.querySelector('img');\n if (!zoomImg) {\n return;\n }\n\n handleInlineStyles(zoomImg, dataScale ?? '2', event);\n}\n\n/**\n * Updates lens and zoomed image positions on the page.\n * @param event - Mouse movement event.\n * @param imageElement - Original image element.\n * @param lens - The element which shows the part of the image which is zoomed.\n */\nfunction handleMouseMovementInContainerZoom(\n event: React.MouseEvent, imageElement: HTMLImageElement, lens: EventTarget & HTMLDivElement): void {\n\n let zoomedContainer = document.body.querySelector('.ms-containerZoom__result');\n if (!zoomedContainer) {\n zoomedContainer = document.createElement('div');\n zoomedContainer.setAttribute('class', 'ms-containerZoom__result');\n document.body.appendChild(zoomedContainer);\n }\n\n const lensSize: ISize = {\n width: lens.offsetWidth,\n height: lens.offsetHeight\n };\n\n const dataScale = Number(lens.getAttribute('data-scale') ?? defaultDataScale);\n\n const cursorPosition = getCursorPosition(event, imageElement);\n const displayedImageSize = getDisplayedImageSize(imageElement);\n const imageContainerSize: ISize = {\n width: imageElement.offsetWidth,\n height: imageElement.offsetHeight\n };\n\n const lensPosition = getLensPosition(cursorPosition, lensSize, imageContainerSize);\n lens.style.visibility = 'unset';\n lens.style.left = formatPixelsValue(lensPosition.x);\n lens.style.top = formatPixelsValue(lensPosition.y);\n\n const mainImageSource = imageElement.getAttribute('src')!;\n\n zoomedContainer.style.visibility = 'unset';\n zoomedContainer.style.backgroundImage = formatBackgroundImageUrl(mainImageSource);\n zoomedContainer.style.width = formatPixelsValue(lensSize.width * dataScale);\n zoomedContainer.style.height = formatPixelsValue(lensSize.width * dataScale);\n\n const offsetSize: ISize = {\n width: imageContainerSize.width - displayedImageSize.width,\n height: imageContainerSize.height - displayedImageSize.height\n };\n const offsetCenter = getCenter(offsetSize);\n const lensScaledPositionX = (offsetCenter.x - lensPosition.x) * dataScale;\n const lensScaledPositionY = (offsetCenter.y - lensPosition.y) * dataScale;\n\n zoomedContainer.style.backgroundPositionX = formatPixelsValue(lensScaledPositionX);\n zoomedContainer.style.backgroundPositionY = formatPixelsValue(lensScaledPositionY);\n\n zoomedContainer.style.backgroundSize =\n `${formatPixelsValue(displayedImageSize.width * dataScale)} ${formatPixelsValue(displayedImageSize.height * dataScale)}`;\n\n const topPosition = imageElement.getBoundingClientRect().top;\n zoomedContainer.style.top = formatPixelsValue(topPosition);\n}\n\nexport function onMouseOverImageContainer(event: React.MouseEvent): void {\n const lens = event.currentTarget.parentElement!.previousElementSibling! as HTMLDivElement;\n lens.classList.add('ms-containerZoom__zoom-lens__opacity');\n\n const imageElement = event.currentTarget as HTMLImageElement;\n\n handleMouseMovementInContainerZoom(event, imageElement, lens);\n}\n\nexport function onMouseMoveLensContainer(event: React.MouseEvent): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const imageElement = event.currentTarget.nextElementSibling!.querySelector('img')!;\n const lens = event.currentTarget;\n\n handleMouseMovementInContainerZoom(event, imageElement, lens);\n}\n\nexport function onContainerZoomInit(event: React.MouseEvent): void {\n if (!document.body.querySelector('.ms-containerZoom__result')) {\n const containerDiv = document.createElement('div');\n containerDiv.setAttribute('class', 'ms-containerZoom__result');\n document.body.appendChild(containerDiv);\n }\n\n onMouseOverImageContainer(event);\n}\n\nexport function inlineZoomImageOnMouseMove(event: React.MouseEvent): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const parentElement = event.currentTarget.parentElement!.parentElement!;\n const zoomImg = event.currentTarget;\n\n const dataScale = parentElement.getAttribute('data-scale') ?? `${defaultDataScale}`;\n handleInlineStyles(zoomImg, dataScale, event);\n}\n\nexport function inlineZoomImageOnMouseOut(event: React.MouseEvent): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n event.currentTarget.style.height = '0';\n event.currentTarget.style.width = '0';\n}\n\nexport function inlineZoomInit(event: React.MouseEvent, dataScale: string = '2'): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const zoomedImage = event.currentTarget.parentElement?.nextElementSibling?.querySelector('img');\n if (!zoomedImage) {\n return;\n }\n\n handleInlineStyles(zoomedImage, dataScale, event);\n}\n\nexport function inlineZoomImageOnHover(event: React.MouseEvent, scale: string = '2'): void {\n if (event.type === 'touchmove' || event.type === 'touchstart' || event.type === 'touchend') {\n return;\n }\n\n const zoomedImg = event.currentTarget.parentElement!.nextElementSibling!.querySelector('img')!;\n handleInlineStyles(zoomedImg, scale, event);\n}\n\n/**\n * Remove container zoomed image.\n */\nexport function removeContainerZoomStyle(): void {\n\n const zoomLens = document.body.querySelector('.ms-containerZoom__zoom-lens');\n if (zoomLens) {\n zoomLens.style.visibility = 'hidden';\n zoomLens.classList.remove('ms-containerZoom__zoom-lens__opacity');\n }\n\n const zoomedImageContainer = document.body.querySelector('.ms-containerZoom__result');\n if (zoomedImageContainer) {\n zoomedImageContainer.style.visibility = 'hidden';\n }\n}\n"],"names":["Alert","id","className","closeClassName","cssModule","tag","toggle","color","isOpen","children","transition","fade","assertive","includeAlertClass","ariaLabel","this","props","classes","closeClasses","alertTransition","baseClass","timeout","appear","enter","exit","Tag","buttonId","innerContent","type","closeAriaLabel","onClick","target","placement","style","undefined","display","role","in","defaultProps","unmountOnExit","BackToTop","super","_renderHeading","text","editProps","state","attributes","tabIndex","_reevaluatePosition","bind","_scrollToTop","payLoad","telemetryContent","window","addEventListener","removeEventListener","threshold","delayInMs","scrollStepInPx","document","documentElement","scrollTop","body","clearInterval","intervalId","setState","scrollTo","e","preventDefault","setInterval","_scrollStep","pageYOffset","height","Math","min","innerHeight","clientHeight","hide","scrollHeight","tabIndexValue","Button","disabled","active","block","outline","size","innerRef","href","ref","Collapse","_transitionStatusToClassHash","entering","entered","exiting","exited","_tagRef","_updateParentElement","node","parentElement","classList","contains","minHeight","_onEntering","_onExit","_onExited","_onExiting","_reevaluateHeight","nextProps","nextState","navbar","collapseIn","mountOnEnter","onEnter","onEntering","onEntered","onExit","onExiting","onExited","otherProps","transitionProps","status","collapseClass","_getTransitionClass","current","firstElementChild","isAppearing","KeyCodes","format","formatSpecifier","parameters","replace","match","index","length","value","toString","isNullOrWhiteSpace","trim","TelemetryConstant","getTelemetryObject","pageName","moduleName","telemetry","getPayloadObject","eventType","etext","recid","contentCategory","contentAction","pgname","mname","etype","getTelemetryAttributes","contentData","setTelemetryAttribute","onTelemetryClick","linkText","logEvent","clamp","max","toUpperCaseFirstChar","charAt","toUpperCase","substr","getCSS","element","property","getComputedStyle","createThrottledEvent","listener","timer","last","event","now","Date","clearTimeout","setTimeout","addThrottledEvent","name","throttledEventHandler","mapToCssModules","split","map","c","join","canUseDOM","createElement","getTarget","selection","querySelectorAll","Error","console","error","findDOMElements","getTargetElement","targetElement","isRef","isElement","TransitionTimeouts","Fade","Modal","Carousel","focusableElements","ControlledDrawer","openGlyph","closeGlyph","_toggle","isManuallyToggled","collapseProps","isExpanded","drawerGlyphClass","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","drawerCloseGlyph","drawerClass","toggleButtonProps","_generateDrawerButtonInnerMarkup","collapseState","toggleButtonText","drawerButtonTextClass","toggleButtonClassName","glyphPlacement","_generateTitle","_generateGlyphMarkup","isStart","additionalClassName","titleLClassName","title","onTextChange","requestContext","onEdit","location","glyphClass","onToggle","Drawer","buttonText","currentTarget","innerText","baseClassActive","fadeIn","timeoutOrUndefined","addEndListener","baseClassAlways","baseClassActiveAlways","isActive","Flipper","telemetryLabel","glyphProps","displayTooltip","sizeClass","classNames","attribute","trigger","FormBuilderErrorComponent","errorMessage","FormBuilder","_onSubmit","async","formData","keys","formKey","currentValue","values","Number","resourceId","resourceValue","onSubmit","previousState","isSubmitted","_onInputChange","changedValueIndex","parseInt","getAttribute","ObjectExtensions","Promise","reject","newState","currentKey","requiredValueMissing","setValue","isRequired","resolve","Dictionary","heading","confirmationComponent","submitButtonText","requiredValueMissingErrorMessage","every","ArrayExtensions","autoComplete","filter","key","htmlFor","getValue","onChange","required","isAnyRequiredValueMissing","getValues","findIndex","isMissing","headingTag","HTag","IncrementalQuantity","inputRef","_handleUpdateState","isNaN","currentInput","inputElement","HTMLInputElement","setAttribute","_validateMin","_minValue","currentCount","isUpdating","_onIncrement","_onDecrement","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","decrementDisabled","isGiftCard","incrementDisabled","decrementAttributes","incrementAttributes","extraClassDecrement","extraClassIncrement","decrementButtonAriaLabel","pattern","onBlur","inputQuantityAriaLabel","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","isMobile","variant","context","innerWidth","gridSettings","xs","w","sm","md","lg","device","Type","VariantType","LabeledDropdown","_onSelectOption","selectedKey","selectedOption","dropdownOptions","option","selectedIndex","indexOf","labelText","labelClassname","dropdownId","dropdownClassname","labelClassNames","dropdownClassNames","_getSelectedIndex","selected","controlledByParent","i","onSelectOption","selectedOptions","toggleColor","Portal","defaultNode","remove","appendChild","createPortal","mounted","_getFocusableChildren","_handleBackdropClick","_handleBackdropMouseDown","_handleEscape","_handleTab","_onOpened","_onClosed","wasOpen","mouseDownElement","_open","visibility","position","applicationNode","HTMLElement","querySelector","_close","_prevProps","prevState","shouldUpdateFocusToFirstElement","focusableElementArr","focus","wrapClassName","modalClassName","backdropClassName","contentClassName","modalTransition","backdropTransition","backdrop","onOpened","onClosed","external","verticalPosition","horizontalPosition","keyboard","zIndex","returnFocusRef","ariaLabelledbyId","dialogAttributes","modalAttributes","onMouseDown","onKeyUp","onKeyDown","modalTransitions","backdropTransitions","Backdrop","dialogBaseClass","dialogClasses","dialog","openCount","scrollY","scrollbarWidth","clientWidth","top","right","left","removeProperty","modalOpenClassName","modalOpenClassNameRegex","RegExp","focusableChildren","activeElement","stopPropagation","container","which","totalFocusable","currentFocus","_getFocusedChild","focusedIndex","el","shiftKey","keyCode","autoFocus","ModalBody","ModalFooter","ModalHeader","closeButton","wrapTag","closeButtonLabel","WrapTag","Pagination","listClassName","listTag","ListTag","label","paginationClasses","listpaginationClasses","PaginationItem","paginationItemClasses","PaginationLink","next","previous","paginationLinkclasses","defaultCaret","Array","isArray","UncontrolledPagination","activePage","maxPages","items","ceil","itemsPerPage","floor","startingItem","qsps","splitUrl","url","secondSplit","hash","parsedQsps","qsp","qspPair","baseUrl","previousText","nextText","previousAriaLabel","nextAriaLabel","activeQsp","_generatePageLinks","page","Object","qspUrl","forEach","disable","_generateUrl","tooltipId","nextId","prevId","ariaDescribedBy","nextAreaDescribed","prevAreaDescribed","leftDistance","rightDistance","leftEllipse","pagesDisplayed","rightEllipse","pages","displayedPagesOnLeft","startingIndex","endIndex","push","_generatePaginationItem","_generateEllipse","_generatePaginationArrow","Popover","tabPressed","popover","_addTargetEvents","_handleDocumentClick","_removeTargetEvents","getRef","_focusOutTarget","_focusOutPopover","_keyDown","_show","_hide","_handleProps","placementPrefix","hideArrow","innerClassName","modifiers","offset","boundariesElement","popperClasses","focusOut","nextFocus","PopperContent","_handlePlacementChange","prevProps","_renderChildren","data","flip","fallbackPlacement","arrowClassName","arrowClassNameOrUndefined","attrs","popperClassName","extendedModifiers","enabled","behavior","preventOverflow","update","order","fn","component","popupProps","processStatusClass","dialogStrings","modalOpen","setModalOpen","closeModal","closeWindowButtonText","imageSettings","product","price","productQuantity","priceComponent","navigationUrl","continueShoppingAttribute","viewBagAttribute","fallbackImageUrl","getFallbackImageUrl","ItemId","actionContext","apiSettings","cropFocalRegion","quantity","itemsString","headerItemOneText","headerItemFormatText","shouldDisplayUnitOfMeasure","app","config","unitOfMeasureDisplayType","reducedDimensions","Dimensions","reduce","str","productDimension","DimensionValue","Value","headerMessageText","src","PrimaryImageUrl","fallBackSrc","altText","Name","loadFailureBehavior","DefaultUnitOfMeasure","goToCartText","continueShoppingText","PriceEditorModeSelectionState","getPriceEditorModeSelectionStateResources","modeState","resources","full","payFullAmountButtonText","partial","specifyAmountButtonText","onClickHandler","handleStateChange","togglePopoverHandler","setPopoverState","isPopoverState","PriceEditorModeSelectionComponent","popoverReference","isPopoverShown","setIsPopoverShown","setModeState","currentState","onChangeMode","clickedState","onStateChanged","EnumExtensions","stateStringRepresentation","renderModeStateItem","PriceEditor","_handleInputFocus","isInputFocused","_handleInputBlur","_handleEditorModeStateChange","_updateAmount","maximumValue","_inputRef","newAmount","handleChange","parseFloat","toFixed","_precision","minimumValue","defaultValue","defaultAmount","containerClassName","hasMultipleModes","mode","formattedValue","editedValue","priceEditorInputAriaLabel","onFocus","Progress","percent","width","Quantity","minValue","SingleSlideCarousel","carouselSize","slideSize","itemSize","flipperNextLabel","flipperPrevLabel","_onResized","_onCarouselResized","_nextSlide","_previousSlide","_handleTouchStart","_handleTouchEnd","_onFocus","showPrevious","showNext","slideRef","itemRef","direction","parentId","scrollThreshold","touchScrollThreshold","carousel","slide","item","_setSizes","_updateFlippers","vertical","resizeThrottledEventHandler","isVert","slidePositionStyle","modifiedChildren","_getClonedChildren","carouselClass","carouselSlideClass","overflowClass","previousFlipperGlyph","nextFlipperGlyph","previousFlipperClassName","nextFlipperClassName","disableClassName","onTouchStart","onTouchEnd","useTabList","child","castChild","verticalItemsSelector","itemsSelector","_moveSingleSlide","evt","touches","scrollStart","screenY","screenX","changedTouches","delta","currentOffset","maxScrollCount","directionModifier","maxScrollDistance","distanceToEdge","abs","scrollWidth","_calculateCarouselSize","carouselStyle","padding","paddingTop","paddingBottom","paddingLeft","paddingRight","_canScrollPrevious","_canScrollNext","offsetTop","offsetLeft","updateOffset","scrollLeft","_scrollItemIntoView","SliderThumb","sliderButtonRef","sliderThumbBaseClass","sliderThumbClass","trackThumbClass","handleStart","onMouseUp","handleEnd","onTouchMove","handleDrag","handleKeydown","handleFocus","handleBlur","showTooltip","tooltip","handleTooltipText","sliderValue","orientations","horizontal","dimension","coordinate","EventType","Slider","thumb1Ref","thumb2Ref","_renderLabels","labels","labelId","labelPositioning","labelString","_renderSliderThumbs","thumbStyles","isMobileCheck","xl","isMobileView","sliderAriaLabelMin","sliderThumbs","sliderAriaLabelMax","isRangeSlider","step","orientation","_handleOnChange","_handleStart","_handleDrag","_handleEnd","ariaValueText","_handleUpdate","dimensionStr","sliderPos","handlePos","limit","grab","castTarget","thumbid","_prevState","_getThumbAndPublishEvent","Start","_position","castEvent","coordinateStyle","directionStyle","clientCoordinateStyle","getBoundingClientRect","pos","_getValueFromPosition","_getPositionFromValue","percentage","round","baseVal","_coordinates","fill","handle","_setSliderValue","sliderThumb","Change","_publishNotification","thumb","delegate","slider","firstThumbValue","secondThumbValue","NaN","nativeEventType","elmenentId","_getThumbFromProps","End","onChangeEnd","onChangeStart","_willThumbsCrossOver","_handleOnClick","shouldSliderAdjustToRTL","offsetWidth","_nextState","shouldRender","thumb1Position","thumb2Position","sliderClass","sliderBaseClass","sliderId","camelCasedDirection","positionThumb1","coordsThumb1","fillStyle","handleStyle","trackProgressClass","sliderKey","String","positionThumb2","coordsThumb2","showProgressBar","fillTrackValue","showLabels","castThumb","thumbId","thumbPressed","thumb1","thumb2","thumbInteractedWith","thumbFound","keycode","checkCondition","inForm","TableDataType","Table","componentClassName","headingPrefix","capitalizeHeadingPrefix","_selectSortingKey","columnName","sortingKey","ascendingOrder","newOrder","showActions","_onCheckBoxChangeHandler","rows","checkBoxCallback","isSelected","_renderHeadingRow","columnData","showCheckBoxes","enableToModify","minifyActions","actionLinkText","isSortable","resourcePrefix","isSingleSelectOnly","businessUserSelectCheckBoxAriaLabelText","sortByAscending","sortByDescending","sortingClassName","sortingValue","columns","cellIndex","updatedCellIndex","columnSortValue","columnAriaLabel","sortable","_handleKeyPressPrev","scope","radioCheckBox","actionContent","tableCell","header","content","_renderRow","excludedColumns","actions","formatPrice","rowsData","additionalNameAriaLabel","row","cell","includes","extraClass","Price","cellContent","columnSpecificClass","rowKey","actionButtons","_renderActions","buttonReferences","records","buttonReference","editLinkText","deleteLinkText","viewLinkText","editLinkTooltip","deleteLinkTooltip","viewLinkTooltip","actionLinkTooltip","minifiedButtonText","onDelete","onView","handleClickEdit","edit","handleClickDelete","delete","handleClickView","Node","_toggleActions","newKey","_sortTableRow","table","sortingkey","sort","userOne","userTwo","userOneData","find","userTwoData","cleanFirst","toLowerCase","cleanSecond","_getCurrentPageData","tableRows","start","end","result","colSpan","_renderPrev","paginationPreviousText","_renderNext","paginationNextText","headings","showPagination","paginationProperty","classname","paginationLinks","skipCount","itemPerPage","prevText","paginationText","tableBody","tableHead","isChecked","cssClass","checked","DEFAULT_DELAYS","show","Tooltip","addTargetEvents","handleDocumentClick","removeTargetEvents","onMouseOverTooltip","onMouseLeaveTooltip","onMouseOverTooltipContent","onMouseLeaveTooltipContent","onFocusOutTarget","onEscKeyDown","onEscKeyDownNative","getElementsByTagName","bodyClasses","getNamedItem","removeNamedItem","clearHideTimeout","clearShowTimeout","hideTimeout","showTimeout","getDelay","nativeEvent","delay","ariaAttr","createAttribute","setNamedItem","triggers","displayMode","shouldShowCloseButton","onMouseOver","onMouseLeave","shouldShowMiniCart","UncontrolledTooltip","_isAutoDisplayTriggered","isCartPage","StringExtensions","cartPageUrl","Waiting","watingClassName","Module","moduleProps","restAttribute","renderModuleAttributes","Element","ImagefullView","galleryCarousel","modalWindow","modalIsOpen","ontoggle","modalHeader","removeInlineZoomStyle","zoomedImage","defaultDataScale","onMouseOutLensContainer","zoomLens","zoomedImageContainer","getCenter","x","y","getLensPosition","cursorPosition","lensSize","originalSize","lensCenter","maxPositionX","maxPositionY","getCursorPosition","containerBoundingRect","pageX","pageXOffset","pageY","formatPixelsValue","numericValue","handleInlineStyles","dataScaleText","removeAttribute","imageElement","previousElementSibling","dataScale","imageContainerSize","offsetHeight","zoomedImageSize","opacity","imageCenter","scaledCursorPosition","zoomedImagePosition","inlineZoomInitClick","zoomImg","nextElementSibling","handleMouseMovementInContainerZoom","lens","zoomedContainer","displayedImageSize","imageInitialHeight","naturalHeight","imageInitialWidth","naturalWidth","imageContainerHeight","widthScaleRatio","heightScaleRatio","scaleRatio","getDisplayedImageSize","lensPosition","mainImageSource","backgroundImage","offsetCenter","lensScaledPositionX","lensScaledPositionY","backgroundPositionX","backgroundPositionY","backgroundSize","topPosition","onMouseOverImageContainer","add","onMouseMoveLensContainer","onContainerZoomInit","containerDiv","inlineZoomImageOnMouseMove","inlineZoomImageOnMouseOut","inlineZoomImageOnHover","scale","zoomedImg","removeContainerZoomStyle"],"sourceRoot":""}