{"version":3,"file":"static/js/1.2350505d10732bafdea5.chunk.js","mappings":"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","sources":["webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/alert/Alert.tsx?44c5","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/back-to-top/BackToTop.tsx?0cf6","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/button/Button.tsx?457f","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/collapse/Collapse.tsx?27f6","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/common/KeyCodes.ts?0c24","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/common/localeBasedPrice.ts?42e9","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/common/stringExtensions.ts?f421","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/common/telemetryHelper.ts?068b","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/common/urlCheck.ts?1d7a","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/common/utilities.ts?93e6","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/drawer/ControlledDrawer.tsx?9a39","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/drawer/Drawer.tsx?da2c","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/fade/Fade.tsx?31ba","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/flipper/Flipper.tsx?36cd","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/form-builder/form-builder.tsx?c7f3","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/heading/Heading.tsx?c36b","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/incremental-quantity/IncrementalQuantity.tsx?1af1","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/node_modules/tslib/tslib.es6.js?2261","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/isMobile/isMobile.tsx?1fd3","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/isMobile/isMobile.props.ts?d9d2","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/labeled-dropdown/LabeledDropdown.tsx?ab7c","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/Portal.tsx?c937","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/Modal.tsx?7d4b","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalBody.tsx?c097","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalFooter.tsx?8e31","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/modal/ModalHeader.tsx?627d","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/Pagination.tsx?ebf9","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/PaginationItem.tsx?6f25","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/PaginationLink.tsx?b97e","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/pagination/UncontrolledPagination.tsx?4877","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/popover/Popover.tsx?3cf4","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/popper-content/PopperContent.tsx?1148","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/popup-products/Popup-products.tsx?2288","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/popup/Popup.tsx?0173","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/price/price-editor-mode-selection.tsx?3c70","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/price/price-editor.tsx?ca15","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/progress/Progress.tsx?fbb5","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/quantity/Quantity.tsx?b66b","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/single-slide-carousel/SingleSlideCarousel.tsx?b47d","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/slider/SliderThumb.tsx?5d3f","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/slider/Slider.tsx?bb4c","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/table/Table.tsx?8faf","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/table/checkbox.tsx?36f8","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/tooltip/Tooltip.tsx?8355","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/tooltip/UncontrolledTooltip.tsx?30ec","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/waiting/Waiting.tsx?ba13","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/wrapper/module.tsx?dadb","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/wrapper/node.tsx?cdf8","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/zoom-image/ImagefullView.tsx?adc9","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce-modules/utilities/src/zoom-image/ZoomImage.tsx?3088","webpack://msdyn365-lxs-master-theme/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.number.parse-float.js?048e"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 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\n ? mapToCssModules(classNames(className, 'msc-alert', `msc-alert-${color}`), 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 \n close\n \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 * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 }\n return (\n \n {children}\n \n );\n }\n\n private readonly _renderHeading = (text: string): JSX.Element | undefined => {\n return ;\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 =\n scrollTop > 0 && threshold >= 0\n ? scrollTop < ((document.documentElement.scrollHeight - height) * threshold) / 100\n : 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.\n * All rights reserved. See LICENSE 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 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 { active, block, className, cssModule, color, outline, size, tag, innerRef, ...attributes } = this.props;\n const classes = mapToCssModules(\n classNames(\n className,\n 'msc-btn',\n outline && color\n ? `btn-outline-${color}`\n : color && outline === false\n ? `btn-${color}`\n : color === undefined && outline === true\n ? 'btn-outline'\n : '',\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.\n * All rights reserved. See LICENSE 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, 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 public reEvaluateHeight(): void {\n this._reevaluateHeight();\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.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { EMPTY } from '@msdyn365-commerce/retail-proxy';\nimport { KeyCodes } from './KeyCodes';\n\nexport interface ILocalizedPrice {\n customizedAmount?: string;\n amountVariable?: string;\n paymentAmount?: number;\n}\n\n/**\n * Get Locale Based Customized Price function.\n * @param customPrice - customPrice.\n * @param state - state.\n * @param locale - locale.\n * @param keyCode - keyCode\n * @returns modified state.\n */\nexport function getLocaleBasedCustomizedPrice(\n customPrice: string,\n state: ILocalizedPrice,\n locale: string,\n keyCode: number\n): ILocalizedPrice {\n // Checking if the backspace is being pressed then remove the particular digit from string. so added char 'B' to identify backspace event.\n const returnState: ILocalizedPrice = state;\n if (keyCode === KeyCodes.Back) {\n // Checking if the all value is being deleted by CTRL+ A+ BACKSPACE, then set value as 0.\n const amountData = (state.amountVariable as string).slice(0, -1);\n if (StringExtensions.isNullOrEmpty(customPrice)) {\n returnState.paymentAmount = parseFloat(customPrice);\n setLocaleBasedAmount('0', locale, returnState, state, keyCode);\n } else {\n // Otherwise remove the particular digit from string and send data to format.\n returnState.paymentAmount = parseFloat(amountData);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n }\n } else if (StringExtensions.isNullOrWhitespace(customPrice) || customPrice.length === 1) {\n // Checking if the last entered digit is space only or contains only one digit then assign value accordingly without appending prefix value.\n returnState.paymentAmount = parseFloat(customPrice);\n if (customPrice.length === 1) {\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n } else {\n // If no value found then set value as 0.\n setLocaleBasedAmount('0', locale, returnState, state, keyCode);\n }\n // this._updatePrice(state.productPrice, parseFloat(customPrice));\n } else if (customPrice.charAt(customPrice.length - 1) === '.' && (state.amountVariable as string).split('.').length - 1 === 1) {\n // Checking if the last entered value is dot and existing value is containing dot or not.\n // checking for first char after dot should not contain any other dots.\n if (state.amountVariable?.includes('.') && customPrice.charAt(customPrice.length - 1) === '.') {\n return state;\n }\n let stringAmount = customPrice.replace(/[^0-9]/g, EMPTY);\n stringAmount = `${stringAmount}.`;\n returnState.paymentAmount = parseFloat(stringAmount);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n } else if (customPrice.charAt(customPrice.length - 2) === '.' && (state.amountVariable as string).split('.').length - 1 === 1) {\n // checking for second char after dot should not contain any other dots.\n if (state.amountVariable?.includes('.') && customPrice.charAt(customPrice.length - 1) === '.') {\n return state;\n }\n returnState.paymentAmount = parseFloat(customPrice);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n } else if ((state.amountVariable as string).includes('.') && (state.amountVariable as string).split('.').length - 1 === 1) {\n // checking if pre existing amount doesn't contain any dot then append last entered value and then send for customize the amount.\n const lastDigit = customPrice.charAt(customPrice.length - 1);\n returnState.paymentAmount = parseFloat((state.amountVariable as string) + lastDigit);\n setLocaleBasedAmount((state.amountVariable as string) + lastDigit, locale, returnState, state, keyCode);\n } else {\n // Generally without backspace and dot value comes under this section and get appended into existing string for further amount customization.\n const stringAmount = customPrice.replace(/[^0-9]/g, EMPTY && customPrice.split('.').length - 1 === 1);\n returnState.paymentAmount = parseFloat(stringAmount);\n setLocaleBasedAmount(customPrice, locale, returnState, state, keyCode);\n }\n\n return returnState;\n}\n\n/**\n * Set customizedAmount and amountVariable in state as per Locale Based function.\n * @param inputTextValue - inputTextValue.\n * @param locale - locale.\n * @param returnState - returnState.\n * @param state - state.\n * @param keyCode - keyCode.\n * @returns void.\n */\nconst setLocaleBasedAmount = (\n inputTextValue: string,\n locale: string,\n returnState: ILocalizedPrice,\n state: ILocalizedPrice,\n keyCode: number\n): void => {\n let amountForUI: string = EMPTY;\n let newVar: string = (state.paymentAmount as number).toString();\n const usedVar = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];\n\n // Check if the Input is one or less than one characters the initialize the value in input box.\n if (StringExtensions.isNullOrWhitespace(inputTextValue) || inputTextValue.length === 1) {\n const recentInputNumber = inputTextValue.charAt(inputTextValue.length - 1);\n if (usedVar.includes(recentInputNumber)) {\n returnState.amountVariable = inputTextValue;\n } else {\n return;\n }\n amountForUI = new Intl.NumberFormat(locale).format(Number(inputTextValue));\n returnState.customizedAmount = amountForUI;\n } else {\n const recentInputNumber = inputTextValue.charAt(inputTextValue.length - 1);\n\n // Append last input amount digit and append with previous input amount and then send to format the value.\n if (usedVar.includes(recentInputNumber)) {\n if (state.amountVariable?.includes('.')) {\n if (state.amountVariable?.substring(state.amountVariable?.indexOf('.') + 1).length <= 3) {\n newVar = newVar.slice(0, -1);\n returnState.amountVariable = newVar + recentInputNumber;\n amountForUI = new Intl.NumberFormat(locale).format(Number(newVar + recentInputNumber));\n returnState.customizedAmount = amountForUI;\n }\n } else {\n returnState.amountVariable = newVar;\n amountForUI = new Intl.NumberFormat(locale).format(Number(newVar));\n returnState.customizedAmount = amountForUI;\n }\n } else if (recentInputNumber === '.' && newVar.replace(/[^.]/g, EMPTY).length === 0 && newVar.split('.').length - 1 === 0) {\n // Append dot (.) in Amount string.\n const inputWithDot = newVar + recentInputNumber;\n returnState.amountVariable = inputWithDot;\n returnState.customizedAmount = inputWithDot;\n } else if (keyCode === KeyCodes.Back) {\n returnState.amountVariable = newVar;\n amountForUI = new Intl.NumberFormat(locale).format(Number(newVar));\n returnState.customizedAmount = amountForUI;\n }\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\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 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 if (value.startsWith) {\n return value.startsWith(prefix);\n }\n\n return value.startsWith(prefix);\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 SwitchCustomer = 'Switch Customer',\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 CurrentDistributor = 'Set as current distributor',\n ViewMode = 'View mode',\n ApplyRefiner = 'Apply Refiner',\n Search = 'Search'\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 =\n 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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport url from 'url';\n\nexport function urlCheck(testUrl: string): boolean {\n const parsedUrl = url.parse(testUrl, true);\n if (parsedUrl.protocol && parsedUrl.host) {\n return true;\n } else {\n return false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 * 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\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): (event: Event) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 }, threshold - (now - last));\n } else {\n last = now;\n listener(event);\n }\n };\n}\n\nexport function addThrottledEvent(\n target: EventTarget,\n name: string,\n listener: EventListener,\n threshold: number = 150\n): (event: Event) => void {\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 */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\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\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRef(target: any): boolean {\n if (!target) {\n return false;\n }\n\n return (>target).current !== undefined;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\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 = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\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\n// eslint-disable-next-line complexity, @typescript-eslint/no-explicit-any\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 =\n !!target[key] &&\n (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 =\n !!target[key][arrayIndex] &&\n (Array.isArray\n ? Array.isArray(target[key][arrayIndex])\n : {}.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/**\n * Updates the max quantity for cart line item to default if not configured.\n * @param currentMaxQuantityForCartLineItem - The current max quantity for cart line item.\n * @returns The updated max quantity for cart line item.\n */\nexport function updateMaxQuantityForCartLineItem(currentMaxQuantityForCartLineItem: number | undefined): number {\n const defaultMaxQuantity = 10;\n\n const updatedMaxQuantityForCartLineItem = currentMaxQuantityForCartLineItem || defaultMaxQuantity;\n\n return updatedMaxQuantityForCartLineItem;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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.setState({ 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 {title};\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 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.\n * All rights reserved. See LICENSE 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(\n 'drawer__glyph',\n\n this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : ''\n );\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n\n this.props.openGlyph ? this.props.openGlyph : this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n\n this.props.openGlyph ? this.props.openGlyph : ''\n );\n this.drawerCloseGlyph = classnames(\n this.drawerGlyphClass,\n\n this.props.closeGlyph ? this.props.closeGlyph : ''\n );\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.setState({\n isOpen: collapseProps.isOpen\n });\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames(\n 'drawer',\n\n this.props.className ? this.props.className : ''\n );\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(\n 'drawer__buttontext',\n\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n if (this.props.glyphPlacement === 'end') {\n return (\n <>\n {this.props.toggleButtonText}\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 {this.props.toggleButtonText}\n \n );\n }\n return {this.props.toggleButtonText};\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 * 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(\n { isOpen: !this.state.isOpen, buttonText: e.currentTarget.innerText },\n () => this.props.onToggle && this.props.onToggle(this.state)\n );\n } else {\n this.setState({ isOpen: !this.state.isOpen });\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 = typeof ENTERING | typeof ENTERED | typeof EXITING | typeof EXITED | typeof UNMOUNTED;\n\n/**\n * Fade component.\n */\nexport default class Fade extends React.Component {\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\n } = 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(classNames([className, baseClassAlways, isActive && baseClassActiveAlways]), cssModule);\n\n return (\n \n {children}\n \n );\n }}\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 {displayTooltip && !disabled && (\n \n {' '}\n {props['aria-label']}\n \n )}\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 * 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 * 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 = ({ errorMessage }) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n {errorMessage}\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 (\n this.props.heading !== nextProps.heading ||\n this.props.confirmationComponent !== nextProps.confirmationComponent ||\n this.props.submitButtonText !== nextProps.submitButtonText ||\n this.props.requiredValueMissingErrorMessage !== nextProps.requiredValueMissingErrorMessage\n ) {\n return true;\n }\n\n // If any form key has changed, the component should update.\n if (\n !this.props.keys.every((formKey: IFormKeyProps, index: number) => {\n return (\n 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 })\n ) {\n return true;\n }\n\n // If any value has changed, the component should update.\n if (\n this.state.isSubmitted !== nextState.isSubmitted ||\n !this.state.values.every((value: string, index: number) => {\n return value === nextState[Number(index)];\n })\n ) {\n return true;\n }\n\n return false;\n }\n\n public render(): JSX.Element {\n return (\n <>\n {!this.state.isSubmitted && ArrayExtensions.hasElements(this.props.keys) && (\n
\n

{this.props.heading}

\n
\n \n {this.props.keys\n .filter((formKey: IFormKeyProps) => {\n return (\n !ObjectExtensions.isNullOrUndefined(formKey.resourceId) &&\n !ObjectExtensions.isNullOrUndefined(formKey.resourceValue)\n );\n })\n .map((formKey: IFormKeyProps, index: number) => {\n const currentValue: string = this.state.values[Number(index)];\n return (\n
\n \n {`${formKey.resourceValue!}${formKey.isRequired ? ' *' : ''}`}\n {this.requiredValueMissing.getValue(formKey.resourceId!) && (\n \n )}\n \n \n
\n );\n })}\n
\n \n {this.props.submitButtonText}\n \n
\n \n
\n
\n )}\n {this.state.isSubmitted && this.props.confirmationComponent}\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(\n currentKey.resourceId,\n (currentKey.isRequired ?? false) && event.target.value === ''\n );\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.\n * All rights reserved. See LICENSE 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 ? {text} : {text};\n\nexport default Heading;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\nimport { debounce } from 'lodash';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isMobile, VariantType } from '..';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '../common/telemetryHelper';\nimport { IIncrementalQuantityProps } from './IncrementalQuantity.props';\n\n/**\n * IIncrementalQuantityState interface.\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 _minValue: number;\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n public static getDerivedStateFromProps(\n props: Readonly,\n state: IIncrementalQuantityState\n ): IIncrementalQuantityState {\n const nextState = { ...state };\n\n if (props.disabled && !state.isUpdating) {\n nextState.isUpdating = true;\n }\n\n if (\n (!props.disabled && state.isUpdating) ||\n ((props.applyDefaultOrderSettings ?? false) &&\n state.currentInput === 1 &&\n props.currentCount &&\n props.currentCount > IncrementalQuantity.defaultProps.min!)\n ) {\n nextState.currentInput = props.currentCount ?? 1;\n nextState.isUpdating = false;\n }\n\n return nextState;\n }\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 render(): JSX.Element {\n const { min, max } = this.props;\n\n this._minValue = min ?? IncrementalQuantity.defaultProps.min!;\n const value = this.state.currentInput;\n\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const decrementDisabled = value <= this._minValue || this.props.isGiftCard;\n const incrementDisabled = value >= max || this.props.isGiftCard;\n const currentValue = value;\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 const ariaLablelText = `${this.props.inputQuantityAriaLabel ?? ''} ${value}`;\n\n let extraClassDecrement = '';\n if (decrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassDecrement = 'disabled';\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 /**\n * It checks if its in mobile view or not.\n * @returns Boolean.\n */\n private readonly isMobileView = (): boolean => {\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 return isMobileCheck === 'xs' || isMobileCheck === 'sm';\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 this.setState({ currentInput: currentValue });\n return;\n }\n currentValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\n this.setState({ currentInput: currentValue });\n debounce(() => {\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 =\n 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 }, 1000)();\n }\n\n /**\n * Validates min and updates.\n */\n private readonly _validateMin = (): void => {\n if (Number.isNaN(this.state.currentInput)) {\n this.setState({ currentInput: this._minValue });\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({ currentInput: currentValue });\n }\n }\n };\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 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.\n * All rights reserved. See LICENSE 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 * Contains variant i.e browser | viewport.\n */\n variant?: VariantType;\n context?: Msdyn365.IRequestContext;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 { labelText, labelClassname, dropdownId, dropdownOptions, dropdownClassname } = 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 { dropdownOptions, onSelectOption } = 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.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE 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 =\n this.props.applicationNode instanceof HTMLElement\n ? this.props.applicationNode\n : 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 (\n (this.state.isOpen && !prevState.isOpen) ||\n (this.props.shouldUpdateFocusToFirstElement && !_prevProps.shouldUpdateFocusToFirstElement)\n ) {\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 // eslint-disable-next-line react/no-deprecated\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,\n modalClassName,\n backdropClassName,\n contentClassName,\n className,\n cssModule,\n modalTransition,\n backdropTransition,\n backdrop,\n isOpen,\n onOpened,\n onClosed,\n role,\n size,\n tabIndex,\n external,\n verticalPosition,\n horizontalPosition,\n keyboard,\n zIndex,\n fade,\n toggle,\n children,\n applicationNode,\n returnFocusRef,\n '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 );\n\n const dialogBaseClass = 'msc-modal__dialog';\n const dialogClasses = classNames([dialogBaseClass, className, size ? `msc-modal__${size}` : null]);\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(document.body.className, 'modal-open');\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 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.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE 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 { className, cssModule, children, toggle, tag, wrapTag, closeAriaLabel, closeButtonLabel, id, ...attributes } = 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 && {children}}\n {closeButton}\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 /* eslint-disable @typescript-eslint/no-explicit-any */\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 }: 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.\n * All rights reserved. See LICENSE 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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.\n * All rights reserved. See LICENSE 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 = [{children || defaultCaret}];\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.\n * All rights reserved. See LICENSE 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 /* eslint-disable @typescript-eslint/no-explicit-any */\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 }: 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(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 {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 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(\n startingIndex + 5 + (rightEllipse ? 0 : 1) + (leftEllipse ? 0 : 1),\n rightEllipse ? this.maxPages - 1 : this.maxPages\n );\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.\n * All rights reserved. See LICENSE 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(classNames('msc-popover-inner', this.props.innerClassName), this.props.cssModule);\n\n const popperClasses = mapToCssModules(classNames('msc-popover', 'show', this.props.className), this.props.cssModule);\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 (\n 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.\n * All rights reserved. See LICENSE 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 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, 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(classNames('msc-arrow', arrowClassNameOrUndefined), cssModule);\n\n const placement = (this.state.placement || attrs.placement || 'auto').split('-')[0];\n const popperClassName = mapToCssModules(\n classNames(className, placementPrefix ? `${placementPrefix}-${placement}` : placement),\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.\n * All rights reserved. See LICENSE 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
{text}
\n \n {dialogStrings.closeWindowButtonText}\n \n \n \n );\n};\n\nexport default PopupProducts;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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, ModalFooter, 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 {\n dialogStrings,\n className,\n imageSettings,\n gridSettings,\n data: { product, price },\n productQuantity,\n priceComponent,\n navigationUrl,\n modalOpen,\n telemetryContent,\n setModalOpen,\n context\n } = 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(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const quantity = productQuantity !== undefined ? productQuantity : 1;\n const itemsString =\n 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 =\n context.app.config?.unitOfMeasureDisplayType && context.app.config.unitOfMeasureDisplayType !== 'none';\n\n const reducedDimensions: string = product.Dimensions\n ? product.Dimensions.reduce((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 {itemsString}\n {dialogStrings.headerMessageText}\n \n \n \n {product.Name}\n {reducedDimensions !== '' ?
{reducedDimensions}
: ''}\n {price ?
{priceComponent}
: ''}\n {product.DefaultUnitOfMeasure && shouldDisplayUnitOfMeasure ? (\n
\n {product.DefaultUnitOfMeasure}\n
\n ) : (\n ''\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.\n * All rights reserved. See LICENSE 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 = (\n modeState: PriceEditorModeSelectionState,\n resources: IPriceEditorModeSelectionResources\n): 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 = (\n handleStateChange: (modeState: PriceEditorModeSelectionState) => void,\n modeState: PriceEditorModeSelectionState\n) => () => {\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\n): React.ReactNode => {\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 {EnumExtensions.getEnumValues(PriceEditorModeSelectionState).map(state => {\n return renderModeStateItem(state, props.resources, props.className, onChangeMode);\n })}\n \n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 {\n IPriceEditorModeSelectionResources,\n PriceEditorModeSelectionComponent,\n PriceEditorModeSelectionState\n} 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 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 {hasMultipleModes && (\n
\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.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE 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 =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max }, () => {\n debounce(() => {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n }, 200)();\n });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\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 }, 200)();\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.\n * All rights reserved. See LICENSE 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 = 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\n ? 'msc-ss-carousel-vert__flipper msc-ss-carousel-vert__flipper--next'\n : '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} ${\n castChild.props.className\n }`,\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} ${\n castChild.props.className\n }`,\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\n ? maxScrollDistance * directionModifier + currentOffset\n : 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\n ? Number.parseFloat(carouselStyle.paddingTop || '') + Number.parseFloat(carouselStyle.paddingBottom || '')\n : 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.\n * All rights reserved. See LICENSE 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 public static defaultProps: Partial = {\n showTooltip: true,\n showToolTipOnTab: false,\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\n ? `${sliderThumbBaseClass} ${this.props.trackThumbClass}`\n : sliderThumbBaseClass;\n\n return (\n <>\n \n {this.props.showTooltip && (\n \n {this.props.handleTooltipText\n ? this.props.handleTooltipText(this.props.sliderValue!)\n : this.props.sliderValue!.toString()}\n \n )}\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 showToolTipOnTab?: boolean;\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 (\n (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 ) {\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 showToolTipOnTab: false\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.toggle = this.toggle.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 (\n MsDyn365.isBrowser &&\n document.body.parentElement &&\n document.body.parentElement.getAttribute('dir') === 'rtl' &&\n (this.props.shouldSliderAdjustToRTL === undefined || this.props.shouldSliderAdjustToRTL)\n ) {\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 toggle = (): void => {\n this.setState((_prevState: ISliderState) => {\n return { showToolTipOnTab: !_prevState.showToolTipOnTab };\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\n ? `${Slider.sliderBaseClass} slider-${orientation} ${this.props.className}`\n : `${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}`]: `${\n orientations.horizontal.direction === 'right' ? coordsThumb1.fill - this.state.grab : coordsThumb1.fill\n }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\n ? format('{0} {1}', this.props.sliderThumbs[1].ariaLabel, this.state.sliderThumbs[1].value)\n : '';\n return (\n <>\n {\n this.setState({\n showToolTipOnTab: false\n });\n this.props.onBlur && this.props.onBlur();\n }}\n onKeyDown={() => {\n this.setState({\n showToolTipOnTab: true\n });\n }}\n onFocus={() => {\n this.setState({\n showToolTipOnTab: true\n });\n }}\n tabIndex={0}\n style={thumbStyles[0]}\n aria-valuenow={isMobileView ? undefined : this.state.sliderThumbs[0].value}\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 if (handlePos !== 0) {\n this.setState({\n limit: sliderPos - handlePos,\n grab: orientations.horizontal.direction === 'right' ? -handlePos / 2 : handlePos / 2\n });\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 } 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(\n (_prevState: ISliderState) => {\n return {\n sliderThumbs: { ...this.props.sliderThumbs }\n };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Change, eventType);\n }\n );\n } else {\n this.setState(\n (_prevState: ISliderState) => {\n return {\n sliderThumbs: sliderThumb\n };\n },\n () => {\n this._getThumbAndPublishEvent(castTarget, EventType.Change, eventType);\n }\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 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 return !(checkCondition && this.props.sliderThumbs[1].value - this.props.step * 2 >= this.props.sliderThumbs[0].value);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 * 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 tableAriaLabel?: string;\n tableTabIndex?: number;\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, tableAriaLabel, tableTabIndex } = 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 {tableHead}\n {tableBody}\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 = (\n rows: ITableRowProps[],\n checkBoxCallback: (records: ITableRowProps[]) => void,\n index?: number\n ) => () => {\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,\n showCheckBoxes,\n enableToModify,\n minifyActions,\n rows,\n actionLinkText,\n isSortable,\n checkBoxCallback,\n resourcePrefix,\n isSingleSelectOnly,\n businessUserSelectCheckBoxAriaLabelText,\n sortByAscending,\n 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 =\n resources[`${this.headingPrefix}${data.name}HeadingText`] ||\n resources[`${resourcePrefix!}${this.capitalizeHeadingPrefix}${data.name}HeadingText`] ||\n resources[`${data.name}HeadingText`] ||\n 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 \n {heading}\n \n );\n\n return content;\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 &&\n this.tableCell({\n header: true,\n className: `${this.componentClassName}__heading-row-data__checkbox checkbox`,\n content: radioCheckBox,\n cellIndex: -1,\n scope: 'col'\n })}\n {columns}\n {enableToModify &&\n 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,\n showCheckBoxes,\n excludedColumns,\n actions,\n checkBoxCallback,\n formatPrice,\n 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({\n header: false,\n className: classnames(`${this.componentClassName}__row-data`, extraClass, columnSpecificClass),\n content: cellContent,\n cellIndex: index,\n scope: 'row'\n });\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 &&\n this.tableCell({\n header: false,\n className: `${this.componentClassName}__row-data`,\n content: radioCheckBox,\n cellIndex: index,\n scope: 'row',\n records: rowsData\n })}\n {columnData}\n {enableToModify &&\n this.tableCell({\n header: false,\n className: `${this.componentClassName}__row-data`,\n content: actionButtons,\n cellIndex: index,\n scope: 'row',\n records: rowsData\n })}\n \n );\n });\n\n return tableRows;\n };\n\n private readonly _renderActions = (\n data: ITableItemProps[],\n showActions: boolean,\n key: string,\n buttonReference?: IButtonReferences\n ): React.ReactNode => {\n const {\n editLinkText,\n deleteLinkText,\n viewLinkText,\n editLinkTooltip,\n deleteLinkTooltip,\n viewLinkTooltip,\n actionLinkTooltip,\n minifyActions,\n minifiedButtonText,\n actionLinkText,\n actions: { onEdit, onDelete, onView }\n } = this.props;\n const handleClickEdit =\n onEdit !== undefined\n ? () => {\n onEdit(data, buttonReference?.edit?.current);\n }\n : undefined;\n const handleClickDelete =\n onDelete !== undefined\n ? () => {\n onDelete(data, buttonReference?.delete?.current);\n }\n : undefined;\n const handleClickView =\n onView !== undefined\n ? () => {\n onView(data);\n }\n : undefined;\n\n const actionButtons = (\n \n {handleClickView && (\n \n )}\n {handleClickEdit && (\n \n {editLinkText}\n \n )}\n {handleClickDelete && (\n \n {deleteLinkText}\n \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 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 =\n (userOneData.value as string) &&\n userOneData.value\n .toString()\n .toLowerCase()\n .trim();\n const cleanSecond =\n (userOneData.value as string) &&\n userTwoData.value\n .toString()\n .toLowerCase()\n .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 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 {paginationPreviousText}\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 {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.\n * All rights reserved. See LICENSE 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 = ({ isChecked, value, ariaLabel, name, className, onChange, isSingleSelectOnly }) => {\n const cssClass = classnames('ms-input-radio', className ? className : '');\n return (\n \n );\n};\n\nexport default CheckBoxButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 hideAriaHidden: 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 hideAriaHidden,\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(\n classNames(displayMode === 'FLYOUT' ? 'msc-flyout-inner' : 'msc-tooltip-inner', this.props.innerClassName),\n this.props.cssModule\n );\n\n const popperClasses = mapToCssModules(\n classNames(displayMode === 'FLYOUT' ? 'msc-flyout' : 'msc-tooltip', 'show', this.props.className),\n this.props.cssModule\n );\n\n return (\n
\n \n {this.props.toggle && this.props.shouldShowCloseButton ? (\n
\n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 =\n !StringExtensions.isNullOrWhitespace(this.props.cartPageUrl) && 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 this.props._toggle ? this.props._toggle() : this._toggle();\n }}\n {...this.props}\n />\n );\n }\n\n private _toggle(): void {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE 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 = React.forwardRef(\n ({ className = '', id = '', tag: Tag = 'div', moduleProps, ...restAttribute }, ref) => {\n return ;\n }\n);\n\nexport default Module;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 /* 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n}\n\nexport type IComponentNodeProps = INodeProps &\n T & {\n /* Wrapper Tag */\n tag?: React.ReactType;\n };\n\nexport const Node: React.FC = React.forwardRef(\n ({ className = '', tag: Tag = 'div', element: Element, ...restAttribute }, ref) => {\n return ;\n }\n);\n\nexport default Node;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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 return React.cloneElement(modalWindow, {}, modalHeader, body);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport function removeInlineZoomStyle(): void {\n const zoomedImages: HTMLCollectionOf = document.body.getElementsByClassName('ms-inline-zoom__zoomedImg');\n\n const zoomedImagesArray = Array.from(zoomedImages) as HTMLImageElement[];\n for (const item of zoomedImagesArray) {\n item.style.width = '0';\n item.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 * 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(\n zoomedImage: EventTarget & HTMLImageElement,\n dataScaleText: string,\n event: React.MouseEvent\n): 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,\n imageElement: HTMLImageElement,\n lens: EventTarget & HTMLDivElement\n): void {\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 = `${formatPixelsValue(displayedImageSize.width * dataScale)} ${formatPixelsValue(\n displayedImageSize.height * dataScale\n )}`;\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 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","'use strict';\nvar $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n// eslint-disable-next-line es/no-number-parsefloat -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseFloat !== parseFloat }, {\n parseFloat: parseFloat\n});\n"],"names":["Alert","React","render","id","className","closeClassName","cssModule","tag","toggle","color","isOpen","children","transition","fade","assertive","includeAlertClass","ariaLabel","this","props","classes","mapToCssModules","classNames","closeClasses","alertTransition","_objectSpread","Fade","defaultProps","baseClass","timeout","appear","enter","exit","Tag","buttonId","innerContent","type","closeAriaLabel","onClick","UncontrolledTooltip","target","placement","style","undefined","display","role","Object","assign","in","unmountOnExit","BackToTop","constructor","super","_renderHeading","text","Msdyn365","editProps","state","attributes","tabIndex","_reevaluatePosition","bind","_scrollToTop","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","getTelemetryAttributes","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","_this$props","threshold","delayInMs","scrollStepInPx","_objectWithoutProperties","_excluded","_scrollStep","document","documentElement","scrollTop","body","clearInterval","intervalId","setState","scrollTo","e","preventDefault","setInterval","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","componentDidUpdate","nextProps","shouldComponentUpdate","nextState","navbar","collapseIn","mountOnEnter","onEnter","onEntering","onEntered","onExit","onExiting","onExited","otherProps","transitionProps","Transition","TransitionTimeouts","status","collapseClass","_getTransitionClass","reEvaluateHeight","current","firstElementChild","isAppearing","KeyCodes","getLocaleBasedCustomizedPrice","customPrice","locale","keyCode","returnState","Back","amountData","amountVariable","slice","StringExtensions","isNullOrEmpty","paymentAmount","parseFloat","setLocaleBasedAmount","isNullOrWhitespace","length","charAt","split","_state$amountVariable","includes","stringAmount","replace","EMPTY","_state$amountVariable2","lastDigit","inputTextValue","amountForUI","newVar","toString","usedVar","recentInputNumber","Intl","NumberFormat","format","Number","customizedAmount","_state$amountVariable3","_state$amountVariable4","_state$amountVariable5","substring","indexOf","inputWithDot","formatSpecifier","_len","arguments","parameters","Array","_key","match","index","value","isNullOrWhiteSpace","trim","getTelemetryObject","pageName","moduleName","telemetry","eventType","etext","recid","contentCategory","contentAction","pgname","mname","etype","contentData","setTelemetryAttribute","onTelemetryClick","linkText","logEvent","TelemetryEvent","Custom","urlCheck","testUrl","parsedUrl","url","protocol","host","clamp","max","toUpperCaseFirstChar","toUpperCase","substr","getCSS","element","property","getComputedStyle","createThrottledEvent","listener","timer","last","event","now","Date","clearTimeout","setTimeout","addThrottledEvent","name","throttledEventHandler","map","c","join","canUseDOM","createElement","getTarget","selection","querySelectorAll","Error","_unused","console","error","findDOMElements","getTargetElement","targetElement","isRef","isElement","Modal","Carousel","focusableElements","updateMaxQuantityForCartLineItem","currentMaxQuantityForCartLineItem","ControlledDrawer","openGlyph","closeGlyph","_toggle","isManuallyToggled","collapseProps","isExpanded","drawerGlyphClass","classnames","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","drawerCloseGlyph","drawerClass","Expand","toggleButtonProps","_generateDrawerButtonInnerMarkup","collapseState","toggleButtonText","drawerButtonTextClass","toggleButtonClassName","glyphPlacement","_generateTitle","_generateGlyphMarkup","isStart","additionalClassName","titleLClassName","title","onTextChange","requestContext","onEdit","location","glyphClass","onToggle","Drawer","_props$collapseProps$","_props$collapseProps","buttonText","currentTarget","innerText","baseClassActive","fadeIn","timeoutOrUndefined","addEndListener","baseClassAlways","baseClassActiveAlways","isActive","Flipper","telemetryLabel","glyphProps","displayTooltip","sizeClass","attribute","trigger","FormBuilderErrorComponent","_ref","errorMessage","FormBuilder","_onSubmit","async","formData","keys","formKey","currentValue","values","resourceId","resourceValue","onSubmit","previousState","isSubmitted","_onInputChange","_event$target$getAttr","changedValueIndex","parseInt","getAttribute","ObjectExtensions","isNullOrUndefined","Promise","reject","newState","currentKey","_currentKey$isRequire","requiredValueMissing","setValue","isRequired","resolve","Dictionary","_formKey$isRequired","heading","confirmationComponent","submitButtonText","requiredValueMissingErrorMessage","every","ArrayExtensions","hasElements","autoComplete","filter","_formKey$isRequired2","_formKey$isRequired3","key","htmlFor","getValue","onChange","required","isAnyRequiredValueMissing","getValues","findIndex","isMissing","headingTag","HTag","IncrementalQuantity","IncrementalQuantity_1","_props$currentCount","_this$props$min","inputRef","isMobileView","isMobileCheck","isMobile","variant","VariantType","Browser","context","gridSettings","xs","w","sm","md","lg","xl","_validateMin","isNaN","currentInput","_minValue","currentCount","isUpdating","_onIncrement","_onDecrement","_handleChange","_props$applyDefaultOr","_props$currentCount2","applyDefaultOrderSettings","_this$props$inputQuan","_this$props$inputQuan2","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","decrementDisabled","isGiftCard","incrementDisabled","DecrementQuantity","decrementAttributes","IncrementQuantity","incrementAttributes","ariaLablelText","inputQuantityAriaLabel","extraClassDecrement","extraClassIncrement","decrementButtonAriaLabel","pattern","onBlur","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","_debounce","inputElement","HTMLInputElement","setAttribute","decorators","desc","d","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__decorate","observer","_context$device","MsDyn365","isBrowser","innerWidth","Viewport","device","Type","LabeledDropdown","_onSelectOption","selectedKey","selectedOption","dropdownOptions","option","selectedIndex","labelText","labelClassname","dropdownId","dropdownClassname","labelClassNames","dropdownClassNames","_getSelectedIndex","selected","controlledByParent","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","componentWillReceiveProps","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","_document$body$firstE","openCount","scrollY","scrollbarWidth","clientWidth","top","right","left","removeProperty","_document$body$firstE2","modalOpenClassName","modalOpenClassNameRegex","RegExp","_getFocusedChild","focusableChildren","activeElement","stopPropagation","container","which","totalFocusable","currentFocus","focusedIndex","el","shiftKey","autoFocus","ModalBody","ModalFooter","ModalHeader","closeButton","wrapTag","closeButtonLabel","WrapTag","closeButtonTabIndex","Pagination","listClassName","listTag","ListTag","label","paginationClasses","listpaginationClasses","PaginationItem","paginationItemClasses","PaginationLink","next","previous","paginationLinkclasses","defaultCaret","isArray","UncontrolledPagination","activePage","maxPages","items","ceil","itemsPerPage","floor","startingItem","qsps","splitUrl","secondSplit","hash","parsedQsps","qsp","qspPair","baseUrl","previousText","nextText","previousAriaLabel","nextAriaLabel","activeQsp","_generatePageLinks","_generateUrl","page","qspUrl","forEach","_generatePaginationArrow","disable","tooltipId","nextId","prevId","ariaDescribedBy","nextAreaDescribed","prevAreaDescribed","_generatePaginationItem","_generateEllipse","leftDistance","rightDistance","leftEllipse","pagesDisplayed","rightEllipse","pages","displayedPagesOnLeft","startingIndex","endIndex","push","Popover","tabPressed","popover","_addTargetEvents","_handleDocumentClick","_removeTargetEvents","getRef","_focusOutTarget","_focusOutPopover","_keyDown","_show","_hide","_handleProps","placementPrefix","hideArrow","innerClassName","modifiers","offset","boundariesElement","popperClasses","PopperContent","focusOut","nextFocus","_handlePlacementChange","prevProps","_renderChildren","data","flip","fallbackPlacement","arrowClassName","arrowClassNameOrUndefined","attrs","popperClassName","extendedModifiers","enabled","behavior","preventOverflow","update","order","fn","ReactPopper","component","Arrow","popupProps","processStatusClass","dialogStrings","modalOpen","setModalOpen","closeModal","closeWindowButtonText","_context$request$app","_context$app$config","imageSettings","product","price","productQuantity","priceComponent","navigationUrl","ContinueShopping","continueShoppingAttribute","ViewBagAndCheckout","viewBagAttribute","fallbackImageUrl","getFallbackImageUrl","ItemId","actionContext","apiSettings","request","app","config","OmniChannelMedia","cropFocalRegion","quantity","itemsString","headerItemOneText","headerItemFormatText","shouldDisplayUnitOfMeasure","unitOfMeasureDisplayType","reducedDimensions","Dimensions","reduce","str","productDimension","DimensionValue","Value","headerMessageText","Image","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","getEnumValues","renderModeStateItem","stateStringRepresentation","PriceEditor","_handleInputFocus","isInputFocused","_handleInputBlur","_handleEditorModeStateChange","_this$_inputRef$curre","_updateAmount","maximumValue","_inputRef","newAmount","handleChange","toFixed","_precision","minimumValue","defaultValue","defaultAmount","_this$state$currentVa","_this$state$currentVa2","_this$state$currentVa3","containerClassName","hasMultipleModes","mode","formattedValue","editedValue","priceEditorInputAriaLabel","onFocus","Progress","percent","width","classname","Quantity","minValue","debounce","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","_scrollItemIntoView","offsetTop","offsetLeft","updateOffset","scrollLeft","SliderThumb","sliderButtonRef","sliderThumbBaseClass","sliderThumbClass","trackThumbClass","handleStart","onMouseUp","handleEnd","onTouchMove","handleDrag","handleKeydown","handleFocus","handleBlur","showTooltip","tooltip","showToolTipOnTab","handleTooltipText","sliderValue","orientations","horizontal","dimension","coordinate","EventType","Slider","thumb1Ref","thumb2Ref","_prevState","_renderLabels","labels","labelId","labelPositioning","labelString","_renderSliderThumbs","thumbStyles","sliderAriaLabelMin","sliderThumbs","sliderAriaLabelMax","isRangeSlider","step","orientation","_handleOnChange","_handleStart","_handleDrag","_handleEnd","ariaValueText","_handleUpdate","dimensionStr","sliderPos","handlePos","limit","grab","castTarget","thumbid","_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","marginBottom","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","isNumber","isSelected","_renderHeadingRow","columnData","showCheckBoxes","enableToModify","minifyActions","actionLinkText","isSortable","resourcePrefix","isSingleSelectOnly","businessUserSelectCheckBoxAriaLabelText","sortByAscending","sortByDescending","sortingClassName","sortingValue","columns","cellIndex","updatedCellIndex","columnSortValue","columnAriaLabel","sortable","_handleKeyPressPrev","scope","radioCheckBox","CheckBoxButton","actionContent","tableCell","header","content","_renderRow","excludedColumns","actions","formatPrice","rowsData","additionalNameAriaLabel","row","cell","extraClass","Price","cellContent","columnSpecificClass","rowKey","actionButtons","_renderActions","buttonReferences","records","buttonReference","editLinkText","deleteLinkText","viewLinkText","editLinkTooltip","deleteLinkTooltip","viewLinkTooltip","actionLinkTooltip","minifiedButtonText","onDelete","onView","handleClickEdit","_buttonReference$edit","edit","handleClickDelete","_buttonReference$dele","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","Enter","Space","headings","showPagination","paginationProperty","tableAriaLabel","tableTabIndex","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","hideAriaHidden","shouldShowCloseButton","onMouseOver","onMouseLeave","shouldShowMiniCart","_isAutoDisplayTriggered","isCartPage","cartPageUrl","Waiting","watingClassName","Module","moduleProps","restAttribute","renderModuleAttributes","Element","ImagefullView","galleryCarousel","modalWindow","modalIsOpen","ontoggle","modalHeader","removeInlineZoomStyle","zoomedImages","getElementsByClassName","zoomedImagesArray","from","defaultDataScale","onMouseOutLensContainer","zoomLens","zoomedImageContainer","getCenter","x","y","getLensPosition","cursorPosition","lensSize","originalSize","lensCenter","maxPositionX","maxPositionY","getCursorPosition","containerBoundingRect","pageX","pageXOffset","pageY","formatPixelsValue","numericValue","handleInlineStyles","zoomedImage","dataScaleText","removeAttribute","imageElement","previousElementSibling","dataScale","imageContainerSize","offsetHeight","zoomedImageSize","opacity","imageCenter","scaledCursorPosition","zoomedImagePosition","inlineZoomInitClick","_event$currentTarget$","zoomImg","nextElementSibling","handleMouseMovementInContainerZoom","lens","_lens$getAttribute","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","_parentElement$getAtt","inlineZoomImageOnMouseOut","inlineZoomImageOnHover","scale","zoomedImg","removeContainerZoomStyle","$","stat","forced"],"sourceRoot":""}