{"version":3,"file":"static/js/9.fa0641a777ab4becc887.chunk.js","mappings":"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","sources":["webpack://msdyn365.commerce.online/./src/modules/acclaim-ratings/acclaim-ratings.tsx?7a99","webpack://msdyn365.commerce.online/./src/modules/ie-only-message/ie-only-message.tsx?e2e1","webpack://msdyn365.commerce.online/./src/modules/product-container/product-container.tsx?22ea","webpack://msdyn365.commerce.online/./src/modules/scroll-event-manager/scroll-event-manager.props.autogenerated.ts?b00f","webpack://msdyn365.commerce.online/./src/modules/scroll-event-manager/scroll-event-manager.tsx?e035","webpack://msdyn365.commerce.online/./src/themes/blend/blend.tsx?0ccf","webpack://msdyn365.commerce.online/./src/themes/colsolare/colsolare.tsx?0b5f","webpack://msdyn365.commerce.online/./src/themes/conn-creek/conn-creek.tsx?3018","webpack://msdyn365.commerce.online/./src/themes/elicit/elicit.tsx?4aeb","webpack://msdyn365.commerce.online/./src/themes/enoteca/enoteca.tsx?401c","webpack://msdyn365.commerce.online/./src/themes/erath/erath.tsx?01b9","webpack://msdyn365.commerce.online/./src/themes/h3-theme/h3-theme.tsx?c9e9","webpack://msdyn365.commerce.online/./src/themes/lql/lql.tsx?7193","webpack://msdyn365.commerce.online/./src/themes/north-star/north-star.tsx?6945","webpack://msdyn365.commerce.online/./src/themes/patzhall/patzhall.tsx?7183","webpack://msdyn365.commerce.online/./src/themes/smwe/smwe.tsx?8f85","webpack://msdyn365.commerce.online/./src/modules/fabrikam/fabrikam.tsx?5b10","webpack://msdyn365.commerce.online/./src/modules/starter/starter.tsx?aade","webpack://msdyn365.commerce.online/./node_modules/@msdyn365-commerce/core-internal/dist/lib/utilities/svgs/default.svg?7aac","webpack://msdyn365.commerce.online/./node_modules/@msdyn365-commerce/core-internal/dist/lib/utilities/svgs/large.svg?3c80","webpack://msdyn365.commerce.online/./node_modules/@msdyn365-commerce/core-internal/dist/lib/utilities/svgs/small.svg?cf86","webpack://msdyn365.commerce.online/../../../src/utilities/svg-loader.ts?d6c8"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n// tslint:disable comment-format\r\n\r\nimport * as React from 'react';\r\n\r\nimport AcclaimRatingsDisplay from './acclaim-ratings-display';\r\n\r\nimport { IAcclaimRatingsData } from './acclaim-ratings.data';\r\nimport { IAcclaimRatingsProps } from './acclaim-ratings.props.autogenerated';\r\n\r\n//=======================================================================\r\n/**\r\n * AcclaimRatings component\r\n * @extends {React.PureComponent>}\r\n */\r\n//=======================================================================\r\nclass AcclaimRatings extends React.PureComponent> {\r\n\r\n //------------------------------------------------------\r\n //------------------------------------------------------\r\n constructor(props: IAcclaimRatingsProps) {\r\n super(props);\r\n }\r\n\r\n //------------------------------------------------------\r\n //------------------------------------------------------\r\n public render(): JSX.Element {\r\n const { config } = this.props;\r\n\r\n const requestContext = this.props.context.actionContext.requestContext;\r\n const itemId = requestContext.urlTokens.itemId;\r\n const productID = parseInt(itemId || (requestContext.query && requestContext.query.productId) || '0', 10);\r\n\r\n const numberToShow = config.numberToShow ? +config.numberToShow : 0;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nexport default AcclaimRatings;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IIeOnlyMessageProps } from './ie-only-message.props.autogenerated';\r\n\r\n/**\r\n *\r\n * IeOnlyMessage component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass IeOnlyMessage extends React.PureComponent> {\r\n\r\n public render(): JSX.Element | null {\r\n // tslint:disable-next-line: prefer-const no-var-keyword\r\n var text = this.props.config.text;\r\n if (text && this._isIE()) {\r\n this._overrideBody();\r\n }\r\n\r\n if (text && this.props.config.detectChromeIOS && this._isChromeIOS()) {\r\n this._overrideBody();\r\n }\r\n return null;\r\n }\r\n\r\n private _overrideBody(): void {\r\n this._injectStyle();\r\n document.body = document.createElement('body');\r\n // tslint:disable-next-line: restrict-plus-operands no-inner-html\r\n document.body.innerHTML = `
${this.props.config.text as string}
`;\r\n }\r\n\r\n private _injectStyle(): void {\r\n // tslint:disable-next-line: prefer-const no-var-keyword\r\n var $style = document.createElement('style');\r\n // tslint:disable-next-line: restrict-plus-operands no-inner-html\r\n $style.innerHTML = '.browser-detector { padding: 3rem 1.5rem; text-align: center; }';\r\n document.head.appendChild($style);\r\n }\r\n\r\n private _isChromeIOS(): boolean {\r\n\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof navigator === 'undefined') {\r\n return false;\r\n }\r\n\r\n // DETECTION FUNCTION SOURCE:\r\n // https://stackoverflow.com/a/37178303\r\n\r\n // detects if user is using Chrome on Apple IOS\r\n if (/CriOS/i.test(navigator.userAgent) &&\r\n /iphone|ipod|ipad/i.test(navigator.userAgent)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private _isIE(): boolean {\r\n // DETECTION FUNCTION SOURCE:\r\n // https://www.w3docs.com/snippets/javascript/how-to-detect-internet-explorer-in-javascript.html\r\n\r\n // detects if user is using Internet Explorer\r\n // returns version of IE or false, if browser is not IE\r\n // Function to detect IE or not\r\n // tslint:disable-next-line: typedef function-name\r\n function IEdetection() {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof navigator !== 'undefined') {\r\n\r\n // tslint:disable-next-line: no-var-keyword prefer-const\r\n var ua = navigator.userAgent;\r\n // tslint:disable-next-line: no-var-keyword prefer-const\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older, return version number\r\n // tslint:disable-next-line: prefer-template restrict-plus-operands\r\n return (`IE ${ parseInt(ua.substring(\r\n // tslint:disable-next-line: align\r\n msie + 5, ua.indexOf('.', msie)), 10)}`);\r\n }\r\n\r\n // tslint:disable-next-line: no-var-keyword prefer-const\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11, return version number\r\n // tslint:disable-next-line: prefer-const no-var-keyword\r\n var rv = ua.indexOf('rv:');\r\n // tslint:disable-next-line: prefer-template restrict-plus-operands\r\n return (`IE ${ parseInt(ua.substring(\r\n // tslint:disable-next-line: align\r\n rv + 3, ua.indexOf('.', rv)), 10)}`);\r\n }\r\n }\r\n\r\n // User uses other browser\r\n return ('Not IE');\r\n }\r\n\r\n return IEdetection() !== 'Not IE';\r\n }\r\n}\r\n\r\nexport default IeOnlyMessage;\r\n","import { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { IProductContainerData } from './product-container.data';\r\nimport { IProductContainerProps } from './product-container.props.autogenerated';\r\n\r\n/**\r\n *\r\n * ProductContainer component\r\n * @extends {React.Component>}\r\n */\r\nclass ProductContainer extends React.Component> {\r\n // =========================================================================\r\n // MODULE-WIDE CONSTANTS\r\n // =========================================================================\r\n private productTypeName: string = 'PRODUCT TYPE';\r\n\r\n // =========================================================================\r\n // PUBLIC METHODS\r\n // =========================================================================\r\n\r\n // ------------------------------------------------------\r\n // ------------------------------------------------------\r\n public render(): JSX.Element | null {\r\n const { config, slots } = this.props;\r\n const hasSlots = slots && slots.contentBlock && slots.contentBlock.length;\r\n const productAttributes = this.props.data.productAttributes.result;\r\n if (!productAttributes) {\r\n return null;\r\n }\r\n const productAttribute = productAttributes.find(\r\n attribute =>\r\n attribute.Name!.toUpperCase() === this.productTypeName\r\n );\r\n\r\n if (productAttribute && !this._productTypeCheck(productAttribute)) {\r\n return null;\r\n } else {\r\n const productTypeClass = productAttribute && productAttribute.TextValue ? productAttribute.TextValue.replace(/\\s+/g, '-').toLowerCase() : '';\r\n return (\r\n
\r\n {hasSlots && this._renderSlotItems(slots.contentBlock)}\r\n
\r\n );\r\n }\r\n }\r\n\r\n // =========================================================================\r\n // PRIVATE METHODS\r\n // =========================================================================\r\n\r\n // ------------------------------------------------------\r\n // Returns boolean for showing container based on comparison between product attribute product type and config filter\r\n // ------------------------------------------------------\r\n private _productTypeCheck(productAttribute: AttributeValue): boolean {\r\n const { config } = this.props;\r\n let showContainer;\r\n if (config.filterType === 'exclude') {\r\n showContainer = true;\r\n config.productTypes?.forEach(productType => {\r\n if (productType === productAttribute.TextValue) {\r\n showContainer = false;\r\n }\r\n });\r\n } else {\r\n // filter type include\r\n showContainer = false;\r\n config.productTypes?.forEach(productType => {\r\n if (productType === productAttribute.TextValue) {\r\n showContainer = true;\r\n }\r\n });\r\n }\r\n return showContainer;\r\n }\r\n\r\n // ------------------------------------------------------\r\n // ------------------------------------------------------\r\n private _renderSlotItems(items: React.ReactNode[]): JSX.Element {\r\n return (\r\n
\r\n {items.map((slot: React.ReactNode, index: number) => (\r\n \r\n {slot}\r\n \r\n ))}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ProductContainer;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IScrollEventManager contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface IScrollEventManagerConfig extends Msdyn365.IModuleConfig {\r\n topOffset?: number;\r\n bottomOffset?: number;\r\n events?: IEventsData[];\r\n}\r\n\r\nexport const enum EventsPosition {\r\n onScreen = 'onScreen',\r\n onScreenAbove = 'onScreenAbove',\r\n onScreenBelow = 'onScreenBelow',\r\n offScreen = 'offScreen',\r\n offScreenAbove = 'offScreenAbove',\r\n offScreenBelow = 'offScreenBelow'\r\n}\r\n\r\nexport const enum EventsAction {\r\n add = 'add',\r\n remove = 'remove'\r\n}\r\n\r\nexport interface IEventsData {\r\n position: EventsPosition;\r\n triggerClass: string;\r\n offset?: number;\r\n targetClass: string;\r\n action: EventsAction;\r\n actionClass: string;\r\n bidirectional?: boolean;\r\n}\r\n\r\nexport interface IScrollEventManagerProps extends Msdyn365.IModule {\r\n config: IScrollEventManagerConfig;\r\n}\r\n","// =============================================================================\r\n// Scroll Event Manager\r\n//\r\n// Applies classes dynamically, based on scroll position\r\n// =============================================================================\r\nimport throttle from 'lodash/throttle';\r\nimport * as React from 'react';\r\n\r\nimport { IDictionary } from '@msdyn365-commerce/core';\r\nimport { IScrollEventManagerData } from './scroll-event-manager.data';\r\nimport { EventsAction, EventsPosition, IEventsData, IScrollEventManagerProps } from './scroll-event-manager.props.autogenerated';\r\n\r\n// =============================================================================\r\n// INTERFACES AND CONSTANTS\r\n// =============================================================================\r\ninterface IAction {\r\n target: HTMLCollectionOf;\r\n action: string;\r\n className: string;\r\n}\r\n\r\ninterface IExtents {\r\n top: number;\r\n bottom: number;\r\n}\r\n\r\n// Only vaguely useful enum -- prevents typos and provides a thin isolation layer\r\nconst enum ElementPositions {\r\n above = 'above',\r\n below = 'below',\r\n visible = 'visible',\r\n missing = 'missing',\r\n}\r\n\r\n// ==============================================================================\r\n// CLASS DEFINITION\r\n// ==============================================================================\r\n/**\r\n * ScrollEventManager component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass ScrollEventManager extends React.PureComponent> {\r\n\r\n // Current Triggered state\r\n private eventState: boolean[] = [];\r\n\r\n // Cached list of elements that are the trigger or target of an event\r\n private elements: IDictionary> = {};\r\n\r\n // Throttled event handler\r\n private throttledScrollhandler: () => void;\r\n\r\n // Copy of the event list\r\n private eventList: IEventsData[] = [];\r\n\r\n // =============================================================================\r\n // PUBLIC METHODS\r\n // =============================================================================\r\n\r\n // --------------------------------------------------------------\r\n // Constructor\r\n // --------------------------------------------------------------\r\n constructor(props: IScrollEventManagerProps) {\r\n super(props);\r\n\r\n // Throttle the event handler to prevent event overloading\r\n this.throttledScrollhandler = throttle(this._scrollHandler.bind(this), 50);\r\n\r\n // Copy the supplied event list, adding any extras requested\r\n this._createEventList(this.props.config.events || []);\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Attach event handler\r\n // --------------------------------------------------------------\r\n public componentDidMount(): void {\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n\r\n window && window.addEventListener &&\r\n window.addEventListener('scroll', this.throttledScrollhandler);\r\n\r\n // Trigger any initial events\r\n this._scrollHandler();\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Detach event handler\r\n // --------------------------------------------------------------\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener &&\r\n window.removeEventListener('scroll', this.throttledScrollhandler);\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Required, but doesn't do anything\r\n // --------------------------------------------------------------\r\n public render(): null {\r\n return null;\r\n }\r\n\r\n // =============================================================================\r\n // PRIVATE METHODS\r\n // =============================================================================\r\n\r\n // --------------------------------------------------------------\r\n // Copy the supplied event list, generating extra events for\r\n // all events flagged as bidirectional.\r\n // --------------------------------------------------------------\r\n private _createEventList(events: IEventsData[]): void {\r\n\r\n const eventOpposites = {\r\n onScreen: EventsPosition.offScreen,\r\n onScreenAbove: EventsPosition.offScreenBelow,\r\n onScreenBelow: EventsPosition.offScreenAbove,\r\n offScreen: EventsPosition.onScreen,\r\n offScreenAbove: EventsPosition.onScreenBelow,\r\n offScreenBelow: EventsPosition.onScreenAbove\r\n };\r\n\r\n // Step through the event list\r\n events.forEach(event => {\r\n\r\n // Add the primary event\r\n this.eventList.push(event);\r\n\r\n // Check to see if we need an opposite event\r\n if (event.bidirectional) {\r\n\r\n const cloned = { ...event };\r\n\r\n // Flip the action\r\n cloned.action = (event.action === EventsAction.add) ? EventsAction.remove : EventsAction.add;\r\n\r\n // Flip the trigger type\r\n cloned.position = eventOpposites[event.position];\r\n\r\n // Add the cloned event\r\n this.eventList.push(cloned);\r\n }\r\n });\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Main top-level functionality: Watch for scroll events, and\r\n // trigger the appropriate actions when necessary\r\n // --------------------------------------------------------------\r\n private _scrollHandler(): void {\r\n const events = this.eventList;\r\n\r\n if (!events || !events.length) {\r\n return;\r\n }\r\n\r\n // Ensure elements have been cached\r\n this._getElements(events);\r\n\r\n // Create a running list of actions, with redundant ones removed.\r\n // Some will supercede others, so keep a list instead of acting immediately.\r\n const actionList: IDictionary = {};\r\n\r\n // Step through the event list\r\n events.forEach((event, index) => {\r\n\r\n // Get the position of the trigger element\r\n const position = this._getPosition(event.triggerClass, event.offset || 0);\r\n\r\n // Ensure required elements exist in the DOM, then\r\n // determine if the new position matches the event trigger\r\n if ((position !== ElementPositions.missing) && this._isEventTriggered(position, event.position, index)) {\r\n\r\n // Add the requested action to our list, replacing any other actions that may now be redundant\r\n this._addAction(actionList, event);\r\n }\r\n });\r\n\r\n // Perform any actions\r\n this._performActions(actionList);\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Looks for any classes that we haven't tied to elements yet\r\n // --------------------------------------------------------------\r\n private _getElements(events: IEventsData[]): void {\r\n\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if ((typeof document !== 'undefined') && events && events.length) {\r\n\r\n // Each event entry has two separate selectors (there are 3 classes, but one isn't used as a selector)\r\n events.forEach(entry => {\r\n this._addElement(entry.triggerClass); // This needs to match a single element only (more matches will be ignored)\r\n this._addElement(entry.targetClass); // This can match multiple elements\r\n });\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // For a single className, lookup and cache the element if we\r\n // haven't already done so.\r\n // --------------------------------------------------------------\r\n private _addElement(selector: string): void {\r\n\r\n // Check if the element has been located yet\r\n if (selector && !this.elements[selector]) {\r\n // Still unknown -- try to find it now\r\n this.elements[selector] = document.getElementsByClassName(selector);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Returns the current position of the selected element, relative\r\n // to the screen.\r\n //\r\n // NOTE: Returning an enum would be better TypeScript, but the value\r\n // is used with objects, which don't play nice with enums.\r\n // --------------------------------------------------------------\r\n private _getPosition(selector: string, offset: number): string {\r\n\r\n if (!selector || !this.elements[selector] || !this.elements[selector].length) {\r\n return ElementPositions.missing; // Arbitrary value -- none are correct if elements haven't been loaded yet\r\n }\r\n\r\n // Get the element's top and bottom position\r\n const elementExtents = this._getElementExtents(this.elements[selector][0], offset); // There could be more than one match of the trigger element, but we're ignoring extras\r\n\r\n // Get the window's top and bottom position\r\n const windowExtents = this._getWindowExtents();\r\n\r\n // Compare them for a result\r\n if (elementExtents.bottom < windowExtents.top) {\r\n return ElementPositions.above;\r\n }\r\n\r\n if (elementExtents.top > windowExtents.bottom) {\r\n return ElementPositions.below;\r\n }\r\n\r\n return ElementPositions.visible;\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Checks a single event definition to see if it has been newly\r\n // triggered.\r\n // --------------------------------------------------------------\r\n private _isEventTriggered(currentPosition: string, targetPosition: string, index: number): boolean {\r\n\r\n // Converts between three-state position and Target Position values\r\n const positionMap: IDictionary> = {\r\n onScreen: {\r\n visible: true,\r\n },\r\n onScreenAbove: {\r\n visible: true,\r\n above: true,\r\n },\r\n onScreenBelow: {\r\n visible: true,\r\n below: true,\r\n },\r\n offScreen: {\r\n above: true,\r\n below: true,\r\n },\r\n offScreenAbove: {\r\n above: true,\r\n },\r\n offScreenBelow: {\r\n below: true,\r\n },\r\n };\r\n\r\n const isTriggered: boolean = positionMap[targetPosition][currentPosition];\r\n\r\n // Check for a state change\r\n // tslint:disable-next-line: triple-equals\r\n if (this.eventState[index] !== isTriggered) {\r\n\r\n // Update the stored state\r\n this.eventState[index] = isTriggered;\r\n\r\n // Determine if we should notify the caller of the change\r\n // If we just transitioned into a triggered state, Notify (return true)\r\n // If we just transitioned into a non-triggered state, keep quiet.\r\n return isTriggered;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Add an action to our running action list\r\n // Overwrites redundant actions\r\n // --------------------------------------------------------------\r\n private _addAction(actionList: IDictionary, event: IEventsData): void {\r\n\r\n if (event.targetClass && event.actionClass &&\r\n this.elements[event.targetClass] && this.elements[event.targetClass].length) {\r\n\r\n // Unique actions consist of both a selector and class\r\n const eventIdentifier = `${event.targetClass}-${event.actionClass}`;\r\n\r\n // Store the event, possibly overwriting other redundant events\r\n actionList[eventIdentifier] = {\r\n target: this.elements[event.targetClass], // There could be more than one, which is valid here.\r\n action: event.action,\r\n className: event.actionClass\r\n };\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Process all of the actions in our action list\r\n // --------------------------------------------------------------\r\n private _performActions(actionList: IDictionary): void {\r\n\r\n // Step through the action list\r\n Object.values(actionList).forEach(action => {\r\n\r\n // Determine the appropriate function\r\n const actionFunction = (action.action === EventsAction.add) ? 'add' : 'remove';\r\n\r\n // Allow multiple classes to be added or removed at the same time\r\n const classList = action.className.split(',').map(entry => entry.trim());\r\n\r\n // Peform the action\r\n for (let index = 0; index < action.target.length; index++) {\r\n action.target[index].classList[actionFunction](...classList);\r\n }\r\n });\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Determine the top and bottom coordinates of the viewport\r\n // --------------------------------------------------------------\r\n private _getWindowExtents(): IExtents {\r\n\r\n const topOffset: number = this.props.config.topOffset || 0;\r\n const bottomOffset: number = this.props.config.bottomOffset || 0;\r\n\r\n // Get the current scroll position\r\n // @ts-ignore\r\n const scrollPos: number = (window.pageYOffset !== undefined) ? window.pageYOffset : window.scrollTop;\r\n\r\n // Get the viewport height\r\n const viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\r\n\r\n return {\r\n top: scrollPos + topOffset,\r\n bottom: scrollPos + viewportHeight - bottomOffset,\r\n };\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Determine the top and bottom coordinates of the viewport\r\n //\r\n // We'll use the offset to shift the element's location.\r\n // Logically, it would probably be better to process the offset\r\n // during the viewport and element comparison, but it's cleaner\r\n // and simpler here.\r\n // --------------------------------------------------------------\r\n private _getElementExtents(element: Element, offset: number): IExtents {\r\n\r\n const top = this._getElementTop(element);\r\n\r\n return {\r\n top: top + offset,\r\n bottom: top + element.clientHeight + offset,\r\n };\r\n }\r\n\r\n // --------------------------------------------------------------\r\n // Find the top coordinate of an element, in relation to the page\r\n //\r\n // Adapted from react-animate-on-scroll by dbramwell.\r\n // --------------------------------------------------------------\r\n private _getElementTop(element: Element): number {\r\n\r\n let yPos = 0;\r\n let elm: (HTMLElement | null) = element as HTMLElement;\r\n\r\n while (elm && elm.offsetTop !== undefined && elm.clientTop !== undefined) {\r\n yPos += (elm.offsetTop + elm.clientTop);\r\n elm = elm.offsetParent as HTMLElement;\r\n }\r\n\r\n return yPos;\r\n }\r\n\r\n}\r\n\r\nexport default ScrollEventManager;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport * as React from 'react';\r\n\r\n /**\r\n * CoreComponent component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\nclass Blend extends React.PureComponent {\r\n constructor(props: {}) {\r\n super(props);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return