{"version":3,"sources":["../node_modules/prop-types/index.js","../node_modules/react/index.js","../node_modules/classnames/index.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/@babel/runtime/helpers/extends.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/react-popper/lib/Manager.js","../node_modules/react-popper/lib/Target.js","../node_modules/react-popper/lib/Popper.js","../node_modules/react-popper/lib/Arrow.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../../src/utils.js","../../src/Container.js","../../src/Row.js","../../src/Col.js","../../src/Navbar.js","../../src/NavbarBrand.js","../../src/NavbarToggler.js","../../src/Nav.js","../../src/NavItem.js","../../src/Dropdown.js","../../src/NavLink.js","../../src/Breadcrumb.js","../../src/BreadcrumbItem.js","../../src/Button.js","../../src/ButtonDropdown.js","../../src/ButtonGroup.js","../../src/ButtonToolbar.js","../../src/DropdownItem.js","../../src/DropdownMenu.js","../../src/DropdownToggle.js","../../node_modules/react-transition-group/utils/PropTypes.js","../../node_modules/react-transition-group/Transition.js","../../src/Fade.js","../../src/Badge.js","../../src/Card.js","../../src/CardGroup.js","../../src/CardDeck.js","../../src/CardColumns.js","../../src/CardBody.js","../../src/CardLink.js","../../src/CardFooter.js","../../src/CardHeader.js","../../src/CardImg.js","../../src/CardImgOverlay.js","../../src/CarouselItem.js","../../src/Carousel.js","../../src/CarouselControl.js","../../src/CarouselIndicators.js","../../src/CarouselCaption.js","../../src/UncontrolledCarousel.js","../../src/CardSubtitle.js","../../src/CardText.js","../../src/CardTitle.js","../../src/CustomInput.js","../../src/PopperContent.js","../../src/PopperTargetHelper.js","../../src/Popover.js","../../src/PopoverHeader.js","../../src/PopoverBody.js","../../src/Progress.js","../../src/Portal.js","../../src/Modal.js","../../src/ModalHeader.js","../../src/ModalBody.js","../../src/ModalFooter.js","../../src/Tooltip.js","../../src/Table.js","../../src/ListGroup.js","../../src/Form.js","../../src/FormFeedback.js","../../src/FormGroup.js","../../src/FormText.js","../../src/Input.js","../../src/InputGroup.js","../../src/InputGroupText.js","../../src/InputGroupAddon.js","../../src/InputGroupButton.js","../../src/InputGroupButtonDropdown.js","../../src/Label.js","../../src/Media.js","../../src/Pagination.js","../../src/PaginationItem.js","../../src/PaginationLink.js","../../src/TabContent.js","../../src/TabPane.js","../../src/Jumbotron.js","../../src/Alert.js","../../src/Collapse.js","../../src/ListGroupItem.js","../../src/ListGroupItemHeading.js","../../src/ListGroupItemText.js","../../src/UncontrolledAlert.js","../../src/UncontrolledButtonDropdown.js","../../src/UncontrolledCollapse.js","../../src/UncontrolledDropdown.js","../../src/UncontrolledTooltip.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/inheritsLoose.js","../node_modules/warning/warning.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/invariant/browser.js","../node_modules/openseadragon/build/openseadragon/openseadragon.js","../node_modules/react-dom/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","../node_modules/react-lazy-load-image-component/build/index.js","../node_modules/fast-deep-equal/index.js","../node_modules/webpack/buildin/global.js","../../../src/utils/isBrowser.js","../../../src/utils/debounce.js","../../../src/utils/isFunction.js","../../../src/utils/getStyleComputedProperty.js","../../../src/utils/getParentNode.js","../../../src/utils/getScrollParent.js","../../../src/utils/getReferenceNode.js","../../../src/utils/isIE.js","../../../src/utils/getOffsetParent.js","../../../src/utils/getRoot.js","../../../src/utils/findCommonOffsetParent.js","../../../src/utils/isOffsetContainer.js","../../../src/utils/getScroll.js","../../../src/utils/includeScroll.js","../../../src/utils/getBordersSize.js","../../../src/utils/getWindowSizes.js","../../../src/utils/getClientRect.js","../../../src/utils/getBoundingClientRect.js","../../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../../src/utils/isFixed.js","../../../src/utils/getFixedPositionOffsetParent.js","../../../src/utils/getBoundaries.js","../../../src/utils/computeAutoPlacement.js","../../../src/utils/getReferenceOffsets.js","../../../src/utils/getOuterSizes.js","../../../src/utils/getOppositePlacement.js","../../../src/utils/getPopperOffsets.js","../../../src/utils/find.js","../../../src/utils/runModifiers.js","../../../src/utils/findIndex.js","../../../src/methods/update.js","../../../src/utils/isModifierEnabled.js","../../../src/utils/getSupportedPropertyName.js","../../../src/methods/destroy.js","../../../src/utils/getWindow.js","../../../src/utils/setupEventListeners.js","../../../src/methods/enableEventListeners.js","../../../src/methods/disableEventListeners.js","../../../src/utils/removeEventListeners.js","../../../src/utils/isNumeric.js","../../../src/utils/setStyles.js","../../../src/modifiers/computeStyle.js","../../../src/utils/isModifierRequired.js","../../../src/methods/placements.js","../../../src/utils/clockwise.js","../../../src/modifiers/flip.js","../../../src/modifiers/offset.js","../../../src/modifiers/index.js","../../../src/methods/defaults.js","../../../src/modifiers/shift.js","../../../src/modifiers/preventOverflow.js","../../../src/modifiers/keepTogether.js","../../../src/modifiers/arrow.js","../../../src/utils/getOppositeVariation.js","../../../src/modifiers/inner.js","../../../src/modifiers/hide.js","../../../src/utils/getRoundedOffsets.js","../../../src/modifiers/applyStyle.js","../../../src/utils/setAttributes.js","../../../src/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/function-bind/index.js","../node_modules/define-properties/index.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/resolve-pathname/esm/resolve-pathname.js","../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","../node_modules/history/esm/history.js","../node_modules/has-symbols/index.js","../node_modules/lodash.isobject/index.js","../node_modules/lodash.tonumber/index.js","../../src/FileSaver.js","../node_modules/create-react-context/lib/index.js","../node_modules/@restart/hooks/esm/usePrevious.js","../node_modules/react-bootstrap-typeahead/es/constants.js","../node_modules/react-bootstrap-typeahead/es/utils/getStringLabelKey.js","../node_modules/react-bootstrap-typeahead/es/utils/nodash.js","../node_modules/react-bootstrap-typeahead/es/utils/getOptionLabel.js","../node_modules/react-bootstrap-typeahead/es/utils/addCustomOption.js","../node_modules/react-bootstrap-typeahead/es/utils/getOptionProperty.js","../node_modules/react-bootstrap-typeahead/es/utils/stripDiacritics.js","../node_modules/react-bootstrap-typeahead/es/utils/warn.js","../node_modules/react-bootstrap-typeahead/es/utils/defaultFilterBy.js","../node_modules/react-bootstrap-typeahead/es/utils/getDisplayName.js","../node_modules/react-bootstrap-typeahead/es/utils/getMatchBounds.js","../node_modules/react-bootstrap-typeahead/es/utils/getHintText.js","../node_modules/react-bootstrap-typeahead/es/utils/getMenuItemId.js","../node_modules/react-bootstrap-typeahead/es/utils/getInputProps.js","../node_modules/react-bootstrap-typeahead/es/utils/getInputText.js","../node_modules/react-bootstrap-typeahead/es/utils/getIsOnlyResult.js","../node_modules/react-bootstrap-typeahead/es/utils/getTruncatedOptions.js","../node_modules/react-bootstrap-typeahead/es/utils/getUpdatedActiveIndex.js","../node_modules/react-bootstrap-typeahead/es/utils/isSelectable.js","../node_modules/react-bootstrap-typeahead/es/utils/preventInputBlur.js","../node_modules/react-bootstrap-typeahead/es/utils/size.js","../node_modules/react-bootstrap-typeahead/es/core/Context.js","../node_modules/react-bootstrap-typeahead/es/core/TypeaheadManager.js","../node_modules/react-bootstrap-typeahead/es/propTypes.js","../node_modules/react-bootstrap-typeahead/es/core/Typeahead.js","../node_modules/react-bootstrap-typeahead/es/utils/validateSelectedPropChange.js","../node_modules/react-bootstrap-typeahead/es/utils/isShown.js","../node_modules/react-bootstrap-typeahead/es/behaviors/async.js","../node_modules/@restart/hooks/esm/useForceUpdate.js","../node_modules/react-overlays/node_modules/dom-helpers/esm/canUseDOM.js","../node_modules/react-overlays/node_modules/dom-helpers/esm/addEventListener.js","../node_modules/react-overlays/node_modules/dom-helpers/esm/removeEventListener.js","../node_modules/react-overlays/node_modules/dom-helpers/esm/listen.js","../node_modules/@restart/hooks/esm/useCommittedRef.js","../node_modules/@restart/hooks/esm/useEventCallback.js","../node_modules/react-overlays/esm/ownerDocument.js","../node_modules/react-overlays/node_modules/dom-helpers/esm/ownerDocument.js","../node_modules/react-overlays/esm/safeFindDOMNode.js","../node_modules/react-overlays/esm/useRootClose.js","../node_modules/react-overlays/node_modules/dom-helpers/esm/contains.js","../node_modules/react-bootstrap-typeahead/es/components/ClearButton.js","../node_modules/react-bootstrap-typeahead/es/components/Loader.js","../node_modules/react-bootstrap-typeahead/node_modules/react-popper/lib/esm/Manager.js","../node_modules/react-bootstrap-typeahead/node_modules/react-popper/lib/esm/utils.js","../node_modules/react-bootstrap-typeahead/node_modules/react-popper/lib/esm/Popper.js","../node_modules/react-bootstrap-typeahead/es/components/Overlay.js","../node_modules/react-bootstrap-typeahead/es/behaviors/token.js","../node_modules/react-bootstrap-typeahead/es/components/Token.js","../node_modules/react-bootstrap-typeahead/es/components/Hint.js","../node_modules/react-bootstrap-typeahead/es/components/Input.js","../node_modules/react-bootstrap-typeahead/es/behaviors/classNames.js","../node_modules/react-bootstrap-typeahead/es/components/TypeaheadInputMulti.js","../node_modules/react-bootstrap-typeahead/es/components/TypeaheadInputSingle.js","../node_modules/react-bootstrap-typeahead/es/components/Highlighter.js","../../src/index.ts","../node_modules/scroll-into-view-if-needed/es/index.js","../node_modules/react-bootstrap-typeahead/es/behaviors/item.js","../node_modules/react-bootstrap-typeahead/es/components/MenuItem.js","../node_modules/react-bootstrap-typeahead/es/components/Menu.js","../node_modules/react-bootstrap-typeahead/es/components/TypeaheadMenu.js","../node_modules/react-bootstrap-typeahead/es/components/Typeahead.js","../node_modules/react-bootstrap-typeahead/es/components/AsyncTypeahead.js","../node_modules/object-assign/index.js","../node_modules/object-keys/index.js","../node_modules/object-keys/isArguments.js","../node_modules/get-intrinsic/index.js","../node_modules/call-bind/index.js","../node_modules/object-is/implementation.js","../node_modules/object-is/polyfill.js","../node_modules/regexp.prototype.flags/implementation.js","../node_modules/regexp.prototype.flags/polyfill.js","../node_modules/lodash.isfunction/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/react-highlight-words/dist/main.js","../node_modules/lodash.debounce/index.js","../node_modules/deep-equal/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/object-keys/implementation.js","../node_modules/is-arguments/index.js","../node_modules/call-bind/callBound.js","../node_modules/has-symbols/shams.js","../node_modules/function-bind/implementation.js","../node_modules/has/src/index.js","../node_modules/object-is/index.js","../node_modules/object-is/shim.js","../node_modules/is-regex/index.js","../node_modules/regexp.prototype.flags/index.js","../node_modules/regexp.prototype.flags/node_modules/es-abstract/helpers/callBind.js","../node_modules/regexp.prototype.flags/node_modules/es-abstract/GetIntrinsic.js","../node_modules/regexp.prototype.flags/shim.js","../node_modules/is-date-object/index.js","../node_modules/create-react-context/lib/implementation.js","../node_modules/gud/index.js","../node_modules/isarray/index.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js"],"names":["module","exports","require","hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","key","call","join","default","obj","value","Object","defineProperty","enumerable","configurable","writable","_extends","assign","target","source","prototype","this","self","ReferenceError","excluded","sourceKeys","keys","indexOf","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","TypeError","_possibleConstructorReturn","Manager","_Component","_ref","_temp","_this","_len","args","_key","__proto__","getPrototypeOf","concat","_setTargetNode","node","_targetNode","_getTargetNode","subClass","superClass","create","constructor","setPrototypeOf","_inherits","popperManager","setTargetNode","getTargetNode","_props","tag","children","restProps","_objectWithoutProperties","createElement","Component","childContextTypes","PropTypes","object","isRequired","propTypes","oneOfType","string","bool","func","defaultProps","Target","context","_props$component","component","undefined","innerRef","targetRef","targetProps","ref","componentProps","contextTypes","placements","PopperJS","Popper","state","_setArrowNode","_arrowNode","Error","_getOffsets","data","offsets","map","_isDataDirty","JSON","stringify","_updateStateModifier","enabled","order","fn","setState","_getPopperStyle","_popper","position","popper","styles","pointerEvents","opacity","_getPopperPlacement","placement","_getPopperHide","hide","_getArrowStyle","arrow","_this$state$data$offs","top","left","_handlePopperRef","_popperNode","_createPopper","_destroyPopper","_scheduleUpdate","scheduleUpdate","setArrowNode","getArrowStyle","lastProps","eventsEnabled","_this2","positionFixed","modifiers","applyStyle","updateState","element","setTimeout","destroy","_props2","popperStyle","popperPlacement","popperHide","popperProps","style","oneOf","instanceOf","Element","shape","getBoundingClientRect","clientWidth","number","clientHeight","Arrow","arrowRef","arrowStyle","arrowProps","componentWillMount","getDerivedStateFromProps","componentWillReceiveProps","nextProps","prevState","bind","componentWillUpdate","nextState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","__suppressDeprecationWarning","getScrollbarWidth","scrollDiv","document","scrollbarWidth","setScrollbarWidth","padding","isBodyOverflowing","window","getOriginalBodyPadding","parseInt","conditionallyUpdateScrollbar","fixedContent","bodyPadding","globalCssModule","mapToCssModules","className","cssModule","c","omit","omitKeys","result","pick","pickKeys","warned","warnOnce","message","console","deprecated","propType","explanation","propName","componentName","rest","DOMElement","targetPropType","current","TransitionTimeouts","TransitionPropTypeKeys","TransitionStatuses","keyCodes","PopperPlacements","canUseDOM","isReactRefObj","findDOMElements","isFunction","selection","isArrayOrNodeList","els","getTarget","defaultToggleEvents","addMultipleEventListeners","_els","handler","_events","events","focusableElements","Container","fluid","Tag","attributes","Row","noGutters","form","stringOrNumberProp","columnProps","array","getColumnSizeClass","isXs","colWidth","colSize","Col","widths","colClasses","columnProp","isobject","colSizeInterfix","colClass","toggleableToExpand","Navbar","toggleable","expand","light","dark","inverse","fixed","sticky","color","getExpandClass","getToggleableClass","NavbarBrand","NavbarToggler","Nav","tabs","pills","vertical","horizontal","justified","fill","navbar","card","getVerticalClass","NavItem","active","Dropdown","direction","inNavbar","isOpen","ReactDOM","event","e","container","test","menuClass","itemClass","disabledClass","items","index","charPressed","String","firstLetter","toggle","dropup","group","size","nav","setActiveFromChild","addonType","attrs","subItemIsActive","dropdownItem","onKeyDown","React","any","NavLink","href","onClick","Breadcrumb","listClassName","ListTag","label","listClasses","aria-label","BreadcrumbItem","aria-current","Button","ariaLabel","block","close","outline","aria-hidden","btnOutlineColor","disabled","defaultAriaLabel","ButtonDropdown","ButtonGroup","ButtonToolbar","DropdownItem","tabIndex","divider","header","noFlipModifier","flip","directionPositionMap","DropdownMenu","right","persist","position1","position2","DropdownToggle","caret","split","timeoutPropName","transitionType","enabledPropName","_propTypes2","newObj","_interopRequireWildcard","_react2","_interopRequireDefault","_reactDom2","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","parentGroup","appear","initialStatus","status","transitionGroup","pendingState","timeout","exit","enter","mounting","nextStatus","unmountOnExit","appearing","timeouts","_this3","nextCallback","callback","_this4","setNextCallback","_this5","childProps","child","noop","Fade","baseClass","baseClassActive","otherProps","transitionProps","isActive","Badge","pill","Card","body","CardGroup","CardDeck","CardColumns","CardBody","CardLink","CardFooter","CardHeader","CardImg","bottom","cardImgClassName","CardImgOverlay","CarouselItem","isAppearing","startAnimation","offsetHeight","CustomEvent","isIn","slide","onExited","directionClassName","orderClassName","itemClasses","Carousel","ride","activeIndex","indicatorClicked","setInterval","pause","evt","carouselItems","role","outerClasses","innerClasses","filter","every","onMouseEnter","onMouseLeave","controlLeft","controlRight","indicators","wrappedIndicators","onClickHandler","CarouselControl","directionText","anchorClasses","iconClasses","screenReaderClasses","CarouselIndicators","indicatorClasses","item","CarouselCaption","captionHeader","captionText","UncontrolledCarousel","nextIndex","newIndex","autoPlay","controls","goToIndex","slides","src","alt","previous","next","CardSubtitle","CardText","CardTitle","PopperContent","_element","childNodes","offset","fallbackPlacement","placementPrefix","_arrowClassName","hideArrow","boundariesElement","arrowClassName","popperClassName","extendedModifiers","behavior","handlePlacementChange","x-placement","PopperTargetHelper","show","DEFAULT_DELAYS","Popover","delay","isNaN","getDelay","_target","contains","_popover","popperClasses","PopoverHeader","PopoverBody","Progress","barClassName","max","animated","striped","bar","multi","percent","toNumber","progressClasses","progressBarClasses","ProgressBar","width","Portal","FadePropTypes","propsToOmit","Modal","autoFocus","modalTransition","onEntered","_dialog","parentNode","querySelectorAll","currentFocus","focusableChildren","err","backdrop","totalFocusable","focusedIndex","focus","_triggeringElement","modalOpenClassName","modalOpenClassNameRegex","RegExp","dialogBaseClass","wrapClassName","modalClassName","backdropClassName","labelledBy","external","modalAttributes","display","hasTransition","backdropTransition","Backdrop","ModalHeader","closeButton","WrapTag","closeAriaLabel","charCode","closeIcon","type","ModalBody","ModalFooter","Tooltip","triggers","trigger","onEscKeyDown","Table","bordered","borderless","hover","responsive","ResponsiveTag","table","responsiveClassName","ListGroup","flush","Form","inline","FormFeedback","valid","tooltip","validMode","FormGroup","row","check","FormText","Input","bsSize","invalid","addon","staticInput","plaintext","checkInput","isNotaNumber","formControlClass","InputGroup","InputGroupText","InputGroupAddon","Label","hidden","htmlFor","Pagination","PaginationItem","PaginationLink","defaultCaret","TabContent","activeTab","isReactComponent","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","displayName","name","newApiName","componentDidUpdate","maybeSnapshot","snapshot","polyfill","TabPane","tabId","Jumbotron","Alert","closeClassName","transition","fade","closeClasses","alertTransition","in","Collapse","transitionStatusToClassHash","getHeight","height","collapseClass","getTransitionClass","handleDisabledOnClick","ListGroupItem","action","ListGroupItemHeading","ListGroupItemText","UncontrolledAlert","UncontrolledButtonDropdown","UncontrolledCollapse","togglers","UncontrolledDropdown","UncontrolledTooltip","_assertThisInitialized","warning","_defineProperties","_getPrototypeOf","o","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","_typeof","Symbol","iterator","assertThisInitialized","_createSuper","Derived","Super","NewTarget","_setPrototypeOf","p","condition","format","a","b","d","f","error","argIndex","replace","framesToPop","$","OpenSeadragon","options","Viewer","version","versionStr","major","minor","revision","class2type","isWindow","isPlainObject","nodeType","lastKey","isEmptyObject","freezeObject","freeze","supportsCanvas","canvasElement","getContext","isCanvasTainted","canvas","isTainted","getImageData","pixelDensityRatio","devicePixelRatio","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","Math","extend","copy","copyIsArray","clone","deep","isIOSDevice","navigator","userAgent","DEFAULT_SETTINGS","xmlPath","tileSources","tileHost","initialPage","crossOriginPolicy","ajaxWithCredentials","loadTilesWithAjax","ajaxHeaders","panHorizontal","panVertical","constrainDuringPan","wrapHorizontal","wrapVertical","visibilityRatio","minPixelRatio","defaultZoomLevel","minZoomLevel","maxZoomLevel","homeFillsViewer","clickTimeThreshold","clickDistThreshold","dblClickTimeThreshold","dblClickDistThreshold","springStiffness","animationTime","gestureSettingsMouse","scrollToZoom","clickToZoom","dblClickToZoom","pinchToZoom","zoomToRefPoint","flickEnabled","flickMinSpeed","flickMomentum","pinchRotate","gestureSettingsTouch","gestureSettingsPen","gestureSettingsUnknown","zoomPerClick","zoomPerScroll","zoomPerSecond","blendTime","alwaysBlend","autoHideControls","immediateRender","minZoomImageRatio","maxZoomPixelRatio","smoothTileEdgesMinZoom","iOSDevice","pixelsPerWheelLine","pixelsPerArrowPress","autoResize","preserveImageSizeOnResize","minScrollDeltaTime","rotationIncrement","showSequenceControl","sequenceControlAnchor","preserveViewport","preserveOverlays","navPrevNextWrap","showNavigationControl","navigationControlAnchor","showZoomControl","showHomeControl","showFullPageControl","showRotationControl","showFlipControl","controlsFadeDelay","controlsFadeLength","mouseNavEnabled","showNavigator","navigatorId","navigatorPosition","navigatorSizeRatio","navigatorMaintainSizeRatio","navigatorTop","navigatorLeft","navigatorHeight","navigatorWidth","navigatorAutoResize","navigatorAutoFade","navigatorRotate","navigatorBackground","navigatorOpacity","navigatorBorderColor","navigatorDisplayRegionColor","degrees","flipped","preload","compositeOperation","imageSmoothingEnabled","placeholderFillStyle","showReferenceStrip","referenceStripScroll","referenceStripElement","referenceStripHeight","referenceStripWidth","referenceStripPosition","referenceStripSizeRatio","collectionRows","collectionColumns","collectionLayout","collectionMode","collectionTileSize","collectionTileMargin","imageLoaderLimit","maxImageCacheCount","useCanvas","prefixUrl","navImages","zoomIn","REST","GROUP","HOVER","DOWN","zoomOut","home","fullpage","rotateleft","rotateright","debugMode","debugGridColor","SIGNAL","delegate","method","BROWSERS","UNKNOWN","IE","FIREFOX","SAFARI","CHROME","OPERA","getElement","getElementById","getElementPosition","isFixed","offsetParent","Point","getOffsetParent","getElementStyle","x","offsetLeft","y","offsetTop","plus","getPageScroll","getElementOffset","docElement","win","doc","ownerDocument","boundingRect","documentElement","defaultView","parentWindow","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","getElementSize","currentStyle","getComputedStyle","getCssPropertyWithVendorPrefix","property","memo","prefixes","suffix","capitalizeFirstLetter","prop","charAt","toUpperCase","slice","positiveModulo","modulo","pointInElement","point","getEvent","getMousePosition","pageX","pageY","clientX","clientY","setPageScroll","scroll","scrollTo","originalScroll","currentScroll","getWindowSize","innerWidth","innerHeight","makeCenteredNode","wrappers","makeNeutralElement","verticalAlign","textAlign","appendChild","tagName","background","border","margin","now","getTime","makeTransparentImage","img","Browser","vendor","onload","setElementOpacity","usesAlpha","ieFilter","alpha","round","setElementTouchActionNone","touchAction","msTouchAction","addClass","searchElement","fromIndex","pivot","abs","removeClass","oldClasses","newClasses","addEvent","addEventListener","eventName","useCapture","attachEvent","removeEvent","removeEventListener","detachEvent","cancelEvent","preventDefault","cancel","returnValue","stopEvent","stopPropagation","cancelBubble","createCallback","initialArgs","getUrlParameter","URLPARAMS","getUrlProtocol","url","match","location","protocol","toLowerCase","createAjaxRequest","local","supportActiveX","ActiveXObject","XMLHttpRequest","makeAjaxRequest","onSuccess","onError","withCredentials","headers","responseType","success","request","onreadystatechange","readyState","log","open","headerName","setRequestHeader","send","msg","XDomainRequest","xdr","responseText","statusText","onerror","e2","jsonp","script","head","getElementsByTagName","jsonpCallback","callbackName","callbackParam","param","response","async","scriptCharset","charset","_","isAbort","removeChild","insertBefore","firstChild","createFromDZI","parseXml","DOMParser","parseFromString","xmlDoc","loadXML","parseJSON","parse","eval","imageFormatSupported","extension","FILEFORMATS","nullfunction","debug","info","warn","assert","ver","appVersion","ua","appName","parseFloat","substring","lastIndexOf","exec","$1","part","sep","parts","search","decodeURIComponent","w","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","msCancelAnimationFrame","iIntervalId","aAnimQueue","processing","iRequestId","time","temp","shift","clearInterval","requestId","j","splice","define","fullScreenApi","supportsFullScreen","isFullScreen","getFullScreenElement","requestFullScreen","exitFullScreen","cancelFullScreen","fullScreenEventName","fullScreenErrorEventName","exitFullscreen","fullscreenElement","requestFullscreen","msExitFullscreen","msFullscreenElement","msRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitRequestFullscreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozRequestFullScreen","EventSource","addOnceHandler","userData","times","count","addHandler","onceHandler","removeHandler","handlers","removeAllHandlers","eventType","getHandler","eventSource","raiseEvent","eventArgs","MOUSETRACKERS","THIS","clearTrackedPointers","tracker","hash","pointerListCount","activePointersLists","captureCount","MouseTracker","captureElement","mousemovecaptured","mouseupcaptured","unprefixedPointerEvents","pointermovecaptured","pointerupcaptured","touchmovecaptured","touchendcaptured","pop","stopTracking","tracking","subscribeEvents","getCaptureEventParams","pointerType","upName","upHandler","moveName","moveHandler","capturePointer","pointerCount","eventParams","pointsList","getActivePointersListByType","setCapture","havePointerEvents","isInIframe","canAccessEvents","releasePointer","releaseCapture","getPointerType","pointerTypeStr","getMouseAbsolute","getMouseRelative","getPointRelativeToAbsolute","minus","getCenterPoint","point1","point2","clickHandler","onDblClick","dblClickHandler","keyDownHandler","keyCode","ctrl","ctrlKey","shiftKey","altKey","meta","metaKey","originalEvent","preventDefaultAction","onKeyUp","keyUpHandler","onKeyPress","keyHandler","onFocus","focusHandler","onBlur","blurHandler","onWheel","handleWheelEvent","onMouseWheel","simulatedEvent","srcElement","deltaMode","deltaX","deltaZ","wheelEventName","deltaY","wheelDelta","detail","nDelta","scrollHandler","isTouchEvent","isParentChild","parent","handleMouseEnter","onMouseOver","currentTarget","relatedTarget","updatePointersEnter","id","mousePointerId","isPrimary","currentPos","currentTime","handleMouseExit","onMouseOut","updatePointersExit","getStandardizedButton","button","onMouseDown","updatePointersDown","pressHandler","dragHandler","dragEndHandler","onMouseUp","handleMouseUp","onMouseUpCaptured","updatePointersUp","onMouseMove","handleMouseMove","onMouseMoveCaptured","updatePointersMove","abortContacts","gPointCount","getLength","abortGPoints","contacts","getByIndex","onTouchStart","parentGPoints","touchCount","changedTouches","gPoints","touches","identifier","isTracking","onTouchEnd","handleTouchEnd","onTouchEndCaptured","onTouchMove","handleTouchMove","onTouchMoveCaptured","onTouchCancel","onGestureStart","onGestureChange","onPointerOver","pointerId","onPointerOut","onPointerDown","gPoint","pinchHandler","onPointerUp","handlePointerUp","onPointerUpCaptured","getById","onPointerMove","handlePointerMove","onPointerMoveCaptured","onPointerCancel","updatePointersCancel","startTrackingPointer","speed","contactPos","contactTime","lastPos","lastTime","add","stopTrackingPointer","listLength","primaryPoint","removeById","getPrimary","curGPoint","updateGPoint","insideElement","captured","insideElementPressed","enterHandler","buttons","pointers","getActivePointerCount","buttonDownAny","exitHandler","buttonChanged","otherPointsLists","getActivePointersListsExceptType","nonPrimaryPressHandler","addContact","gesturePointVelocityTracker","addPoint","pinchGPoints","asArray","lastPinchDist","currentPinchDist","distanceTo","lastPinchCenter","currentPinchCenter","releasePoint","releaseTime","quick","wasCaptured","nonPrimaryReleaseHandler","otherPointsList","removeContact","removePoint","releaseHandler","insideElementReleased","equals","clicks","lastClickPos","dblClickTimeOut","clearTimeout","gPointArray","delta","stopHandler","stopTimeOut","originalMoveEvent","handlePointerStop","stopDelay","gesturePoints","lastCenter","center","lastDistance","distance","random","click","dblclick","keydown","keyup","keypress","blur","wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll","mouseenter","mouseleave","mouseover","mouseout","mousedown","mouseup","mousemove","touchstart","touchend","touchmove","touchcancel","gesturestart","gesturechange","pointerover","MSPointerOver","pointerout","MSPointerOut","pointerdown","MSPointerDown","pointerup","MSPointerUp","pointermove","MSPointerMove","pointercancel","MSPointerCancel","startDisabled","setTracking","track","startTracking","listArray","list","len","GesturePointList","resetAllMouseTrackers","trackerPoints","intervalId","_generateGuid","_doTracking","trackPoint","elapsedTime","atan2","guid","onmousewheel","supportsMouseCapture","divElement","PointerEvent","pointerEnabled","maxTouchPoints","haveMouseEnter","MSPointerEvent","msPointerEnabled","msMaxTouchPoints","_gPoints","gp","ControlAnchor","NONE","TOP_LEFT","TOP_RIGHT","BOTTOM_RIGHT","BOTTOM_LEFT","ABSOLUTE","Control","anchor","attachToViewer","autoFade","wrapper","isVisible","setVisible","visible","setOpacity","getControlIndex","dock","ControlDock","layout","layouts","floor","onsubmit","topleft","topright","bottomright","bottomleft","addControl","controlOptions","div","paddingRight","paddingTop","paddingBottom","paddingLeft","removeControl","clearControls","areControlsEnabled","setControlsEnabled","Placement","CENTER","TOP","RIGHT","BOTTOM","LEFT","properties","0","isLeft","isHorizontallyCentered","isRight","isTop","isVerticallyCentered","isBottom","1","2","3","4","5","6","7","8","nextHash","_getSafeElemSize","oElement","getOverlayObject","viewer","overlay","Overlay","px","rect","viewport","imageToViewportRectangle","Rect","py","onDraw","checkResize","rotationMode","getOverlayIndex","overlays","updateFunc","scheduleControlsFade","deltaTime","controlsShouldFade","controlsFadeBeginTime","min","updateControlsFade","beginControlsAutoHide","abortControlsAutoHide","onCanvasKeyDown","canvasKeyDownEventArgs","preventVerticalPan","preventHorizontalPan","zoomBy","panBy","deltaPointsFromPixels","applyConstraints","onCanvasKeyPress","canvasKeyPressEventArgs","goHome","setRotation","toggleFlip","onCanvasClick","gestureSettings","activeElement","getContainerSize","canvasClickEventArgs","gestureSettingsByDeviceType","pointFromPixel","onCanvasDblClick","canvasDblClickEventArgs","onCanvasDrag","canvasDragEventArgs","negate","centerSpringX","centerSpringY","bounds","getBounds","constrainedBounds","getConstrainedBounds","onCanvasDragEnd","amplitudeX","cos","amplitudeY","sin","pixelFromPoint","getCenter","panTo","onCanvasEnter","onCanvasExit","onCanvasPress","onCanvasRelease","onCanvasNonPrimaryPress","onCanvasNonPrimaryRelease","onCanvasPinch","centerPt","panByPt","angle1","angle2","getRotation","PI","onCanvasScroll","factor","thisScrollTime","_lastScrollTime","pow","onContainerEnter","mouseInside","onContainerExit","animating","updateMulti","_opening","containerSize","prevContainerSize","resizeRatio","zoom","getZoom","resize","zoomTo","oldBounds","fitBoundsWithConstraints","forceRedraw","viewportChange","update","world","referenceStrip","needsDraw","imageLoader","clear","drawer","draw","drawWorld","_drawOverlays","updateOnce","_updateRequestId","resolveUrl","prefix","beginZoomingIn","lastZoomTime","zoomFactor","zooming","scheduleZoom","beginZoomingOut","endZooming","doZoom","adjustedFactor","doSingleZoomIn","doSingleZoomOut","lightUp","emulateEnter","emulateExit","onHome","onFullScreen","isFullPage","setFullPage","setFullScreen","fullPageButton","onRotateLeft","currRotation","onRotateRight","onFlip","onPrevious","_sequenceIndex","goToPage","onNext","config","overlaysContainer","previousBody","customControls","collectionViewport","collectionDrawer","profiler","_firstOpen","_loadQueue","currentOverlays","getString","_showMessage","overflow","bodyWidth","bodyHeight","bodyOverflow","docOverflow","innerTracker","outerTracker","toolbar","bindStandardControls","World","getItemAt","getItemCount","_setContentBounds","getHomeBounds","getContentFactor","Viewport","margins","viewportMargins","ImageLoader","jobLimit","tileCache","TileCache","Drawer","canRotate","rotateLeft","rotateRight","Navigator","sizeRatio","maintainSizeRatio","borderColor","displayRegionColor","sequenceMode","bindSequenceControls","setImageSmoothingEnabled","openDzi","dzi","openTileSource","tileSource","addReferenceStrip","_updateSequenceButtons","failEvent","expected","successes","failures","checkCompletion","doOne","collectionImmediately","originalSuccess","addOverlay","originalError","addTiledImage","clearOverlays","innerHTML","removeAll","isMouseNavEnabled","setMouseNavEnabled","setDebugMode","fullPage","nodes","bodyStyle","docStyle","fullPageEventArgs","elementSize","pageScroll","elementMargin","elementPadding","bodyMargin","docMargin","docPadding","docWidth","docHeight","prevElementParent","prevNextSibling","nextSibling","prevElementWidth","prevElementHeight","restoreScrollCounter","restoreScroll","fullScreen","fullScreeEventArgs","fullPageStyleWidth","fullPageStyleHeight","onFullScreenChange","visibility","replaceItem","_hideMessage","myQueueItem","raiseAddItemFailed","refreshWorld","theItem","arrange","immediately","rows","columns","tileSize","tileMargin","setAutoRefigureSizes","processReadyItems","queueItem","tiledImage","optionsClone","getIndexOfItem","removeItem","TiledImage","fitBounds","fitBoundsPlacement","clip","addItem","originalTiledImage","imgOptions","successCallback","failCallback","tileSourceJ","waitUntilReady","originalTileSource","ready","TileSource","getTileUrl","customTileSource","$TileSource","determineType","configure","getTileSourceImplementation","addSimpleImage","opts","addLayer","getLayerAtLevel","level","getLevelOfLayer","getLayersCount","setLayerLevel","setItemIndex","removeLayer","onFocusHandler","onBlurHandler","onNextHandler","onPreviousHandler","useGroup","previousButton","nextButton","srcRest","srcGroup","srcHover","srcDown","onRelease","disable","paging","pagingControl","beginZoomingInHandler","endZoomingHandler","doSingleZoomInHandler","beginZoomingOutHandler","doSingleZoomOutHandler","onHomeHandler","onFullScreenHandler","onRotateLeftHandler","onRotateRightHandler","onFlipHandler","zoomInButton","zoomOutButton","homeButton","rotateLeftButton","rotateRightButton","flipButton","onPress","onEnter","onExit","navControl","currentPage","page","setFocus","drawHTML","updateOverlay","removeOverlay","getOverlayById","enable","createTextNode","messageDiv","_cancelPendingImages","removeReferenceStrip","ReferenceStrip","_setTransformRotate","setElementTransform","rule","webkitTransform","mozTransform","msTransform","oTransform","transform","viewerSize","navigatorSize","borderWidth","rotate","displayRegionContainer","displayRegion","fudge","totalBorderWidths","fontSize","cssFloat","styleFloat","zIndex","cursor","_resizeWithViewer","setWidth","setHeight","oldViewerSize","elementArea","oldContainerSize","previousIndex","theirItem","myItem","_getMatchingItem","updateSize","setFlip","setDisplayTransform","getFlip","newWidth","newHeight","sqrt","getBoundsNoRotate","pixelFromPointNoRotate","getTopLeft","getBottomRight","original","matchBounds","_matchBounds","_originalForNavigator","_matchOpacity","_matchCompositeOperation","setPosition","setClip","getClip","setCompositeOperation","I18N","Errors","Dzc","Dzi","Xml","ImageFormat","Security","Status","OpenFailed","Tooltips","FullPage","Home","ZoomIn","ZoomOut","NextPage","PreviousPage","RotateLeft","RotateRight","Flip","capture","setString","divide","squaredDistanceTo","angle","tileOverlap","minLevel","maxLevel","aspectRatio","dimensions","_tileWidth","_tileHeight","getImageInfo","tileWidth","tileHeight","ceil","getTileSize","getTileWidth","getTileHeight","getLevelScale","levelScaleCache","_level","getNumTiles","scale","getPixelRatio","imageSizeScaled","rx","ry","getClosestLevel","tiles","getTileAtPoint","validPoint","widthScaled","pixelX","pixelY","getTileBounds","isSource","dimensionsScaled","sx","sy","readySource","urlParts","filename","lastDot","xhr","responseXML","processResponse","exc","supports","getTileAjaxHeaders","tileExists","numTiles","configureFromObject","configuration","rectData","imageData","Image","tilesUrl","Url","fileFormat","Format","sizeData","Size","dispRectData","DisplayRect","Width","Height","TileSize","Overlap","displayRects","X","Y","MinLevel","MaxLevel","DziTileSource","_levelRects","ns","xmlns","localName","namespaceURI","dispRectNodes","dispRectNode","rectNode","sizeNode","root","rootName","getElementsByTagNameNS","getAttribute","nodeValue","configureFromXML","queryParams","xMin","yMin","xMax","yMax","rects","canBeTiled","profileLevel","profile","isLevel0","hasCanoncicalSizeFeature","extraFeatures","constructLevels","levels","sizes","tileFormat","sort","IIIFTileSource","tileSizePerScaleFactor","tile_width","tile_height","scale_factors","scaleFactors","t","sf","scaleFactor","shortDim","tileOptions","smallerTiles","emulateLegacyImagePyramid","maxScaleFactor","LOG2E","Number","preferredFormats","parseXML10","trim","nodeName","configureFromXml10","levelScale","NaN","iiifTileSizeWidth","iiifTileSizeHeight","iiifRegion","iiifTileX","iiifTileY","iiifTileW","iiifTileH","iiifSize","iiifSizeW","iiifSizeH","iiifQuality","levelWidth","levelHeight","__testonly__","OsmTileSource","TmsTileSource","bufferedWidth","bufferedHeight","yTiles","ZoomifyTileSource","currentImageSize","imageSizes","gridSize","_getGridSize","reverse","_calculateAbsoluteTileNumber","num","z","LegacyTileSource","files","file","filtered","filterFiles","dataUrl","conf","ImageTileSource","buildPyramid","image","_image","crossOrigin","useCredentials","naturalWidth","naturalHeight","_buildLevels","getContext2D","context2D","currentWidth","currentHeight","bigCanvas","bigContext","drawImage","smallCanvas","smallContext","TileSourceCollection","scheduleFade","shouldFade","fadeBeginTime","fadeLength","imgGroup","updateFade","inTo","newState","ButtonState","currentState","stopFading","imgHover","imgDown","outTo","fadeDelay","beginFading","imgRest","title","notifyGroupEnter","notifyGroupExit","labelText","newTopLeft","getTopRight","getBottomLeft","fromSummits","topLeft","topRight","bottomLeft","diff","radians","atan","getAspectRatio","getSize","other","translate","union","thisBoundingBox","getBoundingBox","otherBoundingBox","intersection","intersectionPoints","thisTopLeft","containsPoint","thisTopRight","thisBottomLeft","thisBottomRight","rectTopLeft","rectTopRight","rectBottomLeft","rectBottomRight","thisSegments","_getSegments","rectSegments","thisSegment","rectSegment","intersect","getIntersection","abVector","cdVector","denom","s","minX","maxX","minY","maxY","k","bottomRight","getIntegerBoundingBox","boundingBox","epsilon","topDiff","leftDiff","onStripDrag","marginLeft","marginTop","scrollWidth","scrollHeight","dragging","loadPanels","onStripScroll","strip","panelSize","activePanelsStart","activePanelsEnd","miniViewer","panelWidth","panelHeight","panels","activePanel","miniTileSource","referenceStripThumbnailUrl","float","miniViewers","onStripEnter","marginBottom","onStripExit","marginRight","querySelector","currentSelected","Spring","initial","exponential","_exponential","start","_logValue","resetTo","springTo","shiftBy","setExponential","startValue","targetValue","stiffness","currentValue","exp","oldValue","isAtTargetValue","ImageJob","jobId","errorMsg","selfAbort","abort","finish","onabort","loadWithAjax","blb","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","bb","append","getBlob","URL","webkitURL","createObjectURL","successful","jobQueue","jobsInProgress","addJob","newJob","job","loader","completeJob","Tile","exists","sourceBounds","cacheKey","loaded","loading","imgElement","blendStart","squaredDistance","beingDrawn","lastTouchTime","isRightMost","isBottomMost","_hasTransparencyChannel","cacheImageRecord","getImage","cloneNode","msInterpolationMode","drawCanvas","drawingHandler","rendered","sourceWidth","sourceHeight","getRenderedContext","save","globalAlpha","clearRect","tile","restore","getScaleForEdgeSmoothing","getTranslationForEdgeSmoothing","canvasSize","sketchCanvasSize","unload","OverlayPlacement","OverlayRotationMode","NO_ROTATION","EXACT","BOUNDING_BOX","_init","scales","adjust","transformOriginProp","transformProp","positionAndSize","_getOverlayPositionAndSize","_getTransformOrigin","_getSizeInPixels","_getBoundingBox","scaledSize","deltaPixelsFromPointsNoRotate","eltSize","refPoint","_getPlacementPoint","deltaPointsFromPixelsNoRotate","_adjustBoundsForRotation","viewerElementToViewportRectangle","sketchCanvas","sketchContext","dir","viewportSize","_calculateCanvasSize","_imageSmoothingEnabled","viewportCoordToDrawerCoord","vpPoint","clipWithPolygons","polygons","useSketch","_getContext","beginPath","forEach","polygon","coord","getOpacity","maxOpacity","needsUpdate","numTilesLoaded","reset","resetItems","_updateImageSmoothingEnabled","_calculateSketchCanvasSize","_clear","viewportToDrawerRectangle","rectangle","drawTile","resizeSketchCanvas","saveContext","restoreContext","drawRectangle","fillStyle","fillRect","blendSketch","globalCompositeOperation","widthExt","heightExt","widthDiff","heightDiff","drawDebugInfo","colorIndex","lineWidth","font","strokeStyle","_offsetForRotation","_getRotationPoint","_drawer","_flip","strokeRect","tileCenterX","tileCenterY","fillText","_restoreRotationChanges","debugRect","msImageSmoothingEnabled","getCanvasSize","sketch","getCanvasCenter","contentSize","_margins","zoomPoint","_updateContainerInnerSize","zoomSpring","_oldCenterX","_oldCenterY","_oldZoom","resetContentSize","setHomeBounds","contentFactor","_contentBoundsNoRotate","_contentSizeNoRotate","_contentBounds","_contentSize","_contentAspectRatio","homeBounds","contentBounds","getHomeZoom","aspectFactor","getHomeBoundsNoRotate","getMinZoom","homeZoom","getMaxZoom","_containerInnerSize","getMargins","setMargins","getBoundsWithMargins","getBoundsNoRotateWithMargins","oldZoomPixel","deltaZoomPoints","centerCurrent","centerTarget","_pixelFromPoint","_applyZoomConstraints","_applyBoundaryConstraints","newBounds","horizontalThreshold","boundsRight","contentRight","leftDx","rightDx","verticalThreshold","boundsBottom","contentBottom","topDy","bottomDy","_raiseConstraintsEvent","actualZoom","constrainedZoom","ensureVisible","_fitBounds","constraints","aspect","newZoom","newBoundsAspectRatio","newConstrainedZoom","oldZoom","referencePoint","fitVertically","box","fitHorizontally","_adjustCenterSpringsForZoomPoint","newContainerSize","maintain","widthDeltaFactor","changed","zoomSpringHandler","deltaZoomPixels","deltaPoints","deltaPixelsFromPoints","deltaPixels","_pixelFromPointNoRotate","pointFromPixelNoRotate","pixel","_viewportToImageDelta","viewerX","viewerY","viewportToImageCoordinates","_imageToViewportDelta","imageX","imageY","imageToViewportCoordinates","pixelWidth","pixelHeight","coordA","coordB","viewportToImageRectangle","pointWidth","pointHeight","viewerElementToImageCoordinates","imageToViewerElementCoordinates","windowToImageCoordinates","viewerCoordinates","imageToWindowCoordinates","viewerElementToViewportCoordinates","viewportToViewerElementCoordinates","viewportToViewerElementRectangle","windowToViewportCoordinates","viewportToWindowCoordinates","viewportToImageZoom","viewportZoom","imageWidth","imageToViewportZoom","imageZoom","updateLevel","haveDrawn","drawLevel","levelOpacity","levelVisibility","drawArea","best","topLeftBound","bottomRightBound","havedrawn","currenttime","resetCoverage","coverage","loadingCoverage","cornerTiles","_getCornerTiles","topLeftTile","bottomRightTile","numberOfTiles","viewportCenter","tileBounds","updateTile","tilesMatrix","worldWidth","worldHeight","xMod","yMod","getTile","_worldWidthCurrent","_worldHeightCurrent","setCoverage","isCovered","overlap","boundsTL","_scaleSpring","_xSpring","_ySpring","boundsSize","positionC","positionT","sizeC","sizeT","tileCenter","tileSquaredDistance","positionTile","setTileLoaded","imageRecord","_tileCache","getImageRecord","blendTimeMillis","lastDrawn","_hasOpaqueTile","blendTile","_needsDraw","_tilesLoading","previousBest","compareTiles","cutoff","tileRequest","increment","getCompletionCallback","completionCallback","cacheTile","providesCoverage","cols","covers","_imageLoader","_clip","normHeight","contentAspectX","lastResetTime","_midDraw","_preload","_fullyLoaded","_degreesSpring","_updateForScale","_drawingHandler","getFullyLoaded","_setFullyLoaded","flag","fullyLoaded","clearTilesFor","xUpdated","yUpdated","scaleUpdated","degreesUpdated","_updateViewport","_worldWidthTarget","_worldHeightTarget","getWorldBounds","getClippedBounds","ratio","getContentSize","_viewportToTiledImageRectangle","sameTarget","_raiseBoundsChange","_setScale","setCroppingPolygons","objectToSimpleXYObject","objs","isXYObject","_croppingPolygons","resetCroppingPolygons","anchorProperties","xOffset","yOffset","displayedWidthRatio","displayedHeightRatio","newClip","getPreload","setPreload","getCompositeOperation","_isBottomItem","_getLevelsInterval","lowestLevel","currentZeroRatio","highestLevel","tiledImageBounds","levelsInterval","bestTile","currentRenderPixelRatio","targetRenderPixelRatio","targetZeroRatio","optimalRatio","sketchScale","sketchTranslate","usedClip","clipRect","clipPoint","placeholderRect","drawTiles","onTileLoad","loadTile","leftX","rightX","topY","bottomY","TileRecord","ImageRecord","_tiles","_renderedContext","setRenderedContext","renderedContext","addTile","removeTile","getTileCount","_maxImageCacheCount","_tilesLoaded","_imagesLoaded","_imagesLoadedCount","insertionIndex","prevTile","worstTime","worstLevel","prevTime","prevLevel","prevTileRecord","worstTile","worstTileIndex","worstTileRecord","_unloadTile","tileRecord","_items","_autoRefigureSizes","_needsSizesFigured","_delegatedFigureSizes","_figureSizes","oldIndex","_raiseRemoveItem","removedItems","_homeBounds","_contentFactor","wrap","oldHomeBounds","oldContentSize","oldContentFactor","clippedBounds","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","process","r","n","l","m","get","toStringTag","__esModule","IntersectionObserverEntry","u","afterLoad","beforeLoad","scrollPosition","visibleByDefault","onVisible","isScrollTracked","Boolean","isFinite","delayMethod","delayTime","placeholder","threshold","useIntersectionObserver","isIntersecting","supportsObserver","observer","IntersectionObserver","rootMargin","observe","updateVisibility","unobserve","findDOMNode","getPropertyValue","getPlaceholderBoundingBox","isPlaceholderInViewport","cloneElement","scrollX","h","scrollY","onChangeScroll","delayedScroll","baseComponentRef","createRef","addListeners","removeListeners","scrollElement","passive","Function","trackWindowScroll","LazyLoadComponent","LazyLoadImage","effect","placeholderSrc","wrapperClassName","wrapperProps","onLoad","onImageLoad","getImg","backgroundImage","backgroundSize","getLazyLoadImage","getWrappedLazyLoadImage","resetWarningCache","symbol","arrayOf","elementType","objectOf","exact","checkPropTypes","v","valueOf","O","g","P","T","leading","maxWait","trailing","HTMLElement","equal","flags","timeoutDuration","longerTimeoutBrowsers","isBrowser","called","scheduled","functionToCheck","getType","getStyleComputedProperty","css","getParentNode","getScrollParent","overflowX","overflowY","getReferenceNode","reference","isIE11","isIE10","isIE","noOffsetParent","getRoot","findCommonOffsetParent","element1","element2","Node","end","range","commonAncestorContainer","isOffsetContainer","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","subtract","modifier","getBordersSize","axis","sideA","sideB","computedStyle","getWindowSizes","getClientRect","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","getFixedPositionOffsetParent","el","getBoundaries","boundaries","boundariesNode","isPaddingNumber","getArea","computeAutoPlacement","refRect","sortedAreas","filteredAreas","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","runModifiers","ends","findIndex","cur","isModifierEnabled","modifierName","some","getSupportedPropertyName","upperProp","toCheck","getWindow","setupEventListeners","attachToScrollParents","scrollParents","isBody","enableEventListeners","disableEventListeners","removeEventListeners","isNumeric","setStyles","unit","isFirefox","isModifierRequired","requesting","requested","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","useHeight","basePlacement","fragments","frag","splitRegex","ops","mergeWithPrevious","op","str","toValue","index2","shiftvariation","isVertical","shiftOffsets","popperStyles","opSide","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flippedVariationByContent","flippedVariation","getOppositeVariation","subtractLength","bound","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","bothOddWidth","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","debounce","modifierOptions","Utils","PopperUtils","Defaults","asyncGeneratorStep","gen","resolve","reject","_next","_throw","done","Promise","then","_asyncToGenerator","implementation","hasSymbols","toStr","origDefineProperty","supportsDescriptors","arePropertyDescriptorsSupported","predicate","predicates","getOwnPropertySymbols","isAbsolute","pathname","spliceOne","resolvePathname","to","from","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","last","up","unshift","substr","invariant","addLeadingSlash","path","stripBasename","hasBasename","stripTrailingSlash","createPath","createLocation","currentLocation","hashIndex","searchIndex","parsePath","decodeURI","URIError","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","appendListener","listener","notifyListeners","getConfirmation","confirm","getHistoryState","history","createBrowserHistory","globalHistory","canUseHistory","supportsHistory","needsHashChangeListener","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_window$location","createKey","transitionManager","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toLocation","toIndex","allKeys","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","isBlocked","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","unblock","listen","unlisten","origSymbol","global","hasSymbolSham","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","objectToString","isObject","isObjectLike","isSymbol","isBinary","MouseEvent","HTMLAnchorElement","autoBom","saveAs","_implementation2","createContext","usePrevious","useRef","useEffect","ALIGN","JUSTIFY","getStringLabelKey","labelKey","idCounter","isString","uniqueId","values","reduce","accum","propertyIsEnumerable","valuesPolyfill","getOptionLabel","option","paginationOption","customOption","optionLabel","addCustomOption","results","allowNew","text","getOptionProperty","base","letters","diacriticsMap","ii","jj","stripDiacritics","falseToWarn","isMatch","input","searchStr","caseSensitive","ignoreDiacritics","defaultFilterBy","filterBy","multiple","selected","isEqual","fields","field","getDisplayName","COMBINING_MARKS","getMatchBounds","subject","matches","escapeStringRegexp","matchLength","_ii","getHintText","initialItem","isFocused","isMenuShown","initialItemStr","getMenuItemId","getInputProps","_objectWithoutPropertiesLoose","_cx","_ref2","inputProps","autoComplete","cx","inputClassName","getInputText","activeItem","selectedItem","getIsOnlyResult","highlightOnlyResult","getTruncatedOptions","maxResults","skipDisabledOptions","currentIndex","getUpdatedActiveIndex","isSelectable","inputNode","selectionStart","preventInputBlur","isSizeLarge","isSizeSmall","TypeaheadContext","hintText","isOnlyResult","onActiveItemChange","onAdd","onInitialItemChange","onMenuItemClick","selectHintOnEnter","setItem","useTypeaheadContext","useContext","inputPropKeys","propKeys","contextKeys","TypeaheadManager","onMenuToggle","contextValue","Provider","INPUT_PROPS_BLACKLIST","sizeType","LARGE","LG","SM","SMALL","checkPropType","validator","_PropTypes$checkPropT","isRequiredForA11y","optionType","reason","defaultInputValue","defaultSelected","defaultOpen","minLength","onChange","onInputChange","onPaginate","paginate","_PropTypes$checkPropT2","getInitialState","showMenu","shownResults","clearTypeahead","hideMenu","_getInitialState","toggleMenu","Typeahead","_defineProperty","_handleChange","_this$props","shouldClearSelections","_getInitialState2","_handleActiveIndexChange","_handleMenuItemSelect","_handlePaginate","_handleSelectionAdd","_this$props2","_inheritsLoose","_proto","componentDidMount","_this$props3","prevSelected","precedent","uncontrolledToControlled","validateSelectedPropChange","render","_this$props4","mergedPropsAndState","isShown","cb","_results$push","_results$push2","shouldPaginate","inputRef","_handleActiveItemChange","_handleBlur","_handleInputChange","onClear","_handleClear","_handleFocus","onHide","_handleInitialItemChange","_handleKeyDown","onRemove","_handleSelectionRemove","isLoading","onSearch","promptText","searchText","useCache","useAsync","emptyLabel","cacheRef","handleSearchDebouncedRef","queryRef","forceUpdate","useReducer","handleSearch","useCallback","query","handleInputChange","cachedQuery","withAsync","AsyncTypeahead","forwardRef","optionsSupported","onceSupported","once","wrappedHandler","__once","useCommittedRef","useEventCallback","componentOrElement","safeFindDOMNode","getRefTarget","useRootClose","onRootClose","_ref$clickTrigger","clickTrigger","preventMouseRootCloseRef","onClose","handleMouseCapture","isLeftClickEvent","compareDocumentPosition","handleMouse","handleKeyUp","currentEvent","removeMouseCaptureListener","removeMouseListener","removeKeyupListener","mobileSafariHackListeners","remove","ClearButton","_onClick","_onKeyDown","Loader","ManagerReferenceNodeContext","ManagerReferenceNodeSetterContext","setRef","safeInvoke","initialStyle","initialArrowStyle","InnerPopper","popperNode","updatePopperInstance","arrowNode","updateStateModifier","arrowStyles","popperInstance","destroyPopperInstance","referenceElement","getOptions","deepEqual","strict","componentWillUnmount","setPopperNode","getPopperStyle","getPopperPlacement","outOfBoundaries","getOutOfBoundariesState","Consumer","referenceNode","SafeElement","align","getModifiers","computeStyles","preventOverflow","escapeWithReference","PLACEMENT","getPlacement","_ref3","_ref4","inputHeight","withToken","WrappedToken","_useState","useState","setActive","_useState2","rootElement","attachRef","handleActiveChange","handleBlur","handleRemove","useToken","InteractiveToken","StaticToken","classnames","readOnly","interpolateStyle","attr","subattr","useHint","shouldSelect","Children","_useTypeaheadContext","hintRef","hintNode","inputStyle","borderStyle","lineHeight","copyStyles","shouldSelectHint","defaultShouldSelect","Hint","_useHint","flex","backgroundColor","boxShadow","withClassNames","WrappedComponent","isInvalid","isValid","TypeaheadInputMulti","_input","wrapperRef","lastToken","referenceElementRef","_handleContainerClickOrFocus","getInputRef","highlightClassName","Highlighter","_React$PureComponent","matchCount","remaining","highlighterChildren","nonMatch","PureComponent","isElement","canOverflow","skipOverflowHiddenElements","isScrollable","frame","frameElement","alignNearest","scrollingEdgeStart","scrollingEdgeEnd","scrollingSize","scrollingBorderStart","scrollingBorderEnd","elementEdgeStart","elementEdgeEnd","windowWithViewport","scrollMode","boundary","checkBoundary","frames","viewportWidth","visualViewport","viewportHeight","viewportX","viewportY","targetHeight","targetWidth","targetTop","targetRight","targetBottom","targetLeft","targetBlock","targetInline","computations","frameStyle","borderLeft","borderTop","borderRight","borderRightWidth","borderBottom","borderBottomWidth","blockScroll","inlineScroll","offsetWidth","scrollbarHeight","isOptionsObject","scrollIntoView","targetIsDetached","compute","computeOptions","actions","canSmoothScroll","defaultBehavior","withItem","WrappedMenuItem","itemRef","handleClick","useItem","BaseMenuItem","maxHeight","Menu","contents","newSelectionPrefix","paginationText","renderMenuItemChildren","idx","TypeaheadMenu","menuProps","menuItemProps","MenuItem","Fragment","Divider","clearButton","renderInput","renderMenu","renderToken","Token","RootClose","TypeaheadComponent","_referenceElement","commonProps","TypeaheadInputSingle","content","instanceRef","auxContent","_renderAux","_renderInput","getOverlayProps","_renderMenu","propIsEnumerable","toObject","val","test1","getOwnPropertyNames","test2","fromCharCode","test3","letter","shouldUseNative","symbols","isArgs","origKeys","keysShim","originalKeys","shim","callee","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","$gOPD","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","asyncGenFunction","asyncGenFunctionPrototype","asyncGenPrototype","TypedArray","Uint8Array","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt","DataView","encodeURI","encodeURIComponent","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Map","RangeError","Set","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","WeakRef","WeakSet","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","rePropName","reEscapeChar","stringToPath","first","quote","subString","getBaseIntrinsic","allowMissing","alias","intrinsicName","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","desc","GetIntrinsic","$apply","$call","$reflectApply","$defineProperty","applyBind","numberIsNaN","is","$Object","ignoreCase","multiline","dotAll","unicode","freeGlobal","freeSelf","objectProto","nativeObjectToString","symToStringTag","baseGetTag","unmasked","getRawTag","modules","installedModules","__webpack_require__","moduleId","_Highlighter","_Highlighter2","_highlightWordsCore","_react","_memoizeOne2","_ref$activeClassName","activeClassName","_ref$activeIndex","activeStyle","autoEscape","_ref$caseSensitive","findChunks","_ref$highlightClassName","_ref$highlightStyle","highlightStyle","_ref$highlightTag","highlightTag","sanitize","searchWords","textToHighlight","_ref$unhighlightClassName","unhighlightClassName","unhighlightStyle","chunks","findAll","HighlightTag","highlightIndex","highlightClassNames","highlightStyles","memoizedLowercaseProps","mapped","chunk","highlight","highlightClass","_utils","combineChunks","fillInChunks","_ref$findChunks","defaultFindChunks","chunksToHighlight","totalLength","second","processedChunks","nextChunk","prevChunk","endIndex","_ref3$sanitize","identity","searchWord","regex","lastIndex","allChunks","env","NODE_ENV","REACT_ELEMENT_TYPE","for","$$typeof","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","nextTick","browser","argv","versions","on","addListener","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","umask","emptyFunction","ReactPropTypesSecret","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","ReactPropTypes","createPrimitiveTypeChecker","createChainableTypeChecker","thatReturnsNull","typeChecker","propFullName","PropTypeError","propValue","getPropType","expectedClass","expectedClassName","getClassName","isNode","expectedValues","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","shapeTypes","stack","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","secret","chainedCheckType","expectedType","getPreciseType","iteratorFn","maybeIterable","getIteratorFn","step","entries","entry","makeEmptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsThis","thatReturnsArgument","validateFormat","printWarning","_len2","_key2","loggedTypeFailures","typeSpecs","getStack","typeSpecName","ex","getShim","simpleIsEqual","resultFn","lastThis","lastArgs","lastResult","calledOnce","isNewArgEqualToLast","newArg","newArgs","nativeMax","nativeMin","wait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","objectKeys","isArguments","isRegex","isDate","actual","isUndefinedOrNull","aIsRegex","bIsRegex","aIsBuffer","isBuffer","bIsBuffer","ka","kb","objEquiv","isarray","pathToRegexp","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","res","tokens","defaultDelimiter","delimiter","escaped","asterisk","partial","repeat","optional","pattern","escapeGroup","escapeString","encodeURIComponentPretty","charCodeAt","encode","pretty","token","segment","attachKeys","re","sensitive","route","endsWithDelimiter","groups","regexpToRegexp","arrayToRegexp","stringToRegexp","q","A","B","C","D","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","E","F","refs","updater","G","H","I","isPureReactComponent","J","K","L","__self","__source","M","_owner","Q","R","keyPrefix","S","V","U","escape","W","aa","N","Z","ba","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","toArray","only","Profiler","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","_context","createFactory","lazy","_ctor","_status","_result","compare","useDebugValue","useImperativeHandle","useLayoutEffect","useMemo","da","ea","fa","ha","ia","ja","la","ma","na","oa","pa","qa","ra","sa","extractEvents","eventTypes","ta","phasedRegistrationNames","registrationName","va","wa","dependencies","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","Ua","Va","xlinkHref","Wa","Xa","Sa","Ta","Ra","removeAttribute","setAttribute","setAttributeNS","Ya","Za","$a","ab","db","eb","fb","gb","hb","ib","jb","lb","mb","nb","pb","qb","_debugOwner","_debugSource","fileName","lineNumber","return","rb","sb","xb","_valueTracker","set","getValue","setValue","tb","yb","checked","zb","defaultChecked","defaultValue","_wrapperState","initialChecked","Ab","initialValue","controlled","Bb","Cb","Db","Eb","Gb","Fb","Hb","Ib","dangerouslySetInnerHTML","Jb","Kb","Lb","textContent","Mb","Nb","Ob","Pb","Qb","MSApp","execUnsafeLocalFunction","Rb","lastChild","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","animation","Xb","Yb","Zb","$b","ac","bc","cc","dc","alternate","effectTag","ec","memoizedState","dehydrated","fc","hc","sibling","gc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","release","mc","nc","correspondingUseElement","oc","pc","qc","topLevelType","nativeEvent","targetInst","ancestors","rc","eventSystemFlags","sc","containerInfo","tc","uc","has","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","delete","Mc","Nc","Pc","unstable_runWithPriority","priority","hydrate","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","eventPriority","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","Oc","jd","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","orphans","tabSize","widows","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","kd","ld","md","setProperty","nd","menuitem","area","br","col","embed","hr","keygen","link","wbr","od","pd","qd","rd","sd","td","ud","vd","xd","HTMLIFrameElement","contentWindow","yd","contentEditable","Dd","Ed","Fd","Gd","__html","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","defaultPrevented","ee","eventPool","fe","destructor","de","getPooled","eventPhase","bubbles","cancelable","timeStamp","isTrusted","ge","he","ie","je","ke","documentMode","le","me","ne","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","se","ve","locale","which","te","char","ue","we","date","datetime","email","month","password","tel","week","xe","ye","change","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","_isInputEventSupported","Ne","view","Oe","Alt","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","fromElement","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","$e","af","bf","cf","df","select","ef","ff","gf","hf","jf","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","kf","onSelect","lf","animationName","pseudoElement","mf","clipboardData","nf","of","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Apps","Scroll","MozPrintableKey","qf","9","12","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","rf","dataTransfer","tf","targetTouches","uf","vf","wheelDeltaX","wheelDeltaY","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","Cf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","tg","ug","updateQueue","baseState","baseQueue","shared","pending","effects","vg","wg","suspenseConfig","payload","xg","yg","zg","ca","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","shouldComponentUpdate","Lg","contextType","Mg","Ng","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","mode","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","memoizedProps","revealOrder","ih","responder","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","xh","yh","zh","Ah","deps","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","gi","getDerivedStateFromError","hi","pendingContext","ni","pi","qi","retryTime","ji","fallback","unstable_avoidThisFallback","ki","li","isBackwards","rendering","renderingStartTime","tail","tailExpiration","tailMode","mi","ri","si","wasMultiple","onclick","createElementNS","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","Di","Mi","Ni","Oi","Pi","Qi","_reactRootContainer","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","wd","createRange","setStart","removeAllRanges","addRange","setEnd","vb","Uj","Vj","Wj","ob","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hasAttribute","hk","jk","kk","unmount","Lj","lk","Events","findFiberByHostInstance","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","createPortal","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","MessageChannel","unstable_forceFrameRate","performance","port2","port1","onmessage","postMessage","sortIndex","startTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","emptyFunctionWithReset","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","awrap","iter","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","callBind","$indexOf","sym","symObj","syms","ERROR_MESSAGE","that","binder","boundLength","boundArgs","Empty","getPolyfill","regexExec","isRegexMarker","badStringifier","throwRegexMarker","toPrimitive","gOPD","flagsBound","asyncGenIterator","all","TypeErr","proto","getDay","tryDateObject","_gud2","createEventEmitter","newValue","changedBits","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","emitter","_Component2","_temp2","onUpdate","isModifiedEvent","Link","router","Router","computeMatch","params","isExact","BrowserRouter","createHistory","patternCache","cacheCount","compilePath","cache","compiledPattern","matchPath","_options","_options$exact","_options$strict","_options$sensitive","_compilePath","isEmptyChildren","Route","computedMatch","nextContext","_context$router","staticContext"],"mappings":"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DD,KAAM,IACNC,QAAS,qPACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,KACNC,QAAS,cACR,CACDD,KAAM,KACNC,QAAS,cACR,CACDD,KAAM,IACNC,QAAS,2DACR,CACDD,KAAM,IACNC,QAAS,mCACR,CACDD,KAAM,IACNC,QAAS,qGACR,CACDD,KAAM,IACNC,QAAS,qGACR,CACDD,KAAM,IACNC,QAAS,yFACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,IACNC,QAAS,mMACR,CACDD,KAAM,IACNC,QAAS,+CACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,IACNC,QAAS,2DACR,CACDD,KAAM,IACNC,QAAS,6BACR,CACDD,KAAM,IACNC,QAAS,uFACR,CACDD,KAAM,IACNC,QAAS,mFACR,CACDD,KAAM,IACNC,QAAS,qMACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,KACNC,QAAS,oBACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,KACNC,QAAS,gBACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,IACNC,QAAS,qDACR,CACDD,KAAM,IACNC,QAAS,2EACR,CACDD,KAAM,IACNC,QAAS,mFACR,CACDD,KAAM,KACNC,QAAS,gBACR,CACDD,KAAM,IACNC,QAAS,iLACR,CACDD,KAAM,IACNC,QAAS,mCACR,CACDD,KAAM,IACNC,QAAS,yFACR,CACDD,KAAM,IACNC,QAAS,yFACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,IACNC,QAAS,+GACR,CACDD,KAAM,IACNC,QAAS,mCACR,CACDD,KAAM,IACNC,QAAS,mFACR,CACDD,KAAM,IACNC,QAAS,iHACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,IACNC,QAAS,+CACR,CACDD,KAAM,IACNC,QAAS,mGACR,CACDD,KAAM,KACNC,QAAS,UACR,CACDD,KAAM,IA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","file":"static/js/2.51fe71d1.chunk.js","sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport { Component, createElement } from 'react';\nimport PropTypes from 'prop-types';\n\nvar Manager = function (_Component) {\n _inherits(Manager, _Component);\n\n function Manager() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Manager);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Manager.__proto__ || Object.getPrototypeOf(Manager)).call.apply(_ref, [this].concat(args))), _this), _this._setTargetNode = function (node) {\n _this._targetNode = node;\n }, _this._getTargetNode = function () {\n return _this._targetNode;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Manager, [{\n key: 'getChildContext',\n value: function getChildContext() {\n return {\n popperManager: {\n setTargetNode: this._setTargetNode,\n getTargetNode: this._getTargetNode\n }\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n tag = _props.tag,\n children = _props.children,\n restProps = _objectWithoutProperties(_props, ['tag', 'children']);\n\n if (tag !== false) {\n return createElement(tag, restProps, children);\n } else {\n return children;\n }\n }\n }]);\n\n return Manager;\n}(Component);\n\nManager.childContextTypes = {\n popperManager: PropTypes.object.isRequired\n};\nManager.propTypes = {\n tag: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\nManager.defaultProps = {\n tag: 'div'\n};\n\n\nexport default Manager;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport { createElement } from 'react';\nimport PropTypes from 'prop-types';\n\nvar Target = function Target(props, context) {\n var _props$component = props.component,\n component = _props$component === undefined ? 'div' : _props$component,\n innerRef = props.innerRef,\n children = props.children,\n restProps = _objectWithoutProperties(props, ['component', 'innerRef', 'children']);\n\n var popperManager = context.popperManager;\n\n var targetRef = function targetRef(node) {\n popperManager.setTargetNode(node);\n if (typeof innerRef === 'function') {\n innerRef(node);\n }\n };\n\n if (typeof children === 'function') {\n var targetProps = { ref: targetRef };\n return children({ targetProps: targetProps, restProps: restProps });\n }\n\n var componentProps = _extends({}, restProps);\n\n if (typeof component === 'string') {\n componentProps.ref = targetRef;\n } else {\n componentProps.innerRef = targetRef;\n }\n\n return createElement(component, componentProps, children);\n};\n\nTarget.contextTypes = {\n popperManager: PropTypes.object.isRequired\n};\n\nTarget.propTypes = {\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n innerRef: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\n\nexport default Target;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport { Component, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport PopperJS from 'popper.js';\n\nexport var placements = PopperJS.placements;\n\nvar Popper = function (_Component) {\n _inherits(Popper, _Component);\n\n function Popper() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Popper);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Popper.__proto__ || Object.getPrototypeOf(Popper)).call.apply(_ref, [this].concat(args))), _this), _this.state = {}, _this._setArrowNode = function (node) {\n _this._arrowNode = node;\n }, _this._getTargetNode = function () {\n if (_this.props.target) {\n return _this.props.target;\n } else if (!_this.context.popperManager || !_this.context.popperManager.getTargetNode()) {\n throw new Error('Target missing. Popper must be given a target from the Popper Manager, or as a prop.');\n }\n return _this.context.popperManager.getTargetNode();\n }, _this._getOffsets = function (data) {\n return Object.keys(data.offsets).map(function (key) {\n return data.offsets[key];\n });\n }, _this._isDataDirty = function (data) {\n if (_this.state.data) {\n return JSON.stringify(_this._getOffsets(_this.state.data)) !== JSON.stringify(_this._getOffsets(data));\n } else {\n return true;\n }\n }, _this._updateStateModifier = {\n enabled: true,\n order: 900,\n fn: function fn(data) {\n if (_this._isDataDirty(data)) {\n _this.setState({ data: data });\n }\n return data;\n }\n }, _this._getPopperStyle = function () {\n var data = _this.state.data;\n\n\n if (!_this._popper || !data) {\n return {\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0\n };\n }\n\n return _extends({\n position: data.offsets.popper.position\n }, data.styles);\n }, _this._getPopperPlacement = function () {\n return _this.state.data ? _this.state.data.placement : undefined;\n }, _this._getPopperHide = function () {\n return !!_this.state.data && _this.state.data.hide ? '' : undefined;\n }, _this._getArrowStyle = function () {\n if (!_this.state.data || !_this.state.data.offsets.arrow) {\n return {};\n } else {\n var _this$state$data$offs = _this.state.data.offsets.arrow,\n top = _this$state$data$offs.top,\n left = _this$state$data$offs.left;\n\n return { top: top, left: left };\n }\n }, _this._handlePopperRef = function (node) {\n _this._popperNode = node;\n if (node) {\n _this._createPopper();\n } else {\n _this._destroyPopper();\n }\n if (_this.props.innerRef) {\n _this.props.innerRef(node);\n }\n }, _this._scheduleUpdate = function () {\n _this._popper && _this._popper.scheduleUpdate();\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Popper, [{\n key: 'getChildContext',\n value: function getChildContext() {\n return {\n popper: {\n setArrowNode: this._setArrowNode,\n getArrowStyle: this._getArrowStyle\n }\n };\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(lastProps) {\n if (lastProps.placement !== this.props.placement || lastProps.eventsEnabled !== this.props.eventsEnabled || lastProps.target !== this.props.target) {\n this._destroyPopper();\n this._createPopper();\n }\n if (lastProps.children !== this.props.children) {\n this._scheduleUpdate();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this._destroyPopper();\n }\n }, {\n key: '_createPopper',\n value: function _createPopper() {\n var _this2 = this;\n\n var _props = this.props,\n placement = _props.placement,\n eventsEnabled = _props.eventsEnabled,\n positionFixed = _props.positionFixed;\n\n var modifiers = _extends({}, this.props.modifiers, {\n applyStyle: { enabled: false },\n updateState: this._updateStateModifier\n });\n if (this._arrowNode) {\n modifiers.arrow = _extends({}, this.props.modifiers.arrow || {}, {\n element: this._arrowNode\n });\n }\n this._popper = new PopperJS(this._getTargetNode(), this._popperNode, {\n placement: placement,\n positionFixed: positionFixed,\n eventsEnabled: eventsEnabled,\n modifiers: modifiers\n });\n\n // TODO: look into setTimeout scheduleUpdate call, without it, the popper will not position properly on creation\n setTimeout(function () {\n return _this2._scheduleUpdate();\n });\n }\n }, {\n key: '_destroyPopper',\n value: function _destroyPopper() {\n if (this._popper) {\n this._popper.destroy();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n component = _props2.component,\n innerRef = _props2.innerRef,\n placement = _props2.placement,\n eventsEnabled = _props2.eventsEnabled,\n positionFixed = _props2.positionFixed,\n modifiers = _props2.modifiers,\n children = _props2.children,\n restProps = _objectWithoutProperties(_props2, ['component', 'innerRef', 'placement', 'eventsEnabled', 'positionFixed', 'modifiers', 'children']);\n\n var popperStyle = this._getPopperStyle();\n var popperPlacement = this._getPopperPlacement();\n var popperHide = this._getPopperHide();\n\n if (typeof children === 'function') {\n var popperProps = {\n ref: this._handlePopperRef,\n style: popperStyle,\n 'data-placement': popperPlacement,\n 'data-x-out-of-boundaries': popperHide\n };\n return children({\n popperProps: popperProps,\n restProps: restProps,\n scheduleUpdate: this._scheduleUpdate\n });\n }\n\n var componentProps = _extends({}, restProps, {\n style: _extends({}, restProps.style, popperStyle),\n 'data-placement': popperPlacement,\n 'data-x-out-of-boundaries': popperHide\n });\n\n if (typeof component === 'string') {\n componentProps.ref = this._handlePopperRef;\n } else {\n componentProps.innerRef = this._handlePopperRef;\n }\n\n return createElement(component, componentProps, children);\n }\n }]);\n\n return Popper;\n}(Component);\n\nPopper.contextTypes = {\n popperManager: PropTypes.object\n};\nPopper.childContextTypes = {\n popper: PropTypes.object.isRequired\n};\nPopper.propTypes = {\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n innerRef: PropTypes.func,\n placement: PropTypes.oneOf(placements),\n eventsEnabled: PropTypes.bool,\n positionFixed: PropTypes.bool,\n modifiers: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n target: PropTypes.oneOfType([\n // the following check is needed for SSR\n PropTypes.instanceOf(typeof Element !== 'undefined' ? Element : Object), PropTypes.shape({\n getBoundingClientRect: PropTypes.func.isRequired,\n clientWidth: PropTypes.number.isRequired,\n clientHeight: PropTypes.number.isRequired\n })])\n};\nPopper.defaultProps = {\n component: 'div',\n placement: 'bottom',\n eventsEnabled: true,\n positionFixed: false,\n modifiers: {}\n};\n\n\nexport default Popper;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport { createElement } from 'react';\nimport PropTypes from 'prop-types';\n\nvar Arrow = function Arrow(props, context) {\n var _props$component = props.component,\n component = _props$component === undefined ? 'span' : _props$component,\n innerRef = props.innerRef,\n children = props.children,\n restProps = _objectWithoutProperties(props, ['component', 'innerRef', 'children']);\n\n var popper = context.popper;\n\n var arrowRef = function arrowRef(node) {\n popper.setArrowNode(node);\n if (typeof innerRef === 'function') {\n innerRef(node);\n }\n };\n var arrowStyle = popper.getArrowStyle();\n\n if (typeof children === 'function') {\n var arrowProps = {\n ref: arrowRef,\n style: arrowStyle\n };\n return children({ arrowProps: arrowProps, restProps: restProps });\n }\n\n var componentProps = _extends({}, restProps, {\n style: _extends({}, arrowStyle, restProps.style)\n });\n\n if (typeof component === 'string') {\n componentProps.ref = arrowRef;\n } else {\n componentProps.innerRef = arrowRef;\n }\n\n return createElement(component, componentProps, children);\n};\n\nArrow.contextTypes = {\n popper: PropTypes.object.isRequired\n};\n\nArrow.propTypes = {\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n innerRef: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\n\nexport default Arrow;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","import isFunction from 'lodash.isfunction';\nimport PropTypes from 'prop-types';\n\n// https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/js/src/modal.js#L436-L443\nexport function getScrollbarWidth() {\n let scrollDiv = document.createElement('div');\n // .modal-scrollbar-measure styles // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/scss/_modal.scss#L106-L113\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n}\n\nexport function setScrollbarWidth(padding) {\n document.body.style.paddingRight = padding > 0 ? `${padding}px` : null;\n}\n\nexport function isBodyOverflowing() {\n return document.body.clientWidth < window.innerWidth;\n}\n\nexport function getOriginalBodyPadding() {\n const style = window.getComputedStyle(document.body, null);\n\n return parseInt((style && style.getPropertyValue('padding-right')) || 0, 10);\n}\n\nexport function conditionallyUpdateScrollbar() {\n const scrollbarWidth = getScrollbarWidth();\n // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.6/js/src/modal.js#L433\n const fixedContent = document.querySelectorAll(\n '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\n )[0];\n const bodyPadding = fixedContent\n ? parseInt(fixedContent.style.paddingRight || 0, 10)\n : 0;\n\n if (isBodyOverflowing()) {\n setScrollbarWidth(bodyPadding + scrollbarWidth);\n }\n}\n\nlet globalCssModule;\n\nexport function setGlobalCssModule(cssModule) {\n globalCssModule = cssModule;\n}\n\nexport function mapToCssModules(className = '', cssModule = globalCssModule) {\n if (!cssModule) return className;\n return className\n .split(' ')\n .map(c => cssModule[c] || c)\n .join(' ');\n}\n\n/**\n * Returns a new object with the key/value pairs from `obj` that are not in the array `omitKeys`.\n */\nexport function omit(obj, omitKeys) {\n const result = {};\n Object.keys(obj).forEach((key) => {\n if (omitKeys.indexOf(key) === -1) {\n result[key] = obj[key];\n }\n });\n return result;\n}\n\n/**\n * Returns a filtered copy of an object with only the specified keys.\n */\nexport function pick(obj, keys) {\n const pickKeys = Array.isArray(keys) ? keys : [keys];\n let length = pickKeys.length;\n let key;\n const result = {};\n\n while (length > 0) {\n length -= 1;\n key = pickKeys[length];\n result[key] = obj[key];\n }\n return result;\n}\n\nlet warned = {};\n\nexport function warnOnce(message) {\n if (!warned[message]) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined') {\n console.error(message); // eslint-disable-line no-console\n }\n warned[message] = true;\n }\n}\n\nexport function deprecated(propType, explanation) {\n return function validate(props, propName, componentName, ...rest) {\n if (props[propName] !== null && typeof props[propName] !== 'undefined') {\n warnOnce(\n `\"${propName}\" property of \"${componentName}\" has been deprecated.\\n${explanation}`\n );\n }\n\n return propType(props, propName, componentName, ...rest);\n };\n}\n\nexport function DOMElement(props, propName, componentName) {\n if (!(props[propName] instanceof Element)) {\n return new Error(\n 'Invalid prop `' +\n propName +\n '` supplied to `' +\n componentName +\n '`. Expected prop to be an instance of Element. Validation failed.'\n );\n }\n}\n\nexport const targetPropType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n DOMElement,\n PropTypes.shape({ current: PropTypes.any })\n]);\n\n\n/* eslint key-spacing: [\"error\", { afterColon: true, align: \"value\" }] */\n// These are all setup to match what is in the bootstrap _variables.scss\n// https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss\nexport const TransitionTimeouts = {\n Fade: 150, // $transition-fade\n Collapse: 350, // $transition-collapse\n Modal: 300, // $modal-transition\n Carousel: 600 // $carousel-transition\n};\n\n// Duplicated Transition.propType keys to ensure that Reactstrap builds\n// for distribution properly exclude these keys for nested child HTML attributes\n// since `react-transition-group` removes propTypes in production builds.\nexport const TransitionPropTypeKeys = [\n 'in',\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\nexport const TransitionStatuses = {\n ENTERING: 'entering',\n ENTERED: 'entered',\n EXITING: 'exiting',\n EXITED: 'exited'\n};\n\nexport const keyCodes = {\n esc: 27,\n space: 32,\n enter: 13,\n tab: 9,\n up: 38,\n down: 40\n};\n\nexport const PopperPlacements = [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start'\n];\n\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nexport function isReactRefObj(target) {\n if (target && typeof target === 'object') {\n return 'current' in target;\n }\n return false;\n}\n\nexport function findDOMElements(target) {\n if (isReactRefObj(target)) {\n return target.current;\n }\n if (isFunction(target)) {\n return target();\n }\n if (typeof target === 'string' && canUseDOM) {\n let selection = document.querySelectorAll(target);\n if (!selection.length) {\n selection = document.querySelectorAll(`#${target}`);\n }\n if (!selection.length) {\n throw new Error(\n `The target '${target}' could not be identified in the dom, tip: check spelling`\n );\n }\n return selection;\n }\n return target;\n}\n\nexport function isArrayOrNodeList(els) {\n if (els === null) {\n return false;\n }\n return Array.isArray(els) || (canUseDOM && typeof els.length === 'number');\n}\n\n\nexport function getTarget(target) {\n const els = findDOMElements(target);\n if (isArrayOrNodeList(els)) {\n return els[0];\n }\n return els;\n}\n\nexport const defaultToggleEvents = ['touchstart', 'click'];\n\nexport function addMultipleEventListeners(_els, handler, _events) {\n let els = _els;\n if (!isArrayOrNodeList(els)) {\n els = [els];\n }\n\n let events = _events;\n if (typeof events === 'string') {\n events = events.split(/\\s+/);\n }\n\n if (\n !isArrayOrNodeList(els) ||\n typeof handler !== 'function' ||\n !Array.isArray(events)\n ) {\n throw new Error(`\n The first argument of this function must be DOM node or an array on DOM nodes or NodeList.\n The second must be a function.\n The third is a string or an array of strings that represents DOM events\n `);\n }\n events.forEach((event) => {\n els.forEach((el) => {\n el.addEventListener(event, handler);\n });\n });\n return function removeEvents() {\n events.forEach((event) => {\n els.forEach((el) => {\n el.removeEventListener(event, handler);\n });\n });\n };\n}\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 'object',\n 'embed',\n '[tabindex]:not(.modal)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n];\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n fluid: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div',\n};\n\nconst Container = (props) => {\n const {\n className,\n cssModule,\n fluid,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n fluid ? 'container-fluid' : 'container'\n ), cssModule);\n\n return (\n \n );\n};\n\nContainer.propTypes = propTypes;\nContainer.defaultProps = defaultProps;\n\nexport default Container;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n noGutters: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n form: PropTypes.bool\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst Row = (props) => {\n const {\n className,\n cssModule,\n noGutters,\n tag: Tag,\n form,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n noGutters ? 'no-gutters' : null,\n form ? 'form-row' : 'row'\n ), cssModule);\n\n return (\n \n );\n};\n\nRow.propTypes = propTypes;\nRow.defaultProps = defaultProps;\n\nexport default Row;\n","import isobject from 'lodash.isobject';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, deprecated } from './utils';\n\nconst colWidths = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst stringOrNumberProp = PropTypes.oneOfType([PropTypes.number, PropTypes.string]);\n\nconst columnProps = PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.number,\n PropTypes.string,\n PropTypes.shape({\n size: PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string]),\n push: deprecated(stringOrNumberProp, 'Please use the prop \"order\"'),\n pull: deprecated(stringOrNumberProp, 'Please use the prop \"order\"'),\n order: stringOrNumberProp,\n offset: stringOrNumberProp\n })\n]);\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n xs: columnProps,\n sm: columnProps,\n md: columnProps,\n lg: columnProps,\n xl: columnProps,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n widths: PropTypes.array,\n};\n\nconst defaultProps = {\n tag: 'div',\n widths: colWidths,\n};\n\nconst getColumnSizeClass = (isXs, colWidth, colSize) => {\n if (colSize === true || colSize === '') {\n return isXs ? 'col' : `col-${colWidth}`;\n } else if (colSize === 'auto') {\n return isXs ? 'col-auto' : `col-${colWidth}-auto`;\n }\n\n return isXs ? `col-${colSize}` : `col-${colWidth}-${colSize}`;\n};\n\nconst Col = (props) => {\n const {\n className,\n cssModule,\n widths,\n tag: Tag,\n ...attributes\n } = props;\n const colClasses = [];\n\n widths.forEach((colWidth, i) => {\n let columnProp = props[colWidth];\n\n delete attributes[colWidth];\n\n if (!columnProp && columnProp !== '') {\n return;\n }\n\n const isXs = !i;\n\n if (isobject(columnProp)) {\n const colSizeInterfix = isXs ? '-' : `-${colWidth}-`;\n const colClass = getColumnSizeClass(isXs, colWidth, columnProp.size);\n\n colClasses.push(mapToCssModules(classNames({\n [colClass]: columnProp.size || columnProp.size === '',\n [`order${colSizeInterfix}${columnProp.order}`]: columnProp.order || columnProp.order === 0,\n [`offset${colSizeInterfix}${columnProp.offset}`]: columnProp.offset || columnProp.offset === 0\n }), cssModule));\n } else {\n const colClass = getColumnSizeClass(isXs, colWidth, columnProp);\n colClasses.push(colClass);\n }\n });\n\n if (!colClasses.length) {\n colClasses.push('col');\n }\n\n const classes = mapToCssModules(classNames(\n className,\n colClasses\n ), cssModule);\n\n return (\n \n );\n};\n\nCol.propTypes = propTypes;\nCol.defaultProps = defaultProps;\n\nexport default Col;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, deprecated } from './utils';\n\nconst propTypes = {\n light: PropTypes.bool,\n dark: PropTypes.bool,\n inverse: deprecated(PropTypes.bool, 'Please use the prop \"dark\"'),\n full: PropTypes.bool,\n fixed: PropTypes.string,\n sticky: PropTypes.string,\n color: PropTypes.string,\n role: PropTypes.string,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n toggleable: deprecated(PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), 'Please use the prop \"expand\"'),\n expand: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n};\n\nconst defaultProps = {\n tag: 'nav',\n expand: false,\n};\n\nconst getExpandClass = (expand) => {\n if (expand === false) {\n return false;\n } else if (expand === true || expand === 'xs') {\n return 'navbar-expand';\n }\n\n return `navbar-expand-${expand}`;\n};\n\n// To better maintain backwards compatibility while toggleable is deprecated.\n// We must map breakpoints to the next breakpoint so that toggleable and expand do the same things at the same breakpoint.\nconst toggleableToExpand = {\n xs: 'sm',\n sm: 'md',\n md: 'lg',\n lg: 'xl',\n};\n\nconst getToggleableClass = (toggleable) => {\n if (toggleable === undefined || toggleable === 'xl') {\n return false;\n } else if (toggleable === false) {\n return 'navbar-expand';\n }\n\n return `navbar-expand-${toggleable === true ? 'sm' : (toggleableToExpand[toggleable] || toggleable)}`;\n};\n\nconst Navbar = (props) => {\n const {\n toggleable,\n expand,\n className,\n cssModule,\n light,\n dark,\n inverse,\n fixed,\n sticky,\n color,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'navbar',\n getExpandClass(expand) || getToggleableClass(toggleable),\n {\n 'navbar-light': light,\n 'navbar-dark': inverse || dark,\n [`bg-${color}`]: color,\n [`fixed-${fixed}`]: fixed,\n [`sticky-${sticky}`]: sticky,\n }\n ), cssModule);\n\n return (\n \n );\n};\n\nNavbar.propTypes = propTypes;\nNavbar.defaultProps = defaultProps;\n\nexport default Navbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'a'\n};\n\nconst NavbarBrand = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'navbar-brand'\n ), cssModule);\n\n return (\n \n );\n};\n\nNavbarBrand.propTypes = propTypes;\nNavbarBrand.defaultProps = defaultProps;\n\nexport default NavbarBrand;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n type: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n children: PropTypes.node,\n};\n\nconst defaultProps = {\n tag: 'button',\n type: 'button'\n};\n\nconst NavbarToggler = (props) => {\n const {\n className,\n cssModule,\n children,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'navbar-toggler'\n ), cssModule);\n\n return (\n \n {children || }\n \n );\n};\n\nNavbarToggler.propTypes = propTypes;\nNavbarToggler.defaultProps = defaultProps;\n\nexport default NavbarToggler;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tabs: PropTypes.bool,\n pills: PropTypes.bool,\n vertical: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n horizontal: PropTypes.string,\n justified: PropTypes.bool,\n fill: PropTypes.bool,\n navbar: PropTypes.bool,\n card: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'ul',\n vertical: false,\n};\n\nconst getVerticalClass = (vertical) => {\n if (vertical === false) {\n return false;\n } else if (vertical === true || vertical === 'xs') {\n return 'flex-column';\n }\n\n return `flex-${vertical}-column`;\n};\n\nconst Nav = (props) => {\n const {\n className,\n cssModule,\n tabs,\n pills,\n vertical,\n horizontal,\n justified,\n fill,\n navbar,\n card,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n navbar ? 'navbar-nav' : 'nav',\n horizontal ? `justify-content-${horizontal}` : false,\n getVerticalClass(vertical),\n {\n 'nav-tabs': tabs,\n 'card-header-tabs': card && tabs,\n 'nav-pills': pills,\n 'card-header-pills': card && pills,\n 'nav-justified': justified,\n 'nav-fill': fill,\n }\n ), cssModule);\n\n return (\n \n );\n};\n\nNav.propTypes = propTypes;\nNav.defaultProps = defaultProps;\n\nexport default Nav;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n active: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'li'\n};\n\nconst NavItem = (props) => {\n const {\n className,\n cssModule,\n active,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'nav-item',\n active ? 'active' : false\n ), cssModule);\n\n return (\n \n );\n};\n\nNavItem.propTypes = propTypes;\nNavItem.defaultProps = defaultProps;\n\nexport default NavItem;\n","/* eslint react/no-find-dom-node: 0 */\n// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport { Manager } from 'react-popper';\nimport classNames from 'classnames';\nimport { mapToCssModules, omit, keyCodes, deprecated } from './utils';\n\nconst propTypes = {\n disabled: PropTypes.bool,\n dropup: deprecated(PropTypes.bool, 'Please use the prop \"direction\" with the value \"up\".'),\n direction: PropTypes.oneOf(['up', 'down', 'left', 'right']),\n group: PropTypes.bool,\n isOpen: PropTypes.bool,\n nav: PropTypes.bool,\n active: PropTypes.bool,\n addonType: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['prepend', 'append'])]),\n size: PropTypes.string,\n tag: PropTypes.string,\n toggle: PropTypes.func,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n inNavbar: PropTypes.bool,\n setActiveFromChild: PropTypes.bool,\n};\n\nconst defaultProps = {\n isOpen: false,\n direction: 'down',\n nav: false,\n active: false,\n addonType: false,\n inNavbar: false,\n setActiveFromChild: false\n};\n\nconst childContextTypes = {\n toggle: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n direction: PropTypes.oneOf(['up', 'down', 'left', 'right']).isRequired,\n inNavbar: PropTypes.bool.isRequired,\n};\n\nclass Dropdown extends React.Component {\n constructor(props) {\n super(props);\n\n this.addEvents = this.addEvents.bind(this);\n this.handleDocumentClick = this.handleDocumentClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.removeEvents = this.removeEvents.bind(this);\n this.toggle = this.toggle.bind(this);\n }\n\n getChildContext() {\n return {\n toggle: this.props.toggle,\n isOpen: this.props.isOpen,\n direction: (this.props.direction === 'down' && this.props.dropup) ? 'up' : this.props.direction,\n inNavbar: this.props.inNavbar,\n };\n }\n\n componentDidMount() {\n this.handleProps();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.isOpen !== prevProps.isOpen) {\n this.handleProps();\n }\n }\n\n componentWillUnmount() {\n this.removeEvents();\n }\n\n getContainer() {\n return ReactDOM.findDOMNode(this);\n }\n\n addEvents() {\n ['click', 'touchstart', 'keyup'].forEach(event =>\n document.addEventListener(event, this.handleDocumentClick, true)\n );\n }\n\n removeEvents() {\n ['click', 'touchstart', 'keyup'].forEach(event =>\n document.removeEventListener(event, this.handleDocumentClick, true)\n );\n }\n\n handleDocumentClick(e) {\n if (e && (e.which === 3 || (e.type === 'keyup' && e.which !== keyCodes.tab))) return;\n const container = this.getContainer();\n\n if (container.contains(e.target) && container !== e.target && (e.type !== 'keyup' || e.which === keyCodes.tab)) {\n return;\n }\n\n this.toggle(e);\n }\n\n handleKeyDown(e) {\n if (keyCodes.tab === e.which ||\n (/button/i.test(e.target.tagName) && e.which === keyCodes.space) ||\n /input|textarea/i.test(e.target.tagName)) {\n return;\n }\n\n e.preventDefault();\n if (this.props.disabled) return;\n\n const container = this.getContainer();\n\n if (e.which === keyCodes.space && keyCodes.enter && this.props.isOpen && container !== e.target) {\n e.target.click();\n }\n\n if (e.which === keyCodes.esc || !this.props.isOpen) {\n this.toggle(e);\n container.querySelector('[aria-expanded]').focus();\n return;\n }\n\n const menuClass = mapToCssModules('dropdown-menu', this.props.cssModule);\n const itemClass = mapToCssModules('dropdown-item', this.props.cssModule);\n const disabledClass = mapToCssModules('disabled', this.props.cssModule);\n\n const items = container.querySelectorAll(`.${menuClass} .${itemClass}:not(.${disabledClass})`);\n if (!items.length) return;\n\n let index = -1;\n\n const charPressed = String.fromCharCode(e.which).toLowerCase();\n\n for (let i = 0; i < items.length; i += 1) {\n const firstLetter = items[i].textContent && items[i].textContent[0].toLowerCase();\n if (firstLetter === charPressed || items[i] === e.target) {\n index = i;\n break;\n }\n }\n\n if (e.which === keyCodes.up && index > 0) {\n index -= 1;\n }\n\n if (e.which === keyCodes.down && index < items.length - 1) {\n index += 1;\n }\n\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n }\n\n handleProps() {\n if (this.props.isOpen) {\n this.addEvents();\n } else {\n this.removeEvents();\n }\n }\n\n toggle(e) {\n if (this.props.disabled) {\n return e && e.preventDefault();\n }\n\n return this.props.toggle(e);\n }\n\n render() {\n const {\n className,\n cssModule,\n dropup,\n isOpen,\n group,\n size,\n nav,\n setActiveFromChild,\n active,\n addonType,\n ...attrs\n } = omit(this.props, ['toggle', 'disabled', 'inNavbar', 'direction']);\n\n const direction = (this.props.direction === 'down' && dropup) ? 'up' : this.props.direction;\n\n attrs.tag = attrs.tag || (nav ? 'li' : 'div');\n\n let subItemIsActive = false;\n if (setActiveFromChild) {\n React.Children.map(this.props.children[1].props.children,\n (dropdownItem) => {\n if (dropdownItem.props.active) subItemIsActive = true;\n }\n );\n }\n\n const classes = mapToCssModules(classNames(\n className,\n direction !== 'down' && `drop${direction}`,\n nav && active ? 'active' : false,\n setActiveFromChild && subItemIsActive ? 'active' : false,\n {\n [`input-group-${addonType}`]: addonType,\n 'btn-group': group,\n [`btn-group-${size}`]: !!size,\n dropdown: !group && !addonType,\n show: isOpen,\n 'nav-item': nav\n }\n ), cssModule);\n\n return ;\n }\n}\n\nDropdown.propTypes = propTypes;\nDropdown.defaultProps = defaultProps;\nDropdown.childContextTypes = childContextTypes;\n\nexport default Dropdown;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n disabled: PropTypes.bool,\n active: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n onClick: PropTypes.func,\n href: PropTypes.any,\n};\n\nconst defaultProps = {\n tag: 'a',\n};\n\nclass NavLink extends React.Component {\n constructor(props) {\n super(props);\n\n this.onClick = this.onClick.bind(this);\n }\n\n onClick(e) {\n if (this.props.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.props.href === '#') {\n e.preventDefault();\n }\n\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n }\n\n render() {\n let {\n className,\n cssModule,\n active,\n tag: Tag,\n innerRef,\n ...attributes\n } = this.props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'nav-link',\n {\n disabled: attributes.disabled,\n active: active\n }\n ), cssModule);\n\n return (\n \n );\n }\n}\n\nNavLink.propTypes = propTypes;\nNavLink.defaultProps = defaultProps;\n\nexport default NavLink;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n listTag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n listClassName: PropTypes.string,\n cssModule: PropTypes.object,\n children: PropTypes.node,\n 'aria-label': PropTypes.string\n};\n\nconst defaultProps = {\n tag: 'nav',\n listTag: 'ol',\n 'aria-label': 'breadcrumb'\n};\n\nconst Breadcrumb = (props) => {\n const {\n className,\n listClassName,\n cssModule,\n children,\n tag: Tag,\n listTag: ListTag,\n 'aria-label': label,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className\n ), cssModule);\n\n const listClasses = mapToCssModules(classNames(\n 'breadcrumb',\n listClassName\n ), cssModule);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nBreadcrumb.propTypes = propTypes;\nBreadcrumb.defaultProps = defaultProps;\n\nexport default Breadcrumb;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n active: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'li'\n};\n\nconst BreadcrumbItem = (props) => {\n const {\n className,\n cssModule,\n active,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n active ? 'active' : false,\n 'breadcrumb-item'\n ), cssModule);\n\n return (\n \n );\n};\n\nBreadcrumbItem.propTypes = propTypes;\nBreadcrumbItem.defaultProps = defaultProps;\n\nexport default BreadcrumbItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n active: PropTypes.bool,\n 'aria-label': PropTypes.string,\n block: PropTypes.bool,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n outline: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n onClick: PropTypes.func,\n size: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n close: PropTypes.bool,\n};\n\nconst defaultProps = {\n color: 'secondary',\n tag: 'button',\n};\n\nclass Button extends React.Component {\n constructor(props) {\n super(props);\n\n this.onClick = this.onClick.bind(this);\n }\n\n onClick(e) {\n if (this.props.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n }\n\n render() {\n let {\n active,\n 'aria-label': ariaLabel,\n block,\n className,\n close,\n cssModule,\n color,\n outline,\n size,\n tag: Tag,\n innerRef,\n ...attributes\n } = this.props;\n\n if (close && typeof attributes.children === 'undefined') {\n attributes.children = ×;\n }\n\n const btnOutlineColor = `btn${outline ? '-outline' : ''}-${color}`;\n\n const classes = mapToCssModules(classNames(\n className,\n { close },\n close || 'btn',\n close || btnOutlineColor,\n size ? `btn-${size}` : false,\n block ? 'btn-block' : false,\n { active, disabled: this.props.disabled }\n ), cssModule);\n\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n\n const defaultAriaLabel = close ? 'Close' : null;\n\n return (\n \n );\n }\n}\n\nButton.propTypes = propTypes;\nButton.defaultProps = defaultProps;\n\nexport default Button;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Dropdown from './Dropdown';\n\nconst propTypes = {\n children: PropTypes.node,\n};\n\nconst ButtonDropdown = (props) => {\n return (\n \n );\n};\n\nButtonDropdown.propTypes = propTypes;\n\nexport default ButtonDropdown;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n 'aria-label': PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n role: PropTypes.string,\n size: PropTypes.string,\n vertical: PropTypes.bool,\n};\n\nconst defaultProps = {\n tag: 'div',\n role: 'group',\n};\n\nconst ButtonGroup = (props) => {\n const {\n className,\n cssModule,\n size,\n vertical,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n size ? 'btn-group-' + size : false,\n vertical ? 'btn-group-vertical' : 'btn-group'\n ), cssModule);\n\n return (\n \n );\n};\n\nButtonGroup.propTypes = propTypes;\nButtonGroup.defaultProps = defaultProps;\n\nexport default ButtonGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n 'aria-label': PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n role: PropTypes.string,\n};\n\nconst defaultProps = {\n tag: 'div',\n role: 'toolbar',\n};\n\nconst ButtonToolbar = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'btn-toolbar'\n ), cssModule);\n\n return (\n \n );\n};\n\nButtonToolbar.propTypes = propTypes;\nButtonToolbar.defaultProps = defaultProps;\n\nexport default ButtonToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, omit } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n divider: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n header: PropTypes.bool,\n onClick: PropTypes.func,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.bool\n};\n\nconst contextTypes = {\n toggle: PropTypes.func\n};\n\nconst defaultProps = {\n tag: 'button',\n toggle: true\n};\n\nclass DropdownItem extends React.Component {\n constructor(props) {\n super(props);\n\n this.onClick = this.onClick.bind(this);\n this.getTabIndex = this.getTabIndex.bind(this);\n }\n\n onClick(e) {\n if (this.props.disabled || this.props.header || this.props.divider) {\n e.preventDefault();\n return;\n }\n\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n\n if (this.props.toggle) {\n this.context.toggle(e);\n }\n }\n\n getTabIndex() {\n if (this.props.disabled || this.props.header || this.props.divider) {\n return '-1';\n }\n\n return '0';\n }\n\n render() {\n const tabIndex = this.getTabIndex();\n let {\n className,\n cssModule,\n divider,\n tag: Tag,\n header,\n active,\n ...props } = omit(this.props, ['toggle']);\n\n const classes = mapToCssModules(classNames(\n className,\n {\n disabled: props.disabled,\n 'dropdown-item': !divider && !header,\n active: active,\n 'dropdown-header': header,\n 'dropdown-divider': divider\n }\n ), cssModule);\n\n if (Tag === 'button') {\n if (header) {\n Tag = 'h6';\n } else if (divider) {\n Tag = 'div';\n } else if (props.href) {\n Tag = 'a';\n }\n }\n\n return (\n \n );\n }\n}\n\nDropdownItem.propTypes = propTypes;\nDropdownItem.defaultProps = defaultProps;\nDropdownItem.contextTypes = contextTypes;\n\nexport default DropdownItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Popper } from 'react-popper';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.string,\n children: PropTypes.node.isRequired,\n right: PropTypes.bool,\n flip: PropTypes.bool,\n modifiers: PropTypes.object,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n persist: PropTypes.bool,\n};\n\nconst defaultProps = {\n tag: 'div',\n flip: true,\n};\n\nconst contextTypes = {\n isOpen: PropTypes.bool.isRequired,\n direction: PropTypes.oneOf(['up', 'down', 'left', 'right']).isRequired,\n inNavbar: PropTypes.bool.isRequired,\n};\n\nconst noFlipModifier = { flip: { enabled: false } };\n\nconst directionPositionMap = {\n up: 'top',\n left: 'left',\n right: 'right',\n down: 'bottom',\n};\n\nconst DropdownMenu = (props, context) => {\n const { className, cssModule, right, tag, flip, modifiers, persist, ...attrs } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'dropdown-menu',\n {\n 'dropdown-menu-right': right,\n show: context.isOpen,\n }\n ), cssModule);\n\n let Tag = tag;\n\n if (persist || (context.isOpen && !context.inNavbar)) {\n Tag = Popper;\n\n const position1 = directionPositionMap[context.direction] || 'bottom';\n const position2 = right ? 'end' : 'start';\n attrs.placement = `${position1}-${position2}`;\n attrs.component = tag;\n attrs.modifiers = !flip ? {\n ...modifiers,\n ...noFlipModifier,\n } : modifiers;\n }\n\n return (\n \n );\n};\n\nDropdownMenu.propTypes = propTypes;\nDropdownMenu.defaultProps = defaultProps;\nDropdownMenu.contextTypes = contextTypes;\n\nexport default DropdownMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Target } from 'react-popper';\nimport { mapToCssModules } from './utils';\nimport Button from './Button';\n\nconst propTypes = {\n caret: PropTypes.bool,\n color: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n 'aria-haspopup': PropTypes.bool,\n split: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n nav: PropTypes.bool,\n};\n\nconst defaultProps = {\n 'aria-haspopup': true,\n color: 'secondary',\n};\n\nconst contextTypes = {\n isOpen: PropTypes.bool.isRequired,\n toggle: PropTypes.func.isRequired,\n inNavbar: PropTypes.bool.isRequired,\n};\n\nclass DropdownToggle extends React.Component {\n constructor(props) {\n super(props);\n\n this.onClick = this.onClick.bind(this);\n }\n\n onClick(e) {\n if (this.props.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.props.nav && !this.props.tag) {\n e.preventDefault();\n }\n\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n\n this.context.toggle(e);\n }\n\n render() {\n const { className, color, cssModule, caret, split, nav, tag, ...props } = this.props;\n const ariaLabel = props['aria-label'] || 'Toggle Dropdown';\n const classes = mapToCssModules(classNames(\n className,\n {\n 'dropdown-toggle': caret || split,\n 'dropdown-toggle-split': split,\n 'nav-link': nav\n }\n ), cssModule);\n const children = props.children || {ariaLabel};\n\n let Tag;\n\n if (nav && !tag) {\n Tag = 'a';\n props.href = '#';\n } else if (!tag) {\n Tag = Button;\n props.color = color;\n props.cssModule = cssModule;\n } else {\n Tag = tag;\n }\n\n if (this.context.inNavbar) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n}\n\nDropdownToggle.propTypes = propTypes;\nDropdownToggle.defaultProps = defaultProps;\nDropdownToggle.contextTypes = contextTypes;\n\nexport default DropdownToggle;\n","'use strict';\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = undefined;\nexports.transitionTimeout = transitionTimeout;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction transitionTimeout(transitionType) {\n var timeoutPropName = 'transition' + transitionType + 'Timeout';\n var enabledPropName = 'transition' + transitionType;\n\n return function (props) {\n // If the transition is enabled\n if (props[enabledPropName]) {\n // If no timeout duration is provided\n if (props[timeoutPropName] == null) {\n return new Error(timeoutPropName + ' wasn\\'t supplied to CSSTransitionGroup: ' + 'this can cause unreliable animations and won\\'t be supported in ' + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.');\n\n // If the duration isn't a number\n } else if (typeof props[timeoutPropName] !== 'number') {\n return new Error(timeoutPropName + ' must be a number (in milliseconds)');\n }\n }\n\n return null;\n };\n}\n\nvar timeoutsShape = exports.timeoutsShape = _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.shape({\n enter: _propTypes2.default.number,\n exit: _propTypes2.default.number\n}).isRequired]);\n\nvar classNamesShape = exports.classNamesShape = _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n enter: _propTypes2.default.string,\n exit: _propTypes2.default.string,\n active: _propTypes2.default.string\n}), _propTypes2.default.shape({\n enter: _propTypes2.default.string,\n enterDone: _propTypes2.default.string,\n enterActive: _propTypes2.default.string,\n exit: _propTypes2.default.string,\n exitDone: _propTypes2.default.string,\n exitActive: _propTypes2.default.string\n})]);","'use strict';\n\nexports.__esModule = true;\nexports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = undefined;\n\nvar _propTypes = require('prop-types');\n\nvar PropTypes = _interopRequireWildcard(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _PropTypes = require('./utils/PropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = exports.UNMOUNTED = 'unmounted';\nvar EXITED = exports.EXITED = 'exited';\nvar ENTERING = exports.ENTERING = 'entering';\nvar ENTERED = exports.ENTERED = 'entered';\nvar EXITING = exports.EXITING = 'exiting';\n\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the components.\n * It's up to you to give meaning and effect to those states. For example we can\n * add styles to a component when it enters or exits:\n *\n * ```jsx\n * import Transition from 'react-transition-group/Transition';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {(state) => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n *
\n * );\n * ```\n *\n * As noted the `Transition` component doesn't _do_ anything by itself to its child component.\n * What it does do is track transition states over time so you can update the\n * component (such as by adding styles or classes) when it changes states.\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component begins the\n * \"Enter\" stage. During this stage, the component will shift from its current transition state,\n * to `'entering'` for the duration of the transition and then to the `'entered'` stage once\n * it's complete. Let's take the following example:\n *\n * ```jsx\n * state = { in: false };\n *\n * toggleEnterState = () => {\n * this.setState({ in: true });\n * }\n *\n * render() {\n * return (\n *
\n * \n * \n *
\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state and\n * stay there for 500ms (the value of `timeout`) before it finally switches to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from `'exiting'` to `'exited'`.\n *\n * ## Timing\n *\n * Timing is often the trickiest part of animation, mistakes can result in slight delays\n * that are hard to pin down. A common example is when you want to add an exit transition,\n * you should set the desired final styles when the state is `'exiting'`. That's when the\n * transition to those styles will start and, if you matched the `timeout` prop with the\n * CSS Transition duration, it will end exactly when the state changes to `'exited'`.\n *\n * > **Note**: For simpler transitions the `Transition` component might be enough, but\n * > take into account that it's platform-agnostic, while the `CSSTransition` component\n * > [forces reflows](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * > in order to make more complex transitions more predictable. For example, even though\n * > classes `example-enter` and `example-enter-active` are applied immediately one after\n * > another, you can still transition from one to the other because of the forced reflow\n * > (read [this issue](https://github.com/reactjs/react-transition-group/issues/159#issuecomment-322761171)\n * > for more info). Take this into account when choosing between `Transition` and\n * > `CSSTransition`.\n *\n * ## Example\n *\n * \n *\n */\n\nvar Transition = function (_React$Component) {\n _inherits(Transition, _React$Component);\n\n function Transition(props, context) {\n _classCallCheck(this, Transition);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n var parentGroup = context.transitionGroup;\n // In the context of a TransitionGroup all enters are really appears\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n\n var initialStatus = void 0;\n _this.nextStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.nextStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = { status: initialStatus };\n\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.prototype.getChildContext = function getChildContext() {\n return { transitionGroup: null }; // allows for nested Transitions\n };\n\n Transition.prototype.componentDidMount = function componentDidMount() {\n this.updateStatus(true);\n };\n\n Transition.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var _ref = this.pendingState || this.state,\n status = _ref.status;\n\n if (nextProps.in) {\n if (status === UNMOUNTED) {\n this.setState({ status: EXITED });\n }\n if (status !== ENTERING && status !== ENTERED) {\n this.nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n this.nextStatus = EXITING;\n }\n }\n };\n\n Transition.prototype.componentDidUpdate = function componentDidUpdate() {\n this.updateStatus();\n };\n\n Transition.prototype.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n Transition.prototype.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n\n var exit = void 0,\n enter = void 0,\n appear = void 0;\n\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter;\n appear = timeout.appear;\n }\n return { exit: exit, enter: enter, appear: appear };\n };\n\n Transition.prototype.updateStatus = function updateStatus() {\n var mounting = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var nextStatus = this.nextStatus;\n\n if (nextStatus !== null) {\n this.nextStatus = null;\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n var node = _reactDom2.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({ status: UNMOUNTED });\n }\n };\n\n Transition.prototype.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n\n var timeouts = this.getTimeouts();\n\n // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n if (!mounting && !enter) {\n this.safeSetState({ status: ENTERED }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n\n this.safeSetState({ status: ENTERING }, function () {\n _this2.props.onEntering(node, appearing);\n\n // FIXME: appear timeout?\n _this2.onTransitionEnd(node, timeouts.enter, function () {\n _this2.safeSetState({ status: ENTERED }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n Transition.prototype.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n\n var timeouts = this.getTimeouts();\n\n // no exit animation skip right to EXITED\n if (!exit) {\n this.safeSetState({ status: EXITED }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n this.props.onExit(node);\n\n this.safeSetState({ status: EXITING }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({ status: EXITED }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n Transition.prototype.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n Transition.prototype.safeSetState = function safeSetState(nextState, callback) {\n var _this4 = this;\n\n // We need to track pending updates for instances where a cWRP fires quickly\n // after cDM and before the state flushes, which would double trigger a\n // transition\n this.pendingState = nextState;\n\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, function () {\n _this4.pendingState = null;\n callback();\n });\n };\n\n Transition.prototype.setNextCallback = function setNextCallback(callback) {\n var _this5 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this5.nextCallback = null;\n\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n Transition.prototype.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n\n if (node) {\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n } else {\n setTimeout(this.nextCallback, 0);\n }\n };\n\n Transition.prototype.render = function render() {\n var status = this.state.status;\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _props = this.props,\n children = _props.children,\n childProps = _objectWithoutProperties(_props, ['children']);\n // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react2.default.Children.only(children);\n return _react2.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react2.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\n\n\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A `function` child can be used instead of a React element.\n * This function is called with the current transition status\n * ('entering', 'entered', 'exiting', 'exited', 'unmounted'), which can be used\n * to apply context specific props to a component.\n *\n * ```jsx\n * \n * {(status) => (\n * \n * )}\n * \n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the `` component mounts.\n * If you want to transition on the first mount set `appear` to `true`, and the\n * component will transition in as soon as the `` mounts.\n *\n * > Note: there are no specific \"appear\" states. `appear` only adds an additional `enter` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided\n *\n * You may specify a single timeout for all transitions like: `timeout={500}`,\n * or individually like:\n *\n * ```jsx\n * timeout={{\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * @type {number | { enter?: number, exit?: number }}\n */\n timeout: function timeout(props) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var pt = _PropTypes.timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n return pt.apply(undefined, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {};\n\n// Name the function so it is clearer in the documentation\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\n\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nexports.default = Transition;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Transition from 'react-transition-group/Transition';\nimport { mapToCssModules, omit, pick, TransitionPropTypeKeys, TransitionTimeouts } from './utils';\n\nconst propTypes = {\n ...Transition.propTypes,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]),\n tag: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n baseClass: PropTypes.string,\n baseClassActive: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n PropTypes.func,\n ]),\n};\n\nconst defaultProps = {\n ...Transition.defaultProps,\n tag: 'div',\n baseClass: 'fade',\n baseClassActive: 'show',\n timeout: TransitionTimeouts.Fade,\n appear: true,\n enter: true,\n exit: true,\n in: true,\n};\n\nfunction Fade(props) {\n const {\n tag: Tag,\n baseClass,\n baseClassActive,\n className,\n cssModule,\n children,\n innerRef,\n ...otherProps\n } = props;\n\n // In NODE_ENV=production the Transition.propTypes are wrapped which results in an\n // empty object \"{}\". This is the result of the `react-transition-group` babel\n // configuration settings. Therefore, to ensure that production builds work without\n // error, we can either explicitly define keys or use the Transition.defaultProps.\n // Using the Transition.defaultProps excludes any required props. Thus, the best\n // solution is to explicitly define required props in our utilities and reference these.\n // This also gives us more flexibility in the future to remove the prop-types\n // dependency in distribution builds (Similar to how `react-transition-group` does).\n // Note: Without omitting the `react-transition-group` props, the resulting child\n // Tag component would inherit the Transition properties as attributes for the HTML\n // element which results in errors/warnings for non-valid attributes.\n const transitionProps = pick(otherProps, TransitionPropTypeKeys);\n const childProps = omit(otherProps, TransitionPropTypeKeys);\n\n return (\n \n {(status) => {\n const isActive = status === 'entered';\n const classes = mapToCssModules(classNames(\n className,\n baseClass,\n isActive && baseClassActive\n ), cssModule);\n return (\n \n {children}\n \n );\n }}\n \n );\n}\n\nFade.propTypes = propTypes;\nFade.defaultProps = defaultProps;\n\nexport default Fade;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n color: PropTypes.string,\n pill: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n color: 'secondary',\n pill: false,\n tag: 'span'\n};\n\nconst Badge = (props) => {\n let {\n className,\n cssModule,\n color,\n pill,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'badge',\n 'badge-' + color,\n pill ? 'badge-pill' : false\n ), cssModule);\n\n if (attributes.href && Tag === 'span') {\n Tag = 'a';\n }\n\n return (\n \n );\n};\n\nBadge.propTypes = propTypes;\nBadge.defaultProps = defaultProps;\n\nexport default Badge;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, deprecated } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n inverse: PropTypes.bool,\n color: PropTypes.string,\n block: deprecated(PropTypes.bool, 'Please use the props \"body\"'),\n body: PropTypes.bool,\n outline: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n PropTypes.func,\n ]),\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst Card = (props) => {\n const {\n className,\n cssModule,\n color,\n block,\n body,\n inverse,\n outline,\n tag: Tag,\n innerRef,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card',\n inverse ? 'text-white' : false,\n block || body ? 'card-body' : false,\n color ? `${outline ? 'border' : 'bg'}-${color}` : false\n ), cssModule);\n\n return (\n \n );\n};\n\nCard.propTypes = propTypes;\nCard.defaultProps = defaultProps;\n\nexport default Card;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst CardGroup = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-group'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardGroup.propTypes = propTypes;\nCardGroup.defaultProps = defaultProps;\n\nexport default CardGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div',\n};\n\nconst CardDeck = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-deck'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardDeck.propTypes = propTypes;\nCardDeck.defaultProps = defaultProps;\n\nexport default CardDeck;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst CardColumns = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-columns'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardColumns.propTypes = propTypes;\nCardColumns.defaultProps = defaultProps;\n\nexport default CardColumns;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst CardBody = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-body'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardBody.propTypes = propTypes;\nCardBody.defaultProps = defaultProps;\n\nexport default CardBody;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'a'\n};\n\nconst CardLink = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n innerRef,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-link'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardLink.propTypes = propTypes;\nCardLink.defaultProps = defaultProps;\n\nexport default CardLink;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst CardFooter = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-footer'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardFooter.propTypes = propTypes;\nCardFooter.defaultProps = defaultProps;\n\nexport default CardFooter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst CardHeader = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-header'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardHeader.propTypes = propTypes;\nCardHeader.defaultProps = defaultProps;\n\nexport default CardHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n top: PropTypes.bool,\n bottom: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'img'\n};\n\nconst CardImg = (props) => {\n const {\n className,\n cssModule,\n top,\n bottom,\n tag: Tag,\n ...attributes\n } = props;\n\n let cardImgClassName = 'card-img';\n if (top) {\n cardImgClassName = 'card-img-top';\n }\n if (bottom) {\n cardImgClassName = 'card-img-bottom';\n }\n\n const classes = mapToCssModules(classNames(\n className,\n cardImgClassName\n ), cssModule);\n\n return (\n \n );\n};\n\nCardImg.propTypes = propTypes;\nCardImg.defaultProps = defaultProps;\n\nexport default CardImg;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst CardImgOverlay = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-img-overlay'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardImgOverlay.propTypes = propTypes;\nCardImgOverlay.defaultProps = defaultProps;\n\nexport default CardImgOverlay;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Transition from 'react-transition-group/Transition';\nimport { mapToCssModules, TransitionTimeouts, TransitionStatuses } from './utils';\n\nclass CarouselItem extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n startAnimation: false,\n };\n\n this.onEnter = this.onEnter.bind(this);\n this.onEntering = this.onEntering.bind(this);\n this.onExit = this.onExit.bind(this);\n this.onExiting = this.onExiting.bind(this);\n this.onExited = this.onExited.bind(this);\n }\n\n onEnter(node, isAppearing) {\n this.setState({ startAnimation: false });\n this.props.onEnter(node, isAppearing);\n }\n\n onEntering(node, isAppearing) {\n // getting this variable triggers a reflow\n const offsetHeight = node.offsetHeight;\n this.setState({ startAnimation: true });\n this.props.onEntering(node, isAppearing);\n return offsetHeight;\n }\n\n onExit(node) {\n this.setState({ startAnimation: false });\n this.props.onExit(node);\n }\n\n onExiting(node) {\n this.setState({ startAnimation: true });\n node.dispatchEvent(new CustomEvent('slide.bs.carousel'));\n this.props.onExiting(node);\n }\n\n onExited(node) {\n node.dispatchEvent(new CustomEvent('slid.bs.carousel'));\n this.props.onExited(node);\n }\n\n render() {\n const { in: isIn, children, cssModule, slide, tag: Tag, className, ...transitionProps } = this.props;\n\n return (\n \n {(status) => {\n const { direction } = this.context;\n const isActive = (status === TransitionStatuses.ENTERED) || (status === TransitionStatuses.EXITING);\n const directionClassName = (status === TransitionStatuses.ENTERING || status === TransitionStatuses.EXITING) &&\n this.state.startAnimation &&\n (direction === 'right' ? 'carousel-item-left' : 'carousel-item-right');\n const orderClassName = (status === TransitionStatuses.ENTERING) &&\n (direction === 'right' ? 'carousel-item-next' : 'carousel-item-prev');\n const itemClasses = mapToCssModules(classNames(\n className,\n 'carousel-item',\n isActive && 'active',\n directionClassName,\n orderClassName,\n ), cssModule);\n\n return (\n \n {children}\n \n );\n }}\n \n );\n }\n}\n\nCarouselItem.propTypes = {\n ...Transition.propTypes,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n in: PropTypes.bool,\n cssModule: PropTypes.object,\n children: PropTypes.node,\n slide: PropTypes.bool,\n className: PropTypes.string,\n};\n\nCarouselItem.defaultProps = {\n ...Transition.defaultProps,\n tag: 'div',\n timeout: TransitionTimeouts.Carousel,\n slide: true,\n};\n\nCarouselItem.contextTypes = {\n direction: PropTypes.string\n};\n\nexport default CarouselItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport CarouselItem from './CarouselItem';\nimport { mapToCssModules } from './utils';\n\nclass Carousel extends React.Component {\n constructor(props) {\n super(props);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.renderItems = this.renderItems.bind(this);\n this.hoverStart = this.hoverStart.bind(this);\n this.hoverEnd = this.hoverEnd.bind(this);\n this.state = {\n direction: 'right',\n indicatorClicked: false,\n };\n }\n\n getChildContext() {\n return { direction: this.state.direction };\n }\n\n componentDidMount() {\n // Set up the cycle\n if (this.props.ride === 'carousel') {\n this.setInterval();\n }\n\n // TODO: move this to the specific carousel like bootstrap. Currently it will trigger ALL carousels on the page.\n document.addEventListener('keyup', this.handleKeyPress);\n }\n\n componentWillReceiveProps(nextProps) {\n this.setInterval(nextProps);\n // Calculate the direction to turn\n if (this.props.activeIndex + 1 === nextProps.activeIndex) {\n this.setState({ direction: 'right' });\n } else if (this.props.activeIndex - 1 === nextProps.activeIndex) {\n this.setState({ direction: 'left' });\n } else if (this.props.activeIndex > nextProps.activeIndex) {\n this.setState({ direction: this.state.indicatorClicked ? 'left' : 'right' });\n } else if (this.props.activeIndex !== nextProps.activeIndex) {\n this.setState({ direction: this.state.indicatorClicked ? 'right' : 'left' });\n }\n this.setState({ indicatorClicked: false });\n }\n\n componentWillUnmount() {\n this.clearInterval();\n document.removeEventListener('keyup', this.handleKeyPress);\n }\n\n setInterval(props = this.props) {\n // make sure not to have multiple intervals going...\n this.clearInterval();\n if (props.interval) {\n this.cycleInterval = setInterval(() => {\n props.next();\n }, parseInt(props.interval, 10));\n }\n }\n\n clearInterval() {\n clearInterval(this.cycleInterval);\n }\n\n hoverStart(...args) {\n if (this.props.pause === 'hover') {\n this.clearInterval();\n }\n if (this.props.mouseEnter) {\n this.props.mouseEnter(...args);\n }\n }\n\n hoverEnd(...args) {\n if (this.props.pause === 'hover') {\n this.setInterval();\n }\n if (this.props.mouseLeave) {\n this.props.mouseLeave(...args);\n }\n }\n\n handleKeyPress(evt) {\n if (this.props.keyboard) {\n if (evt.keyCode === 37) {\n this.props.previous();\n } else if (evt.keyCode === 39) {\n this.props.next();\n }\n }\n }\n\n renderItems(carouselItems, className) {\n const { slide } = this.props;\n return (\n
\n {carouselItems.map((item, index) => {\n const isIn = (index === this.props.activeIndex);\n return React.cloneElement(item, {\n in: isIn,\n slide: slide,\n });\n })}\n
\n );\n }\n\n render() {\n const { cssModule, slide, className } = this.props;\n const outerClasses = mapToCssModules(classNames(\n className,\n 'carousel',\n slide && 'slide'\n ), cssModule);\n\n const innerClasses = mapToCssModules(classNames(\n 'carousel-inner'\n ), cssModule);\n\n // filter out booleans, null, or undefined\n const children = this.props.children.filter(child => child !== null && child !== undefined && typeof child !== 'boolean');\n\n const slidesOnly = children.every(child => child.type === CarouselItem);\n\n // Rendering only slides\n if (slidesOnly) {\n return (\n
\n {this.renderItems(children, innerClasses)}\n
\n );\n }\n\n // Rendering slides and controls\n if (children[0] instanceof Array) {\n const carouselItems = children[0];\n const controlLeft = children[1];\n const controlRight = children[2];\n\n return (\n
\n {this.renderItems(carouselItems, innerClasses)}\n {controlLeft}\n {controlRight}\n
\n );\n }\n\n // Rendering indicators, slides and controls\n const indicators = children[0];\n const wrappedOnClick = (e) => {\n if (typeof indicators.props.onClickHandler === 'function') {\n this.setState({ indicatorClicked: true }, () => indicators.props.onClickHandler(e));\n }\n };\n const wrappedIndicators = React.cloneElement(indicators, { onClickHandler: wrappedOnClick });\n const carouselItems = children[1];\n const controlLeft = children[2];\n const controlRight = children[3];\n\n return (\n
\n {wrappedIndicators}\n {this.renderItems(carouselItems, innerClasses)}\n {controlLeft}\n {controlRight}\n
\n );\n }\n}\n\nCarousel.propTypes = {\n // the current active slide of the carousel\n activeIndex: PropTypes.number,\n // a function which should advance the carousel to the next slide (via activeIndex)\n next: PropTypes.func.isRequired,\n // a function which should advance the carousel to the previous slide (via activeIndex)\n previous: PropTypes.func.isRequired,\n // controls if the left and right arrow keys should control the carousel\n keyboard: PropTypes.bool,\n /* If set to \"hover\", pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on\n * mouseleave. If set to false, hovering over the carousel won't pause it. (default: \"hover\")\n */\n pause: PropTypes.oneOf(['hover', false]),\n // Autoplays the carousel after the user manually cycles the first item. If \"carousel\", autoplays the carousel on load.\n // This is how bootstrap defines it... I would prefer a bool named autoplay or something...\n ride: PropTypes.oneOf(['carousel']),\n // the interval at which the carousel automatically cycles (default: 5000)\n // eslint-disable-next-line react/no-unused-prop-types\n interval: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n PropTypes.bool,\n ]),\n children: PropTypes.array,\n // called when the mouse enters the Carousel\n mouseEnter: PropTypes.func,\n // called when the mouse exits the Carousel\n mouseLeave: PropTypes.func,\n // controls whether the slide animation on the Carousel works or not\n slide: PropTypes.bool,\n cssModule: PropTypes.object,\n className: PropTypes.string,\n};\n\nCarousel.defaultProps = {\n interval: 5000,\n pause: 'hover',\n keyboard: true,\n slide: true,\n};\n\nCarousel.childContextTypes = {\n direction: PropTypes.string\n};\n\nexport default Carousel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst CarouselControl = (props) => {\n const { direction, onClickHandler, cssModule, directionText, className } = props;\n\n const anchorClasses = mapToCssModules(classNames(\n className,\n `carousel-control-${direction}`\n ), cssModule);\n\n const iconClasses = mapToCssModules(classNames(\n `carousel-control-${direction}-icon`\n ), cssModule);\n\n const screenReaderClasses = mapToCssModules(classNames(\n 'sr-only'\n ), cssModule);\n\n\n return (\n {\n e.preventDefault();\n onClickHandler();\n }}\n >\n \n {directionText || direction}\n \n );\n};\n\nCarouselControl.propTypes = {\n direction: PropTypes.oneOf(['prev', 'next']).isRequired,\n onClickHandler: PropTypes.func.isRequired,\n cssModule: PropTypes.object,\n directionText: PropTypes.string,\n className: PropTypes.string,\n};\n\nexport default CarouselControl;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst CarouselIndicators = (props) => {\n const { items, activeIndex, cssModule, onClickHandler, className } = props;\n\n const listClasses = mapToCssModules(classNames(className, 'carousel-indicators'), cssModule);\n const indicators = items.map((item, idx) => {\n const indicatorClasses = mapToCssModules(classNames(\n { active: activeIndex === idx }\n ), cssModule);\n return (\n {\n e.preventDefault();\n onClickHandler(idx);\n }}\n className={indicatorClasses}\n />);\n });\n\n return (\n
    \n {indicators}\n
\n );\n};\n\nCarouselIndicators.propTypes = {\n items: PropTypes.array.isRequired,\n activeIndex: PropTypes.number.isRequired,\n cssModule: PropTypes.object,\n onClickHandler: PropTypes.func.isRequired,\n className: PropTypes.string,\n};\n\nexport default CarouselIndicators;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst CarouselCaption = (props) => {\n const { captionHeader, captionText, cssModule, className } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'carousel-caption',\n 'd-none',\n 'd-md-block'\n ), cssModule);\n\n return (\n
\n

{captionHeader}

\n

{captionText}

\n
\n );\n};\n\nCarouselCaption.propTypes = {\n captionHeader: PropTypes.string,\n captionText: PropTypes.string.isRequired,\n cssModule: PropTypes.object,\n className: PropTypes.string,\n};\n\nexport default CarouselCaption;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Carousel from './Carousel';\nimport CarouselItem from './CarouselItem';\nimport CarouselControl from './CarouselControl';\nimport CarouselIndicators from './CarouselIndicators';\nimport CarouselCaption from './CarouselCaption';\n\nconst propTypes = {\n items: PropTypes.array.isRequired,\n indicators: PropTypes.bool,\n controls: PropTypes.bool,\n autoPlay: PropTypes.bool,\n activeIndex: PropTypes.number,\n next: PropTypes.func,\n previous: PropTypes.func,\n goToIndex: PropTypes.func,\n};\n\nclass UncontrolledCarousel extends Component {\n constructor(props) {\n super(props);\n this.animating = false;\n this.state = { activeIndex: 0 };\n this.next = this.next.bind(this);\n this.previous = this.previous.bind(this);\n this.goToIndex = this.goToIndex.bind(this);\n this.onExiting = this.onExiting.bind(this);\n this.onExited = this.onExited.bind(this);\n }\n\n onExiting() {\n this.animating = true;\n }\n\n onExited() {\n this.animating = false;\n }\n\n next() {\n if (this.animating) return;\n const nextIndex = this.state.activeIndex === this.props.items.length - 1 ? 0 : this.state.activeIndex + 1;\n this.setState({ activeIndex: nextIndex });\n }\n\n previous() {\n if (this.animating) return;\n const nextIndex = this.state.activeIndex === 0 ? this.props.items.length - 1 : this.state.activeIndex - 1;\n this.setState({ activeIndex: nextIndex });\n }\n\n goToIndex(newIndex) {\n if (this.animating) return;\n this.setState({ activeIndex: newIndex });\n }\n\n render() {\n const { autoPlay, indicators, controls, items, goToIndex, ...props } = this.props;\n const { activeIndex } = this.state;\n\n const slides = items.map((item) => {\n return (\n \n {item.altText}\n \n \n );\n });\n\n return (\n \n {indicators && }\n {slides}\n {controls && }\n {controls && }\n \n );\n }\n}\n\nUncontrolledCarousel.propTypes = propTypes;\nUncontrolledCarousel.defaultProps = {\n controls: true,\n indicators: true,\n autoPlay: true,\n};\n\nexport default UncontrolledCarousel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'h6'\n};\n\nconst CardSubtitle = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-subtitle'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardSubtitle.propTypes = propTypes;\nCardSubtitle.defaultProps = defaultProps;\n\nexport default CardSubtitle;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'p'\n};\n\nconst CardText = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-text'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardText.propTypes = propTypes;\nCardText.defaultProps = defaultProps;\n\nexport default CardText;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'h5'\n};\n\nconst CardTitle = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'card-title'\n ), cssModule);\n\n return (\n \n );\n};\n\nCardTitle.propTypes = propTypes;\nCardTitle.defaultProps = defaultProps;\n\nexport default CardTitle;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n className: PropTypes.string,\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n type: PropTypes.string.isRequired,\n label: PropTypes.node,\n inline: PropTypes.bool,\n valid: PropTypes.bool,\n invalid: PropTypes.bool,\n bsSize: PropTypes.string,\n cssModule: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.array, PropTypes.func]),\n innerRef: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n PropTypes.func,\n ])\n};\n\nfunction CustomInput(props) {\n const {\n className,\n label,\n inline,\n valid,\n invalid,\n cssModule,\n children,\n bsSize,\n innerRef,\n ...attributes\n } = props;\n\n const type = attributes.type;\n\n const customClass = mapToCssModules(classNames(\n className,\n `custom-${type}`,\n bsSize ? `custom-${type}-${bsSize}` : false,\n ), cssModule);\n\n const validationClassNames = mapToCssModules(classNames(\n invalid && 'is-invalid',\n valid && 'is-valid',\n ), cssModule);\n\n if (type === 'select') {\n return ;\n }\n\n if (type === 'file') {\n return (\n
\n \n \n
\n );\n }\n\n if (type !== 'checkbox' && type !== 'radio') {\n return ;\n }\n\n const wrapperClasses = classNames(\n customClass,\n mapToCssModules(classNames(\n 'custom-control',\n { 'custom-control-inline': inline }\n ), cssModule)\n );\n\n return (\n
\n \n \n {children}\n
\n );\n}\n\nCustomInput.propTypes = propTypes;\n\nexport default CustomInput;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Arrow, Popper as ReactPopper } from 'react-popper';\nimport { getTarget, targetPropType, mapToCssModules, DOMElement } from './utils';\n\nconst propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n placement: PropTypes.string,\n placementPrefix: PropTypes.string,\n arrowClassName: PropTypes.string,\n hideArrow: PropTypes.bool,\n tag: PropTypes.string,\n isOpen: PropTypes.bool.isRequired,\n cssModule: PropTypes.object,\n offset: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n fallbackPlacement: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n flip: PropTypes.bool,\n container: targetPropType,\n target: targetPropType.isRequired,\n modifiers: PropTypes.object,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n};\n\nconst defaultProps = {\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\nconst childContextTypes = {\n popperManager: PropTypes.object.isRequired,\n};\n\nclass PopperContent extends React.Component {\n constructor(props) {\n super(props);\n\n this.handlePlacementChange = this.handlePlacementChange.bind(this);\n this.setTargetNode = this.setTargetNode.bind(this);\n this.getTargetNode = this.getTargetNode.bind(this);\n this.state = {};\n }\n\n getChildContext() {\n return {\n popperManager: {\n setTargetNode: this.setTargetNode,\n getTargetNode: this.getTargetNode,\n },\n };\n }\n\n componentDidMount() {\n this.handleProps();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.isOpen !== prevProps.isOpen) {\n this.handleProps();\n } else if (this._element) {\n // rerender\n this.renderIntoSubtree();\n }\n }\n\n componentWillUnmount() {\n this.hide();\n }\n\n setTargetNode(node) {\n this.targetNode = node;\n }\n\n getTargetNode() {\n return this.targetNode;\n }\n\n getContainerNode() {\n return getTarget(this.props.container);\n }\n\n handlePlacementChange(data) {\n if (this.state.placement !== data.placement) {\n this.setState({ placement: data.placement });\n }\n return data;\n }\n\n handleProps() {\n if (this.props.container !== 'inline') {\n if (this.props.isOpen) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n\n hide() {\n if (this._element) {\n this.getContainerNode().removeChild(this._element);\n ReactDOM.unmountComponentAtNode(this._element);\n this._element = null;\n }\n }\n\n show() {\n this._element = document.createElement('div');\n this.getContainerNode().appendChild(this._element);\n this.renderIntoSubtree();\n if (this._element.childNodes && this._element.childNodes[0] && this._element.childNodes[0].focus) {\n this._element.childNodes[0].focus();\n }\n }\n\n renderIntoSubtree() {\n ReactDOM.unstable_renderSubtreeIntoContainer(\n this,\n this.renderChildren(),\n this._element\n );\n }\n\n renderChildren() {\n const {\n cssModule,\n children,\n isOpen,\n flip,\n target,\n offset,\n fallbackPlacement,\n placementPrefix,\n arrowClassName: _arrowClassName,\n hideArrow,\n className,\n tag,\n container,\n modifiers,\n boundariesElement,\n ...attrs\n } = this.props;\n const arrowClassName = mapToCssModules(classNames(\n 'arrow',\n _arrowClassName\n ), cssModule);\n const placement = (this.state.placement || attrs.placement).split('-')[0];\n const popperClassName = mapToCssModules(classNames(\n className,\n placementPrefix ? `${placementPrefix}-${placement}` : placement\n ), this.props.cssModule);\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 return (\n \n {children}\n {!hideArrow && }\n \n );\n }\n\n render() {\n this.setTargetNode(getTarget(this.props.target));\n\n if (this.props.container === 'inline') {\n return this.props.isOpen ? this.renderChildren() : null;\n }\n\n return null;\n }\n}\n\nPopperContent.propTypes = propTypes;\nPopperContent.defaultProps = defaultProps;\nPopperContent.childContextTypes = childContextTypes;\n\nexport default PopperContent;\n","import PropTypes from 'prop-types';\nimport { getTarget, targetPropType } from './utils';\n\nconst PopperTargetHelper = (props, context) => {\n context.popperManager.setTargetNode(getTarget(props.target));\n return null;\n};\n\nPopperTargetHelper.contextTypes = {\n popperManager: PropTypes.object.isRequired,\n};\n\nPopperTargetHelper.propTypes = {\n target: targetPropType.isRequired,\n};\n\nexport default PopperTargetHelper;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport PopperContent from './PopperContent';\nimport { getTarget, mapToCssModules, omit, PopperPlacements, targetPropType, DOMElement } from './utils';\n\nconst propTypes = {\n placement: PropTypes.oneOf(PopperPlacements),\n target: targetPropType.isRequired,\n container: targetPropType,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n isOpen: PropTypes.bool,\n disabled: PropTypes.bool,\n hideArrow: PropTypes.bool,\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n placementPrefix: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.func,\n delay: PropTypes.oneOfType([\n PropTypes.shape({ show: PropTypes.number, hide: PropTypes.number }),\n PropTypes.number,\n ]),\n modifiers: PropTypes.object,\n offset: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nconst DEFAULT_DELAYS = {\n show: 0,\n hide: 0,\n};\n\nconst defaultProps = {\n isOpen: false,\n hideArrow: false,\n placement: 'right',\n placementPrefix: 'bs-popover',\n delay: DEFAULT_DELAYS,\n toggle: () => {},\n};\n\nclass Popover extends React.Component {\n constructor(props) {\n super(props);\n\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.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this._target = null;\n }\n componentDidMount() {\n this._target = getTarget(this.props.target);\n this.handleProps();\n }\n\n componentDidUpdate() {\n this.handleProps();\n }\n\n componentWillUnmount() {\n this.clearShowTimeout();\n this.clearHideTimeout();\n this.removeTargetEvents();\n }\n\n getRef(ref) {\n this._popover = ref;\n }\n\n getDelay(key) {\n const { delay } = this.props;\n if (typeof delay === 'object') {\n return isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key];\n }\n return delay;\n }\n\n handleProps() {\n if (this.props.isOpen) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n show() {\n this.clearHideTimeout();\n this.addTargetEvents();\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this._showTimeout = setTimeout(this.toggle, this.getDelay('show'));\n }\n }\n\n hide() {\n this.clearShowTimeout();\n this.removeTargetEvents();\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this._hideTimeout = setTimeout(this.toggle, this.getDelay('hide'));\n }\n }\n\n clearShowTimeout() {\n clearTimeout(this._showTimeout);\n this._showTimeout = undefined;\n }\n\n clearHideTimeout() {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = undefined;\n }\n\n handleDocumentClick(e) {\n if (this._target) {\n if (e.target !== this._target && !this._target.contains(e.target) && e.target !== this._popover && !(this._popover && this._popover.contains(e.target))) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n\n if (this.props.isOpen) {\n this.toggle(e);\n }\n }\n }\n }\n\n addTargetEvents() {\n ['click', 'touchstart'].forEach(event =>\n document.addEventListener(event, this.handleDocumentClick, true)\n );\n }\n\n removeTargetEvents() {\n ['click', 'touchstart'].forEach(event =>\n document.removeEventListener(event, this.handleDocumentClick, true)\n );\n }\n\n toggle(e) {\n if (this.props.disabled) {\n return e && e.preventDefault();\n }\n\n return this.props.toggle(e);\n }\n\n render() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const attributes = omit(this.props, Object.keys(propTypes));\n const classes = mapToCssModules(classNames(\n 'popover-inner',\n this.props.innerClassName\n ), this.props.cssModule);\n\n const popperClasses = mapToCssModules(classNames(\n 'popover',\n 'show',\n this.props.className\n ), this.props.cssModule);\n\n return (\n \n
\n \n );\n }\n}\n\nPopover.propTypes = propTypes;\nPopover.defaultProps = defaultProps;\n\nexport default Popover;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'h3'\n};\n\nconst PopoverHeader = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'popover-header'\n ), cssModule);\n\n return (\n \n );\n};\n\nPopoverHeader.propTypes = propTypes;\nPopoverHeader.defaultProps = defaultProps;\n\nexport default PopoverHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst PopoverBody = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'popover-body'\n ), cssModule);\n\n return (\n \n );\n};\n\nPopoverBody.propTypes = propTypes;\nPopoverBody.defaultProps = defaultProps;\n\nexport default PopoverBody;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport toNumber from 'lodash.tonumber';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n bar: PropTypes.bool,\n multi: PropTypes.bool,\n tag: PropTypes.string,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n ]),\n max: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n ]),\n animated: PropTypes.bool,\n striped: PropTypes.bool,\n color: PropTypes.string,\n className: PropTypes.string,\n barClassName: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div',\n value: 0,\n max: 100,\n};\n\nconst Progress = (props) => {\n const {\n children,\n className,\n barClassName,\n cssModule,\n value,\n max,\n animated,\n striped,\n color,\n bar,\n multi,\n tag: Tag,\n ...attributes\n } = props;\n\n const percent = ((toNumber(value) / toNumber(max)) * 100);\n\n const progressClasses = mapToCssModules(classNames(\n className,\n 'progress'\n ), cssModule);\n\n const progressBarClasses = mapToCssModules(classNames(\n 'progress-bar',\n bar ? className || barClassName : barClassName,\n animated ? 'progress-bar-animated' : null,\n color ? `bg-${color}` : null,\n striped || animated ? 'progress-bar-striped' : null\n ), cssModule);\n\n const ProgressBar = multi ? children : (\n \n );\n\n if (bar) {\n return ProgressBar;\n }\n\n return (\n \n );\n};\n\nProgress.propTypes = propTypes;\nProgress.defaultProps = defaultProps;\n\nexport default Progress;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { canUseDOM } from './utils';\n\nconst propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\n\nclass Portal extends React.Component {\n componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n\n render() {\n if (!canUseDOM) {\n return null;\n }\n\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n\n return ReactDOM.createPortal(\n this.props.children,\n this.props.node || this.defaultNode\n );\n }\n}\n\nPortal.propTypes = propTypes;\n\nexport default Portal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Portal from './Portal';\nimport Fade from './Fade';\nimport {\n getOriginalBodyPadding,\n conditionallyUpdateScrollbar,\n setScrollbarWidth,\n mapToCssModules,\n omit,\n focusableElements,\n TransitionTimeouts\n} from './utils';\n\nfunction noop() { }\n\nconst FadePropTypes = PropTypes.shape(Fade.propTypes);\n\nconst propTypes = {\n isOpen: PropTypes.bool,\n autoFocus: PropTypes.bool,\n centered: PropTypes.bool,\n size: PropTypes.string,\n toggle: PropTypes.func,\n keyboard: PropTypes.bool,\n role: PropTypes.string,\n labelledBy: PropTypes.string,\n backdrop: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.oneOf(['static'])\n ]),\n onEnter: PropTypes.func,\n onExit: PropTypes.func,\n onOpened: PropTypes.func,\n onClosed: PropTypes.func,\n children: PropTypes.node,\n className: PropTypes.string,\n wrapClassName: PropTypes.string,\n modalClassName: PropTypes.string,\n backdropClassName: PropTypes.string,\n contentClassName: PropTypes.string,\n external: PropTypes.node,\n fade: PropTypes.bool,\n cssModule: PropTypes.object,\n zIndex: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n ]),\n backdropTransition: FadePropTypes,\n modalTransition: FadePropTypes,\n innerRef: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n PropTypes.func,\n ]),\n};\n\nconst propsToOmit = Object.keys(propTypes);\n\nconst defaultProps = {\n isOpen: false,\n autoFocus: true,\n centered: false,\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1050,\n fade: true,\n onOpened: noop,\n onClosed: noop,\n modalTransition: {\n timeout: TransitionTimeouts.Modal,\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade, // uses standard fade transition\n },\n};\n\nclass Modal extends React.Component {\n constructor(props) {\n super(props);\n\n this._element = null;\n this._originalBodyPadding = null;\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 isOpen: props.isOpen,\n };\n\n if (props.isOpen) {\n this.init();\n }\n }\n\n componentDidMount() {\n if (this.props.onEnter) {\n this.props.onEnter();\n }\n\n if (this.state.isOpen && this.props.autoFocus) {\n this.setFocus();\n }\n\n this._isMounted = true;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.isOpen && !this.props.isOpen) {\n this.setState({ isOpen: nextProps.isOpen });\n }\n }\n\n componentWillUpdate(nextProps, nextState) {\n if (nextState.isOpen && !this.state.isOpen) {\n this.init();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.props.autoFocus && this.state.isOpen && !prevState.isOpen) {\n this.setFocus();\n }\n\n if (this._element && prevProps.zIndex !== this.props.zIndex) {\n this._element.style.zIndex = this.props.zIndex;\n }\n }\n\n componentWillUnmount() {\n if (this.props.onExit) {\n this.props.onExit();\n }\n\n if (this.state.isOpen) {\n this.destroy();\n }\n\n this._isMounted = false;\n }\n\n onOpened(node, isAppearing) {\n this.props.onOpened();\n (this.props.modalTransition.onEntered || noop)(node, isAppearing);\n }\n\n onClosed(node) {\n // so all methods get called before it is unmounted\n this.props.onClosed();\n (this.props.modalTransition.onExited || noop)(node);\n this.destroy();\n\n if (this._isMounted) {\n this.setState({ isOpen: false });\n }\n }\n\n setFocus() {\n if (this._dialog && this._dialog.parentNode && typeof this._dialog.parentNode.focus === 'function') {\n this._dialog.parentNode.focus();\n }\n }\n\n getFocusableChildren() {\n return this._element.querySelectorAll(focusableElements.join(', '));\n }\n\n getFocusedChild() {\n let currentFocus;\n const focusableChildren = this.getFocusableChildren();\n\n try {\n currentFocus = document.activeElement;\n } catch (err) {\n currentFocus = focusableChildren[0];\n }\n return currentFocus;\n }\n\n // not mouseUp because scrollbar fires it, shouldn't close when user scrolls\n handleBackdropClick(e) {\n if (e.target === this._mouseDownElement) {\n e.stopPropagation();\n if (!this.props.isOpen || this.props.backdrop !== true) return;\n\n const container = this._dialog;\n\n if (e.target && !container.contains(e.target) && this.props.toggle) {\n this.props.toggle(e);\n }\n }\n }\n\n handleTab(e) {\n if (e.which !== 9) return;\n\n const focusableChildren = this.getFocusableChildren();\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 if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n focusableChildren[totalFocusable - 1].focus();\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n focusableChildren[0].focus();\n }\n }\n\n handleBackdropMouseDown(e) {\n this._mouseDownElement = e.target;\n }\n\n handleEscape(e) {\n if (this.props.isOpen && this.props.keyboard && e.keyCode === 27 && this.props.toggle) {\n this.props.toggle(e);\n }\n }\n\n init() {\n try {\n this._triggeringElement = document.activeElement;\n } catch (err) {\n this._triggeringElement = null;\n }\n this._element = document.createElement('div');\n this._element.setAttribute('tabindex', '-1');\n this._element.style.position = 'relative';\n this._element.style.zIndex = this.props.zIndex;\n this._originalBodyPadding = getOriginalBodyPadding();\n\n conditionallyUpdateScrollbar();\n\n document.body.appendChild(this._element);\n if (Modal.openCount === 0) {\n document.body.className = classNames(\n document.body.className,\n mapToCssModules('modal-open', this.props.cssModule)\n );\n }\n Modal.openCount += 1;\n }\n\n destroy() {\n if (this._element) {\n document.body.removeChild(this._element);\n this._element = null;\n }\n\n if (this._triggeringElement) {\n if (this._triggeringElement.focus) this._triggeringElement.focus();\n this._triggeringElement = null;\n }\n\n if (Modal.openCount <= 1) {\n const modalOpenClassName = mapToCssModules('modal-open', this.props.cssModule);\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 Modal.openCount -= 1;\n\n setScrollbarWidth(this._originalBodyPadding);\n }\n\n renderModalDialog() {\n const attributes = omit(this.props, propsToOmit);\n const dialogBaseClass = 'modal-dialog';\n\n return (\n {\n this._dialog = c;\n }}\n >\n \n {this.props.children}\n
\n \n );\n }\n\n render() {\n if (this.state.isOpen) {\n const {\n wrapClassName,\n modalClassName,\n backdropClassName,\n cssModule,\n isOpen,\n backdrop,\n role,\n labelledBy,\n external,\n innerRef,\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 'aria-labelledby': labelledBy,\n role,\n tabIndex: '-1'\n };\n\n const hasTransition = this.props.fade;\n const modalTransition = {\n ...Fade.defaultProps,\n ...this.props.modalTransition,\n baseClass: hasTransition ? this.props.modalTransition.baseClass : '',\n timeout: hasTransition ? this.props.modalTransition.timeout : 0,\n };\n const backdropTransition = {\n ...Fade.defaultProps,\n ...this.props.backdropTransition,\n baseClass: hasTransition ? this.props.backdropTransition.baseClass : '',\n timeout: hasTransition ? this.props.backdropTransition.timeout : 0,\n };\n\n const Backdrop = hasTransition ?\n ()\n :
;\n\n return (\n \n
\n \n {external}\n {this.renderModalDialog()}\n \n {Backdrop}\n
\n
\n );\n }\n\n return null;\n }\n}\n\nModal.propTypes = propTypes;\nModal.defaultProps = defaultProps;\nModal.openCount = 0;\n\nexport default Modal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n wrapTag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n toggle: PropTypes.func,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n children: PropTypes.node,\n closeAriaLabel: PropTypes.string,\n charCode: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n close: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'h5',\n wrapTag: 'div',\n closeAriaLabel: 'Close',\n charCode: 215,\n};\n\nconst ModalHeader = (props) => {\n let closeButton;\n const {\n className,\n cssModule,\n children,\n toggle,\n tag: Tag,\n wrapTag: WrapTag,\n closeAriaLabel,\n charCode,\n close,\n ...attributes } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'modal-header'\n ), cssModule);\n\n if (!close && toggle) {\n const closeIcon = typeof charCode === 'number' ? String.fromCharCode(charCode) : charCode;\n closeButton = (\n \n );\n }\n\n return (\n \n \n {children}\n \n {close || closeButton}\n \n );\n};\n\nModalHeader.propTypes = propTypes;\nModalHeader.defaultProps = defaultProps;\n\nexport default ModalHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div',\n};\n\nconst ModalBody = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'modal-body'\n ), cssModule);\n\n return (\n \n );\n};\n\nModalBody.propTypes = propTypes;\nModalBody.defaultProps = defaultProps;\n\nexport default ModalBody;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div',\n};\n\nconst ModalFooter = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'modal-footer'\n ), cssModule);\n\n return (\n \n );\n};\n\nModalFooter.propTypes = propTypes;\nModalFooter.defaultProps = defaultProps;\n\nexport default ModalFooter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport PopperContent from './PopperContent';\nimport { getTarget, mapToCssModules, omit, PopperPlacements, targetPropType, DOMElement } from './utils';\n\nconst propTypes = {\n placement: PropTypes.oneOf(PopperPlacements),\n target: targetPropType.isRequired,\n container: targetPropType,\n isOpen: PropTypes.bool,\n disabled: PropTypes.bool,\n hideArrow: PropTypes.bool,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n arrowClassName: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.func,\n autohide: PropTypes.bool,\n placementPrefix: PropTypes.string,\n delay: PropTypes.oneOfType([\n PropTypes.shape({ show: PropTypes.number, hide: PropTypes.number }),\n PropTypes.number,\n ]),\n modifiers: PropTypes.object,\n offset: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n innerRef: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.string,\n PropTypes.object\n ]),\n trigger: PropTypes.string,\n};\n\nconst DEFAULT_DELAYS = {\n show: 0,\n hide: 250\n};\n\nconst defaultProps = {\n isOpen: false,\n hideArrow: false,\n placement: 'top',\n placementPrefix: 'bs-tooltip',\n delay: DEFAULT_DELAYS,\n autohide: true,\n toggle: function () { }\n};\n\nclass Tooltip extends React.Component {\n constructor(props) {\n super(props);\n\n this._target = null;\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.onEscKeyDown = this.onEscKeyDown.bind(this);\n }\n\n componentDidMount() {\n this._target = getTarget(this.props.target);\n this.addTargetEvents();\n }\n\n componentWillUnmount() {\n this.clearHideTimeout();\n this.clearShowTimeout();\n this.removeTargetEvents();\n }\n\n onMouseOverTooltip(e) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n this._showTimeout = setTimeout(this.show.bind(this, e), this.getDelay('show'));\n }\n\n onMouseLeaveTooltip(e) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n\n onMouseOverTooltipContent() {\n if (this.props.autohide) {\n return;\n }\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n }\n\n onMouseLeaveTooltipContent(e) {\n if (this.props.autohide) {\n return;\n }\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n e.persist();\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n\n onEscKeyDown(e) {\n if (e.key === 'Escape') {\n this.hide(e);\n }\n }\n\n getDelay(key) {\n const { delay } = this.props;\n if (typeof delay === 'object') {\n return isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key];\n }\n return delay;\n }\n\n show(e) {\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this.toggle(e);\n }\n }\n\n hide(e) {\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this.toggle(e);\n }\n }\n\n clearShowTimeout() {\n clearTimeout(this._showTimeout);\n this._showTimeout = undefined;\n }\n\n clearHideTimeout() {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = undefined;\n }\n\n handleDocumentClick(e) {\n if (this._target !== null && (e.target === this._target || this._target.contains(e.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 && e.target.getAttribute('role') !== 'tooltip') {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }\n\n addTargetEvents() {\n if (this.props.trigger) {\n let triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('manual') === -1) {\n if (triggers.indexOf('click') > -1) {\n ['click', 'touchstart'].forEach(event =>\n document.addEventListener(event, this.handleDocumentClick, true)\n );\n }\n if (this._target !== null) {\n if (triggers.indexOf('hover') > -1) {\n this._target.addEventListener('mouseover', this.onMouseOverTooltip, true);\n this._target.addEventListener('mouseout', this.onMouseLeaveTooltip, true);\n }\n if (triggers.indexOf('focus') > -1) {\n this._target.addEventListener('focusin', this.show, true);\n this._target.addEventListener('focusout', this.hide, true);\n }\n this._target.addEventListener('keydown', this.onEscKeyDown, true);\n }\n }\n } else {\n if (this._target !== null) {\n this._target.addEventListener('mouseover', this.onMouseOverTooltip, true);\n this._target.addEventListener('mouseout', this.onMouseLeaveTooltip, true);\n this._target.addEventListener('keydown', this.onEscKeyDown, true);\n this._target.addEventListener('focusin', this.show, true);\n this._target.addEventListener('focusout', this.hide, true);\n }\n ['click', 'touchstart'].forEach(event =>\n document.addEventListener(event, this.handleDocumentClick, true)\n );\n }\n }\n\n removeTargetEvents() {\n if (this._target !== null) {\n this._target.removeEventListener('mouseover', this.onMouseOverTooltip, true);\n this._target.removeEventListener('mouseout', this.onMouseLeaveTooltip, true);\n this._target.addEventListener('keydown', this.onEscKeyDown, true);\n this._target.addEventListener('focusin', this.show, true);\n this._target.addEventListener('focusout', this.hide, true);\n }\n ['click', 'touchstart'].forEach(event =>\n document.removeEventListener(event, this.handleDocumentClick, true)\n );\n }\n\n toggle(e) {\n if (this.props.disabled) {\n return e && e.preventDefault();\n }\n\n return this.props.toggle(e);\n }\n\n render() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const attributes = omit(this.props, Object.keys(propTypes));\n const classes = mapToCssModules(classNames(\n 'tooltip-inner',\n this.props.innerClassName\n ), this.props.cssModule);\n\n const popperClasses = mapToCssModules(classNames(\n 'tooltip',\n 'show',\n this.props.className\n ), this.props.cssModule);\n\n return (\n \n \n \n );\n }\n}\n\nTooltip.propTypes = propTypes;\nTooltip.defaultProps = defaultProps;\n\nexport default Tooltip;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, deprecated } from './utils';\n\nconst propTypes = {\n className: PropTypes.string,\n cssModule: PropTypes.object,\n size: PropTypes.string,\n bordered: PropTypes.bool,\n borderless: PropTypes.bool,\n striped: PropTypes.bool,\n inverse: deprecated(PropTypes.bool, 'Please use the prop \"dark\"'),\n dark: PropTypes.bool,\n hover: PropTypes.bool,\n responsive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n responsiveTag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n};\n\nconst defaultProps = {\n tag: 'table',\n responsiveTag: 'div',\n};\n\nconst Table = (props) => {\n const {\n className,\n cssModule,\n size,\n bordered,\n borderless,\n striped,\n inverse,\n dark,\n hover,\n responsive,\n tag: Tag,\n responsiveTag: ResponsiveTag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'table',\n size ? 'table-' + size : false,\n bordered ? 'table-bordered' : false,\n borderless ? 'table-borderless' : false,\n striped ? 'table-striped' : false,\n (dark || inverse) ? 'table-dark' : false,\n hover ? 'table-hover' : false,\n ), cssModule);\n\n const table = ;\n\n if (responsive) {\n const responsiveClassName = responsive === true ? 'table-responsive' : `table-responsive-${responsive}`;\n\n return (\n {table}\n );\n }\n\n return table;\n};\n\nTable.propTypes = propTypes;\nTable.defaultProps = defaultProps;\n\nexport default Table;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n flush: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'ul'\n};\n\nconst ListGroup = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n flush,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'list-group',\n flush ? 'list-group-flush' : false\n ), cssModule);\n\n return (\n \n );\n};\n\nListGroup.propTypes = propTypes;\nListGroup.defaultProps = defaultProps;\n\nexport default ListGroup;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n inline: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'form',\n};\nclass Form extends Component {\n constructor(props) {\n super(props);\n this.getRef = this.getRef.bind(this);\n this.submit = this.submit.bind(this);\n }\n\n getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n\n submit() {\n if (this.ref) {\n this.ref.submit();\n }\n }\n\n render() {\n const {\n className,\n cssModule,\n inline,\n tag: Tag,\n innerRef,\n ...attributes\n } = this.props;\n\n const classes = mapToCssModules(classNames(\n className,\n inline ? 'form-inline' : false\n ), cssModule);\n\n return (\n \n );\n }\n}\n\nForm.propTypes = propTypes;\nForm.defaultProps = defaultProps;\n\nexport default Form;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n tag: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n valid: PropTypes.bool,\n tooltip: PropTypes.bool\n};\n\nconst defaultProps = {\n tag: 'div',\n valid: undefined\n};\n\nconst FormFeedback = (props) => {\n const {\n className,\n cssModule,\n valid,\n tooltip,\n tag: Tag,\n ...attributes\n } = props;\n\n const validMode = tooltip ? 'tooltip' : 'feedback';\n\n const classes = mapToCssModules(\n classNames(\n className,\n valid ? `valid-${validMode}` : `invalid-${validMode}`\n ),\n cssModule\n );\n\n return ;\n};\n\nFormFeedback.propTypes = propTypes;\nFormFeedback.defaultProps = defaultProps;\n\nexport default FormFeedback;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n inline: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div',\n};\n\nconst FormGroup = (props) => {\n const {\n className,\n cssModule,\n row,\n disabled,\n check,\n inline,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'position-relative',\n row ? 'row' : false,\n check ? 'form-check' : 'form-group',\n check && inline ? 'form-check-inline' : false,\n check && disabled ? 'disabled' : false\n ), cssModule);\n\n return (\n \n );\n};\n\nFormGroup.propTypes = propTypes;\nFormGroup.defaultProps = defaultProps;\n\nexport default FormGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n inline: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n color: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'small',\n color: 'muted',\n};\n\nconst FormText = (props) => {\n const {\n className,\n cssModule,\n inline,\n color,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n !inline ? 'form-text' : false,\n color ? `text-${color}` : false\n ), cssModule);\n\n return (\n \n );\n};\n\nFormText.propTypes = propTypes;\nFormText.defaultProps = defaultProps;\n\nexport default FormText;\n","/* eslint react/prefer-stateless-function: 0 */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, deprecated, warnOnce } from './utils';\n\nconst propTypes = {\n children: PropTypes.node,\n type: PropTypes.string,\n size: PropTypes.string,\n bsSize: PropTypes.string,\n state: deprecated(PropTypes.string, 'Please use the props \"valid\" and \"invalid\" to indicate the state.'),\n valid: PropTypes.bool,\n invalid: PropTypes.bool,\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n static: deprecated(PropTypes.bool, 'Please use the prop \"plaintext\"'),\n plaintext: PropTypes.bool,\n addon: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n type: 'text',\n};\n\nclass Input extends React.Component {\n constructor(props) {\n super(props);\n this.getRef = this.getRef.bind(this);\n this.focus = this.focus.bind(this);\n }\n\n getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n\n focus() {\n if (this.ref) {\n this.ref.focus();\n }\n }\n\n render() {\n let {\n className,\n cssModule,\n type,\n bsSize,\n state,\n valid,\n invalid,\n tag,\n addon,\n static: staticInput,\n plaintext,\n innerRef,\n ...attributes\n } = this.props;\n\n const checkInput = ['radio', 'checkbox'].indexOf(type) > -1;\n const isNotaNumber = new RegExp('\\\\D', 'g');\n\n const fileInput = type === 'file';\n const textareaInput = type === 'textarea';\n const selectInput = type === 'select';\n let Tag = tag || ((selectInput || textareaInput) ? type : 'input');\n\n let formControlClass = 'form-control';\n\n if (plaintext || staticInput) {\n formControlClass = `${formControlClass}-plaintext`;\n Tag = tag || 'p';\n } else if (fileInput) {\n formControlClass = `${formControlClass}-file`;\n } else if (checkInput) {\n if (addon) {\n formControlClass = null;\n } else {\n formControlClass = 'form-check-input';\n }\n }\n\n if (state && typeof valid === 'undefined' && typeof invalid === 'undefined') {\n if (state === 'danger') {\n invalid = true;\n } else if (state === 'success') {\n valid = true;\n }\n }\n\n if (attributes.size && isNotaNumber.test(attributes.size)) {\n warnOnce('Please use the prop \"bsSize\" instead of the \"size\" to bootstrap\\'s input sizing.');\n bsSize = attributes.size;\n delete attributes.size;\n }\n\n const classes = mapToCssModules(classNames(\n className,\n invalid && 'is-invalid',\n valid && 'is-valid',\n bsSize ? `form-control-${bsSize}` : false,\n formControlClass\n ), cssModule);\n\n if (Tag === 'input' || (tag && typeof tag === 'function')) {\n attributes.type = type;\n }\n\n if (attributes.children && !(plaintext || staticInput || type === 'select' || typeof Tag !== 'string' || Tag === 'select')) {\n warnOnce(`Input with a type of \"${type}\" cannot have children. Please use \"value\"/\"defaultValue\" instead.`);\n delete attributes.children;\n }\n\n return (\n \n );\n }\n}\n\nInput.propTypes = propTypes;\nInput.defaultProps = defaultProps;\n\nexport default Input;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n size: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst InputGroup = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n size,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'input-group',\n size ? `input-group-${size}` : null\n ), cssModule);\n\n return (\n \n );\n};\n\nInputGroup.propTypes = propTypes;\nInputGroup.defaultProps = defaultProps;\n\nexport default InputGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'span'\n};\n\nconst InputGroupText = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'input-group-text'\n ), cssModule);\n\n return (\n \n );\n};\n\nInputGroupText.propTypes = propTypes;\nInputGroupText.defaultProps = defaultProps;\n\nexport default InputGroupText;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\nimport InputGroupText from './InputGroupText';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n addonType: PropTypes.oneOf(['prepend', 'append']).isRequired,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'div'\n};\n\nconst InputGroupAddon = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n addonType,\n children,\n ...attributes\n } = props;\n\n const classes = mapToCssModules(classNames(\n className,\n 'input-group-' + addonType\n ), cssModule);\n\n // Convenience to assist with transition\n if (typeof children === 'string') {\n return (\n \n \n \n );\n }\n\n return (\n \n );\n};\n\nInputGroupAddon.propTypes = propTypes;\nInputGroupAddon.defaultProps = defaultProps;\n\nexport default InputGroupAddon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from './Button';\nimport InputGroupAddon from './InputGroupAddon';\nimport { warnOnce } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n addonType: PropTypes.oneOf(['prepend', 'append']).isRequired,\n children: PropTypes.node,\n groupClassName: PropTypes.string,\n groupAttributes: PropTypes.object,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n};\n\nconst InputGroupButton = (props) => {\n warnOnce('The \"InputGroupButton\" component has been deprecated.\\nPlease use component \"InputGroupAddon\".');\n\n let {\n children,\n groupClassName,\n groupAttributes,\n ...propsWithoutGroup\n } = props;\n\n if (typeof children === 'string') {\n let {\n cssModule,\n tag,\n addonType,\n ...attributes\n } = propsWithoutGroup;\n\n const allGroupAttributes = {\n ...groupAttributes,\n cssModule,\n tag,\n addonType\n };\n\n return (\n \n \n : null}\n {children}\n \n );\n}\n\nAlert.propTypes = propTypes;\nAlert.defaultProps = defaultProps;\n\nexport default Alert;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Transition from 'react-transition-group/Transition';\nimport { mapToCssModules, omit, pick, TransitionTimeouts, TransitionPropTypeKeys, TransitionStatuses } from './utils';\n\nconst propTypes = {\n ...Transition.propTypes,\n isOpen: PropTypes.bool,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]),\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.node,\n navbar: PropTypes.bool,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.string,\n PropTypes.object\n ]),\n};\n\nconst defaultProps = {\n ...Transition.defaultProps,\n isOpen: false,\n appear: false,\n enter: true,\n exit: true,\n tag: 'div',\n timeout: TransitionTimeouts.Collapse,\n};\n\nconst transitionStatusToClassHash = {\n [TransitionStatuses.ENTERING]: 'collapsing',\n [TransitionStatuses.ENTERED]: 'collapse show',\n [TransitionStatuses.EXITING]: 'collapsing',\n [TransitionStatuses.EXITED]: 'collapse',\n};\n\nfunction getTransitionClass(status) {\n return transitionStatusToClassHash[status] || 'collapse';\n}\n\nfunction getHeight(node) {\n return node.scrollHeight;\n}\n\nclass Collapse extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n height: null\n };\n\n ['onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited'].forEach((name) => {\n this[name] = this[name].bind(this);\n });\n }\n\n onEntering(node, isAppearing) {\n this.setState({ height: getHeight(node) });\n this.props.onEntering(node, isAppearing);\n }\n\n onEntered(node, isAppearing) {\n this.setState({ height: null });\n this.props.onEntered(node, isAppearing);\n }\n\n onExit(node) {\n this.setState({ height: getHeight(node) });\n this.props.onExit(node);\n }\n\n onExiting(node) {\n // getting this variable triggers a reflow\n const _unused = node.offsetHeight; // eslint-disable-line no-unused-vars\n this.setState({ height: 0 });\n this.props.onExiting(node);\n }\n\n onExited(node) {\n this.setState({ height: null });\n this.props.onExited(node);\n }\n\n render() {\n const {\n tag: Tag,\n isOpen,\n className,\n navbar,\n cssModule,\n children,\n innerRef,\n ...otherProps\n } = this.props;\n\n const { height } = this.state;\n\n // In NODE_ENV=production the Transition.propTypes are wrapped which results in an\n // empty object \"{}\". This is the result of the `react-transition-group` babel\n // configuration settings. Therefore, to ensure that production builds work without\n // error, we can either explicitly define keys or use the Transition.defaultProps.\n // Using the Transition.defaultProps excludes any required props. Thus, the best\n // solution is to explicitly define required props in our utilities and reference these.\n // This also gives us more flexibility in the future to remove the prop-types\n // dependency in distribution builds (Similar to how `react-transition-group` does).\n // Note: Without omitting the `react-transition-group` props, the resulting child\n // Tag component would inherit the Transition properties as attributes for the HTML\n // element which results in errors/warnings for non-valid attributes.\n const transitionProps = pick(otherProps, TransitionPropTypeKeys);\n const childProps = omit(otherProps, TransitionPropTypeKeys);\n return (\n \n {(status) => {\n let collapseClass = getTransitionClass(status);\n const classes = mapToCssModules(classNames(\n className,\n collapseClass,\n navbar && 'navbar-collapse'\n ), cssModule);\n const style = height === null ? null : { height };\n return (\n \n {children}\n \n );\n }}\n \n );\n }\n}\n\nCollapse.propTypes = propTypes;\nCollapse.defaultProps = defaultProps;\nexport default Collapse;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n color: PropTypes.string,\n action: PropTypes.bool,\n className: PropTypes.any,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'li'\n};\n\nconst handleDisabledOnClick = (e) => {\n e.preventDefault();\n};\n\nconst ListGroupItem = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n active,\n disabled,\n action,\n color,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n active ? 'active' : false,\n disabled ? 'disabled' : false,\n action ? 'list-group-item-action' : false,\n color ? `list-group-item-${color}` : false,\n 'list-group-item'\n ), cssModule);\n\n // Prevent click event when disabled.\n if (disabled) {\n attributes.onClick = handleDisabledOnClick;\n }\n return (\n \n );\n};\n\nListGroupItem.propTypes = propTypes;\nListGroupItem.defaultProps = defaultProps;\n\nexport default ListGroupItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.any,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'h5'\n};\n\nconst ListGroupItemHeading = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'list-group-item-heading'\n ), cssModule);\n\n return (\n \n );\n};\n\nListGroupItemHeading.propTypes = propTypes;\nListGroupItemHeading.defaultProps = defaultProps;\n\nexport default ListGroupItemHeading;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\n\nconst propTypes = {\n tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n className: PropTypes.any,\n cssModule: PropTypes.object,\n};\n\nconst defaultProps = {\n tag: 'p'\n};\n\nconst ListGroupItemText = (props) => {\n const {\n className,\n cssModule,\n tag: Tag,\n ...attributes\n } = props;\n const classes = mapToCssModules(classNames(\n className,\n 'list-group-item-text'\n ), cssModule);\n\n return (\n \n );\n};\n\nListGroupItemText.propTypes = propTypes;\nListGroupItemText.defaultProps = defaultProps;\n\nexport default ListGroupItemText;\n","import React, { Component } from 'react';\nimport Alert from './Alert';\n\nclass UncontrolledAlert extends Component {\n constructor(props) {\n super(props);\n\n this.state = { isOpen: true };\n this.toggle = this.toggle.bind(this);\n }\n\n toggle() {\n this.setState({ isOpen: !this.state.isOpen });\n }\n\n render() {\n return ;\n }\n}\n\nexport default UncontrolledAlert;\n","import React, { Component } from 'react';\nimport ButtonDropdown from './ButtonDropdown';\n\nexport default class UncontrolledButtonDropdown extends Component {\n constructor(props) {\n super(props);\n\n this.state = { isOpen: false };\n this.toggle = this.toggle.bind(this);\n }\n\n toggle() {\n this.setState({ isOpen: !this.state.isOpen });\n }\n\n render() {\n return ;\n }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Collapse from './Collapse';\nimport { findDOMElements, defaultToggleEvents, addMultipleEventListeners } from './utils';\n\nconst propTypes = {\n toggler: PropTypes.string.isRequired,\n toggleEvents: PropTypes.arrayOf(PropTypes.string)\n};\n\nconst defaultProps = {\n toggleEvents: defaultToggleEvents\n};\n\nclass UncontrolledCollapse extends Component {\n constructor(props) {\n super(props);\n\n this.togglers = null;\n this.removeEventListeners = null;\n this.toggle = this.toggle.bind(this);\n\n this.state = {\n isOpen: false\n };\n }\n\n componentDidMount() {\n this.togglers = findDOMElements(this.props.toggler);\n if (this.togglers.length) {\n this.removeEventListeners = addMultipleEventListeners(\n this.togglers,\n this.toggle,\n this.props.toggleEvents\n );\n }\n }\n\n componentWillUnmount() {\n if (this.togglers.length && this.removeEventListeners) {\n this.removeEventListeners();\n }\n }\n\n toggle(e) {\n this.setState(({ isOpen }) => ({ isOpen: !isOpen }));\n e.preventDefault();\n }\n\n render() {\n const { toggleEvents, ...rest } = this.props;\n return ;\n }\n}\n\nUncontrolledCollapse.propTypes = propTypes;\nUncontrolledCollapse.defaultProps = defaultProps;\n\nexport default UncontrolledCollapse;\n","import React, { Component } from 'react';\nimport Dropdown from './Dropdown';\n\nexport default class UncontrolledDropdown extends Component {\n constructor(props) {\n super(props);\n\n this.state = { isOpen: false };\n this.toggle = this.toggle.bind(this);\n }\n\n toggle() {\n this.setState({ isOpen: !this.state.isOpen });\n }\n\n render() {\n return ;\n }\n}\n","import React, { Component } from 'react';\nimport Tooltip from './Tooltip';\n\nexport default class UncontrolledTooltip extends Component {\n constructor(props) {\n super(props);\n\n this.state = { isOpen: false };\n this.toggle = this.toggle.bind(this);\n }\n\n toggle() {\n this.setState({ isOpen: !this.state.isOpen });\n }\n\n render() {\n return ;\n }\n}\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (isNativeReflectConstruct()) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","//! openseadragon 2.4.2\n//! Built on 2020-03-05\n//! Git commit: v2.4.2-0-c450749\n//! http://openseadragon.github.io\n//! License: http://openseadragon.github.io/license/\n\n/*\n * OpenSeadragon\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Portions of this source file taken from jQuery:\n *\n * Copyright 2011 John Resig\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/*\n * Portions of this source file taken from mattsnider.com:\n *\n * Copyright (c) 2006-2013 Matt Snider\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\n * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\n * THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n/**\n * @namespace OpenSeadragon\n * @version openseadragon 2.4.2\n * @classdesc The root namespace for OpenSeadragon. All utility methods\n * and classes are defined on or below this namespace.\n *\n */\n\n\n// Typedefs\n\n /**\n * All required and optional settings for instantiating a new instance of an OpenSeadragon image viewer.\n *\n * @typedef {Object} Options\n * @memberof OpenSeadragon\n *\n * @property {String} id\n * Id of the element to append the viewer's container element to. If not provided, the 'element' property must be provided.\n * If both the element and id properties are specified, the viewer is appended to the element provided in the element property.\n *\n * @property {Element} element\n * The element to append the viewer's container element to. If not provided, the 'id' property must be provided.\n * If both the element and id properties are specified, the viewer is appended to the element provided in the element property.\n *\n * @property {Array|String|Function|Object} [tileSources=null]\n * Tile source(s) to open initially. This is a complex parameter; see\n * {@link OpenSeadragon.Viewer#open} for details.\n *\n * @property {Number} [tabIndex=0]\n * Tabbing order index to assign to the viewer element. Positive values are selected in increasing order. When tabIndex is 0\n * source order is used. A negative value omits the viewer from the tabbing order.\n *\n * @property {Array} overlays Array of objects defining permanent overlays of\n * the viewer. The overlays added via this option and later removed with\n * {@link OpenSeadragon.Viewer#removeOverlay} will be added back when a new\n * image is opened.\n * To add overlays which can be definitively removed, one must use\n * {@link OpenSeadragon.Viewer#addOverlay}\n * If displaying a sequence of images, the overlays can be associated\n * with a specific page by passing the overlays array to the page's\n * tile source configuration.\n * Expected properties:\n * * x, y, (or px, py for pixel coordinates) to define the location.\n * * width, height in point if using x,y or in pixels if using px,py. If width\n * and height are specified, the overlay size is adjusted when zooming,\n * otherwise the size stays the size of the content (or the size defined by CSS).\n * * className to associate a class to the overlay\n * * id to set the overlay element. If an element with this id already exists,\n * it is reused, otherwise it is created. If not specified, a new element is\n * created.\n * * placement a string to define the relative position to the viewport.\n * Only used if no width and height are specified. Default: 'TOP_LEFT'.\n * See {@link OpenSeadragon.Placement} for possible values.\n *\n * @property {String} [xmlPath=null]\n * DEPRECATED. A relative path to load a DZI file from the server.\n * Prefer the newer Options.tileSources.\n *\n * @property {String} [prefixUrl='/images/']\n * Prepends the prefixUrl to navImages paths, which is very useful\n * since the default paths are rarely useful for production\n * environments.\n *\n * @property {OpenSeadragon.NavImages} [navImages]\n * An object with a property for each button or other built-in navigation\n * control, eg the current 'zoomIn', 'zoomOut', 'home', and 'fullpage'.\n * Each of those in turn provides an image path for each state of the button\n * or navigation control, eg 'REST', 'GROUP', 'HOVER', 'PRESS'. Finally the\n * image paths, by default assume there is a folder on the servers root path\n * called '/images', eg '/images/zoomin_rest.png'. If you need to adjust\n * these paths, prefer setting the option.prefixUrl rather than overriding\n * every image path directly through this setting.\n *\n * @property {Boolean} [debugMode=false]\n * TODO: provide an in-screen panel providing event detail feedback.\n *\n * @property {String} [debugGridColor=['#437AB2', '#1B9E77', '#D95F02', '#7570B3', '#E7298A', '#66A61E', '#E6AB02', '#A6761D', '#666666']]\n * The colors of grids in debug mode. Each tiled image's grid uses a consecutive color.\n * If there are more tiled images than provided colors, the color vector is recycled.\n *\n * @property {Number} [blendTime=0]\n * Specifies the duration of animation as higher or lower level tiles are\n * replacing the existing tile.\n *\n * @property {Boolean} [alwaysBlend=false]\n * Forces the tile to always blend. By default the tiles skip blending\n * when the blendTime is surpassed and the current animation frame would\n * not complete the blend.\n *\n * @property {Boolean} [autoHideControls=true]\n * If the user stops interacting with the viewport, fade the navigation\n * controls. Useful for presentation since the controls are by default\n * floated on top of the image the user is viewing.\n *\n * @property {Boolean} [immediateRender=false]\n * Render the best closest level first, ignoring the lowering levels which\n * provide the effect of very blurry to sharp. It is recommended to change\n * setting to true for mobile devices.\n *\n * @property {Number} [defaultZoomLevel=0]\n * Zoom level to use when image is first opened or the home button is clicked.\n * If 0, adjusts to fit viewer.\n *\n * @property {Number} [opacity=1]\n * Default proportional opacity of the tiled images (1=opaque, 0=hidden)\n * Hidden images do not draw and only load when preloading is allowed.\n *\n * @property {Boolean} [preload=false]\n * Default switch for loading hidden images (true loads, false blocks)\n *\n * @property {String} [compositeOperation=null]\n * Valid values are 'source-over', 'source-atop', 'source-in', 'source-out',\n * 'destination-over', 'destination-atop', 'destination-in',\n * 'destination-out', 'lighter', 'copy' or 'xor'\n *\n * @property {Boolean} [imageSmoothingEnabled=true]\n * Image smoothing for canvas rendering (only if canvas is used). Note: Ignored\n * by some (especially older) browsers which do not support this canvas property.\n * This property can be changed in {@link Viewer.Drawer.setImageSmoothingEnabled}.\n *\n * @property {String|CanvasGradient|CanvasPattern|Function} [placeholderFillStyle=null]\n * Draws a colored rectangle behind the tile if it is not loaded yet.\n * You can pass a CSS color value like \"#FF8800\".\n * When passing a function the tiledImage and canvas context are available as argument which is useful when you draw a gradient or pattern.\n *\n * @property {Number} [degrees=0]\n * Initial rotation.\n *\n * @property {Boolean} [flipped=false]\n * Initial flip state.\n *\n * @property {Number} [minZoomLevel=null]\n *\n * @property {Number} [maxZoomLevel=null]\n *\n * @property {Boolean} [homeFillsViewer=false]\n * Make the 'home' button fill the viewer and clip the image, instead\n * of fitting the image to the viewer and letterboxing.\n *\n * @property {Boolean} [panHorizontal=true]\n * Allow horizontal pan.\n *\n * @property {Boolean} [panVertical=true]\n * Allow vertical pan.\n *\n * @property {Boolean} [constrainDuringPan=false]\n *\n * @property {Boolean} [wrapHorizontal=false]\n * Set to true to force the image to wrap horizontally within the viewport.\n * Useful for maps or images representing the surface of a sphere or cylinder.\n *\n * @property {Boolean} [wrapVertical=false]\n * Set to true to force the image to wrap vertically within the viewport.\n * Useful for maps or images representing the surface of a sphere or cylinder.\n *\n * @property {Number} [minZoomImageRatio=0.9]\n * The minimum percentage ( expressed as a number between 0 and 1 ) of\n * the viewport height or width at which the zoom out will be constrained.\n * Setting it to 0, for example will allow you to zoom out infinity.\n *\n * @property {Number} [maxZoomPixelRatio=1.1]\n * The maximum ratio to allow a zoom-in to affect the highest level pixel\n * ratio. This can be set to Infinity to allow 'infinite' zooming into the\n * image though it is less effective visually if the HTML5 Canvas is not\n * available on the viewing device.\n *\n * @property {Number} [smoothTileEdgesMinZoom=1.1]\n * A zoom percentage ( where 1 is 100% ) of the highest resolution level.\n * When zoomed in beyond this value alternative compositing will be used to\n * smooth out the edges between tiles. This will have a performance impact.\n * Can be set to Infinity to turn it off.\n * Note: This setting is ignored on iOS devices due to a known bug (See {@link https://github.com/openseadragon/openseadragon/issues/952})\n *\n * @property {Boolean} [iOSDevice=?]\n * True if running on an iOS device, false otherwise.\n * Used to disable certain features that behave differently on iOS devices.\n *\n * @property {Boolean} [autoResize=true]\n * Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior.\n *\n * @property {Boolean} [preserveImageSizeOnResize=false]\n * Set to true to have the image size preserved when the viewer is resized. This requires autoResize=true (default).\n *\n * @property {Number} [minScrollDeltaTime=50]\n * Number of milliseconds between canvas-scroll events. This value helps normalize the rate of canvas-scroll\n * events between different devices, causing the faster devices to slow down enough to make the zoom control\n * more manageable.\n *\n * @property {Number} [rotationIncrement=90]\n * The number of degrees to rotate right or left when the rotate buttons or keyboard shortcuts are activated.\n *\n * @property {Number} [pixelsPerWheelLine=40]\n * For pixel-resolution scrolling devices, the number of pixels equal to one scroll line.\n *\n * @property {Number} [pixelsPerArrowPress=40]\n * The number of pixels viewport moves when an arrow key is pressed.\n *\n * @property {Number} [visibilityRatio=0.5]\n * The percentage ( as a number from 0 to 1 ) of the source image which\n * must be kept within the viewport. If the image is dragged beyond that\n * limit, it will 'bounce' back until the minimum visibility ratio is\n * achieved. Setting this to 0 and wrapHorizontal ( or wrapVertical ) to\n * true will provide the effect of an infinitely scrolling viewport.\n *\n * @property {Object} [viewportMargins={}]\n * Pushes the \"home\" region in from the sides by the specified amounts.\n * Possible subproperties (Numbers, in screen coordinates): left, top, right, bottom.\n *\n * @property {Number} [imageLoaderLimit=0]\n * The maximum number of image requests to make concurrently. By default\n * it is set to 0 allowing the browser to make the maximum number of\n * image requests in parallel as allowed by the browsers policy.\n *\n * @property {Number} [clickTimeThreshold=300]\n * The number of milliseconds within which a pointer down-up event combination\n * will be treated as a click gesture.\n *\n * @property {Number} [clickDistThreshold=5]\n * The maximum distance allowed between a pointer down event and a pointer up event\n * to be treated as a click gesture.\n *\n * @property {Number} [dblClickTimeThreshold=300]\n * The number of milliseconds within which two pointer down-up event combinations\n * will be treated as a double-click gesture.\n *\n * @property {Number} [dblClickDistThreshold=20]\n * The maximum distance allowed between two pointer click events\n * to be treated as a double-click gesture.\n *\n * @property {Number} [springStiffness=6.5]\n *\n * @property {Number} [animationTime=1.2]\n * Specifies the animation duration per each {@link OpenSeadragon.Spring}\n * which occur when the image is dragged or zoomed.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsMouse]\n * Settings for gestures generated by a mouse pointer device. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsMouse.scrollToZoom=true] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsMouse.clickToZoom=true] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsMouse.dblClickToZoom=false] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsMouse.pinchToZoom=false] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsMouse.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsMouse.flickEnabled=false] - Enable flick gesture\n * @property {Number} [gestureSettingsMouse.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsMouse.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsMouse.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsTouch]\n * Settings for gestures generated by a touch pointer device. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsTouch.scrollToZoom=false] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsTouch.clickToZoom=false] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsTouch.dblClickToZoom=true] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsTouch.pinchToZoom=true] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsTouch.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsTouch.flickEnabled=true] - Enable flick gesture\n * @property {Number} [gestureSettingsTouch.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsTouch.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsTouch.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsPen]\n * Settings for gestures generated by a pen pointer device. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsPen.scrollToZoom=false] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsPen.clickToZoom=true] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsPen.dblClickToZoom=false] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsPen.pinchToZoom=false] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsPen.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsPen.flickEnabled=false] - Enable flick gesture\n * @property {Number} [gestureSettingsPen.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsPen.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsPen.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {OpenSeadragon.GestureSettings} [gestureSettingsUnknown]\n * Settings for gestures generated by unknown pointer devices. (See {@link OpenSeadragon.GestureSettings})\n * @property {Boolean} [gestureSettingsUnknown.scrollToZoom=true] - Zoom on scroll gesture\n * @property {Boolean} [gestureSettingsUnknown.clickToZoom=false] - Zoom on click gesture\n * @property {Boolean} [gestureSettingsUnknown.dblClickToZoom=true] - Zoom on double-click gesture. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n * @property {Boolean} [gestureSettingsUnknown.pinchToZoom=true] - Zoom on pinch gesture\n * @property {Boolean} [gestureSettingsUnknown.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,\n * the zoom is centered at the canvas center.\n * @property {Boolean} [gestureSettingsUnknown.flickEnabled=true] - Enable flick gesture\n * @property {Number} [gestureSettingsUnknown.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second)\n * @property {Number} [gestureSettingsUnknown.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture\n * @property {Boolean} [gestureSettingsUnknown.pinchRotate=false] - If pinchRotate is true, the user will have the ability to rotate the image using their fingers.\n *\n * @property {Number} [zoomPerClick=2.0]\n * The \"zoom distance\" per mouse click or touch tap. Note: Setting this to 1.0 effectively disables the click-to-zoom feature (also see gestureSettings[Mouse|Touch|Pen].clickToZoom/dblClickToZoom).\n *\n * @property {Number} [zoomPerScroll=1.2]\n * The \"zoom distance\" per mouse scroll or touch pinch. Note: Setting this to 1.0 effectively disables the mouse-wheel zoom feature (also see gestureSettings[Mouse|Touch|Pen].scrollToZoom}).\n *\n * @property {Number} [zoomPerSecond=1.0]\n * The number of seconds to animate a single zoom event over.\n *\n * @property {Boolean} [showNavigator=false]\n * Set to true to make the navigator minimap appear.\n *\n * @property {String} [navigatorId=navigator-GENERATED DATE]\n * The ID of a div to hold the navigator minimap.\n * If an ID is specified, the navigatorPosition, navigatorSizeRatio, navigatorMaintainSizeRatio, navigator[Top|Left|Height|Width] and navigatorAutoFade options will be ignored.\n * If an ID is not specified, a div element will be generated and placed on top of the main image.\n *\n * @property {String} [navigatorPosition='TOP_RIGHT']\n * Valid values are 'TOP_LEFT', 'TOP_RIGHT', 'BOTTOM_LEFT', 'BOTTOM_RIGHT', or 'ABSOLUTE'.
\n * If 'ABSOLUTE' is specified, then navigator[Top|Left|Height|Width] determines the size and position of the navigator minimap in the viewer, and navigatorSizeRatio and navigatorMaintainSizeRatio are ignored.
\n * For 'TOP_LEFT', 'TOP_RIGHT', 'BOTTOM_LEFT', and 'BOTTOM_RIGHT', the navigatorSizeRatio or navigator[Height|Width] values determine the size of the navigator minimap.\n *\n * @property {Number} [navigatorSizeRatio=0.2]\n * Ratio of navigator size to viewer size. Ignored if navigator[Height|Width] are specified.\n *\n * @property {Boolean} [navigatorMaintainSizeRatio=false]\n * If true, the navigator minimap is resized (using navigatorSizeRatio) when the viewer size changes.\n *\n * @property {Number|String} [navigatorTop=null]\n * Specifies the location of the navigator minimap (see navigatorPosition).\n *\n * @property {Number|String} [navigatorLeft=null]\n * Specifies the location of the navigator minimap (see navigatorPosition).\n *\n * @property {Number|String} [navigatorHeight=null]\n * Specifies the size of the navigator minimap (see navigatorPosition).\n * If specified, navigatorSizeRatio and navigatorMaintainSizeRatio are ignored.\n *\n * @property {Number|String} [navigatorWidth=null]\n * Specifies the size of the navigator minimap (see navigatorPosition).\n * If specified, navigatorSizeRatio and navigatorMaintainSizeRatio are ignored.\n *\n * @property {Boolean} [navigatorAutoResize=true]\n * Set to false to prevent polling for navigator size changes. Useful for providing custom resize behavior.\n * Setting to false can also improve performance when the navigator is configured to a fixed size.\n *\n * @property {Boolean} [navigatorAutoFade=true]\n * If the user stops interacting with the viewport, fade the navigator minimap.\n * Setting to false will make the navigator minimap always visible.\n *\n * @property {Boolean} [navigatorRotate=true]\n * If true, the navigator will be rotated together with the viewer.\n *\n * @property {String} [navigatorBackground='#000']\n * Specifies the background color of the navigator minimap\n *\n * @property {Number} [navigatorOpacity=0.8]\n * Specifies the opacity of the navigator minimap.\n *\n * @property {String} [navigatorBorderColor='#555']\n * Specifies the border color of the navigator minimap\n *\n * @property {String} [navigatorDisplayRegionColor='#900']\n * Specifies the border color of the display region rectangle of the navigator minimap\n *\n * @property {Number} [controlsFadeDelay=2000]\n * The number of milliseconds to wait once the user has stopped interacting\n * with the interface before beginning to fade the controls. Assumes\n * showNavigationControl and autoHideControls are both true.\n *\n * @property {Number} [controlsFadeLength=1500]\n * The number of milliseconds to animate the controls fading out.\n *\n * @property {Number} [maxImageCacheCount=200]\n * The max number of images we should keep in memory (per drawer).\n *\n * @property {Number} [timeout=30000]\n * The max number of milliseconds that an image job may take to complete.\n *\n * @property {Boolean} [useCanvas=true]\n * Set to false to not use an HTML canvas element for image rendering even if canvas is supported.\n *\n * @property {Number} [minPixelRatio=0.5]\n * The higher the minPixelRatio, the lower the quality of the image that\n * is considered sufficient to stop rendering a given zoom level. For\n * example, if you are targeting mobile devices with less bandwidth you may\n * try setting this to 1.5 or higher.\n *\n * @property {Boolean} [mouseNavEnabled=true]\n * Is the user able to interact with the image via mouse or touch. Default\n * interactions include draging the image in a plane, and zooming in toward\n * and away from the image.\n *\n * @property {Boolean} [showNavigationControl=true]\n * Set to false to prevent the appearance of the default navigation controls.
\n * Note that if set to false, the customs buttons set by the options\n * zoomInButton, zoomOutButton etc, are rendered inactive.\n *\n * @property {OpenSeadragon.ControlAnchor} [navigationControlAnchor=TOP_LEFT]\n * Placement of the default navigation controls.\n * To set the placement of the sequence controls, see the\n * sequenceControlAnchor option.\n *\n * @property {Boolean} [showZoomControl=true]\n * If true then + and - buttons to zoom in and out are displayed.
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showHomeControl=true]\n * If true then the 'Go home' button is displayed to go back to the original\n * zoom and pan.
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showFullPageControl=true]\n * If true then the 'Toggle full page' button is displayed to switch\n * between full page and normal mode.
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showRotationControl=false]\n * If true then the rotate left/right controls will be displayed as part of the\n * standard controls. This is also subject to the browser support for rotate\n * (e.g. viewer.drawer.canRotate()).
\n * Note: {@link OpenSeadragon.Options.showNavigationControl} is overriding\n * this setting when set to false.\n *\n * @property {Boolean} [showFlipControl=false]\n * If true then the flip controls will be displayed as part of the\n * standard controls.\n *\n * @property {Boolean} [showSequenceControl=true]\n * If sequenceMode is true, then provide buttons for navigating forward and\n * backward through the images.\n *\n * @property {OpenSeadragon.ControlAnchor} [sequenceControlAnchor=TOP_LEFT]\n * Placement of the default sequence controls.\n *\n * @property {Boolean} [navPrevNextWrap=false]\n * If true then the 'previous' button will wrap to the last image when\n * viewing the first image and the 'next' button will wrap to the first\n * image when viewing the last image.\n *\n * @property {String} zoomInButton\n * Set the id of the custom 'Zoom in' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} zoomOutButton\n * Set the id of the custom 'Zoom out' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} homeButton\n * Set the id of the custom 'Go home' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} fullPageButton\n * Set the id of the custom 'Toggle full page' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} rotateLeftButton\n * Set the id of the custom 'Rotate left' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} rotateRightButton\n * Set the id of the custom 'Rotate right' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} previousButton\n * Set the id of the custom 'Previous page' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {String} nextButton\n * Set the id of the custom 'Next page' button to use.\n * This is useful to have a custom button anywhere in the web page.
\n * To only change the button images, consider using\n * {@link OpenSeadragon.Options.navImages}\n *\n * @property {Boolean} [sequenceMode=false]\n * Set to true to have the viewer treat your tilesources as a sequence of images to\n * be opened one at a time rather than all at once.\n *\n * @property {Number} [initialPage=0]\n * If sequenceMode is true, display this page initially.\n *\n * @property {Boolean} [preserveViewport=false]\n * If sequenceMode is true, then normally navigating through each image resets the\n * viewport to 'home' position. If preserveViewport is set to true, then the viewport\n * position is preserved when navigating between images in the sequence.\n *\n * @property {Boolean} [preserveOverlays=false]\n * If sequenceMode is true, then normally navigating through each image\n * resets the overlays.\n * If preserveOverlays is set to true, then the overlays added with {@link OpenSeadragon.Viewer#addOverlay}\n * are preserved when navigating between images in the sequence.\n * Note: setting preserveOverlays overrides any overlays specified in the global\n * \"overlays\" option for the Viewer. It's also not compatible with specifying\n * per-tileSource overlays via the options, as those overlays will persist\n * even after the tileSource is closed.\n *\n * @property {Boolean} [showReferenceStrip=false]\n * If sequenceMode is true, then display a scrolling strip of image thumbnails for\n * navigating through the images.\n *\n * @property {String} [referenceStripScroll='horizontal']\n *\n * @property {Element} [referenceStripElement=null]\n *\n * @property {Number} [referenceStripHeight=null]\n *\n * @property {Number} [referenceStripWidth=null]\n *\n * @property {String} [referenceStripPosition='BOTTOM_LEFT']\n *\n * @property {Number} [referenceStripSizeRatio=0.2]\n *\n * @property {Boolean} [collectionMode=false]\n * Set to true to have the viewer arrange your TiledImages in a grid or line.\n *\n * @property {Number} [collectionRows=3]\n * If collectionMode is true, specifies how many rows the grid should have. Use 1 to make a line.\n * If collectionLayout is 'vertical', specifies how many columns instead.\n *\n * @property {Number} [collectionColumns=0]\n * If collectionMode is true, specifies how many columns the grid should have. Use 1 to make a line.\n * If collectionLayout is 'vertical', specifies how many rows instead. Ignored if collectionRows is not set to a falsy value.\n *\n * @property {String} [collectionLayout='horizontal']\n * If collectionMode is true, specifies whether to arrange vertically or horizontally.\n *\n * @property {Number} [collectionTileSize=800]\n * If collectionMode is true, specifies the size, in viewport coordinates, for each TiledImage to fit into.\n * The TiledImage will be centered within a square of the specified size.\n *\n * @property {Number} [collectionTileMargin=80]\n * If collectionMode is true, specifies the margin, in viewport coordinates, between each TiledImage.\n *\n * @property {String|Boolean} [crossOriginPolicy=false]\n * Valid values are 'Anonymous', 'use-credentials', and false. If false, canvas requests will\n * not use CORS, and the canvas will be tainted.\n *\n * @property {Boolean} [ajaxWithCredentials=false]\n * Whether to set the withCredentials XHR flag for AJAX requests.\n * Note that this can be overridden at the {@link OpenSeadragon.TileSource} level.\n *\n * @property {Boolean} [loadTilesWithAjax=false]\n * Whether to load tile data using AJAX requests.\n * Note that this can be overridden at the {@link OpenSeadragon.TileSource} level.\n *\n * @property {Object} [ajaxHeaders={}]\n * A set of headers to include when making AJAX requests for tile sources or tiles.\n *\n */\n\n /**\n * Settings for gestures generated by a pointer device.\n *\n * @typedef {Object} GestureSettings\n * @memberof OpenSeadragon\n *\n * @property {Boolean} scrollToZoom\n * Set to false to disable zooming on scroll gestures.\n *\n * @property {Boolean} clickToZoom\n * Set to false to disable zooming on click gestures.\n *\n * @property {Boolean} dblClickToZoom\n * Set to false to disable zooming on double-click gestures. Note: If set to true\n * then clickToZoom should be set to false to prevent multiple zooms.\n *\n * @property {Boolean} pinchToZoom\n * Set to false to disable zooming on pinch gestures.\n *\n * @property {Boolean} flickEnabled\n * Set to false to disable the kinetic panning effect (flick) at the end of a drag gesture.\n *\n * @property {Number} flickMinSpeed\n * If flickEnabled is true, the minimum speed (in pixels-per-second) required to cause the kinetic panning effect (flick) at the end of a drag gesture.\n *\n * @property {Number} flickMomentum\n * If flickEnabled is true, a constant multiplied by the velocity to determine the distance of the kinetic panning effect (flick) at the end of a drag gesture.\n * A larger value will make the flick feel \"lighter\", while a smaller value will make the flick feel \"heavier\".\n * Note: springStiffness and animationTime also affect the \"spring\" used to stop the flick animation.\n *\n */\n\n/**\n * The names for the image resources used for the image navigation buttons.\n *\n * @typedef {Object} NavImages\n * @memberof OpenSeadragon\n *\n * @property {Object} zoomIn - Images for the zoom-in button.\n * @property {String} zoomIn.REST\n * @property {String} zoomIn.GROUP\n * @property {String} zoomIn.HOVER\n * @property {String} zoomIn.DOWN\n *\n * @property {Object} zoomOut - Images for the zoom-out button.\n * @property {String} zoomOut.REST\n * @property {String} zoomOut.GROUP\n * @property {String} zoomOut.HOVER\n * @property {String} zoomOut.DOWN\n *\n * @property {Object} home - Images for the home button.\n * @property {String} home.REST\n * @property {String} home.GROUP\n * @property {String} home.HOVER\n * @property {String} home.DOWN\n *\n * @property {Object} fullpage - Images for the full-page button.\n * @property {String} fullpage.REST\n * @property {String} fullpage.GROUP\n * @property {String} fullpage.HOVER\n * @property {String} fullpage.DOWN\n *\n * @property {Object} rotateleft - Images for the rotate left button.\n * @property {String} rotateleft.REST\n * @property {String} rotateleft.GROUP\n * @property {String} rotateleft.HOVER\n * @property {String} rotateleft.DOWN\n *\n * @property {Object} rotateright - Images for the rotate right button.\n * @property {String} rotateright.REST\n * @property {String} rotateright.GROUP\n * @property {String} rotateright.HOVER\n * @property {String} rotateright.DOWN\n *\n * @property {Object} flip - Images for the flip button.\n * @property {String} flip.REST\n * @property {String} flip.GROUP\n * @property {String} flip.HOVER\n * @property {String} flip.DOWN\n *\n * @property {Object} previous - Images for the previous button.\n * @property {String} previous.REST\n * @property {String} previous.GROUP\n * @property {String} previous.HOVER\n * @property {String} previous.DOWN\n *\n * @property {Object} next - Images for the next button.\n * @property {String} next.REST\n * @property {String} next.GROUP\n * @property {String} next.HOVER\n * @property {String} next.DOWN\n *\n */\n\n/* eslint-disable no-redeclare */\nfunction OpenSeadragon( options ){\n return new OpenSeadragon.Viewer( options );\n}\n\n(function( $ ){\n\n\n /**\n * The OpenSeadragon version.\n *\n * @member {Object} OpenSeadragon.version\n * @property {String} versionStr - The version number as a string ('major.minor.revision').\n * @property {Number} major - The major version number.\n * @property {Number} minor - The minor version number.\n * @property {Number} revision - The revision number.\n * @since 1.0.0\n */\n $.version = {\n versionStr: '2.4.2',\n major: parseInt('2', 10),\n minor: parseInt('4', 10),\n revision: parseInt('2', 10)\n };\n\n\n /**\n * Taken from jquery 1.6.1\n * [[Class]] -> type pairs\n * @private\n */\n var class2type = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regexp',\n '[object Object]': 'object'\n },\n // Save a reference to some core methods\n toString = Object.prototype.toString,\n hasOwn = Object.prototype.hasOwnProperty;\n\n /**\n * Taken from jQuery 1.6.1\n * @function isFunction\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isFunction = function( obj ) {\n return $.type(obj) === \"function\";\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function isArray\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isArray = Array.isArray || function( obj ) {\n return $.type(obj) === \"array\";\n };\n\n\n /**\n * A crude way of determining if an object is a window.\n * Taken from jQuery 1.6.1\n * @function isWindow\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isWindow = function( obj ) {\n return obj && typeof obj === \"object\" && \"setInterval\" in obj;\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function type\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.type = function( obj ) {\n return ( obj === null ) || ( obj === undefined ) ?\n String( obj ) :\n class2type[ toString.call(obj) ] || \"object\";\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function isPlainObject\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isPlainObject = function( obj ) {\n // Must be an Object.\n // Because of IE, we also have to check the presence of the constructor property.\n // Make sure that DOM nodes and window objects don't pass through, as well\n if ( !obj || OpenSeadragon.type(obj) !== \"object\" || obj.nodeType || $.isWindow( obj ) ) {\n return false;\n }\n\n // Not own constructor property must be Object\n if ( obj.constructor &&\n !hasOwn.call(obj, \"constructor\") &&\n !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n return false;\n }\n\n // Own properties are enumerated firstly, so to speed up,\n // if last one is own, then all properties are own.\n\n var lastKey;\n for (var key in obj ) {\n lastKey = key;\n }\n\n return lastKey === undefined || hasOwn.call( obj, lastKey );\n };\n\n\n /**\n * Taken from jQuery 1.6.1\n * @function isEmptyObject\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.isEmptyObject = function( obj ) {\n for ( var name in obj ) {\n return false;\n }\n return true;\n };\n\n /**\n * Shim around Object.freeze. Does nothing if Object.freeze is not supported.\n * @param {Object} obj The object to freeze.\n * @return {Object} obj The frozen object.\n */\n $.freezeObject = function(obj) {\n if (Object.freeze) {\n $.freezeObject = Object.freeze;\n } else {\n $.freezeObject = function(obj) {\n return obj;\n };\n }\n return $.freezeObject(obj);\n };\n\n /**\n * True if the browser supports the HTML5 canvas element\n * @member {Boolean} supportsCanvas\n * @memberof OpenSeadragon\n */\n $.supportsCanvas = (function () {\n var canvasElement = document.createElement( 'canvas' );\n return !!( $.isFunction( canvasElement.getContext ) &&\n canvasElement.getContext( '2d' ) );\n }());\n\n /**\n * Test whether the submitted canvas is tainted or not.\n * @argument {Canvas} canvas The canvas to test.\n * @returns {Boolean} True if the canvas is tainted.\n */\n $.isCanvasTainted = function(canvas) {\n var isTainted = false;\n try {\n // We test if the canvas is tainted by retrieving data from it.\n // An exception will be raised if the canvas is tainted.\n canvas.getContext('2d').getImageData(0, 0, 1, 1);\n } catch (e) {\n isTainted = true;\n }\n return isTainted;\n };\n\n /**\n * A ratio comparing the device screen's pixel density to the canvas's backing store pixel density,\n * clamped to a minimum of 1. Defaults to 1 if canvas isn't supported by the browser.\n * @member {Number} pixelDensityRatio\n * @memberof OpenSeadragon\n */\n $.pixelDensityRatio = (function () {\n if ( $.supportsCanvas ) {\n var context = document.createElement('canvas').getContext('2d');\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio || 1;\n return Math.max(devicePixelRatio, 1) / backingStoreRatio;\n } else {\n return 1;\n }\n }());\n\n}( OpenSeadragon ));\n\n/**\n * This closure defines all static methods available to the OpenSeadragon\n * namespace. Many, if not most, are taked directly from jQuery for use\n * to simplify and reduce common programming patterns. More static methods\n * from jQuery may eventually make their way into this though we are\n * attempting to avoid an explicit dependency on jQuery only because\n * OpenSeadragon is a broadly useful code base and would be made less broad\n * by requiring jQuery fully.\n *\n * Some static methods have also been refactored from the original OpenSeadragon\n * project.\n */\n(function( $ ){\n\n /**\n * Taken from jQuery 1.6.1\n * @function extend\n * @memberof OpenSeadragon\n * @see {@link http://www.jquery.com/ jQuery}\n */\n $.extend = function() {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[ 0 ] || {},\n length = arguments.length,\n deep = false,\n i = 1;\n\n // Handle a deep copy situation\n if ( typeof target === \"boolean\" ) {\n deep = target;\n target = arguments[ 1 ] || {};\n // skip the boolean and the target\n i = 2;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if ( typeof target !== \"object\" && !OpenSeadragon.isFunction( target ) ) {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if ( length === i ) {\n target = this;\n --i;\n }\n\n for ( ; i < length; i++ ) {\n // Only deal with non-null/undefined values\n options = arguments[ i ];\n if ( options !== null || options !== undefined ) {\n // Extend the base object\n for ( name in options ) {\n src = target[ name ];\n copy = options[ name ];\n\n // Prevent never-ending loop\n if ( target === copy ) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if ( deep && copy && ( OpenSeadragon.isPlainObject( copy ) || ( copyIsArray = OpenSeadragon.isArray( copy ) ) ) ) {\n if ( copyIsArray ) {\n copyIsArray = false;\n clone = src && OpenSeadragon.isArray( src ) ? src : [];\n\n } else {\n clone = src && OpenSeadragon.isPlainObject( src ) ? src : {};\n }\n\n // Never move original objects, clone them\n target[ name ] = OpenSeadragon.extend( deep, clone, copy );\n\n // Don't bring in undefined values\n } else if ( copy !== undefined ) {\n target[ name ] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n\n var isIOSDevice = function () {\n if (typeof navigator !== 'object') {\n return false;\n }\n var userAgent = navigator.userAgent;\n if (typeof userAgent !== 'string') {\n return false;\n }\n return userAgent.indexOf('iPhone') !== -1 ||\n userAgent.indexOf('iPad') !== -1 ||\n userAgent.indexOf('iPod') !== -1;\n };\n\n $.extend( $, /** @lends OpenSeadragon */{\n /**\n * The default values for the optional settings documented at {@link OpenSeadragon.Options}.\n * @static\n * @type {Object}\n */\n DEFAULT_SETTINGS: {\n //DATA SOURCE DETAILS\n xmlPath: null,\n tileSources: null,\n tileHost: null,\n initialPage: 0,\n crossOriginPolicy: false,\n ajaxWithCredentials: false,\n loadTilesWithAjax: false,\n ajaxHeaders: {},\n\n //PAN AND ZOOM SETTINGS AND CONSTRAINTS\n panHorizontal: true,\n panVertical: true,\n constrainDuringPan: false,\n wrapHorizontal: false,\n wrapVertical: false,\n visibilityRatio: 0.5, //-> how much of the viewer can be negative space\n minPixelRatio: 0.5, //->closer to 0 draws tiles meant for a higher zoom at this zoom\n defaultZoomLevel: 0,\n minZoomLevel: null,\n maxZoomLevel: null,\n homeFillsViewer: false,\n\n //UI RESPONSIVENESS AND FEEL\n clickTimeThreshold: 300,\n clickDistThreshold: 5,\n dblClickTimeThreshold: 300,\n dblClickDistThreshold: 20,\n springStiffness: 6.5,\n animationTime: 1.2,\n gestureSettingsMouse: {\n scrollToZoom: true,\n clickToZoom: true,\n dblClickToZoom: false,\n pinchToZoom: false,\n zoomToRefPoint: true,\n flickEnabled: false,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n gestureSettingsTouch: {\n scrollToZoom: false,\n clickToZoom: false,\n dblClickToZoom: true,\n pinchToZoom: true,\n zoomToRefPoint: true,\n flickEnabled: true,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n gestureSettingsPen: {\n scrollToZoom: false,\n clickToZoom: true,\n dblClickToZoom: false,\n pinchToZoom: false,\n zoomToRefPoint: true,\n flickEnabled: false,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n gestureSettingsUnknown: {\n scrollToZoom: false,\n clickToZoom: false,\n dblClickToZoom: true,\n pinchToZoom: true,\n zoomToRefPoint: true,\n flickEnabled: true,\n flickMinSpeed: 120,\n flickMomentum: 0.25,\n pinchRotate: false\n },\n zoomPerClick: 2,\n zoomPerScroll: 1.2,\n zoomPerSecond: 1.0,\n blendTime: 0,\n alwaysBlend: false,\n autoHideControls: true,\n immediateRender: false,\n minZoomImageRatio: 0.9, //-> closer to 0 allows zoom out to infinity\n maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels\n smoothTileEdgesMinZoom: 1.1, //-> higher than maxZoomPixelRatio disables it\n iOSDevice: isIOSDevice(),\n pixelsPerWheelLine: 40,\n pixelsPerArrowPress: 40,\n autoResize: true,\n preserveImageSizeOnResize: false, // requires autoResize=true\n minScrollDeltaTime: 50,\n rotationIncrement: 90,\n\n //DEFAULT CONTROL SETTINGS\n showSequenceControl: true, //SEQUENCE\n sequenceControlAnchor: null, //SEQUENCE\n preserveViewport: false, //SEQUENCE\n preserveOverlays: false, //SEQUENCE\n navPrevNextWrap: false, //SEQUENCE\n showNavigationControl: true, //ZOOM/HOME/FULL/ROTATION\n navigationControlAnchor: null, //ZOOM/HOME/FULL/ROTATION\n showZoomControl: true, //ZOOM\n showHomeControl: true, //HOME\n showFullPageControl: true, //FULL\n showRotationControl: false, //ROTATION\n showFlipControl: false, //FLIP\n controlsFadeDelay: 2000, //ZOOM/HOME/FULL/SEQUENCE\n controlsFadeLength: 1500, //ZOOM/HOME/FULL/SEQUENCE\n mouseNavEnabled: true, //GENERAL MOUSE INTERACTIVITY\n\n //VIEWPORT NAVIGATOR SETTINGS\n showNavigator: false,\n navigatorId: null,\n navigatorPosition: null,\n navigatorSizeRatio: 0.2,\n navigatorMaintainSizeRatio: false,\n navigatorTop: null,\n navigatorLeft: null,\n navigatorHeight: null,\n navigatorWidth: null,\n navigatorAutoResize: true,\n navigatorAutoFade: true,\n navigatorRotate: true,\n navigatorBackground: '#000',\n navigatorOpacity: 0.8,\n navigatorBorderColor: '#555',\n navigatorDisplayRegionColor: '#900',\n\n // INITIAL ROTATION\n degrees: 0,\n\n // INITIAL FLIP STATE\n flipped: false,\n\n // APPEARANCE\n opacity: 1,\n preload: false,\n compositeOperation: null,\n imageSmoothingEnabled: true,\n placeholderFillStyle: null,\n\n //REFERENCE STRIP SETTINGS\n showReferenceStrip: false,\n referenceStripScroll: 'horizontal',\n referenceStripElement: null,\n referenceStripHeight: null,\n referenceStripWidth: null,\n referenceStripPosition: 'BOTTOM_LEFT',\n referenceStripSizeRatio: 0.2,\n\n //COLLECTION VISUALIZATION SETTINGS\n collectionRows: 3, //or columns depending on layout\n collectionColumns: 0, //columns in horizontal layout, rows in vertical layout\n collectionLayout: 'horizontal', //vertical\n collectionMode: false,\n collectionTileSize: 800,\n collectionTileMargin: 80,\n\n //PERFORMANCE SETTINGS\n imageLoaderLimit: 0,\n maxImageCacheCount: 200,\n timeout: 30000,\n useCanvas: true, // Use canvas element for drawing if available\n\n //INTERFACE RESOURCE SETTINGS\n prefixUrl: \"/images/\",\n navImages: {\n zoomIn: {\n REST: 'zoomin_rest.png',\n GROUP: 'zoomin_grouphover.png',\n HOVER: 'zoomin_hover.png',\n DOWN: 'zoomin_pressed.png'\n },\n zoomOut: {\n REST: 'zoomout_rest.png',\n GROUP: 'zoomout_grouphover.png',\n HOVER: 'zoomout_hover.png',\n DOWN: 'zoomout_pressed.png'\n },\n home: {\n REST: 'home_rest.png',\n GROUP: 'home_grouphover.png',\n HOVER: 'home_hover.png',\n DOWN: 'home_pressed.png'\n },\n fullpage: {\n REST: 'fullpage_rest.png',\n GROUP: 'fullpage_grouphover.png',\n HOVER: 'fullpage_hover.png',\n DOWN: 'fullpage_pressed.png'\n },\n rotateleft: {\n REST: 'rotateleft_rest.png',\n GROUP: 'rotateleft_grouphover.png',\n HOVER: 'rotateleft_hover.png',\n DOWN: 'rotateleft_pressed.png'\n },\n rotateright: {\n REST: 'rotateright_rest.png',\n GROUP: 'rotateright_grouphover.png',\n HOVER: 'rotateright_hover.png',\n DOWN: 'rotateright_pressed.png'\n },\n flip: { // Flip icon designed by Yaroslav Samoylov from the Noun Project and modified by Nelson Campos ncampos@criteriamarathon.com, https://thenounproject.com/term/flip/136289/\n REST: 'flip_rest.png',\n GROUP: 'flip_grouphover.png',\n HOVER: 'flip_hover.png',\n DOWN: 'flip_pressed.png'\n },\n previous: {\n REST: 'previous_rest.png',\n GROUP: 'previous_grouphover.png',\n HOVER: 'previous_hover.png',\n DOWN: 'previous_pressed.png'\n },\n next: {\n REST: 'next_rest.png',\n GROUP: 'next_grouphover.png',\n HOVER: 'next_hover.png',\n DOWN: 'next_pressed.png'\n }\n },\n\n //DEVELOPER SETTINGS\n debugMode: false,\n debugGridColor: ['#437AB2', '#1B9E77', '#D95F02', '#7570B3', '#E7298A', '#66A61E', '#E6AB02', '#A6761D', '#666666']\n },\n\n\n /**\n * TODO: get rid of this. I can't see how it's required at all. Looks\n * like an early legacy code artifact.\n * @static\n * @ignore\n */\n SIGNAL: \"----seadragon----\",\n\n\n /**\n * Returns a function which invokes the method as if it were a method belonging to the object.\n * @function\n * @param {Object} object\n * @param {Function} method\n * @returns {Function}\n */\n delegate: function( object, method ) {\n return function(){\n var args = arguments;\n if ( args === undefined ){\n args = [];\n }\n return method.apply( object, args );\n };\n },\n\n\n /**\n * An enumeration of Browser vendors.\n * @static\n * @type {Object}\n * @property {Number} UNKNOWN\n * @property {Number} IE\n * @property {Number} FIREFOX\n * @property {Number} SAFARI\n * @property {Number} CHROME\n * @property {Number} OPERA\n */\n BROWSERS: {\n UNKNOWN: 0,\n IE: 1,\n FIREFOX: 2,\n SAFARI: 3,\n CHROME: 4,\n OPERA: 5\n },\n\n\n /**\n * Returns a DOM Element for the given id or element.\n * @function\n * @param {String|Element} element Accepts an id or element.\n * @returns {Element} The element with the given id, null, or the element itself.\n */\n getElement: function( element ) {\n if ( typeof ( element ) == \"string\" ) {\n element = document.getElementById( element );\n }\n return element;\n },\n\n\n /**\n * Determines the position of the upper-left corner of the element.\n * @function\n * @param {Element|String} element - the element we want the position for.\n * @returns {OpenSeadragon.Point} - the position of the upper left corner of the element.\n */\n getElementPosition: function( element ) {\n var result = new $.Point(),\n isFixed,\n offsetParent;\n\n element = $.getElement( element );\n isFixed = $.getElementStyle( element ).position == \"fixed\";\n offsetParent = getOffsetParent( element, isFixed );\n\n while ( offsetParent ) {\n\n result.x += element.offsetLeft;\n result.y += element.offsetTop;\n\n if ( isFixed ) {\n result = result.plus( $.getPageScroll() );\n }\n\n element = offsetParent;\n isFixed = $.getElementStyle( element ).position == \"fixed\";\n offsetParent = getOffsetParent( element, isFixed );\n }\n\n return result;\n },\n\n\n /**\n * Determines the position of the upper-left corner of the element adjusted for current page and/or element scroll.\n * @function\n * @param {Element|String} element - the element we want the position for.\n * @returns {OpenSeadragon.Point} - the position of the upper left corner of the element adjusted for current page and/or element scroll.\n */\n getElementOffset: function( element ) {\n element = $.getElement( element );\n\n var doc = element && element.ownerDocument,\n docElement,\n win,\n boundingRect = { top: 0, left: 0 };\n\n if ( !doc ) {\n return new $.Point();\n }\n\n docElement = doc.documentElement;\n\n if ( typeof element.getBoundingClientRect !== typeof undefined ) {\n boundingRect = element.getBoundingClientRect();\n }\n\n win = ( doc == doc.window ) ?\n doc :\n ( doc.nodeType === 9 ) ?\n doc.defaultView || doc.parentWindow :\n false;\n\n return new $.Point(\n boundingRect.left + ( win.pageXOffset || docElement.scrollLeft ) - ( docElement.clientLeft || 0 ),\n boundingRect.top + ( win.pageYOffset || docElement.scrollTop ) - ( docElement.clientTop || 0 )\n );\n },\n\n\n /**\n * Determines the height and width of the given element.\n * @function\n * @param {Element|String} element\n * @returns {OpenSeadragon.Point}\n */\n getElementSize: function( element ) {\n element = $.getElement( element );\n\n return new $.Point(\n element.clientWidth,\n element.clientHeight\n );\n },\n\n\n /**\n * Returns the CSSStyle object for the given element.\n * @function\n * @param {Element|String} element\n * @returns {CSSStyle}\n */\n getElementStyle:\n document.documentElement.currentStyle ?\n function( element ) {\n element = $.getElement( element );\n return element.currentStyle;\n } :\n function( element ) {\n element = $.getElement( element );\n return window.getComputedStyle( element, \"\" );\n },\n\n /**\n * Returns the property with the correct vendor prefix appended.\n * @param {String} property the property name\n * @returns {String} the property with the correct prefix or null if not\n * supported.\n */\n getCssPropertyWithVendorPrefix: function(property) {\n var memo = {};\n\n $.getCssPropertyWithVendorPrefix = function(property) {\n if (memo[property] !== undefined) {\n return memo[property];\n }\n var style = document.createElement('div').style;\n var result = null;\n if (style[property] !== undefined) {\n result = property;\n } else {\n var prefixes = ['Webkit', 'Moz', 'MS', 'O',\n 'webkit', 'moz', 'ms', 'o'];\n var suffix = $.capitalizeFirstLetter(property);\n for (var i = 0; i < prefixes.length; i++) {\n var prop = prefixes[i] + suffix;\n if (style[prop] !== undefined) {\n result = prop;\n break;\n }\n }\n }\n memo[property] = result;\n return result;\n };\n return $.getCssPropertyWithVendorPrefix(property);\n },\n\n /**\n * Capitalizes the first letter of a string\n * @param {String} string\n * @returns {String} The string with the first letter capitalized\n */\n capitalizeFirstLetter: function(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n },\n\n /**\n * Compute the modulo of a number but makes sure to always return\n * a positive value.\n * @param {Number} number the number to computes the modulo of\n * @param {Number} modulo the modulo\n * @returns {Number} the result of the modulo of number\n */\n positiveModulo: function(number, modulo) {\n var result = number % modulo;\n if (result < 0) {\n result += modulo;\n }\n return result;\n },\n\n /**\n * Determines if a point is within the bounding rectangle of the given element (hit-test).\n * @function\n * @param {Element|String} element\n * @param {OpenSeadragon.Point} point\n * @returns {Boolean}\n */\n pointInElement: function( element, point ) {\n element = $.getElement( element );\n var offset = $.getElementOffset( element ),\n size = $.getElementSize( element );\n return point.x >= offset.x && point.x < offset.x + size.x && point.y < offset.y + size.y && point.y >= offset.y;\n },\n\n\n /**\n * Gets the latest event, really only useful internally since its\n * specific to IE behavior.\n * @function\n * @param {Event} [event]\n * @returns {Event}\n * @deprecated For internal use only\n * @private\n */\n getEvent: function( event ) {\n if( event ){\n $.getEvent = function( event ) {\n return event;\n };\n } else {\n $.getEvent = function() {\n return window.event;\n };\n }\n return $.getEvent( event );\n },\n\n\n /**\n * Gets the position of the mouse on the screen for a given event.\n * @function\n * @param {Event} [event]\n * @returns {OpenSeadragon.Point}\n */\n getMousePosition: function( event ) {\n\n if ( typeof ( event.pageX ) == \"number\" ) {\n $.getMousePosition = function( event ){\n var result = new $.Point();\n\n event = $.getEvent( event );\n result.x = event.pageX;\n result.y = event.pageY;\n\n return result;\n };\n } else if ( typeof ( event.clientX ) == \"number\" ) {\n $.getMousePosition = function( event ){\n var result = new $.Point();\n\n event = $.getEvent( event );\n result.x =\n event.clientX +\n document.body.scrollLeft +\n document.documentElement.scrollLeft;\n result.y =\n event.clientY +\n document.body.scrollTop +\n document.documentElement.scrollTop;\n\n return result;\n };\n } else {\n throw new Error(\n \"Unknown event mouse position, no known technique.\"\n );\n }\n\n return $.getMousePosition( event );\n },\n\n\n /**\n * Determines the page's current scroll position.\n * @function\n * @returns {OpenSeadragon.Point}\n */\n getPageScroll: function() {\n var docElement = document.documentElement || {},\n body = document.body || {};\n\n if ( typeof ( window.pageXOffset ) == \"number\" ) {\n $.getPageScroll = function(){\n return new $.Point(\n window.pageXOffset,\n window.pageYOffset\n );\n };\n } else if ( body.scrollLeft || body.scrollTop ) {\n $.getPageScroll = function(){\n return new $.Point(\n document.body.scrollLeft,\n document.body.scrollTop\n );\n };\n } else if ( docElement.scrollLeft || docElement.scrollTop ) {\n $.getPageScroll = function(){\n return new $.Point(\n document.documentElement.scrollLeft,\n document.documentElement.scrollTop\n );\n };\n } else {\n // We can't reassign the function yet, as there was no scroll.\n return new $.Point(0, 0);\n }\n\n return $.getPageScroll();\n },\n\n /**\n * Set the page scroll position.\n * @function\n * @returns {OpenSeadragon.Point}\n */\n setPageScroll: function( scroll ) {\n if ( typeof ( window.scrollTo ) !== \"undefined\" ) {\n $.setPageScroll = function( scroll ) {\n window.scrollTo( scroll.x, scroll.y );\n };\n } else {\n var originalScroll = $.getPageScroll();\n if ( originalScroll.x === scroll.x &&\n originalScroll.y === scroll.y ) {\n // We are already correctly positioned and there\n // is no way to detect the correct method.\n return;\n }\n\n document.body.scrollLeft = scroll.x;\n document.body.scrollTop = scroll.y;\n var currentScroll = $.getPageScroll();\n if ( currentScroll.x !== originalScroll.x &&\n currentScroll.y !== originalScroll.y ) {\n $.setPageScroll = function( scroll ) {\n document.body.scrollLeft = scroll.x;\n document.body.scrollTop = scroll.y;\n };\n return;\n }\n\n document.documentElement.scrollLeft = scroll.x;\n document.documentElement.scrollTop = scroll.y;\n currentScroll = $.getPageScroll();\n if ( currentScroll.x !== originalScroll.x &&\n currentScroll.y !== originalScroll.y ) {\n $.setPageScroll = function( scroll ) {\n document.documentElement.scrollLeft = scroll.x;\n document.documentElement.scrollTop = scroll.y;\n };\n return;\n }\n\n // We can't find anything working, so we do nothing.\n $.setPageScroll = function( scroll ) {\n };\n }\n\n return $.setPageScroll( scroll );\n },\n\n /**\n * Determines the size of the browsers window.\n * @function\n * @returns {OpenSeadragon.Point}\n */\n getWindowSize: function() {\n var docElement = document.documentElement || {},\n body = document.body || {};\n\n if ( typeof ( window.innerWidth ) == 'number' ) {\n $.getWindowSize = function(){\n return new $.Point(\n window.innerWidth,\n window.innerHeight\n );\n };\n } else if ( docElement.clientWidth || docElement.clientHeight ) {\n $.getWindowSize = function(){\n return new $.Point(\n document.documentElement.clientWidth,\n document.documentElement.clientHeight\n );\n };\n } else if ( body.clientWidth || body.clientHeight ) {\n $.getWindowSize = function(){\n return new $.Point(\n document.body.clientWidth,\n document.body.clientHeight\n );\n };\n } else {\n throw new Error(\"Unknown window size, no known technique.\");\n }\n\n return $.getWindowSize();\n },\n\n\n /**\n * Wraps the given element in a nest of divs so that the element can\n * be easily centered using CSS tables\n * @function\n * @param {Element|String} element\n * @returns {Element} outermost wrapper element\n */\n makeCenteredNode: function( element ) {\n // Convert a possible ID to an actual HTMLElement\n element = $.getElement( element );\n\n /*\n CSS tables require you to have a display:table/row/cell hierarchy so we need to create\n three nested wrapper divs:\n */\n\n var wrappers = [\n $.makeNeutralElement( 'div' ),\n $.makeNeutralElement( 'div' ),\n $.makeNeutralElement( 'div' )\n ];\n\n // It feels like we should be able to pass style dicts to makeNeutralElement:\n $.extend(wrappers[0].style, {\n display: \"table\",\n height: \"100%\",\n width: \"100%\"\n });\n\n $.extend(wrappers[1].style, {\n display: \"table-row\"\n });\n\n $.extend(wrappers[2].style, {\n display: \"table-cell\",\n verticalAlign: \"middle\",\n textAlign: \"center\"\n });\n\n wrappers[0].appendChild(wrappers[1]);\n wrappers[1].appendChild(wrappers[2]);\n wrappers[2].appendChild(element);\n\n return wrappers[0];\n },\n\n\n /**\n * Creates an easily positionable element of the given type that therefor\n * serves as an excellent container element.\n * @function\n * @param {String} tagName\n * @returns {Element}\n */\n makeNeutralElement: function( tagName ) {\n var element = document.createElement( tagName ),\n style = element.style;\n\n style.background = \"transparent none\";\n style.border = \"none\";\n style.margin = \"0px\";\n style.padding = \"0px\";\n style.position = \"static\";\n\n return element;\n },\n\n\n /**\n * Returns the current milliseconds, using Date.now() if available\n * @function\n */\n now: function( ) {\n if (Date.now) {\n $.now = Date.now;\n } else {\n $.now = function() {\n return new Date().getTime();\n };\n }\n\n return $.now();\n },\n\n\n /**\n * Ensures an image is loaded correctly to support alpha transparency.\n * Generally only IE has issues doing this correctly for formats like\n * png.\n * @function\n * @param {String} src\n * @returns {Element}\n */\n makeTransparentImage: function( src ) {\n\n $.makeTransparentImage = function( src ){\n var img = $.makeNeutralElement( \"img\" );\n\n img.src = src;\n\n return img;\n };\n\n if ( $.Browser.vendor == $.BROWSERS.IE && $.Browser.version < 7 ) {\n\n $.makeTransparentImage = function( src ){\n var img = $.makeNeutralElement( \"img\" ),\n element = null;\n\n element = $.makeNeutralElement(\"span\");\n element.style.display = \"inline-block\";\n\n img.onload = function() {\n element.style.width = element.style.width || img.width + \"px\";\n element.style.height = element.style.height || img.height + \"px\";\n\n img.onload = null;\n img = null; // to prevent memory leaks in IE\n };\n\n img.src = src;\n element.style.filter =\n \"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='\" +\n src +\n \"', sizingMethod='scale')\";\n\n return element;\n };\n\n }\n\n return $.makeTransparentImage( src );\n },\n\n\n /**\n * Sets the opacity of the specified element.\n * @function\n * @param {Element|String} element\n * @param {Number} opacity\n * @param {Boolean} [usesAlpha]\n */\n setElementOpacity: function( element, opacity, usesAlpha ) {\n\n var ieOpacity,\n ieFilter;\n\n element = $.getElement( element );\n\n if ( usesAlpha && !$.Browser.alpha ) {\n opacity = Math.round( opacity );\n }\n\n if ( $.Browser.opacity ) {\n element.style.opacity = opacity < 1 ? opacity : \"\";\n } else {\n if ( opacity < 1 ) {\n ieOpacity = Math.round( 100 * opacity );\n ieFilter = \"alpha(opacity=\" + ieOpacity + \")\";\n element.style.filter = ieFilter;\n } else {\n element.style.filter = \"\";\n }\n }\n },\n\n\n /**\n * Sets the specified element's touch-action style attribute to 'none'.\n * @function\n * @param {Element|String} element\n */\n setElementTouchActionNone: function( element ) {\n element = $.getElement( element );\n if ( typeof element.style.touchAction !== 'undefined' ) {\n element.style.touchAction = 'none';\n } else if ( typeof element.style.msTouchAction !== 'undefined' ) {\n element.style.msTouchAction = 'none';\n }\n },\n\n\n /**\n * Add the specified CSS class to the element if not present.\n * @function\n * @param {Element|String} element\n * @param {String} className\n */\n addClass: function( element, className ) {\n element = $.getElement( element );\n\n if (!element.className) {\n element.className = className;\n } else if ( ( ' ' + element.className + ' ' ).\n indexOf( ' ' + className + ' ' ) === -1 ) {\n element.className += ' ' + className;\n }\n },\n\n /**\n * Find the first index at which an element is found in an array or -1\n * if not present.\n *\n * Code taken and adapted from\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf#Compatibility\n *\n * @function\n * @param {Array} array The array from which to find the element\n * @param {Object} searchElement The element to find\n * @param {Number} [fromIndex=0] Index to start research.\n * @returns {Number} The index of the element in the array.\n */\n indexOf: function( array, searchElement, fromIndex ) {\n if ( Array.prototype.indexOf ) {\n this.indexOf = function( array, searchElement, fromIndex ) {\n return array.indexOf( searchElement, fromIndex );\n };\n } else {\n this.indexOf = function( array, searchElement, fromIndex ) {\n var i,\n pivot = ( fromIndex ) ? fromIndex : 0,\n length;\n if ( !array ) {\n throw new TypeError( );\n }\n\n length = array.length;\n if ( length === 0 || pivot >= length ) {\n return -1;\n }\n\n if ( pivot < 0 ) {\n pivot = length - Math.abs( pivot );\n }\n\n for ( i = pivot; i < length; i++ ) {\n if ( array[i] === searchElement ) {\n return i;\n }\n }\n return -1;\n };\n }\n return this.indexOf( array, searchElement, fromIndex );\n },\n\n /**\n * Remove the specified CSS class from the element.\n * @function\n * @param {Element|String} element\n * @param {String} className\n */\n removeClass: function( element, className ) {\n var oldClasses,\n newClasses = [],\n i;\n\n element = $.getElement( element );\n oldClasses = element.className.split( /\\s+/ );\n for ( i = 0; i < oldClasses.length; i++ ) {\n if ( oldClasses[ i ] && oldClasses[ i ] !== className ) {\n newClasses.push( oldClasses[ i ] );\n }\n }\n element.className = newClasses.join(' ');\n },\n\n\n /**\n * Adds an event listener for the given element, eventName and handler.\n * @function\n * @param {Element|String} element\n * @param {String} eventName\n * @param {Function} handler\n * @param {Boolean} [useCapture]\n */\n addEvent: (function () {\n if ( window.addEventListener ) {\n return function ( element, eventName, handler, useCapture ) {\n element = $.getElement( element );\n element.addEventListener( eventName, handler, useCapture );\n };\n } else if ( window.attachEvent ) {\n return function ( element, eventName, handler, useCapture ) {\n element = $.getElement( element );\n element.attachEvent( 'on' + eventName, handler );\n };\n } else {\n throw new Error( \"No known event model.\" );\n }\n }()),\n\n\n /**\n * Remove a given event listener for the given element, event type and\n * handler.\n * @function\n * @param {Element|String} element\n * @param {String} eventName\n * @param {Function} handler\n * @param {Boolean} [useCapture]\n */\n removeEvent: (function () {\n if ( window.removeEventListener ) {\n return function ( element, eventName, handler, useCapture ) {\n element = $.getElement( element );\n element.removeEventListener( eventName, handler, useCapture );\n };\n } else if ( window.detachEvent ) {\n return function( element, eventName, handler, useCapture ) {\n element = $.getElement( element );\n element.detachEvent( 'on' + eventName, handler );\n };\n } else {\n throw new Error( \"No known event model.\" );\n }\n }()),\n\n\n /**\n * Cancels the default browser behavior had the event propagated all\n * the way up the DOM to the window object.\n * @function\n * @param {Event} [event]\n */\n cancelEvent: function( event ) {\n event = $.getEvent( event );\n\n if ( event.preventDefault ) {\n $.cancelEvent = function( event ){\n // W3C for preventing default\n event.preventDefault();\n };\n } else {\n $.cancelEvent = function( event ){\n event = $.getEvent( event );\n // legacy for preventing default\n event.cancel = true;\n // IE for preventing default\n event.returnValue = false;\n };\n }\n $.cancelEvent( event );\n },\n\n\n /**\n * Stops the propagation of the event up the DOM.\n * @function\n * @param {Event} [event]\n */\n stopEvent: function( event ) {\n event = $.getEvent( event );\n\n if ( event.stopPropagation ) {\n // W3C for stopping propagation\n $.stopEvent = function( event ){\n event.stopPropagation();\n };\n } else {\n // IE for stopping propagation\n $.stopEvent = function( event ){\n event = $.getEvent( event );\n event.cancelBubble = true;\n };\n\n }\n\n $.stopEvent( event );\n },\n\n\n /**\n * Similar to OpenSeadragon.delegate, but it does not immediately call\n * the method on the object, returning a function which can be called\n * repeatedly to delegate the method. It also allows additional arguments\n * to be passed during construction which will be added during each\n * invocation, and each invocation can add additional arguments as well.\n *\n * @function\n * @param {Object} object\n * @param {Function} method\n * @param [args] any additional arguments are passed as arguments to the\n * created callback\n * @returns {Function}\n */\n createCallback: function( object, method ) {\n //TODO: This pattern is painful to use and debug. It's much cleaner\n // to use pinning plus anonymous functions. Get rid of this\n // pattern!\n var initialArgs = [],\n i;\n for ( i = 2; i < arguments.length; i++ ) {\n initialArgs.push( arguments[ i ] );\n }\n\n return function() {\n var args = initialArgs.concat( [] ),\n i;\n for ( i = 0; i < arguments.length; i++ ) {\n args.push( arguments[ i ] );\n }\n\n return method.apply( object, args );\n };\n },\n\n\n /**\n * Retrieves the value of a url parameter from the window.location string.\n * @function\n * @param {String} key\n * @returns {String} The value of the url parameter or null if no param matches.\n */\n getUrlParameter: function( key ) {\n // eslint-disable-next-line no-use-before-define\n var value = URLPARAMS[ key ];\n return value ? value : null;\n },\n\n /**\n * Retrieves the protocol used by the url. The url can either be absolute\n * or relative.\n * @function\n * @private\n * @param {String} url The url to retrieve the protocol from.\n * @return {String} The protocol (http:, https:, file:, ftp: ...)\n */\n getUrlProtocol: function( url ) {\n var match = url.match(/^([a-z]+:)\\/\\//i);\n if ( match === null ) {\n // Relative URL, retrive the protocol from window.location\n return window.location.protocol;\n }\n return match[1].toLowerCase();\n },\n\n /**\n * Create an XHR object\n * @private\n * @param {type} [local] If set to true, the XHR will be file: protocol\n * compatible if possible (but may raise a warning in the browser).\n * @returns {XMLHttpRequest}\n */\n createAjaxRequest: function( local ) {\n // IE11 does not support window.ActiveXObject so we just try to\n // create one to see if it is supported.\n // See: http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx\n var supportActiveX;\n try {\n /* global ActiveXObject:true */\n supportActiveX = !!new ActiveXObject( \"Microsoft.XMLHTTP\" );\n } catch( e ) {\n supportActiveX = false;\n }\n\n if ( supportActiveX ) {\n if ( window.XMLHttpRequest ) {\n $.createAjaxRequest = function( local ) {\n if ( local ) {\n return new ActiveXObject( \"Microsoft.XMLHTTP\" );\n }\n return new XMLHttpRequest();\n };\n } else {\n $.createAjaxRequest = function() {\n return new ActiveXObject( \"Microsoft.XMLHTTP\" );\n };\n }\n } else if ( window.XMLHttpRequest ) {\n $.createAjaxRequest = function() {\n return new XMLHttpRequest();\n };\n } else {\n throw new Error( \"Browser doesn't support XMLHttpRequest.\" );\n }\n return $.createAjaxRequest( local );\n },\n\n /**\n * Makes an AJAX request.\n * @param {Object} options\n * @param {String} options.url - the url to request\n * @param {Function} options.success - a function to call on a successful response\n * @param {Function} options.error - a function to call on when an error occurs\n * @param {Object} options.headers - headers to add to the AJAX request\n * @param {String} options.responseType - the response type of the the AJAX request\n * @param {Boolean} [options.withCredentials=false] - whether to set the XHR's withCredentials\n * @throws {Error}\n * @returns {XMLHttpRequest}\n */\n makeAjaxRequest: function( url, onSuccess, onError ) {\n var withCredentials;\n var headers;\n var responseType;\n\n // Note that our preferred API is that you pass in a single object; the named\n // arguments are for legacy support.\n if( $.isPlainObject( url ) ){\n onSuccess = url.success;\n onError = url.error;\n withCredentials = url.withCredentials;\n headers = url.headers;\n responseType = url.responseType || null;\n url = url.url;\n }\n\n var protocol = $.getUrlProtocol( url );\n var request = $.createAjaxRequest( protocol === \"file:\" );\n\n if ( !$.isFunction( onSuccess ) ) {\n throw new Error( \"makeAjaxRequest requires a success callback\" );\n }\n\n request.onreadystatechange = function() {\n // 4 = DONE (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#Properties)\n if ( request.readyState == 4 ) {\n request.onreadystatechange = function(){};\n\n // With protocols other than http/https, a successful request status is in\n // the 200's on Firefox and 0 on other browsers\n if ( (request.status >= 200 && request.status < 300) ||\n ( request.status === 0 &&\n protocol !== \"http:\" &&\n protocol !== \"https:\" )) {\n onSuccess( request );\n } else {\n $.console.log( \"AJAX request returned %d: %s\", request.status, url );\n\n if ( $.isFunction( onError ) ) {\n onError( request );\n }\n }\n }\n };\n\n try {\n request.open( \"GET\", url, true );\n\n if (responseType) {\n request.responseType = responseType;\n }\n\n if (headers) {\n for (var headerName in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, headerName) && headers[headerName]) {\n request.setRequestHeader(headerName, headers[headerName]);\n }\n }\n }\n\n if (withCredentials) {\n request.withCredentials = true;\n }\n\n request.send(null);\n } catch (e) {\n var msg = e.message;\n\n /*\n IE < 10 does not support CORS and an XHR request to a different origin will fail as soon\n as send() is called. This is particularly easy to miss during development and appear in\n production if you use a CDN or domain sharding and the security policy is likely to break\n exception handlers since any attempt to access a property of the request object will\n raise an access denied TypeError inside the catch block.\n\n To be friendlier, we'll check for this specific error and add a documentation pointer\n to point developers in the right direction. We test the exception number because IE's\n error messages are localized.\n */\n var oldIE = $.Browser.vendor == $.BROWSERS.IE && $.Browser.version < 10;\n if ( oldIE && typeof ( e.number ) != \"undefined\" && e.number == -2147024891 ) {\n msg += \"\\nSee http://msdn.microsoft.com/en-us/library/ms537505(v=vs.85).aspx#xdomain\";\n }\n\n $.console.log( \"%s while making AJAX request: %s\", e.name, msg );\n\n request.onreadystatechange = function(){};\n\n if (window.XDomainRequest) { // IE9 or IE8 might as well try to use XDomainRequest\n var xdr = new window.XDomainRequest();\n if (xdr) {\n xdr.onload = function (e) {\n if ( $.isFunction( onSuccess ) ) {\n onSuccess({ // Faking an xhr object\n responseText: xdr.responseText,\n status: 200, // XDomainRequest doesn't support status codes, so we just fake one! :/\n statusText: 'OK'\n });\n }\n };\n xdr.onerror = function (e) {\n if ($.isFunction(onError)) {\n onError({ // Faking an xhr object\n responseText: xdr.responseText,\n status: 444, // 444 No Response\n statusText: 'An error happened. Due to an XDomainRequest deficiency we can not extract any information about this error. Upgrade your browser.'\n });\n }\n };\n try {\n xdr.open('GET', url);\n xdr.send();\n } catch (e2) {\n if ( $.isFunction( onError ) ) {\n onError( request, e );\n }\n }\n }\n } else {\n if ( $.isFunction( onError ) ) {\n onError( request, e );\n }\n }\n }\n\n return request;\n },\n\n /**\n * Taken from jQuery 1.6.1\n * @function\n * @param {Object} options\n * @param {String} options.url\n * @param {Function} options.callback\n * @param {String} [options.param='callback'] The name of the url parameter\n * to request the jsonp provider with.\n * @param {String} [options.callbackName=] The name of the callback to\n * request the jsonp provider with.\n */\n jsonp: function( options ){\n var script,\n url = options.url,\n head = document.head ||\n document.getElementsByTagName( \"head\" )[ 0 ] ||\n document.documentElement,\n jsonpCallback = options.callbackName || 'openseadragon' + $.now(),\n previous = window[ jsonpCallback ],\n replace = \"$1\" + jsonpCallback + \"$2\",\n callbackParam = options.param || 'callback',\n callback = options.callback;\n\n url = url.replace( /(\\=)\\?(&|$)|\\?\\?/i, replace );\n // Add callback manually\n url += (/\\?/.test( url ) ? \"&\" : \"?\") + callbackParam + \"=\" + jsonpCallback;\n\n // Install callback\n window[ jsonpCallback ] = function( response ) {\n if ( !previous ){\n try{\n delete window[ jsonpCallback ];\n }catch(e){\n //swallow\n }\n } else {\n window[ jsonpCallback ] = previous;\n }\n if( callback && $.isFunction( callback ) ){\n callback( response );\n }\n };\n\n script = document.createElement( \"script\" );\n\n //TODO: having an issue with async info requests\n if( undefined !== options.async || false !== options.async ){\n script.async = \"async\";\n }\n\n if ( options.scriptCharset ) {\n script.charset = options.scriptCharset;\n }\n\n script.src = url;\n\n // Attach handlers for all browsers\n script.onload = script.onreadystatechange = function( _, isAbort ) {\n\n if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n // Handle memory leak in IE\n script.onload = script.onreadystatechange = null;\n\n // Remove the script\n if ( head && script.parentNode ) {\n head.removeChild( script );\n }\n\n // Dereference the script\n script = undefined;\n }\n };\n // Use insertBefore instead of appendChild to circumvent an IE6 bug.\n // This arises when a base node is used (#2709 and #4378).\n head.insertBefore( script, head.firstChild );\n\n },\n\n\n /**\n * Fully deprecated. Will throw an error.\n * @function\n * @deprecated use {@link OpenSeadragon.Viewer#open}\n */\n createFromDZI: function() {\n throw \"OpenSeadragon.createFromDZI is deprecated, use Viewer.open.\";\n },\n\n /**\n * Parses an XML string into a DOM Document.\n * @function\n * @param {String} string\n * @returns {Document}\n */\n parseXml: function( string ) {\n if ( window.DOMParser ) {\n\n $.parseXml = function( string ) {\n var xmlDoc = null,\n parser;\n\n parser = new DOMParser();\n xmlDoc = parser.parseFromString( string, \"text/xml\" );\n return xmlDoc;\n };\n\n } else if ( window.ActiveXObject ) {\n\n $.parseXml = function( string ) {\n var xmlDoc = null;\n\n xmlDoc = new ActiveXObject( \"Microsoft.XMLDOM\" );\n xmlDoc.async = false;\n xmlDoc.loadXML( string );\n return xmlDoc;\n };\n\n } else {\n throw new Error( \"Browser doesn't support XML DOM.\" );\n }\n\n return $.parseXml( string );\n },\n\n /**\n * Parses a JSON string into a Javascript object.\n * @function\n * @param {String} string\n * @returns {Object}\n */\n parseJSON: function(string) {\n if (window.JSON && window.JSON.parse) {\n $.parseJSON = window.JSON.parse;\n } else {\n // Should only be used by IE8 in non standards mode\n $.parseJSON = function(string) {\n /*jshint evil:true*/\n //eslint-disable-next-line no-eval\n return eval('(' + string + ')');\n };\n }\n return $.parseJSON(string);\n },\n\n /**\n * Reports whether the image format is supported for tiling in this\n * version.\n * @function\n * @param {String} [extension]\n * @returns {Boolean}\n */\n imageFormatSupported: function( extension ) {\n extension = extension ? extension : \"\";\n // eslint-disable-next-line no-use-before-define\n return !!FILEFORMATS[ extension.toLowerCase() ];\n }\n\n });\n\n\n //TODO: $.console is often used inside a try/catch block which generally\n // prevents allowings errors to occur with detection until a debugger\n // is attached. Although I've been guilty of the same anti-pattern\n // I eventually was convinced that errors should naturally propagate in\n // all but the most special cases.\n /**\n * A convenient alias for console when available, and a simple null\n * function when console is unavailable.\n * @static\n * @private\n */\n var nullfunction = function( msg ){\n //document.location.hash = msg;\n };\n\n $.console = window.console || {\n log: nullfunction,\n debug: nullfunction,\n info: nullfunction,\n warn: nullfunction,\n error: nullfunction,\n assert: nullfunction\n };\n\n\n /**\n * The current browser vendor, version, and related information regarding detected features.\n * @member {Object} Browser\n * @memberof OpenSeadragon\n * @static\n * @type {Object}\n * @property {OpenSeadragon.BROWSERS} vendor - One of the {@link OpenSeadragon.BROWSERS} enumeration values.\n * @property {Number} version\n * @property {Boolean} alpha - Does the browser support image alpha transparency.\n */\n $.Browser = {\n vendor: $.BROWSERS.UNKNOWN,\n version: 0,\n alpha: true\n };\n\n\n var FILEFORMATS = {\n \"bmp\": false,\n \"jpeg\": true,\n \"jpg\": true,\n \"png\": true,\n \"tif\": false,\n \"wdp\": false\n },\n URLPARAMS = {};\n\n (function() {\n //A small auto-executing routine to determine the browser vendor,\n //version and supporting feature sets.\n var ver = navigator.appVersion,\n ua = navigator.userAgent,\n regex;\n\n //console.error( 'appName: ' + navigator.appName );\n //console.error( 'appVersion: ' + navigator.appVersion );\n //console.error( 'userAgent: ' + navigator.userAgent );\n\n switch( navigator.appName ){\n case \"Microsoft Internet Explorer\":\n if( !!window.attachEvent &&\n !!window.ActiveXObject ) {\n\n $.Browser.vendor = $.BROWSERS.IE;\n $.Browser.version = parseFloat(\n ua.substring(\n ua.indexOf( \"MSIE\" ) + 5,\n ua.indexOf( \";\", ua.indexOf( \"MSIE\" ) ) )\n );\n }\n break;\n case \"Netscape\":\n if (window.addEventListener) {\n if ( ua.indexOf( \"Firefox\" ) >= 0 ) {\n $.Browser.vendor = $.BROWSERS.FIREFOX;\n $.Browser.version = parseFloat(\n ua.substring( ua.indexOf( \"Firefox\" ) + 8 )\n );\n } else if ( ua.indexOf( \"Safari\" ) >= 0 ) {\n $.Browser.vendor = ua.indexOf( \"Chrome\" ) >= 0 ?\n $.BROWSERS.CHROME :\n $.BROWSERS.SAFARI;\n $.Browser.version = parseFloat(\n ua.substring(\n ua.substring( 0, ua.indexOf( \"Safari\" ) ).lastIndexOf( \"/\" ) + 1,\n ua.indexOf( \"Safari\" )\n )\n );\n } else {\n regex = new RegExp( \"Trident/.*rv:([0-9]{1,}[.0-9]{0,})\");\n if ( regex.exec( ua ) !== null ) {\n $.Browser.vendor = $.BROWSERS.IE;\n $.Browser.version = parseFloat( RegExp.$1 );\n }\n }\n }\n break;\n case \"Opera\":\n $.Browser.vendor = $.BROWSERS.OPERA;\n $.Browser.version = parseFloat( ver );\n break;\n }\n\n // ignore '?' portion of query string\n var query = window.location.search.substring( 1 ),\n parts = query.split('&'),\n part,\n sep,\n i;\n\n for ( i = 0; i < parts.length; i++ ) {\n part = parts[ i ];\n sep = part.indexOf( '=' );\n\n if ( sep > 0 ) {\n var key = part.substring( 0, sep ),\n value = part.substring( sep + 1 );\n try {\n URLPARAMS[ key ] = decodeURIComponent( value );\n } catch (e) {\n $.console.error( \"Ignoring malformed URL parameter: %s=%s\", key, value );\n }\n }\n }\n\n //determine if this browser supports image alpha transparency\n $.Browser.alpha = !(\n (\n $.Browser.vendor == $.BROWSERS.IE &&\n $.Browser.version < 9\n ) || (\n $.Browser.vendor == $.BROWSERS.CHROME &&\n $.Browser.version < 2\n )\n );\n\n //determine if this browser supports element.style.opacity\n $.Browser.opacity = !(\n $.Browser.vendor == $.BROWSERS.IE &&\n $.Browser.version < 9\n );\n\n })();\n\n\n // Adding support for HTML5's requestAnimationFrame as suggested by acdha.\n // Implementation taken from matt synder's post here:\n // http://mattsnider.com/cross-browser-and-legacy-supported-requestframeanimation/\n (function( w ) {\n\n // most browsers have an implementation\n var requestAnimationFrame = w.requestAnimationFrame ||\n w.mozRequestAnimationFrame ||\n w.webkitRequestAnimationFrame ||\n w.msRequestAnimationFrame;\n\n var cancelAnimationFrame = w.cancelAnimationFrame ||\n w.mozCancelAnimationFrame ||\n w.webkitCancelAnimationFrame ||\n w.msCancelAnimationFrame;\n\n // polyfill, when necessary\n if ( requestAnimationFrame && cancelAnimationFrame ) {\n // We can't assign these window methods directly to $ because they\n // expect their \"this\" to be \"window\", so we call them in wrappers.\n $.requestAnimationFrame = function(){\n return requestAnimationFrame.apply( w, arguments );\n };\n $.cancelAnimationFrame = function(){\n return cancelAnimationFrame.apply( w, arguments );\n };\n } else {\n var aAnimQueue = [],\n processing = [],\n iRequestId = 0,\n iIntervalId;\n\n // create a mock requestAnimationFrame function\n $.requestAnimationFrame = function( callback ) {\n aAnimQueue.push( [ ++iRequestId, callback ] );\n\n if ( !iIntervalId ) {\n iIntervalId = setInterval( function() {\n if ( aAnimQueue.length ) {\n var time = $.now();\n // Process all of the currently outstanding frame\n // requests, but none that get added during the\n // processing.\n // Swap the arrays so we don't have to create a new\n // array every frame.\n var temp = processing;\n processing = aAnimQueue;\n aAnimQueue = temp;\n while ( processing.length ) {\n processing.shift()[ 1 ]( time );\n }\n } else {\n // don't continue the interval, if unnecessary\n clearInterval( iIntervalId );\n iIntervalId = undefined;\n }\n }, 1000 / 50); // estimating support for 50 frames per second\n }\n\n return iRequestId;\n };\n\n // create a mock cancelAnimationFrame function\n $.cancelAnimationFrame = function( requestId ) {\n // find the request ID and remove it\n var i, j;\n for ( i = 0, j = aAnimQueue.length; i < j; i += 1 ) {\n if ( aAnimQueue[ i ][ 0 ] === requestId ) {\n aAnimQueue.splice( i, 1 );\n return;\n }\n }\n\n // If it's not in the queue, it may be in the set we're currently\n // processing (if cancelAnimationFrame is called from within a\n // requestAnimationFrame callback).\n for ( i = 0, j = processing.length; i < j; i += 1 ) {\n if ( processing[ i ][ 0 ] === requestId ) {\n processing.splice( i, 1 );\n return;\n }\n }\n };\n }\n })( window );\n\n /**\n * @private\n * @inner\n * @function\n * @param {Element} element\n * @param {Boolean} [isFixed]\n * @returns {Element}\n */\n function getOffsetParent( element, isFixed ) {\n if ( isFixed && element != document.body ) {\n return document.body;\n } else {\n return element.offsetParent;\n }\n }\n\n}(OpenSeadragon));\n\n\n// Universal Module Definition, supports CommonJS, AMD and simple script tag\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // expose as amd module\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // expose as commonjs module\n module.exports = factory();\n } else {\n // expose as window.OpenSeadragon\n root.OpenSeadragon = factory();\n }\n}(this, function () {\n return OpenSeadragon;\n}));\n\n/*\n * OpenSeadragon - full-screen support functions\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ) {\n /**\n * Determine native full screen support we can get from the browser.\n * @member fullScreenApi\n * @memberof OpenSeadragon\n * @type {object}\n * @property {Boolean} supportsFullScreen Return true if full screen API is supported.\n * @property {Function} isFullScreen Return true if currently in full screen mode.\n * @property {Function} getFullScreenElement Return the element currently in full screen mode.\n * @property {Function} requestFullScreen Make a request to go in full screen mode.\n * @property {Function} exitFullScreen Make a request to exit full screen mode.\n * @property {Function} cancelFullScreen Deprecated, use exitFullScreen instead.\n * @property {String} fullScreenEventName Event fired when the full screen mode change.\n * @property {String} fullScreenErrorEventName Event fired when a request to go\n * in full screen mode failed.\n */\n var fullScreenApi = {\n supportsFullScreen: false,\n isFullScreen: function() { return false; },\n getFullScreenElement: function() { return null; },\n requestFullScreen: function() {},\n exitFullScreen: function() {},\n cancelFullScreen: function() {},\n fullScreenEventName: '',\n fullScreenErrorEventName: ''\n };\n\n // check for native support\n if ( document.exitFullscreen ) {\n // W3C standard\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.fullscreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.requestFullscreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.exitFullscreen();\n };\n fullScreenApi.fullScreenEventName = \"fullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"fullscreenerror\";\n } else if ( document.msExitFullscreen ) {\n // IE 11\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.msFullscreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.msRequestFullscreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.msExitFullscreen();\n };\n fullScreenApi.fullScreenEventName = \"MSFullscreenChange\";\n fullScreenApi.fullScreenErrorEventName = \"MSFullscreenError\";\n } else if ( document.webkitExitFullscreen ) {\n // Recent webkit\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.webkitFullscreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.webkitRequestFullscreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.webkitExitFullscreen();\n };\n fullScreenApi.fullScreenEventName = \"webkitfullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"webkitfullscreenerror\";\n } else if ( document.webkitCancelFullScreen ) {\n // Old webkit\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.webkitCurrentFullScreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.webkitRequestFullScreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.webkitCancelFullScreen();\n };\n fullScreenApi.fullScreenEventName = \"webkitfullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"webkitfullscreenerror\";\n } else if ( document.mozCancelFullScreen ) {\n // Firefox\n fullScreenApi.supportsFullScreen = true;\n fullScreenApi.getFullScreenElement = function() {\n return document.mozFullScreenElement;\n };\n fullScreenApi.requestFullScreen = function( element ) {\n return element.mozRequestFullScreen();\n };\n fullScreenApi.exitFullScreen = function() {\n document.mozCancelFullScreen();\n };\n fullScreenApi.fullScreenEventName = \"mozfullscreenchange\";\n fullScreenApi.fullScreenErrorEventName = \"mozfullscreenerror\";\n }\n fullScreenApi.isFullScreen = function() {\n return fullScreenApi.getFullScreenElement() !== null;\n };\n fullScreenApi.cancelFullScreen = function() {\n $.console.error(\"cancelFullScreen is deprecated. Use exitFullScreen instead.\");\n fullScreenApi.exitFullScreen();\n };\n\n // export api\n $.extend( $, fullScreenApi );\n\n})( OpenSeadragon );\n\n/*\n * OpenSeadragon - EventSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($){\n\n/**\n * Event handler method signature used by all OpenSeadragon events.\n *\n * @callback EventHandler\n * @memberof OpenSeadragon\n * @param {Object} event - See individual events for event-specific properties.\n */\n\n\n/**\n * @class EventSource\n * @classdesc For use by classes which want to support custom, non-browser events.\n *\n * @memberof OpenSeadragon\n */\n$.EventSource = function() {\n this.events = {};\n};\n\n/** @lends OpenSeadragon.EventSource.prototype */\n$.EventSource.prototype = {\n\n /**\n * Add an event handler to be triggered only once (or a given number of times)\n * for a given event.\n * @function\n * @param {String} eventName - Name of event to register.\n * @param {OpenSeadragon.EventHandler} handler - Function to call when event\n * is triggered.\n * @param {Object} [userData=null] - Arbitrary object to be passed unchanged\n * to the handler.\n * @param {Number} [times=1] - The number of times to handle the event\n * before removing it.\n */\n addOnceHandler: function(eventName, handler, userData, times) {\n var self = this;\n times = times || 1;\n var count = 0;\n var onceHandler = function(event) {\n count++;\n if (count === times) {\n self.removeHandler(eventName, onceHandler);\n }\n handler(event);\n };\n this.addHandler(eventName, onceHandler, userData);\n },\n\n /**\n * Add an event handler for a given event.\n * @function\n * @param {String} eventName - Name of event to register.\n * @param {OpenSeadragon.EventHandler} handler - Function to call when event is triggered.\n * @param {Object} [userData=null] - Arbitrary object to be passed unchanged to the handler.\n */\n addHandler: function ( eventName, handler, userData ) {\n var events = this.events[ eventName ];\n if ( !events ) {\n this.events[ eventName ] = events = [];\n }\n if ( handler && $.isFunction( handler ) ) {\n events[ events.length ] = { handler: handler, userData: userData || null };\n }\n },\n\n /**\n * Remove a specific event handler for a given event.\n * @function\n * @param {String} eventName - Name of event for which the handler is to be removed.\n * @param {OpenSeadragon.EventHandler} handler - Function to be removed.\n */\n removeHandler: function ( eventName, handler ) {\n var events = this.events[ eventName ],\n handlers = [],\n i;\n if ( !events ) {\n return;\n }\n if ( $.isArray( events ) ) {\n for ( i = 0; i < events.length; i++ ) {\n if ( events[i].handler !== handler ) {\n handlers.push( events[ i ] );\n }\n }\n this.events[ eventName ] = handlers;\n }\n },\n\n\n /**\n * Remove all event handlers for a given event type. If no type is given all\n * event handlers for every event type are removed.\n * @function\n * @param {String} eventName - Name of event for which all handlers are to be removed.\n */\n removeAllHandlers: function( eventName ) {\n if ( eventName ){\n this.events[ eventName ] = [];\n } else{\n for ( var eventType in this.events ) {\n this.events[ eventType ] = [];\n }\n }\n },\n\n /**\n * Get a function which iterates the list of all handlers registered for a given event, calling the handler for each.\n * @function\n * @param {String} eventName - Name of event to get handlers for.\n */\n getHandler: function ( eventName ) {\n var events = this.events[ eventName ];\n if ( !events || !events.length ) {\n return null;\n }\n events = events.length === 1 ?\n [ events[ 0 ] ] :\n Array.apply( null, events );\n return function ( source, args ) {\n var i,\n length = events.length;\n for ( i = 0; i < length; i++ ) {\n if ( events[ i ] ) {\n args.eventSource = source;\n args.userData = events[ i ].userData;\n events[ i ].handler( args );\n }\n }\n };\n },\n\n /**\n * Trigger an event, optionally passing additional information.\n * @function\n * @param {String} eventName - Name of event to register.\n * @param {Object} eventArgs - Event-specific data.\n */\n raiseEvent: function( eventName, eventArgs ) {\n //uncomment if you want to get a log of all events\n //$.console.log( eventName );\n var handler = this.getHandler( eventName );\n\n if ( handler ) {\n if ( !eventArgs ) {\n eventArgs = {};\n }\n\n handler( this, eventArgs );\n }\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - MouseTracker\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function ( $ ) {\n\n // All MouseTracker instances\n var MOUSETRACKERS = [];\n\n // dictionary from hash to private properties\n var THIS = {};\n\n\n /**\n * @class MouseTracker\n * @classdesc Provides simplified handling of common pointer device (mouse, touch, pen, etc.) gestures\n * and keyboard events on a specified element.\n * @memberof OpenSeadragon\n * @param {Object} options\n * Allows configurable properties to be entirely specified by passing\n * an options object to the constructor. The constructor also supports\n * the original positional arguments 'element', 'clickTimeThreshold',\n * and 'clickDistThreshold' in that order.\n * @param {Element|String} options.element\n * A reference to an element or an element id for which the pointer/key\n * events will be monitored.\n * @param {Boolean} [options.startDisabled=false]\n * If true, event tracking on the element will not start until\n * {@link OpenSeadragon.MouseTracker.setTracking|setTracking} is called.\n * @param {Number} options.clickTimeThreshold\n * The number of milliseconds within which a pointer down-up event combination\n * will be treated as a click gesture.\n * @param {Number} options.clickDistThreshold\n * The maximum distance allowed between a pointer down event and a pointer up event\n * to be treated as a click gesture.\n * @param {Number} options.dblClickTimeThreshold\n * The number of milliseconds within which two pointer down-up event combinations\n * will be treated as a double-click gesture.\n * @param {Number} options.dblClickDistThreshold\n * The maximum distance allowed between two pointer click events\n * to be treated as a click gesture.\n * @param {Number} [options.stopDelay=50]\n * The number of milliseconds without pointer move before the stop\n * event is fired.\n * @param {OpenSeadragon.EventHandler} [options.enterHandler=null]\n * An optional handler for pointer enter.\n * @param {OpenSeadragon.EventHandler} [options.exitHandler=null]\n * An optional handler for pointer exit.\n * @param {OpenSeadragon.EventHandler} [options.pressHandler=null]\n * An optional handler for pointer press.\n * @param {OpenSeadragon.EventHandler} [options.nonPrimaryPressHandler=null]\n * An optional handler for pointer non-primary button press.\n * @param {OpenSeadragon.EventHandler} [options.releaseHandler=null]\n * An optional handler for pointer release.\n * @param {OpenSeadragon.EventHandler} [options.nonPrimaryReleaseHandler=null]\n * An optional handler for pointer non-primary button release.\n * @param {OpenSeadragon.EventHandler} [options.moveHandler=null]\n * An optional handler for pointer move.\n * @param {OpenSeadragon.EventHandler} [options.scrollHandler=null]\n * An optional handler for mouse wheel scroll.\n * @param {OpenSeadragon.EventHandler} [options.clickHandler=null]\n * An optional handler for pointer click.\n * @param {OpenSeadragon.EventHandler} [options.dblClickHandler=null]\n * An optional handler for pointer double-click.\n * @param {OpenSeadragon.EventHandler} [options.dragHandler=null]\n * An optional handler for the drag gesture.\n * @param {OpenSeadragon.EventHandler} [options.dragEndHandler=null]\n * An optional handler for after a drag gesture.\n * @param {OpenSeadragon.EventHandler} [options.pinchHandler=null]\n * An optional handler for the pinch gesture.\n * @param {OpenSeadragon.EventHandler} [options.keyDownHandler=null]\n * An optional handler for keydown.\n * @param {OpenSeadragon.EventHandler} [options.keyUpHandler=null]\n * An optional handler for keyup.\n * @param {OpenSeadragon.EventHandler} [options.keyHandler=null]\n * An optional handler for keypress.\n * @param {OpenSeadragon.EventHandler} [options.focusHandler=null]\n * An optional handler for focus.\n * @param {OpenSeadragon.EventHandler} [options.blurHandler=null]\n * An optional handler for blur.\n * @param {Object} [options.userData=null]\n * Arbitrary object to be passed unchanged to any attached handler methods.\n */\n $.MouseTracker = function ( options ) {\n\n MOUSETRACKERS.push( this );\n\n var args = arguments;\n\n if ( !$.isPlainObject( options ) ) {\n options = {\n element: args[ 0 ],\n clickTimeThreshold: args[ 1 ],\n clickDistThreshold: args[ 2 ]\n };\n }\n\n this.hash = Math.random(); // An unique hash for this tracker.\n /**\n * The element for which pointer events are being monitored.\n * @member {Element} element\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.element = $.getElement( options.element );\n /**\n * The number of milliseconds within which a pointer down-up event combination\n * will be treated as a click gesture.\n * @member {Number} clickTimeThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.clickTimeThreshold = options.clickTimeThreshold || $.DEFAULT_SETTINGS.clickTimeThreshold;\n /**\n * The maximum distance allowed between a pointer down event and a pointer up event\n * to be treated as a click gesture.\n * @member {Number} clickDistThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.clickDistThreshold = options.clickDistThreshold || $.DEFAULT_SETTINGS.clickDistThreshold;\n /**\n * The number of milliseconds within which two pointer down-up event combinations\n * will be treated as a double-click gesture.\n * @member {Number} dblClickTimeThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.dblClickTimeThreshold = options.dblClickTimeThreshold || $.DEFAULT_SETTINGS.dblClickTimeThreshold;\n /**\n * The maximum distance allowed between two pointer click events\n * to be treated as a click gesture.\n * @member {Number} clickDistThreshold\n * @memberof OpenSeadragon.MouseTracker#\n */\n this.dblClickDistThreshold = options.dblClickDistThreshold || $.DEFAULT_SETTINGS.dblClickDistThreshold;\n /*eslint-disable no-multi-spaces*/\n this.userData = options.userData || null;\n this.stopDelay = options.stopDelay || 50;\n\n this.enterHandler = options.enterHandler || null;\n this.exitHandler = options.exitHandler || null;\n this.pressHandler = options.pressHandler || null;\n this.nonPrimaryPressHandler = options.nonPrimaryPressHandler || null;\n this.releaseHandler = options.releaseHandler || null;\n this.nonPrimaryReleaseHandler = options.nonPrimaryReleaseHandler || null;\n this.moveHandler = options.moveHandler || null;\n this.scrollHandler = options.scrollHandler || null;\n this.clickHandler = options.clickHandler || null;\n this.dblClickHandler = options.dblClickHandler || null;\n this.dragHandler = options.dragHandler || null;\n this.dragEndHandler = options.dragEndHandler || null;\n this.pinchHandler = options.pinchHandler || null;\n this.stopHandler = options.stopHandler || null;\n this.keyDownHandler = options.keyDownHandler || null;\n this.keyUpHandler = options.keyUpHandler || null;\n this.keyHandler = options.keyHandler || null;\n this.focusHandler = options.focusHandler || null;\n this.blurHandler = options.blurHandler || null;\n /*eslint-enable no-multi-spaces*/\n\n //Store private properties in a scope sealed hash map\n var _this = this;\n\n /**\n * @private\n * @property {Boolean} tracking\n * Are we currently tracking pointer events for this element.\n */\n THIS[ this.hash ] = {\n click: function ( event ) { onClick( _this, event ); },\n dblclick: function ( event ) { onDblClick( _this, event ); },\n keydown: function ( event ) { onKeyDown( _this, event ); },\n keyup: function ( event ) { onKeyUp( _this, event ); },\n keypress: function ( event ) { onKeyPress( _this, event ); },\n focus: function ( event ) { onFocus( _this, event ); },\n blur: function ( event ) { onBlur( _this, event ); },\n\n wheel: function ( event ) { onWheel( _this, event ); },\n mousewheel: function ( event ) { onMouseWheel( _this, event ); },\n DOMMouseScroll: function ( event ) { onMouseWheel( _this, event ); },\n MozMousePixelScroll: function ( event ) { onMouseWheel( _this, event ); },\n\n mouseenter: function ( event ) { onMouseEnter( _this, event ); }, // Used on IE8 only\n mouseleave: function ( event ) { onMouseLeave( _this, event ); }, // Used on IE8 only\n mouseover: function ( event ) { onMouseOver( _this, event ); },\n mouseout: function ( event ) { onMouseOut( _this, event ); },\n mousedown: function ( event ) { onMouseDown( _this, event ); },\n mouseup: function ( event ) { onMouseUp( _this, event ); },\n mouseupcaptured: function ( event ) { onMouseUpCaptured( _this, event ); },\n mousemove: function ( event ) { onMouseMove( _this, event ); },\n mousemovecaptured: function ( event ) { onMouseMoveCaptured( _this, event ); },\n\n touchstart: function ( event ) { onTouchStart( _this, event ); },\n touchend: function ( event ) { onTouchEnd( _this, event ); },\n touchendcaptured: function ( event ) { onTouchEndCaptured( _this, event ); },\n touchmove: function ( event ) { onTouchMove( _this, event ); },\n touchmovecaptured: function ( event ) { onTouchMoveCaptured( _this, event ); },\n touchcancel: function ( event ) { onTouchCancel( _this, event ); },\n\n gesturestart: function ( event ) { onGestureStart( _this, event ); },\n gesturechange: function ( event ) { onGestureChange( _this, event ); },\n\n pointerover: function ( event ) { onPointerOver( _this, event ); },\n MSPointerOver: function ( event ) { onPointerOver( _this, event ); },\n pointerout: function ( event ) { onPointerOut( _this, event ); },\n MSPointerOut: function ( event ) { onPointerOut( _this, event ); },\n pointerdown: function ( event ) { onPointerDown( _this, event ); },\n MSPointerDown: function ( event ) { onPointerDown( _this, event ); },\n pointerup: function ( event ) { onPointerUp( _this, event ); },\n MSPointerUp: function ( event ) { onPointerUp( _this, event ); },\n pointermove: function ( event ) { onPointerMove( _this, event ); },\n MSPointerMove: function ( event ) { onPointerMove( _this, event ); },\n pointercancel: function ( event ) { onPointerCancel( _this, event ); },\n MSPointerCancel: function ( event ) { onPointerCancel( _this, event ); },\n pointerupcaptured: function ( event ) { onPointerUpCaptured( _this, event ); },\n pointermovecaptured: function ( event ) { onPointerMoveCaptured( _this, event ); },\n\n tracking: false,\n\n // Active pointers lists. Array of GesturePointList objects, one for each pointer device type.\n // GesturePointList objects are added each time a pointer is tracked by a new pointer device type (see getActivePointersListByType()).\n // Active pointers are any pointer being tracked for this element which are in the hit-test area\n // of the element (for hover-capable devices) and/or have contact or a button press initiated in the element.\n activePointersLists: [],\n\n // Tracking for double-click gesture\n lastClickPos: null,\n dblClickTimeOut: null,\n\n // Tracking for pinch gesture\n pinchGPoints: [],\n lastPinchDist: 0,\n currentPinchDist: 0,\n lastPinchCenter: null,\n currentPinchCenter: null\n };\n\n if ( !options.startDisabled ) {\n this.setTracking( true );\n }\n };\n\n /** @lends OpenSeadragon.MouseTracker.prototype */\n $.MouseTracker.prototype = {\n\n /**\n * Clean up any events or objects created by the tracker.\n * @function\n */\n destroy: function () {\n var i;\n\n stopTracking( this );\n this.element = null;\n\n for ( i = 0; i < MOUSETRACKERS.length; i++ ) {\n if ( MOUSETRACKERS[ i ] === this ) {\n MOUSETRACKERS.splice( i, 1 );\n break;\n }\n }\n\n THIS[ this.hash ] = null;\n delete THIS[ this.hash ];\n },\n\n /**\n * Are we currently tracking events on this element.\n * @deprecated Just use this.tracking\n * @function\n * @returns {Boolean} Are we currently tracking events on this element.\n */\n isTracking: function () {\n return THIS[ this.hash ].tracking;\n },\n\n /**\n * Enable or disable whether or not we are tracking events on this element.\n * @function\n * @param {Boolean} track True to start tracking, false to stop tracking.\n * @returns {OpenSeadragon.MouseTracker} Chainable.\n */\n setTracking: function ( track ) {\n if ( track ) {\n startTracking( this );\n } else {\n stopTracking( this );\n }\n //chain\n return this;\n },\n\n /**\n * Returns the {@link OpenSeadragon.MouseTracker.GesturePointList|GesturePointList} for all but the given pointer device type.\n * @function\n * @param {String} type - The pointer device type: \"mouse\", \"touch\", \"pen\", etc.\n * @returns {Array.}\n */\n getActivePointersListsExceptType: function ( type ) {\n var delegate = THIS[ this.hash ];\n var listArray = [];\n\n for (var i = 0; i < delegate.activePointersLists.length; ++i) {\n if (delegate.activePointersLists[i].type !== type) {\n listArray.push(delegate.activePointersLists[i]);\n }\n }\n\n return listArray;\n },\n\n /**\n * Returns the {@link OpenSeadragon.MouseTracker.GesturePointList|GesturePointList} for the given pointer device type,\n * creating and caching a new {@link OpenSeadragon.MouseTracker.GesturePointList|GesturePointList} if one doesn't already exist for the type.\n * @function\n * @param {String} type - The pointer device type: \"mouse\", \"touch\", \"pen\", etc.\n * @returns {OpenSeadragon.MouseTracker.GesturePointList}\n */\n getActivePointersListByType: function ( type ) {\n var delegate = THIS[ this.hash ],\n i,\n len = delegate.activePointersLists.length,\n list;\n\n for ( i = 0; i < len; i++ ) {\n if ( delegate.activePointersLists[ i ].type === type ) {\n return delegate.activePointersLists[ i ];\n }\n }\n\n list = new $.MouseTracker.GesturePointList( type );\n delegate.activePointersLists.push( list );\n return list;\n },\n\n /**\n * Returns the total number of pointers currently active on the tracked element.\n * @function\n * @returns {Number}\n */\n getActivePointerCount: function () {\n var delegate = THIS[ this.hash ],\n i,\n len = delegate.activePointersLists.length,\n count = 0;\n\n for ( i = 0; i < len; i++ ) {\n count += delegate.activePointersLists[ i ].getLength();\n }\n\n return count;\n },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n enterHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Number} event.pointers\n * Number of pointers (all types) active in the tracked element.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.buttonDownAny\n * Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n exitHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n pressHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.button\n * Button which caused the event.\n * -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n nonPrimaryPressHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.insideElementPressed\n * True if the left mouse button is currently being pressed and was\n * initiated inside the tracked element, otherwise false.\n * @param {Boolean} event.insideElementReleased\n * True if the cursor inside the tracked element when the button was released.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n releaseHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.button\n * Button which caused the event.\n * -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n nonPrimaryReleaseHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n moveHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.scroll\n * The scroll delta for the event.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead. Touch devices no longer generate scroll event.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n scrollHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Boolean} event.quick\n * True only if the clickDistThreshold and clickTimeThreshold are both passed. Useful for ignoring drag events.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n clickHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n dblClickHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {OpenSeadragon.Point} event.delta\n * The x,y components of the difference between the current position and the last drag event position. Useful for ignoring or weighting the events.\n * @param {Number} event.speed\n * Current computed speed, in pixels per second.\n * @param {Number} event.direction\n * Current computed direction, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n dragHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.speed\n * Speed at the end of a drag gesture, in pixels per second.\n * @param {Number} event.direction\n * Direction at the end of a drag gesture, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n dragEndHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {Array.} event.gesturePoints\n * Gesture points associated with the gesture. Velocity data can be found here.\n * @param {OpenSeadragon.Point} event.lastCenter\n * The previous center point of the two pinch contact points relative to the tracked element.\n * @param {OpenSeadragon.Point} event.center\n * The center point of the two pinch contact points relative to the tracked element.\n * @param {Number} event.lastDistance\n * The previous distance between the two pinch contact points in CSS pixels.\n * @param {Number} event.distance\n * The distance between the two pinch contact points in CSS pixels.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n pinchHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {String} event.pointerType\n * \"mouse\", \"touch\", \"pen\", etc.\n * @param {OpenSeadragon.Point} event.position\n * The position of the event relative to the tracked element.\n * @param {Number} event.buttons\n * Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @param {Boolean} event.isTouchEvent\n * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n stopHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {Number} event.keyCode\n * The key code that was pressed.\n * @param {Boolean} event.ctrl\n * True if the ctrl key was pressed during this event.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.alt\n * True if the alt key was pressed during this event.\n * @param {Boolean} event.meta\n * True if the meta key was pressed during this event.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n keyDownHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {Number} event.keyCode\n * The key code that was pressed.\n * @param {Boolean} event.ctrl\n * True if the ctrl key was pressed during this event.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.alt\n * True if the alt key was pressed during this event.\n * @param {Boolean} event.meta\n * True if the meta key was pressed during this event.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n keyUpHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {Number} event.keyCode\n * The key code that was pressed.\n * @param {Boolean} event.ctrl\n * True if the ctrl key was pressed during this event.\n * @param {Boolean} event.shift\n * True if the shift key was pressed during this event.\n * @param {Boolean} event.alt\n * True if the alt key was pressed during this event.\n * @param {Boolean} event.meta\n * True if the meta key was pressed during this event.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n keyHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n focusHandler: function () { },\n\n /**\n * Implement or assign implementation to these handlers during or after\n * calling the constructor.\n * @function\n * @param {Object} event\n * @param {OpenSeadragon.MouseTracker} event.eventSource\n * A reference to the tracker instance.\n * @param {Object} event.originalEvent\n * The original event object.\n * @param {Boolean} event.preventDefaultAction\n * Set to true to prevent the tracker subscriber from performing its default action (subscriber implementation dependent). Default: false.\n * @param {Object} event.userData\n * Arbitrary user-defined object.\n */\n blurHandler: function () { }\n };\n\n /**\n * Resets all active mousetrakers. (Added to patch issue #697 \"Mouse up outside map will cause \"canvas-drag\" event to stick\")\n *\n * @private\n * @member resetAllMouseTrackers\n * @memberof OpenSeadragon.MouseTracker\n */\n $.MouseTracker.resetAllMouseTrackers = function(){\n for(var i = 0; i < MOUSETRACKERS.length; i++){\n if (MOUSETRACKERS[i].isTracking()){\n MOUSETRACKERS[i].setTracking(false);\n MOUSETRACKERS[i].setTracking(true);\n }\n }\n };\n\n /**\n * Provides continuous computation of velocity (speed and direction) of active pointers.\n * This is a singleton, used by all MouseTracker instances, as it is unlikely there will ever be more than\n * two active gesture pointers at a time.\n *\n * @private\n * @member gesturePointVelocityTracker\n * @memberof OpenSeadragon.MouseTracker\n */\n $.MouseTracker.gesturePointVelocityTracker = (function () {\n var trackerPoints = [],\n intervalId = 0,\n lastTime = 0;\n\n // Generates a unique identifier for a tracked gesture point\n var _generateGuid = function ( tracker, gPoint ) {\n return tracker.hash.toString() + gPoint.type + gPoint.id.toString();\n };\n\n // Interval timer callback. Computes velocity for all tracked gesture points.\n var _doTracking = function () {\n var i,\n len = trackerPoints.length,\n trackPoint,\n gPoint,\n now = $.now(),\n elapsedTime,\n distance,\n speed;\n\n elapsedTime = now - lastTime;\n lastTime = now;\n\n for ( i = 0; i < len; i++ ) {\n trackPoint = trackerPoints[ i ];\n gPoint = trackPoint.gPoint;\n // Math.atan2 gives us just what we need for a velocity vector, as we can simply\n // use cos()/sin() to extract the x/y velocity components.\n gPoint.direction = Math.atan2( gPoint.currentPos.y - trackPoint.lastPos.y, gPoint.currentPos.x - trackPoint.lastPos.x );\n // speed = distance / elapsed time\n distance = trackPoint.lastPos.distanceTo( gPoint.currentPos );\n trackPoint.lastPos = gPoint.currentPos;\n speed = 1000 * distance / ( elapsedTime + 1 );\n // Simple biased average, favors the most recent speed computation. Smooths out erratic gestures a bit.\n gPoint.speed = 0.75 * speed + 0.25 * gPoint.speed;\n }\n };\n\n // Public. Add a gesture point to be tracked\n var addPoint = function ( tracker, gPoint ) {\n var guid = _generateGuid( tracker, gPoint );\n\n trackerPoints.push(\n {\n guid: guid,\n gPoint: gPoint,\n lastPos: gPoint.currentPos\n } );\n\n // Only fire up the interval timer when there's gesture pointers to track\n if ( trackerPoints.length === 1 ) {\n lastTime = $.now();\n intervalId = window.setInterval( _doTracking, 50 );\n }\n };\n\n // Public. Stop tracking a gesture point\n var removePoint = function ( tracker, gPoint ) {\n var guid = _generateGuid( tracker, gPoint ),\n i,\n len = trackerPoints.length;\n for ( i = 0; i < len; i++ ) {\n if ( trackerPoints[ i ].guid === guid ) {\n trackerPoints.splice( i, 1 );\n // Only run the interval timer if theres gesture pointers to track\n len--;\n if ( len === 0 ) {\n window.clearInterval( intervalId );\n }\n break;\n }\n }\n };\n\n return {\n addPoint: addPoint,\n removePoint: removePoint\n };\n } )();\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Pointer event model and feature detection\n///////////////////////////////////////////////////////////////////////////////\n\n $.MouseTracker.captureElement = document;\n\n /**\n * Detect available mouse wheel event name.\n */\n $.MouseTracker.wheelEventName = ( $.Browser.vendor == $.BROWSERS.IE && $.Browser.version > 8 ) ||\n ( 'onwheel' in document.createElement( 'div' ) ) ? 'wheel' : // Modern browsers support 'wheel'\n document.onmousewheel !== undefined ? 'mousewheel' : // Webkit and IE support at least 'mousewheel'\n 'DOMMouseScroll'; // Assume old Firefox\n\n /**\n * Detect legacy mouse capture support.\n */\n $.MouseTracker.supportsMouseCapture = (function () {\n var divElement = document.createElement( 'div' );\n return $.isFunction( divElement.setCapture ) && $.isFunction( divElement.releaseCapture );\n }());\n\n /**\n * Detect browser pointer device event model(s) and build appropriate list of events to subscribe to.\n */\n $.MouseTracker.subscribeEvents = [ \"click\", \"dblclick\", \"keydown\", \"keyup\", \"keypress\", \"focus\", \"blur\", $.MouseTracker.wheelEventName ];\n\n if( $.MouseTracker.wheelEventName == \"DOMMouseScroll\" ) {\n // Older Firefox\n $.MouseTracker.subscribeEvents.push( \"MozMousePixelScroll\" );\n }\n\n // Note: window.navigator.pointerEnable is deprecated on IE 11 and not part of W3C spec.\n if ( window.PointerEvent && ( window.navigator.pointerEnabled || $.Browser.vendor !== $.BROWSERS.IE ) ) {\n // IE11 and other W3C Pointer Event implementations (see http://www.w3.org/TR/pointerevents)\n $.MouseTracker.havePointerEvents = true;\n $.MouseTracker.subscribeEvents.push( \"pointerover\", \"pointerout\", \"pointerdown\", \"pointerup\", \"pointermove\", \"pointercancel\" );\n $.MouseTracker.unprefixedPointerEvents = true;\n if( navigator.maxTouchPoints ) {\n $.MouseTracker.maxTouchPoints = navigator.maxTouchPoints;\n } else {\n $.MouseTracker.maxTouchPoints = 0;\n }\n $.MouseTracker.haveMouseEnter = false;\n } else if ( window.MSPointerEvent && window.navigator.msPointerEnabled ) {\n // IE10\n $.MouseTracker.havePointerEvents = true;\n $.MouseTracker.subscribeEvents.push( \"MSPointerOver\", \"MSPointerOut\", \"MSPointerDown\", \"MSPointerUp\", \"MSPointerMove\", \"MSPointerCancel\" );\n $.MouseTracker.unprefixedPointerEvents = false;\n if( navigator.msMaxTouchPoints ) {\n $.MouseTracker.maxTouchPoints = navigator.msMaxTouchPoints;\n } else {\n $.MouseTracker.maxTouchPoints = 0;\n }\n $.MouseTracker.haveMouseEnter = false;\n } else {\n // Legacy W3C mouse events\n $.MouseTracker.havePointerEvents = false;\n if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) {\n $.MouseTracker.subscribeEvents.push( \"mouseenter\", \"mouseleave\" );\n $.MouseTracker.haveMouseEnter = true;\n } else {\n $.MouseTracker.subscribeEvents.push( \"mouseover\", \"mouseout\" );\n $.MouseTracker.haveMouseEnter = false;\n }\n $.MouseTracker.subscribeEvents.push( \"mousedown\", \"mouseup\", \"mousemove\" );\n if ( 'ontouchstart' in window ) {\n // iOS, Android, and other W3c Touch Event implementations\n // (see http://www.w3.org/TR/touch-events/)\n // (see https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html)\n // (see https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html)\n $.MouseTracker.subscribeEvents.push( \"touchstart\", \"touchend\", \"touchmove\", \"touchcancel\" );\n }\n if ( 'ongesturestart' in window ) {\n // iOS (see https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html)\n // Subscribe to these to prevent default gesture handling\n $.MouseTracker.subscribeEvents.push( \"gesturestart\", \"gesturechange\" );\n }\n $.MouseTracker.mousePointerId = \"legacy-mouse\";\n $.MouseTracker.maxTouchPoints = 10;\n }\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Classes and typedefs\n///////////////////////////////////////////////////////////////////////////////\n\n /**\n * Represents a point of contact on the screen made by a mouse cursor, pen, touch, or other pointer device.\n *\n * @typedef {Object} GesturePoint\n * @memberof OpenSeadragon.MouseTracker\n *\n * @property {Number} id\n * Identifier unique from all other active GesturePoints for a given pointer device.\n * @property {String} type\n * The pointer device type: \"mouse\", \"touch\", \"pen\", etc.\n * @property {Boolean} captured\n * True if events for the gesture point are captured to the tracked element.\n * @property {Boolean} isPrimary\n * True if the gesture point is a master pointer amongst the set of active pointers for each pointer type. True for mouse and primary (first) touch/pen pointers.\n * @property {Boolean} insideElementPressed\n * True if button pressed or contact point initiated inside the screen area of the tracked element.\n * @property {Boolean} insideElement\n * True if pointer or contact point is currently inside the bounds of the tracked element.\n * @property {Number} speed\n * Current computed speed, in pixels per second.\n * @property {Number} direction\n * Current computed direction, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @property {OpenSeadragon.Point} contactPos\n * The initial pointer contact position, relative to the page including any scrolling. Only valid if the pointer has contact (pressed, touch contact, pen contact).\n * @property {Number} contactTime\n * The initial pointer contact time, in milliseconds. Only valid if the pointer has contact (pressed, touch contact, pen contact).\n * @property {OpenSeadragon.Point} lastPos\n * The last pointer position, relative to the page including any scrolling.\n * @property {Number} lastTime\n * The last pointer contact time, in milliseconds.\n * @property {OpenSeadragon.Point} currentPos\n * The current pointer position, relative to the page including any scrolling.\n * @property {Number} currentTime\n * The current pointer contact time, in milliseconds.\n */\n\n\n /**\n * @class GesturePointList\n * @classdesc Provides an abstraction for a set of active {@link OpenSeadragon.MouseTracker.GesturePoint|GesturePoint} objects for a given pointer device type.\n * Active pointers are any pointer being tracked for this element which are in the hit-test area\n * of the element (for hover-capable devices) and/or have contact or a button press initiated in the element.\n * @memberof OpenSeadragon.MouseTracker\n * @param {String} type - The pointer device type: \"mouse\", \"touch\", \"pen\", etc.\n */\n $.MouseTracker.GesturePointList = function ( type ) {\n this._gPoints = [];\n /**\n * The pointer device type: \"mouse\", \"touch\", \"pen\", etc.\n * @member {String} type\n * @memberof OpenSeadragon.MouseTracker.GesturePointList#\n */\n this.type = type;\n /**\n * Current buttons pressed for the device.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @member {Number} buttons\n * @memberof OpenSeadragon.MouseTracker.GesturePointList#\n */\n this.buttons = 0;\n /**\n * Current number of contact points (touch points, mouse down, etc.) for the device.\n * @member {Number} contacts\n * @memberof OpenSeadragon.MouseTracker.GesturePointList#\n */\n this.contacts = 0;\n /**\n * Current number of clicks for the device. Used for multiple click gesture tracking.\n * @member {Number} clicks\n * @memberof OpenSeadragon.MouseTracker.GesturePointList#\n */\n this.clicks = 0;\n /**\n * Current number of captured pointers for the device.\n * @member {Number} captureCount\n * @memberof OpenSeadragon.MouseTracker.GesturePointList#\n */\n this.captureCount = 0;\n };\n\n /** @lends OpenSeadragon.MouseTracker.GesturePointList.prototype */\n $.MouseTracker.GesturePointList.prototype = {\n /**\n * @function\n * @returns {Number} Number of gesture points in the list.\n */\n getLength: function () {\n return this._gPoints.length;\n },\n /**\n * @function\n * @returns {Array.} The list of gesture points in the list as an array (read-only).\n */\n asArray: function () {\n return this._gPoints;\n },\n /**\n * @function\n * @param {OpenSeadragon.MouseTracker.GesturePoint} gesturePoint - A gesture point to add to the list.\n * @returns {Number} Number of gesture points in the list.\n */\n add: function ( gp ) {\n return this._gPoints.push( gp );\n },\n /**\n * @function\n * @param {Number} id - The id of the gesture point to remove from the list.\n * @returns {Number} Number of gesture points in the list.\n */\n removeById: function ( id ) {\n var i,\n len = this._gPoints.length;\n for ( i = 0; i < len; i++ ) {\n if ( this._gPoints[ i ].id === id ) {\n this._gPoints.splice( i, 1 );\n break;\n }\n }\n return this._gPoints.length;\n },\n /**\n * @function\n * @param {Number} index - The index of the gesture point to retrieve from the list.\n * @returns {OpenSeadragon.MouseTracker.GesturePoint|null} The gesture point at the given index, or null if not found.\n */\n getByIndex: function ( index ) {\n if ( index < this._gPoints.length) {\n return this._gPoints[ index ];\n }\n\n return null;\n },\n /**\n * @function\n * @param {Number} id - The id of the gesture point to retrieve from the list.\n * @returns {OpenSeadragon.MouseTracker.GesturePoint|null} The gesture point with the given id, or null if not found.\n */\n getById: function ( id ) {\n var i,\n len = this._gPoints.length;\n for ( i = 0; i < len; i++ ) {\n if ( this._gPoints[ i ].id === id ) {\n return this._gPoints[ i ];\n }\n }\n return null;\n },\n /**\n * @function\n * @returns {OpenSeadragon.MouseTracker.GesturePoint|null} The primary gesture point in the list, or null if not found.\n */\n getPrimary: function ( id ) {\n var i,\n len = this._gPoints.length;\n for ( i = 0; i < len; i++ ) {\n if ( this._gPoints[ i ].isPrimary ) {\n return this._gPoints[ i ];\n }\n }\n return null;\n },\n\n /**\n * Increment this pointer's contact count.\n * It will evaluate whether this pointer type is allowed to have multiple contacts.\n * @function\n */\n addContact: function() {\n ++this.contacts;\n\n if (this.contacts > 1 && (this.type === \"mouse\" || this.type === \"pen\")) {\n this.contacts = 1;\n }\n },\n\n /**\n * Decrement this pointer's contact count.\n * It will make sure the count does not go below 0.\n * @function\n */\n removeContact: function() {\n --this.contacts;\n\n if (this.contacts < 0) {\n this.contacts = 0;\n }\n }\n };\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Utility functions\n///////////////////////////////////////////////////////////////////////////////\n\n /**\n * Removes all tracked pointers.\n * @private\n * @inner\n */\n function clearTrackedPointers( tracker ) {\n var delegate = THIS[ tracker.hash ],\n i,\n pointerListCount = delegate.activePointersLists.length;\n\n for ( i = 0; i < pointerListCount; i++ ) {\n if ( delegate.activePointersLists[ i ].captureCount > 0 ) {\n $.removeEvent(\n $.MouseTracker.captureElement,\n 'mousemove',\n delegate.mousemovecaptured,\n true\n );\n $.removeEvent(\n $.MouseTracker.captureElement,\n 'mouseup',\n delegate.mouseupcaptured,\n true\n );\n $.removeEvent(\n $.MouseTracker.captureElement,\n $.MouseTracker.unprefixedPointerEvents ? 'pointermove' : 'MSPointerMove',\n delegate.pointermovecaptured,\n true\n );\n $.removeEvent(\n $.MouseTracker.captureElement,\n $.MouseTracker.unprefixedPointerEvents ? 'pointerup' : 'MSPointerUp',\n delegate.pointerupcaptured,\n true\n );\n $.removeEvent(\n $.MouseTracker.captureElement,\n 'touchmove',\n delegate.touchmovecaptured,\n true\n );\n $.removeEvent(\n $.MouseTracker.captureElement,\n 'touchend',\n delegate.touchendcaptured,\n true\n );\n\n delegate.activePointersLists[ i ].captureCount = 0;\n }\n }\n\n for ( i = 0; i < pointerListCount; i++ ) {\n delegate.activePointersLists.pop();\n }\n }\n\n /**\n * Starts tracking pointer events on the tracked element.\n * @private\n * @inner\n */\n function startTracking( tracker ) {\n var delegate = THIS[ tracker.hash ],\n event,\n i;\n\n if ( !delegate.tracking ) {\n for ( i = 0; i < $.MouseTracker.subscribeEvents.length; i++ ) {\n event = $.MouseTracker.subscribeEvents[ i ];\n $.addEvent(\n tracker.element,\n event,\n delegate[ event ],\n false\n );\n }\n\n clearTrackedPointers( tracker );\n\n delegate.tracking = true;\n }\n }\n\n /**\n * Stops tracking pointer events on the tracked element.\n * @private\n * @inner\n */\n function stopTracking( tracker ) {\n var delegate = THIS[ tracker.hash ],\n event,\n i;\n\n if ( delegate.tracking ) {\n for ( i = 0; i < $.MouseTracker.subscribeEvents.length; i++ ) {\n event = $.MouseTracker.subscribeEvents[ i ];\n $.removeEvent(\n tracker.element,\n event,\n delegate[ event ],\n false\n );\n }\n\n clearTrackedPointers( tracker );\n\n delegate.tracking = false;\n }\n }\n\n /**\n * @private\n * @inner\n */\n function getCaptureEventParams( tracker, pointerType ) {\n var delegate = THIS[ tracker.hash ];\n\n if ( pointerType === 'pointerevent' ) {\n return {\n upName: $.MouseTracker.unprefixedPointerEvents ? 'pointerup' : 'MSPointerUp',\n upHandler: delegate.pointerupcaptured,\n moveName: $.MouseTracker.unprefixedPointerEvents ? 'pointermove' : 'MSPointerMove',\n moveHandler: delegate.pointermovecaptured\n };\n } else if ( pointerType === 'mouse' ) {\n return {\n upName: 'mouseup',\n upHandler: delegate.mouseupcaptured,\n moveName: 'mousemove',\n moveHandler: delegate.mousemovecaptured\n };\n } else if ( pointerType === 'touch' ) {\n return {\n upName: 'touchend',\n upHandler: delegate.touchendcaptured,\n moveName: 'touchmove',\n moveHandler: delegate.touchmovecaptured\n };\n } else {\n throw new Error( \"MouseTracker.getCaptureEventParams: Unknown pointer type.\" );\n }\n }\n\n /**\n * Begin capturing pointer events to the tracked element.\n * @private\n * @inner\n */\n function capturePointer( tracker, pointerType, pointerCount ) {\n var pointsList = tracker.getActivePointersListByType( pointerType ),\n eventParams;\n\n pointsList.captureCount += (pointerCount || 1);\n\n if ( pointsList.captureCount === 1 ) {\n if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) {\n tracker.element.setCapture( true );\n } else {\n eventParams = getCaptureEventParams( tracker, $.MouseTracker.havePointerEvents ? 'pointerevent' : pointerType );\n // We emulate mouse capture by hanging listeners on the document object.\n // (Note we listen on the capture phase so the captured handlers will get called first)\n // eslint-disable-next-line no-use-before-define\n if (isInIframe && canAccessEvents(window.top)) {\n $.addEvent(\n window.top,\n eventParams.upName,\n eventParams.upHandler,\n true\n );\n }\n $.addEvent(\n $.MouseTracker.captureElement,\n eventParams.upName,\n eventParams.upHandler,\n true\n );\n $.addEvent(\n $.MouseTracker.captureElement,\n eventParams.moveName,\n eventParams.moveHandler,\n true\n );\n }\n }\n }\n\n\n /**\n * Stop capturing pointer events to the tracked element.\n * @private\n * @inner\n */\n function releasePointer( tracker, pointerType, pointerCount ) {\n var pointsList = tracker.getActivePointersListByType( pointerType ),\n eventParams;\n\n pointsList.captureCount -= (pointerCount || 1);\n\n if ( pointsList.captureCount === 0 ) {\n if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) {\n tracker.element.releaseCapture();\n } else {\n eventParams = getCaptureEventParams( tracker, $.MouseTracker.havePointerEvents ? 'pointerevent' : pointerType );\n // We emulate mouse capture by hanging listeners on the document object.\n // (Note we listen on the capture phase so the captured handlers will get called first)\n // eslint-disable-next-line no-use-before-define\n if (isInIframe && canAccessEvents(window.top)) {\n $.removeEvent(\n window.top,\n eventParams.upName,\n eventParams.upHandler,\n true\n );\n }\n $.removeEvent(\n $.MouseTracker.captureElement,\n eventParams.moveName,\n eventParams.moveHandler,\n true\n );\n $.removeEvent(\n $.MouseTracker.captureElement,\n eventParams.upName,\n eventParams.upHandler,\n true\n );\n }\n }\n }\n\n\n /**\n * Gets a W3C Pointer Events model compatible pointer type string from a DOM pointer event.\n * IE10 used a long integer value, but the W3C specification (and IE11+) use a string \"mouse\", \"touch\", \"pen\", etc.\n * @private\n * @inner\n */\n function getPointerType( event ) {\n var pointerTypeStr;\n if ( $.MouseTracker.unprefixedPointerEvents ) {\n pointerTypeStr = event.pointerType;\n } else {\n // IE10\n // MSPOINTER_TYPE_TOUCH: 0x00000002\n // MSPOINTER_TYPE_PEN: 0x00000003\n // MSPOINTER_TYPE_MOUSE: 0x00000004\n switch( event.pointerType )\n {\n case 0x00000002:\n pointerTypeStr = 'touch';\n break;\n case 0x00000003:\n pointerTypeStr = 'pen';\n break;\n case 0x00000004:\n pointerTypeStr = 'mouse';\n break;\n default:\n pointerTypeStr = '';\n }\n }\n return pointerTypeStr;\n }\n\n\n /**\n * @private\n * @inner\n */\n function getMouseAbsolute( event ) {\n return $.getMousePosition( event );\n }\n\n /**\n * @private\n * @inner\n */\n function getMouseRelative( event, element ) {\n return getPointRelativeToAbsolute( getMouseAbsolute( event ), element );\n }\n\n /**\n * @private\n * @inner\n */\n function getPointRelativeToAbsolute( point, element ) {\n var offset = $.getElementOffset( element );\n return point.minus( offset );\n }\n\n /**\n * @private\n * @inner\n */\n function getCenterPoint( point1, point2 ) {\n return new $.Point( ( point1.x + point2.x ) / 2, ( point1.y + point2.y ) / 2 );\n }\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Device-specific DOM event handlers\n///////////////////////////////////////////////////////////////////////////////\n\n /**\n * @private\n * @inner\n */\n function onClick( tracker, event ) {\n if ( tracker.clickHandler ) {\n $.cancelEvent( event );\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onDblClick( tracker, event ) {\n if ( tracker.dblClickHandler ) {\n $.cancelEvent( event );\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onKeyDown( tracker, event ) {\n //$.console.log( \"keydown %s %s %s %s %s\", event.keyCode, event.charCode, event.ctrlKey, event.shiftKey, event.altKey );\n var propagate;\n if ( tracker.keyDownHandler ) {\n event = $.getEvent( event );\n propagate = tracker.keyDownHandler(\n {\n eventSource: tracker,\n keyCode: event.keyCode ? event.keyCode : event.charCode,\n ctrl: event.ctrlKey,\n shift: event.shiftKey,\n alt: event.altKey,\n meta: event.metaKey,\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( !propagate ) {\n $.cancelEvent( event );\n }\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onKeyUp( tracker, event ) {\n //$.console.log( \"keyup %s %s %s %s %s\", event.keyCode, event.charCode, event.ctrlKey, event.shiftKey, event.altKey );\n var propagate;\n if ( tracker.keyUpHandler ) {\n event = $.getEvent( event );\n propagate = tracker.keyUpHandler(\n {\n eventSource: tracker,\n keyCode: event.keyCode ? event.keyCode : event.charCode,\n ctrl: event.ctrlKey,\n shift: event.shiftKey,\n alt: event.altKey,\n meta: event.metaKey,\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( !propagate ) {\n $.cancelEvent( event );\n }\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onKeyPress( tracker, event ) {\n //$.console.log( \"keypress %s %s %s %s %s\", event.keyCode, event.charCode, event.ctrlKey, event.shiftKey, event.altKey );\n var propagate;\n if ( tracker.keyHandler ) {\n event = $.getEvent( event );\n propagate = tracker.keyHandler(\n {\n eventSource: tracker,\n keyCode: event.keyCode ? event.keyCode : event.charCode,\n ctrl: event.ctrlKey,\n shift: event.shiftKey,\n alt: event.altKey,\n meta: event.metaKey,\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( !propagate ) {\n $.cancelEvent( event );\n }\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onFocus( tracker, event ) {\n //console.log( \"focus %s\", event );\n var propagate;\n if ( tracker.focusHandler ) {\n event = $.getEvent( event );\n propagate = tracker.focusHandler(\n {\n eventSource: tracker,\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onBlur( tracker, event ) {\n //console.log( \"blur %s\", event );\n var propagate;\n if ( tracker.blurHandler ) {\n event = $.getEvent( event );\n propagate = tracker.blurHandler(\n {\n eventSource: tracker,\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n }\n\n\n /**\n * Handler for 'wheel' events\n *\n * @private\n * @inner\n */\n function onWheel( tracker, event ) {\n handleWheelEvent( tracker, event, event );\n }\n\n\n /**\n * Handler for 'mousewheel', 'DOMMouseScroll', and 'MozMousePixelScroll' events\n *\n * @private\n * @inner\n */\n function onMouseWheel( tracker, event ) {\n event = $.getEvent( event );\n\n // Simulate a 'wheel' event\n var simulatedEvent = {\n target: event.target || event.srcElement,\n type: \"wheel\",\n shiftKey: event.shiftKey || false,\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX ? event.pageX : event.clientX,\n pageY: event.pageY ? event.pageY : event.clientY,\n deltaMode: event.type == \"MozMousePixelScroll\" ? 0 : 1, // 0=pixel, 1=line, 2=page\n deltaX: 0,\n deltaZ: 0\n };\n\n // Calculate deltaY\n if ( $.MouseTracker.wheelEventName == \"mousewheel\" ) {\n simulatedEvent.deltaY = -event.wheelDelta / $.DEFAULT_SETTINGS.pixelsPerWheelLine;\n } else {\n simulatedEvent.deltaY = event.detail;\n }\n\n handleWheelEvent( tracker, simulatedEvent, event );\n }\n\n\n /**\n * Handles 'wheel' events.\n * The event may be simulated by the legacy mouse wheel event handler (onMouseWheel()).\n *\n * @private\n * @inner\n */\n function handleWheelEvent( tracker, event, originalEvent ) {\n var nDelta = 0,\n propagate;\n\n // The nDelta variable is gated to provide smooth z-index scrolling\n // since the mouse wheel allows for substantial deltas meant for rapid\n // y-index scrolling.\n // event.deltaMode: 0=pixel, 1=line, 2=page\n // TODO: Deltas in pixel mode should be accumulated then a scroll value computed after $.DEFAULT_SETTINGS.pixelsPerWheelLine threshold reached\n nDelta = event.deltaY < 0 ? 1 : -1;\n\n if ( tracker.scrollHandler ) {\n propagate = tracker.scrollHandler(\n {\n eventSource: tracker,\n pointerType: 'mouse',\n position: getMouseRelative( event, tracker.element ),\n scroll: nDelta,\n shift: event.shiftKey,\n isTouchEvent: false,\n originalEvent: originalEvent,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( originalEvent );\n }\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function isParentChild( parent, child )\n {\n if ( parent === child ) {\n return false;\n }\n while ( child && child !== parent ) {\n child = child.parentNode;\n }\n return child === parent;\n }\n\n\n /**\n * Only used on IE 8\n *\n * @private\n * @inner\n */\n function onMouseEnter( tracker, event ) {\n event = $.getEvent( event );\n\n handleMouseEnter( tracker, event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onMouseOver( tracker, event ) {\n event = $.getEvent( event );\n\n if ( event.currentTarget === event.relatedTarget || isParentChild( event.currentTarget, event.relatedTarget ) ) {\n return;\n }\n\n handleMouseEnter( tracker, event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handleMouseEnter( tracker, event ) {\n var gPoint = {\n id: $.MouseTracker.mousePointerId,\n type: 'mouse',\n isPrimary: true,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n updatePointersEnter( tracker, event, [ gPoint ] );\n }\n\n\n /**\n * Only used on IE 8\n *\n * @private\n * @inner\n */\n function onMouseLeave( tracker, event ) {\n event = $.getEvent( event );\n\n handleMouseExit( tracker, event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onMouseOut( tracker, event ) {\n event = $.getEvent( event );\n\n if ( event.currentTarget === event.relatedTarget || isParentChild( event.currentTarget, event.relatedTarget ) ) {\n return;\n }\n\n handleMouseExit( tracker, event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handleMouseExit( tracker, event ) {\n var gPoint = {\n id: $.MouseTracker.mousePointerId,\n type: 'mouse',\n isPrimary: true,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n updatePointersExit( tracker, event, [ gPoint ] );\n }\n\n\n /**\n * Returns a W3C DOM level 3 standard button value given an event.button property:\n * -1 == none, 0 == primary/left, 1 == middle, 2 == secondary/right, 3 == X1/back, 4 == X2/forward, 5 == eraser (pen)\n * @private\n * @inner\n */\n function getStandardizedButton( button ) {\n if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) {\n // On IE 8, 0 == none, 1 == left, 2 == right, 3 == left and right, 4 == middle, 5 == left and middle, 6 == right and middle, 7 == all three\n // TODO: Support chorded (multiple) button presses on IE 8?\n if ( button === 1 ) {\n return 0;\n } else if ( button === 2 ) {\n return 2;\n } else if ( button === 4 ) {\n return 1;\n } else {\n return -1;\n }\n } else {\n return button;\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onMouseDown( tracker, event ) {\n var gPoint;\n\n event = $.getEvent( event );\n\n gPoint = {\n id: $.MouseTracker.mousePointerId,\n type: 'mouse',\n isPrimary: true,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n if ( updatePointersDown( tracker, event, [ gPoint ], getStandardizedButton( event.button ) ) ) {\n $.stopEvent( event );\n capturePointer( tracker, 'mouse' );\n }\n\n if ( tracker.clickHandler || tracker.dblClickHandler || tracker.pressHandler || tracker.dragHandler || tracker.dragEndHandler ) {\n $.cancelEvent( event );\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onMouseUp( tracker, event ) {\n handleMouseUp( tracker, event );\n }\n\n /**\n * This handler is attached to the window object (on the capture phase) to emulate mouse capture.\n * onMouseUp is still attached to the tracked element, so stop propagation to avoid processing twice.\n *\n * @private\n * @inner\n */\n function onMouseUpCaptured( tracker, event ) {\n handleMouseUp( tracker, event );\n $.stopEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handleMouseUp( tracker, event ) {\n var gPoint;\n\n event = $.getEvent( event );\n\n gPoint = {\n id: $.MouseTracker.mousePointerId,\n type: 'mouse',\n isPrimary: true,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n if ( updatePointersUp( tracker, event, [ gPoint ], getStandardizedButton( event.button ) ) ) {\n releasePointer( tracker, 'mouse' );\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onMouseMove( tracker, event ) {\n handleMouseMove( tracker, event );\n }\n\n\n /**\n * This handler is attached to the window object (on the capture phase) to emulate mouse capture.\n * onMouseMove is still attached to the tracked element, so stop propagation to avoid processing twice.\n *\n * @private\n * @inner\n */\n function onMouseMoveCaptured( tracker, event ) {\n handleMouseMove( tracker, event );\n $.stopEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handleMouseMove( tracker, event ) {\n var gPoint;\n\n event = $.getEvent( event );\n\n gPoint = {\n id: $.MouseTracker.mousePointerId,\n type: 'mouse',\n isPrimary: true,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n updatePointersMove( tracker, event, [ gPoint ] );\n }\n\n\n /**\n * @private\n * @inner\n */\n function abortContacts( tracker, event, pointsList ) {\n var i,\n gPointCount = pointsList.getLength(),\n abortGPoints = [];\n\n // Check contact count for hoverable pointer types before aborting\n if (pointsList.type === 'touch' || pointsList.contacts > 0) {\n for ( i = 0; i < gPointCount; i++ ) {\n abortGPoints.push( pointsList.getByIndex( i ) );\n }\n\n if ( abortGPoints.length > 0 ) {\n // simulate touchend/mouseup\n updatePointersUp( tracker, event, abortGPoints, 0 ); // 0 means primary button press/release or touch contact\n // release pointer capture\n pointsList.captureCount = 1;\n releasePointer( tracker, pointsList.type );\n // simulate touchleave/mouseout\n updatePointersExit( tracker, event, abortGPoints );\n }\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onTouchStart( tracker, event ) {\n var time,\n i,\n j,\n touchCount = event.changedTouches.length,\n gPoints = [],\n parentGPoints,\n pointsList = tracker.getActivePointersListByType( 'touch' );\n\n time = $.now();\n\n if ( pointsList.getLength() > event.touches.length - touchCount ) {\n $.console.warn('Tracked touch contact count doesn\\'t match event.touches.length. Removing all tracked touch pointers.');\n abortContacts( tracker, event, pointsList );\n }\n\n for ( i = 0; i < touchCount; i++ ) {\n gPoints.push( {\n id: event.changedTouches[ i ].identifier,\n type: 'touch',\n // isPrimary not set - let the updatePointers functions determine it\n currentPos: getMouseAbsolute( event.changedTouches[ i ] ),\n currentTime: time\n } );\n }\n\n // simulate touchenter on our tracked element\n updatePointersEnter( tracker, event, gPoints );\n\n // simulate touchenter on our tracked element's tracked ancestor elements\n for ( i = 0; i < MOUSETRACKERS.length; i++ ) {\n if ( MOUSETRACKERS[ i ] !== tracker && MOUSETRACKERS[ i ].isTracking() && isParentChild( MOUSETRACKERS[ i ].element, tracker.element ) ) {\n parentGPoints = [];\n for ( j = 0; j < touchCount; j++ ) {\n parentGPoints.push( {\n id: event.changedTouches[ j ].identifier,\n type: 'touch',\n // isPrimary not set - let the updatePointers functions determine it\n currentPos: getMouseAbsolute( event.changedTouches[ j ] ),\n currentTime: time\n } );\n }\n updatePointersEnter( MOUSETRACKERS[ i ], event, parentGPoints );\n }\n }\n\n if ( updatePointersDown( tracker, event, gPoints, 0 ) ) { // 0 means primary button press/release or touch contact\n $.stopEvent( event );\n capturePointer( tracker, 'touch', touchCount );\n }\n\n $.cancelEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onTouchEnd( tracker, event ) {\n handleTouchEnd( tracker, event );\n }\n\n\n /**\n * This handler is attached to the window object (on the capture phase) to emulate pointer capture.\n * onTouchEnd is still attached to the tracked element, so stop propagation to avoid processing twice.\n *\n * @private\n * @inner\n */\n function onTouchEndCaptured( tracker, event ) {\n handleTouchEnd( tracker, event );\n $.stopEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handleTouchEnd( tracker, event ) {\n var time,\n i,\n j,\n touchCount = event.changedTouches.length,\n gPoints = [],\n parentGPoints;\n\n time = $.now();\n\n for ( i = 0; i < touchCount; i++ ) {\n gPoints.push( {\n id: event.changedTouches[ i ].identifier,\n type: 'touch',\n // isPrimary not set - let the updatePointers functions determine it\n currentPos: getMouseAbsolute( event.changedTouches[ i ] ),\n currentTime: time\n } );\n }\n\n if ( updatePointersUp( tracker, event, gPoints, 0 ) ) {\n releasePointer( tracker, 'touch', touchCount );\n }\n\n // simulate touchleave on our tracked element\n updatePointersExit( tracker, event, gPoints );\n\n // simulate touchleave on our tracked element's tracked ancestor elements\n for ( i = 0; i < MOUSETRACKERS.length; i++ ) {\n if ( MOUSETRACKERS[ i ] !== tracker && MOUSETRACKERS[ i ].isTracking() && isParentChild( MOUSETRACKERS[ i ].element, tracker.element ) ) {\n parentGPoints = [];\n for ( j = 0; j < touchCount; j++ ) {\n parentGPoints.push( {\n id: event.changedTouches[ j ].identifier,\n type: 'touch',\n // isPrimary not set - let the updatePointers functions determine it\n currentPos: getMouseAbsolute( event.changedTouches[ j ] ),\n currentTime: time\n } );\n }\n updatePointersExit( MOUSETRACKERS[ i ], event, parentGPoints );\n }\n }\n\n $.cancelEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onTouchMove( tracker, event ) {\n handleTouchMove( tracker, event );\n }\n\n\n /**\n * This handler is attached to the window object (on the capture phase) to emulate pointer capture.\n * onTouchMove is still attached to the tracked element, so stop propagation to avoid processing twice.\n *\n * @private\n * @inner\n */\n function onTouchMoveCaptured( tracker, event ) {\n handleTouchMove( tracker, event );\n $.stopEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handleTouchMove( tracker, event ) {\n var i,\n touchCount = event.changedTouches.length,\n gPoints = [];\n\n for ( i = 0; i < touchCount; i++ ) {\n gPoints.push( {\n id: event.changedTouches[ i ].identifier,\n type: 'touch',\n // isPrimary not set - let the updatePointers functions determine it\n currentPos: getMouseAbsolute( event.changedTouches[ i ] ),\n currentTime: $.now()\n } );\n }\n\n updatePointersMove( tracker, event, gPoints );\n\n $.cancelEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onTouchCancel( tracker, event ) {\n var pointsList = tracker.getActivePointersListByType('touch');\n\n abortContacts( tracker, event, pointsList );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onGestureStart( tracker, event ) {\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n\n\n /**\n * @private\n * @inner\n */\n function onGestureChange( tracker, event ) {\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n\n\n /**\n * @private\n * @inner\n */\n function onPointerOver( tracker, event ) {\n var gPoint;\n\n if ( event.currentTarget === event.relatedTarget || isParentChild( event.currentTarget, event.relatedTarget ) ) {\n return;\n }\n\n gPoint = {\n id: event.pointerId,\n type: getPointerType( event ),\n isPrimary: event.isPrimary,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n updatePointersEnter( tracker, event, [ gPoint ] );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onPointerOut( tracker, event ) {\n var gPoint;\n\n if ( event.currentTarget === event.relatedTarget || isParentChild( event.currentTarget, event.relatedTarget ) ) {\n return;\n }\n\n gPoint = {\n id: event.pointerId,\n type: getPointerType( event ),\n isPrimary: event.isPrimary,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n updatePointersExit( tracker, event, [ gPoint ] );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onPointerDown( tracker, event ) {\n var gPoint;\n\n gPoint = {\n id: event.pointerId,\n type: getPointerType( event ),\n isPrimary: event.isPrimary,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n if ( updatePointersDown( tracker, event, [ gPoint ], event.button ) ) {\n $.stopEvent( event );\n capturePointer( tracker, gPoint.type );\n }\n\n if ( tracker.clickHandler || tracker.dblClickHandler || tracker.pressHandler || tracker.dragHandler || tracker.dragEndHandler || tracker.pinchHandler ) {\n $.cancelEvent( event );\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onPointerUp( tracker, event ) {\n handlePointerUp( tracker, event );\n }\n\n\n /**\n * This handler is attached to the window object (on the capture phase) to emulate mouse capture.\n * onPointerUp is still attached to the tracked element, so stop propagation to avoid processing twice.\n *\n * @private\n * @inner\n */\n function onPointerUpCaptured( tracker, event ) {\n var pointsList = tracker.getActivePointersListByType( getPointerType( event ) );\n if ( pointsList.getById( event.pointerId ) ) {\n handlePointerUp( tracker, event );\n }\n $.stopEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handlePointerUp( tracker, event ) {\n var gPoint;\n\n gPoint = {\n id: event.pointerId,\n type: getPointerType( event ),\n isPrimary: event.isPrimary,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n if ( updatePointersUp( tracker, event, [ gPoint ], event.button ) ) {\n releasePointer( tracker, gPoint.type );\n }\n }\n\n\n /**\n * @private\n * @inner\n */\n function onPointerMove( tracker, event ) {\n handlePointerMove( tracker, event );\n }\n\n\n /**\n * This handler is attached to the window object (on the capture phase) to emulate mouse capture.\n * onPointerMove is still attached to the tracked element, so stop propagation to avoid processing twice.\n *\n * @private\n * @inner\n */\n function onPointerMoveCaptured( tracker, event ) {\n var pointsList = tracker.getActivePointersListByType( getPointerType( event ) );\n if ( pointsList.getById( event.pointerId ) ) {\n handlePointerMove( tracker, event );\n }\n $.stopEvent( event );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handlePointerMove( tracker, event ) {\n // Pointer changed coordinates, button state, pressure, tilt, or contact geometry (e.g. width and height)\n var gPoint;\n\n gPoint = {\n id: event.pointerId,\n type: getPointerType( event ),\n isPrimary: event.isPrimary,\n currentPos: getMouseAbsolute( event ),\n currentTime: $.now()\n };\n\n updatePointersMove( tracker, event, [ gPoint ] );\n }\n\n\n /**\n * @private\n * @inner\n */\n function onPointerCancel( tracker, event ) {\n var gPoint;\n\n gPoint = {\n id: event.pointerId,\n type: getPointerType( event )\n };\n\n updatePointersCancel( tracker, event, [ gPoint ] );\n }\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Device-agnostic DOM event handlers\n///////////////////////////////////////////////////////////////////////////////\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker.GesturePointList} pointsList\n * The GesturePointList to track the pointer in.\n * @param {OpenSeadragon.MouseTracker.GesturePoint} gPoint\n * Gesture point to track.\n * @returns {Number} Number of gesture points in pointsList.\n */\n function startTrackingPointer( pointsList, gPoint ) {\n\n // If isPrimary is not known for the pointer then set it according to our rules:\n // true if the first pointer in the gesture, otherwise false\n if ( !Object.prototype.hasOwnProperty.call( gPoint, 'isPrimary' ) ) {\n if ( pointsList.getLength() === 0 ) {\n gPoint.isPrimary = true;\n } else {\n gPoint.isPrimary = false;\n }\n }\n gPoint.speed = 0;\n gPoint.direction = 0;\n gPoint.contactPos = gPoint.currentPos;\n gPoint.contactTime = gPoint.currentTime;\n gPoint.lastPos = gPoint.currentPos;\n gPoint.lastTime = gPoint.currentTime;\n\n return pointsList.add( gPoint );\n }\n\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker.GesturePointList} pointsList\n * The GesturePointList to stop tracking the pointer on.\n * @param {OpenSeadragon.MouseTracker.GesturePoint} gPoint\n * Gesture point to stop tracking.\n * @returns {Number} Number of gesture points in pointsList.\n */\n function stopTrackingPointer( pointsList, gPoint ) {\n var listLength,\n primaryPoint;\n\n if ( pointsList.getById( gPoint.id ) ) {\n listLength = pointsList.removeById( gPoint.id );\n\n // If isPrimary is not known for the pointer and we just removed the primary pointer from the list then we need to set another pointer as primary\n if ( !Object.prototype.hasOwnProperty.call( gPoint, 'isPrimary' ) ) {\n primaryPoint = pointsList.getPrimary();\n if ( !primaryPoint ) {\n primaryPoint = pointsList.getByIndex( 0 );\n if ( primaryPoint ) {\n primaryPoint.isPrimary = true;\n }\n }\n }\n } else {\n listLength = pointsList.getLength();\n }\n\n return listLength;\n }\n\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker} tracker\n * A reference to the MouseTracker instance.\n * @param {Object} event\n * A reference to the originating DOM event.\n * @param {Array.} gPoints\n * Gesture points associated with the event.\n */\n function updatePointersEnter( tracker, event, gPoints ) {\n var pointsList = tracker.getActivePointersListByType( gPoints[ 0 ].type ),\n i,\n gPointCount = gPoints.length,\n curGPoint,\n updateGPoint,\n propagate;\n\n for ( i = 0; i < gPointCount; i++ ) {\n curGPoint = gPoints[ i ];\n updateGPoint = pointsList.getById( curGPoint.id );\n\n if ( updateGPoint ) {\n // Already tracking the pointer...update it\n updateGPoint.insideElement = true;\n updateGPoint.lastPos = updateGPoint.currentPos;\n updateGPoint.lastTime = updateGPoint.currentTime;\n updateGPoint.currentPos = curGPoint.currentPos;\n updateGPoint.currentTime = curGPoint.currentTime;\n\n curGPoint = updateGPoint;\n } else {\n // Initialize for tracking and add to the tracking list\n curGPoint.captured = false;\n curGPoint.insideElementPressed = false;\n curGPoint.insideElement = true;\n startTrackingPointer( pointsList, curGPoint );\n }\n\n // Enter\n if ( tracker.enterHandler ) {\n propagate = tracker.enterHandler(\n {\n eventSource: tracker,\n pointerType: curGPoint.type,\n position: getPointRelativeToAbsolute( curGPoint.currentPos, tracker.element ),\n buttons: pointsList.buttons,\n pointers: tracker.getActivePointerCount(),\n insideElementPressed: curGPoint.insideElementPressed,\n buttonDownAny: pointsList.buttons !== 0,\n isTouchEvent: curGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n }\n }\n\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker} tracker\n * A reference to the MouseTracker instance.\n * @param {Object} event\n * A reference to the originating DOM event.\n * @param {Array.} gPoints\n * Gesture points associated with the event.\n */\n function updatePointersExit( tracker, event, gPoints ) {\n var pointsList = tracker.getActivePointersListByType(gPoints[0].type),\n i,\n gPointCount = gPoints.length,\n curGPoint,\n updateGPoint,\n propagate;\n\n for ( i = 0; i < gPointCount; i++ ) {\n curGPoint = gPoints[ i ];\n updateGPoint = pointsList.getById( curGPoint.id );\n\n if ( updateGPoint ) {\n // Already tracking the pointer. If captured then update it, else stop tracking it\n if ( updateGPoint.captured ) {\n updateGPoint.insideElement = false;\n updateGPoint.lastPos = updateGPoint.currentPos;\n updateGPoint.lastTime = updateGPoint.currentTime;\n updateGPoint.currentPos = curGPoint.currentPos;\n updateGPoint.currentTime = curGPoint.currentTime;\n } else {\n stopTrackingPointer( pointsList, updateGPoint );\n }\n\n curGPoint = updateGPoint;\n }\n\n // Exit\n if ( tracker.exitHandler ) {\n propagate = tracker.exitHandler(\n {\n eventSource: tracker,\n pointerType: curGPoint.type,\n position: curGPoint.currentPos && getPointRelativeToAbsolute( curGPoint.currentPos, tracker.element ),\n buttons: pointsList.buttons,\n pointers: tracker.getActivePointerCount(),\n insideElementPressed: updateGPoint ? updateGPoint.insideElementPressed : false,\n buttonDownAny: pointsList.buttons !== 0,\n isTouchEvent: curGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n }\n }\n\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker} tracker\n * A reference to the MouseTracker instance.\n * @param {Object} event\n * A reference to the originating DOM event.\n * @param {Array.} gPoints\n * Gesture points associated with the event.\n * @param {Number} buttonChanged\n * The button involved in the event: -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * Note on chorded button presses (a button pressed when another button is already pressed): In the W3C Pointer Events model,\n * only one pointerdown/pointerup event combo is fired. Chorded button state changes instead fire pointermove events.\n *\n * @returns {Boolean} True if pointers should be captured to the tracked element, otherwise false.\n */\n function updatePointersDown( tracker, event, gPoints, buttonChanged ) {\n var delegate = THIS[ tracker.hash ],\n propagate,\n pointsList = tracker.getActivePointersListByType( gPoints[ 0 ].type ),\n i,\n gPointCount = gPoints.length,\n curGPoint,\n updateGPoint;\n\n if ( typeof event.buttons !== 'undefined' ) {\n pointsList.buttons = event.buttons;\n } else {\n if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) {\n if ( buttonChanged === 0 ) {\n // Primary\n pointsList.buttons += 1;\n } else if ( buttonChanged === 1 ) {\n // Aux\n pointsList.buttons += 4;\n } else if ( buttonChanged === 2 ) {\n // Secondary\n pointsList.buttons += 2;\n } else if ( buttonChanged === 3 ) {\n // X1 (Back)\n pointsList.buttons += 8;\n } else if ( buttonChanged === 4 ) {\n // X2 (Forward)\n pointsList.buttons += 16;\n } else if ( buttonChanged === 5 ) {\n // Pen Eraser\n pointsList.buttons += 32;\n }\n } else {\n if ( buttonChanged === 0 ) {\n // Primary\n pointsList.buttons |= 1;\n } else if ( buttonChanged === 1 ) {\n // Aux\n pointsList.buttons |= 4;\n } else if ( buttonChanged === 2 ) {\n // Secondary\n pointsList.buttons |= 2;\n } else if ( buttonChanged === 3 ) {\n // X1 (Back)\n pointsList.buttons |= 8;\n } else if ( buttonChanged === 4 ) {\n // X2 (Forward)\n pointsList.buttons |= 16;\n } else if ( buttonChanged === 5 ) {\n // Pen Eraser\n pointsList.buttons |= 32;\n }\n }\n }\n\n // Some pointers may steal control from another pointer without firing the appropriate release events\n // e.g. Touching a screen while click-dragging with certain mice.\n var otherPointsLists = tracker.getActivePointersListsExceptType(gPoints[ 0 ].type);\n for (i = 0; i < otherPointsLists.length; i++) {\n //If another pointer has contact, simulate the release\n abortContacts(tracker, event, otherPointsLists[i]); // No-op if no active pointer\n }\n\n // Only capture and track primary button, pen, and touch contacts\n if ( buttonChanged !== 0 ) {\n // Aux Press\n if ( tracker.nonPrimaryPressHandler ) {\n propagate = tracker.nonPrimaryPressHandler(\n {\n eventSource: tracker,\n pointerType: gPoints[ 0 ].type,\n position: getPointRelativeToAbsolute( gPoints[ 0 ].currentPos, tracker.element ),\n button: buttonChanged,\n buttons: pointsList.buttons,\n isTouchEvent: gPoints[ 0 ].type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n return false;\n }\n\n for ( i = 0; i < gPointCount; i++ ) {\n curGPoint = gPoints[ i ];\n updateGPoint = pointsList.getById( curGPoint.id );\n\n if ( updateGPoint ) {\n // Already tracking the pointer...update it\n updateGPoint.captured = true;\n updateGPoint.insideElementPressed = true;\n updateGPoint.insideElement = true;\n updateGPoint.contactPos = curGPoint.currentPos;\n updateGPoint.contactTime = curGPoint.currentTime;\n updateGPoint.lastPos = updateGPoint.currentPos;\n updateGPoint.lastTime = updateGPoint.currentTime;\n updateGPoint.currentPos = curGPoint.currentPos;\n updateGPoint.currentTime = curGPoint.currentTime;\n\n curGPoint = updateGPoint;\n } else {\n // Initialize for tracking and add to the tracking list (no pointerover or pointermove event occurred before this)\n curGPoint.captured = true;\n curGPoint.insideElementPressed = true;\n curGPoint.insideElement = true;\n startTrackingPointer( pointsList, curGPoint );\n }\n\n pointsList.addContact();\n //$.console.log('contacts++ ', pointsList.contacts);\n\n if ( tracker.dragHandler || tracker.dragEndHandler || tracker.pinchHandler ) {\n $.MouseTracker.gesturePointVelocityTracker.addPoint( tracker, curGPoint );\n }\n\n if ( pointsList.contacts === 1 ) {\n // Press\n if ( tracker.pressHandler ) {\n propagate = tracker.pressHandler(\n {\n eventSource: tracker,\n pointerType: curGPoint.type,\n position: getPointRelativeToAbsolute( curGPoint.contactPos, tracker.element ),\n buttons: pointsList.buttons,\n isTouchEvent: curGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n } else if ( pointsList.contacts === 2 ) {\n if ( tracker.pinchHandler && curGPoint.type === 'touch' ) {\n // Initialize for pinch\n delegate.pinchGPoints = pointsList.asArray();\n delegate.lastPinchDist = delegate.currentPinchDist = delegate.pinchGPoints[ 0 ].currentPos.distanceTo( delegate.pinchGPoints[ 1 ].currentPos );\n delegate.lastPinchCenter = delegate.currentPinchCenter = getCenterPoint( delegate.pinchGPoints[ 0 ].currentPos, delegate.pinchGPoints[ 1 ].currentPos );\n }\n }\n }\n\n return true;\n }\n\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker} tracker\n * A reference to the MouseTracker instance.\n * @param {Object} event\n * A reference to the originating DOM event.\n * @param {Array.} gPoints\n * Gesture points associated with the event.\n * @param {Number} buttonChanged\n * The button involved in the event: -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * Note on chorded button presses (a button pressed when another button is already pressed): In the W3C Pointer Events model,\n * only one pointerdown/pointerup event combo is fired. Chorded button state changes instead fire pointermove events.\n *\n * @returns {Boolean} True if pointer capture should be released from the tracked element, otherwise false.\n */\n function updatePointersUp( tracker, event, gPoints, buttonChanged ) {\n var delegate = THIS[ tracker.hash ],\n pointsList = tracker.getActivePointersListByType( gPoints[ 0 ].type ),\n propagate,\n releasePoint,\n releaseTime,\n i,\n gPointCount = gPoints.length,\n curGPoint,\n updateGPoint,\n releaseCapture = false,\n wasCaptured = false,\n quick;\n\n if ( typeof event.buttons !== 'undefined' ) {\n pointsList.buttons = event.buttons;\n } else {\n if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) {\n if ( buttonChanged === 0 ) {\n // Primary\n pointsList.buttons -= 1;\n } else if ( buttonChanged === 1 ) {\n // Aux\n pointsList.buttons -= 4;\n } else if ( buttonChanged === 2 ) {\n // Secondary\n pointsList.buttons -= 2;\n } else if ( buttonChanged === 3 ) {\n // X1 (Back)\n pointsList.buttons -= 8;\n } else if ( buttonChanged === 4 ) {\n // X2 (Forward)\n pointsList.buttons -= 16;\n } else if ( buttonChanged === 5 ) {\n // Pen Eraser\n pointsList.buttons -= 32;\n }\n } else {\n if ( buttonChanged === 0 ) {\n // Primary\n pointsList.buttons ^= ~1;\n } else if ( buttonChanged === 1 ) {\n // Aux\n pointsList.buttons ^= ~4;\n } else if ( buttonChanged === 2 ) {\n // Secondary\n pointsList.buttons ^= ~2;\n } else if ( buttonChanged === 3 ) {\n // X1 (Back)\n pointsList.buttons ^= ~8;\n } else if ( buttonChanged === 4 ) {\n // X2 (Forward)\n pointsList.buttons ^= ~16;\n } else if ( buttonChanged === 5 ) {\n // Pen Eraser\n pointsList.buttons ^= ~32;\n }\n }\n }\n\n // Only capture and track primary button, pen, and touch contacts\n if ( buttonChanged !== 0 ) {\n // Aux Release\n if ( tracker.nonPrimaryReleaseHandler ) {\n propagate = tracker.nonPrimaryReleaseHandler(\n {\n eventSource: tracker,\n pointerType: gPoints[ 0 ].type,\n position: getPointRelativeToAbsolute(gPoints[0].currentPos, tracker.element),\n button: buttonChanged,\n buttons: pointsList.buttons,\n isTouchEvent: gPoints[ 0 ].type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n // A primary mouse button may have been released while the non-primary button was down\n var otherPointsList = tracker.getActivePointersListByType(\"mouse\");\n // Stop tracking the mouse; see https://github.com/openseadragon/openseadragon/pull/1223\n abortContacts(tracker, event, otherPointsList); // No-op if no active pointer\n\n return false;\n }\n\n // OS-specific gestures (e.g. swipe up with four fingers in iPadOS 13)\n if (typeof gPoints[ 0 ].currentPos === \"undefined\") {\n abortContacts(tracker, event, pointsList);\n\n return false;\n }\n\n for ( i = 0; i < gPointCount; i++ ) {\n curGPoint = gPoints[ i ];\n updateGPoint = pointsList.getById( curGPoint.id );\n if ( updateGPoint ) {\n // Update the pointer, stop tracking it if not still in this element\n if ( updateGPoint.captured ) {\n updateGPoint.captured = false;\n releaseCapture = true;\n wasCaptured = true;\n }\n updateGPoint.lastPos = updateGPoint.currentPos;\n updateGPoint.lastTime = updateGPoint.currentTime;\n updateGPoint.currentPos = curGPoint.currentPos;\n updateGPoint.currentTime = curGPoint.currentTime;\n if ( !updateGPoint.insideElement ) {\n stopTrackingPointer( pointsList, updateGPoint );\n }\n\n releasePoint = updateGPoint.currentPos;\n releaseTime = updateGPoint.currentTime;\n\n if ( wasCaptured ) {\n // Pointer was activated in our element but could have been removed in any element since events are captured to our element\n\n pointsList.removeContact();\n //$.console.log('contacts-- ', pointsList.contacts);\n\n if ( tracker.dragHandler || tracker.dragEndHandler || tracker.pinchHandler ) {\n $.MouseTracker.gesturePointVelocityTracker.removePoint( tracker, updateGPoint );\n }\n\n if ( pointsList.contacts === 0 ) {\n\n // Release (pressed in our element)\n if ( tracker.releaseHandler ) {\n propagate = tracker.releaseHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( releasePoint, tracker.element ),\n buttons: pointsList.buttons,\n insideElementPressed: updateGPoint.insideElementPressed,\n insideElementReleased: updateGPoint.insideElement,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n // Drag End\n if ( tracker.dragEndHandler && !updateGPoint.currentPos.equals( updateGPoint.contactPos ) ) {\n propagate = tracker.dragEndHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( updateGPoint.currentPos, tracker.element ),\n speed: updateGPoint.speed,\n direction: updateGPoint.direction,\n shift: event.shiftKey,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n // Click / Double-Click\n if ( ( tracker.clickHandler || tracker.dblClickHandler ) && updateGPoint.insideElement ) {\n quick = releaseTime - updateGPoint.contactTime <= tracker.clickTimeThreshold &&\n updateGPoint.contactPos.distanceTo( releasePoint ) <= tracker.clickDistThreshold;\n\n // Click\n if ( tracker.clickHandler ) {\n propagate = tracker.clickHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( updateGPoint.currentPos, tracker.element ),\n quick: quick,\n shift: event.shiftKey,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n // Double-Click\n if ( tracker.dblClickHandler && quick ) {\n pointsList.clicks++;\n if ( pointsList.clicks === 1 ) {\n delegate.lastClickPos = releasePoint;\n /*jshint loopfunc:true*/\n delegate.dblClickTimeOut = setTimeout( function() {\n pointsList.clicks = 0;\n }, tracker.dblClickTimeThreshold );\n /*jshint loopfunc:false*/\n } else if ( pointsList.clicks === 2 ) {\n clearTimeout( delegate.dblClickTimeOut );\n pointsList.clicks = 0;\n if ( delegate.lastClickPos.distanceTo( releasePoint ) <= tracker.dblClickDistThreshold ) {\n propagate = tracker.dblClickHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( updateGPoint.currentPos, tracker.element ),\n shift: event.shiftKey,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n delegate.lastClickPos = null;\n }\n }\n }\n } else if ( pointsList.contacts === 2 ) {\n if ( tracker.pinchHandler && updateGPoint.type === 'touch' ) {\n // Reset for pinch\n delegate.pinchGPoints = pointsList.asArray();\n delegate.lastPinchDist = delegate.currentPinchDist = delegate.pinchGPoints[ 0 ].currentPos.distanceTo( delegate.pinchGPoints[ 1 ].currentPos );\n delegate.lastPinchCenter = delegate.currentPinchCenter = getCenterPoint( delegate.pinchGPoints[ 0 ].currentPos, delegate.pinchGPoints[ 1 ].currentPos );\n }\n }\n } else {\n // Pointer was activated in another element but removed in our element\n\n // Release (pressed in another element)\n if ( tracker.releaseHandler ) {\n propagate = tracker.releaseHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( releasePoint, tracker.element ),\n buttons: pointsList.buttons,\n insideElementPressed: updateGPoint.insideElementPressed,\n insideElementReleased: updateGPoint.insideElement,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n }\n }\n }\n\n return releaseCapture;\n }\n\n\n /**\n * Call when pointer(s) change coordinates, button state, pressure, tilt, or contact geometry (e.g. width and height)\n *\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker} tracker\n * A reference to the MouseTracker instance.\n * @param {Object} event\n * A reference to the originating DOM event.\n * @param {Array.} gPoints\n * Gesture points associated with the event.\n */\n function updatePointersMove( tracker, event, gPoints ) {\n var delegate = THIS[ tracker.hash ],\n pointsList = tracker.getActivePointersListByType( gPoints[ 0 ].type ),\n i,\n gPointCount = gPoints.length,\n curGPoint,\n updateGPoint,\n gPointArray,\n delta,\n propagate;\n\n if ( typeof event.buttons !== 'undefined' ) {\n pointsList.buttons = event.buttons;\n }\n\n for ( i = 0; i < gPointCount; i++ ) {\n curGPoint = gPoints[ i ];\n updateGPoint = pointsList.getById( curGPoint.id );\n\n if ( updateGPoint ) {\n // Already tracking the pointer...update it\n if ( Object.prototype.hasOwnProperty.call( curGPoint, 'isPrimary' ) ) {\n updateGPoint.isPrimary = curGPoint.isPrimary;\n }\n updateGPoint.lastPos = updateGPoint.currentPos;\n updateGPoint.lastTime = updateGPoint.currentTime;\n updateGPoint.currentPos = curGPoint.currentPos;\n updateGPoint.currentTime = curGPoint.currentTime;\n } else {\n // Initialize for tracking and add to the tracking list (no pointerover or pointerdown event occurred before this)\n curGPoint.captured = false;\n curGPoint.insideElementPressed = false;\n curGPoint.insideElement = true;\n startTrackingPointer( pointsList, curGPoint );\n }\n }\n\n // Stop (mouse only)\n if ( tracker.stopHandler && gPoints[ 0 ].type === 'mouse' ) {\n clearTimeout( tracker.stopTimeOut );\n tracker.stopTimeOut = setTimeout( function() {\n handlePointerStop( tracker, event, gPoints[ 0 ].type );\n }, tracker.stopDelay );\n }\n\n if ( pointsList.contacts === 0 ) {\n // Move (no contacts: hovering mouse or other hover-capable device)\n if ( tracker.moveHandler ) {\n propagate = tracker.moveHandler(\n {\n eventSource: tracker,\n pointerType: gPoints[ 0 ].type,\n position: getPointRelativeToAbsolute( gPoints[ 0 ].currentPos, tracker.element ),\n buttons: pointsList.buttons,\n isTouchEvent: gPoints[ 0 ].type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n } else if ( pointsList.contacts === 1 ) {\n // Move (1 contact)\n if ( tracker.moveHandler ) {\n updateGPoint = pointsList.asArray()[ 0 ];\n propagate = tracker.moveHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( updateGPoint.currentPos, tracker.element ),\n buttons: pointsList.buttons,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n // Drag\n if ( tracker.dragHandler ) {\n updateGPoint = pointsList.asArray()[ 0 ];\n delta = updateGPoint.currentPos.minus( updateGPoint.lastPos );\n propagate = tracker.dragHandler(\n {\n eventSource: tracker,\n pointerType: updateGPoint.type,\n position: getPointRelativeToAbsolute( updateGPoint.currentPos, tracker.element ),\n buttons: pointsList.buttons,\n delta: delta,\n speed: updateGPoint.speed,\n direction: updateGPoint.direction,\n shift: event.shiftKey,\n isTouchEvent: updateGPoint.type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n } else if ( pointsList.contacts === 2 ) {\n // Move (2 contacts, use center)\n if ( tracker.moveHandler ) {\n gPointArray = pointsList.asArray();\n propagate = tracker.moveHandler(\n {\n eventSource: tracker,\n pointerType: gPointArray[ 0 ].type,\n position: getPointRelativeToAbsolute( getCenterPoint( gPointArray[ 0 ].currentPos, gPointArray[ 1 ].currentPos ), tracker.element ),\n buttons: pointsList.buttons,\n isTouchEvent: gPointArray[ 0 ].type === 'touch',\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n\n // Pinch\n if ( tracker.pinchHandler && gPoints[ 0 ].type === 'touch' ) {\n delta = delegate.pinchGPoints[ 0 ].currentPos.distanceTo( delegate.pinchGPoints[ 1 ].currentPos );\n if ( delta != delegate.currentPinchDist ) {\n delegate.lastPinchDist = delegate.currentPinchDist;\n delegate.currentPinchDist = delta;\n delegate.lastPinchCenter = delegate.currentPinchCenter;\n delegate.currentPinchCenter = getCenterPoint( delegate.pinchGPoints[ 0 ].currentPos, delegate.pinchGPoints[ 1 ].currentPos );\n propagate = tracker.pinchHandler(\n {\n eventSource: tracker,\n pointerType: 'touch',\n gesturePoints: delegate.pinchGPoints,\n lastCenter: getPointRelativeToAbsolute( delegate.lastPinchCenter, tracker.element ),\n center: getPointRelativeToAbsolute( delegate.currentPinchCenter, tracker.element ),\n lastDistance: delegate.lastPinchDist,\n distance: delegate.currentPinchDist,\n shift: event.shiftKey,\n originalEvent: event,\n preventDefaultAction: false,\n userData: tracker.userData\n }\n );\n if ( propagate === false ) {\n $.cancelEvent( event );\n }\n }\n }\n }\n }\n\n\n /**\n * @function\n * @private\n * @inner\n * @param {OpenSeadragon.MouseTracker} tracker\n * A reference to the MouseTracker instance.\n * @param {Object} event\n * A reference to the originating DOM event.\n * @param {Array.} gPoints\n * Gesture points associated with the event.\n */\n function updatePointersCancel( tracker, event, gPoints ) {\n updatePointersUp( tracker, event, gPoints, 0 );\n updatePointersExit( tracker, event, gPoints );\n }\n\n\n /**\n * @private\n * @inner\n */\n function handlePointerStop( tracker, originalMoveEvent, pointerType ) {\n if ( tracker.stopHandler ) {\n tracker.stopHandler( {\n eventSource: tracker,\n pointerType: pointerType,\n position: getMouseRelative( originalMoveEvent, tracker.element ),\n buttons: tracker.getActivePointersListByType( pointerType ).buttons,\n isTouchEvent: pointerType === 'touch',\n originalEvent: originalMoveEvent,\n preventDefaultAction: false,\n userData: tracker.userData\n } );\n }\n }\n\n /**\n * True if inside an iframe, otherwise false.\n * @member {Boolean} isInIframe\n * @private\n * @inner\n */\n var isInIframe = (function() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n })();\n\n /**\n * @function\n * @private\n * @inner\n * @returns {Boolean} True if the target has access rights to events, otherwise false.\n */\n function canAccessEvents (target) {\n try {\n return target.addEventListener && target.removeEventListener;\n } catch (e) {\n return false;\n }\n }\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - Control\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * An enumeration of supported locations where controls can be anchored.\n * The anchoring is always relative to the container.\n * @member ControlAnchor\n * @memberof OpenSeadragon\n * @static\n * @type {Object}\n * @property {Number} NONE\n * @property {Number} TOP_LEFT\n * @property {Number} TOP_RIGHT\n * @property {Number} BOTTOM_LEFT\n * @property {Number} BOTTOM_RIGHT\n * @property {Number} ABSOLUTE\n */\n$.ControlAnchor = {\n NONE: 0,\n TOP_LEFT: 1,\n TOP_RIGHT: 2,\n BOTTOM_RIGHT: 3,\n BOTTOM_LEFT: 4,\n ABSOLUTE: 5\n};\n\n/**\n * @class Control\n * @classdesc A Control represents any interface element which is meant to allow the user\n * to interact with the zoomable interface. Any control can be anchored to any\n * element.\n *\n * @memberof OpenSeadragon\n * @param {Element} element - the control element to be anchored in the container.\n * @param {Object } options - All required and optional settings for configuring a control element.\n * @param {OpenSeadragon.ControlAnchor} [options.anchor=OpenSeadragon.ControlAnchor.NONE] - the position of the control\n * relative to the container.\n * @param {Boolean} [options.attachToViewer=true] - Whether the control should be added directly to the viewer, or\n * directly to the container\n * @param {Boolean} [options.autoFade=true] - Whether the control should have the autofade behavior\n * @param {Element} container - the element to control will be anchored too.\n */\n$.Control = function ( element, options, container ) {\n var parent = element.parentNode;\n if (typeof options === 'number')\n {\n $.console.error(\"Passing an anchor directly into the OpenSeadragon.Control constructor is deprecated; \" +\n \"please use an options object instead. \" +\n \"Support for this deprecated variant is scheduled for removal in December 2013\");\n options = {anchor: options};\n }\n options.attachToViewer = (typeof options.attachToViewer === 'undefined') ? true : options.attachToViewer;\n /**\n * True if the control should have autofade behavior.\n * @member {Boolean} autoFade\n * @memberof OpenSeadragon.Control#\n */\n this.autoFade = (typeof options.autoFade === 'undefined') ? true : options.autoFade;\n /**\n * The element providing the user interface with some type of control (e.g. a zoom-in button).\n * @member {Element} element\n * @memberof OpenSeadragon.Control#\n */\n this.element = element;\n /**\n * The position of the Control relative to its container.\n * @member {OpenSeadragon.ControlAnchor} anchor\n * @memberof OpenSeadragon.Control#\n */\n this.anchor = options.anchor;\n /**\n * The Control's containing element.\n * @member {Element} container\n * @memberof OpenSeadragon.Control#\n */\n this.container = container;\n /**\n * A neutral element surrounding the control element.\n * @member {Element} wrapper\n * @memberof OpenSeadragon.Control#\n */\n if ( this.anchor == $.ControlAnchor.ABSOLUTE ) {\n this.wrapper = $.makeNeutralElement( \"div\" );\n this.wrapper.style.position = \"absolute\";\n this.wrapper.style.top = typeof (options.top) == \"number\" ? (options.top + 'px') : options.top;\n this.wrapper.style.left = typeof (options.left) == \"number\" ? (options.left + 'px') : options.left;\n this.wrapper.style.height = typeof (options.height) == \"number\" ? (options.height + 'px') : options.height;\n this.wrapper.style.width = typeof (options.width) == \"number\" ? (options.width + 'px') : options.width;\n this.wrapper.style.margin = \"0px\";\n this.wrapper.style.padding = \"0px\";\n\n this.element.style.position = \"relative\";\n this.element.style.top = \"0px\";\n this.element.style.left = \"0px\";\n this.element.style.height = \"100%\";\n this.element.style.width = \"100%\";\n } else {\n this.wrapper = $.makeNeutralElement( \"div\" );\n this.wrapper.style.display = \"inline-block\";\n if ( this.anchor == $.ControlAnchor.NONE ) {\n // IE6 fix\n this.wrapper.style.width = this.wrapper.style.height = \"100%\";\n }\n }\n this.wrapper.appendChild( this.element );\n\n if (options.attachToViewer ) {\n if ( this.anchor == $.ControlAnchor.TOP_RIGHT ||\n this.anchor == $.ControlAnchor.BOTTOM_RIGHT ) {\n this.container.insertBefore(\n this.wrapper,\n this.container.firstChild\n );\n } else {\n this.container.appendChild( this.wrapper );\n }\n } else {\n parent.appendChild( this.wrapper );\n }\n};\n\n/** @lends OpenSeadragon.Control.prototype */\n$.Control.prototype = {\n\n /**\n * Removes the control from the container.\n * @function\n */\n destroy: function() {\n this.wrapper.removeChild( this.element );\n this.container.removeChild( this.wrapper );\n },\n\n /**\n * Determines if the control is currently visible.\n * @function\n * @return {Boolean} true if currently visible, false otherwise.\n */\n isVisible: function() {\n return this.wrapper.style.display != \"none\";\n },\n\n /**\n * Toggles the visibility of the control.\n * @function\n * @param {Boolean} visible - true to make visible, false to hide.\n */\n setVisible: function( visible ) {\n this.wrapper.style.display = visible ?\n ( this.anchor == $.ControlAnchor.ABSOLUTE ? 'block' : 'inline-block' ) :\n \"none\";\n },\n\n /**\n * Sets the opacity level for the control.\n * @function\n * @param {Number} opactiy - a value between 1 and 0 inclusively.\n */\n setOpacity: function( opacity ) {\n if ( this.element[ $.SIGNAL ] && $.Browser.vendor == $.BROWSERS.IE ) {\n $.setElementOpacity( this.element, opacity, true );\n } else {\n $.setElementOpacity( this.wrapper, opacity, true );\n }\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - ControlDock\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n /**\n * @class ControlDock\n * @classdesc Provides a container element (a <form> element) with support for the layout of control elements.\n *\n * @memberof OpenSeadragon\n */\n $.ControlDock = function( options ){\n var layouts = [ 'topleft', 'topright', 'bottomright', 'bottomleft'],\n layout,\n i;\n\n $.extend( true, this, {\n id: 'controldock-' + $.now() + '-' + Math.floor(Math.random() * 1000000),\n container: $.makeNeutralElement( 'div' ),\n controls: []\n }, options );\n\n // Disable the form's submit; otherwise button clicks and return keys\n // can trigger it.\n this.container.onsubmit = function() {\n return false;\n };\n\n if( this.element ){\n this.element = $.getElement( this.element );\n this.element.appendChild( this.container );\n this.element.style.position = 'relative';\n this.container.style.width = '100%';\n this.container.style.height = '100%';\n }\n\n for( i = 0; i < layouts.length; i++ ){\n layout = layouts[ i ];\n this.controls[ layout ] = $.makeNeutralElement( \"div\" );\n this.controls[ layout ].style.position = 'absolute';\n if ( layout.match( 'left' ) ){\n this.controls[ layout ].style.left = '0px';\n }\n if ( layout.match( 'right' ) ){\n this.controls[ layout ].style.right = '0px';\n }\n if ( layout.match( 'top' ) ){\n this.controls[ layout ].style.top = '0px';\n }\n if ( layout.match( 'bottom' ) ){\n this.controls[ layout ].style.bottom = '0px';\n }\n }\n\n this.container.appendChild( this.controls.topleft );\n this.container.appendChild( this.controls.topright );\n this.container.appendChild( this.controls.bottomright );\n this.container.appendChild( this.controls.bottomleft );\n };\n\n /** @lends OpenSeadragon.ControlDock.prototype */\n $.ControlDock.prototype = {\n\n /**\n * @function\n */\n addControl: function ( element, controlOptions ) {\n element = $.getElement( element );\n var div = null;\n\n if ( getControlIndex( this, element ) >= 0 ) {\n return; // they're trying to add a duplicate control\n }\n\n switch ( controlOptions.anchor ) {\n case $.ControlAnchor.TOP_RIGHT:\n div = this.controls.topright;\n element.style.position = \"relative\";\n element.style.paddingRight = \"0px\";\n element.style.paddingTop = \"0px\";\n break;\n case $.ControlAnchor.BOTTOM_RIGHT:\n div = this.controls.bottomright;\n element.style.position = \"relative\";\n element.style.paddingRight = \"0px\";\n element.style.paddingBottom = \"0px\";\n break;\n case $.ControlAnchor.BOTTOM_LEFT:\n div = this.controls.bottomleft;\n element.style.position = \"relative\";\n element.style.paddingLeft = \"0px\";\n element.style.paddingBottom = \"0px\";\n break;\n case $.ControlAnchor.TOP_LEFT:\n div = this.controls.topleft;\n element.style.position = \"relative\";\n element.style.paddingLeft = \"0px\";\n element.style.paddingTop = \"0px\";\n break;\n case $.ControlAnchor.ABSOLUTE:\n div = this.container;\n element.style.margin = \"0px\";\n element.style.padding = \"0px\";\n break;\n default:\n case $.ControlAnchor.NONE:\n div = this.container;\n element.style.margin = \"0px\";\n element.style.padding = \"0px\";\n break;\n }\n\n this.controls.push(\n new $.Control( element, controlOptions, div )\n );\n element.style.display = \"inline-block\";\n },\n\n\n /**\n * @function\n * @return {OpenSeadragon.ControlDock} Chainable.\n */\n removeControl: function ( element ) {\n element = $.getElement( element );\n var i = getControlIndex( this, element );\n\n if ( i >= 0 ) {\n this.controls[ i ].destroy();\n this.controls.splice( i, 1 );\n }\n\n return this;\n },\n\n /**\n * @function\n * @return {OpenSeadragon.ControlDock} Chainable.\n */\n clearControls: function () {\n while ( this.controls.length > 0 ) {\n this.controls.pop().destroy();\n }\n\n return this;\n },\n\n\n /**\n * @function\n * @return {Boolean}\n */\n areControlsEnabled: function () {\n var i;\n\n for ( i = this.controls.length - 1; i >= 0; i-- ) {\n if ( this.controls[ i ].isVisible() ) {\n return true;\n }\n }\n\n return false;\n },\n\n\n /**\n * @function\n * @return {OpenSeadragon.ControlDock} Chainable.\n */\n setControlsEnabled: function( enabled ) {\n var i;\n\n for ( i = this.controls.length - 1; i >= 0; i-- ) {\n this.controls[ i ].setVisible( enabled );\n }\n\n return this;\n }\n\n };\n\n\n ///////////////////////////////////////////////////////////////////////////////\n // Utility methods\n ///////////////////////////////////////////////////////////////////////////////\n function getControlIndex( dock, element ) {\n var controls = dock.controls,\n i;\n\n for ( i = controls.length - 1; i >= 0; i-- ) {\n if ( controls[ i ].element == element ) {\n return i;\n }\n }\n\n return -1;\n }\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Placement\n *\n * Copyright (C) 2010-2016 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($) {\n\n /**\n * An enumeration of positions to anchor an element.\n * @member Placement\n * @memberOf OpenSeadragon\n * @static\n * @readonly\n * @property {OpenSeadragon.Placement} CENTER\n * @property {OpenSeadragon.Placement} TOP_LEFT\n * @property {OpenSeadragon.Placement} TOP\n * @property {OpenSeadragon.Placement} TOP_RIGHT\n * @property {OpenSeadragon.Placement} RIGHT\n * @property {OpenSeadragon.Placement} BOTTOM_RIGHT\n * @property {OpenSeadragon.Placement} BOTTOM\n * @property {OpenSeadragon.Placement} BOTTOM_LEFT\n * @property {OpenSeadragon.Placement} LEFT\n */\n $.Placement = $.freezeObject({\n CENTER: 0,\n TOP_LEFT: 1,\n TOP: 2,\n TOP_RIGHT: 3,\n RIGHT: 4,\n BOTTOM_RIGHT: 5,\n BOTTOM: 6,\n BOTTOM_LEFT: 7,\n LEFT: 8,\n properties: {\n 0: {\n isLeft: false,\n isHorizontallyCentered: true,\n isRight: false,\n isTop: false,\n isVerticallyCentered: true,\n isBottom: false\n },\n 1: {\n isLeft: true,\n isHorizontallyCentered: false,\n isRight: false,\n isTop: true,\n isVerticallyCentered: false,\n isBottom: false\n },\n 2: {\n isLeft: false,\n isHorizontallyCentered: true,\n isRight: false,\n isTop: true,\n isVerticallyCentered: false,\n isBottom: false\n },\n 3: {\n isLeft: false,\n isHorizontallyCentered: false,\n isRight: true,\n isTop: true,\n isVerticallyCentered: false,\n isBottom: false\n },\n 4: {\n isLeft: false,\n isHorizontallyCentered: false,\n isRight: true,\n isTop: false,\n isVerticallyCentered: true,\n isBottom: false\n },\n 5: {\n isLeft: false,\n isHorizontallyCentered: false,\n isRight: true,\n isTop: false,\n isVerticallyCentered: false,\n isBottom: true\n },\n 6: {\n isLeft: false,\n isHorizontallyCentered: true,\n isRight: false,\n isTop: false,\n isVerticallyCentered: false,\n isBottom: true\n },\n 7: {\n isLeft: true,\n isHorizontallyCentered: false,\n isRight: false,\n isTop: false,\n isVerticallyCentered: false,\n isBottom: true\n },\n 8: {\n isLeft: true,\n isHorizontallyCentered: false,\n isRight: false,\n isTop: false,\n isVerticallyCentered: true,\n isBottom: false\n }\n }\n });\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - Viewer\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n// dictionary from hash to private properties\nvar THIS = {};\nvar nextHash = 1;\n\n/**\n *\n * The main point of entry into creating a zoomable image on the page.
\n *
\n * We have provided an idiomatic javascript constructor which takes\n * a single object, but still support the legacy positional arguments.
\n *
\n * The options below are given in order that they appeared in the constructor\n * as arguments and we translate a positional call into an idiomatic call.
\n *
\n * To create a viewer, you can use either of this methods:
\n *
    \n *
  • var viewer = new OpenSeadragon.Viewer(options);
  • \n *
  • var viewer = OpenSeadragon(options);
  • \n *
\n * @class Viewer\n * @classdesc The main OpenSeadragon viewer class.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @extends OpenSeadragon.ControlDock\n * @param {OpenSeadragon.Options} options - Viewer options.\n *\n **/\n$.Viewer = function( options ) {\n\n var args = arguments,\n _this = this,\n i;\n\n\n //backward compatibility for positional args while preferring more\n //idiomatic javascript options object as the only argument\n if( !$.isPlainObject( options ) ){\n options = {\n id: args[ 0 ],\n xmlPath: args.length > 1 ? args[ 1 ] : undefined,\n prefixUrl: args.length > 2 ? args[ 2 ] : undefined,\n controls: args.length > 3 ? args[ 3 ] : undefined,\n overlays: args.length > 4 ? args[ 4 ] : undefined\n };\n }\n\n //options.config and the general config argument are deprecated\n //in favor of the more direct specification of optional settings\n //being pass directly on the options object\n if ( options.config ){\n $.extend( true, options, options.config );\n delete options.config;\n }\n\n //Public properties\n //Allow the options object to override global defaults\n $.extend( true, this, {\n\n //internal state and dom identifiers\n id: options.id,\n hash: options.hash || nextHash++,\n /**\n * Index for page to be shown first next time open() is called (only used in sequenceMode).\n * @member {Number} initialPage\n * @memberof OpenSeadragon.Viewer#\n */\n initialPage: 0,\n\n //dom nodes\n /**\n * The parent element of this Viewer instance, passed in when the Viewer was created.\n * @member {Element} element\n * @memberof OpenSeadragon.Viewer#\n */\n element: null,\n /**\n * A <div> element (provided by {@link OpenSeadragon.ControlDock}), the base element of this Viewer instance.

\n * Child element of {@link OpenSeadragon.Viewer#element}.\n * @member {Element} container\n * @memberof OpenSeadragon.Viewer#\n */\n container: null,\n /**\n * A <div> element, the element where user-input events are handled for panning and zooming.

\n * Child element of {@link OpenSeadragon.Viewer#container},\n * positioned on top of {@link OpenSeadragon.Viewer#keyboardCommandArea}.

\n * The parent of {@link OpenSeadragon.Drawer#canvas} instances.\n * @member {Element} canvas\n * @memberof OpenSeadragon.Viewer#\n */\n canvas: null,\n\n // Overlays list. An overlay allows to add html on top of the viewer.\n overlays: [],\n // Container inside the canvas where overlays are drawn.\n overlaysContainer: null,\n\n //private state properties\n previousBody: [],\n\n //This was originally initialized in the constructor and so could never\n //have anything in it. now it can because we allow it to be specified\n //in the options and is only empty by default if not specified. Also\n //this array was returned from get_controls which I find confusing\n //since this object has a controls property which is treated in other\n //functions like clearControls. I'm removing the accessors.\n customControls: [],\n\n //These are originally not part options but declared as members\n //in initialize. It's still considered idiomatic to put them here\n //source is here for backwards compatibility. It is not an official\n //part of the API and should not be relied upon.\n source: null,\n /**\n * Handles rendering of tiles in the viewer. Created for each TileSource opened.\n * @member {OpenSeadragon.Drawer} drawer\n * @memberof OpenSeadragon.Viewer#\n */\n drawer: null,\n /**\n * Keeps track of all of the tiled images in the scene.\n * @member {OpenSeadragon.World} world\n * @memberof OpenSeadragon.Viewer#\n */\n world: null,\n /**\n * Handles coordinate-related functionality - zoom, pan, rotation, etc. Created for each TileSource opened.\n * @member {OpenSeadragon.Viewport} viewport\n * @memberof OpenSeadragon.Viewer#\n */\n viewport: null,\n /**\n * @member {OpenSeadragon.Navigator} navigator\n * @memberof OpenSeadragon.Viewer#\n */\n navigator: null,\n\n //A collection viewport is a separate viewport used to provide\n //simultaneous rendering of sets of tiles\n collectionViewport: null,\n collectionDrawer: null,\n\n //UI image resources\n //TODO: rename navImages to uiImages\n navImages: null,\n\n //interface button controls\n buttons: null,\n\n //TODO: this is defunct so safely remove it\n profiler: null\n\n }, $.DEFAULT_SETTINGS, options );\n\n if ( typeof ( this.hash) === \"undefined\" ) {\n throw new Error(\"A hash must be defined, either by specifying options.id or options.hash.\");\n }\n if ( typeof ( THIS[ this.hash ] ) !== \"undefined\" ) {\n // We don't want to throw an error here, as the user might have discarded\n // the previous viewer with the same hash and now want to recreate it.\n $.console.warn(\"Hash \" + this.hash + \" has already been used.\");\n }\n\n //Private state properties\n THIS[ this.hash ] = {\n \"fsBoundsDelta\": new $.Point( 1, 1 ),\n \"prevContainerSize\": null,\n \"animating\": false,\n \"forceRedraw\": false,\n \"mouseInside\": false,\n \"group\": null,\n // whether we should be continuously zooming\n \"zooming\": false,\n // how much we should be continuously zooming by\n \"zoomFactor\": null,\n \"lastZoomTime\": null,\n \"fullPage\": false,\n \"onfullscreenchange\": null\n };\n\n this._sequenceIndex = 0;\n this._firstOpen = true;\n this._updateRequestId = null;\n this._loadQueue = [];\n this.currentOverlays = [];\n\n this._lastScrollTime = $.now(); // variable used to help normalize the scroll event speed of different devices\n\n //Inherit some behaviors and properties\n $.EventSource.call( this );\n\n this.addHandler( 'open-failed', function ( event ) {\n var msg = $.getString( \"Errors.OpenFailed\", event.eventSource, event.message);\n _this._showMessage( msg );\n });\n\n $.ControlDock.call( this, options );\n\n //Deal with tile sources\n if (this.xmlPath) {\n //Deprecated option. Now it is preferred to use the tileSources option\n this.tileSources = [ this.xmlPath ];\n }\n\n this.element = this.element || document.getElementById( this.id );\n this.canvas = $.makeNeutralElement( \"div\" );\n\n this.canvas.className = \"openseadragon-canvas\";\n (function( style ){\n style.width = \"100%\";\n style.height = \"100%\";\n style.overflow = \"hidden\";\n style.position = \"absolute\";\n style.top = \"0px\";\n style.left = \"0px\";\n }(this.canvas.style));\n $.setElementTouchActionNone( this.canvas );\n if (options.tabIndex !== \"\") {\n this.canvas.tabIndex = (options.tabIndex === undefined ? 0 : options.tabIndex);\n }\n\n //the container is created through applying the ControlDock constructor above\n this.container.className = \"openseadragon-container\";\n (function( style ){\n style.width = \"100%\";\n style.height = \"100%\";\n style.position = \"relative\";\n style.overflow = \"hidden\";\n style.left = \"0px\";\n style.top = \"0px\";\n style.textAlign = \"left\"; // needed to protect against\n }( this.container.style ));\n\n this.container.insertBefore( this.canvas, this.container.firstChild );\n this.element.appendChild( this.container );\n\n //Used for toggling between fullscreen and default container size\n //TODO: these can be closure private and shared across Viewer\n // instances.\n this.bodyWidth = document.body.style.width;\n this.bodyHeight = document.body.style.height;\n this.bodyOverflow = document.body.style.overflow;\n this.docOverflow = document.documentElement.style.overflow;\n\n this.innerTracker = new $.MouseTracker({\n element: this.canvas,\n startDisabled: !this.mouseNavEnabled,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n dblClickTimeThreshold: this.dblClickTimeThreshold,\n dblClickDistThreshold: this.dblClickDistThreshold,\n keyDownHandler: $.delegate( this, onCanvasKeyDown ),\n keyHandler: $.delegate( this, onCanvasKeyPress ),\n clickHandler: $.delegate( this, onCanvasClick ),\n dblClickHandler: $.delegate( this, onCanvasDblClick ),\n dragHandler: $.delegate( this, onCanvasDrag ),\n dragEndHandler: $.delegate( this, onCanvasDragEnd ),\n enterHandler: $.delegate( this, onCanvasEnter ),\n exitHandler: $.delegate( this, onCanvasExit ),\n pressHandler: $.delegate( this, onCanvasPress ),\n releaseHandler: $.delegate( this, onCanvasRelease ),\n nonPrimaryPressHandler: $.delegate( this, onCanvasNonPrimaryPress ),\n nonPrimaryReleaseHandler: $.delegate( this, onCanvasNonPrimaryRelease ),\n scrollHandler: $.delegate( this, onCanvasScroll ),\n pinchHandler: $.delegate( this, onCanvasPinch )\n });\n\n this.outerTracker = new $.MouseTracker({\n element: this.container,\n startDisabled: !this.mouseNavEnabled,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n dblClickTimeThreshold: this.dblClickTimeThreshold,\n dblClickDistThreshold: this.dblClickDistThreshold,\n enterHandler: $.delegate( this, onContainerEnter ),\n exitHandler: $.delegate( this, onContainerExit )\n });\n\n if( this.toolbar ){\n this.toolbar = new $.ControlDock({ element: this.toolbar });\n }\n\n this.bindStandardControls();\n\n THIS[ this.hash ].prevContainerSize = _getSafeElemSize( this.container );\n\n // Create the world\n this.world = new $.World({\n viewer: this\n });\n\n this.world.addHandler('add-item', function(event) {\n // For backwards compatibility, we maintain the source property\n _this.source = _this.world.getItemAt(0).source;\n\n THIS[ _this.hash ].forceRedraw = true;\n\n if (!_this._updateRequestId) {\n _this._updateRequestId = scheduleUpdate( _this, updateMulti );\n }\n });\n\n this.world.addHandler('remove-item', function(event) {\n // For backwards compatibility, we maintain the source property\n if (_this.world.getItemCount()) {\n _this.source = _this.world.getItemAt(0).source;\n } else {\n _this.source = null;\n }\n\n THIS[ _this.hash ].forceRedraw = true;\n });\n\n this.world.addHandler('metrics-change', function(event) {\n if (_this.viewport) {\n _this.viewport._setContentBounds(_this.world.getHomeBounds(), _this.world.getContentFactor());\n }\n });\n\n this.world.addHandler('item-index-change', function(event) {\n // For backwards compatibility, we maintain the source property\n _this.source = _this.world.getItemAt(0).source;\n });\n\n // Create the viewport\n this.viewport = new $.Viewport({\n containerSize: THIS[ this.hash ].prevContainerSize,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime,\n minZoomImageRatio: this.minZoomImageRatio,\n maxZoomPixelRatio: this.maxZoomPixelRatio,\n visibilityRatio: this.visibilityRatio,\n wrapHorizontal: this.wrapHorizontal,\n wrapVertical: this.wrapVertical,\n defaultZoomLevel: this.defaultZoomLevel,\n minZoomLevel: this.minZoomLevel,\n maxZoomLevel: this.maxZoomLevel,\n viewer: this,\n degrees: this.degrees,\n flipped: this.flipped,\n navigatorRotate: this.navigatorRotate,\n homeFillsViewer: this.homeFillsViewer,\n margins: this.viewportMargins\n });\n\n this.viewport._setContentBounds(this.world.getHomeBounds(), this.world.getContentFactor());\n\n // Create the image loader\n this.imageLoader = new $.ImageLoader({\n jobLimit: this.imageLoaderLimit,\n timeout: options.timeout\n });\n\n // Create the tile cache\n this.tileCache = new $.TileCache({\n maxImageCacheCount: this.maxImageCacheCount\n });\n\n // Create the drawer\n this.drawer = new $.Drawer({\n viewer: this,\n viewport: this.viewport,\n element: this.canvas,\n debugGridColor: this.debugGridColor\n });\n\n // Overlay container\n this.overlaysContainer = $.makeNeutralElement( \"div\" );\n this.canvas.appendChild( this.overlaysContainer );\n\n // Now that we have a drawer, see if it supports rotate. If not we need to remove the rotate buttons\n if (!this.drawer.canRotate()) {\n // Disable/remove the rotate left/right buttons since they aren't supported\n if (this.rotateLeft) {\n i = this.buttons.buttons.indexOf(this.rotateLeft);\n this.buttons.buttons.splice(i, 1);\n this.buttons.element.removeChild(this.rotateLeft.element);\n }\n if (this.rotateRight) {\n i = this.buttons.buttons.indexOf(this.rotateRight);\n this.buttons.buttons.splice(i, 1);\n this.buttons.element.removeChild(this.rotateRight.element);\n }\n }\n\n //Instantiate a navigator if configured\n if ( this.showNavigator){\n this.navigator = new $.Navigator({\n id: this.navigatorId,\n position: this.navigatorPosition,\n sizeRatio: this.navigatorSizeRatio,\n maintainSizeRatio: this.navigatorMaintainSizeRatio,\n top: this.navigatorTop,\n left: this.navigatorLeft,\n width: this.navigatorWidth,\n height: this.navigatorHeight,\n autoResize: this.navigatorAutoResize,\n autoFade: this.navigatorAutoFade,\n prefixUrl: this.prefixUrl,\n viewer: this,\n navigatorRotate: this.navigatorRotate,\n background: this.navigatorBackground,\n opacity: this.navigatorOpacity,\n borderColor: this.navigatorBorderColor,\n displayRegionColor: this.navigatorDisplayRegionColor,\n crossOriginPolicy: this.crossOriginPolicy\n });\n }\n\n // Sequence mode\n if (this.sequenceMode) {\n this.bindSequenceControls();\n }\n\n // Open initial tilesources\n if (this.tileSources) {\n this.open( this.tileSources );\n }\n\n // Add custom controls\n for ( i = 0; i < this.customControls.length; i++ ) {\n this.addControl(\n this.customControls[ i ].id,\n {anchor: this.customControls[ i ].anchor}\n );\n }\n\n // Initial fade out\n $.requestAnimationFrame( function(){\n beginControlsAutoHide( _this );\n } );\n\n // Initial canvas options\n if ( this.imageSmoothingEnabled !== undefined && !this.imageSmoothingEnabled){\n this.drawer.setImageSmoothingEnabled(this.imageSmoothingEnabled);\n }\n\n};\n\n$.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, /** @lends OpenSeadragon.Viewer.prototype */{\n\n\n /**\n * @function\n * @return {Boolean}\n */\n isOpen: function () {\n return !!this.world.getItemCount();\n },\n\n // deprecated\n openDzi: function ( dzi ) {\n $.console.error( \"[Viewer.openDzi] this function is deprecated; use Viewer.open() instead.\" );\n return this.open( dzi );\n },\n\n // deprecated\n openTileSource: function ( tileSource ) {\n $.console.error( \"[Viewer.openTileSource] this function is deprecated; use Viewer.open() instead.\" );\n return this.open( tileSource );\n },\n\n /**\n * Open tiled images into the viewer, closing any others.\n * To get the TiledImage instance created by open, add an event listener for\n * {@link OpenSeadragon.Viewer.html#.event:open}, which when fired can be used to get access\n * to the instance, i.e., viewer.world.getItemAt(0).\n * @function\n * @param {Array|String|Object|Function} tileSources - This can be a TiledImage\n * specifier, a TileSource specifier, or an array of either. A TiledImage specifier\n * is the same as the options parameter for {@link OpenSeadragon.Viewer#addTiledImage},\n * except for the index property; images are added in sequence.\n * A TileSource specifier is anything you could pass as the tileSource property\n * of the options parameter for {@link OpenSeadragon.Viewer#addTiledImage}.\n * @param {Number} initialPage - If sequenceMode is true, display this page initially\n * for the given tileSources. If specified, will overwrite the Viewer's existing initialPage property.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:open\n * @fires OpenSeadragon.Viewer.event:open-failed\n */\n open: function (tileSources, initialPage) {\n var _this = this;\n\n this.close();\n\n if (!tileSources) {\n return;\n }\n\n if (this.sequenceMode && $.isArray(tileSources)) {\n if (this.referenceStrip) {\n this.referenceStrip.destroy();\n this.referenceStrip = null;\n }\n\n if (typeof initialPage != 'undefined' && !isNaN(initialPage)) {\n this.initialPage = initialPage;\n }\n\n this.tileSources = tileSources;\n this._sequenceIndex = Math.max(0, Math.min(this.tileSources.length - 1, this.initialPage));\n if (this.tileSources.length) {\n this.open(this.tileSources[this._sequenceIndex]);\n\n if ( this.showReferenceStrip ){\n this.addReferenceStrip();\n }\n }\n\n this._updateSequenceButtons( this._sequenceIndex );\n return;\n }\n\n if (!$.isArray(tileSources)) {\n tileSources = [tileSources];\n }\n\n if (!tileSources.length) {\n return;\n }\n\n this._opening = true;\n\n var expected = tileSources.length;\n var successes = 0;\n var failures = 0;\n var failEvent;\n\n var checkCompletion = function() {\n if (successes + failures === expected) {\n if (successes) {\n if (_this._firstOpen || !_this.preserveViewport) {\n _this.viewport.goHome( true );\n _this.viewport.update();\n }\n\n _this._firstOpen = false;\n\n var source = tileSources[0];\n if (source.tileSource) {\n source = source.tileSource;\n }\n\n // Global overlays\n if( _this.overlays && !_this.preserveOverlays ){\n for ( var i = 0; i < _this.overlays.length; i++ ) {\n _this.currentOverlays[ i ] = getOverlayObject( _this, _this.overlays[ i ] );\n }\n }\n\n _this._drawOverlays();\n _this._opening = false;\n\n /**\n * Raised when the viewer has opened and loaded one or more TileSources.\n *\n * @event open\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.TileSource} source - The tile source that was opened.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n // TODO: what if there are multiple sources?\n _this.raiseEvent( 'open', { source: source } );\n } else {\n _this._opening = false;\n\n /**\n * Raised when an error occurs loading a TileSource.\n *\n * @event open-failed\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {String} message - Information about what failed.\n * @property {String} source - The tile source that failed.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( 'open-failed', failEvent );\n }\n }\n };\n\n var doOne = function(options) {\n if (!$.isPlainObject(options) || !options.tileSource) {\n options = {\n tileSource: options\n };\n }\n\n if (options.index !== undefined) {\n $.console.error('[Viewer.open] setting indexes here is not supported; use addTiledImage instead');\n delete options.index;\n }\n\n if (options.collectionImmediately === undefined) {\n options.collectionImmediately = true;\n }\n\n var originalSuccess = options.success;\n options.success = function(event) {\n successes++;\n\n // TODO: now that options has other things besides tileSource, the overlays\n // should probably be at the options level, not the tileSource level.\n if (options.tileSource.overlays) {\n for (var i = 0; i < options.tileSource.overlays.length; i++) {\n _this.addOverlay(options.tileSource.overlays[i]);\n }\n }\n\n if (originalSuccess) {\n originalSuccess(event);\n }\n\n checkCompletion();\n };\n\n var originalError = options.error;\n options.error = function(event) {\n failures++;\n\n if (!failEvent) {\n failEvent = event;\n }\n\n if (originalError) {\n originalError(event);\n }\n\n checkCompletion();\n };\n\n _this.addTiledImage(options);\n };\n\n // TileSources\n for (var i = 0; i < tileSources.length; i++) {\n doOne(tileSources[i]);\n }\n\n return this;\n },\n\n\n /**\n * @function\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:close\n */\n close: function ( ) {\n if ( !THIS[ this.hash ] ) {\n //this viewer has already been destroyed: returning immediately\n return this;\n }\n\n this._opening = false;\n\n if ( this.navigator ) {\n this.navigator.close();\n }\n\n if (!this.preserveOverlays) {\n this.clearOverlays();\n this.overlaysContainer.innerHTML = \"\";\n }\n\n THIS[ this.hash ].animating = false;\n this.world.removeAll();\n this.imageLoader.clear();\n\n /**\n * Raised when the viewer is closed (see {@link OpenSeadragon.Viewer#close}).\n *\n * @event close\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'close' );\n\n return this;\n },\n\n\n /**\n * Function to destroy the viewer and clean up everything created by OpenSeadragon.\n *\n * Example:\n * var viewer = OpenSeadragon({\n * [...]\n * });\n *\n * //when you are done with the viewer:\n * viewer.destroy();\n * viewer = null; //important\n *\n * @function\n */\n destroy: function( ) {\n if ( !THIS[ this.hash ] ) {\n //this viewer has already been destroyed: returning immediately\n return;\n }\n\n this.close();\n\n this.clearOverlays();\n this.overlaysContainer.innerHTML = \"\";\n\n //TODO: implement this...\n //this.unbindSequenceControls()\n //this.unbindStandardControls()\n\n if (this.referenceStrip) {\n this.referenceStrip.destroy();\n this.referenceStrip = null;\n }\n\n if ( this._updateRequestId !== null ) {\n $.cancelAnimationFrame( this._updateRequestId );\n this._updateRequestId = null;\n }\n\n if ( this.drawer ) {\n this.drawer.destroy();\n }\n\n this.removeAllHandlers();\n\n // Go through top element (passed to us) and remove all children\n // Use removeChild to make sure it handles SVG or any non-html\n // also it performs better - http://jsperf.com/innerhtml-vs-removechild/15\n if (this.element){\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n }\n\n // destroy the mouse trackers\n if (this.innerTracker){\n this.innerTracker.destroy();\n }\n if (this.outerTracker){\n this.outerTracker.destroy();\n }\n\n THIS[ this.hash ] = null;\n delete THIS[ this.hash ];\n\n // clear all our references to dom objects\n this.canvas = null;\n this.container = null;\n\n // clear our reference to the main element - they will need to pass it in again, creating a new viewer\n this.element = null;\n },\n\n /**\n * @function\n * @return {Boolean}\n */\n isMouseNavEnabled: function () {\n return this.innerTracker.isTracking();\n },\n\n /**\n * @function\n * @param {Boolean} enabled - true to enable, false to disable\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:mouse-enabled\n */\n setMouseNavEnabled: function( enabled ){\n this.innerTracker.setTracking( enabled );\n this.outerTracker.setTracking( enabled );\n /**\n * Raised when mouse/touch navigation is enabled or disabled (see {@link OpenSeadragon.Viewer#setMouseNavEnabled}).\n *\n * @event mouse-enabled\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} enabled\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'mouse-enabled', { enabled: enabled } );\n return this;\n },\n\n\n /**\n * @function\n * @return {Boolean}\n */\n areControlsEnabled: function () {\n var enabled = this.controls.length,\n i;\n for( i = 0; i < this.controls.length; i++ ){\n enabled = enabled && this.controls[ i ].isVisible();\n }\n return enabled;\n },\n\n\n /**\n * Shows or hides the controls (e.g. the default navigation buttons).\n *\n * @function\n * @param {Boolean} true to show, false to hide.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:controls-enabled\n */\n setControlsEnabled: function( enabled ) {\n if( enabled ){\n abortControlsAutoHide( this );\n } else {\n beginControlsAutoHide( this );\n }\n /**\n * Raised when the navigation controls are shown or hidden (see {@link OpenSeadragon.Viewer#setControlsEnabled}).\n *\n * @event controls-enabled\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} enabled\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'controls-enabled', { enabled: enabled } );\n return this;\n },\n\n /**\n * Turns debugging mode on or off for this viewer.\n *\n * @function\n * @param {Boolean} true to turn debug on, false to turn debug off.\n */\n setDebugMode: function(debugMode){\n\n for (var i = 0; i < this.world.getItemCount(); i++) {\n this.world.getItemAt(i).debugMode = debugMode;\n }\n\n this.debugMode = debugMode;\n this.forceRedraw();\n },\n\n /**\n * @function\n * @return {Boolean}\n */\n isFullPage: function () {\n return THIS[ this.hash ].fullPage;\n },\n\n\n /**\n * Toggle full page mode.\n * @function\n * @param {Boolean} fullPage\n * If true, enter full page mode. If false, exit full page mode.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:pre-full-page\n * @fires OpenSeadragon.Viewer.event:full-page\n */\n setFullPage: function( fullPage ) {\n\n var body = document.body,\n bodyStyle = body.style,\n docStyle = document.documentElement.style,\n _this = this,\n nodes,\n i;\n\n //don't bother modifying the DOM if we are already in full page mode.\n if ( fullPage == this.isFullPage() ) {\n return this;\n }\n\n var fullPageEventArgs = {\n fullPage: fullPage,\n preventDefaultAction: false\n };\n /**\n * Raised when the viewer is about to change to/from full-page mode (see {@link OpenSeadragon.Viewer#setFullPage}).\n *\n * @event pre-full-page\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} fullPage - True if entering full-page mode, false if exiting full-page mode.\n * @property {Boolean} preventDefaultAction - Set to true to prevent full-page mode change. Default: false.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'pre-full-page', fullPageEventArgs );\n if ( fullPageEventArgs.preventDefaultAction ) {\n return this;\n }\n\n if ( fullPage ) {\n\n this.elementSize = $.getElementSize( this.element );\n this.pageScroll = $.getPageScroll();\n\n this.elementMargin = this.element.style.margin;\n this.element.style.margin = \"0\";\n this.elementPadding = this.element.style.padding;\n this.element.style.padding = \"0\";\n\n this.bodyMargin = bodyStyle.margin;\n this.docMargin = docStyle.margin;\n bodyStyle.margin = \"0\";\n docStyle.margin = \"0\";\n\n this.bodyPadding = bodyStyle.padding;\n this.docPadding = docStyle.padding;\n bodyStyle.padding = \"0\";\n docStyle.padding = \"0\";\n\n this.bodyWidth = bodyStyle.width;\n this.docWidth = docStyle.width;\n bodyStyle.width = \"100%\";\n docStyle.width = \"100%\";\n\n this.bodyHeight = bodyStyle.height;\n this.docHeight = docStyle.height;\n bodyStyle.height = \"100%\";\n docStyle.height = \"100%\";\n\n //when entering full screen on the ipad it wasn't sufficient to leave\n //the body intact as only only the top half of the screen would\n //respond to touch events on the canvas, while the bottom half treated\n //them as touch events on the document body. Thus we remove and store\n //the bodies elements and replace them when we leave full screen.\n this.previousBody = [];\n THIS[ this.hash ].prevElementParent = this.element.parentNode;\n THIS[ this.hash ].prevNextSibling = this.element.nextSibling;\n THIS[ this.hash ].prevElementWidth = this.element.style.width;\n THIS[ this.hash ].prevElementHeight = this.element.style.height;\n nodes = body.childNodes.length;\n for ( i = 0; i < nodes; i++ ) {\n this.previousBody.push( body.childNodes[ 0 ] );\n body.removeChild( body.childNodes[ 0 ] );\n }\n\n //If we've got a toolbar, we need to enable the user to use css to\n //preserve it in fullpage mode\n if ( this.toolbar && this.toolbar.element ) {\n //save a reference to the parent so we can put it back\n //in the long run we need a better strategy\n this.toolbar.parentNode = this.toolbar.element.parentNode;\n this.toolbar.nextSibling = this.toolbar.element.nextSibling;\n body.appendChild( this.toolbar.element );\n\n //Make sure the user has some ability to style the toolbar based\n //on the mode\n $.addClass( this.toolbar.element, 'fullpage' );\n }\n\n $.addClass( this.element, 'fullpage' );\n body.appendChild( this.element );\n\n this.element.style.height = $.getWindowSize().y + 'px';\n this.element.style.width = $.getWindowSize().x + 'px';\n\n if ( this.toolbar && this.toolbar.element ) {\n this.element.style.height = (\n $.getElementSize( this.element ).y - $.getElementSize( this.toolbar.element ).y\n ) + 'px';\n }\n\n THIS[ this.hash ].fullPage = true;\n\n // mouse will be inside container now\n $.delegate( this, onContainerEnter )( {} );\n\n } else {\n\n this.element.style.margin = this.elementMargin;\n this.element.style.padding = this.elementPadding;\n\n bodyStyle.margin = this.bodyMargin;\n docStyle.margin = this.docMargin;\n\n bodyStyle.padding = this.bodyPadding;\n docStyle.padding = this.docPadding;\n\n bodyStyle.width = this.bodyWidth;\n docStyle.width = this.docWidth;\n\n bodyStyle.height = this.bodyHeight;\n docStyle.height = this.docHeight;\n\n body.removeChild( this.element );\n nodes = this.previousBody.length;\n for ( i = 0; i < nodes; i++ ) {\n body.appendChild( this.previousBody.shift() );\n }\n\n $.removeClass( this.element, 'fullpage' );\n THIS[ this.hash ].prevElementParent.insertBefore(\n this.element,\n THIS[ this.hash ].prevNextSibling\n );\n\n //If we've got a toolbar, we need to enable the user to use css to\n //reset it to its original state\n if ( this.toolbar && this.toolbar.element ) {\n body.removeChild( this.toolbar.element );\n\n //Make sure the user has some ability to style the toolbar based\n //on the mode\n $.removeClass( this.toolbar.element, 'fullpage' );\n\n this.toolbar.parentNode.insertBefore(\n this.toolbar.element,\n this.toolbar.nextSibling\n );\n delete this.toolbar.parentNode;\n delete this.toolbar.nextSibling;\n }\n\n this.element.style.width = THIS[ this.hash ].prevElementWidth;\n this.element.style.height = THIS[ this.hash ].prevElementHeight;\n\n // After exiting fullPage or fullScreen, it can take some time\n // before the browser can actually set the scroll.\n var restoreScrollCounter = 0;\n var restoreScroll = function() {\n $.setPageScroll( _this.pageScroll );\n var pageScroll = $.getPageScroll();\n restoreScrollCounter++;\n if (restoreScrollCounter < 10 &&\n (pageScroll.x !== _this.pageScroll.x ||\n pageScroll.y !== _this.pageScroll.y)) {\n $.requestAnimationFrame( restoreScroll );\n }\n };\n $.requestAnimationFrame( restoreScroll );\n\n THIS[ this.hash ].fullPage = false;\n\n // mouse will likely be outside now\n $.delegate( this, onContainerExit )( { } );\n\n }\n\n if ( this.navigator && this.viewport ) {\n this.navigator.update( this.viewport );\n }\n\n /**\n * Raised when the viewer has changed to/from full-page mode (see {@link OpenSeadragon.Viewer#setFullPage}).\n *\n * @event full-page\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} fullPage - True if changed to full-page mode, false if exited full-page mode.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'full-page', { fullPage: fullPage } );\n\n return this;\n },\n\n /**\n * Toggle full screen mode if supported. Toggle full page mode otherwise.\n * @function\n * @param {Boolean} fullScreen\n * If true, enter full screen mode. If false, exit full screen mode.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:pre-full-screen\n * @fires OpenSeadragon.Viewer.event:full-screen\n */\n setFullScreen: function( fullScreen ) {\n var _this = this;\n\n if ( !$.supportsFullScreen ) {\n return this.setFullPage( fullScreen );\n }\n\n if ( $.isFullScreen() === fullScreen ) {\n return this;\n }\n\n var fullScreeEventArgs = {\n fullScreen: fullScreen,\n preventDefaultAction: false\n };\n /**\n * Raised when the viewer is about to change to/from full-screen mode (see {@link OpenSeadragon.Viewer#setFullScreen}).\n * Note: the pre-full-screen event is not raised when the user is exiting\n * full-screen mode by pressing the Esc key. In that case, consider using\n * the full-screen, pre-full-page or full-page events.\n *\n * @event pre-full-screen\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} fullScreen - True if entering full-screen mode, false if exiting full-screen mode.\n * @property {Boolean} preventDefaultAction - Set to true to prevent full-screen mode change. Default: false.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'pre-full-screen', fullScreeEventArgs );\n if ( fullScreeEventArgs.preventDefaultAction ) {\n return this;\n }\n\n if ( fullScreen ) {\n\n this.setFullPage( true );\n // If the full page mode is not actually entered, we need to prevent\n // the full screen mode.\n if ( !this.isFullPage() ) {\n return this;\n }\n\n this.fullPageStyleWidth = this.element.style.width;\n this.fullPageStyleHeight = this.element.style.height;\n this.element.style.width = '100%';\n this.element.style.height = '100%';\n\n var onFullScreenChange = function() {\n var isFullScreen = $.isFullScreen();\n if ( !isFullScreen ) {\n $.removeEvent( document, $.fullScreenEventName, onFullScreenChange );\n $.removeEvent( document, $.fullScreenErrorEventName, onFullScreenChange );\n\n _this.setFullPage( false );\n if ( _this.isFullPage() ) {\n _this.element.style.width = _this.fullPageStyleWidth;\n _this.element.style.height = _this.fullPageStyleHeight;\n }\n }\n if ( _this.navigator && _this.viewport ) {\n //09/08/2018 - Fabroh : Fix issue #1504 : Ensure to get the navigator updated on fullscreen out with custom location with a timeout\n setTimeout(function(){\n _this.navigator.update( _this.viewport );\n });\n }\n /**\n * Raised when the viewer has changed to/from full-screen mode (see {@link OpenSeadragon.Viewer#setFullScreen}).\n *\n * @event full-screen\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} fullScreen - True if changed to full-screen mode, false if exited full-screen mode.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( 'full-screen', { fullScreen: isFullScreen } );\n };\n $.addEvent( document, $.fullScreenEventName, onFullScreenChange );\n $.addEvent( document, $.fullScreenErrorEventName, onFullScreenChange );\n\n $.requestFullScreen( document.body );\n\n } else {\n $.exitFullScreen();\n }\n return this;\n },\n\n /**\n * @function\n * @return {Boolean}\n */\n isVisible: function () {\n return this.container.style.visibility != \"hidden\";\n },\n\n\n /**\n * @function\n * @param {Boolean} visible\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:visible\n */\n setVisible: function( visible ){\n this.container.style.visibility = visible ? \"\" : \"hidden\";\n /**\n * Raised when the viewer is shown or hidden (see {@link OpenSeadragon.Viewer#setVisible}).\n *\n * @event visible\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Boolean} visible\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'visible', { visible: visible } );\n return this;\n },\n\n /**\n * Add a tiled image to the viewer.\n * options.tileSource can be anything that {@link OpenSeadragon.Viewer#open}\n * supports except arrays of images.\n * Note that you can specify options.width or options.height, but not both.\n * The other dimension will be calculated according to the item's aspect ratio.\n * If collectionMode is on (see {@link OpenSeadragon.Options}), the new image is\n * automatically arranged with the others.\n * @function\n * @param {Object} options\n * @param {String|Object|Function} options.tileSource - The TileSource specifier.\n * A String implies a url used to determine the tileSource implementation\n * based on the file extension of url. JSONP is implied by *.js,\n * otherwise the url is retrieved as text and the resulting text is\n * introspected to determine if its json, xml, or text and parsed.\n * An Object implies an inline configuration which has a single\n * property sufficient for being able to determine tileSource\n * implementation. If the object has a property which is a function\n * named 'getTileUrl', it is treated as a custom TileSource.\n * @param {Number} [options.index] The index of the item. Added on top of\n * all other items if not specified.\n * @param {Boolean} [options.replace=false] If true, the item at options.index will be\n * removed and the new item is added in its place. options.tileSource will be\n * interpreted and fetched if necessary before the old item is removed to avoid leaving\n * a gap in the world.\n * @param {Number} [options.x=0] The X position for the image in viewport coordinates.\n * @param {Number} [options.y=0] The Y position for the image in viewport coordinates.\n * @param {Number} [options.width=1] The width for the image in viewport coordinates.\n * @param {Number} [options.height] The height for the image in viewport coordinates.\n * @param {OpenSeadragon.Rect} [options.fitBounds] The bounds in viewport coordinates\n * to fit the image into. If specified, x, y, width and height get ignored.\n * @param {OpenSeadragon.Placement} [options.fitBoundsPlacement=OpenSeadragon.Placement.CENTER]\n * How to anchor the image in the bounds if options.fitBounds is set.\n * @param {OpenSeadragon.Rect} [options.clip] - An area, in image pixels, to clip to\n * (portions of the image outside of this area will not be visible). Only works on\n * browsers that support the HTML5 canvas.\n * @param {Number} [options.opacity=1] Proportional opacity of the tiled images (1=opaque, 0=hidden)\n * @param {Boolean} [options.preload=false] Default switch for loading hidden images (true loads, false blocks)\n * @param {Number} [options.degrees=0] Initial rotation of the tiled image around\n * its top left corner in degrees.\n * @param {String} [options.compositeOperation] How the image is composited onto other images.\n * @param {String} [options.crossOriginPolicy] The crossOriginPolicy for this specific image,\n * overriding viewer.crossOriginPolicy.\n * @param {Boolean} [options.ajaxWithCredentials] Whether to set withCredentials on tile AJAX\n * @param {Boolean} [options.loadTilesWithAjax]\n * Whether to load tile data using AJAX requests.\n * Defaults to the setting in {@link OpenSeadragon.Options}.\n * @param {Object} [options.ajaxHeaders]\n * A set of headers to include when making tile AJAX requests.\n * Note that these headers will be merged over any headers specified in {@link OpenSeadragon.Options}.\n * Specifying a falsy value for a header will clear its existing value set at the Viewer level (if any).\n * requests.\n * @param {Function} [options.success] A function that gets called when the image is\n * successfully added. It's passed the event object which contains a single property:\n * \"item\", which is the resulting instance of TiledImage.\n * @param {Function} [options.error] A function that gets called if the image is\n * unable to be added. It's passed the error event object, which contains \"message\"\n * and \"source\" properties.\n * @param {Boolean} [options.collectionImmediately=false] If collectionMode is on,\n * specifies whether to snap to the new arrangement immediately or to animate to it.\n * @param {String|CanvasGradient|CanvasPattern|Function} [options.placeholderFillStyle] - See {@link OpenSeadragon.Options}.\n * @fires OpenSeadragon.World.event:add-item\n * @fires OpenSeadragon.Viewer.event:add-item-failed\n */\n addTiledImage: function( options ) {\n $.console.assert(options, \"[Viewer.addTiledImage] options is required\");\n $.console.assert(options.tileSource, \"[Viewer.addTiledImage] options.tileSource is required\");\n $.console.assert(!options.replace || (options.index > -1 && options.index < this.world.getItemCount()),\n \"[Viewer.addTiledImage] if options.replace is used, options.index must be a valid index in Viewer.world\");\n\n var _this = this;\n\n if (options.replace) {\n options.replaceItem = _this.world.getItemAt(options.index);\n }\n\n this._hideMessage();\n\n if (options.placeholderFillStyle === undefined) {\n options.placeholderFillStyle = this.placeholderFillStyle;\n }\n if (options.opacity === undefined) {\n options.opacity = this.opacity;\n }\n if (options.preload === undefined) {\n options.preload = this.preload;\n }\n if (options.compositeOperation === undefined) {\n options.compositeOperation = this.compositeOperation;\n }\n if (options.crossOriginPolicy === undefined) {\n options.crossOriginPolicy = options.tileSource.crossOriginPolicy !== undefined ? options.tileSource.crossOriginPolicy : this.crossOriginPolicy;\n }\n if (options.ajaxWithCredentials === undefined) {\n options.ajaxWithCredentials = this.ajaxWithCredentials;\n }\n if (options.loadTilesWithAjax === undefined) {\n options.loadTilesWithAjax = this.loadTilesWithAjax;\n }\n if (options.ajaxHeaders === undefined || options.ajaxHeaders === null) {\n options.ajaxHeaders = this.ajaxHeaders;\n } else if ($.isPlainObject(options.ajaxHeaders) && $.isPlainObject(this.ajaxHeaders)) {\n options.ajaxHeaders = $.extend({}, this.ajaxHeaders, options.ajaxHeaders);\n }\n\n var myQueueItem = {\n options: options\n };\n\n function raiseAddItemFailed( event ) {\n for (var i = 0; i < _this._loadQueue.length; i++) {\n if (_this._loadQueue[i] === myQueueItem) {\n _this._loadQueue.splice(i, 1);\n break;\n }\n }\n\n if (_this._loadQueue.length === 0) {\n refreshWorld(myQueueItem);\n }\n\n /**\n * Raised when an error occurs while adding a item.\n * @event add-item-failed\n * @memberOf OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {String} message\n * @property {String} source\n * @property {Object} options The options passed to the addTiledImage method.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( 'add-item-failed', event );\n\n if (options.error) {\n options.error(event);\n }\n }\n\n function refreshWorld(theItem) {\n if (_this.collectionMode) {\n _this.world.arrange({\n immediately: theItem.options.collectionImmediately,\n rows: _this.collectionRows,\n columns: _this.collectionColumns,\n layout: _this.collectionLayout,\n tileSize: _this.collectionTileSize,\n tileMargin: _this.collectionTileMargin\n });\n _this.world.setAutoRefigureSizes(true);\n }\n }\n\n if ($.isArray(options.tileSource)) {\n setTimeout(function() {\n raiseAddItemFailed({\n message: \"[Viewer.addTiledImage] Sequences can not be added; add them one at a time instead.\",\n source: options.tileSource,\n options: options\n });\n });\n return;\n }\n\n this._loadQueue.push(myQueueItem);\n\n function processReadyItems() {\n var queueItem, tiledImage, optionsClone;\n while (_this._loadQueue.length) {\n queueItem = _this._loadQueue[0];\n if (!queueItem.tileSource) {\n break;\n }\n\n _this._loadQueue.splice(0, 1);\n\n if (queueItem.options.replace) {\n var newIndex = _this.world.getIndexOfItem(queueItem.options.replaceItem);\n if (newIndex != -1) {\n queueItem.options.index = newIndex;\n }\n _this.world.removeItem(queueItem.options.replaceItem);\n }\n\n tiledImage = new $.TiledImage({\n viewer: _this,\n source: queueItem.tileSource,\n viewport: _this.viewport,\n drawer: _this.drawer,\n tileCache: _this.tileCache,\n imageLoader: _this.imageLoader,\n x: queueItem.options.x,\n y: queueItem.options.y,\n width: queueItem.options.width,\n height: queueItem.options.height,\n fitBounds: queueItem.options.fitBounds,\n fitBoundsPlacement: queueItem.options.fitBoundsPlacement,\n clip: queueItem.options.clip,\n placeholderFillStyle: queueItem.options.placeholderFillStyle,\n opacity: queueItem.options.opacity,\n preload: queueItem.options.preload,\n degrees: queueItem.options.degrees,\n compositeOperation: queueItem.options.compositeOperation,\n springStiffness: _this.springStiffness,\n animationTime: _this.animationTime,\n minZoomImageRatio: _this.minZoomImageRatio,\n wrapHorizontal: _this.wrapHorizontal,\n wrapVertical: _this.wrapVertical,\n immediateRender: _this.immediateRender,\n blendTime: _this.blendTime,\n alwaysBlend: _this.alwaysBlend,\n minPixelRatio: _this.minPixelRatio,\n smoothTileEdgesMinZoom: _this.smoothTileEdgesMinZoom,\n iOSDevice: _this.iOSDevice,\n crossOriginPolicy: queueItem.options.crossOriginPolicy,\n ajaxWithCredentials: queueItem.options.ajaxWithCredentials,\n loadTilesWithAjax: queueItem.options.loadTilesWithAjax,\n ajaxHeaders: queueItem.options.ajaxHeaders,\n debugMode: _this.debugMode\n });\n\n if (_this.collectionMode) {\n _this.world.setAutoRefigureSizes(false);\n }\n _this.world.addItem( tiledImage, {\n index: queueItem.options.index\n });\n\n if (_this._loadQueue.length === 0) {\n //this restores the autoRefigureSizes flag to true.\n refreshWorld(queueItem);\n }\n\n if (_this.world.getItemCount() === 1 && !_this.preserveViewport) {\n _this.viewport.goHome(true);\n }\n\n if (_this.navigator) {\n optionsClone = $.extend({}, queueItem.options, {\n replace: false, // navigator already removed the layer, nothing to replace\n originalTiledImage: tiledImage,\n tileSource: queueItem.tileSource\n });\n\n _this.navigator.addTiledImage(optionsClone);\n }\n\n if (queueItem.options.success) {\n queueItem.options.success({\n item: tiledImage\n });\n }\n }\n }\n\n getTileSourceImplementation( this, options.tileSource, options, function( tileSource ) {\n\n myQueueItem.tileSource = tileSource;\n\n // add everybody at the front of the queue that's ready to go\n processReadyItems();\n }, function( event ) {\n event.options = options;\n raiseAddItemFailed(event);\n\n // add everybody at the front of the queue that's ready to go\n processReadyItems();\n } );\n },\n\n /**\n * Add a simple image to the viewer.\n * The options are the same as the ones in {@link OpenSeadragon.Viewer#addTiledImage}\n * except for options.tileSource which is replaced by options.url.\n * @function\n * @param {Object} options - See {@link OpenSeadragon.Viewer#addTiledImage}\n * for all the options\n * @param {String} options.url - The URL of the image to add.\n * @fires OpenSeadragon.World.event:add-item\n * @fires OpenSeadragon.Viewer.event:add-item-failed\n */\n addSimpleImage: function(options) {\n $.console.assert(options, \"[Viewer.addSimpleImage] options is required\");\n $.console.assert(options.url, \"[Viewer.addSimpleImage] options.url is required\");\n\n var opts = $.extend({}, options, {\n tileSource: {\n type: 'image',\n url: options.url\n }\n });\n delete opts.url;\n this.addTiledImage(opts);\n },\n\n // deprecated\n addLayer: function( options ) {\n var _this = this;\n\n $.console.error( \"[Viewer.addLayer] this function is deprecated; use Viewer.addTiledImage() instead.\" );\n\n var optionsClone = $.extend({}, options, {\n success: function(event) {\n _this.raiseEvent(\"add-layer\", {\n options: options,\n drawer: event.item\n });\n },\n error: function(event) {\n _this.raiseEvent(\"add-layer-failed\", event);\n }\n });\n\n this.addTiledImage(optionsClone);\n return this;\n },\n\n // deprecated\n getLayerAtLevel: function( level ) {\n $.console.error( \"[Viewer.getLayerAtLevel] this function is deprecated; use World.getItemAt() instead.\" );\n return this.world.getItemAt(level);\n },\n\n // deprecated\n getLevelOfLayer: function( drawer ) {\n $.console.error( \"[Viewer.getLevelOfLayer] this function is deprecated; use World.getIndexOfItem() instead.\" );\n return this.world.getIndexOfItem(drawer);\n },\n\n // deprecated\n getLayersCount: function() {\n $.console.error( \"[Viewer.getLayersCount] this function is deprecated; use World.getItemCount() instead.\" );\n return this.world.getItemCount();\n },\n\n // deprecated\n setLayerLevel: function( drawer, level ) {\n $.console.error( \"[Viewer.setLayerLevel] this function is deprecated; use World.setItemIndex() instead.\" );\n return this.world.setItemIndex(drawer, level);\n },\n\n // deprecated\n removeLayer: function( drawer ) {\n $.console.error( \"[Viewer.removeLayer] this function is deprecated; use World.removeItem() instead.\" );\n return this.world.removeItem(drawer);\n },\n\n /**\n * Force the viewer to redraw its contents.\n * @returns {OpenSeadragon.Viewer} Chainable.\n */\n forceRedraw: function() {\n THIS[ this.hash ].forceRedraw = true;\n return this;\n },\n\n /**\n * @function\n * @return {OpenSeadragon.Viewer} Chainable.\n */\n bindSequenceControls: function(){\n\n //////////////////////////////////////////////////////////////////////////\n // Image Sequence Controls\n //////////////////////////////////////////////////////////////////////////\n var onFocusHandler = $.delegate( this, onFocus ),\n onBlurHandler = $.delegate( this, onBlur ),\n onNextHandler = $.delegate( this, onNext ),\n onPreviousHandler = $.delegate( this, onPrevious ),\n navImages = this.navImages,\n useGroup = true;\n\n if( this.showSequenceControl ){\n\n if( this.previousButton || this.nextButton ){\n //if we are binding to custom buttons then layout and\n //grouping is the responsibility of the page author\n useGroup = false;\n }\n\n this.previousButton = new $.Button({\n element: this.previousButton ? $.getElement( this.previousButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.PreviousPage\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.previous.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.previous.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.previous.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.previous.DOWN ),\n onRelease: onPreviousHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n });\n\n this.nextButton = new $.Button({\n element: this.nextButton ? $.getElement( this.nextButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.NextPage\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.next.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.next.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.next.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.next.DOWN ),\n onRelease: onNextHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n });\n\n if( !this.navPrevNextWrap ){\n this.previousButton.disable();\n }\n\n if (!this.tileSources || !this.tileSources.length) {\n this.nextButton.disable();\n }\n\n if( useGroup ){\n this.paging = new $.ButtonGroup({\n buttons: [\n this.previousButton,\n this.nextButton\n ],\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold\n });\n\n this.pagingControl = this.paging.element;\n\n if( this.toolbar ){\n this.toolbar.addControl(\n this.pagingControl,\n {anchor: $.ControlAnchor.BOTTOM_RIGHT}\n );\n }else{\n this.addControl(\n this.pagingControl,\n {anchor: this.sequenceControlAnchor || $.ControlAnchor.TOP_LEFT}\n );\n }\n }\n }\n return this;\n },\n\n\n /**\n * @function\n * @return {OpenSeadragon.Viewer} Chainable.\n */\n bindStandardControls: function(){\n //////////////////////////////////////////////////////////////////////////\n // Navigation Controls\n //////////////////////////////////////////////////////////////////////////\n var beginZoomingInHandler = $.delegate( this, beginZoomingIn ),\n endZoomingHandler = $.delegate( this, endZooming ),\n doSingleZoomInHandler = $.delegate( this, doSingleZoomIn ),\n beginZoomingOutHandler = $.delegate( this, beginZoomingOut ),\n doSingleZoomOutHandler = $.delegate( this, doSingleZoomOut ),\n onHomeHandler = $.delegate( this, onHome ),\n onFullScreenHandler = $.delegate( this, onFullScreen ),\n onRotateLeftHandler = $.delegate( this, onRotateLeft ),\n onRotateRightHandler = $.delegate( this, onRotateRight ),\n onFlipHandler = $.delegate( this, onFlip),\n onFocusHandler = $.delegate( this, onFocus ),\n onBlurHandler = $.delegate( this, onBlur ),\n navImages = this.navImages,\n buttons = [],\n useGroup = true;\n\n\n if ( this.showNavigationControl ) {\n\n if( this.zoomInButton || this.zoomOutButton ||\n this.homeButton || this.fullPageButton ||\n this.rotateLeftButton || this.rotateRightButton ||\n this.flipButton ) {\n //if we are binding to custom buttons then layout and\n //grouping is the responsibility of the page author\n useGroup = false;\n }\n\n if ( this.showZoomControl ) {\n buttons.push( this.zoomInButton = new $.Button({\n element: this.zoomInButton ? $.getElement( this.zoomInButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.ZoomIn\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.zoomIn.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.zoomIn.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.zoomIn.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.zoomIn.DOWN ),\n onPress: beginZoomingInHandler,\n onRelease: endZoomingHandler,\n onClick: doSingleZoomInHandler,\n onEnter: beginZoomingInHandler,\n onExit: endZoomingHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n\n buttons.push( this.zoomOutButton = new $.Button({\n element: this.zoomOutButton ? $.getElement( this.zoomOutButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.ZoomOut\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.zoomOut.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.zoomOut.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.zoomOut.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.zoomOut.DOWN ),\n onPress: beginZoomingOutHandler,\n onRelease: endZoomingHandler,\n onClick: doSingleZoomOutHandler,\n onEnter: beginZoomingOutHandler,\n onExit: endZoomingHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n }\n\n if ( this.showHomeControl ) {\n buttons.push( this.homeButton = new $.Button({\n element: this.homeButton ? $.getElement( this.homeButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.Home\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.home.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.home.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.home.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.home.DOWN ),\n onRelease: onHomeHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n }\n\n if ( this.showFullPageControl ) {\n buttons.push( this.fullPageButton = new $.Button({\n element: this.fullPageButton ? $.getElement( this.fullPageButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.FullPage\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.fullpage.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.fullpage.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.fullpage.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.fullpage.DOWN ),\n onRelease: onFullScreenHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n }\n\n if ( this.showRotationControl ) {\n buttons.push( this.rotateLeftButton = new $.Button({\n element: this.rotateLeftButton ? $.getElement( this.rotateLeftButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.RotateLeft\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.rotateleft.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.rotateleft.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.rotateleft.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.rotateleft.DOWN ),\n onRelease: onRotateLeftHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n\n buttons.push( this.rotateRightButton = new $.Button({\n element: this.rotateRightButton ? $.getElement( this.rotateRightButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.RotateRight\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.rotateright.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.rotateright.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.rotateright.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.rotateright.DOWN ),\n onRelease: onRotateRightHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n }\n\n if ( this.showFlipControl ) {\n buttons.push( this.flipButton = new $.Button({\n element: this.flipButton ? $.getElement( this.flipButton ) : null,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n tooltip: $.getString( \"Tooltips.Flip\" ),\n srcRest: resolveUrl( this.prefixUrl, navImages.flip.REST ),\n srcGroup: resolveUrl( this.prefixUrl, navImages.flip.GROUP ),\n srcHover: resolveUrl( this.prefixUrl, navImages.flip.HOVER ),\n srcDown: resolveUrl( this.prefixUrl, navImages.flip.DOWN ),\n onRelease: onFlipHandler,\n onFocus: onFocusHandler,\n onBlur: onBlurHandler\n }));\n }\n\n if ( useGroup ) {\n this.buttons = new $.ButtonGroup({\n buttons: buttons,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold\n });\n\n this.navControl = this.buttons.element;\n this.addHandler( 'open', $.delegate( this, lightUp ) );\n\n if( this.toolbar ){\n this.toolbar.addControl(\n this.navControl,\n {anchor: this.navigationControlAnchor || $.ControlAnchor.TOP_LEFT}\n );\n } else {\n this.addControl(\n this.navControl,\n {anchor: this.navigationControlAnchor || $.ControlAnchor.TOP_LEFT}\n );\n }\n }\n\n }\n return this;\n },\n\n /**\n * Gets the active page of a sequence\n * @function\n * @return {Number}\n */\n currentPage: function() {\n return this._sequenceIndex;\n },\n\n /**\n * @function\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:page\n */\n goToPage: function( page ){\n if( this.tileSources && page >= 0 && page < this.tileSources.length ){\n this._sequenceIndex = page;\n\n this._updateSequenceButtons( page );\n\n this.open( this.tileSources[ page ] );\n\n if( this.referenceStrip ){\n this.referenceStrip.setFocus( page );\n }\n\n /**\n * Raised when the page is changed on a viewer configured with multiple image sources (see {@link OpenSeadragon.Viewer#goToPage}).\n *\n * @event page\n * @memberof OpenSeadragon.Viewer\n * @type {Object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Number} page - The page index.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'page', { page: page } );\n }\n\n return this;\n },\n\n /**\n * Adds an html element as an overlay to the current viewport. Useful for\n * highlighting words or areas of interest on an image or other zoomable\n * interface. The overlays added via this method are removed when the viewport\n * is closed which include when changing page.\n * @method\n * @param {Element|String|Object} element - A reference to an element or an id for\n * the element which will be overlaid. Or an Object specifying the configuration for the overlay.\n * If using an object, see {@link OpenSeadragon.Overlay} for a list of\n * all available options.\n * @param {OpenSeadragon.Point|OpenSeadragon.Rect} location - The point or\n * rectangle which will be overlaid. This is a viewport relative location.\n * @param {OpenSeadragon.Placement} [placement=OpenSeadragon.Placement.TOP_LEFT] - The position of the\n * viewport which the location coordinates will be treated as relative\n * to.\n * @param {function} [onDraw] - If supplied the callback is called when the overlay\n * needs to be drawn. It it the responsibility of the callback to do any drawing/positioning.\n * It is passed position, size and element.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:add-overlay\n */\n addOverlay: function( element, location, placement, onDraw ) {\n var options;\n if( $.isPlainObject( element ) ){\n options = element;\n } else {\n options = {\n element: element,\n location: location,\n placement: placement,\n onDraw: onDraw\n };\n }\n\n element = $.getElement( options.element );\n\n if ( getOverlayIndex( this.currentOverlays, element ) >= 0 ) {\n // they're trying to add a duplicate overlay\n return this;\n }\n\n var overlay = getOverlayObject( this, options);\n this.currentOverlays.push(overlay);\n overlay.drawHTML( this.overlaysContainer, this.viewport );\n\n /**\n * Raised when an overlay is added to the viewer (see {@link OpenSeadragon.Viewer#addOverlay}).\n *\n * @event add-overlay\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Element} element - The overlay element.\n * @property {OpenSeadragon.Point|OpenSeadragon.Rect} location\n * @property {OpenSeadragon.Placement} placement\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'add-overlay', {\n element: element,\n location: options.location,\n placement: options.placement\n });\n return this;\n },\n\n /**\n * Updates the overlay represented by the reference to the element or\n * element id moving it to the new location, relative to the new placement.\n * @method\n * @param {Element|String} element - A reference to an element or an id for\n * the element which is overlaid.\n * @param {OpenSeadragon.Point|OpenSeadragon.Rect} location - The point or\n * rectangle which will be overlaid. This is a viewport relative location.\n * @param {OpenSeadragon.Placement} [placement=OpenSeadragon.Placement.TOP_LEFT] - The position of the\n * viewport which the location coordinates will be treated as relative\n * to.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:update-overlay\n */\n updateOverlay: function( element, location, placement ) {\n var i;\n\n element = $.getElement( element );\n i = getOverlayIndex( this.currentOverlays, element );\n\n if ( i >= 0 ) {\n this.currentOverlays[ i ].update( location, placement );\n THIS[ this.hash ].forceRedraw = true;\n /**\n * Raised when an overlay's location or placement changes\n * (see {@link OpenSeadragon.Viewer#updateOverlay}).\n *\n * @event update-overlay\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the\n * Viewer which raised the event.\n * @property {Element} element\n * @property {OpenSeadragon.Point|OpenSeadragon.Rect} location\n * @property {OpenSeadragon.Placement} placement\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'update-overlay', {\n element: element,\n location: location,\n placement: placement\n });\n }\n return this;\n },\n\n /**\n * Removes an overlay identified by the reference element or element id\n * and schedules an update.\n * @method\n * @param {Element|String} element - A reference to the element or an\n * element id which represent the ovelay content to be removed.\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:remove-overlay\n */\n removeOverlay: function( element ) {\n var i;\n\n element = $.getElement( element );\n i = getOverlayIndex( this.currentOverlays, element );\n\n if ( i >= 0 ) {\n this.currentOverlays[ i ].destroy();\n this.currentOverlays.splice( i, 1 );\n THIS[ this.hash ].forceRedraw = true;\n /**\n * Raised when an overlay is removed from the viewer\n * (see {@link OpenSeadragon.Viewer#removeOverlay}).\n *\n * @event remove-overlay\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the\n * Viewer which raised the event.\n * @property {Element} element - The overlay element.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'remove-overlay', {\n element: element\n });\n }\n return this;\n },\n\n /**\n * Removes all currently configured Overlays from this Viewer and schedules\n * an update.\n * @method\n * @return {OpenSeadragon.Viewer} Chainable.\n * @fires OpenSeadragon.Viewer.event:clear-overlay\n */\n clearOverlays: function() {\n while ( this.currentOverlays.length > 0 ) {\n this.currentOverlays.pop().destroy();\n }\n THIS[ this.hash ].forceRedraw = true;\n /**\n * Raised when all overlays are removed from the viewer (see {@link OpenSeadragon.Drawer#clearOverlays}).\n *\n * @event clear-overlay\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'clear-overlay', {} );\n return this;\n },\n\n /**\n * Finds an overlay identified by the reference element or element id\n * and returns it as an object, return null if not found.\n * @method\n * @param {Element|String} element - A reference to the element or an\n * element id which represents the overlay content.\n * @return {OpenSeadragon.Overlay} the matching overlay or null if none found.\n */\n getOverlayById: function( element ) {\n var i;\n\n element = $.getElement( element );\n i = getOverlayIndex( this.currentOverlays, element );\n\n if (i >= 0) {\n return this.currentOverlays[i];\n } else {\n return null;\n }\n },\n\n /**\n * Updates the sequence buttons.\n * @function OpenSeadragon.Viewer.prototype._updateSequenceButtons\n * @private\n * @param {Number} Sequence Value\n */\n _updateSequenceButtons: function( page ) {\n\n if ( this.nextButton ) {\n if(!this.tileSources || this.tileSources.length - 1 === page) {\n //Disable next button\n if ( !this.navPrevNextWrap ) {\n this.nextButton.disable();\n }\n } else {\n this.nextButton.enable();\n }\n }\n if ( this.previousButton ) {\n if ( page > 0 ) {\n //Enable previous button\n this.previousButton.enable();\n } else {\n if ( !this.navPrevNextWrap ) {\n this.previousButton.disable();\n }\n }\n }\n },\n\n /**\n * Display a message in the viewport\n * @function OpenSeadragon.Viewer.prototype._showMessage\n * @private\n * @param {String} text message\n */\n _showMessage: function ( message ) {\n this._hideMessage();\n\n var div = $.makeNeutralElement( \"div\" );\n div.appendChild( document.createTextNode( message ) );\n\n this.messageDiv = $.makeCenteredNode( div );\n\n $.addClass(this.messageDiv, \"openseadragon-message\");\n\n this.container.appendChild( this.messageDiv );\n },\n\n /**\n * Hide any currently displayed viewport message\n * @function OpenSeadragon.Viewer.prototype._hideMessage\n * @private\n */\n _hideMessage: function () {\n var div = this.messageDiv;\n if (div) {\n div.parentNode.removeChild(div);\n delete this.messageDiv;\n }\n },\n\n /**\n * Gets this viewer's gesture settings for the given pointer device type.\n * @method\n * @param {String} type - The pointer device type to get the gesture settings for (\"mouse\", \"touch\", \"pen\", etc.).\n * @return {OpenSeadragon.GestureSettings}\n */\n gestureSettingsByDeviceType: function ( type ) {\n switch ( type ) {\n case 'mouse':\n return this.gestureSettingsMouse;\n case 'touch':\n return this.gestureSettingsTouch;\n case 'pen':\n return this.gestureSettingsPen;\n default:\n return this.gestureSettingsUnknown;\n }\n },\n\n // private\n _drawOverlays: function() {\n var i,\n length = this.currentOverlays.length;\n for ( i = 0; i < length; i++ ) {\n this.currentOverlays[ i ].drawHTML( this.overlaysContainer, this.viewport );\n }\n },\n\n /**\n * Cancel the \"in flight\" images.\n */\n _cancelPendingImages: function() {\n this._loadQueue = [];\n },\n\n /**\n * Removes the reference strip and disables displaying it.\n * @function\n */\n removeReferenceStrip: function() {\n this.showReferenceStrip = false;\n\n if (this.referenceStrip) {\n this.referenceStrip.destroy();\n this.referenceStrip = null;\n }\n },\n\n /**\n * Enables and displays the reference strip based on the currently set tileSources.\n * Works only when the Viewer has sequenceMode set to true.\n * @function\n */\n addReferenceStrip: function() {\n this.showReferenceStrip = true;\n\n if (this.sequenceMode) {\n if (this.referenceStrip) {\n return;\n }\n\n if (this.tileSources.length && this.tileSources.length > 1) {\n this.referenceStrip = new $.ReferenceStrip({\n id: this.referenceStripElement,\n position: this.referenceStripPosition,\n sizeRatio: this.referenceStripSizeRatio,\n scroll: this.referenceStripScroll,\n height: this.referenceStripHeight,\n width: this.referenceStripWidth,\n tileSources: this.tileSources,\n prefixUrl: this.prefixUrl,\n useCanvas: this.useCanvas,\n viewer: this\n });\n\n this.referenceStrip.setFocus( this._sequenceIndex );\n }\n } else {\n $.console.warn('Attempting to display a reference strip while \"sequenceMode\" is off.');\n }\n }\n});\n\n\n/**\n * _getSafeElemSize is like getElementSize(), but refuses to return 0 for x or y,\n * which was causing some calling operations to return NaN.\n * @returns {Point}\n * @private\n */\nfunction _getSafeElemSize (oElement) {\n oElement = $.getElement( oElement );\n\n return new $.Point(\n (oElement.clientWidth === 0 ? 1 : oElement.clientWidth),\n (oElement.clientHeight === 0 ? 1 : oElement.clientHeight)\n );\n}\n\n\n/**\n * @function\n * @private\n */\nfunction getTileSourceImplementation( viewer, tileSource, imgOptions, successCallback,\n failCallback ) {\n var _this = viewer;\n\n //allow plain xml strings or json strings to be parsed here\n if ( $.type( tileSource ) == 'string' ) {\n //xml should start with \"<\" and end with \">\"\n if ( tileSource.match( /^\\s*<.*>\\s*$/ ) ) {\n tileSource = $.parseXml( tileSource );\n //json should start with \"{\" or \"[\" and end with \"}\" or \"]\"\n } else if ( tileSource.match(/^\\s*[\\{\\[].*[\\}\\]]\\s*$/ ) ) {\n try {\n var tileSourceJ = $.parseJSON(tileSource);\n tileSource = tileSourceJ;\n } catch (e) {\n //tileSource = tileSource;\n }\n }\n }\n\n function waitUntilReady(tileSource, originalTileSource) {\n if (tileSource.ready) {\n successCallback(tileSource);\n } else {\n tileSource.addHandler('ready', function () {\n successCallback(tileSource);\n });\n tileSource.addHandler('open-failed', function (event) {\n failCallback({\n message: event.message,\n source: originalTileSource\n });\n });\n }\n }\n\n setTimeout( function() {\n if ( $.type( tileSource ) == 'string' ) {\n //If its still a string it means it must be a url at this point\n tileSource = new $.TileSource({\n url: tileSource,\n crossOriginPolicy: imgOptions.crossOriginPolicy !== undefined ?\n imgOptions.crossOriginPolicy : viewer.crossOriginPolicy,\n ajaxWithCredentials: viewer.ajaxWithCredentials,\n ajaxHeaders: viewer.ajaxHeaders,\n useCanvas: viewer.useCanvas,\n success: function( event ) {\n successCallback( event.tileSource );\n }\n });\n tileSource.addHandler( 'open-failed', function( event ) {\n failCallback( event );\n } );\n\n } else if ($.isPlainObject(tileSource) || tileSource.nodeType) {\n if (tileSource.crossOriginPolicy === undefined &&\n (imgOptions.crossOriginPolicy !== undefined || viewer.crossOriginPolicy !== undefined)) {\n tileSource.crossOriginPolicy = imgOptions.crossOriginPolicy !== undefined ?\n imgOptions.crossOriginPolicy : viewer.crossOriginPolicy;\n }\n if (tileSource.ajaxWithCredentials === undefined) {\n tileSource.ajaxWithCredentials = viewer.ajaxWithCredentials;\n }\n if (tileSource.useCanvas === undefined) {\n tileSource.useCanvas = viewer.useCanvas;\n }\n\n if ( $.isFunction( tileSource.getTileUrl ) ) {\n //Custom tile source\n var customTileSource = new $.TileSource( tileSource );\n customTileSource.getTileUrl = tileSource.getTileUrl;\n successCallback( customTileSource );\n } else {\n //inline configuration\n var $TileSource = $.TileSource.determineType( _this, tileSource );\n if ( !$TileSource ) {\n failCallback( {\n message: \"Unable to load TileSource\",\n source: tileSource\n });\n return;\n }\n var options = $TileSource.prototype.configure.apply( _this, [ tileSource ] );\n waitUntilReady(new $TileSource(options), tileSource);\n }\n } else {\n //can assume it's already a tile source implementation\n waitUntilReady(tileSource, tileSource);\n }\n });\n}\n\nfunction getOverlayObject( viewer, overlay ) {\n if ( overlay instanceof $.Overlay ) {\n return overlay;\n }\n\n var element = null;\n if ( overlay.element ) {\n element = $.getElement( overlay.element );\n } else {\n var id = overlay.id ?\n overlay.id :\n \"openseadragon-overlay-\" + Math.floor( Math.random() * 10000000 );\n\n element = $.getElement( overlay.id );\n if ( !element ) {\n element = document.createElement( \"a\" );\n element.href = \"#/overlay/\" + id;\n }\n element.id = id;\n $.addClass( element, overlay.className ?\n overlay.className :\n \"openseadragon-overlay\"\n );\n }\n\n var location = overlay.location;\n var width = overlay.width;\n var height = overlay.height;\n if (!location) {\n var x = overlay.x;\n var y = overlay.y;\n if (overlay.px !== undefined) {\n var rect = viewer.viewport.imageToViewportRectangle(new $.Rect(\n overlay.px,\n overlay.py,\n width || 0,\n height || 0));\n x = rect.x;\n y = rect.y;\n width = width !== undefined ? rect.width : undefined;\n height = height !== undefined ? rect.height : undefined;\n }\n location = new $.Point(x, y);\n }\n\n var placement = overlay.placement;\n if (placement && $.type(placement) === \"string\") {\n placement = $.Placement[overlay.placement.toUpperCase()];\n }\n\n return new $.Overlay({\n element: element,\n location: location,\n placement: placement,\n onDraw: overlay.onDraw,\n checkResize: overlay.checkResize,\n width: width,\n height: height,\n rotationMode: overlay.rotationMode\n });\n}\n\n/**\n * @private\n * @inner\n * Determines the index of the given overlay in the given overlays array.\n */\nfunction getOverlayIndex( overlays, element ) {\n var i;\n for ( i = overlays.length - 1; i >= 0; i-- ) {\n if ( overlays[ i ].element === element ) {\n return i;\n }\n }\n\n return -1;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// Schedulers provide the general engine for animation\n///////////////////////////////////////////////////////////////////////////////\nfunction scheduleUpdate( viewer, updateFunc ){\n return $.requestAnimationFrame( function(){\n updateFunc( viewer );\n } );\n}\n\n\n//provides a sequence in the fade animation\nfunction scheduleControlsFade( viewer ) {\n $.requestAnimationFrame( function(){\n updateControlsFade( viewer );\n });\n}\n\n\n//initiates an animation to hide the controls\nfunction beginControlsAutoHide( viewer ) {\n if ( !viewer.autoHideControls ) {\n return;\n }\n viewer.controlsShouldFade = true;\n viewer.controlsFadeBeginTime =\n $.now() +\n viewer.controlsFadeDelay;\n\n window.setTimeout( function(){\n scheduleControlsFade( viewer );\n }, viewer.controlsFadeDelay );\n}\n\n\n//determines if fade animation is done or continues the animation\nfunction updateControlsFade( viewer ) {\n var currentTime,\n deltaTime,\n opacity,\n i;\n if ( viewer.controlsShouldFade ) {\n currentTime = $.now();\n deltaTime = currentTime - viewer.controlsFadeBeginTime;\n opacity = 1.0 - deltaTime / viewer.controlsFadeLength;\n\n opacity = Math.min( 1.0, opacity );\n opacity = Math.max( 0.0, opacity );\n\n for ( i = viewer.controls.length - 1; i >= 0; i--) {\n if (viewer.controls[ i ].autoFade) {\n viewer.controls[ i ].setOpacity( opacity );\n }\n }\n\n if ( opacity > 0 ) {\n // fade again\n scheduleControlsFade( viewer );\n }\n }\n}\n\n\n//stop the fade animation on the controls and show them\nfunction abortControlsAutoHide( viewer ) {\n var i;\n viewer.controlsShouldFade = false;\n for ( i = viewer.controls.length - 1; i >= 0; i-- ) {\n viewer.controls[ i ].setOpacity( 1.0 );\n }\n}\n\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Default view event handlers.\n///////////////////////////////////////////////////////////////////////////////\nfunction onFocus(){\n abortControlsAutoHide( this );\n}\n\nfunction onBlur(){\n beginControlsAutoHide( this );\n\n}\n\nfunction onCanvasKeyDown( event ) {\n var canvasKeyDownEventArgs = {\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction,\n preventVerticalPan: event.preventVerticalPan,\n preventHorizontalPan: event.preventHorizontalPan\n };\n\n /**\n * Raised when a keyboard key is pressed and the focus is on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-key\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {Boolean} preventDefaultAction - Set to true to prevent default keyboard behaviour. Default: false.\n * @property {Boolean} preventVerticalPan - Set to true to prevent keyboard vertical panning. Default: false.\n * @property {Boolean} preventHorizontalPan - Set to true to prevent keyboard horizontal panning. Default: false.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n\n this.raiseEvent('canvas-key', canvasKeyDownEventArgs);\n\n if ( !canvasKeyDownEventArgs.preventDefaultAction && !event.ctrl && !event.alt && !event.meta ) {\n switch( event.keyCode ){\n case 38://up arrow\n if (!canvasKeyDownEventArgs.preventVerticalPan) {\n if ( event.shift ) {\n this.viewport.zoomBy(1.1);\n } else {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(0, -this.pixelsPerArrowPress)));\n }\n this.viewport.applyConstraints();\n }\n return false;\n case 40://down arrow\n if (!canvasKeyDownEventArgs.preventVerticalPan) {\n if ( event.shift ) {\n this.viewport.zoomBy(0.9);\n } else {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(0, this.pixelsPerArrowPress)));\n }\n this.viewport.applyConstraints();\n }\n return false;\n case 37://left arrow\n if (!canvasKeyDownEventArgs.preventHorizontalPan) {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(-this.pixelsPerArrowPress, 0)));\n this.viewport.applyConstraints();\n }\n return false;\n case 39://right arrow\n if (!canvasKeyDownEventArgs.preventHorizontalPan) {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(this.pixelsPerArrowPress, 0)));\n this.viewport.applyConstraints();\n }\n return false;\n default:\n //console.log( 'navigator keycode %s', event.keyCode );\n return true;\n }\n } else {\n return true;\n }\n}\nfunction onCanvasKeyPress( event ) {\n var canvasKeyPressEventArgs = {\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction,\n preventVerticalPan: event.preventVerticalPan,\n preventHorizontalPan: event.preventHorizontalPan\n };\n\n // This event is documented in onCanvasKeyDown\n this.raiseEvent('canvas-key', canvasKeyPressEventArgs);\n\n if ( !canvasKeyPressEventArgs.preventDefaultAction && !event.ctrl && !event.alt && !event.meta ) {\n switch( event.keyCode ){\n case 43://=|+\n case 61://=|+\n this.viewport.zoomBy(1.1);\n this.viewport.applyConstraints();\n return false;\n case 45://-|_\n this.viewport.zoomBy(0.9);\n this.viewport.applyConstraints();\n return false;\n case 48://0|)\n this.viewport.goHome();\n this.viewport.applyConstraints();\n return false;\n case 119://w\n case 87://W\n if (!canvasKeyPressEventArgs.preventVerticalPan) {\n if ( event.shift ) {\n this.viewport.zoomBy(1.1);\n } else {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(0, -40)));\n }\n this.viewport.applyConstraints();\n }\n return false;\n case 115://s\n case 83://S\n if (!canvasKeyPressEventArgs.preventVerticalPan) {\n if ( event.shift ) {\n this.viewport.zoomBy(0.9);\n } else {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(0, 40)));\n }\n this.viewport.applyConstraints();\n }\n return false;\n case 97://a\n if (!canvasKeyPressEventArgs.preventHorizontalPan) {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(-40, 0)));\n this.viewport.applyConstraints();\n }\n return false;\n case 100://d\n if (!canvasKeyPressEventArgs.preventHorizontalPan) {\n this.viewport.panBy(this.viewport.deltaPointsFromPixels(new $.Point(40, 0)));\n this.viewport.applyConstraints();\n }\n return false;\n case 114: //r - clockwise rotation\n if(this.viewport.flipped){\n this.viewport.setRotation($.positiveModulo(this.viewport.degrees - this.rotationIncrement, 360));\n } else{\n this.viewport.setRotation($.positiveModulo(this.viewport.degrees + this.rotationIncrement, 360));\n }\n this.viewport.applyConstraints();\n return false;\n case 82: //R - counterclockwise rotation\n if(this.viewport.flipped){\n this.viewport.setRotation($.positiveModulo(this.viewport.degrees + this.rotationIncrement, 360));\n } else{\n this.viewport.setRotation($.positiveModulo(this.viewport.degrees - this.rotationIncrement, 360));\n }\n this.viewport.applyConstraints();\n return false;\n case 102: //f\n this.viewport.toggleFlip();\n return false;\n default:\n // console.log( 'navigator keycode %s', event.keyCode );\n return true;\n }\n } else {\n return true;\n }\n}\n\nfunction onCanvasClick( event ) {\n var gestureSettings;\n\n var haveKeyboardFocus = document.activeElement == this.canvas;\n\n // If we don't have keyboard focus, request it.\n if ( !haveKeyboardFocus ) {\n this.canvas.focus();\n }\n if(this.viewport.flipped){\n event.position.x = this.viewport.getContainerSize().x - event.position.x;\n }\n\n var canvasClickEventArgs = {\n tracker: event.eventSource,\n position: event.position,\n quick: event.quick,\n shift: event.shift,\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction\n };\n\n /**\n * Raised when a mouse press/release or touch/remove occurs on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-click\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Boolean} quick - True only if the clickDistThreshold and clickTimeThreshold are both passed. Useful for differentiating between clicks and drags.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {Boolean} preventDefaultAction - Set to true to prevent default click to zoom behaviour. Default: false.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-click', canvasClickEventArgs);\n\n if ( !canvasClickEventArgs.preventDefaultAction && this.viewport && event.quick ) {\n gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );\n if ( gestureSettings.clickToZoom ) {\n this.viewport.zoomBy(\n event.shift ? 1.0 / this.zoomPerClick : this.zoomPerClick,\n gestureSettings.zoomToRefPoint ? this.viewport.pointFromPixel( event.position, true ) : null\n );\n this.viewport.applyConstraints();\n }\n }\n}\n\nfunction onCanvasDblClick( event ) {\n var gestureSettings;\n\n var canvasDblClickEventArgs = {\n tracker: event.eventSource,\n position: event.position,\n shift: event.shift,\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction\n };\n\n /**\n * Raised when a double mouse press/release or touch/remove occurs on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-double-click\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {Boolean} preventDefaultAction - Set to true to prevent default double tap to zoom behaviour. Default: false.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-double-click', canvasDblClickEventArgs);\n\n if ( !canvasDblClickEventArgs.preventDefaultAction && this.viewport ) {\n gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );\n if ( gestureSettings.dblClickToZoom ) {\n this.viewport.zoomBy(\n event.shift ? 1.0 / this.zoomPerClick : this.zoomPerClick,\n gestureSettings.zoomToRefPoint ? this.viewport.pointFromPixel( event.position, true ) : null\n );\n this.viewport.applyConstraints();\n }\n }\n}\n\nfunction onCanvasDrag( event ) {\n var gestureSettings;\n\n var canvasDragEventArgs = {\n tracker: event.eventSource,\n position: event.position,\n delta: event.delta,\n speed: event.speed,\n direction: event.direction,\n shift: event.shift,\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction\n };\n\n /**\n * Raised when a mouse or touch drag operation occurs on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-drag\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {OpenSeadragon.Point} delta - The x,y components of the difference between start drag and end drag.\n * @property {Number} speed - Current computed speed, in pixels per second.\n * @property {Number} direction - Current computed direction, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {Boolean} preventDefaultAction - Set to true to prevent default drag behaviour. Default: false.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-drag', canvasDragEventArgs);\n\n if ( !canvasDragEventArgs.preventDefaultAction && this.viewport ) {\n gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );\n if( !this.panHorizontal ){\n event.delta.x = 0;\n }\n if( !this.panVertical ){\n event.delta.y = 0;\n }\n if(this.viewport.flipped){\n event.delta.x = -event.delta.x;\n }\n\n if( this.constrainDuringPan ){\n var delta = this.viewport.deltaPointsFromPixels( event.delta.negate() );\n\n this.viewport.centerSpringX.target.value += delta.x;\n this.viewport.centerSpringY.target.value += delta.y;\n\n var bounds = this.viewport.getBounds();\n var constrainedBounds = this.viewport.getConstrainedBounds();\n\n this.viewport.centerSpringX.target.value -= delta.x;\n this.viewport.centerSpringY.target.value -= delta.y;\n\n if (bounds.x != constrainedBounds.x) {\n event.delta.x = 0;\n }\n\n if (bounds.y != constrainedBounds.y) {\n event.delta.y = 0;\n }\n }\n\n this.viewport.panBy( this.viewport.deltaPointsFromPixels( event.delta.negate() ), gestureSettings.flickEnabled && !this.constrainDuringPan);\n }\n}\n\nfunction onCanvasDragEnd( event ) {\n if (!event.preventDefaultAction && this.viewport) {\n var gestureSettings = this.gestureSettingsByDeviceType(event.pointerType);\n if (gestureSettings.flickEnabled &&\n event.speed >= gestureSettings.flickMinSpeed) {\n var amplitudeX = 0;\n if (this.panHorizontal) {\n amplitudeX = gestureSettings.flickMomentum * event.speed *\n Math.cos(event.direction);\n }\n var amplitudeY = 0;\n if (this.panVertical) {\n amplitudeY = gestureSettings.flickMomentum * event.speed *\n Math.sin(event.direction);\n }\n var center = this.viewport.pixelFromPoint(\n this.viewport.getCenter(true));\n var target = this.viewport.pointFromPixel(\n new $.Point(center.x - amplitudeX, center.y - amplitudeY));\n this.viewport.panTo(target, false);\n }\n this.viewport.applyConstraints();\n }\n /**\n * Raised when a mouse or touch drag operation ends on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-drag-end\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} speed - Speed at the end of a drag gesture, in pixels per second.\n * @property {Number} direction - Direction at the end of a drag gesture, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('canvas-drag-end', {\n tracker: event.eventSource,\n position: event.position,\n speed: event.speed,\n direction: event.direction,\n shift: event.shift,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasEnter( event ) {\n /**\n * Raised when a pointer enters the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-enter\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {String} pointerType - \"mouse\", \"touch\", \"pen\", etc.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} buttons - Current buttons pressed. A combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @property {Number} pointers - Number of pointers (all types) active in the tracked element.\n * @property {Boolean} insideElementPressed - True if the left mouse button is currently being pressed and was initiated inside the tracked element, otherwise false.\n * @property {Boolean} buttonDownAny - Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-enter', {\n tracker: event.eventSource,\n pointerType: event.pointerType,\n position: event.position,\n buttons: event.buttons,\n pointers: event.pointers,\n insideElementPressed: event.insideElementPressed,\n buttonDownAny: event.buttonDownAny,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasExit( event ) {\n\n if (window.location != window.parent.location){\n $.MouseTracker.resetAllMouseTrackers();\n }\n\n /**\n * Raised when a pointer leaves the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-exit\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {String} pointerType - \"mouse\", \"touch\", \"pen\", etc.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} buttons - Current buttons pressed. A combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @property {Number} pointers - Number of pointers (all types) active in the tracked element.\n * @property {Boolean} insideElementPressed - True if the left mouse button is currently being pressed and was initiated inside the tracked element, otherwise false.\n * @property {Boolean} buttonDownAny - Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-exit', {\n tracker: event.eventSource,\n pointerType: event.pointerType,\n position: event.position,\n buttons: event.buttons,\n pointers: event.pointers,\n insideElementPressed: event.insideElementPressed,\n buttonDownAny: event.buttonDownAny,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasPress( event ) {\n /**\n * Raised when the primary mouse button is pressed or touch starts on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-press\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {String} pointerType - \"mouse\", \"touch\", \"pen\", etc.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Boolean} insideElementPressed - True if the left mouse button is currently being pressed and was initiated inside the tracked element, otherwise false.\n * @property {Boolean} insideElementReleased - True if the cursor still inside the tracked element when the button was released.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-press', {\n tracker: event.eventSource,\n pointerType: event.pointerType,\n position: event.position,\n insideElementPressed: event.insideElementPressed,\n insideElementReleased: event.insideElementReleased,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasRelease( event ) {\n /**\n * Raised when the primary mouse button is released or touch ends on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-release\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {String} pointerType - \"mouse\", \"touch\", \"pen\", etc.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Boolean} insideElementPressed - True if the left mouse button is currently being pressed and was initiated inside the tracked element, otherwise false.\n * @property {Boolean} insideElementReleased - True if the cursor still inside the tracked element when the button was released.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-release', {\n tracker: event.eventSource,\n pointerType: event.pointerType,\n position: event.position,\n insideElementPressed: event.insideElementPressed,\n insideElementReleased: event.insideElementReleased,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasNonPrimaryPress( event ) {\n /**\n * Raised when any non-primary pointer button is pressed on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-nonprimary-press\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {String} pointerType - \"mouse\", \"touch\", \"pen\", etc.\n * @property {Number} button - Button which caused the event.\n * -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * @property {Number} buttons - Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-nonprimary-press', {\n tracker: event.eventSource,\n position: event.position,\n pointerType: event.pointerType,\n button: event.button,\n buttons: event.buttons,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasNonPrimaryRelease( event ) {\n /**\n * Raised when any non-primary pointer button is released on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-nonprimary-release\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {String} pointerType - \"mouse\", \"touch\", \"pen\", etc.\n * @property {Number} button - Button which caused the event.\n * -1: none, 0: primary/left, 1: aux/middle, 2: secondary/right, 3: X1/back, 4: X2/forward, 5: pen eraser.\n * @property {Number} buttons - Current buttons pressed.\n * Combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-nonprimary-release', {\n tracker: event.eventSource,\n position: event.position,\n pointerType: event.pointerType,\n button: event.button,\n buttons: event.buttons,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onCanvasPinch( event ) {\n var gestureSettings,\n centerPt,\n lastCenterPt,\n panByPt;\n\n if ( !event.preventDefaultAction && this.viewport ) {\n gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );\n if ( gestureSettings.pinchToZoom ) {\n centerPt = this.viewport.pointFromPixel( event.center, true );\n lastCenterPt = this.viewport.pointFromPixel( event.lastCenter, true );\n panByPt = lastCenterPt.minus( centerPt );\n if( !this.panHorizontal ) {\n panByPt.x = 0;\n }\n if( !this.panVertical ) {\n panByPt.y = 0;\n }\n this.viewport.zoomBy( event.distance / event.lastDistance, centerPt, true );\n if ( gestureSettings.zoomToRefPoint ) {\n this.viewport.panBy(panByPt, true);\n }\n this.viewport.applyConstraints();\n }\n if ( gestureSettings.pinchRotate ) {\n // Pinch rotate\n var angle1 = Math.atan2(event.gesturePoints[0].currentPos.y - event.gesturePoints[1].currentPos.y,\n event.gesturePoints[0].currentPos.x - event.gesturePoints[1].currentPos.x);\n var angle2 = Math.atan2(event.gesturePoints[0].lastPos.y - event.gesturePoints[1].lastPos.y,\n event.gesturePoints[0].lastPos.x - event.gesturePoints[1].lastPos.x);\n this.viewport.setRotation(this.viewport.getRotation() + ((angle1 - angle2) * (180 / Math.PI)));\n }\n }\n /**\n * Raised when a pinch event occurs on the {@link OpenSeadragon.Viewer#canvas} element.\n *\n * @event canvas-pinch\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {Array.} gesturePoints - Gesture points associated with the gesture. Velocity data can be found here.\n * @property {OpenSeadragon.Point} lastCenter - The previous center point of the two pinch contact points relative to the tracked element.\n * @property {OpenSeadragon.Point} center - The center point of the two pinch contact points relative to the tracked element.\n * @property {Number} lastDistance - The previous distance between the two pinch contact points in CSS pixels.\n * @property {Number} distance - The distance between the two pinch contact points in CSS pixels.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('canvas-pinch', {\n tracker: event.eventSource,\n gesturePoints: event.gesturePoints,\n lastCenter: event.lastCenter,\n center: event.center,\n lastDistance: event.lastDistance,\n distance: event.distance,\n shift: event.shift,\n originalEvent: event.originalEvent\n });\n //cancels event\n return false;\n}\n\nfunction onCanvasScroll( event ) {\n var gestureSettings,\n factor,\n thisScrollTime,\n deltaScrollTime;\n\n /* Certain scroll devices fire the scroll event way too fast so we are injecting a simple adjustment to keep things\n * partially normalized. If we have already fired an event within the last 'minScrollDelta' milliseconds we skip\n * this one and wait for the next event. */\n thisScrollTime = $.now();\n deltaScrollTime = thisScrollTime - this._lastScrollTime;\n if (deltaScrollTime > this.minScrollDeltaTime) {\n this._lastScrollTime = thisScrollTime;\n\n if(this.viewport.flipped){\n event.position.x = this.viewport.getContainerSize().x - event.position.x;\n }\n\n if ( !event.preventDefaultAction && this.viewport ) {\n gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );\n if ( gestureSettings.scrollToZoom ) {\n factor = Math.pow( this.zoomPerScroll, event.scroll );\n this.viewport.zoomBy(\n factor,\n gestureSettings.zoomToRefPoint ? this.viewport.pointFromPixel( event.position, true ) : null\n );\n this.viewport.applyConstraints();\n }\n }\n /**\n * Raised when a scroll event occurs on the {@link OpenSeadragon.Viewer#canvas} element (mouse wheel).\n *\n * @event canvas-scroll\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} scroll - The scroll delta for the event.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'canvas-scroll', {\n tracker: event.eventSource,\n position: event.position,\n scroll: event.scroll,\n shift: event.shift,\n originalEvent: event.originalEvent\n });\n if (gestureSettings && gestureSettings.scrollToZoom) {\n //cancels event\n return false;\n }\n }\n else {\n gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );\n if (gestureSettings && gestureSettings.scrollToZoom) {\n return false; // We are swallowing this event\n }\n }\n}\n\nfunction onContainerEnter( event ) {\n THIS[ this.hash ].mouseInside = true;\n abortControlsAutoHide( this );\n /**\n * Raised when the cursor enters the {@link OpenSeadragon.Viewer#container} element.\n *\n * @event container-enter\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} buttons - Current buttons pressed. A combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @property {Number} pointers - Number of pointers (all types) active in the tracked element.\n * @property {Boolean} insideElementPressed - True if the left mouse button is currently being pressed and was initiated inside the tracked element, otherwise false.\n * @property {Boolean} buttonDownAny - Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'container-enter', {\n tracker: event.eventSource,\n position: event.position,\n buttons: event.buttons,\n pointers: event.pointers,\n insideElementPressed: event.insideElementPressed,\n buttonDownAny: event.buttonDownAny,\n originalEvent: event.originalEvent\n });\n}\n\nfunction onContainerExit( event ) {\n if ( event.pointers < 1 ) {\n THIS[ this.hash ].mouseInside = false;\n if ( !THIS[ this.hash ].animating ) {\n beginControlsAutoHide( this );\n }\n }\n /**\n * Raised when the cursor leaves the {@link OpenSeadragon.Viewer#container} element.\n *\n * @event container-exit\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} buttons - Current buttons pressed. A combination of bit flags 0: none, 1: primary (or touch contact), 2: secondary, 4: aux (often middle), 8: X1 (often back), 16: X2 (often forward), 32: pen eraser.\n * @property {Number} pointers - Number of pointers (all types) active in the tracked element.\n * @property {Boolean} insideElementPressed - True if the left mouse button is currently being pressed and was initiated inside the tracked element, otherwise false.\n * @property {Boolean} buttonDownAny - Was the button down anywhere in the screen during the event. Deprecated. Use buttons instead.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'container-exit', {\n tracker: event.eventSource,\n position: event.position,\n buttons: event.buttons,\n pointers: event.pointers,\n insideElementPressed: event.insideElementPressed,\n buttonDownAny: event.buttonDownAny,\n originalEvent: event.originalEvent\n });\n}\n\n\n///////////////////////////////////////////////////////////////////////////////\n// Page update routines ( aka Views - for future reference )\n///////////////////////////////////////////////////////////////////////////////\n\nfunction updateMulti( viewer ) {\n updateOnce( viewer );\n\n // Request the next frame, unless we've been closed\n if ( viewer.isOpen() ) {\n viewer._updateRequestId = scheduleUpdate( viewer, updateMulti );\n } else {\n viewer._updateRequestId = false;\n }\n}\n\nfunction updateOnce( viewer ) {\n\n //viewer.profiler.beginUpdate();\n\n if (viewer._opening) {\n return;\n }\n\n if (viewer.autoResize) {\n var containerSize = _getSafeElemSize(viewer.container);\n var prevContainerSize = THIS[viewer.hash].prevContainerSize;\n if (!containerSize.equals(prevContainerSize)) {\n var viewport = viewer.viewport;\n if (viewer.preserveImageSizeOnResize) {\n var resizeRatio = prevContainerSize.x / containerSize.x;\n var zoom = viewport.getZoom() * resizeRatio;\n var center = viewport.getCenter();\n viewport.resize(containerSize, false);\n viewport.zoomTo(zoom, null, true);\n viewport.panTo(center, true);\n } else {\n // maintain image position\n var oldBounds = viewport.getBounds();\n viewport.resize(containerSize, true);\n viewport.fitBoundsWithConstraints(oldBounds, true);\n }\n THIS[viewer.hash].prevContainerSize = containerSize;\n THIS[viewer.hash].forceRedraw = true;\n }\n }\n\n var viewportChange = viewer.viewport.update();\n var animated = viewer.world.update() || viewportChange;\n\n if (viewportChange) {\n /**\n * Raised when any spring animation update occurs (zoom, pan, etc.),\n * before the viewer has drawn the new location.\n *\n * @event viewport-change\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n viewer.raiseEvent('viewport-change');\n }\n\n if( viewer.referenceStrip ){\n animated = viewer.referenceStrip.update( viewer.viewport ) || animated;\n }\n\n if ( !THIS[ viewer.hash ].animating && animated ) {\n /**\n * Raised when any spring animation starts (zoom, pan, etc.).\n *\n * @event animation-start\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n viewer.raiseEvent( \"animation-start\" );\n abortControlsAutoHide( viewer );\n }\n\n if ( animated || THIS[ viewer.hash ].forceRedraw || viewer.world.needsDraw() ) {\n drawWorld( viewer );\n viewer._drawOverlays();\n if( viewer.navigator ){\n viewer.navigator.update( viewer.viewport );\n }\n\n THIS[ viewer.hash ].forceRedraw = false;\n\n if (animated) {\n /**\n * Raised when any spring animation update occurs (zoom, pan, etc.),\n * after the viewer has drawn the new location.\n *\n * @event animation\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n viewer.raiseEvent( \"animation\" );\n }\n }\n\n if ( THIS[ viewer.hash ].animating && !animated ) {\n /**\n * Raised when any spring animation ends (zoom, pan, etc.).\n *\n * @event animation-finish\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n viewer.raiseEvent( \"animation-finish\" );\n\n if ( !THIS[ viewer.hash ].mouseInside ) {\n beginControlsAutoHide( viewer );\n }\n }\n\n THIS[ viewer.hash ].animating = animated;\n\n //viewer.profiler.endUpdate();\n}\n\nfunction drawWorld( viewer ) {\n viewer.imageLoader.clear();\n viewer.drawer.clear();\n viewer.world.draw();\n\n /**\n * - Needs documentation -\n *\n * @event update-viewport\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n viewer.raiseEvent( 'update-viewport', {} );\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// Navigation Controls\n///////////////////////////////////////////////////////////////////////////////\nfunction resolveUrl( prefix, url ) {\n return prefix ? prefix + url : url;\n}\n\n\n\nfunction beginZoomingIn() {\n THIS[ this.hash ].lastZoomTime = $.now();\n THIS[ this.hash ].zoomFactor = this.zoomPerSecond;\n THIS[ this.hash ].zooming = true;\n scheduleZoom( this );\n}\n\n\nfunction beginZoomingOut() {\n THIS[ this.hash ].lastZoomTime = $.now();\n THIS[ this.hash ].zoomFactor = 1.0 / this.zoomPerSecond;\n THIS[ this.hash ].zooming = true;\n scheduleZoom( this );\n}\n\n\nfunction endZooming() {\n THIS[ this.hash ].zooming = false;\n}\n\n\nfunction scheduleZoom( viewer ) {\n $.requestAnimationFrame( $.delegate( viewer, doZoom ) );\n}\n\n\nfunction doZoom() {\n var currentTime,\n deltaTime,\n adjustedFactor;\n\n if ( THIS[ this.hash ].zooming && this.viewport) {\n currentTime = $.now();\n deltaTime = currentTime - THIS[ this.hash ].lastZoomTime;\n adjustedFactor = Math.pow( THIS[ this.hash ].zoomFactor, deltaTime / 1000 );\n\n this.viewport.zoomBy( adjustedFactor );\n this.viewport.applyConstraints();\n THIS[ this.hash ].lastZoomTime = currentTime;\n scheduleZoom( this );\n }\n}\n\n\nfunction doSingleZoomIn() {\n if ( this.viewport ) {\n THIS[ this.hash ].zooming = false;\n this.viewport.zoomBy(\n this.zoomPerClick / 1.0\n );\n this.viewport.applyConstraints();\n }\n}\n\n\nfunction doSingleZoomOut() {\n if ( this.viewport ) {\n THIS[ this.hash ].zooming = false;\n this.viewport.zoomBy(\n 1.0 / this.zoomPerClick\n );\n this.viewport.applyConstraints();\n }\n}\n\n\nfunction lightUp() {\n this.buttons.emulateEnter();\n this.buttons.emulateExit();\n}\n\n\nfunction onHome() {\n if ( this.viewport ) {\n this.viewport.goHome();\n }\n}\n\n\nfunction onFullScreen() {\n if ( this.isFullPage() && !$.isFullScreen() ) {\n // Is fullPage but not fullScreen\n this.setFullPage( false );\n } else {\n this.setFullScreen( !this.isFullPage() );\n }\n // correct for no mouseout event on change\n if ( this.buttons ) {\n this.buttons.emulateExit();\n }\n this.fullPageButton.element.focus();\n if ( this.viewport ) {\n this.viewport.applyConstraints();\n }\n}\n\nfunction onRotateLeft() {\n if ( this.viewport ) {\n var currRotation = this.viewport.getRotation();\n\n if ( this.viewport.flipped ){\n currRotation = $.positiveModulo(currRotation + this.rotationIncrement, 360);\n } else {\n currRotation = $.positiveModulo(currRotation - this.rotationIncrement, 360);\n }\n this.viewport.setRotation(currRotation);\n }\n}\n\nfunction onRotateRight() {\n if ( this.viewport ) {\n var currRotation = this.viewport.getRotation();\n\n if ( this.viewport.flipped ){\n currRotation = $.positiveModulo(currRotation - this.rotationIncrement, 360);\n } else {\n currRotation = $.positiveModulo(currRotation + this.rotationIncrement, 360);\n }\n this.viewport.setRotation(currRotation);\n }\n}\n/**\n * Note: When pressed flip control button\n */\nfunction onFlip() {\n this.viewport.toggleFlip();\n}\n\nfunction onPrevious(){\n var previous = this._sequenceIndex - 1;\n if(this.navPrevNextWrap && previous < 0){\n previous += this.tileSources.length;\n }\n this.goToPage( previous );\n}\n\n\nfunction onNext(){\n var next = this._sequenceIndex + 1;\n if(this.navPrevNextWrap && next >= this.tileSources.length){\n next = 0;\n }\n this.goToPage( next );\n}\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Navigator\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class Navigator\n * @classdesc The Navigator provides a small view of the current image as fixed\n * while representing the viewport as a moving box serving as a frame\n * of reference in the larger viewport as to which portion of the image\n * is currently being examined. The navigator's viewport can be interacted\n * with using the keyboard or the mouse.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.Viewer\n * @extends OpenSeadragon.EventSource\n * @param {Object} options\n */\n$.Navigator = function( options ){\n\n var viewer = options.viewer,\n _this = this,\n viewerSize,\n navigatorSize;\n\n //We may need to create a new element and id if they did not\n //provide the id for the existing element\n if( !options.id ){\n options.id = 'navigator-' + $.now();\n this.element = $.makeNeutralElement( \"div\" );\n options.controlOptions = {\n anchor: $.ControlAnchor.TOP_RIGHT,\n attachToViewer: true,\n autoFade: options.autoFade\n };\n\n if( options.position ){\n if( 'BOTTOM_RIGHT' == options.position ){\n options.controlOptions.anchor = $.ControlAnchor.BOTTOM_RIGHT;\n } else if( 'BOTTOM_LEFT' == options.position ){\n options.controlOptions.anchor = $.ControlAnchor.BOTTOM_LEFT;\n } else if( 'TOP_RIGHT' == options.position ){\n options.controlOptions.anchor = $.ControlAnchor.TOP_RIGHT;\n } else if( 'TOP_LEFT' == options.position ){\n options.controlOptions.anchor = $.ControlAnchor.TOP_LEFT;\n } else if( 'ABSOLUTE' == options.position ){\n options.controlOptions.anchor = $.ControlAnchor.ABSOLUTE;\n options.controlOptions.top = options.top;\n options.controlOptions.left = options.left;\n options.controlOptions.height = options.height;\n options.controlOptions.width = options.width;\n }\n }\n\n } else {\n this.element = document.getElementById( options.id );\n options.controlOptions = {\n anchor: $.ControlAnchor.NONE,\n attachToViewer: false,\n autoFade: false\n };\n }\n this.element.id = options.id;\n this.element.className += ' navigator';\n\n options = $.extend( true, {\n sizeRatio: $.DEFAULT_SETTINGS.navigatorSizeRatio\n }, options, {\n element: this.element,\n tabIndex: -1, // No keyboard navigation, omit from tab order\n //These need to be overridden to prevent recursion since\n //the navigator is a viewer and a viewer has a navigator\n showNavigator: false,\n mouseNavEnabled: false,\n showNavigationControl: false,\n showSequenceControl: false,\n immediateRender: true,\n blendTime: 0,\n animationTime: 0,\n autoResize: options.autoResize,\n // prevent resizing the navigator from adding unwanted space around the image\n minZoomImageRatio: 1.0,\n background: options.background,\n opacity: options.opacity,\n borderColor: options.borderColor,\n displayRegionColor: options.displayRegionColor\n });\n\n options.minPixelRatio = this.minPixelRatio = viewer.minPixelRatio;\n\n $.setElementTouchActionNone( this.element );\n\n this.borderWidth = 2;\n //At some browser magnification levels the display regions lines up correctly, but at some there appears to\n //be a one pixel gap.\n this.fudge = new $.Point(1, 1);\n this.totalBorderWidths = new $.Point(this.borderWidth * 2, this.borderWidth * 2).minus(this.fudge);\n\n\n if ( options.controlOptions.anchor != $.ControlAnchor.NONE ) {\n (function( style, borderWidth ){\n style.margin = '0px';\n style.border = borderWidth + 'px solid ' + options.borderColor;\n style.padding = '0px';\n style.background = options.background;\n style.opacity = options.opacity;\n style.overflow = 'hidden';\n }( this.element.style, this.borderWidth));\n }\n\n this.displayRegion = $.makeNeutralElement( \"div\" );\n this.displayRegion.id = this.element.id + '-displayregion';\n this.displayRegion.className = 'displayregion';\n\n (function( style, borderWidth ){\n style.position = 'relative';\n style.top = '0px';\n style.left = '0px';\n style.fontSize = '0px';\n style.overflow = 'hidden';\n style.border = borderWidth + 'px solid ' + options.displayRegionColor;\n style.margin = '0px';\n style.padding = '0px';\n //TODO: IE doesn't like this property being set\n //try{ style.outline = '2px auto #909'; }catch(e){/*ignore*/}\n\n style.background = 'transparent';\n\n // We use square bracket notation on the statement below, because float is a keyword.\n // This is important for the Google Closure compiler, if nothing else.\n /*jshint sub:true */\n style['float'] = 'left'; //Webkit\n\n style.cssFloat = 'left'; //Firefox\n style.styleFloat = 'left'; //IE\n style.zIndex = 999999999;\n style.cursor = 'default';\n }( this.displayRegion.style, this.borderWidth ));\n\n this.displayRegionContainer = $.makeNeutralElement(\"div\");\n this.displayRegionContainer.id = this.element.id + '-displayregioncontainer';\n this.displayRegionContainer.className = \"displayregioncontainer\";\n this.displayRegionContainer.style.width = \"100%\";\n this.displayRegionContainer.style.height = \"100%\";\n\n viewer.addControl(\n this.element,\n options.controlOptions\n );\n\n this._resizeWithViewer = options.controlOptions.anchor != $.ControlAnchor.ABSOLUTE &&\n options.controlOptions.anchor != $.ControlAnchor.NONE;\n\n if (options.width && options.height) {\n this.setWidth(options.width);\n this.setHeight(options.height);\n } else if ( this._resizeWithViewer ) {\n viewerSize = $.getElementSize( viewer.element );\n this.element.style.height = Math.round( viewerSize.y * options.sizeRatio ) + 'px';\n this.element.style.width = Math.round( viewerSize.x * options.sizeRatio ) + 'px';\n this.oldViewerSize = viewerSize;\n navigatorSize = $.getElementSize( this.element );\n this.elementArea = navigatorSize.x * navigatorSize.y;\n }\n\n this.oldContainerSize = new $.Point( 0, 0 );\n\n $.Viewer.apply( this, [ options ] );\n\n this.displayRegionContainer.appendChild(this.displayRegion);\n this.element.getElementsByTagName('div')[0].appendChild(this.displayRegionContainer);\n\n function rotate(degrees) {\n _setTransformRotate(_this.displayRegionContainer, degrees);\n _setTransformRotate(_this.displayRegion, -degrees);\n _this.viewport.setRotation(degrees);\n }\n if (options.navigatorRotate) {\n var degrees = options.viewer.viewport ?\n options.viewer.viewport.getRotation() :\n options.viewer.degrees || 0;\n\n rotate(degrees);\n options.viewer.addHandler(\"rotate\", function (args) {\n rotate(args.degrees);\n });\n }\n\n\n // Remove the base class' (Viewer's) innerTracker and replace it with our own\n this.innerTracker.destroy();\n this.innerTracker = new $.MouseTracker({\n element: this.element,\n dragHandler: $.delegate( this, onCanvasDrag ),\n clickHandler: $.delegate( this, onCanvasClick ),\n releaseHandler: $.delegate( this, onCanvasRelease ),\n scrollHandler: $.delegate( this, onCanvasScroll )\n });\n\n this.addHandler(\"reset-size\", function() {\n if (_this.viewport) {\n _this.viewport.goHome(true);\n }\n });\n\n viewer.world.addHandler(\"item-index-change\", function(event) {\n window.setTimeout(function(){\n var item = _this.world.getItemAt(event.previousIndex);\n _this.world.setItemIndex(item, event.newIndex);\n }, 1);\n });\n\n viewer.world.addHandler(\"remove-item\", function(event) {\n var theirItem = event.item;\n var myItem = _this._getMatchingItem(theirItem);\n if (myItem) {\n _this.world.removeItem(myItem);\n }\n });\n\n this.update(viewer.viewport);\n};\n\n$.extend( $.Navigator.prototype, $.EventSource.prototype, $.Viewer.prototype, /** @lends OpenSeadragon.Navigator.prototype */{\n\n /**\n * Used to notify the navigator when its size has changed.\n * Especially useful when {@link OpenSeadragon.Options}.navigatorAutoResize is set to false and the navigator is resizable.\n * @function\n */\n updateSize: function () {\n if ( this.viewport ) {\n var containerSize = new $.Point(\n (this.container.clientWidth === 0 ? 1 : this.container.clientWidth),\n (this.container.clientHeight === 0 ? 1 : this.container.clientHeight)\n );\n\n if ( !containerSize.equals( this.oldContainerSize ) ) {\n this.viewport.resize( containerSize, true );\n this.viewport.goHome(true);\n this.oldContainerSize = containerSize;\n this.drawer.clear();\n this.world.draw();\n }\n }\n },\n\n /**\n * Explicitly sets the width of the navigator, in web coordinates. Disables automatic resizing.\n * @param {Number|String} width - the new width, either a number of pixels or a CSS string, such as \"100%\"\n */\n setWidth: function(width) {\n this.width = width;\n this.element.style.width = typeof (width) == \"number\" ? (width + 'px') : width;\n this._resizeWithViewer = false;\n },\n\n /**\n * Explicitly sets the height of the navigator, in web coordinates. Disables automatic resizing.\n * @param {Number|String} height - the new height, either a number of pixels or a CSS string, such as \"100%\"\n */\n setHeight: function(height) {\n this.height = height;\n this.element.style.height = typeof (height) == \"number\" ? (height + 'px') : height;\n this._resizeWithViewer = false;\n },\n\n /**\n * Flip navigator element\n * @param {Boolean} state - Flip state to set.\n */\n setFlip: function(state) {\n this.viewport.setFlip(state);\n\n this.setDisplayTransform(this.viewer.viewport.getFlip() ? \"scale(-1,1)\" : \"scale(1,1)\");\n return this;\n },\n\n setDisplayTransform: function(rule) {\n setElementTransform(this.displayRegion, rule);\n setElementTransform(this.canvas, rule);\n setElementTransform(this.element, rule);\n },\n\n /**\n * Used to update the navigator minimap's viewport rectangle when a change in the viewer's viewport occurs.\n * @function\n * @param {OpenSeadragon.Viewport} The viewport this navigator is tracking.\n */\n update: function( viewport ) {\n\n var viewerSize,\n newWidth,\n newHeight,\n bounds,\n topleft,\n bottomright;\n\n viewerSize = $.getElementSize( this.viewer.element );\n if ( this._resizeWithViewer && viewerSize.x && viewerSize.y && !viewerSize.equals( this.oldViewerSize ) ) {\n this.oldViewerSize = viewerSize;\n\n if ( this.maintainSizeRatio || !this.elementArea) {\n newWidth = viewerSize.x * this.sizeRatio;\n newHeight = viewerSize.y * this.sizeRatio;\n } else {\n newWidth = Math.sqrt(this.elementArea * (viewerSize.x / viewerSize.y));\n newHeight = this.elementArea / newWidth;\n }\n\n this.element.style.width = Math.round( newWidth ) + 'px';\n this.element.style.height = Math.round( newHeight ) + 'px';\n\n if (!this.elementArea) {\n this.elementArea = newWidth * newHeight;\n }\n\n this.updateSize();\n }\n\n if (viewport && this.viewport) {\n bounds = viewport.getBoundsNoRotate(true);\n topleft = this.viewport.pixelFromPointNoRotate(bounds.getTopLeft(), false);\n bottomright = this.viewport.pixelFromPointNoRotate(bounds.getBottomRight(), false)\n .minus( this.totalBorderWidths );\n\n //update style for navigator-box\n var style = this.displayRegion.style;\n style.display = this.world.getItemCount() ? 'block' : 'none';\n\n style.top = Math.round( topleft.y ) + 'px';\n style.left = Math.round( topleft.x ) + 'px';\n\n var width = Math.abs( topleft.x - bottomright.x );\n var height = Math.abs( topleft.y - bottomright.y );\n // make sure width and height are non-negative so IE doesn't throw\n style.width = Math.round( Math.max( width, 0 ) ) + 'px';\n style.height = Math.round( Math.max( height, 0 ) ) + 'px';\n }\n\n },\n\n // overrides Viewer.addTiledImage\n addTiledImage: function(options) {\n var _this = this;\n\n var original = options.originalTiledImage;\n delete options.original;\n\n var optionsClone = $.extend({}, options, {\n success: function(event) {\n var myItem = event.item;\n myItem._originalForNavigator = original;\n _this._matchBounds(myItem, original, true);\n\n function matchBounds() {\n _this._matchBounds(myItem, original);\n }\n\n function matchOpacity() {\n _this._matchOpacity(myItem, original);\n }\n\n function matchCompositeOperation() {\n _this._matchCompositeOperation(myItem, original);\n }\n\n original.addHandler('bounds-change', matchBounds);\n original.addHandler('clip-change', matchBounds);\n original.addHandler('opacity-change', matchOpacity);\n original.addHandler('composite-operation-change', matchCompositeOperation);\n }\n });\n\n return $.Viewer.prototype.addTiledImage.apply(this, [optionsClone]);\n },\n\n // private\n _getMatchingItem: function(theirItem) {\n var count = this.world.getItemCount();\n var item;\n for (var i = 0; i < count; i++) {\n item = this.world.getItemAt(i);\n if (item._originalForNavigator === theirItem) {\n return item;\n }\n }\n\n return null;\n },\n\n // private\n _matchBounds: function(myItem, theirItem, immediately) {\n var bounds = theirItem.getBoundsNoRotate();\n myItem.setPosition(bounds.getTopLeft(), immediately);\n myItem.setWidth(bounds.width, immediately);\n myItem.setRotation(theirItem.getRotation(), immediately);\n myItem.setClip(theirItem.getClip());\n },\n\n // private\n _matchOpacity: function(myItem, theirItem) {\n myItem.setOpacity(theirItem.opacity);\n },\n\n // private\n _matchCompositeOperation: function(myItem, theirItem) {\n myItem.setCompositeOperation(theirItem.compositeOperation);\n }\n});\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onCanvasClick( event ) {\n var canvasClickEventArgs = {\n tracker: event.eventSource,\n position: event.position,\n quick: event.quick,\n shift: event.shift,\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction\n };\n /**\n * Raised when a click event occurs on the {@link OpenSeadragon.Viewer#navigator} element.\n *\n * @event navigator-click\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Boolean} quick - True only if the clickDistThreshold and clickTimeThreshold are both passed. Useful for differentiating between clicks and drags.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n * @property {Boolean} preventDefaultAction - Set to true to prevent default click to zoom behaviour. Default: false.\n */\n\n this.viewer.raiseEvent('navigator-click', canvasClickEventArgs);\n\n if ( !canvasClickEventArgs.preventDefaultAction && event.quick && this.viewer.viewport && (this.panVertical || this.panHorizontal)) {\n if(this.viewer.viewport.flipped) {\n event.position.x = this.viewport.getContainerSize().x - event.position.x;\n }\n var target = this.viewport.pointFromPixel(event.position);\n if (!this.panVertical) {\n // perform only horizonal pan\n target.y = this.viewer.viewport.getCenter(true).y;\n } else if (!this.panHorizontal) {\n // perform only vertical pan\n target.x = this.viewer.viewport.getCenter(true).x;\n }\n this.viewer.viewport.panTo(target);\n this.viewer.viewport.applyConstraints();\n }\n\n}\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onCanvasDrag( event ) {\n var canvasDragEventArgs = {\n tracker: event.eventSource,\n position: event.position,\n delta: event.delta,\n speed: event.speed,\n direction: event.direction,\n shift: event.shift,\n originalEvent: event.originalEvent,\n preventDefaultAction: event.preventDefaultAction\n };\n /**\n * Raised when a drag event occurs on the {@link OpenSeadragon.Viewer#navigator} element.\n *\n * @event navigator-drag\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {OpenSeadragon.Point} delta - The x,y components of the difference between start drag and end drag.\n * @property {Number} speed - Current computed speed, in pixels per second.\n * @property {Number} direction - Current computed direction, expressed as an angle counterclockwise relative to the positive X axis (-pi to pi, in radians). Only valid if speed > 0.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n * @property {Boolean} preventDefaultAction - Set to true to prevent default click to zoom behaviour. Default: false.\n */\n this.viewer.raiseEvent('navigator-drag', canvasDragEventArgs);\n\n if ( !canvasDragEventArgs.preventDefaultAction && this.viewer.viewport ) {\n if( !this.panHorizontal ){\n event.delta.x = 0;\n }\n if( !this.panVertical ){\n event.delta.y = 0;\n }\n\n if(this.viewer.viewport.flipped){\n event.delta.x = -event.delta.x;\n }\n\n this.viewer.viewport.panBy(\n this.viewport.deltaPointsFromPixels(\n event.delta\n )\n );\n if( this.viewer.constrainDuringPan ){\n this.viewer.viewport.applyConstraints();\n }\n }\n}\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onCanvasRelease( event ) {\n if ( event.insideElementPressed && this.viewer.viewport ) {\n this.viewer.viewport.applyConstraints();\n }\n}\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onCanvasScroll( event ) {\n /**\n * Raised when a scroll event occurs on the {@link OpenSeadragon.Viewer#navigator} element (mouse wheel, touch pinch, etc.).\n *\n * @event navigator-scroll\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.MouseTracker} tracker - A reference to the MouseTracker which originated this event.\n * @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.\n * @property {Number} scroll - The scroll delta for the event.\n * @property {Boolean} shift - True if the shift key was pressed during this event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'navigator-scroll', {\n tracker: event.eventSource,\n position: event.position,\n scroll: event.scroll,\n shift: event.shift,\n originalEvent: event.originalEvent\n });\n\n //don't scroll the page up and down if the user is scrolling\n //in the navigator\n return false;\n}\n\n/**\n * @function\n * @private\n * @param {Object} element\n * @param {Number} degrees\n */\nfunction _setTransformRotate( element, degrees ) {\n setElementTransform(element, \"rotate(\" + degrees + \"deg)\");\n}\n\nfunction setElementTransform( element, rule ) {\n element.style.webkitTransform = rule;\n element.style.mozTransform = rule;\n element.style.msTransform = rule;\n element.style.oTransform = rule;\n element.style.transform = rule;\n}\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - getString/setString\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n//TODO: I guess this is where the i18n needs to be reimplemented. I'll look\n// into existing patterns for i18n in javascript but i think that mimicking\n// pythons gettext might be a reasonable approach.\nvar I18N = {\n Errors: {\n Dzc: \"Sorry, we don't support Deep Zoom Collections!\",\n Dzi: \"Hmm, this doesn't appear to be a valid Deep Zoom Image.\",\n Xml: \"Hmm, this doesn't appear to be a valid Deep Zoom Image.\",\n ImageFormat: \"Sorry, we don't support {0}-based Deep Zoom Images.\",\n Security: \"It looks like a security restriction stopped us from \" +\n \"loading this Deep Zoom Image.\",\n Status: \"This space unintentionally left blank ({0} {1}).\",\n OpenFailed: \"Unable to open {0}: {1}\"\n },\n\n Tooltips: {\n FullPage: \"Toggle full page\",\n Home: \"Go home\",\n ZoomIn: \"Zoom in\",\n ZoomOut: \"Zoom out\",\n NextPage: \"Next page\",\n PreviousPage: \"Previous page\",\n RotateLeft: \"Rotate left\",\n RotateRight: \"Rotate right\",\n Flip: \"Flip Horizontally\"\n }\n};\n\n$.extend( $, /** @lends OpenSeadragon */{\n\n /**\n * @function\n * @param {String} property\n */\n getString: function( prop ) {\n\n var props = prop.split('.'),\n string = null,\n args = arguments,\n container = I18N,\n i;\n\n for (i = 0; i < props.length - 1; i++) {\n // in case not a subproperty\n container = container[ props[ i ] ] || {};\n }\n string = container[ props[ i ] ];\n\n if ( typeof ( string ) != \"string\" ) {\n $.console.log( \"Untranslated source string:\", prop );\n string = \"\"; // FIXME: this breaks gettext()-style convention, which would return source\n }\n\n return string.replace(/\\{\\d+\\}/g, function(capture) {\n var i = parseInt( capture.match( /\\d+/ ), 10 ) + 1;\n return i < args.length ?\n args[ i ] :\n \"\";\n });\n },\n\n /**\n * @function\n * @param {String} property\n * @param {*} value\n */\n setString: function( prop, value ) {\n\n var props = prop.split('.'),\n container = I18N,\n i;\n\n for ( i = 0; i < props.length - 1; i++ ) {\n if ( !container[ props[ i ] ] ) {\n container[ props[ i ] ] = {};\n }\n container = container[ props[ i ] ];\n }\n\n container[ props[ i ] ] = value;\n }\n\n});\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Point\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class Point\n * @classdesc A Point is really used as a 2-dimensional vector, equally useful for\n * representing a point on a plane, or the height and width of a plane\n * not requiring any other frame of reference.\n *\n * @memberof OpenSeadragon\n * @param {Number} [x] The vector component 'x'. Defaults to the origin at 0.\n * @param {Number} [y] The vector component 'y'. Defaults to the origin at 0.\n */\n$.Point = function( x, y ) {\n /**\n * The vector component 'x'.\n * @member {Number} x\n * @memberof OpenSeadragon.Point#\n */\n this.x = typeof ( x ) == \"number\" ? x : 0;\n /**\n * The vector component 'y'.\n * @member {Number} y\n * @memberof OpenSeadragon.Point#\n */\n this.y = typeof ( y ) == \"number\" ? y : 0;\n};\n\n/** @lends OpenSeadragon.Point.prototype */\n$.Point.prototype = {\n /**\n * @function\n * @returns {OpenSeadragon.Point} a duplicate of this Point\n */\n clone: function() {\n return new $.Point(this.x, this.y);\n },\n\n /**\n * Add another Point to this point and return a new Point.\n * @function\n * @param {OpenSeadragon.Point} point The point to add vector components.\n * @returns {OpenSeadragon.Point} A new point representing the sum of the\n * vector components\n */\n plus: function( point ) {\n return new $.Point(\n this.x + point.x,\n this.y + point.y\n );\n },\n\n /**\n * Subtract another Point to this point and return a new Point.\n * @function\n * @param {OpenSeadragon.Point} point The point to subtract vector components.\n * @returns {OpenSeadragon.Point} A new point representing the subtraction of the\n * vector components\n */\n minus: function( point ) {\n return new $.Point(\n this.x - point.x,\n this.y - point.y\n );\n },\n\n /**\n * Multiply this point by a factor and return a new Point.\n * @function\n * @param {Number} factor The factor to multiply vector components.\n * @returns {OpenSeadragon.Point} A new point representing the multiplication\n * of the vector components by the factor\n */\n times: function( factor ) {\n return new $.Point(\n this.x * factor,\n this.y * factor\n );\n },\n\n /**\n * Divide this point by a factor and return a new Point.\n * @function\n * @param {Number} factor The factor to divide vector components.\n * @returns {OpenSeadragon.Point} A new point representing the division of the\n * vector components by the factor\n */\n divide: function( factor ) {\n return new $.Point(\n this.x / factor,\n this.y / factor\n );\n },\n\n /**\n * Compute the opposite of this point and return a new Point.\n * @function\n * @returns {OpenSeadragon.Point} A new point representing the opposite of the\n * vector components\n */\n negate: function() {\n return new $.Point( -this.x, -this.y );\n },\n\n /**\n * Compute the distance between this point and another point.\n * @function\n * @param {OpenSeadragon.Point} point The point to compute the distance with.\n * @returns {Number} The distance between the 2 points\n */\n distanceTo: function( point ) {\n return Math.sqrt(\n Math.pow( this.x - point.x, 2 ) +\n Math.pow( this.y - point.y, 2 )\n );\n },\n\n /**\n * Compute the squared distance between this point and another point.\n * Useful for optimizing things like comparing distances.\n * @function\n * @param {OpenSeadragon.Point} point The point to compute the squared distance with.\n * @returns {Number} The squared distance between the 2 points\n */\n squaredDistanceTo: function( point ) {\n return Math.pow( this.x - point.x, 2 ) +\n Math.pow( this.y - point.y, 2 );\n },\n\n /**\n * Apply a function to each coordinate of this point and return a new point.\n * @function\n * @param {function} func The function to apply to each coordinate.\n * @returns {OpenSeadragon.Point} A new point with the coordinates computed\n * by the specified function\n */\n apply: function( func ) {\n return new $.Point( func( this.x ), func( this.y ) );\n },\n\n /**\n * Check if this point is equal to another one.\n * @function\n * @param {OpenSeadragon.Point} point The point to compare this point with.\n * @returns {Boolean} true if they are equal, false otherwise.\n */\n equals: function( point ) {\n return (\n point instanceof $.Point\n ) && (\n this.x === point.x\n ) && (\n this.y === point.y\n );\n },\n\n /**\n * Rotates the point around the specified pivot\n * From http://stackoverflow.com/questions/4465931/rotate-rectangle-around-a-point\n * @function\n * @param {Number} degress to rotate around the pivot.\n * @param {OpenSeadragon.Point} [pivot=(0,0)] Point around which to rotate.\n * Defaults to the origin.\n * @returns {OpenSeadragon.Point}. A new point representing the point rotated around the specified pivot\n */\n rotate: function (degrees, pivot) {\n pivot = pivot || new $.Point(0, 0);\n var cos;\n var sin;\n // Avoid float computations when possible\n if (degrees % 90 === 0) {\n var d = $.positiveModulo(degrees, 360);\n switch (d) {\n case 0:\n cos = 1;\n sin = 0;\n break;\n case 90:\n cos = 0;\n sin = 1;\n break;\n case 180:\n cos = -1;\n sin = 0;\n break;\n case 270:\n cos = 0;\n sin = -1;\n break;\n }\n } else {\n var angle = degrees * Math.PI / 180.0;\n cos = Math.cos(angle);\n sin = Math.sin(angle);\n }\n var x = cos * (this.x - pivot.x) - sin * (this.y - pivot.y) + pivot.x;\n var y = sin * (this.x - pivot.x) + cos * (this.y - pivot.y) + pivot.y;\n return new $.Point(x, y);\n },\n\n /**\n * Convert this point to a string in the format (x,y) where x and y are\n * rounded to the nearest integer.\n * @function\n * @returns {String} A string representation of this point.\n */\n toString: function() {\n return \"(\" + (Math.round(this.x * 100) / 100) + \",\" + (Math.round(this.y * 100) / 100) + \")\";\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - TileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n\n/**\n * @class TileSource\n * @classdesc The TileSource contains the most basic implementation required to create a\n * smooth transition between layers in an image pyramid. It has only a single key\n * interface that must be implemented to complete its key functionality:\n * 'getTileUrl'. It also has several optional interfaces that can be\n * implemented if a new TileSource wishes to support configuration via a simple\n * object or array ('configure') and if the tile source supports or requires\n * configuration via retrieval of a document on the network ala AJAX or JSONP,\n * ('getImageInfo').\n *
\n * By default the image pyramid is split into N layers where the image's longest\n * side in M (in pixels), where N is the smallest integer which satisfies\n * 2^(N+1) >= M.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @param {Object} options\n * You can either specify a URL, or literally define the TileSource (by specifying\n * width, height, tileSize, tileOverlap, minLevel, and maxLevel). For the former,\n * the extending class is expected to implement 'getImageInfo' and 'configure'.\n * For the latter, the construction is assumed to occur through\n * the extending classes implementation of 'configure'.\n * @param {String} [options.url]\n * The URL for the data necessary for this TileSource.\n * @param {String} [options.referenceStripThumbnailUrl]\n * The URL for a thumbnail image to be used by the reference strip\n * @param {Function} [options.success]\n * A function to be called upon successful creation.\n * @param {Boolean} [options.ajaxWithCredentials]\n * If this TileSource needs to make an AJAX call, this specifies whether to set\n * the XHR's withCredentials (for accessing secure data).\n * @param {Object} [options.ajaxHeaders]\n * A set of headers to include in AJAX requests.\n * @param {Number} [options.width]\n * Width of the source image at max resolution in pixels.\n * @param {Number} [options.height]\n * Height of the source image at max resolution in pixels.\n * @param {Number} [options.tileSize]\n * The size of the tiles to assumed to make up each pyramid layer in pixels.\n * Tile size determines the point at which the image pyramid must be\n * divided into a matrix of smaller images.\n * Use options.tileWidth and options.tileHeight to support non-square tiles.\n * @param {Number} [options.tileWidth]\n * The width of the tiles to assumed to make up each pyramid layer in pixels.\n * @param {Number} [options.tileHeight]\n * The height of the tiles to assumed to make up each pyramid layer in pixels.\n * @param {Number} [options.tileOverlap]\n * The number of pixels each tile is expected to overlap touching tiles.\n * @param {Number} [options.minLevel]\n * The minimum level to attempt to load.\n * @param {Number} [options.maxLevel]\n * The maximum level to attempt to load.\n */\n$.TileSource = function( width, height, tileSize, tileOverlap, minLevel, maxLevel ) {\n var _this = this;\n\n var args = arguments,\n options,\n i;\n\n if( $.isPlainObject( width ) ){\n options = width;\n }else{\n options = {\n width: args[0],\n height: args[1],\n tileSize: args[2],\n tileOverlap: args[3],\n minLevel: args[4],\n maxLevel: args[5]\n };\n }\n\n //Tile sources supply some events, namely 'ready' when they must be configured\n //by asynchronously fetching their configuration data.\n $.EventSource.call( this );\n\n //we allow options to override anything we don't treat as\n //required via idiomatic options or which is functionally\n //set depending on the state of the readiness of this tile\n //source\n $.extend( true, this, options );\n\n if (!this.success) {\n //Any functions that are passed as arguments are bound to the ready callback\n for ( i = 0; i < arguments.length; i++ ) {\n if ( $.isFunction( arguments[ i ] ) ) {\n this.success = arguments[ i ];\n //only one callback per constructor\n break;\n }\n }\n }\n\n if (this.success) {\n this.addHandler( 'ready', function ( event ) {\n _this.success( event );\n } );\n }\n\n /**\n * Ratio of width to height\n * @member {Number} aspectRatio\n * @memberof OpenSeadragon.TileSource#\n */\n /**\n * Vector storing x and y dimensions ( width and height respectively ).\n * @member {OpenSeadragon.Point} dimensions\n * @memberof OpenSeadragon.TileSource#\n */\n /**\n * The overlap in pixels each tile shares with its adjacent neighbors.\n * @member {Number} tileOverlap\n * @memberof OpenSeadragon.TileSource#\n */\n /**\n * The minimum pyramid level this tile source supports or should attempt to load.\n * @member {Number} minLevel\n * @memberof OpenSeadragon.TileSource#\n */\n /**\n * The maximum pyramid level this tile source supports or should attempt to load.\n * @member {Number} maxLevel\n * @memberof OpenSeadragon.TileSource#\n */\n /**\n *\n * @member {Boolean} ready\n * @memberof OpenSeadragon.TileSource#\n */\n\n if( 'string' == $.type( arguments[ 0 ] ) ){\n this.url = arguments[0];\n }\n\n if (this.url) {\n //in case the getImageInfo method is overridden and/or implies an\n //async mechanism set some safe defaults first\n this.aspectRatio = 1;\n this.dimensions = new $.Point( 10, 10 );\n this._tileWidth = 0;\n this._tileHeight = 0;\n this.tileOverlap = 0;\n this.minLevel = 0;\n this.maxLevel = 0;\n this.ready = false;\n //configuration via url implies the extending class\n //implements and 'configure'\n this.getImageInfo( this.url );\n\n } else {\n\n //explicit configuration via positional args in constructor\n //or the more idiomatic 'options' object\n this.ready = true;\n this.aspectRatio = (options.width && options.height) ?\n (options.width / options.height) : 1;\n this.dimensions = new $.Point( options.width, options.height );\n\n if ( this.tileSize ){\n this._tileWidth = this._tileHeight = this.tileSize;\n delete this.tileSize;\n } else {\n if( this.tileWidth ){\n // We were passed tileWidth in options, but we want to rename it\n // with a leading underscore to make clear that it is not safe to directly modify it\n this._tileWidth = this.tileWidth;\n delete this.tileWidth;\n } else {\n this._tileWidth = 0;\n }\n\n if( this.tileHeight ){\n // See note above about renaming this.tileWidth\n this._tileHeight = this.tileHeight;\n delete this.tileHeight;\n } else {\n this._tileHeight = 0;\n }\n }\n\n this.tileOverlap = options.tileOverlap ? options.tileOverlap : 0;\n this.minLevel = options.minLevel ? options.minLevel : 0;\n this.maxLevel = ( undefined !== options.maxLevel && null !== options.maxLevel ) ?\n options.maxLevel : (\n ( options.width && options.height ) ? Math.ceil(\n Math.log( Math.max( options.width, options.height ) ) /\n Math.log( 2 )\n ) : 0\n );\n if( this.success && $.isFunction( this.success ) ){\n this.success( this );\n }\n }\n\n\n};\n\n/** @lends OpenSeadragon.TileSource.prototype */\n$.TileSource.prototype = {\n\n getTileSize: function( level ) {\n $.console.error(\n \"[TileSource.getTileSize] is deprecated. \" +\n \"Use TileSource.getTileWidth() and TileSource.getTileHeight() instead\"\n );\n return this._tileWidth;\n },\n\n /**\n * Return the tileWidth for a given level.\n * Subclasses should override this if tileWidth can be different at different levels\n * such as in IIIFTileSource. Code should use this function rather than reading\n * from ._tileWidth directly.\n * @function\n * @param {Number} level\n */\n getTileWidth: function( level ) {\n if (!this._tileWidth) {\n return this.getTileSize(level);\n }\n return this._tileWidth;\n },\n\n /**\n * Return the tileHeight for a given level.\n * Subclasses should override this if tileHeight can be different at different levels\n * such as in IIIFTileSource. Code should use this function rather than reading\n * from ._tileHeight directly.\n * @function\n * @param {Number} level\n */\n getTileHeight: function( level ) {\n if (!this._tileHeight) {\n return this.getTileSize(level);\n }\n return this._tileHeight;\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getLevelScale: function( level ) {\n\n // see https://github.com/openseadragon/openseadragon/issues/22\n // we use the tilesources implementation of getLevelScale to generate\n // a memoized re-implementation\n var levelScaleCache = {},\n i;\n for( i = 0; i <= this.maxLevel; i++ ){\n levelScaleCache[ i ] = 1 / Math.pow(2, this.maxLevel - i);\n }\n this.getLevelScale = function( _level ){\n return levelScaleCache[ _level ];\n };\n return this.getLevelScale( level );\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getNumTiles: function( level ) {\n var scale = this.getLevelScale( level ),\n x = Math.ceil( scale * this.dimensions.x / this.getTileWidth(level) ),\n y = Math.ceil( scale * this.dimensions.y / this.getTileHeight(level) );\n\n return new $.Point( x, y );\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getPixelRatio: function( level ) {\n var imageSizeScaled = this.dimensions.times( this.getLevelScale( level ) ),\n rx = 1.0 / imageSizeScaled.x,\n ry = 1.0 / imageSizeScaled.y;\n\n return new $.Point(rx, ry);\n },\n\n\n /**\n * @function\n * @returns {Number} The highest level in this tile source that can be contained in a single tile.\n */\n getClosestLevel: function() {\n var i,\n tiles;\n\n for (i = this.minLevel + 1; i <= this.maxLevel; i++){\n tiles = this.getNumTiles(i);\n if (tiles.x > 1 || tiles.y > 1) {\n break;\n }\n }\n\n return i - 1;\n },\n\n /**\n * @function\n * @param {Number} level\n * @param {OpenSeadragon.Point} point\n */\n getTileAtPoint: function(level, point) {\n var validPoint = point.x >= 0 && point.x <= 1 &&\n point.y >= 0 && point.y <= 1 / this.aspectRatio;\n $.console.assert(validPoint, \"[TileSource.getTileAtPoint] must be called with a valid point.\");\n\n var widthScaled = this.dimensions.x * this.getLevelScale(level);\n var pixelX = point.x * widthScaled;\n var pixelY = point.y * widthScaled;\n\n var x = Math.floor(pixelX / this.getTileWidth(level));\n var y = Math.floor(pixelY / this.getTileHeight(level));\n\n // When point.x == 1 or point.y == 1 / this.aspectRatio we want to\n // return the last tile of the row/column\n if (point.x >= 1) {\n x = this.getNumTiles(level).x - 1;\n }\n var EPSILON = 1e-15;\n if (point.y >= 1 / this.aspectRatio - EPSILON) {\n y = this.getNumTiles(level).y - 1;\n }\n\n return new $.Point(x, y);\n },\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n * @param {Boolean} [isSource=false] Whether to return the source bounds of the tile.\n * @returns {OpenSeadragon.Rect} Either where this tile fits (in normalized coordinates) or the\n * portion of the tile to use as the source of the drawing operation (in pixels), depending on\n * the isSource parameter.\n */\n getTileBounds: function( level, x, y, isSource ) {\n var dimensionsScaled = this.dimensions.times( this.getLevelScale( level ) ),\n tileWidth = this.getTileWidth(level),\n tileHeight = this.getTileHeight(level),\n px = ( x === 0 ) ? 0 : tileWidth * x - this.tileOverlap,\n py = ( y === 0 ) ? 0 : tileHeight * y - this.tileOverlap,\n sx = tileWidth + ( x === 0 ? 1 : 2 ) * this.tileOverlap,\n sy = tileHeight + ( y === 0 ? 1 : 2 ) * this.tileOverlap,\n scale = 1.0 / dimensionsScaled.x;\n\n sx = Math.min( sx, dimensionsScaled.x - px );\n sy = Math.min( sy, dimensionsScaled.y - py );\n\n if (isSource) {\n return new $.Rect(0, 0, sx, sy);\n }\n\n return new $.Rect( px * scale, py * scale, sx * scale, sy * scale );\n },\n\n\n /**\n * Responsible for retrieving, and caching the\n * image metadata pertinent to this TileSources implementation.\n * @function\n * @param {String} url\n * @throws {Error}\n */\n getImageInfo: function( url ) {\n var _this = this,\n callbackName,\n callback,\n readySource,\n options,\n urlParts,\n filename,\n lastDot;\n\n\n if( url ) {\n urlParts = url.split( '/' );\n filename = urlParts[ urlParts.length - 1 ];\n lastDot = filename.lastIndexOf( '.' );\n if ( lastDot > -1 ) {\n urlParts[ urlParts.length - 1 ] = filename.slice( 0, lastDot );\n }\n }\n\n callback = function( data ){\n if( typeof (data) === \"string\" ) {\n data = $.parseXml( data );\n }\n var $TileSource = $.TileSource.determineType( _this, data, url );\n if ( !$TileSource ) {\n /**\n * Raised when an error occurs loading a TileSource.\n *\n * @event open-failed\n * @memberof OpenSeadragon.TileSource\n * @type {object}\n * @property {OpenSeadragon.TileSource} eventSource - A reference to the TileSource which raised the event.\n * @property {String} message\n * @property {String} source\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( 'open-failed', { message: \"Unable to load TileSource\", source: url } );\n return;\n }\n\n options = $TileSource.prototype.configure.apply( _this, [ data, url ]);\n if (options.ajaxWithCredentials === undefined) {\n options.ajaxWithCredentials = _this.ajaxWithCredentials;\n }\n\n readySource = new $TileSource( options );\n _this.ready = true;\n /**\n * Raised when a TileSource is opened and initialized.\n *\n * @event ready\n * @memberof OpenSeadragon.TileSource\n * @type {object}\n * @property {OpenSeadragon.TileSource} eventSource - A reference to the TileSource which raised the event.\n * @property {Object} tileSource\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( 'ready', { tileSource: readySource } );\n };\n\n if( url.match(/\\.js$/) ){\n //TODO: Its not very flexible to require tile sources to end jsonp\n // request for info with a url that ends with '.js' but for\n // now it's the only way I see to distinguish uniformly.\n callbackName = url.split('/').pop().replace('.js', '');\n $.jsonp({\n url: url,\n async: false,\n callbackName: callbackName,\n callback: callback\n });\n } else {\n // request info via xhr asynchronously.\n $.makeAjaxRequest( {\n url: url,\n withCredentials: this.ajaxWithCredentials,\n headers: this.ajaxHeaders,\n success: function( xhr ) {\n var data = processResponse( xhr );\n callback( data );\n },\n error: function ( xhr, exc ) {\n var msg;\n\n /*\n IE < 10 will block XHR requests to different origins. Any property access on the request\n object will raise an exception which we'll attempt to handle by formatting the original\n exception rather than the second one raised when we try to access xhr.status\n */\n try {\n msg = \"HTTP \" + xhr.status + \" attempting to load TileSource\";\n } catch ( e ) {\n var formattedExc;\n if ( typeof ( exc ) == \"undefined\" || !exc.toString ) {\n formattedExc = \"Unknown error\";\n } else {\n formattedExc = exc.toString();\n }\n\n msg = formattedExc + \" attempting to load TileSource\";\n }\n\n /***\n * Raised when an error occurs loading a TileSource.\n *\n * @event open-failed\n * @memberof OpenSeadragon.TileSource\n * @type {object}\n * @property {OpenSeadragon.TileSource} eventSource - A reference to the TileSource which raised the event.\n * @property {String} message\n * @property {String} source\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( 'open-failed', {\n message: msg,\n source: url\n });\n }\n });\n }\n\n },\n\n /**\n * Responsible determining if a the particular TileSource supports the\n * data format ( and allowed to apply logic against the url the data was\n * loaded from, if any ). Overriding implementations are expected to do\n * something smart with data and / or url to determine support. Also\n * understand that iteration order of TileSources is not guarunteed so\n * please make sure your data or url is expressive enough to ensure a simple\n * and sufficient mechanisim for clear determination.\n * @function\n * @param {String|Object|Array|Document} data\n * @param {String} url - the url the data was loaded\n * from if any.\n * @return {Boolean}\n */\n supports: function( data, url ) {\n return false;\n },\n\n /**\n * Responsible for parsing and configuring the\n * image metadata pertinent to this TileSources implementation.\n * This method is not implemented by this class other than to throw an Error\n * announcing you have to implement it. Because of the variety of tile\n * server technologies, and various specifications for building image\n * pyramids, this method is here to allow easy integration.\n * @function\n * @param {String|Object|Array|Document} data\n * @param {String} url - the url the data was loaded\n * from if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n * @throws {Error}\n */\n configure: function( data, url ) {\n throw new Error( \"Method not implemented.\" );\n },\n\n /**\n * Responsible for retrieving the url which will return an image for the\n * region specified by the given x, y, and level components.\n * This method is not implemented by this class other than to throw an Error\n * announcing you have to implement it. Because of the variety of tile\n * server technologies, and various specifications for building image\n * pyramids, this method is here to allow easy integration.\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n * @throws {Error}\n */\n getTileUrl: function( level, x, y ) {\n throw new Error( \"Method not implemented.\" );\n },\n\n /**\n * Responsible for retrieving the headers which will be attached to the image request for the\n * region specified by the given x, y, and level components.\n * This option is only relevant if {@link OpenSeadragon.Options}.loadTilesWithAjax is set to true.\n * The headers returned here will override headers specified at the Viewer or TiledImage level.\n * Specifying a falsy value for a header will clear its existing value set at the Viewer or\n * TiledImage level (if any).\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n * @returns {Object}\n */\n getTileAjaxHeaders: function( level, x, y ) {\n return {};\n },\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n */\n tileExists: function( level, x, y ) {\n var numTiles = this.getNumTiles( level );\n return level >= this.minLevel &&\n level <= this.maxLevel &&\n x >= 0 &&\n y >= 0 &&\n x < numTiles.x &&\n y < numTiles.y;\n }\n};\n\n\n$.extend( true, $.TileSource.prototype, $.EventSource.prototype );\n\n\n/**\n * Decides whether to try to process the response as xml, json, or hand back\n * the text\n * @private\n * @inner\n * @function\n * @param {XMLHttpRequest} xhr - the completed network request\n */\nfunction processResponse( xhr ){\n var responseText = xhr.responseText,\n status = xhr.status,\n statusText,\n data;\n\n if ( !xhr ) {\n throw new Error( $.getString( \"Errors.Security\" ) );\n } else if ( xhr.status !== 200 && xhr.status !== 0 ) {\n status = xhr.status;\n statusText = ( status == 404 ) ?\n \"Not Found\" :\n xhr.statusText;\n throw new Error( $.getString( \"Errors.Status\", status, statusText ) );\n }\n\n if( responseText.match(/\\s*<.*/) ){\n try{\n data = ( xhr.responseXML && xhr.responseXML.documentElement ) ?\n xhr.responseXML :\n $.parseXml( responseText );\n } catch (e){\n data = xhr.responseText;\n }\n }else if( responseText.match(/\\s*[\\{\\[].*/) ){\n try{\n data = $.parseJSON(responseText);\n } catch(e){\n data = responseText;\n }\n }else{\n data = responseText;\n }\n return data;\n}\n\n\n/**\n * Determines the TileSource Implementation by introspection of OpenSeadragon\n * namespace, calling each TileSource implementation of 'isType'\n * @private\n * @inner\n * @function\n * @param {Object|Array|Document} data - the tile source configuration object\n * @param {String} url - the url where the tile source configuration object was\n * loaded from, if any.\n */\n$.TileSource.determineType = function( tileSource, data, url ){\n var property;\n for( property in OpenSeadragon ){\n if( property.match(/.+TileSource$/) &&\n $.isFunction( OpenSeadragon[ property ] ) &&\n $.isFunction( OpenSeadragon[ property ].prototype.supports ) &&\n OpenSeadragon[ property ].prototype.supports.call( tileSource, data, url )\n ){\n return OpenSeadragon[ property ];\n }\n }\n\n $.console.error( \"No TileSource was able to open %s %s\", url, data );\n};\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - DziTileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class DziTileSource\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @param {Number|Object} width - the pixel width of the image or the idiomatic\n * options object which is used instead of positional arguments.\n * @param {Number} height\n * @param {Number} tileSize\n * @param {Number} tileOverlap\n * @param {String} tilesUrl\n * @param {String} fileFormat\n * @param {OpenSeadragon.DisplayRect[]} displayRects\n * @property {String} tilesUrl\n * @property {String} fileFormat\n * @property {OpenSeadragon.DisplayRect[]} displayRects\n */\n$.DziTileSource = function( width, height, tileSize, tileOverlap, tilesUrl, fileFormat, displayRects, minLevel, maxLevel ) {\n var i,\n rect,\n level,\n options;\n\n if( $.isPlainObject( width ) ){\n options = width;\n }else{\n options = {\n width: arguments[ 0 ],\n height: arguments[ 1 ],\n tileSize: arguments[ 2 ],\n tileOverlap: arguments[ 3 ],\n tilesUrl: arguments[ 4 ],\n fileFormat: arguments[ 5 ],\n displayRects: arguments[ 6 ],\n minLevel: arguments[ 7 ],\n maxLevel: arguments[ 8 ]\n };\n }\n\n this._levelRects = {};\n this.tilesUrl = options.tilesUrl;\n this.fileFormat = options.fileFormat;\n this.displayRects = options.displayRects;\n\n if ( this.displayRects ) {\n for ( i = this.displayRects.length - 1; i >= 0; i-- ) {\n rect = this.displayRects[ i ];\n for ( level = rect.minLevel; level <= rect.maxLevel; level++ ) {\n if ( !this._levelRects[ level ] ) {\n this._levelRects[ level ] = [];\n }\n this._levelRects[ level ].push( rect );\n }\n }\n }\n\n $.TileSource.apply( this, [ options ] );\n\n};\n\n$.extend( $.DziTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.DziTileSource.prototype */{\n\n\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n supports: function( data, url ){\n var ns;\n if ( data.Image ) {\n ns = data.Image.xmlns;\n } else if ( data.documentElement) {\n if (\"Image\" == data.documentElement.localName || \"Image\" == data.documentElement.tagName) {\n ns = data.documentElement.namespaceURI;\n }\n }\n\n ns = (ns || '').toLowerCase();\n\n return (ns.indexOf('schemas.microsoft.com/deepzoom/2008') !== -1 ||\n ns.indexOf('schemas.microsoft.com/deepzoom/2009') !== -1);\n },\n\n /**\n *\n * @function\n * @param {Object|XMLDocument} data - the raw configuration\n * @param {String} url - the url the data was retrieved from if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n */\n configure: function( data, url ){\n\n var options;\n\n if( !$.isPlainObject(data) ){\n\n options = configureFromXML( this, data );\n\n }else{\n\n options = configureFromObject( this, data );\n }\n\n if (url && !options.tilesUrl) {\n options.tilesUrl = url.replace(\n /([^\\/]+?)(\\.(dzi|xml|js)?(\\?[^\\/]*)?)?\\/?$/, '$1_files/');\n\n if (url.search(/\\.(dzi|xml|js)\\?/) != -1) {\n options.queryParams = url.match(/\\?.*/);\n }else{\n options.queryParams = '';\n }\n }\n\n return options;\n },\n\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n */\n getTileUrl: function( level, x, y ) {\n return [ this.tilesUrl, level, '/', x, '_', y, '.', this.fileFormat, this.queryParams ].join( '' );\n },\n\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n */\n tileExists: function( level, x, y ) {\n var rects = this._levelRects[ level ],\n rect,\n scale,\n xMin,\n yMin,\n xMax,\n yMax,\n i;\n\n if ((this.minLevel && level < this.minLevel) || (this.maxLevel && level > this.maxLevel)) {\n return false;\n }\n\n if ( !rects || !rects.length ) {\n return true;\n }\n\n for ( i = rects.length - 1; i >= 0; i-- ) {\n rect = rects[ i ];\n\n if ( level < rect.minLevel || level > rect.maxLevel ) {\n continue;\n }\n\n scale = this.getLevelScale( level );\n xMin = rect.x * scale;\n yMin = rect.y * scale;\n xMax = xMin + rect.width * scale;\n yMax = yMin + rect.height * scale;\n\n xMin = Math.floor( xMin / this._tileWidth );\n yMin = Math.floor( yMin / this._tileWidth ); // DZI tiles are square, so we just use _tileWidth\n xMax = Math.ceil( xMax / this._tileWidth );\n yMax = Math.ceil( yMax / this._tileWidth );\n\n if ( xMin <= x && x < xMax && yMin <= y && y < yMax ) {\n return true;\n }\n }\n\n return false;\n }\n});\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction configureFromXML( tileSource, xmlDoc ){\n\n if ( !xmlDoc || !xmlDoc.documentElement ) {\n throw new Error( $.getString( \"Errors.Xml\" ) );\n }\n\n var root = xmlDoc.documentElement,\n rootName = root.localName || root.tagName,\n ns = xmlDoc.documentElement.namespaceURI,\n configuration = null,\n displayRects = [],\n dispRectNodes,\n dispRectNode,\n rectNode,\n sizeNode,\n i;\n\n if ( rootName == \"Image\" ) {\n\n try {\n sizeNode = root.getElementsByTagName(\"Size\" )[ 0 ];\n if (sizeNode === undefined) {\n sizeNode = root.getElementsByTagNameNS(ns, \"Size\" )[ 0 ];\n }\n\n configuration = {\n Image: {\n xmlns: \"http://schemas.microsoft.com/deepzoom/2008\",\n Url: root.getAttribute( \"Url\" ),\n Format: root.getAttribute( \"Format\" ),\n DisplayRect: null,\n Overlap: parseInt( root.getAttribute( \"Overlap\" ), 10 ),\n TileSize: parseInt( root.getAttribute( \"TileSize\" ), 10 ),\n Size: {\n Height: parseInt( sizeNode.getAttribute( \"Height\" ), 10 ),\n Width: parseInt( sizeNode.getAttribute( \"Width\" ), 10 )\n }\n }\n };\n\n if ( !$.imageFormatSupported( configuration.Image.Format ) ) {\n throw new Error(\n $.getString( \"Errors.ImageFormat\", configuration.Image.Format.toUpperCase() )\n );\n }\n\n dispRectNodes = root.getElementsByTagName(\"DisplayRect\" );\n if (dispRectNodes === undefined) {\n dispRectNodes = root.getElementsByTagNameNS(ns, \"DisplayRect\" )[ 0 ];\n }\n\n for ( i = 0; i < dispRectNodes.length; i++ ) {\n dispRectNode = dispRectNodes[ i ];\n rectNode = dispRectNode.getElementsByTagName(\"Rect\" )[ 0 ];\n if (rectNode === undefined) {\n rectNode = dispRectNode.getElementsByTagNameNS(ns, \"Rect\" )[ 0 ];\n }\n\n displayRects.push({\n Rect: {\n X: parseInt( rectNode.getAttribute( \"X\" ), 10 ),\n Y: parseInt( rectNode.getAttribute( \"Y\" ), 10 ),\n Width: parseInt( rectNode.getAttribute( \"Width\" ), 10 ),\n Height: parseInt( rectNode.getAttribute( \"Height\" ), 10 ),\n MinLevel: parseInt( dispRectNode.getAttribute( \"MinLevel\" ), 10 ),\n MaxLevel: parseInt( dispRectNode.getAttribute( \"MaxLevel\" ), 10 )\n }\n });\n }\n\n if( displayRects.length ){\n configuration.Image.DisplayRect = displayRects;\n }\n\n return configureFromObject( tileSource, configuration );\n\n } catch ( e ) {\n throw (e instanceof Error) ?\n e :\n new Error( $.getString(\"Errors.Dzi\") );\n }\n } else if ( rootName == \"Collection\" ) {\n throw new Error( $.getString( \"Errors.Dzc\" ) );\n } else if ( rootName == \"Error\" ) {\n var messageNode = root.getElementsByTagName(\"Message\")[0];\n var message = messageNode.firstChild.nodeValue;\n throw new Error(message);\n }\n\n throw new Error( $.getString( \"Errors.Dzi\" ) );\n}\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction configureFromObject( tileSource, configuration ){\n var imageData = configuration.Image,\n tilesUrl = imageData.Url,\n fileFormat = imageData.Format,\n sizeData = imageData.Size,\n dispRectData = imageData.DisplayRect || [],\n width = parseInt( sizeData.Width, 10 ),\n height = parseInt( sizeData.Height, 10 ),\n tileSize = parseInt( imageData.TileSize, 10 ),\n tileOverlap = parseInt( imageData.Overlap, 10 ),\n displayRects = [],\n rectData,\n i;\n\n //TODO: need to figure out out to better handle image format compatibility\n // which actually includes additional file formats like xml and pdf\n // and plain text for various tilesource implementations to avoid low\n // level errors.\n //\n // For now, just don't perform the check.\n //\n /*if ( !imageFormatSupported( fileFormat ) ) {\n throw new Error(\n $.getString( \"Errors.ImageFormat\", fileFormat.toUpperCase() )\n );\n }*/\n\n for ( i = 0; i < dispRectData.length; i++ ) {\n rectData = dispRectData[ i ].Rect;\n\n displayRects.push( new $.DisplayRect(\n parseInt( rectData.X, 10 ),\n parseInt( rectData.Y, 10 ),\n parseInt( rectData.Width, 10 ),\n parseInt( rectData.Height, 10 ),\n parseInt( rectData.MinLevel, 10 ),\n parseInt( rectData.MaxLevel, 10 )\n ));\n }\n\n return $.extend(true, {\n width: width, /* width *required */\n height: height, /* height *required */\n tileSize: tileSize, /* tileSize *required */\n tileOverlap: tileOverlap, /* tileOverlap *required */\n minLevel: null, /* minLevel */\n maxLevel: null, /* maxLevel */\n tilesUrl: tilesUrl, /* tilesUrl */\n fileFormat: fileFormat, /* fileFormat */\n displayRects: displayRects /* displayRects */\n }, configuration );\n\n}\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - IIIFTileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class IIIFTileSource\n * @classdesc A client implementation of the International Image Interoperability Framework\n * Format: Image API 1.0 - 2.1\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @see http://iiif.io/api/image/\n * @param {String} [options.tileFormat='jpg']\n * The extension that will be used when requiring tiles.\n */\n$.IIIFTileSource = function( options ){\n\n /* eslint-disable camelcase */\n\n $.extend( true, this, options );\n\n if ( !( this.height && this.width && this['@id'] ) ) {\n throw new Error( 'IIIF required parameters not provided.' );\n }\n\n options.tileSizePerScaleFactor = {};\n\n this.tileFormat = this.tileFormat || 'jpg';\n\n this.version = options.version;\n\n // N.B. 2.0 renamed scale_factors to scaleFactors\n if ( this.tile_width && this.tile_height ) {\n options.tileWidth = this.tile_width;\n options.tileHeight = this.tile_height;\n } else if ( this.tile_width ) {\n options.tileSize = this.tile_width;\n } else if ( this.tile_height ) {\n options.tileSize = this.tile_height;\n } else if ( this.tiles ) {\n // Version 2.0 forwards\n if ( this.tiles.length == 1 ) {\n options.tileWidth = this.tiles[0].width;\n // Use height if provided, otherwise assume square tiles and use width.\n options.tileHeight = this.tiles[0].height || this.tiles[0].width;\n this.scale_factors = this.tiles[0].scaleFactors;\n } else {\n // Multiple tile sizes at different levels\n this.scale_factors = [];\n for (var t = 0; t < this.tiles.length; t++ ) {\n for (var sf = 0; sf < this.tiles[t].scaleFactors.length; sf++) {\n var scaleFactor = this.tiles[t].scaleFactors[sf];\n this.scale_factors.push(scaleFactor);\n options.tileSizePerScaleFactor[scaleFactor] = {\n width: this.tiles[t].width,\n height: this.tiles[t].height || this.tiles[t].width\n };\n }\n }\n }\n } else if ( canBeTiled(options) ) {\n // use the largest of tileOptions that is smaller than the short dimension\n var shortDim = Math.min( this.height, this.width ),\n tileOptions = [256, 512, 1024],\n smallerTiles = [];\n\n for ( var c = 0; c < tileOptions.length; c++ ) {\n if ( tileOptions[c] <= shortDim ) {\n smallerTiles.push( tileOptions[c] );\n }\n }\n\n if ( smallerTiles.length > 0 ) {\n options.tileSize = Math.max.apply( null, smallerTiles );\n } else {\n // If we're smaller than 256, just use the short side.\n options.tileSize = shortDim;\n }\n } else if (this.sizes && this.sizes.length > 0) {\n // This info.json can't be tiled, but we can still construct a legacy pyramid from the sizes array.\n // In this mode, IIIFTileSource will call functions from the abstract baseTileSource or the\n // LegacyTileSource instead of performing IIIF tiling.\n this.emulateLegacyImagePyramid = true;\n\n options.levels = constructLevels( this );\n // use the largest available size to define tiles\n $.extend( true, options, {\n width: options.levels[ options.levels.length - 1 ].width,\n height: options.levels[ options.levels.length - 1 ].height,\n tileSize: Math.max( options.height, options.width ),\n tileOverlap: 0,\n minLevel: 0,\n maxLevel: options.levels.length - 1\n });\n this.levels = options.levels;\n } else {\n $.console.error(\"Nothing in the info.json to construct image pyramids from\");\n }\n\n if (!options.maxLevel && !this.emulateLegacyImagePyramid) {\n if (!this.scale_factors) {\n options.maxLevel = Number(Math.ceil(Math.log(Math.max(this.width, this.height), 2)));\n } else {\n var maxScaleFactor = Math.max.apply(null, this.scale_factors);\n options.maxLevel = Math.round(Math.log(maxScaleFactor) * Math.LOG2E);\n }\n }\n\n $.TileSource.apply( this, [ options ] );\n};\n\n$.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.IIIFTileSource.prototype */{\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n\n supports: function( data, url ) {\n // Version 2.0 and forwards\n if (data.protocol && data.protocol == 'http://iiif.io/api/image') {\n return true;\n // Version 1.1\n } else if ( data['@context'] && (\n data['@context'] == \"http://library.stanford.edu/iiif/image-api/1.1/context.json\" ||\n data['@context'] == \"http://iiif.io/api/image/1/context.json\") ) {\n // N.B. the iiif.io context is wrong, but where the representation lives so likely to be used\n return true;\n\n // Version 1.0\n } else if ( data.profile &&\n data.profile.indexOf(\"http://library.stanford.edu/iiif/image-api/compliance.html\") === 0) {\n return true;\n } else if ( data.identifier && data.width && data.height ) {\n return true;\n } else if ( data.documentElement &&\n \"info\" == data.documentElement.tagName &&\n \"http://library.stanford.edu/iiif/image-api/ns/\" ==\n data.documentElement.namespaceURI) {\n return true;\n\n // Not IIIF\n } else {\n return false;\n }\n },\n\n /**\n *\n * @function\n * @param {Object} data - the raw configuration\n * @example IIIF 1.1 Info Looks like this\n * {\n * \"@context\" : \"http://library.stanford.edu/iiif/image-api/1.1/context.json\",\n * \"@id\" : \"http://iiif.example.com/prefix/1E34750D-38DB-4825-A38A-B60A345E591C\",\n * \"width\" : 6000,\n * \"height\" : 4000,\n * \"scale_factors\" : [ 1, 2, 4 ],\n * \"tile_width\" : 1024,\n * \"tile_height\" : 1024,\n * \"formats\" : [ \"jpg\", \"png\" ],\n * \"qualities\" : [ \"native\", \"grey\" ],\n * \"profile\" : \"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0\"\n * }\n */\n configure: function( data, url ){\n // Try to deduce our version and fake it upwards if needed\n if ( !$.isPlainObject(data) ) {\n var options = configureFromXml10( data );\n options['@context'] = \"http://iiif.io/api/image/1.0/context.json\";\n options['@id'] = url.replace('/info.xml', '');\n options.version = 1;\n return options;\n } else {\n if ( !data['@context'] ) {\n data['@context'] = 'http://iiif.io/api/image/1.0/context.json';\n data['@id'] = url.replace('/info.json', '');\n data.version = 1;\n } else {\n var context = data['@context'];\n if (Array.isArray(context)) {\n for (var i = 0; i < context.length; i++) {\n if (typeof context[i] === 'string' &&\n ( /^http:\\/\\/iiif\\.io\\/api\\/image\\/[1-3]\\/context\\.json$/.test(context[i]) ||\n context[i] === 'http://library.stanford.edu/iiif/image-api/1.1/context.json' ) ) {\n context = context[i];\n break;\n }\n }\n }\n switch (context) {\n case 'http://iiif.io/api/image/1/context.json':\n case 'http://library.stanford.edu/iiif/image-api/1.1/context.json':\n data.version = 1;\n break;\n case 'http://iiif.io/api/image/2/context.json':\n data.version = 2;\n break;\n case 'http://iiif.io/api/image/3/context.json':\n data.version = 3;\n break;\n default:\n $.console.error('Data has a @context property which contains no known IIIF context URI.');\n }\n }\n if ( !data['@id'] && data['id'] ) {\n data['@id'] = data['id'];\n }\n if(data.preferredFormats) {\n for (var f = 0; f < data.preferredFormats.length; f++ ) {\n if ( OpenSeadragon.imageFormatSupported(data.preferredFormats[f]) ) {\n data.tileFormat = data.preferredFormats[f];\n break;\n }\n }\n }\n return data;\n }\n },\n\n /**\n * Return the tileWidth for the given level.\n * @function\n * @param {Number} level\n */\n getTileWidth: function( level ) {\n\n if(this.emulateLegacyImagePyramid) {\n return $.TileSource.prototype.getTileWidth.call(this, level);\n }\n\n var scaleFactor = Math.pow(2, this.maxLevel - level);\n\n if (this.tileSizePerScaleFactor && this.tileSizePerScaleFactor[scaleFactor]) {\n return this.tileSizePerScaleFactor[scaleFactor].width;\n }\n return this._tileWidth;\n },\n\n /**\n * Return the tileHeight for the given level.\n * @function\n * @param {Number} level\n */\n getTileHeight: function( level ) {\n\n if(this.emulateLegacyImagePyramid) {\n return $.TileSource.prototype.getTileHeight.call(this, level);\n }\n\n var scaleFactor = Math.pow(2, this.maxLevel - level);\n\n if (this.tileSizePerScaleFactor && this.tileSizePerScaleFactor[scaleFactor]) {\n return this.tileSizePerScaleFactor[scaleFactor].height;\n }\n return this._tileHeight;\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getLevelScale: function ( level ) {\n\n if(this.emulateLegacyImagePyramid) {\n var levelScale = NaN;\n if (this.levels.length > 0 && level >= this.minLevel && level <= this.maxLevel) {\n levelScale =\n this.levels[level].width /\n this.levels[this.maxLevel].width;\n }\n return levelScale;\n }\n\n return $.TileSource.prototype.getLevelScale.call(this, level);\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getNumTiles: function( level ) {\n\n if(this.emulateLegacyImagePyramid) {\n var scale = this.getLevelScale(level);\n if (scale) {\n return new $.Point(1, 1);\n } else {\n return new $.Point(0, 0);\n }\n }\n\n return $.TileSource.prototype.getNumTiles.call(this, level);\n },\n\n\n /**\n * @function\n * @param {Number} level\n * @param {OpenSeadragon.Point} point\n */\n getTileAtPoint: function( level, point ) {\n\n if(this.emulateLegacyImagePyramid) {\n return new $.Point(0, 0);\n }\n\n return $.TileSource.prototype.getTileAtPoint.call(this, level, point);\n },\n\n\n /**\n * Responsible for retrieving the url which will return an image for the\n * region specified by the given x, y, and level components.\n * @function\n * @param {Number} level - z index\n * @param {Number} x\n * @param {Number} y\n * @throws {Error}\n */\n getTileUrl: function( level, x, y ){\n\n if(this.emulateLegacyImagePyramid) {\n var url = null;\n if ( this.levels.length > 0 && level >= this.minLevel && level <= this.maxLevel ) {\n url = this.levels[ level ].url;\n }\n return url;\n }\n\n //# constants\n var IIIF_ROTATION = '0',\n //## get the scale (level as a decimal)\n scale = Math.pow( 0.5, this.maxLevel - level ),\n\n //# image dimensions at this level\n levelWidth = Math.ceil( this.width * scale ),\n levelHeight = Math.ceil( this.height * scale ),\n\n //## iiif region\n tileWidth,\n tileHeight,\n iiifTileSizeWidth,\n iiifTileSizeHeight,\n iiifRegion,\n iiifTileX,\n iiifTileY,\n iiifTileW,\n iiifTileH,\n iiifSize,\n iiifSizeW,\n iiifSizeH,\n iiifQuality,\n uri;\n\n tileWidth = this.getTileWidth(level);\n tileHeight = this.getTileHeight(level);\n iiifTileSizeWidth = Math.ceil( tileWidth / scale );\n iiifTileSizeHeight = Math.ceil( tileHeight / scale );\n if (this.version === 1) {\n iiifQuality = \"native.\" + this.tileFormat;\n } else {\n iiifQuality = \"default.\" + this.tileFormat;\n }\n if ( levelWidth < tileWidth && levelHeight < tileHeight ){\n if ( this.version === 2 && levelWidth === this.width ) {\n iiifSize = \"max\";\n } else if ( this.version === 3 && levelWidth === this.width && levelHeight === this.height ) {\n iiifSize = \"max\";\n } else if ( this.version === 3 ) {\n iiifSize = levelWidth + \",\" + levelHeight;\n } else {\n iiifSize = levelWidth + \",\";\n }\n iiifRegion = 'full';\n } else {\n iiifTileX = x * iiifTileSizeWidth;\n iiifTileY = y * iiifTileSizeHeight;\n iiifTileW = Math.min( iiifTileSizeWidth, this.width - iiifTileX );\n iiifTileH = Math.min( iiifTileSizeHeight, this.height - iiifTileY );\n if ( x === 0 && y === 0 && iiifTileW === this.width && iiifTileH === this.height ) {\n iiifRegion = \"full\";\n } else {\n iiifRegion = [ iiifTileX, iiifTileY, iiifTileW, iiifTileH ].join( ',' );\n }\n iiifSizeW = Math.ceil( iiifTileW * scale );\n iiifSizeH = Math.ceil( iiifTileH * scale );\n if ( this.version === 2 && iiifSizeW === this.width ) {\n iiifSize = \"max\";\n } else if ( this.version === 3 && iiifSizeW === this.width && iiifSizeH === this.height ) {\n iiifSize = \"max\";\n } else if (this.version === 3) {\n iiifSize = iiifSizeW + \",\" + iiifSizeH;\n } else {\n iiifSize = iiifSizeW + \",\";\n }\n }\n uri = [ this['@id'], iiifRegion, iiifSize, IIIF_ROTATION, iiifQuality ].join( '/' );\n\n return uri;\n },\n\n __testonly__: {\n canBeTiled: canBeTiled,\n constructLevels: constructLevels\n }\n\n });\n\n /**\n * Determine whether arbitrary tile requests can be made against a service with the given profile\n * @function\n * @param {array} profile - IIIF profile array\n * @throws {Error}\n */\n function canBeTiled ( options ) {\n var level0Profiles = [\n \"http://library.stanford.edu/iiif/image-api/compliance.html#level0\",\n \"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0\",\n \"http://iiif.io/api/image/2/level0.json\",\n \"level0\",\n \"https://iiif.io/api/image/3/level0.json\"\n ];\n var profileLevel = Array.isArray(options.profile) ? options.profile[0] : options.profile;\n var isLevel0 = (level0Profiles.indexOf(profileLevel) !== -1);\n var hasCanoncicalSizeFeature = false;\n if ( options.version === 2 && options.profile.length > 1 && options.profile[1].supports ) {\n hasCanoncicalSizeFeature = options.profile[1].supports.indexOf( \"sizeByW\" ) !== -1;\n }\n if ( options.version === 3 && options.extraFeatures ) {\n hasCanoncicalSizeFeature = options.extraFeatures.indexOf( \"sizeByWh\" ) !== -1;\n }\n return !isLevel0 || hasCanoncicalSizeFeature;\n }\n\n /**\n * Build the legacy pyramid URLs (one tile per level)\n * @function\n * @param {object} options - infoJson\n * @throws {Error}\n */\n function constructLevels(options) {\n var levels = [];\n for(var i = 0; i < options.sizes.length; i++) {\n levels.push({\n url: options['@id'] + '/full/' + options.sizes[i].width + ',' +\n (options.version === 3 ? options.sizes[i].height : '') +\n '/0/default.' + options.tileFormat,\n width: options.sizes[i].width,\n height: options.sizes[i].height\n });\n }\n return levels.sort(function(a, b) {\n return a.width - b.width;\n });\n }\n\n\n function configureFromXml10(xmlDoc) {\n //parse the xml\n if ( !xmlDoc || !xmlDoc.documentElement ) {\n throw new Error( $.getString( \"Errors.Xml\" ) );\n }\n\n var root = xmlDoc.documentElement,\n rootName = root.tagName,\n configuration = null;\n\n if ( rootName == \"info\" ) {\n try {\n configuration = {};\n parseXML10( root, configuration );\n return configuration;\n\n } catch ( e ) {\n throw (e instanceof Error) ?\n e :\n new Error( $.getString(\"Errors.IIIF\") );\n }\n }\n throw new Error( $.getString( \"Errors.IIIF\" ) );\n }\n\n function parseXML10( node, configuration, property ) {\n var i,\n value;\n if ( node.nodeType == 3 && property ) {//text node\n value = node.nodeValue.trim();\n if( value.match(/^\\d*$/)){\n value = Number( value );\n }\n if( !configuration[ property ] ){\n configuration[ property ] = value;\n }else{\n if( !$.isArray( configuration[ property ] ) ){\n configuration[ property ] = [ configuration[ property ] ];\n }\n configuration[ property ].push( value );\n }\n } else if( node.nodeType == 1 ){\n for( i = 0; i < node.childNodes.length; i++ ){\n parseXML10( node.childNodes[ i ], configuration, node.nodeName );\n }\n }\n }\n\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - OsmTileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Derived from the OSM tile source in Rainer Simon's seajax-utils project\n * . Rainer Simon has contributed\n * the included code to the OpenSeadragon project under the New BSD license;\n * see .\n */\n\n\n(function( $ ){\n\n/**\n * @class OsmTileSource\n * @classdesc A tilesource implementation for OpenStreetMap.

\n *\n * Note 1. Zoomlevels. Deep Zoom and OSM define zoom levels differently. In Deep\n * Zoom, level 0 equals an image of 1x1 pixels. In OSM, level 0 equals an image of\n * 256x256 levels (see http://gasi.ch/blog/inside-deep-zoom-2). I.e. there is a\n * difference of log2(256)=8 levels.

\n *\n * Note 2. Image dimension. According to the OSM Wiki\n * (http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Zoom_levels)\n * the highest Mapnik zoom level has 256.144x256.144 tiles, with a 256x256\n * pixel size. I.e. the Deep Zoom image dimension is 65.572.864x65.572.864\n * pixels.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @param {Number|Object} width - the pixel width of the image or the idiomatic\n * options object which is used instead of positional arguments.\n * @param {Number} height\n * @param {Number} tileSize\n * @param {Number} tileOverlap\n * @param {String} tilesUrl\n */\n$.OsmTileSource = function( width, height, tileSize, tileOverlap, tilesUrl ) {\n var options;\n\n if( $.isPlainObject( width ) ){\n options = width;\n }else{\n options = {\n width: arguments[0],\n height: arguments[1],\n tileSize: arguments[2],\n tileOverlap: arguments[3],\n tilesUrl: arguments[4]\n };\n }\n //apply default setting for standard public OpenStreatMaps service\n //but allow them to be specified so fliks can host there own instance\n //or apply against other services supportting the same standard\n if( !options.width || !options.height ){\n options.width = 65572864;\n options.height = 65572864;\n }\n if( !options.tileSize ){\n options.tileSize = 256;\n options.tileOverlap = 0;\n }\n if( !options.tilesUrl ){\n options.tilesUrl = \"http://tile.openstreetmap.org/\";\n }\n options.minLevel = 8;\n\n $.TileSource.apply( this, [ options ] );\n\n};\n\n$.extend( $.OsmTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.OsmTileSource.prototype */{\n\n\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n supports: function( data, url ){\n return (\n data.type &&\n \"openstreetmaps\" == data.type\n );\n },\n\n /**\n *\n * @function\n * @param {Object} data - the raw configuration\n * @param {String} url - the url the data was retrieved from if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n */\n configure: function( data, url ){\n return data;\n },\n\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n */\n getTileUrl: function( level, x, y ) {\n return this.tilesUrl + (level - 8) + \"/\" + x + \"/\" + y + \".png\";\n }\n});\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - TmsTileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Derived from the TMS tile source in Rainer Simon's seajax-utils project\n * . Rainer Simon has contributed\n * the included code to the OpenSeadragon project under the New BSD license;\n * see .\n */\n\n\n(function( $ ){\n\n/**\n * @class TmsTileSource\n * @classdesc A tilesource implementation for Tiled Map Services (TMS).\n * TMS tile scheme ( [ as supported by OpenLayers ] is described here\n * ( http://openlayers.org/dev/examples/tms.html ).\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @param {Number|Object} width - the pixel width of the image or the idiomatic\n * options object which is used instead of positional arguments.\n * @param {Number} height\n * @param {Number} tileSize\n * @param {Number} tileOverlap\n * @param {String} tilesUrl\n */\n$.TmsTileSource = function( width, height, tileSize, tileOverlap, tilesUrl ) {\n var options;\n\n if( $.isPlainObject( width ) ){\n options = width;\n }else{\n options = {\n width: arguments[0],\n height: arguments[1],\n tileSize: arguments[2],\n tileOverlap: arguments[3],\n tilesUrl: arguments[4]\n };\n }\n // TMS has integer multiples of 256 for width/height and adds buffer\n // if necessary -> account for this!\n var bufferedWidth = Math.ceil(options.width / 256) * 256,\n bufferedHeight = Math.ceil(options.height / 256) * 256,\n max;\n\n // Compute number of zoomlevels in this tileset\n if (bufferedWidth > bufferedHeight) {\n max = bufferedWidth / 256;\n } else {\n max = bufferedHeight / 256;\n }\n options.maxLevel = Math.ceil(Math.log(max) / Math.log(2)) - 1;\n options.tileSize = 256;\n options.width = bufferedWidth;\n options.height = bufferedHeight;\n\n $.TileSource.apply( this, [ options ] );\n\n};\n\n$.extend( $.TmsTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.TmsTileSource.prototype */{\n\n\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n supports: function( data, url ){\n return ( data.type && \"tiledmapservice\" == data.type );\n },\n\n /**\n *\n * @function\n * @param {Object} data - the raw configuration\n * @param {String} url - the url the data was retrieved from if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n */\n configure: function( data, url ){\n return data;\n },\n\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n */\n getTileUrl: function( level, x, y ) {\n // Convert from Deep Zoom definition to TMS zoom definition\n var yTiles = this.getNumTiles( level ).y - 1;\n\n return this.tilesUrl + level + \"/\" + x + \"/\" + (yTiles - y) + \".png\";\n }\n});\n\n\n}( OpenSeadragon ));\n\n(function($) {\n\n /**\n * @class ZoomifyTileSource\n * @classdesc A tilesource implementation for the zoomify format.\n *\n * A description of the format can be found here:\n * https://ecommons.cornell.edu/bitstream/handle/1813/5410/Introducing_Zoomify_Image.pdf\n *\n * There are two ways of creating a zoomify tilesource for openseadragon\n *\n * 1) Supplying all necessary information in the tilesource object. A minimal example object for this method looks like this:\n *\n * {\n * type: \"zoomifytileservice\",\n * width: 1000,\n * height: 1000,\n * tilesUrl: \"/test/data/zoomify/\"\n * }\n *\n * The tileSize is currently hardcoded to 256 (the usual Zoomify default). The tileUrl must the path to the image _directory_.\n *\n * 2) Loading image metadata from xml file: (CURRENTLY NOT SUPPORTED)\n *\n * When creating zoomify formatted images one \"xml\" like file with name ImageProperties.xml\n * will be created as well. Here is an example of such a file:\n *\n * \n *\n * To use this xml file as metadata source you must supply the path to the ImageProperties.xml file and leave out all other parameters:\n * As stated above, this method of loading a zoomify tilesource is currently not supported\n *\n * {\n * type: \"zoomifytileservice\",\n * tilesUrl: \"/test/data/zoomify/ImageProperties.xml\"\n * }\n\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @param {Number} width - the pixel width of the image.\n * @param {Number} height\n * @param {Number} tileSize\n * @param {String} tilesUrl\n */\n $.ZoomifyTileSource = function(options) {\n options.tileSize = 256;\n\n var currentImageSize = {\n x: options.width,\n y: options.height\n };\n options.imageSizes = [{\n x: options.width,\n y: options.height\n }];\n options.gridSize = [this._getGridSize(options.width, options.height, options.tileSize)];\n\n while (parseInt(currentImageSize.x, 10) > options.tileSize || parseInt(currentImageSize.y, 10) > options.tileSize) {\n currentImageSize.x = Math.floor(currentImageSize.x / 2);\n currentImageSize.y = Math.floor(currentImageSize.y / 2);\n options.imageSizes.push({\n x: currentImageSize.x,\n y: currentImageSize.y\n });\n options.gridSize.push(this._getGridSize(currentImageSize.x, currentImageSize.y, options.tileSize));\n }\n options.imageSizes.reverse();\n options.gridSize.reverse();\n options.minLevel = 0;\n options.maxLevel = options.gridSize.length - 1;\n\n OpenSeadragon.TileSource.apply(this, [options]);\n };\n\n $.extend($.ZoomifyTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.ZoomifyTileSource.prototype */ {\n\n //private\n _getGridSize: function(width, height, tileSize) {\n return {\n x: Math.ceil(width / tileSize),\n y: Math.ceil(height / tileSize)\n };\n },\n\n //private\n _calculateAbsoluteTileNumber: function(level, x, y) {\n var num = 0;\n var size = {};\n\n //Sum up all tiles below the level we want the number of tiles\n for (var z = 0; z < level; z++) {\n size = this.gridSize[z];\n num += size.x * size.y;\n }\n //Add the tiles of the level\n size = this.gridSize[level];\n num += size.x * y + x;\n return num;\n },\n\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n supports: function(data, url) {\n return (data.type && \"zoomifytileservice\" == data.type);\n },\n\n /**\n *\n * @function\n * @param {Object} data - the raw configuration\n * @param {String} url - the url the data was retrieved from if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n */\n configure: function(data, url) {\n return data;\n },\n\n /**\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n */\n getTileUrl: function(level, x, y) {\n //console.log(level);\n var result = 0;\n var num = this._calculateAbsoluteTileNumber(level, x, y);\n result = Math.floor(num / 256);\n return this.tilesUrl + 'TileGroup' + result + '/' + level + '-' + x + '-' + y + '.jpg';\n\n }\n });\n\n}(OpenSeadragon));\n\n\n/*\n * OpenSeadragon - LegacyTileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class LegacyTileSource\n * @classdesc The LegacyTileSource allows simple, traditional image pyramids to be loaded\n * into an OpenSeadragon Viewer. Basically, this translates to the historically\n * common practice of starting with a 'master' image, maybe a tiff for example,\n * and generating a set of 'service' images like one or more thumbnails, a medium\n * resolution image and a high resolution image in standard web formats like\n * png or jpg.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @param {Array} levels An array of file descriptions, each is an object with\n * a 'url', a 'width', and a 'height'. Overriding classes can expect more\n * properties but these properties are sufficient for this implementation.\n * Additionally, the levels are required to be listed in order from\n * smallest to largest.\n * @property {Number} aspectRatio\n * @property {Number} dimensions\n * @property {Number} tileSize\n * @property {Number} tileOverlap\n * @property {Number} minLevel\n * @property {Number} maxLevel\n * @property {Array} levels\n */\n$.LegacyTileSource = function( levels ) {\n\n var options,\n width,\n height;\n\n if( $.isArray( levels ) ){\n options = {\n type: 'legacy-image-pyramid',\n levels: levels\n };\n }\n\n //clean up the levels to make sure we support all formats\n options.levels = filterFiles( options.levels );\n\n if ( options.levels.length > 0 ) {\n width = options.levels[ options.levels.length - 1 ].width;\n height = options.levels[ options.levels.length - 1 ].height;\n }\n else {\n width = 0;\n height = 0;\n $.console.error( \"No supported image formats found\" );\n }\n\n $.extend( true, options, {\n width: width,\n height: height,\n tileSize: Math.max( height, width ),\n tileOverlap: 0,\n minLevel: 0,\n maxLevel: options.levels.length > 0 ? options.levels.length - 1 : 0\n } );\n\n $.TileSource.apply( this, [ options ] );\n\n this.levels = options.levels;\n};\n\n$.extend( $.LegacyTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.LegacyTileSource.prototype */{\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n supports: function( data, url ){\n return (\n data.type &&\n \"legacy-image-pyramid\" == data.type\n ) || (\n data.documentElement &&\n \"legacy-image-pyramid\" == data.documentElement.getAttribute('type')\n );\n },\n\n\n /**\n *\n * @function\n * @param {Object|XMLDocument} configuration - the raw configuration\n * @param {String} dataUrl - the url the data was retrieved from if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n */\n configure: function( configuration, dataUrl ){\n\n var options;\n\n if( !$.isPlainObject(configuration) ){\n\n options = configureFromXML( this, configuration );\n\n }else{\n\n options = configureFromObject( this, configuration );\n }\n\n return options;\n\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getLevelScale: function ( level ) {\n var levelScale = NaN;\n if ( this.levels.length > 0 && level >= this.minLevel && level <= this.maxLevel ) {\n levelScale =\n this.levels[ level ].width /\n this.levels[ this.maxLevel ].width;\n }\n return levelScale;\n },\n\n /**\n * @function\n * @param {Number} level\n */\n getNumTiles: function( level ) {\n var scale = this.getLevelScale( level );\n if ( scale ){\n return new $.Point( 1, 1 );\n } else {\n return new $.Point( 0, 0 );\n }\n },\n\n /**\n * This method is not implemented by this class other than to throw an Error\n * announcing you have to implement it. Because of the variety of tile\n * server technologies, and various specifications for building image\n * pyramids, this method is here to allow easy integration.\n * @function\n * @param {Number} level\n * @param {Number} x\n * @param {Number} y\n * @throws {Error}\n */\n getTileUrl: function ( level, x, y ) {\n var url = null;\n if ( this.levels.length > 0 && level >= this.minLevel && level <= this.maxLevel ) {\n url = this.levels[ level ].url;\n }\n return url;\n }\n} );\n\n/**\n * This method removes any files from the Array which don't conform to our\n * basic requirements for a 'level' in the LegacyTileSource.\n * @private\n * @inner\n * @function\n */\nfunction filterFiles( files ){\n var filtered = [],\n file,\n i;\n for( i = 0; i < files.length; i++ ){\n file = files[ i ];\n if( file.height &&\n file.width &&\n file.url ){\n //This is sufficient to serve as a level\n filtered.push({\n url: file.url,\n width: Number( file.width ),\n height: Number( file.height )\n });\n }\n else {\n $.console.error( 'Unsupported image format: %s', file.url ? file.url : '' );\n }\n }\n\n return filtered.sort(function(a, b) {\n return a.height - b.height;\n });\n\n}\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction configureFromXML( tileSource, xmlDoc ){\n\n if ( !xmlDoc || !xmlDoc.documentElement ) {\n throw new Error( $.getString( \"Errors.Xml\" ) );\n }\n\n var root = xmlDoc.documentElement,\n rootName = root.tagName,\n conf = null,\n levels = [],\n level,\n i;\n\n if ( rootName == \"image\" ) {\n\n try {\n conf = {\n type: root.getAttribute( \"type\" ),\n levels: []\n };\n\n levels = root.getElementsByTagName( \"level\" );\n for ( i = 0; i < levels.length; i++ ) {\n level = levels[ i ];\n\n conf.levels.push({\n url: level.getAttribute( \"url\" ),\n width: parseInt( level.getAttribute( \"width\" ), 10 ),\n height: parseInt( level.getAttribute( \"height\" ), 10 )\n });\n }\n\n return configureFromObject( tileSource, conf );\n\n } catch ( e ) {\n throw (e instanceof Error) ?\n e :\n new Error( 'Unknown error parsing Legacy Image Pyramid XML.' );\n }\n } else if ( rootName == \"collection\" ) {\n throw new Error( 'Legacy Image Pyramid Collections not yet supported.' );\n } else if ( rootName == \"error\" ) {\n throw new Error( 'Error: ' + xmlDoc );\n }\n\n throw new Error( 'Unknown element ' + rootName );\n}\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction configureFromObject( tileSource, configuration ){\n\n return configuration.levels;\n\n}\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - ImageTileSource\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function ($) {\n\n /**\n * @class ImageTileSource\n * @classdesc The ImageTileSource allows a simple image to be loaded\n * into an OpenSeadragon Viewer.\n * There are 2 ways to open an ImageTileSource:\n * 1. viewer.open({type: 'image', url: fooUrl});\n * 2. viewer.open(new OpenSeadragon.ImageTileSource({url: fooUrl}));\n *\n * With the first syntax, the crossOriginPolicy, ajaxWithCredentials and\n * useCanvas options are inherited from the viewer if they are not\n * specified directly in the options object.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.TileSource\n * @param {Object} options Options object.\n * @param {String} options.url URL of the image\n * @param {Boolean} [options.buildPyramid=true] If set to true (default), a\n * pyramid will be built internally to provide a better downsampling.\n * @param {String|Boolean} [options.crossOriginPolicy=false] Valid values are\n * 'Anonymous', 'use-credentials', and false. If false, image requests will\n * not use CORS preventing internal pyramid building for images from other\n * domains.\n * @param {String|Boolean} [options.ajaxWithCredentials=false] Whether to set\n * the withCredentials XHR flag for AJAX requests (when loading tile sources).\n * @param {Boolean} [options.useCanvas=true] Set to false to prevent any use\n * of the canvas API.\n */\n $.ImageTileSource = function (options) {\n\n options = $.extend({\n buildPyramid: true,\n crossOriginPolicy: false,\n ajaxWithCredentials: false,\n useCanvas: true\n }, options);\n $.TileSource.apply(this, [options]);\n\n };\n\n $.extend($.ImageTileSource.prototype, $.TileSource.prototype, /** @lends OpenSeadragon.ImageTileSource.prototype */{\n /**\n * Determine if the data and/or url imply the image service is supported by\n * this tile source.\n * @function\n * @param {Object|Array} data\n * @param {String} optional - url\n */\n supports: function (data, url) {\n return data.type && data.type === \"image\";\n },\n /**\n *\n * @function\n * @param {Object} options - the options\n * @param {String} dataUrl - the url the image was retrieved from, if any.\n * @return {Object} options - A dictionary of keyword arguments sufficient\n * to configure this tile sources constructor.\n */\n configure: function (options, dataUrl) {\n return options;\n },\n /**\n * Responsible for retrieving, and caching the\n * image metadata pertinent to this TileSources implementation.\n * @function\n * @param {String} url\n * @throws {Error}\n */\n getImageInfo: function (url) {\n var image = this._image = new Image();\n var _this = this;\n\n if (this.crossOriginPolicy) {\n image.crossOrigin = this.crossOriginPolicy;\n }\n if (this.ajaxWithCredentials) {\n image.useCredentials = this.ajaxWithCredentials;\n }\n\n $.addEvent(image, 'load', function () {\n /* IE8 fix since it has no naturalWidth and naturalHeight */\n _this.width = Object.prototype.hasOwnProperty.call(image, 'naturalWidth') ? image.naturalWidth : image.width;\n _this.height = Object.prototype.hasOwnProperty.call(image, 'naturalHeight') ? image.naturalHeight : image.height;\n _this.aspectRatio = _this.width / _this.height;\n _this.dimensions = new $.Point(_this.width, _this.height);\n _this._tileWidth = _this.width;\n _this._tileHeight = _this.height;\n _this.tileOverlap = 0;\n _this.minLevel = 0;\n _this.levels = _this._buildLevels();\n _this.maxLevel = _this.levels.length - 1;\n\n _this.ready = true;\n\n // Note: this event is documented elsewhere, in TileSource\n _this.raiseEvent('ready', {tileSource: _this});\n });\n\n $.addEvent(image, 'error', function () {\n // Note: this event is documented elsewhere, in TileSource\n _this.raiseEvent('open-failed', {\n message: \"Error loading image at \" + url,\n source: url\n });\n });\n\n image.src = url;\n },\n /**\n * @function\n * @param {Number} level\n */\n getLevelScale: function (level) {\n var levelScale = NaN;\n if (level >= this.minLevel && level <= this.maxLevel) {\n levelScale =\n this.levels[level].width /\n this.levels[this.maxLevel].width;\n }\n return levelScale;\n },\n /**\n * @function\n * @param {Number} level\n */\n getNumTiles: function (level) {\n var scale = this.getLevelScale(level);\n if (scale) {\n return new $.Point(1, 1);\n } else {\n return new $.Point(0, 0);\n }\n },\n /**\n * Retrieves a tile url\n * @function\n * @param {Number} level Level of the tile\n * @param {Number} x x coordinate of the tile\n * @param {Number} y y coordinate of the tile\n */\n getTileUrl: function (level, x, y) {\n var url = null;\n if (level >= this.minLevel && level <= this.maxLevel) {\n url = this.levels[level].url;\n }\n return url;\n },\n /**\n * Retrieves a tile context 2D\n * @function\n * @param {Number} level Level of the tile\n * @param {Number} x x coordinate of the tile\n * @param {Number} y y coordinate of the tile\n */\n getContext2D: function (level, x, y) {\n var context = null;\n if (level >= this.minLevel && level <= this.maxLevel) {\n context = this.levels[level].context2D;\n }\n return context;\n },\n\n // private\n //\n // Builds the different levels of the pyramid if possible\n // (i.e. if canvas API enabled and no canvas tainting issue).\n _buildLevels: function () {\n var levels = [{\n url: this._image.src,\n /* IE8 fix since it has no naturalWidth and naturalHeight */\n width: Object.prototype.hasOwnProperty.call(this._image, 'naturalWidth') ? this._image.naturalWidth : this._image.width,\n height: Object.prototype.hasOwnProperty.call(this._image, 'naturalHeight') ? this._image.naturalHeight : this._image.height\n }];\n\n if (!this.buildPyramid || !$.supportsCanvas || !this.useCanvas) {\n // We don't need the image anymore. Allows it to be GC.\n delete this._image;\n return levels;\n }\n\n /* IE8 fix since it has no naturalWidth and naturalHeight */\n var currentWidth = Object.prototype.hasOwnProperty.call(this._image, 'naturalWidth') ? this._image.naturalWidth : this._image.width;\n var currentHeight = Object.prototype.hasOwnProperty.call(this._image, 'naturalHeight') ? this._image.naturalHeight : this._image.height;\n\n\n var bigCanvas = document.createElement(\"canvas\");\n var bigContext = bigCanvas.getContext(\"2d\");\n\n bigCanvas.width = currentWidth;\n bigCanvas.height = currentHeight;\n bigContext.drawImage(this._image, 0, 0, currentWidth, currentHeight);\n // We cache the context of the highest level because the browser\n // is a lot faster at downsampling something it already has\n // downsampled before.\n levels[0].context2D = bigContext;\n // We don't need the image anymore. Allows it to be GC.\n delete this._image;\n\n if ($.isCanvasTainted(bigCanvas)) {\n // If the canvas is tainted, we can't compute the pyramid.\n return levels;\n }\n\n // We build smaller levels until either width or height becomes\n // 1 pixel wide.\n while (currentWidth >= 2 && currentHeight >= 2) {\n currentWidth = Math.floor(currentWidth / 2);\n currentHeight = Math.floor(currentHeight / 2);\n var smallCanvas = document.createElement(\"canvas\");\n var smallContext = smallCanvas.getContext(\"2d\");\n smallCanvas.width = currentWidth;\n smallCanvas.height = currentHeight;\n smallContext.drawImage(bigCanvas, 0, 0, currentWidth, currentHeight);\n\n levels.splice(0, 0, {\n context2D: smallContext,\n width: currentWidth,\n height: currentHeight\n });\n\n bigCanvas = smallCanvas;\n bigContext = smallContext;\n }\n return levels;\n }\n });\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - TileSourceCollection\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($) {\n\n// deprecated\n$.TileSourceCollection = function(tileSize, tileSources, rows, layout) {\n $.console.error('TileSourceCollection is deprecated; use World instead');\n};\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - Button\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * An enumeration of button states\n * @member ButtonState\n * @memberof OpenSeadragon\n * @static\n * @type {Object}\n * @property {Number} REST\n * @property {Number} GROUP\n * @property {Number} HOVER\n * @property {Number} DOWN\n */\n$.ButtonState = {\n REST: 0,\n GROUP: 1,\n HOVER: 2,\n DOWN: 3\n};\n\n/**\n * @class Button\n * @classdesc Manages events, hover states for individual buttons, tool-tips, as well\n * as fading the buttons out when the user has not interacted with them\n * for a specified period.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @param {Object} options\n * @param {Element} [options.element=null] Element to use as the button. If not specified, an HTML <div> element is created.\n * @param {String} [options.tooltip=null] Provides context help for the button when the\n * user hovers over it.\n * @param {String} [options.srcRest=null] URL of image to use in 'rest' state.\n * @param {String} [options.srcGroup=null] URL of image to use in 'up' state.\n * @param {String} [options.srcHover=null] URL of image to use in 'hover' state.\n * @param {String} [options.srcDown=null] URL of image to use in 'down' state.\n * @param {Number} [options.fadeDelay=0] How long to wait before fading.\n * @param {Number} [options.fadeLength=2000] How long should it take to fade the button.\n * @param {OpenSeadragon.EventHandler} [options.onPress=null] Event handler callback for {@link OpenSeadragon.Button.event:press}.\n * @param {OpenSeadragon.EventHandler} [options.onRelease=null] Event handler callback for {@link OpenSeadragon.Button.event:release}.\n * @param {OpenSeadragon.EventHandler} [options.onClick=null] Event handler callback for {@link OpenSeadragon.Button.event:click}.\n * @param {OpenSeadragon.EventHandler} [options.onEnter=null] Event handler callback for {@link OpenSeadragon.Button.event:enter}.\n * @param {OpenSeadragon.EventHandler} [options.onExit=null] Event handler callback for {@link OpenSeadragon.Button.event:exit}.\n * @param {OpenSeadragon.EventHandler} [options.onFocus=null] Event handler callback for {@link OpenSeadragon.Button.event:focus}.\n * @param {OpenSeadragon.EventHandler} [options.onBlur=null] Event handler callback for {@link OpenSeadragon.Button.event:blur}.\n */\n$.Button = function( options ) {\n\n var _this = this;\n\n $.EventSource.call( this );\n\n $.extend( true, this, {\n\n tooltip: null,\n srcRest: null,\n srcGroup: null,\n srcHover: null,\n srcDown: null,\n clickTimeThreshold: $.DEFAULT_SETTINGS.clickTimeThreshold,\n clickDistThreshold: $.DEFAULT_SETTINGS.clickDistThreshold,\n /**\n * How long to wait before fading.\n * @member {Number} fadeDelay\n * @memberof OpenSeadragon.Button#\n */\n fadeDelay: 0,\n /**\n * How long should it take to fade the button.\n * @member {Number} fadeLength\n * @memberof OpenSeadragon.Button#\n */\n fadeLength: 2000,\n onPress: null,\n onRelease: null,\n onClick: null,\n onEnter: null,\n onExit: null,\n onFocus: null,\n onBlur: null\n\n }, options );\n\n /**\n * The button element.\n * @member {Element} element\n * @memberof OpenSeadragon.Button#\n */\n this.element = options.element || $.makeNeutralElement(\"div\");\n\n //if the user has specified the element to bind the control to explicitly\n //then do not add the default control images\n if ( !options.element ) {\n this.imgRest = $.makeTransparentImage( this.srcRest );\n this.imgGroup = $.makeTransparentImage( this.srcGroup );\n this.imgHover = $.makeTransparentImage( this.srcHover );\n this.imgDown = $.makeTransparentImage( this.srcDown );\n\n this.imgRest.alt =\n this.imgGroup.alt =\n this.imgHover.alt =\n this.imgDown.alt =\n this.tooltip;\n\n this.element.style.position = \"relative\";\n $.setElementTouchActionNone( this.element );\n\n this.imgGroup.style.position =\n this.imgHover.style.position =\n this.imgDown.style.position =\n \"absolute\";\n\n this.imgGroup.style.top =\n this.imgHover.style.top =\n this.imgDown.style.top =\n \"0px\";\n\n this.imgGroup.style.left =\n this.imgHover.style.left =\n this.imgDown.style.left =\n \"0px\";\n\n this.imgHover.style.visibility =\n this.imgDown.style.visibility =\n \"hidden\";\n\n if ($.Browser.vendor == $.BROWSERS.FIREFOX && $.Browser.version < 3) {\n this.imgGroup.style.top =\n this.imgHover.style.top =\n this.imgDown.style.top =\n \"\";\n }\n\n this.element.appendChild( this.imgRest );\n this.element.appendChild( this.imgGroup );\n this.element.appendChild( this.imgHover );\n this.element.appendChild( this.imgDown );\n }\n\n\n this.addHandler(\"press\", this.onPress);\n this.addHandler(\"release\", this.onRelease);\n this.addHandler(\"click\", this.onClick);\n this.addHandler(\"enter\", this.onEnter);\n this.addHandler(\"exit\", this.onExit);\n this.addHandler(\"focus\", this.onFocus);\n this.addHandler(\"blur\", this.onBlur);\n\n /**\n * The button's current state.\n * @member {OpenSeadragon.ButtonState} currentState\n * @memberof OpenSeadragon.Button#\n */\n this.currentState = $.ButtonState.GROUP;\n\n // When the button last began to fade.\n this.fadeBeginTime = null;\n // Whether this button should fade after user stops interacting with the viewport.\n this.shouldFade = false;\n\n this.element.style.display = \"inline-block\";\n this.element.style.position = \"relative\";\n this.element.title = this.tooltip;\n\n /**\n * Tracks mouse/touch/key events on the button.\n * @member {OpenSeadragon.MouseTracker} tracker\n * @memberof OpenSeadragon.Button#\n */\n this.tracker = new $.MouseTracker({\n\n element: this.element,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n\n enterHandler: function( event ) {\n if ( event.insideElementPressed ) {\n inTo( _this, $.ButtonState.DOWN );\n /**\n * Raised when the cursor enters the Button element.\n *\n * @event enter\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"enter\", { originalEvent: event.originalEvent } );\n } else if ( !event.buttonDownAny ) {\n inTo( _this, $.ButtonState.HOVER );\n }\n },\n\n focusHandler: function ( event ) {\n this.enterHandler( event );\n /**\n * Raised when the Button element receives focus.\n *\n * @event focus\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"focus\", { originalEvent: event.originalEvent } );\n },\n\n exitHandler: function( event ) {\n outTo( _this, $.ButtonState.GROUP );\n if ( event.insideElementPressed ) {\n /**\n * Raised when the cursor leaves the Button element.\n *\n * @event exit\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"exit\", { originalEvent: event.originalEvent } );\n }\n },\n\n blurHandler: function ( event ) {\n this.exitHandler( event );\n /**\n * Raised when the Button element loses focus.\n *\n * @event blur\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"blur\", { originalEvent: event.originalEvent } );\n },\n\n pressHandler: function ( event ) {\n inTo( _this, $.ButtonState.DOWN );\n /**\n * Raised when a mouse button is pressed or touch occurs in the Button element.\n *\n * @event press\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"press\", { originalEvent: event.originalEvent } );\n },\n\n releaseHandler: function( event ) {\n if ( event.insideElementPressed && event.insideElementReleased ) {\n outTo( _this, $.ButtonState.HOVER );\n /**\n * Raised when the mouse button is released or touch ends in the Button element.\n *\n * @event release\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"release\", { originalEvent: event.originalEvent } );\n } else if ( event.insideElementPressed ) {\n outTo( _this, $.ButtonState.GROUP );\n } else {\n inTo( _this, $.ButtonState.HOVER );\n }\n },\n\n clickHandler: function( event ) {\n if ( event.quick ) {\n /**\n * Raised when a mouse button is pressed and released or touch is initiated and ended in the Button element within the time and distance threshold.\n *\n * @event click\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent(\"click\", { originalEvent: event.originalEvent });\n }\n },\n\n keyHandler: function( event ){\n //console.log( \"%s : handling key %s!\", _this.tooltip, event.keyCode);\n if( 13 === event.keyCode ){\n /***\n * Raised when a mouse button is pressed and released or touch is initiated and ended in the Button element within the time and distance threshold.\n *\n * @event click\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"click\", { originalEvent: event.originalEvent } );\n /***\n * Raised when the mouse button is released or touch ends in the Button element.\n *\n * @event release\n * @memberof OpenSeadragon.Button\n * @type {object}\n * @property {OpenSeadragon.Button} eventSource - A reference to the Button which raised the event.\n * @property {Object} originalEvent - The original DOM event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.raiseEvent( \"release\", { originalEvent: event.originalEvent } );\n return false;\n }\n return true;\n }\n\n });\n\n outTo( this, $.ButtonState.REST );\n};\n\n$.extend( $.Button.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.Button.prototype */{\n\n /**\n * TODO: Determine what this function is intended to do and if it's actually\n * useful as an API point.\n * @function\n */\n notifyGroupEnter: function() {\n inTo( this, $.ButtonState.GROUP );\n },\n\n /**\n * TODO: Determine what this function is intended to do and if it's actually\n * useful as an API point.\n * @function\n */\n notifyGroupExit: function() {\n outTo( this, $.ButtonState.REST );\n },\n\n /**\n * @function\n */\n disable: function(){\n this.notifyGroupExit();\n this.element.disabled = true;\n $.setElementOpacity( this.element, 0.2, true );\n },\n\n /**\n * @function\n */\n enable: function(){\n this.element.disabled = false;\n $.setElementOpacity( this.element, 1.0, true );\n this.notifyGroupEnter();\n }\n\n});\n\n\nfunction scheduleFade( button ) {\n $.requestAnimationFrame(function(){\n updateFade( button );\n });\n}\n\nfunction updateFade( button ) {\n var currentTime,\n deltaTime,\n opacity;\n\n if ( button.shouldFade ) {\n currentTime = $.now();\n deltaTime = currentTime - button.fadeBeginTime;\n opacity = 1.0 - deltaTime / button.fadeLength;\n opacity = Math.min( 1.0, opacity );\n opacity = Math.max( 0.0, opacity );\n\n if( button.imgGroup ){\n $.setElementOpacity( button.imgGroup, opacity, true );\n }\n if ( opacity > 0 ) {\n // fade again\n scheduleFade( button );\n }\n }\n}\n\nfunction beginFading( button ) {\n button.shouldFade = true;\n button.fadeBeginTime = $.now() + button.fadeDelay;\n window.setTimeout( function(){\n scheduleFade( button );\n }, button.fadeDelay );\n}\n\nfunction stopFading( button ) {\n button.shouldFade = false;\n if( button.imgGroup ){\n $.setElementOpacity( button.imgGroup, 1.0, true );\n }\n}\n\nfunction inTo( button, newState ) {\n\n if( button.element.disabled ){\n return;\n }\n\n if ( newState >= $.ButtonState.GROUP &&\n button.currentState == $.ButtonState.REST ) {\n stopFading( button );\n button.currentState = $.ButtonState.GROUP;\n }\n\n if ( newState >= $.ButtonState.HOVER &&\n button.currentState == $.ButtonState.GROUP ) {\n if( button.imgHover ){\n button.imgHover.style.visibility = \"\";\n }\n button.currentState = $.ButtonState.HOVER;\n }\n\n if ( newState >= $.ButtonState.DOWN &&\n button.currentState == $.ButtonState.HOVER ) {\n if( button.imgDown ){\n button.imgDown.style.visibility = \"\";\n }\n button.currentState = $.ButtonState.DOWN;\n }\n}\n\n\nfunction outTo( button, newState ) {\n\n if( button.element.disabled ){\n return;\n }\n\n if ( newState <= $.ButtonState.HOVER &&\n button.currentState == $.ButtonState.DOWN ) {\n if( button.imgDown ){\n button.imgDown.style.visibility = \"hidden\";\n }\n button.currentState = $.ButtonState.HOVER;\n }\n\n if ( newState <= $.ButtonState.GROUP &&\n button.currentState == $.ButtonState.HOVER ) {\n if( button.imgHover ){\n button.imgHover.style.visibility = \"hidden\";\n }\n button.currentState = $.ButtonState.GROUP;\n }\n\n if ( newState <= $.ButtonState.REST &&\n button.currentState == $.ButtonState.GROUP ) {\n beginFading( button );\n button.currentState = $.ButtonState.REST;\n }\n}\n\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - ButtonGroup\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n/**\n * @class ButtonGroup\n * @classdesc Manages events on groups of buttons.\n *\n * @memberof OpenSeadragon\n * @param {Object} options - A dictionary of settings applied against the entire group of buttons.\n * @param {Array} options.buttons Array of buttons\n * @param {Element} [options.element] Element to use as the container\n **/\n$.ButtonGroup = function( options ) {\n\n $.extend( true, this, {\n /**\n * An array containing the buttons themselves.\n * @member {Array} buttons\n * @memberof OpenSeadragon.ButtonGroup#\n */\n buttons: [],\n clickTimeThreshold: $.DEFAULT_SETTINGS.clickTimeThreshold,\n clickDistThreshold: $.DEFAULT_SETTINGS.clickDistThreshold,\n labelText: \"\"\n }, options );\n\n // copy the button elements TODO: Why?\n var buttons = this.buttons.concat([]),\n _this = this,\n i;\n\n /**\n * The shared container for the buttons.\n * @member {Element} element\n * @memberof OpenSeadragon.ButtonGroup#\n */\n this.element = options.element || $.makeNeutralElement( \"div\" );\n\n // TODO What if there IS an options.group specified?\n if( !options.group ){\n this.element.style.display = \"inline-block\";\n //this.label = $.makeNeutralElement( \"label\" );\n //TODO: support labels for ButtonGroups\n //this.label.innerHTML = this.labelText;\n //this.element.appendChild( this.label );\n for ( i = 0; i < buttons.length; i++ ) {\n this.element.appendChild( buttons[ i ].element );\n }\n }\n\n $.setElementTouchActionNone( this.element );\n\n /**\n * Tracks mouse/touch/key events across the group of buttons.\n * @member {OpenSeadragon.MouseTracker} tracker\n * @memberof OpenSeadragon.ButtonGroup#\n */\n this.tracker = new $.MouseTracker({\n element: this.element,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n enterHandler: function ( event ) {\n var i;\n for ( i = 0; i < _this.buttons.length; i++ ) {\n _this.buttons[ i ].notifyGroupEnter();\n }\n },\n exitHandler: function ( event ) {\n var i;\n if ( !event.insideElementPressed ) {\n for ( i = 0; i < _this.buttons.length; i++ ) {\n _this.buttons[ i ].notifyGroupExit();\n }\n }\n },\n });\n};\n\n/** @lends OpenSeadragon.ButtonGroup.prototype */\n$.ButtonGroup.prototype = {\n\n /**\n * TODO: Figure out why this is used on the public API and if a more useful\n * api can be created.\n * @function\n * @private\n */\n emulateEnter: function() {\n this.tracker.enterHandler( { eventSource: this.tracker } );\n },\n\n /**\n * TODO: Figure out why this is used on the public API and if a more useful\n * api can be created.\n * @function\n * @private\n */\n emulateExit: function() {\n this.tracker.exitHandler( { eventSource: this.tracker } );\n }\n};\n\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Rect\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($) {\n\n/**\n * @class Rect\n * @classdesc A Rectangle is described by it top left coordinates (x, y), width,\n * height and degrees of rotation around (x, y).\n * Note that the coordinate system used is the one commonly used with images:\n * x increases when going to the right\n * y increases when going to the bottom\n * degrees increases clockwise with 0 being the horizontal\n *\n * The constructor normalizes the rectangle to always have 0 <= degrees < 90\n *\n * @memberof OpenSeadragon\n * @param {Number} [x=0] The vector component 'x'.\n * @param {Number} [y=0] The vector component 'y'.\n * @param {Number} [width=0] The vector component 'width'.\n * @param {Number} [height=0] The vector component 'height'.\n * @param {Number} [degrees=0] Rotation of the rectangle around (x,y) in degrees.\n */\n$.Rect = function(x, y, width, height, degrees) {\n /**\n * The vector component 'x'.\n * @member {Number} x\n * @memberof OpenSeadragon.Rect#\n */\n this.x = typeof (x) === \"number\" ? x : 0;\n /**\n * The vector component 'y'.\n * @member {Number} y\n * @memberof OpenSeadragon.Rect#\n */\n this.y = typeof (y) === \"number\" ? y : 0;\n /**\n * The vector component 'width'.\n * @member {Number} width\n * @memberof OpenSeadragon.Rect#\n */\n this.width = typeof (width) === \"number\" ? width : 0;\n /**\n * The vector component 'height'.\n * @member {Number} height\n * @memberof OpenSeadragon.Rect#\n */\n this.height = typeof (height) === \"number\" ? height : 0;\n\n /**\n * The rotation of the rectangle, in degrees.\n * @member {Number} degrees\n * @memberof OpenSeadragon.Rect#\n */\n this.degrees = typeof (degrees) === \"number\" ? degrees : 0;\n\n // Normalizes the rectangle.\n this.degrees = $.positiveModulo(this.degrees, 360);\n var newTopLeft, newWidth;\n if (this.degrees >= 270) {\n newTopLeft = this.getTopRight();\n this.x = newTopLeft.x;\n this.y = newTopLeft.y;\n newWidth = this.height;\n this.height = this.width;\n this.width = newWidth;\n this.degrees -= 270;\n } else if (this.degrees >= 180) {\n newTopLeft = this.getBottomRight();\n this.x = newTopLeft.x;\n this.y = newTopLeft.y;\n this.degrees -= 180;\n } else if (this.degrees >= 90) {\n newTopLeft = this.getBottomLeft();\n this.x = newTopLeft.x;\n this.y = newTopLeft.y;\n newWidth = this.height;\n this.height = this.width;\n this.width = newWidth;\n this.degrees -= 90;\n }\n};\n\n/**\n * Builds a rectangle having the 3 specified points as summits.\n * @static\n * @memberof OpenSeadragon.Rect\n * @param {OpenSeadragon.Point} topLeft\n * @param {OpenSeadragon.Point} topRight\n * @param {OpenSeadragon.Point} bottomLeft\n * @returns {OpenSeadragon.Rect}\n */\n$.Rect.fromSummits = function(topLeft, topRight, bottomLeft) {\n var width = topLeft.distanceTo(topRight);\n var height = topLeft.distanceTo(bottomLeft);\n var diff = topRight.minus(topLeft);\n var radians = Math.atan(diff.y / diff.x);\n if (diff.x < 0) {\n radians += Math.PI;\n } else if (diff.y < 0) {\n radians += 2 * Math.PI;\n }\n return new $.Rect(\n topLeft.x,\n topLeft.y,\n width,\n height,\n radians / Math.PI * 180);\n};\n\n/** @lends OpenSeadragon.Rect.prototype */\n$.Rect.prototype = {\n /**\n * @function\n * @returns {OpenSeadragon.Rect} a duplicate of this Rect\n */\n clone: function() {\n return new $.Rect(\n this.x,\n this.y,\n this.width,\n this.height,\n this.degrees);\n },\n\n /**\n * The aspect ratio is simply the ratio of width to height.\n * @function\n * @returns {Number} The ratio of width to height.\n */\n getAspectRatio: function() {\n return this.width / this.height;\n },\n\n /**\n * Provides the coordinates of the upper-left corner of the rectangle as a\n * point.\n * @function\n * @returns {OpenSeadragon.Point} The coordinate of the upper-left corner of\n * the rectangle.\n */\n getTopLeft: function() {\n return new $.Point(\n this.x,\n this.y\n );\n },\n\n /**\n * Provides the coordinates of the bottom-right corner of the rectangle as a\n * point.\n * @function\n * @returns {OpenSeadragon.Point} The coordinate of the bottom-right corner of\n * the rectangle.\n */\n getBottomRight: function() {\n return new $.Point(this.x + this.width, this.y + this.height)\n .rotate(this.degrees, this.getTopLeft());\n },\n\n /**\n * Provides the coordinates of the top-right corner of the rectangle as a\n * point.\n * @function\n * @returns {OpenSeadragon.Point} The coordinate of the top-right corner of\n * the rectangle.\n */\n getTopRight: function() {\n return new $.Point(this.x + this.width, this.y)\n .rotate(this.degrees, this.getTopLeft());\n },\n\n /**\n * Provides the coordinates of the bottom-left corner of the rectangle as a\n * point.\n * @function\n * @returns {OpenSeadragon.Point} The coordinate of the bottom-left corner of\n * the rectangle.\n */\n getBottomLeft: function() {\n return new $.Point(this.x, this.y + this.height)\n .rotate(this.degrees, this.getTopLeft());\n },\n\n /**\n * Computes the center of the rectangle.\n * @function\n * @returns {OpenSeadragon.Point} The center of the rectangle as represented\n * as represented by a 2-dimensional vector (x,y)\n */\n getCenter: function() {\n return new $.Point(\n this.x + this.width / 2.0,\n this.y + this.height / 2.0\n ).rotate(this.degrees, this.getTopLeft());\n },\n\n /**\n * Returns the width and height component as a vector OpenSeadragon.Point\n * @function\n * @returns {OpenSeadragon.Point} The 2 dimensional vector representing the\n * the width and height of the rectangle.\n */\n getSize: function() {\n return new $.Point(this.width, this.height);\n },\n\n /**\n * Determines if two Rectangles have equivalent components.\n * @function\n * @param {OpenSeadragon.Rect} rectangle The Rectangle to compare to.\n * @return {Boolean} 'true' if all components are equal, otherwise 'false'.\n */\n equals: function(other) {\n return (other instanceof $.Rect) &&\n this.x === other.x &&\n this.y === other.y &&\n this.width === other.width &&\n this.height === other.height &&\n this.degrees === other.degrees;\n },\n\n /**\n * Multiply all dimensions (except degrees) in this Rect by a factor and\n * return a new Rect.\n * @function\n * @param {Number} factor The factor to multiply vector components.\n * @returns {OpenSeadragon.Rect} A new rect representing the multiplication\n * of the vector components by the factor\n */\n times: function(factor) {\n return new $.Rect(\n this.x * factor,\n this.y * factor,\n this.width * factor,\n this.height * factor,\n this.degrees);\n },\n\n /**\n * Translate/move this Rect by a vector and return new Rect.\n * @function\n * @param {OpenSeadragon.Point} delta The translation vector.\n * @returns {OpenSeadragon.Rect} A new rect with altered position\n */\n translate: function(delta) {\n return new $.Rect(\n this.x + delta.x,\n this.y + delta.y,\n this.width,\n this.height,\n this.degrees);\n },\n\n /**\n * Returns the smallest rectangle that will contain this and the given\n * rectangle bounding boxes.\n * @param {OpenSeadragon.Rect} rect\n * @return {OpenSeadragon.Rect} The new rectangle.\n */\n union: function(rect) {\n var thisBoundingBox = this.getBoundingBox();\n var otherBoundingBox = rect.getBoundingBox();\n\n var left = Math.min(thisBoundingBox.x, otherBoundingBox.x);\n var top = Math.min(thisBoundingBox.y, otherBoundingBox.y);\n var right = Math.max(\n thisBoundingBox.x + thisBoundingBox.width,\n otherBoundingBox.x + otherBoundingBox.width);\n var bottom = Math.max(\n thisBoundingBox.y + thisBoundingBox.height,\n otherBoundingBox.y + otherBoundingBox.height);\n\n return new $.Rect(\n left,\n top,\n right - left,\n bottom - top);\n },\n\n /**\n * Returns the bounding box of the intersection of this rectangle with the\n * given rectangle.\n * @param {OpenSeadragon.Rect} rect\n * @return {OpenSeadragon.Rect} the bounding box of the intersection\n * or null if the rectangles don't intersect.\n */\n intersection: function(rect) {\n // Simplified version of Weiler Atherton clipping algorithm\n // https://en.wikipedia.org/wiki/Weiler%E2%80%93Atherton_clipping_algorithm\n // Because we just want the bounding box of the intersection,\n // we can just compute the bounding box of:\n // 1. all the summits of this which are inside rect\n // 2. all the summits of rect which are inside this\n // 3. all the intersections of rect and this\n var EPSILON = 0.0000000001;\n\n var intersectionPoints = [];\n\n var thisTopLeft = this.getTopLeft();\n if (rect.containsPoint(thisTopLeft, EPSILON)) {\n intersectionPoints.push(thisTopLeft);\n }\n var thisTopRight = this.getTopRight();\n if (rect.containsPoint(thisTopRight, EPSILON)) {\n intersectionPoints.push(thisTopRight);\n }\n var thisBottomLeft = this.getBottomLeft();\n if (rect.containsPoint(thisBottomLeft, EPSILON)) {\n intersectionPoints.push(thisBottomLeft);\n }\n var thisBottomRight = this.getBottomRight();\n if (rect.containsPoint(thisBottomRight, EPSILON)) {\n intersectionPoints.push(thisBottomRight);\n }\n\n var rectTopLeft = rect.getTopLeft();\n if (this.containsPoint(rectTopLeft, EPSILON)) {\n intersectionPoints.push(rectTopLeft);\n }\n var rectTopRight = rect.getTopRight();\n if (this.containsPoint(rectTopRight, EPSILON)) {\n intersectionPoints.push(rectTopRight);\n }\n var rectBottomLeft = rect.getBottomLeft();\n if (this.containsPoint(rectBottomLeft, EPSILON)) {\n intersectionPoints.push(rectBottomLeft);\n }\n var rectBottomRight = rect.getBottomRight();\n if (this.containsPoint(rectBottomRight, EPSILON)) {\n intersectionPoints.push(rectBottomRight);\n }\n\n var thisSegments = this._getSegments();\n var rectSegments = rect._getSegments();\n for (var i = 0; i < thisSegments.length; i++) {\n var thisSegment = thisSegments[i];\n for (var j = 0; j < rectSegments.length; j++) {\n var rectSegment = rectSegments[j];\n var intersect = getIntersection(thisSegment[0], thisSegment[1],\n rectSegment[0], rectSegment[1]);\n if (intersect) {\n intersectionPoints.push(intersect);\n }\n }\n }\n\n // Get intersection point of segments [a,b] and [c,d]\n function getIntersection(a, b, c, d) {\n // http://stackoverflow.com/a/1968345/1440403\n var abVector = b.minus(a);\n var cdVector = d.minus(c);\n\n var denom = -cdVector.x * abVector.y + abVector.x * cdVector.y;\n if (denom === 0) {\n return null;\n }\n\n var s = (abVector.x * (a.y - c.y) - abVector.y * (a.x - c.x)) / denom;\n var t = (cdVector.x * (a.y - c.y) - cdVector.y * (a.x - c.x)) / denom;\n\n if (-EPSILON <= s && s <= 1 - EPSILON &&\n -EPSILON <= t && t <= 1 - EPSILON) {\n return new $.Point(a.x + t * abVector.x, a.y + t * abVector.y);\n }\n return null;\n }\n\n if (intersectionPoints.length === 0) {\n return null;\n }\n\n var minX = intersectionPoints[0].x;\n var maxX = intersectionPoints[0].x;\n var minY = intersectionPoints[0].y;\n var maxY = intersectionPoints[0].y;\n for (var k = 1; k < intersectionPoints.length; k++) {\n var point = intersectionPoints[k];\n if (point.x < minX) {\n minX = point.x;\n }\n if (point.x > maxX) {\n maxX = point.x;\n }\n if (point.y < minY) {\n minY = point.y;\n }\n if (point.y > maxY) {\n maxY = point.y;\n }\n }\n return new $.Rect(minX, minY, maxX - minX, maxY - minY);\n },\n\n // private\n _getSegments: function() {\n var topLeft = this.getTopLeft();\n var topRight = this.getTopRight();\n var bottomLeft = this.getBottomLeft();\n var bottomRight = this.getBottomRight();\n return [[topLeft, topRight],\n [topRight, bottomRight],\n [bottomRight, bottomLeft],\n [bottomLeft, topLeft]];\n },\n\n /**\n * Rotates a rectangle around a point.\n * @function\n * @param {Number} degrees The angle in degrees to rotate.\n * @param {OpenSeadragon.Point} [pivot] The point about which to rotate.\n * Defaults to the center of the rectangle.\n * @return {OpenSeadragon.Rect}\n */\n rotate: function(degrees, pivot) {\n degrees = $.positiveModulo(degrees, 360);\n if (degrees === 0) {\n return this.clone();\n }\n\n pivot = pivot || this.getCenter();\n var newTopLeft = this.getTopLeft().rotate(degrees, pivot);\n var newTopRight = this.getTopRight().rotate(degrees, pivot);\n\n var diff = newTopRight.minus(newTopLeft);\n // Handle floating point error\n diff = diff.apply(function(x) {\n var EPSILON = 1e-15;\n return Math.abs(x) < EPSILON ? 0 : x;\n });\n var radians = Math.atan(diff.y / diff.x);\n if (diff.x < 0) {\n radians += Math.PI;\n } else if (diff.y < 0) {\n radians += 2 * Math.PI;\n }\n return new $.Rect(\n newTopLeft.x,\n newTopLeft.y,\n this.width,\n this.height,\n radians / Math.PI * 180);\n },\n\n /**\n * Retrieves the smallest horizontal (degrees=0) rectangle which contains\n * this rectangle.\n * @returns {OpenSeadragon.Rect}\n */\n getBoundingBox: function() {\n if (this.degrees === 0) {\n return this.clone();\n }\n var topLeft = this.getTopLeft();\n var topRight = this.getTopRight();\n var bottomLeft = this.getBottomLeft();\n var bottomRight = this.getBottomRight();\n var minX = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var maxX = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var minY = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n var maxY = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n return new $.Rect(\n minX,\n minY,\n maxX - minX,\n maxY - minY);\n },\n\n /**\n * Retrieves the smallest horizontal (degrees=0) rectangle which contains\n * this rectangle and has integers x, y, width and height\n * @returns {OpenSeadragon.Rect}\n */\n getIntegerBoundingBox: function() {\n var boundingBox = this.getBoundingBox();\n var x = Math.floor(boundingBox.x);\n var y = Math.floor(boundingBox.y);\n var width = Math.ceil(boundingBox.width + boundingBox.x - x);\n var height = Math.ceil(boundingBox.height + boundingBox.y - y);\n return new $.Rect(x, y, width, height);\n },\n\n /**\n * Determines whether a point is inside this rectangle (edge included).\n * @function\n * @param {OpenSeadragon.Point} point\n * @param {Number} [epsilon=0] the margin of error allowed\n * @returns {Boolean} true if the point is inside this rectangle, false\n * otherwise.\n */\n containsPoint: function(point, epsilon) {\n epsilon = epsilon || 0;\n\n // See http://stackoverflow.com/a/2752754/1440403 for explanation\n var topLeft = this.getTopLeft();\n var topRight = this.getTopRight();\n var bottomLeft = this.getBottomLeft();\n var topDiff = topRight.minus(topLeft);\n var leftDiff = bottomLeft.minus(topLeft);\n\n return ((point.x - topLeft.x) * topDiff.x +\n (point.y - topLeft.y) * topDiff.y >= -epsilon) &&\n\n ((point.x - topRight.x) * topDiff.x +\n (point.y - topRight.y) * topDiff.y <= epsilon) &&\n\n ((point.x - topLeft.x) * leftDiff.x +\n (point.y - topLeft.y) * leftDiff.y >= -epsilon) &&\n\n ((point.x - bottomLeft.x) * leftDiff.x +\n (point.y - bottomLeft.y) * leftDiff.y <= epsilon);\n },\n\n /**\n * Provides a string representation of the rectangle which is useful for\n * debugging.\n * @function\n * @returns {String} A string representation of the rectangle.\n */\n toString: function() {\n return \"[\" +\n (Math.round(this.x * 100) / 100) + \", \" +\n (Math.round(this.y * 100) / 100) + \", \" +\n (Math.round(this.width * 100) / 100) + \"x\" +\n (Math.round(this.height * 100) / 100) + \", \" +\n (Math.round(this.degrees * 100) / 100) + \"deg\" +\n \"]\";\n }\n};\n\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - ReferenceStrip\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function ( $ ) {\n\n// dictionary from id to private properties\nvar THIS = {};\n\n/**\n * The CollectionDrawer is a reimplementation if the Drawer API that\n * focuses on allowing a viewport to be redefined as a collection\n * of smaller viewports, defined by a clear number of rows and / or\n * columns of which each item in the matrix of viewports has its own\n * source.\n *\n * This idea is a reexpression of the idea of dzi collections\n * which allows a clearer algorithm to reuse the tile sources already\n * supported by OpenSeadragon, in heterogenious or homogenious\n * sequences just like mixed groups already supported by the viewer\n * for the purpose of image sequnces.\n *\n * TODO: The difficult part of this feature is figuring out how to express\n * this functionality as a combination of the functionality already\n * provided by Drawer, Viewport, TileSource, and Navigator. It may\n * require better abstraction at those points in order to efficiently\n * reuse those paradigms.\n */\n/**\n * @class ReferenceStrip\n * @memberof OpenSeadragon\n * @param {Object} options\n */\n$.ReferenceStrip = function ( options ) {\n\n var _this = this,\n viewer = options.viewer,\n viewerSize = $.getElementSize( viewer.element ),\n element,\n style,\n i;\n\n //We may need to create a new element and id if they did not\n //provide the id for the existing element\n if ( !options.id ) {\n options.id = 'referencestrip-' + $.now();\n this.element = $.makeNeutralElement( \"div\" );\n this.element.id = options.id;\n this.element.className = 'referencestrip';\n }\n\n options = $.extend( true, {\n sizeRatio: $.DEFAULT_SETTINGS.referenceStripSizeRatio,\n position: $.DEFAULT_SETTINGS.referenceStripPosition,\n scroll: $.DEFAULT_SETTINGS.referenceStripScroll,\n clickTimeThreshold: $.DEFAULT_SETTINGS.clickTimeThreshold\n }, options, {\n //required overrides\n element: this.element,\n //These need to be overridden to prevent recursion since\n //the navigator is a viewer and a viewer has a navigator\n showNavigator: false,\n mouseNavEnabled: false,\n showNavigationControl: false,\n showSequenceControl: false\n } );\n\n $.extend( this, options );\n //Private state properties\n THIS[this.id] = {\n \"animating\": false\n };\n\n this.minPixelRatio = this.viewer.minPixelRatio;\n\n style = this.element.style;\n style.marginTop = '0px';\n style.marginRight = '0px';\n style.marginBottom = '0px';\n style.marginLeft = '0px';\n style.left = '0px';\n style.bottom = '0px';\n style.border = '0px';\n style.background = '#000';\n style.position = 'relative';\n\n $.setElementTouchActionNone( this.element );\n\n $.setElementOpacity( this.element, 0.8 );\n\n this.viewer = viewer;\n this.innerTracker = new $.MouseTracker( {\n element: this.element,\n dragHandler: $.delegate( this, onStripDrag ),\n scrollHandler: $.delegate( this, onStripScroll ),\n enterHandler: $.delegate( this, onStripEnter ),\n exitHandler: $.delegate( this, onStripExit ),\n keyDownHandler: $.delegate( this, onKeyDown ),\n keyHandler: $.delegate( this, onKeyPress )\n } );\n\n //Controls the position and orientation of the reference strip and sets the\n //appropriate width and height\n if ( options.width && options.height ) {\n this.element.style.width = options.width + 'px';\n this.element.style.height = options.height + 'px';\n viewer.addControl(\n this.element,\n { anchor: $.ControlAnchor.BOTTOM_LEFT }\n );\n } else {\n if ( \"horizontal\" == options.scroll ) {\n this.element.style.width = (\n viewerSize.x *\n options.sizeRatio *\n viewer.tileSources.length\n ) + ( 12 * viewer.tileSources.length ) + 'px';\n\n this.element.style.height = (\n viewerSize.y *\n options.sizeRatio\n ) + 'px';\n\n viewer.addControl(\n this.element,\n { anchor: $.ControlAnchor.BOTTOM_LEFT }\n );\n } else {\n this.element.style.height = (\n viewerSize.y *\n options.sizeRatio *\n viewer.tileSources.length\n ) + ( 12 * viewer.tileSources.length ) + 'px';\n\n this.element.style.width = (\n viewerSize.x *\n options.sizeRatio\n ) + 'px';\n\n viewer.addControl(\n this.element,\n { anchor: $.ControlAnchor.TOP_LEFT }\n );\n\n }\n }\n\n this.panelWidth = ( viewerSize.x * this.sizeRatio ) + 8;\n this.panelHeight = ( viewerSize.y * this.sizeRatio ) + 8;\n this.panels = [];\n this.miniViewers = {};\n\n /*jshint loopfunc:true*/\n for ( i = 0; i < viewer.tileSources.length; i++ ) {\n\n element = $.makeNeutralElement( 'div' );\n element.id = this.element.id + \"-\" + i;\n\n element.style.width = _this.panelWidth + 'px';\n element.style.height = _this.panelHeight + 'px';\n element.style.display = 'inline';\n element.style.float = 'left'; //Webkit\n element.style.cssFloat = 'left'; //Firefox\n element.style.styleFloat = 'left'; //IE\n element.style.padding = '2px';\n $.setElementTouchActionNone( element );\n\n element.innerTracker = new $.MouseTracker( {\n element: element,\n clickTimeThreshold: this.clickTimeThreshold,\n clickDistThreshold: this.clickDistThreshold,\n pressHandler: function ( event ) {\n event.eventSource.dragging = $.now();\n },\n releaseHandler: function ( event ) {\n var tracker = event.eventSource,\n id = tracker.element.id,\n page = Number( id.split( '-' )[2] ),\n now = $.now();\n\n if ( event.insideElementPressed &&\n event.insideElementReleased &&\n tracker.dragging &&\n ( now - tracker.dragging ) < tracker.clickTimeThreshold ) {\n tracker.dragging = null;\n viewer.goToPage( page );\n }\n }\n } );\n\n this.element.appendChild( element );\n\n element.activePanel = false;\n\n this.panels.push( element );\n\n }\n loadPanels( this, this.scroll == 'vertical' ? viewerSize.y : viewerSize.x, 0 );\n this.setFocus( 0 );\n\n};\n\n$.extend( $.ReferenceStrip.prototype, $.EventSource.prototype, $.Viewer.prototype, /** @lends OpenSeadragon.ReferenceStrip.prototype */{\n\n /**\n * @function\n */\n setFocus: function ( page ) {\n var element = this.element.querySelector('#' + this.element.id + '-' + page ),\n viewerSize = $.getElementSize( this.viewer.canvas ),\n scrollWidth = Number( this.element.style.width.replace( 'px', '' ) ),\n scrollHeight = Number( this.element.style.height.replace( 'px', '' ) ),\n offsetLeft = -Number( this.element.style.marginLeft.replace( 'px', '' ) ),\n offsetTop = -Number( this.element.style.marginTop.replace( 'px', '' ) ),\n offset;\n\n if ( this.currentSelected !== element ) {\n if ( this.currentSelected ) {\n this.currentSelected.style.background = '#000';\n }\n this.currentSelected = element;\n this.currentSelected.style.background = '#999';\n\n if ( 'horizontal' == this.scroll ) {\n //right left\n offset = ( Number( page ) ) * ( this.panelWidth + 3 );\n if ( offset > offsetLeft + viewerSize.x - this.panelWidth ) {\n offset = Math.min( offset, ( scrollWidth - viewerSize.x ) );\n this.element.style.marginLeft = -offset + 'px';\n loadPanels( this, viewerSize.x, -offset );\n } else if ( offset < offsetLeft ) {\n offset = Math.max( 0, offset - viewerSize.x / 2 );\n this.element.style.marginLeft = -offset + 'px';\n loadPanels( this, viewerSize.x, -offset );\n }\n } else {\n offset = ( Number( page ) ) * ( this.panelHeight + 3 );\n if ( offset > offsetTop + viewerSize.y - this.panelHeight ) {\n offset = Math.min( offset, ( scrollHeight - viewerSize.y ) );\n this.element.style.marginTop = -offset + 'px';\n loadPanels( this, viewerSize.y, -offset );\n } else if ( offset < offsetTop ) {\n offset = Math.max( 0, offset - viewerSize.y / 2 );\n this.element.style.marginTop = -offset + 'px';\n loadPanels( this, viewerSize.y, -offset );\n }\n }\n\n this.currentPage = page;\n onStripEnter.call( this, { eventSource: this.innerTracker } );\n }\n },\n\n /**\n * @function\n */\n update: function () {\n if ( THIS[this.id].animating ) {\n $.console.log( 'image reference strip update' );\n return true;\n }\n return false;\n },\n\n // Overrides Viewer.destroy\n destroy: function() {\n if (this.miniViewers) {\n for (var key in this.miniViewers) {\n this.miniViewers[key].destroy();\n }\n }\n\n if (this.element) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n\n} );\n\n\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onStripDrag( event ) {\n\n var offsetLeft = Number( this.element.style.marginLeft.replace( 'px', '' ) ),\n offsetTop = Number( this.element.style.marginTop.replace( 'px', '' ) ),\n scrollWidth = Number( this.element.style.width.replace( 'px', '' ) ),\n scrollHeight = Number( this.element.style.height.replace( 'px', '' ) ),\n viewerSize = $.getElementSize( this.viewer.canvas );\n this.dragging = true;\n if ( this.element ) {\n if ( 'horizontal' == this.scroll ) {\n if ( -event.delta.x > 0 ) {\n //forward\n if ( offsetLeft > -( scrollWidth - viewerSize.x ) ) {\n this.element.style.marginLeft = ( offsetLeft + ( event.delta.x * 2 ) ) + 'px';\n loadPanels( this, viewerSize.x, offsetLeft + ( event.delta.x * 2 ) );\n }\n } else if ( -event.delta.x < 0 ) {\n //reverse\n if ( offsetLeft < 0 ) {\n this.element.style.marginLeft = ( offsetLeft + ( event.delta.x * 2 ) ) + 'px';\n loadPanels( this, viewerSize.x, offsetLeft + ( event.delta.x * 2 ) );\n }\n }\n } else {\n if ( -event.delta.y > 0 ) {\n //forward\n if ( offsetTop > -( scrollHeight - viewerSize.y ) ) {\n this.element.style.marginTop = ( offsetTop + ( event.delta.y * 2 ) ) + 'px';\n loadPanels( this, viewerSize.y, offsetTop + ( event.delta.y * 2 ) );\n }\n } else if ( -event.delta.y < 0 ) {\n //reverse\n if ( offsetTop < 0 ) {\n this.element.style.marginTop = ( offsetTop + ( event.delta.y * 2 ) ) + 'px';\n loadPanels( this, viewerSize.y, offsetTop + ( event.delta.y * 2 ) );\n }\n }\n }\n }\n return false;\n\n}\n\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onStripScroll( event ) {\n var offsetLeft = Number( this.element.style.marginLeft.replace( 'px', '' ) ),\n offsetTop = Number( this.element.style.marginTop.replace( 'px', '' ) ),\n scrollWidth = Number( this.element.style.width.replace( 'px', '' ) ),\n scrollHeight = Number( this.element.style.height.replace( 'px', '' ) ),\n viewerSize = $.getElementSize( this.viewer.canvas );\n if ( this.element ) {\n if ( 'horizontal' == this.scroll ) {\n if ( event.scroll > 0 ) {\n //forward\n if ( offsetLeft > -( scrollWidth - viewerSize.x ) ) {\n this.element.style.marginLeft = ( offsetLeft - ( event.scroll * 60 ) ) + 'px';\n loadPanels( this, viewerSize.x, offsetLeft - ( event.scroll * 60 ) );\n }\n } else if ( event.scroll < 0 ) {\n //reverse\n if ( offsetLeft < 0 ) {\n this.element.style.marginLeft = ( offsetLeft - ( event.scroll * 60 ) ) + 'px';\n loadPanels( this, viewerSize.x, offsetLeft - ( event.scroll * 60 ) );\n }\n }\n } else {\n if ( event.scroll < 0 ) {\n //scroll up\n if ( offsetTop > viewerSize.y - scrollHeight ) {\n this.element.style.marginTop = ( offsetTop + ( event.scroll * 60 ) ) + 'px';\n loadPanels( this, viewerSize.y, offsetTop + ( event.scroll * 60 ) );\n }\n } else if ( event.scroll > 0 ) {\n //scroll dowm\n if ( offsetTop < 0 ) {\n this.element.style.marginTop = ( offsetTop + ( event.scroll * 60 ) ) + 'px';\n loadPanels( this, viewerSize.y, offsetTop + ( event.scroll * 60 ) );\n }\n }\n }\n }\n //cancels event\n return false;\n}\n\n\nfunction loadPanels( strip, viewerSize, scroll ) {\n var panelSize,\n activePanelsStart,\n activePanelsEnd,\n miniViewer,\n style,\n i,\n element;\n if ( 'horizontal' == strip.scroll ) {\n panelSize = strip.panelWidth;\n } else {\n panelSize = strip.panelHeight;\n }\n activePanelsStart = Math.ceil( viewerSize / panelSize ) + 5;\n activePanelsEnd = Math.ceil( ( Math.abs( scroll ) + viewerSize ) / panelSize ) + 1;\n activePanelsStart = activePanelsEnd - activePanelsStart;\n activePanelsStart = activePanelsStart < 0 ? 0 : activePanelsStart;\n\n for ( i = activePanelsStart; i < activePanelsEnd && i < strip.panels.length; i++ ) {\n element = strip.panels[i];\n if ( !element.activePanel ) {\n var miniTileSource;\n var originalTileSource = strip.viewer.tileSources[i];\n if (originalTileSource.referenceStripThumbnailUrl) {\n miniTileSource = {\n type: 'image',\n url: originalTileSource.referenceStripThumbnailUrl\n };\n } else {\n miniTileSource = originalTileSource;\n }\n miniViewer = new $.Viewer( {\n id: element.id,\n tileSources: [miniTileSource],\n element: element,\n navigatorSizeRatio: strip.sizeRatio,\n showNavigator: false,\n mouseNavEnabled: false,\n showNavigationControl: false,\n showSequenceControl: false,\n immediateRender: true,\n blendTime: 0,\n animationTime: 0,\n loadTilesWithAjax: strip.viewer.loadTilesWithAjax,\n ajaxHeaders: strip.viewer.ajaxHeaders,\n useCanvas: strip.useCanvas\n } );\n\n miniViewer.displayRegion = $.makeNeutralElement( \"div\" );\n miniViewer.displayRegion.id = element.id + '-displayregion';\n miniViewer.displayRegion.className = 'displayregion';\n\n style = miniViewer.displayRegion.style;\n style.position = 'relative';\n style.top = '0px';\n style.left = '0px';\n style.fontSize = '0px';\n style.overflow = 'hidden';\n style.float = 'left'; //Webkit\n style.cssFloat = 'left'; //Firefox\n style.styleFloat = 'left'; //IE\n style.zIndex = 999999999;\n style.cursor = 'default';\n style.width = ( strip.panelWidth - 4 ) + 'px';\n style.height = ( strip.panelHeight - 4 ) + 'px';\n\n // TODO: What is this for? Future keyboard navigation support?\n miniViewer.displayRegion.innerTracker = new $.MouseTracker( {\n element: miniViewer.displayRegion,\n startDisabled: true\n } );\n\n element.getElementsByTagName( 'div' )[0].appendChild(\n miniViewer.displayRegion\n );\n\n strip.miniViewers[element.id] = miniViewer;\n\n element.activePanel = true;\n }\n }\n}\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onStripEnter( event ) {\n var element = event.eventSource.element;\n\n //$.setElementOpacity(element, 0.8);\n\n //element.style.border = '1px solid #555';\n //element.style.background = '#000';\n\n if ( 'horizontal' == this.scroll ) {\n\n //element.style.paddingTop = \"0px\";\n element.style.marginBottom = \"0px\";\n\n } else {\n\n //element.style.paddingRight = \"0px\";\n element.style.marginLeft = \"0px\";\n\n }\n return false;\n}\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onStripExit( event ) {\n var element = event.eventSource.element;\n\n if ( 'horizontal' == this.scroll ) {\n\n //element.style.paddingTop = \"10px\";\n element.style.marginBottom = \"-\" + ( $.getElementSize( element ).y / 2 ) + \"px\";\n\n } else {\n\n //element.style.paddingRight = \"10px\";\n element.style.marginLeft = \"-\" + ( $.getElementSize( element ).x / 2 ) + \"px\";\n\n }\n return false;\n}\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onKeyDown( event ) {\n //console.log( event.keyCode );\n\n if ( !event.preventDefaultAction && !event.ctrl && !event.alt && !event.meta ) {\n switch ( event.keyCode ) {\n case 38: //up arrow\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: 1, shift: null } );\n return false;\n case 40: //down arrow\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: -1, shift: null } );\n return false;\n case 37: //left arrow\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: -1, shift: null } );\n return false;\n case 39: //right arrow\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: 1, shift: null } );\n return false;\n default:\n //console.log( 'navigator keycode %s', event.keyCode );\n return true;\n }\n } else {\n return true;\n }\n}\n\n\n/**\n * @private\n * @inner\n * @function\n */\nfunction onKeyPress( event ) {\n //console.log( event.keyCode );\n\n if ( !event.preventDefaultAction && !event.ctrl && !event.alt && !event.meta ) {\n switch ( event.keyCode ) {\n case 61: //=|+\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: 1, shift: null } );\n return false;\n case 45: //-|_\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: -1, shift: null } );\n return false;\n case 48: //0|)\n case 119: //w\n case 87: //W\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: 1, shift: null } );\n return false;\n case 115: //s\n case 83: //S\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: -1, shift: null } );\n return false;\n case 97: //a\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: -1, shift: null } );\n return false;\n case 100: //d\n onStripScroll.call( this, { eventSource: this.tracker, position: null, scroll: 1, shift: null } );\n return false;\n default:\n //console.log( 'navigator keycode %s', event.keyCode );\n return true;\n }\n } else {\n return true;\n }\n}\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - DisplayRect\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class DisplayRect\n * @classdesc A display rectangle is very similar to {@link OpenSeadragon.Rect} but adds two\n * fields, 'minLevel' and 'maxLevel' which denote the supported zoom levels\n * for this rectangle.\n *\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.Rect\n * @param {Number} x The vector component 'x'.\n * @param {Number} y The vector component 'y'.\n * @param {Number} width The vector component 'height'.\n * @param {Number} height The vector component 'width'.\n * @param {Number} minLevel The lowest zoom level supported.\n * @param {Number} maxLevel The highest zoom level supported.\n */\n$.DisplayRect = function( x, y, width, height, minLevel, maxLevel ) {\n $.Rect.apply( this, [ x, y, width, height ] );\n\n /**\n * The lowest zoom level supported.\n * @member {Number} minLevel\n * @memberof OpenSeadragon.DisplayRect#\n */\n this.minLevel = minLevel;\n /**\n * The highest zoom level supported.\n * @member {Number} maxLevel\n * @memberof OpenSeadragon.DisplayRect#\n */\n this.maxLevel = maxLevel;\n};\n\n$.extend( $.DisplayRect.prototype, $.Rect.prototype );\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Spring\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class Spring\n * @memberof OpenSeadragon\n * @param {Object} options - Spring configuration settings.\n * @param {Number} options.springStiffness - Spring stiffness. Must be greater than zero.\n * The closer to zero, the closer to linear animation.\n * @param {Number} options.animationTime - Animation duration per spring, in seconds.\n * Must be zero or greater.\n * @param {Number} [options.initial=0] - Initial value of spring.\n * @param {Boolean} [options.exponential=false] - Whether this spring represents\n * an exponential scale (such as zoom) and should be animated accordingly. Note that\n * exponential springs must have non-zero values.\n */\n$.Spring = function( options ) {\n var args = arguments;\n\n if( typeof ( options ) != 'object' ){\n //allows backward compatible use of ( initialValue, config ) as\n //constructor parameters\n options = {\n initial: args.length && typeof ( args[ 0 ] ) == \"number\" ?\n args[ 0 ] :\n undefined,\n /**\n * Spring stiffness.\n * @member {Number} springStiffness\n * @memberof OpenSeadragon.Spring#\n */\n springStiffness: args.length > 1 ?\n args[ 1 ].springStiffness :\n 5.0,\n /**\n * Animation duration per spring.\n * @member {Number} animationTime\n * @memberof OpenSeadragon.Spring#\n */\n animationTime: args.length > 1 ?\n args[ 1 ].animationTime :\n 1.5\n };\n }\n\n $.console.assert(typeof options.springStiffness === \"number\" && options.springStiffness !== 0,\n \"[OpenSeadragon.Spring] options.springStiffness must be a non-zero number\");\n\n $.console.assert(typeof options.animationTime === \"number\" && options.animationTime >= 0,\n \"[OpenSeadragon.Spring] options.animationTime must be a number greater than or equal to 0\");\n\n if (options.exponential) {\n this._exponential = true;\n delete options.exponential;\n }\n\n $.extend( true, this, options);\n\n /**\n * @member {Object} current\n * @memberof OpenSeadragon.Spring#\n * @property {Number} value\n * @property {Number} time\n */\n this.current = {\n value: typeof ( this.initial ) == \"number\" ?\n this.initial :\n (this._exponential ? 0 : 1),\n time: $.now() // always work in milliseconds\n };\n\n $.console.assert(!this._exponential || this.current.value !== 0,\n \"[OpenSeadragon.Spring] value must be non-zero for exponential springs\");\n\n /**\n * @member {Object} start\n * @memberof OpenSeadragon.Spring#\n * @property {Number} value\n * @property {Number} time\n */\n this.start = {\n value: this.current.value,\n time: this.current.time\n };\n\n /**\n * @member {Object} target\n * @memberof OpenSeadragon.Spring#\n * @property {Number} value\n * @property {Number} time\n */\n this.target = {\n value: this.current.value,\n time: this.current.time\n };\n\n if (this._exponential) {\n this.start._logValue = Math.log(this.start.value);\n this.target._logValue = Math.log(this.target.value);\n this.current._logValue = Math.log(this.current.value);\n }\n};\n\n/** @lends OpenSeadragon.Spring.prototype */\n$.Spring.prototype = {\n\n /**\n * @function\n * @param {Number} target\n */\n resetTo: function( target ) {\n $.console.assert(!this._exponential || target !== 0,\n \"[OpenSeadragon.Spring.resetTo] target must be non-zero for exponential springs\");\n\n this.start.value = this.target.value = this.current.value = target;\n this.start.time = this.target.time = this.current.time = $.now();\n\n if (this._exponential) {\n this.start._logValue = Math.log(this.start.value);\n this.target._logValue = Math.log(this.target.value);\n this.current._logValue = Math.log(this.current.value);\n }\n },\n\n /**\n * @function\n * @param {Number} target\n */\n springTo: function( target ) {\n $.console.assert(!this._exponential || target !== 0,\n \"[OpenSeadragon.Spring.springTo] target must be non-zero for exponential springs\");\n\n this.start.value = this.current.value;\n this.start.time = this.current.time;\n this.target.value = target;\n this.target.time = this.start.time + 1000 * this.animationTime;\n\n if (this._exponential) {\n this.start._logValue = Math.log(this.start.value);\n this.target._logValue = Math.log(this.target.value);\n }\n },\n\n /**\n * @function\n * @param {Number} delta\n */\n shiftBy: function( delta ) {\n this.start.value += delta;\n this.target.value += delta;\n\n if (this._exponential) {\n $.console.assert(this.target.value !== 0 && this.start.value !== 0,\n \"[OpenSeadragon.Spring.shiftBy] spring value must be non-zero for exponential springs\");\n\n this.start._logValue = Math.log(this.start.value);\n this.target._logValue = Math.log(this.target.value);\n }\n },\n\n setExponential: function(value) {\n this._exponential = value;\n\n if (this._exponential) {\n $.console.assert(this.current.value !== 0 && this.target.value !== 0 && this.start.value !== 0,\n \"[OpenSeadragon.Spring.setExponential] spring value must be non-zero for exponential springs\");\n\n this.start._logValue = Math.log(this.start.value);\n this.target._logValue = Math.log(this.target.value);\n this.current._logValue = Math.log(this.current.value);\n }\n },\n\n /**\n * @function\n * @returns true if the value got updated, false otherwise\n */\n update: function() {\n this.current.time = $.now();\n\n var startValue, targetValue;\n if (this._exponential) {\n startValue = this.start._logValue;\n targetValue = this.target._logValue;\n } else {\n startValue = this.start.value;\n targetValue = this.target.value;\n }\n\n var currentValue = (this.current.time >= this.target.time) ?\n targetValue :\n startValue +\n ( targetValue - startValue ) *\n transform(\n this.springStiffness,\n ( this.current.time - this.start.time ) /\n ( this.target.time - this.start.time )\n );\n\n var oldValue = this.current.value;\n if (this._exponential) {\n this.current.value = Math.exp(currentValue);\n } else {\n this.current.value = currentValue;\n }\n\n return oldValue != this.current.value;\n },\n\n /**\n * Returns whether the spring is at the target value\n * @function\n * @returns {Boolean} True if at target value, false otherwise\n */\n isAtTargetValue: function() {\n return this.current.value === this.target.value;\n }\n};\n\n/**\n * @private\n */\nfunction transform( stiffness, x ) {\n return ( 1.0 - Math.exp( stiffness * -x ) ) /\n ( 1.0 - Math.exp( -stiffness ) );\n}\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - ImageLoader\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($){\n\n/**\n * @private\n * @class ImageJob\n * @classdesc Handles downloading of a single image.\n * @param {Object} options - Options for this ImageJob.\n * @param {String} [options.src] - URL of image to download.\n * @param {String} [options.loadWithAjax] - Whether to load this image with AJAX.\n * @param {String} [options.ajaxHeaders] - Headers to add to the image request if using AJAX.\n * @param {String} [options.crossOriginPolicy] - CORS policy to use for downloads\n * @param {Function} [options.callback] - Called once image has been downloaded.\n * @param {Function} [options.abort] - Called when this image job is aborted.\n * @param {Number} [options.timeout] - The max number of milliseconds that this image job may take to complete.\n */\nfunction ImageJob (options) {\n\n $.extend(true, this, {\n timeout: $.DEFAULT_SETTINGS.timeout,\n jobId: null\n }, options);\n\n /**\n * Image object which will contain downloaded image.\n * @member {Image} image\n * @memberof OpenSeadragon.ImageJob#\n */\n this.image = null;\n}\n\nImageJob.prototype = {\n errorMsg: null,\n\n /**\n * Starts the image job.\n * @method\n */\n start: function(){\n var self = this;\n var selfAbort = this.abort;\n\n this.image = new Image();\n\n this.image.onload = function(){\n self.finish(true);\n };\n this.image.onabort = this.image.onerror = function() {\n self.errorMsg = \"Image load aborted\";\n self.finish(false);\n };\n\n this.jobId = window.setTimeout(function(){\n self.errorMsg = \"Image load exceeded timeout (\" + self.timeout + \" ms)\";\n self.finish(false);\n }, this.timeout);\n\n // Load the tile with an AJAX request if the loadWithAjax option is\n // set. Otherwise load the image by setting the source proprety of the image object.\n if (this.loadWithAjax) {\n this.request = $.makeAjaxRequest({\n url: this.src,\n withCredentials: this.ajaxWithCredentials,\n headers: this.ajaxHeaders,\n responseType: \"arraybuffer\",\n success: function(request) {\n var blb;\n // Make the raw data into a blob.\n // BlobBuilder fallback adapted from\n // http://stackoverflow.com/questions/15293694/blob-constructor-browser-compatibility\n try {\n blb = new window.Blob([request.response]);\n } catch (e) {\n var BlobBuilder = (\n window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder\n );\n if (e.name === 'TypeError' && BlobBuilder) {\n var bb = new BlobBuilder();\n bb.append(request.response);\n blb = bb.getBlob();\n }\n }\n // If the blob is empty for some reason consider the image load a failure.\n if (blb.size === 0) {\n self.errorMsg = \"Empty image response.\";\n self.finish(false);\n }\n // Create a URL for the blob data and make it the source of the image object.\n // This will still trigger Image.onload to indicate a successful tile load.\n var url = (window.URL || window.webkitURL).createObjectURL(blb);\n self.image.src = url;\n },\n error: function(request) {\n self.errorMsg = \"Image load aborted - XHR error\";\n self.finish(false);\n }\n });\n\n // Provide a function to properly abort the request.\n this.abort = function() {\n self.request.abort();\n\n // Call the existing abort function if available\n if (typeof selfAbort === \"function\") {\n selfAbort();\n }\n };\n } else {\n if (this.crossOriginPolicy !== false) {\n this.image.crossOrigin = this.crossOriginPolicy;\n }\n\n this.image.src = this.src;\n }\n },\n\n finish: function(successful) {\n this.image.onload = this.image.onerror = this.image.onabort = null;\n if (!successful) {\n this.image = null;\n }\n\n if (this.jobId) {\n window.clearTimeout(this.jobId);\n }\n\n this.callback(this);\n }\n\n};\n\n/**\n * @class ImageLoader\n * @memberof OpenSeadragon\n * @classdesc Handles downloading of a set of images using asynchronous queue pattern.\n * You generally won't have to interact with the ImageLoader directly.\n * @param {Object} options - Options for this ImageLoader.\n * @param {Number} [options.jobLimit] - The number of concurrent image requests. See imageLoaderLimit in {@link OpenSeadragon.Options} for details.\n * @param {Number} [options.timeout] - The max number of milliseconds that an image job may take to complete.\n */\n$.ImageLoader = function(options) {\n\n $.extend(true, this, {\n jobLimit: $.DEFAULT_SETTINGS.imageLoaderLimit,\n timeout: $.DEFAULT_SETTINGS.timeout,\n jobQueue: [],\n jobsInProgress: 0\n }, options);\n\n};\n\n/** @lends OpenSeadragon.ImageLoader.prototype */\n$.ImageLoader.prototype = {\n\n /**\n * Add an unloaded image to the loader queue.\n * @method\n * @param {Object} options - Options for this job.\n * @param {String} [options.src] - URL of image to download.\n * @param {String} [options.loadWithAjax] - Whether to load this image with AJAX.\n * @param {String} [options.ajaxHeaders] - Headers to add to the image request if using AJAX.\n * @param {String|Boolean} [options.crossOriginPolicy] - CORS policy to use for downloads\n * @param {Boolean} [options.ajaxWithCredentials] - Whether to set withCredentials on AJAX\n * requests.\n * @param {Function} [options.callback] - Called once image has been downloaded.\n * @param {Function} [options.abort] - Called when this image job is aborted.\n */\n addJob: function(options) {\n var _this = this,\n complete = function(job) {\n completeJob(_this, job, options.callback);\n },\n jobOptions = {\n src: options.src,\n loadWithAjax: options.loadWithAjax,\n ajaxHeaders: options.loadWithAjax ? options.ajaxHeaders : null,\n crossOriginPolicy: options.crossOriginPolicy,\n ajaxWithCredentials: options.ajaxWithCredentials,\n callback: complete,\n abort: options.abort,\n timeout: this.timeout\n },\n newJob = new ImageJob(jobOptions);\n\n if ( !this.jobLimit || this.jobsInProgress < this.jobLimit ) {\n newJob.start();\n this.jobsInProgress++;\n }\n else {\n this.jobQueue.push( newJob );\n }\n },\n\n /**\n * Clear any unstarted image loading jobs from the queue.\n * @method\n */\n clear: function() {\n for( var i = 0; i < this.jobQueue.length; i++ ) {\n var job = this.jobQueue[i];\n if ( typeof job.abort === \"function\" ) {\n job.abort();\n }\n }\n\n this.jobQueue = [];\n }\n};\n\n/**\n * Cleans up ImageJob once completed.\n * @method\n * @private\n * @param loader - ImageLoader used to start job.\n * @param job - The ImageJob that has completed.\n * @param callback - Called once cleanup is finished.\n */\nfunction completeJob(loader, job, callback) {\n var nextJob;\n\n loader.jobsInProgress--;\n\n if ((!loader.jobLimit || loader.jobsInProgress < loader.jobLimit) && loader.jobQueue.length > 0) {\n nextJob = loader.jobQueue.shift();\n nextJob.start();\n loader.jobsInProgress++;\n }\n\n callback(job.image, job.errorMsg, job.request);\n}\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - Tile\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class Tile\n * @memberof OpenSeadragon\n * @param {Number} level The zoom level this tile belongs to.\n * @param {Number} x The vector component 'x'.\n * @param {Number} y The vector component 'y'.\n * @param {OpenSeadragon.Rect} bounds Where this tile fits, in normalized\n * coordinates.\n * @param {Boolean} exists Is this tile a part of a sparse image? ( Also has\n * this tile failed to load? )\n * @param {String} url The URL of this tile's image.\n * @param {CanvasRenderingContext2D} context2D The context2D of this tile if it\n * is provided directly by the tile source.\n * @param {Boolean} loadWithAjax Whether this tile image should be loaded with an AJAX request .\n * @param {Object} ajaxHeaders The headers to send with this tile's AJAX request (if applicable).\n * @param {OpenSeadragon.Rect} sourceBounds The portion of the tile to use as the source of the\n * drawing operation, in pixels. Note that this only works when drawing with canvas; when drawing\n * with HTML the entire tile is always used.\n */\n$.Tile = function(level, x, y, bounds, exists, url, context2D, loadWithAjax, ajaxHeaders, sourceBounds) {\n /**\n * The zoom level this tile belongs to.\n * @member {Number} level\n * @memberof OpenSeadragon.Tile#\n */\n this.level = level;\n /**\n * The vector component 'x'.\n * @member {Number} x\n * @memberof OpenSeadragon.Tile#\n */\n this.x = x;\n /**\n * The vector component 'y'.\n * @member {Number} y\n * @memberof OpenSeadragon.Tile#\n */\n this.y = y;\n /**\n * Where this tile fits, in normalized coordinates\n * @member {OpenSeadragon.Rect} bounds\n * @memberof OpenSeadragon.Tile#\n */\n this.bounds = bounds;\n /**\n * The portion of the tile to use as the source of the drawing operation, in pixels. Note that\n * this only works when drawing with canvas; when drawing with HTML the entire tile is always used.\n * @member {OpenSeadragon.Rect} sourceBounds\n * @memberof OpenSeadragon.Tile#\n */\n this.sourceBounds = sourceBounds;\n /**\n * Is this tile a part of a sparse image? Also has this tile failed to load?\n * @member {Boolean} exists\n * @memberof OpenSeadragon.Tile#\n */\n this.exists = exists;\n /**\n * The URL of this tile's image.\n * @member {String} url\n * @memberof OpenSeadragon.Tile#\n */\n this.url = url;\n /**\n * The context2D of this tile if it is provided directly by the tile source.\n * @member {CanvasRenderingContext2D} context2D\n * @memberOf OpenSeadragon.Tile#\n */\n this.context2D = context2D;\n /**\n * Whether to load this tile's image with an AJAX request.\n * @member {Boolean} loadWithAjax\n * @memberof OpenSeadragon.Tile#\n */\n this.loadWithAjax = loadWithAjax;\n /**\n * The headers to be used in requesting this tile's image.\n * Only used if loadWithAjax is set to true.\n * @member {Object} ajaxHeaders\n * @memberof OpenSeadragon.Tile#\n */\n this.ajaxHeaders = ajaxHeaders;\n /**\n * The unique cache key for this tile.\n * @member {String} cacheKey\n * @memberof OpenSeadragon.Tile#\n */\n if (this.ajaxHeaders) {\n this.cacheKey = this.url + \"+\" + JSON.stringify(this.ajaxHeaders);\n } else {\n this.cacheKey = this.url;\n }\n /**\n * Is this tile loaded?\n * @member {Boolean} loaded\n * @memberof OpenSeadragon.Tile#\n */\n this.loaded = false;\n /**\n * Is this tile loading?\n * @member {Boolean} loading\n * @memberof OpenSeadragon.Tile#\n */\n this.loading = false;\n\n /**\n * The HTML div element for this tile\n * @member {Element} element\n * @memberof OpenSeadragon.Tile#\n */\n this.element = null;\n /**\n * The HTML img element for this tile.\n * @member {Element} imgElement\n * @memberof OpenSeadragon.Tile#\n */\n this.imgElement = null;\n /**\n * The Image object for this tile.\n * @member {Object} image\n * @memberof OpenSeadragon.Tile#\n */\n this.image = null;\n\n /**\n * The alias of this.element.style.\n * @member {String} style\n * @memberof OpenSeadragon.Tile#\n */\n this.style = null;\n /**\n * This tile's position on screen, in pixels.\n * @member {OpenSeadragon.Point} position\n * @memberof OpenSeadragon.Tile#\n */\n this.position = null;\n /**\n * This tile's size on screen, in pixels.\n * @member {OpenSeadragon.Point} size\n * @memberof OpenSeadragon.Tile#\n */\n this.size = null;\n /**\n * The start time of this tile's blending.\n * @member {Number} blendStart\n * @memberof OpenSeadragon.Tile#\n */\n this.blendStart = null;\n /**\n * The current opacity this tile should be.\n * @member {Number} opacity\n * @memberof OpenSeadragon.Tile#\n */\n this.opacity = null;\n /**\n * The squared distance of this tile to the viewport center.\n * Use for comparing tiles.\n * @private\n * @member {Number} squaredDistance\n * @memberof OpenSeadragon.Tile#\n */\n this.squaredDistance = null;\n /**\n * The visibility score of this tile.\n * @member {Number} visibility\n * @memberof OpenSeadragon.Tile#\n */\n this.visibility = null;\n\n /**\n * Whether this tile is currently being drawn.\n * @member {Boolean} beingDrawn\n * @memberof OpenSeadragon.Tile#\n */\n this.beingDrawn = false;\n\n /**\n * Timestamp the tile was last touched.\n * @member {Number} lastTouchTime\n * @memberof OpenSeadragon.Tile#\n */\n this.lastTouchTime = 0;\n\n /**\n * Whether this tile is in the right-most column for its level.\n * @member {Boolean} isRightMost\n * @memberof OpenSeadragon.Tile#\n */\n this.isRightMost = false;\n\n /**\n * Whether this tile is in the bottom-most row for its level.\n * @member {Boolean} isBottomMost\n * @memberof OpenSeadragon.Tile#\n */\n this.isBottomMost = false;\n};\n\n/** @lends OpenSeadragon.Tile.prototype */\n$.Tile.prototype = {\n\n /**\n * Provides a string representation of this tiles level and (x,y)\n * components.\n * @function\n * @returns {String}\n */\n toString: function() {\n return this.level + \"/\" + this.x + \"_\" + this.y;\n },\n\n // private\n _hasTransparencyChannel: function() {\n return !!this.context2D || this.url.match('.png');\n },\n\n /**\n * Renders the tile in an html container.\n * @function\n * @param {Element} container\n */\n drawHTML: function( container ) {\n if (!this.cacheImageRecord) {\n $.console.warn(\n '[Tile.drawHTML] attempting to draw tile %s when it\\'s not cached',\n this.toString());\n return;\n }\n\n if ( !this.loaded ) {\n $.console.warn(\n \"Attempting to draw tile %s when it's not yet loaded.\",\n this.toString()\n );\n return;\n }\n\n //EXPERIMENTAL - trying to figure out how to scale the container\n // content during animation of the container size.\n\n if ( !this.element ) {\n this.element = $.makeNeutralElement( \"div\" );\n this.imgElement = this.cacheImageRecord.getImage().cloneNode();\n this.imgElement.style.msInterpolationMode = \"nearest-neighbor\";\n this.imgElement.style.width = \"100%\";\n this.imgElement.style.height = \"100%\";\n\n this.style = this.element.style;\n this.style.position = \"absolute\";\n }\n if ( this.element.parentNode != container ) {\n container.appendChild( this.element );\n }\n if ( this.imgElement.parentNode != this.element ) {\n this.element.appendChild( this.imgElement );\n }\n\n this.style.top = this.position.y + \"px\";\n this.style.left = this.position.x + \"px\";\n this.style.height = this.size.y + \"px\";\n this.style.width = this.size.x + \"px\";\n\n $.setElementOpacity( this.element, this.opacity );\n },\n\n /**\n * Renders the tile in a canvas-based context.\n * @function\n * @param {Canvas} context\n * @param {Function} drawingHandler - Method for firing the drawing event.\n * drawingHandler({context, tile, rendered})\n * where rendered is the context with the pre-drawn image.\n * @param {Number} [scale=1] - Apply a scale to position and size\n * @param {OpenSeadragon.Point} [translate] - A translation vector\n */\n drawCanvas: function( context, drawingHandler, scale, translate ) {\n\n var position = this.position.times($.pixelDensityRatio),\n size = this.size.times($.pixelDensityRatio),\n rendered;\n\n if (!this.context2D && !this.cacheImageRecord) {\n $.console.warn(\n '[Tile.drawCanvas] attempting to draw tile %s when it\\'s not cached',\n this.toString());\n return;\n }\n\n rendered = this.context2D || this.cacheImageRecord.getRenderedContext();\n\n if ( !this.loaded || !rendered ){\n $.console.warn(\n \"Attempting to draw tile %s when it's not yet loaded.\",\n this.toString()\n );\n\n return;\n }\n\n context.save();\n\n context.globalAlpha = this.opacity;\n\n if (typeof scale === 'number' && scale !== 1) {\n // draw tile at a different scale\n position = position.times(scale);\n size = size.times(scale);\n }\n\n if (translate instanceof $.Point) {\n // shift tile position slightly\n position = position.plus(translate);\n }\n\n //if we are supposed to be rendering fully opaque rectangle,\n //ie its done fading or fading is turned off, and if we are drawing\n //an image with an alpha channel, then the only way\n //to avoid seeing the tile underneath is to clear the rectangle\n if (context.globalAlpha === 1 && this._hasTransparencyChannel()) {\n //clearing only the inside of the rectangle occupied\n //by the png prevents edge flikering\n context.clearRect(\n position.x,\n position.y,\n size.x,\n size.y\n );\n }\n\n // This gives the application a chance to make image manipulation\n // changes as we are rendering the image\n drawingHandler({context: context, tile: this, rendered: rendered});\n\n var sourceWidth, sourceHeight;\n if (this.sourceBounds) {\n sourceWidth = Math.min(this.sourceBounds.width, rendered.canvas.width);\n sourceHeight = Math.min(this.sourceBounds.height, rendered.canvas.height);\n } else {\n sourceWidth = rendered.canvas.width;\n sourceHeight = rendered.canvas.height;\n }\n\n context.drawImage(\n rendered.canvas,\n 0,\n 0,\n sourceWidth,\n sourceHeight,\n position.x,\n position.y,\n size.x,\n size.y\n );\n\n context.restore();\n },\n\n /**\n * Get the ratio between current and original size.\n * @function\n * @return {Float}\n */\n getScaleForEdgeSmoothing: function() {\n var context;\n if (this.cacheImageRecord) {\n context = this.cacheImageRecord.getRenderedContext();\n } else if (this.context2D) {\n context = this.context2D;\n } else {\n $.console.warn(\n '[Tile.drawCanvas] attempting to get tile scale %s when tile\\'s not cached',\n this.toString());\n return 1;\n }\n return context.canvas.width / (this.size.x * $.pixelDensityRatio);\n },\n\n /**\n * Get a translation vector that when applied to the tile position produces integer coordinates.\n * Needed to avoid swimming and twitching.\n * @function\n * @param {Number} [scale=1] - Scale to be applied to position.\n * @return {OpenSeadragon.Point}\n */\n getTranslationForEdgeSmoothing: function(scale, canvasSize, sketchCanvasSize) {\n // The translation vector must have positive values, otherwise the image goes a bit off\n // the sketch canvas to the top and left and we must use negative coordinates to repaint it\n // to the main canvas. In that case, some browsers throw:\n // INDEX_SIZE_ERR: DOM Exception 1: Index or size was negative, or greater than the allowed value.\n var x = Math.max(1, Math.ceil((sketchCanvasSize.x - canvasSize.x) / 2));\n var y = Math.max(1, Math.ceil((sketchCanvasSize.y - canvasSize.y) / 2));\n return new $.Point(x, y).minus(\n this.position\n .times($.pixelDensityRatio)\n .times(scale || 1)\n .apply(function(x) {\n return x % 1;\n })\n );\n },\n\n /**\n * Removes tile from its container.\n * @function\n */\n unload: function() {\n if ( this.imgElement && this.imgElement.parentNode ) {\n this.imgElement.parentNode.removeChild( this.imgElement );\n }\n if ( this.element && this.element.parentNode ) {\n this.element.parentNode.removeChild( this.element );\n }\n\n this.element = null;\n this.imgElement = null;\n this.loaded = false;\n this.loading = false;\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Overlay\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function($) {\n\n /**\n * An enumeration of positions that an overlay may be assigned relative to\n * the viewport.\n * It is identical to OpenSeadragon.Placement but is kept for backward\n * compatibility.\n * @member OverlayPlacement\n * @memberof OpenSeadragon\n * @see OpenSeadragon.Placement\n * @static\n * @readonly\n * @type {Object}\n * @property {Number} CENTER\n * @property {Number} TOP_LEFT\n * @property {Number} TOP\n * @property {Number} TOP_RIGHT\n * @property {Number} RIGHT\n * @property {Number} BOTTOM_RIGHT\n * @property {Number} BOTTOM\n * @property {Number} BOTTOM_LEFT\n * @property {Number} LEFT\n */\n $.OverlayPlacement = $.Placement;\n\n /**\n * An enumeration of possible ways to handle overlays rotation\n * @member OverlayRotationMode\n * @memberOf OpenSeadragon\n * @static\n * @readonly\n * @property {Number} NO_ROTATION The overlay ignore the viewport rotation.\n * @property {Number} EXACT The overlay use CSS 3 transforms to rotate with\n * the viewport. If the overlay contains text, it will get rotated as well.\n * @property {Number} BOUNDING_BOX The overlay adjusts for rotation by\n * taking the size of the bounding box of the rotated bounds.\n * Only valid for overlays with Rect location and scalable in both directions.\n */\n $.OverlayRotationMode = $.freezeObject({\n NO_ROTATION: 1,\n EXACT: 2,\n BOUNDING_BOX: 3\n });\n\n /**\n * @class Overlay\n * @classdesc Provides a way to float an HTML element on top of the viewer element.\n *\n * @memberof OpenSeadragon\n * @param {Object} options\n * @param {Element} options.element\n * @param {OpenSeadragon.Point|OpenSeadragon.Rect} options.location - The\n * location of the overlay on the image. If a {@link OpenSeadragon.Point}\n * is specified, the overlay will be located at this location with respect\n * to the placement option. If a {@link OpenSeadragon.Rect} is specified,\n * the overlay will be placed at this location with the corresponding width\n * and height and placement TOP_LEFT.\n * @param {OpenSeadragon.Placement} [options.placement=OpenSeadragon.Placement.TOP_LEFT]\n * Defines what part of the overlay should be at the specified options.location\n * @param {OpenSeadragon.Overlay.OnDrawCallback} [options.onDraw]\n * @param {Boolean} [options.checkResize=true] Set to false to avoid to\n * check the size of the overlay every time it is drawn in the directions\n * which are not scaled. It will improve performances but will cause a\n * misalignment if the overlay size changes.\n * @param {Number} [options.width] The width of the overlay in viewport\n * coordinates. If specified, the width of the overlay will be adjusted when\n * the zoom changes.\n * @param {Number} [options.height] The height of the overlay in viewport\n * coordinates. If specified, the height of the overlay will be adjusted when\n * the zoom changes.\n * @param {Boolean} [options.rotationMode=OpenSeadragon.OverlayRotationMode.EXACT]\n * How to handle the rotation of the viewport.\n */\n $.Overlay = function(element, location, placement) {\n\n /**\n * onDraw callback signature used by {@link OpenSeadragon.Overlay}.\n *\n * @callback OnDrawCallback\n * @memberof OpenSeadragon.Overlay\n * @param {OpenSeadragon.Point} position\n * @param {OpenSeadragon.Point} size\n * @param {Element} element\n */\n\n var options;\n if ($.isPlainObject(element)) {\n options = element;\n } else {\n options = {\n element: element,\n location: location,\n placement: placement\n };\n }\n\n this.element = options.element;\n this.style = options.element.style;\n this._init(options);\n };\n\n /** @lends OpenSeadragon.Overlay.prototype */\n $.Overlay.prototype = {\n\n // private\n _init: function(options) {\n this.location = options.location;\n this.placement = options.placement === undefined ?\n $.Placement.TOP_LEFT : options.placement;\n this.onDraw = options.onDraw;\n this.checkResize = options.checkResize === undefined ?\n true : options.checkResize;\n\n // When this.width is not null, the overlay get scaled horizontally\n this.width = options.width === undefined ? null : options.width;\n\n // When this.height is not null, the overlay get scaled vertically\n this.height = options.height === undefined ? null : options.height;\n\n this.rotationMode = options.rotationMode || $.OverlayRotationMode.EXACT;\n\n // Having a rect as location is a syntactic sugar\n if (this.location instanceof $.Rect) {\n this.width = this.location.width;\n this.height = this.location.height;\n this.location = this.location.getTopLeft();\n this.placement = $.Placement.TOP_LEFT;\n }\n\n // Deprecated properties kept for backward compatibility.\n this.scales = this.width !== null && this.height !== null;\n this.bounds = new $.Rect(\n this.location.x, this.location.y, this.width, this.height);\n this.position = this.location;\n },\n\n /**\n * Internal function to adjust the position of an overlay\n * depending on it size and placement.\n * @function\n * @param {OpenSeadragon.Point} position\n * @param {OpenSeadragon.Point} size\n */\n adjust: function(position, size) {\n var properties = $.Placement.properties[this.placement];\n if (!properties) {\n return;\n }\n if (properties.isHorizontallyCentered) {\n position.x -= size.x / 2;\n } else if (properties.isRight) {\n position.x -= size.x;\n }\n if (properties.isVerticallyCentered) {\n position.y -= size.y / 2;\n } else if (properties.isBottom) {\n position.y -= size.y;\n }\n },\n\n /**\n * @function\n */\n destroy: function() {\n var element = this.element;\n var style = this.style;\n\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n //this should allow us to preserve overlays when required between\n //pages\n if (element.prevElementParent) {\n style.display = 'none';\n //element.prevElementParent.insertBefore(\n // element,\n // element.prevNextSibling\n //);\n document.body.appendChild(element);\n }\n }\n\n // clear the onDraw callback\n this.onDraw = null;\n\n style.top = \"\";\n style.left = \"\";\n style.position = \"\";\n\n if (this.width !== null) {\n style.width = \"\";\n }\n if (this.height !== null) {\n style.height = \"\";\n }\n var transformOriginProp = $.getCssPropertyWithVendorPrefix(\n 'transformOrigin');\n var transformProp = $.getCssPropertyWithVendorPrefix(\n 'transform');\n if (transformOriginProp && transformProp) {\n style[transformOriginProp] = \"\";\n style[transformProp] = \"\";\n }\n },\n\n /**\n * @function\n * @param {Element} container\n */\n drawHTML: function(container, viewport) {\n var element = this.element;\n if (element.parentNode !== container) {\n //save the source parent for later if we need it\n element.prevElementParent = element.parentNode;\n element.prevNextSibling = element.nextSibling;\n container.appendChild(element);\n\n // have to set position before calculating size, fix #1116\n this.style.position = \"absolute\";\n // this.size is used by overlays which don't get scaled in at\n // least one direction when this.checkResize is set to false.\n this.size = $.getElementSize(element);\n }\n\n var positionAndSize = this._getOverlayPositionAndSize(viewport);\n\n var position = positionAndSize.position;\n var size = this.size = positionAndSize.size;\n var rotate = positionAndSize.rotate;\n\n // call the onDraw callback if it exists to allow one to overwrite\n // the drawing/positioning/sizing of the overlay\n if (this.onDraw) {\n this.onDraw(position, size, this.element);\n } else {\n var style = this.style;\n style.left = position.x + \"px\";\n style.top = position.y + \"px\";\n if (this.width !== null) {\n style.width = size.x + \"px\";\n }\n if (this.height !== null) {\n style.height = size.y + \"px\";\n }\n var transformOriginProp = $.getCssPropertyWithVendorPrefix(\n 'transformOrigin');\n var transformProp = $.getCssPropertyWithVendorPrefix(\n 'transform');\n if (transformOriginProp && transformProp) {\n if (rotate) {\n style[transformOriginProp] = this._getTransformOrigin();\n style[transformProp] = \"rotate(\" + rotate + \"deg)\";\n } else {\n style[transformOriginProp] = \"\";\n style[transformProp] = \"\";\n }\n }\n\n if (style.display !== 'none') {\n style.display = 'block';\n }\n }\n },\n\n // private\n _getOverlayPositionAndSize: function(viewport) {\n var position = viewport.pixelFromPoint(this.location, true);\n var size = this._getSizeInPixels(viewport);\n this.adjust(position, size);\n\n var rotate = 0;\n if (viewport.degrees &&\n this.rotationMode !== $.OverlayRotationMode.NO_ROTATION) {\n // BOUNDING_BOX is only valid if both directions get scaled.\n // Get replaced by EXACT otherwise.\n if (this.rotationMode === $.OverlayRotationMode.BOUNDING_BOX &&\n this.width !== null && this.height !== null) {\n var rect = new $.Rect(position.x, position.y, size.x, size.y);\n var boundingBox = this._getBoundingBox(rect, viewport.degrees);\n position = boundingBox.getTopLeft();\n size = boundingBox.getSize();\n } else {\n rotate = viewport.degrees;\n }\n }\n\n return {\n position: position,\n size: size,\n rotate: rotate\n };\n },\n\n // private\n _getSizeInPixels: function(viewport) {\n var width = this.size.x;\n var height = this.size.y;\n if (this.width !== null || this.height !== null) {\n var scaledSize = viewport.deltaPixelsFromPointsNoRotate(\n new $.Point(this.width || 0, this.height || 0), true);\n if (this.width !== null) {\n width = scaledSize.x;\n }\n if (this.height !== null) {\n height = scaledSize.y;\n }\n }\n if (this.checkResize &&\n (this.width === null || this.height === null)) {\n var eltSize = this.size = $.getElementSize(this.element);\n if (this.width === null) {\n width = eltSize.x;\n }\n if (this.height === null) {\n height = eltSize.y;\n }\n }\n return new $.Point(width, height);\n },\n\n // private\n _getBoundingBox: function(rect, degrees) {\n var refPoint = this._getPlacementPoint(rect);\n return rect.rotate(degrees, refPoint).getBoundingBox();\n },\n\n // private\n _getPlacementPoint: function(rect) {\n var result = new $.Point(rect.x, rect.y);\n var properties = $.Placement.properties[this.placement];\n if (properties) {\n if (properties.isHorizontallyCentered) {\n result.x += rect.width / 2;\n } else if (properties.isRight) {\n result.x += rect.width;\n }\n if (properties.isVerticallyCentered) {\n result.y += rect.height / 2;\n } else if (properties.isBottom) {\n result.y += rect.height;\n }\n }\n return result;\n },\n\n // private\n _getTransformOrigin: function() {\n var result = \"\";\n var properties = $.Placement.properties[this.placement];\n if (!properties) {\n return result;\n }\n if (properties.isLeft) {\n result = \"left\";\n } else if (properties.isRight) {\n result = \"right\";\n }\n if (properties.isTop) {\n result += \" top\";\n } else if (properties.isBottom) {\n result += \" bottom\";\n }\n return result;\n },\n\n /**\n * Changes the overlay settings.\n * @function\n * @param {OpenSeadragon.Point|OpenSeadragon.Rect|Object} location\n * If an object is specified, the options are the same than the constructor\n * except for the element which can not be changed.\n * @param {OpenSeadragon.Placement} placement\n */\n update: function(location, placement) {\n var options = $.isPlainObject(location) ? location : {\n location: location,\n placement: placement\n };\n this._init({\n location: options.location || this.location,\n placement: options.placement !== undefined ?\n options.placement : this.placement,\n onDraw: options.onDraw || this.onDraw,\n checkResize: options.checkResize || this.checkResize,\n width: options.width !== undefined ? options.width : this.width,\n height: options.height !== undefined ? options.height : this.height,\n rotationMode: options.rotationMode || this.rotationMode\n });\n },\n\n /**\n * Returns the current bounds of the overlay in viewport coordinates\n * @function\n * @param {OpenSeadragon.Viewport} viewport the viewport\n * @returns {OpenSeadragon.Rect} overlay bounds\n */\n getBounds: function(viewport) {\n $.console.assert(viewport,\n 'A viewport must now be passed to Overlay.getBounds.');\n var width = this.width;\n var height = this.height;\n if (width === null || height === null) {\n var size = viewport.deltaPointsFromPixelsNoRotate(this.size, true);\n if (width === null) {\n width = size.x;\n }\n if (height === null) {\n height = size.y;\n }\n }\n var location = this.location.clone();\n this.adjust(location, new $.Point(width, height));\n return this._adjustBoundsForRotation(\n viewport, new $.Rect(location.x, location.y, width, height));\n },\n\n // private\n _adjustBoundsForRotation: function(viewport, bounds) {\n if (!viewport ||\n viewport.degrees === 0 ||\n this.rotationMode === $.OverlayRotationMode.EXACT) {\n return bounds;\n }\n if (this.rotationMode === $.OverlayRotationMode.BOUNDING_BOX) {\n // If overlay not fully scalable, BOUNDING_BOX falls back to EXACT\n if (this.width === null || this.height === null) {\n return bounds;\n }\n // It is easier to just compute the position and size and\n // convert to viewport coordinates.\n var positionAndSize = this._getOverlayPositionAndSize(viewport);\n return viewport.viewerElementToViewportRectangle(new $.Rect(\n positionAndSize.position.x,\n positionAndSize.position.y,\n positionAndSize.size.x,\n positionAndSize.size.y));\n }\n\n // NO_ROTATION case\n return bounds.rotate(-viewport.degrees,\n this._getPlacementPoint(bounds));\n }\n };\n\n}(OpenSeadragon));\n\n/*\n * OpenSeadragon - Drawer\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class Drawer\n * @memberof OpenSeadragon\n * @classdesc Handles rendering of tiles for an {@link OpenSeadragon.Viewer}.\n * @param {Object} options - Options for this Drawer.\n * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this Drawer.\n * @param {OpenSeadragon.Viewport} options.viewport - Reference to Viewer viewport.\n * @param {Element} options.element - Parent element.\n * @param {Number} [options.debugGridColor] - See debugGridColor in {@link OpenSeadragon.Options} for details.\n */\n$.Drawer = function( options ) {\n\n $.console.assert( options.viewer, \"[Drawer] options.viewer is required\" );\n\n //backward compatibility for positional args while preferring more\n //idiomatic javascript options object as the only argument\n var args = arguments;\n\n if( !$.isPlainObject( options ) ){\n options = {\n source: args[ 0 ], // Reference to Viewer tile source.\n viewport: args[ 1 ], // Reference to Viewer viewport.\n element: args[ 2 ] // Parent element.\n };\n }\n\n $.console.assert( options.viewport, \"[Drawer] options.viewport is required\" );\n $.console.assert( options.element, \"[Drawer] options.element is required\" );\n\n if ( options.source ) {\n $.console.error( \"[Drawer] options.source is no longer accepted; use TiledImage instead\" );\n }\n\n this.viewer = options.viewer;\n this.viewport = options.viewport;\n this.debugGridColor = typeof options.debugGridColor === 'string' ? [options.debugGridColor] : options.debugGridColor || $.DEFAULT_SETTINGS.debugGridColor;\n if (options.opacity) {\n $.console.error( \"[Drawer] options.opacity is no longer accepted; set the opacity on the TiledImage instead\" );\n }\n\n this.useCanvas = $.supportsCanvas && ( this.viewer ? this.viewer.useCanvas : true );\n /**\n * The parent element of this Drawer instance, passed in when the Drawer was created.\n * The parent of {@link OpenSeadragon.Drawer#canvas}.\n * @member {Element} container\n * @memberof OpenSeadragon.Drawer#\n */\n this.container = $.getElement( options.element );\n /**\n * A <canvas> element if the browser supports them, otherwise a <div> element.\n * Child element of {@link OpenSeadragon.Drawer#container}.\n * @member {Element} canvas\n * @memberof OpenSeadragon.Drawer#\n */\n this.canvas = $.makeNeutralElement( this.useCanvas ? \"canvas\" : \"div\" );\n /**\n * 2d drawing context for {@link OpenSeadragon.Drawer#canvas} if it's a <canvas> element, otherwise null.\n * @member {Object} context\n * @memberof OpenSeadragon.Drawer#\n */\n this.context = this.useCanvas ? this.canvas.getContext( \"2d\" ) : null;\n\n /**\n * Sketch canvas used to temporarily draw tiles which cannot be drawn directly\n * to the main canvas due to opacity. Lazily initialized.\n */\n this.sketchCanvas = null;\n this.sketchContext = null;\n\n /**\n * @member {Element} element\n * @memberof OpenSeadragon.Drawer#\n * @deprecated Alias for {@link OpenSeadragon.Drawer#container}.\n */\n this.element = this.container;\n\n // We force our container to ltr because our drawing math doesn't work in rtl.\n // This issue only affects our canvas renderer, but we do it always for consistency.\n // Note that this means overlays you want to be rtl need to be explicitly set to rtl.\n this.container.dir = 'ltr';\n\n // check canvas available width and height, set canvas width and height such that the canvas backing store is set to the proper pixel density\n if (this.useCanvas) {\n var viewportSize = this._calculateCanvasSize();\n this.canvas.width = viewportSize.x;\n this.canvas.height = viewportSize.y;\n }\n\n this.canvas.style.width = \"100%\";\n this.canvas.style.height = \"100%\";\n this.canvas.style.position = \"absolute\";\n $.setElementOpacity( this.canvas, this.opacity, true );\n\n // explicit left-align\n this.container.style.textAlign = \"left\";\n this.container.appendChild( this.canvas );\n\n // Image smoothing for canvas rendering (only if canvas is used).\n // Canvas default is \"true\", so this will only be changed if user specified \"false\".\n this._imageSmoothingEnabled = true;\n};\n\n/** @lends OpenSeadragon.Drawer.prototype */\n$.Drawer.prototype = {\n // deprecated\n addOverlay: function( element, location, placement, onDraw ) {\n $.console.error(\"drawer.addOverlay is deprecated. Use viewer.addOverlay instead.\");\n this.viewer.addOverlay( element, location, placement, onDraw );\n return this;\n },\n\n // deprecated\n updateOverlay: function( element, location, placement ) {\n $.console.error(\"drawer.updateOverlay is deprecated. Use viewer.updateOverlay instead.\");\n this.viewer.updateOverlay( element, location, placement );\n return this;\n },\n\n // deprecated\n removeOverlay: function( element ) {\n $.console.error(\"drawer.removeOverlay is deprecated. Use viewer.removeOverlay instead.\");\n this.viewer.removeOverlay( element );\n return this;\n },\n\n // deprecated\n clearOverlays: function() {\n $.console.error(\"drawer.clearOverlays is deprecated. Use viewer.clearOverlays instead.\");\n this.viewer.clearOverlays();\n return this;\n },\n\n /**\n * This function converts the given point from to the drawer coordinate by\n * multiplying it with the pixel density.\n * This function does not take rotation into account, thus assuming provided\n * point is at 0 degree.\n * @param {OpenSeadragon.Point} point - the pixel point to convert\n */\n viewportCoordToDrawerCoord: function(point) {\n var vpPoint = this.viewport.pixelFromPointNoRotate(point, true);\n return new $.Point(\n vpPoint.x * $.pixelDensityRatio,\n vpPoint.y * $.pixelDensityRatio\n );\n },\n\n /**\n * This function will create multiple polygon paths on the drawing context by provided polygons,\n * then clip the context to the paths.\n * @param {(OpenSeadragon.Point[])[]} polygons - an array of polygons. A polygon is an array of OpenSeadragon.Point\n * @param {Boolean} useSketch - Whether to use the sketch canvas or not.\n */\n clipWithPolygons: function (polygons, useSketch) {\n if (!this.useCanvas) {\n return;\n }\n var context = this._getContext(useSketch);\n context.beginPath();\n polygons.forEach(function (polygon) {\n polygon.forEach(function (coord, i) {\n context[i === 0 ? 'moveTo' : 'lineTo'](coord.x, coord.y);\n });\n });\n context.clip();\n },\n\n /**\n * Set the opacity of the drawer.\n * @param {Number} opacity\n * @return {OpenSeadragon.Drawer} Chainable.\n */\n setOpacity: function( opacity ) {\n $.console.error(\"drawer.setOpacity is deprecated. Use tiledImage.setOpacity instead.\");\n var world = this.viewer.world;\n for (var i = 0; i < world.getItemCount(); i++) {\n world.getItemAt( i ).setOpacity( opacity );\n }\n return this;\n },\n\n /**\n * Get the opacity of the drawer.\n * @returns {Number}\n */\n getOpacity: function() {\n $.console.error(\"drawer.getOpacity is deprecated. Use tiledImage.getOpacity instead.\");\n var world = this.viewer.world;\n var maxOpacity = 0;\n for (var i = 0; i < world.getItemCount(); i++) {\n var opacity = world.getItemAt( i ).getOpacity();\n if ( opacity > maxOpacity ) {\n maxOpacity = opacity;\n }\n }\n return maxOpacity;\n },\n\n // deprecated\n needsUpdate: function() {\n $.console.error( \"[Drawer.needsUpdate] this function is deprecated. Use World.needsDraw instead.\" );\n return this.viewer.world.needsDraw();\n },\n\n // deprecated\n numTilesLoaded: function() {\n $.console.error( \"[Drawer.numTilesLoaded] this function is deprecated. Use TileCache.numTilesLoaded instead.\" );\n return this.viewer.tileCache.numTilesLoaded();\n },\n\n // deprecated\n reset: function() {\n $.console.error( \"[Drawer.reset] this function is deprecated. Use World.resetItems instead.\" );\n this.viewer.world.resetItems();\n return this;\n },\n\n // deprecated\n update: function() {\n $.console.error( \"[Drawer.update] this function is deprecated. Use Drawer.clear and World.draw instead.\" );\n this.clear();\n this.viewer.world.draw();\n return this;\n },\n\n /**\n * @return {Boolean} True if rotation is supported.\n */\n canRotate: function() {\n return this.useCanvas;\n },\n\n /**\n * Destroy the drawer (unload current loaded tiles)\n */\n destroy: function() {\n //force unloading of current canvas (1x1 will be gc later, trick not necessarily needed)\n this.canvas.width = 1;\n this.canvas.height = 1;\n this.sketchCanvas = null;\n this.sketchContext = null;\n },\n\n /**\n * Clears the Drawer so it's ready to draw another frame.\n */\n clear: function() {\n this.canvas.innerHTML = \"\";\n if ( this.useCanvas ) {\n var viewportSize = this._calculateCanvasSize();\n if( this.canvas.width != viewportSize.x ||\n this.canvas.height != viewportSize.y ) {\n this.canvas.width = viewportSize.x;\n this.canvas.height = viewportSize.y;\n this._updateImageSmoothingEnabled(this.context);\n if ( this.sketchCanvas !== null ) {\n var sketchCanvasSize = this._calculateSketchCanvasSize();\n this.sketchCanvas.width = sketchCanvasSize.x;\n this.sketchCanvas.height = sketchCanvasSize.y;\n this._updateImageSmoothingEnabled(this.sketchContext);\n }\n }\n this._clear();\n }\n },\n\n _clear: function (useSketch, bounds) {\n if (!this.useCanvas) {\n return;\n }\n var context = this._getContext(useSketch);\n if (bounds) {\n context.clearRect(bounds.x, bounds.y, bounds.width, bounds.height);\n } else {\n var canvas = context.canvas;\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n },\n\n /**\n * Scale from OpenSeadragon viewer rectangle to drawer rectangle\n * (ignoring rotation)\n * @param {OpenSeadragon.Rect} rectangle - The rectangle in viewport coordinate system.\n * @return {OpenSeadragon.Rect} Rectangle in drawer coordinate system.\n */\n viewportToDrawerRectangle: function(rectangle) {\n var topLeft = this.viewport.pixelFromPointNoRotate(rectangle.getTopLeft(), true);\n var size = this.viewport.deltaPixelsFromPointsNoRotate(rectangle.getSize(), true);\n\n return new $.Rect(\n topLeft.x * $.pixelDensityRatio,\n topLeft.y * $.pixelDensityRatio,\n size.x * $.pixelDensityRatio,\n size.y * $.pixelDensityRatio\n );\n },\n\n /**\n * Draws the given tile.\n * @param {OpenSeadragon.Tile} tile - The tile to draw.\n * @param {Function} drawingHandler - Method for firing the drawing event if using canvas.\n * drawingHandler({context, tile, rendered})\n * @param {Boolean} useSketch - Whether to use the sketch canvas or not.\n * where rendered is the context with the pre-drawn image.\n * @param {Float} [scale=1] - Apply a scale to tile position and size. Defaults to 1.\n * @param {OpenSeadragon.Point} [translate] A translation vector to offset tile position\n */\n drawTile: function(tile, drawingHandler, useSketch, scale, translate) {\n $.console.assert(tile, '[Drawer.drawTile] tile is required');\n $.console.assert(drawingHandler, '[Drawer.drawTile] drawingHandler is required');\n\n if (this.useCanvas) {\n var context = this._getContext(useSketch);\n scale = scale || 1;\n tile.drawCanvas(context, drawingHandler, scale, translate);\n } else {\n tile.drawHTML( this.canvas );\n }\n },\n\n _getContext: function( useSketch ) {\n var context = this.context;\n if ( useSketch ) {\n if (this.sketchCanvas === null) {\n this.sketchCanvas = document.createElement( \"canvas\" );\n var sketchCanvasSize = this._calculateSketchCanvasSize();\n this.sketchCanvas.width = sketchCanvasSize.x;\n this.sketchCanvas.height = sketchCanvasSize.y;\n this.sketchContext = this.sketchCanvas.getContext( \"2d\" );\n\n // If the viewport is not currently rotated, the sketchCanvas\n // will have the same size as the main canvas. However, if\n // the viewport get rotated later on, we will need to resize it.\n if (this.viewport.getRotation() === 0) {\n var self = this;\n this.viewer.addHandler('rotate', function resizeSketchCanvas() {\n if (self.viewport.getRotation() === 0) {\n return;\n }\n self.viewer.removeHandler('rotate', resizeSketchCanvas);\n var sketchCanvasSize = self._calculateSketchCanvasSize();\n self.sketchCanvas.width = sketchCanvasSize.x;\n self.sketchCanvas.height = sketchCanvasSize.y;\n });\n }\n this._updateImageSmoothingEnabled(this.sketchContext);\n }\n context = this.sketchContext;\n }\n return context;\n },\n\n // private\n saveContext: function( useSketch ) {\n if (!this.useCanvas) {\n return;\n }\n\n this._getContext( useSketch ).save();\n },\n\n // private\n restoreContext: function( useSketch ) {\n if (!this.useCanvas) {\n return;\n }\n\n this._getContext( useSketch ).restore();\n },\n\n // private\n setClip: function(rect, useSketch) {\n if (!this.useCanvas) {\n return;\n }\n\n var context = this._getContext( useSketch );\n context.beginPath();\n context.rect(rect.x, rect.y, rect.width, rect.height);\n context.clip();\n },\n\n // private\n drawRectangle: function(rect, fillStyle, useSketch) {\n if (!this.useCanvas) {\n return;\n }\n\n var context = this._getContext( useSketch );\n context.save();\n context.fillStyle = fillStyle;\n context.fillRect(rect.x, rect.y, rect.width, rect.height);\n context.restore();\n },\n\n /**\n * Blends the sketch canvas in the main canvas.\n * @param {Object} options The options\n * @param {Float} options.opacity The opacity of the blending.\n * @param {Float} [options.scale=1] The scale at which tiles were drawn on\n * the sketch. Default is 1.\n * Use scale to draw at a lower scale and then enlarge onto the main canvas.\n * @param {OpenSeadragon.Point} [options.translate] A translation vector\n * that was used to draw the tiles\n * @param {String} [options.compositeOperation] - How the image is\n * composited onto other images; see compositeOperation in\n * {@link OpenSeadragon.Options} for possible values.\n * @param {OpenSeadragon.Rect} [options.bounds] The part of the sketch\n * canvas to blend in the main canvas. If specified, options.scale and\n * options.translate get ignored.\n */\n blendSketch: function(opacity, scale, translate, compositeOperation) {\n var options = opacity;\n if (!$.isPlainObject(options)) {\n options = {\n opacity: opacity,\n scale: scale,\n translate: translate,\n compositeOperation: compositeOperation\n };\n }\n if (!this.useCanvas || !this.sketchCanvas) {\n return;\n }\n opacity = options.opacity;\n compositeOperation = options.compositeOperation;\n var bounds = options.bounds;\n\n this.context.save();\n this.context.globalAlpha = opacity;\n if (compositeOperation) {\n this.context.globalCompositeOperation = compositeOperation;\n }\n if (bounds) {\n // Internet Explorer, Microsoft Edge, and Safari have problems\n // when you call context.drawImage with negative x or y\n // or x + width or y + height greater than the canvas width or height respectively.\n if (bounds.x < 0) {\n bounds.width += bounds.x;\n bounds.x = 0;\n }\n if (bounds.x + bounds.width > this.canvas.width) {\n bounds.width = this.canvas.width - bounds.x;\n }\n if (bounds.y < 0) {\n bounds.height += bounds.y;\n bounds.y = 0;\n }\n if (bounds.y + bounds.height > this.canvas.height) {\n bounds.height = this.canvas.height - bounds.y;\n }\n\n this.context.drawImage(\n this.sketchCanvas,\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height,\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height\n );\n } else {\n scale = options.scale || 1;\n translate = options.translate;\n var position = translate instanceof $.Point ?\n translate : new $.Point(0, 0);\n\n var widthExt = 0;\n var heightExt = 0;\n if (translate) {\n var widthDiff = this.sketchCanvas.width - this.canvas.width;\n var heightDiff = this.sketchCanvas.height - this.canvas.height;\n widthExt = Math.round(widthDiff / 2);\n heightExt = Math.round(heightDiff / 2);\n }\n this.context.drawImage(\n this.sketchCanvas,\n position.x - widthExt * scale,\n position.y - heightExt * scale,\n (this.canvas.width + 2 * widthExt) * scale,\n (this.canvas.height + 2 * heightExt) * scale,\n -widthExt,\n -heightExt,\n this.canvas.width + 2 * widthExt,\n this.canvas.height + 2 * heightExt\n );\n }\n this.context.restore();\n },\n\n // private\n drawDebugInfo: function(tile, count, i, tiledImage) {\n if ( !this.useCanvas ) {\n return;\n }\n\n var colorIndex = this.viewer.world.getIndexOfItem(tiledImage) % this.debugGridColor.length;\n var context = this.context;\n context.save();\n context.lineWidth = 2 * $.pixelDensityRatio;\n context.font = 'small-caps bold ' + (13 * $.pixelDensityRatio) + 'px arial';\n context.strokeStyle = this.debugGridColor[colorIndex];\n context.fillStyle = this.debugGridColor[colorIndex];\n\n if ( this.viewport.degrees !== 0 ) {\n this._offsetForRotation({degrees: this.viewport.degrees});\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n this._offsetForRotation({\n degrees: tiledImage.getRotation(true),\n point: tiledImage.viewport.pixelFromPointNoRotate(\n tiledImage._getRotationPoint(true), true)\n });\n }\n if (tiledImage.viewport.degrees === 0 && tiledImage.getRotation(true) % 360 === 0){\n if(tiledImage._drawer.viewer.viewport.getFlip()) {\n tiledImage._drawer._flip();\n }\n }\n\n context.strokeRect(\n tile.position.x * $.pixelDensityRatio,\n tile.position.y * $.pixelDensityRatio,\n tile.size.x * $.pixelDensityRatio,\n tile.size.y * $.pixelDensityRatio\n );\n\n var tileCenterX = (tile.position.x + (tile.size.x / 2)) * $.pixelDensityRatio;\n var tileCenterY = (tile.position.y + (tile.size.y / 2)) * $.pixelDensityRatio;\n\n // Rotate the text the right way around.\n context.translate( tileCenterX, tileCenterY );\n context.rotate( Math.PI / 180 * -this.viewport.degrees );\n context.translate( -tileCenterX, -tileCenterY );\n\n if( tile.x === 0 && tile.y === 0 ){\n context.fillText(\n \"Zoom: \" + this.viewport.getZoom(),\n tile.position.x * $.pixelDensityRatio,\n (tile.position.y - 30) * $.pixelDensityRatio\n );\n context.fillText(\n \"Pan: \" + this.viewport.getBounds().toString(),\n tile.position.x * $.pixelDensityRatio,\n (tile.position.y - 20) * $.pixelDensityRatio\n );\n }\n context.fillText(\n \"Level: \" + tile.level,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 20) * $.pixelDensityRatio\n );\n context.fillText(\n \"Column: \" + tile.x,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 30) * $.pixelDensityRatio\n );\n context.fillText(\n \"Row: \" + tile.y,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 40) * $.pixelDensityRatio\n );\n context.fillText(\n \"Order: \" + i + \" of \" + count,\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 50) * $.pixelDensityRatio\n );\n context.fillText(\n \"Size: \" + tile.size.toString(),\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 60) * $.pixelDensityRatio\n );\n context.fillText(\n \"Position: \" + tile.position.toString(),\n (tile.position.x + 10) * $.pixelDensityRatio,\n (tile.position.y + 70) * $.pixelDensityRatio\n );\n\n if ( this.viewport.degrees !== 0 ) {\n this._restoreRotationChanges();\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n this._restoreRotationChanges();\n }\n\n if (tiledImage.viewport.degrees === 0 && tiledImage.getRotation(true) % 360 === 0){\n if(tiledImage._drawer.viewer.viewport.getFlip()) {\n tiledImage._drawer._flip();\n }\n }\n\n context.restore();\n },\n\n // private\n debugRect: function(rect) {\n if ( this.useCanvas ) {\n var context = this.context;\n context.save();\n context.lineWidth = 2 * $.pixelDensityRatio;\n context.strokeStyle = this.debugGridColor[0];\n context.fillStyle = this.debugGridColor[0];\n\n context.strokeRect(\n rect.x * $.pixelDensityRatio,\n rect.y * $.pixelDensityRatio,\n rect.width * $.pixelDensityRatio,\n rect.height * $.pixelDensityRatio\n );\n\n context.restore();\n }\n },\n\n /**\n * Turns image smoothing on or off for this viewer. Note: Ignored in some (especially older) browsers that do not support this property.\n *\n * @function\n * @param {Boolean} [imageSmoothingEnabled] - Whether or not the image is\n * drawn smoothly on the canvas; see imageSmoothingEnabled in\n * {@link OpenSeadragon.Options} for more explanation.\n */\n setImageSmoothingEnabled: function(imageSmoothingEnabled){\n if ( this.useCanvas ) {\n this._imageSmoothingEnabled = imageSmoothingEnabled;\n this._updateImageSmoothingEnabled(this.context);\n this.viewer.forceRedraw();\n }\n },\n\n // private\n _updateImageSmoothingEnabled: function(context){\n context.msImageSmoothingEnabled = this._imageSmoothingEnabled;\n context.imageSmoothingEnabled = this._imageSmoothingEnabled;\n },\n\n /**\n * Get the canvas size\n * @param {Boolean} sketch If set to true return the size of the sketch canvas\n * @returns {OpenSeadragon.Point} The size of the canvas\n */\n getCanvasSize: function(sketch) {\n var canvas = this._getContext(sketch).canvas;\n return new $.Point(canvas.width, canvas.height);\n },\n\n getCanvasCenter: function() {\n return new $.Point(this.canvas.width / 2, this.canvas.height / 2);\n },\n\n // private\n _offsetForRotation: function(options) {\n var point = options.point ?\n options.point.times($.pixelDensityRatio) :\n this.getCanvasCenter();\n\n var context = this._getContext(options.useSketch);\n context.save();\n\n context.translate(point.x, point.y);\n if(this.viewer.viewport.flipped){\n context.rotate(Math.PI / 180 * -options.degrees);\n context.scale(-1, 1);\n } else{\n context.rotate(Math.PI / 180 * options.degrees);\n }\n context.translate(-point.x, -point.y);\n },\n\n // private\n _flip: function(options) {\n options = options || {};\n var point = options.point ?\n options.point.times($.pixelDensityRatio) :\n this.getCanvasCenter();\n var context = this._getContext(options.useSketch);\n\n context.translate(point.x, 0);\n context.scale(-1, 1);\n context.translate(-point.x, 0);\n },\n\n // private\n _restoreRotationChanges: function(useSketch) {\n var context = this._getContext(useSketch);\n context.restore();\n },\n\n // private\n _calculateCanvasSize: function() {\n var pixelDensityRatio = $.pixelDensityRatio;\n var viewportSize = this.viewport.getContainerSize();\n return {\n // canvas width and height are integers\n x: Math.round(viewportSize.x * pixelDensityRatio),\n y: Math.round(viewportSize.y * pixelDensityRatio)\n };\n },\n\n // private\n _calculateSketchCanvasSize: function() {\n var canvasSize = this._calculateCanvasSize();\n if (this.viewport.getRotation() === 0) {\n return canvasSize;\n }\n // If the viewport is rotated, we need a larger sketch canvas in order\n // to support edge smoothing.\n var sketchCanvasSize = Math.ceil(Math.sqrt(\n canvasSize.x * canvasSize.x +\n canvasSize.y * canvasSize.y));\n return {\n x: sketchCanvasSize,\n y: sketchCanvasSize\n };\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - Viewport\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n\n/**\n * @class Viewport\n * @memberof OpenSeadragon\n * @classdesc Handles coordinate-related functionality (zoom, pan, rotation, etc.)\n * for an {@link OpenSeadragon.Viewer}.\n * @param {Object} options - Options for this Viewport.\n * @param {Object} [options.margins] - See viewportMargins in {@link OpenSeadragon.Options}.\n * @param {Number} [options.springStiffness] - See springStiffness in {@link OpenSeadragon.Options}.\n * @param {Number} [options.animationTime] - See animationTime in {@link OpenSeadragon.Options}.\n * @param {Number} [options.minZoomImageRatio] - See minZoomImageRatio in {@link OpenSeadragon.Options}.\n * @param {Number} [options.maxZoomPixelRatio] - See maxZoomPixelRatio in {@link OpenSeadragon.Options}.\n * @param {Number} [options.visibilityRatio] - See visibilityRatio in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapHorizontal] - See wrapHorizontal in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapVertical] - See wrapVertical in {@link OpenSeadragon.Options}.\n * @param {Number} [options.defaultZoomLevel] - See defaultZoomLevel in {@link OpenSeadragon.Options}.\n * @param {Number} [options.minZoomLevel] - See minZoomLevel in {@link OpenSeadragon.Options}.\n * @param {Number} [options.maxZoomLevel] - See maxZoomLevel in {@link OpenSeadragon.Options}.\n * @param {Number} [options.degrees] - See degrees in {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.homeFillsViewer] - See homeFillsViewer in {@link OpenSeadragon.Options}.\n */\n$.Viewport = function( options ) {\n\n //backward compatibility for positional args while preferring more\n //idiomatic javascript options object as the only argument\n var args = arguments;\n if (args.length && args[0] instanceof $.Point) {\n options = {\n containerSize: args[0],\n contentSize: args[1],\n config: args[2]\n };\n }\n\n //options.config and the general config argument are deprecated\n //in favor of the more direct specification of optional settings\n //being passed directly on the options object\n if ( options.config ){\n $.extend( true, options, options.config );\n delete options.config;\n }\n\n this._margins = $.extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n }, options.margins || {});\n\n delete options.margins;\n\n $.extend( true, this, {\n\n //required settings\n containerSize: null,\n contentSize: null,\n\n //internal state properties\n zoomPoint: null,\n viewer: null,\n\n //configurable options\n springStiffness: $.DEFAULT_SETTINGS.springStiffness,\n animationTime: $.DEFAULT_SETTINGS.animationTime,\n minZoomImageRatio: $.DEFAULT_SETTINGS.minZoomImageRatio,\n maxZoomPixelRatio: $.DEFAULT_SETTINGS.maxZoomPixelRatio,\n visibilityRatio: $.DEFAULT_SETTINGS.visibilityRatio,\n wrapHorizontal: $.DEFAULT_SETTINGS.wrapHorizontal,\n wrapVertical: $.DEFAULT_SETTINGS.wrapVertical,\n defaultZoomLevel: $.DEFAULT_SETTINGS.defaultZoomLevel,\n minZoomLevel: $.DEFAULT_SETTINGS.minZoomLevel,\n maxZoomLevel: $.DEFAULT_SETTINGS.maxZoomLevel,\n degrees: $.DEFAULT_SETTINGS.degrees,\n flipped: $.DEFAULT_SETTINGS.flipped,\n homeFillsViewer: $.DEFAULT_SETTINGS.homeFillsViewer\n\n }, options );\n\n this._updateContainerInnerSize();\n\n this.centerSpringX = new $.Spring({\n initial: 0,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n this.centerSpringY = new $.Spring({\n initial: 0,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n this.zoomSpring = new $.Spring({\n exponential: true,\n initial: 1,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._oldCenterX = this.centerSpringX.current.value;\n this._oldCenterY = this.centerSpringY.current.value;\n this._oldZoom = this.zoomSpring.current.value;\n\n this._setContentBounds(new $.Rect(0, 0, 1, 1), 1);\n\n this.goHome(true);\n this.update();\n};\n\n/** @lends OpenSeadragon.Viewport.prototype */\n$.Viewport.prototype = {\n /**\n * Updates the viewport's home bounds and constraints for the given content size.\n * @function\n * @param {OpenSeadragon.Point} contentSize - size of the content in content units\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:reset-size\n */\n resetContentSize: function(contentSize) {\n $.console.assert(contentSize, \"[Viewport.resetContentSize] contentSize is required\");\n $.console.assert(contentSize instanceof $.Point, \"[Viewport.resetContentSize] contentSize must be an OpenSeadragon.Point\");\n $.console.assert(contentSize.x > 0, \"[Viewport.resetContentSize] contentSize.x must be greater than 0\");\n $.console.assert(contentSize.y > 0, \"[Viewport.resetContentSize] contentSize.y must be greater than 0\");\n\n this._setContentBounds(new $.Rect(0, 0, 1, contentSize.y / contentSize.x), contentSize.x);\n return this;\n },\n\n // deprecated\n setHomeBounds: function(bounds, contentFactor) {\n $.console.error(\"[Viewport.setHomeBounds] this function is deprecated; The content bounds should not be set manually.\");\n this._setContentBounds(bounds, contentFactor);\n },\n\n // Set the viewport's content bounds\n // @param {OpenSeadragon.Rect} bounds - the new bounds in viewport coordinates\n // without rotation\n // @param {Number} contentFactor - how many content units per viewport unit\n // @fires OpenSeadragon.Viewer.event:reset-size\n // @private\n _setContentBounds: function(bounds, contentFactor) {\n $.console.assert(bounds, \"[Viewport._setContentBounds] bounds is required\");\n $.console.assert(bounds instanceof $.Rect, \"[Viewport._setContentBounds] bounds must be an OpenSeadragon.Rect\");\n $.console.assert(bounds.width > 0, \"[Viewport._setContentBounds] bounds.width must be greater than 0\");\n $.console.assert(bounds.height > 0, \"[Viewport._setContentBounds] bounds.height must be greater than 0\");\n\n this._contentBoundsNoRotate = bounds.clone();\n this._contentSizeNoRotate = this._contentBoundsNoRotate.getSize().times(\n contentFactor);\n\n this._contentBounds = bounds.rotate(this.degrees).getBoundingBox();\n this._contentSize = this._contentBounds.getSize().times(contentFactor);\n this._contentAspectRatio = this._contentSize.x / this._contentSize.y;\n\n if (this.viewer) {\n /**\n * Raised when the viewer's content size or home bounds are reset\n * (see {@link OpenSeadragon.Viewport#resetContentSize}).\n *\n * @event reset-size\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} contentSize\n * @property {OpenSeadragon.Rect} contentBounds - Content bounds.\n * @property {OpenSeadragon.Rect} homeBounds - Content bounds.\n * Deprecated use contentBounds instead.\n * @property {Number} contentFactor\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('reset-size', {\n contentSize: this._contentSizeNoRotate.clone(),\n contentFactor: contentFactor,\n homeBounds: this._contentBoundsNoRotate.clone(),\n contentBounds: this._contentBounds.clone()\n });\n }\n },\n\n /**\n * Returns the home zoom in \"viewport zoom\" value.\n * @function\n * @returns {Number} The home zoom in \"viewport zoom\".\n */\n getHomeZoom: function() {\n if (this.defaultZoomLevel) {\n return this.defaultZoomLevel;\n }\n\n var aspectFactor = this._contentAspectRatio / this.getAspectRatio();\n var output;\n if (this.homeFillsViewer) { // fill the viewer and clip the image\n output = aspectFactor >= 1 ? aspectFactor : 1;\n } else {\n output = aspectFactor >= 1 ? 1 : aspectFactor;\n }\n\n return output / this._contentBounds.width;\n },\n\n /**\n * Returns the home bounds in viewport coordinates.\n * @function\n * @returns {OpenSeadragon.Rect} The home bounds in vewport coordinates.\n */\n getHomeBounds: function() {\n return this.getHomeBoundsNoRotate().rotate(-this.getRotation());\n },\n\n /**\n * Returns the home bounds in viewport coordinates.\n * This method ignores the viewport rotation. Use\n * {@link OpenSeadragon.Viewport#getHomeBounds} to take it into account.\n * @function\n * @returns {OpenSeadragon.Rect} The home bounds in vewport coordinates.\n */\n getHomeBoundsNoRotate: function() {\n var center = this._contentBounds.getCenter();\n var width = 1.0 / this.getHomeZoom();\n var height = width / this.getAspectRatio();\n\n return new $.Rect(\n center.x - (width / 2.0),\n center.y - (height / 2.0),\n width,\n height\n );\n },\n\n /**\n * @function\n * @param {Boolean} immediately\n * @fires OpenSeadragon.Viewer.event:home\n */\n goHome: function(immediately) {\n if (this.viewer) {\n /**\n * Raised when the \"home\" operation occurs (see {@link OpenSeadragon.Viewport#goHome}).\n *\n * @event home\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Boolean} immediately\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('home', {\n immediately: immediately\n });\n }\n return this.fitBounds(this.getHomeBounds(), immediately);\n },\n\n /**\n * @function\n */\n getMinZoom: function() {\n var homeZoom = this.getHomeZoom(),\n zoom = this.minZoomLevel ?\n this.minZoomLevel :\n this.minZoomImageRatio * homeZoom;\n\n return zoom;\n },\n\n /**\n * @function\n */\n getMaxZoom: function() {\n var zoom = this.maxZoomLevel;\n if (!zoom) {\n zoom = this._contentSize.x * this.maxZoomPixelRatio / this._containerInnerSize.x;\n zoom /= this._contentBounds.width;\n }\n\n return Math.max( zoom, this.getHomeZoom() );\n },\n\n /**\n * @function\n */\n getAspectRatio: function() {\n return this._containerInnerSize.x / this._containerInnerSize.y;\n },\n\n /**\n * @function\n * @returns {OpenSeadragon.Point} The size of the container, in screen coordinates.\n */\n getContainerSize: function() {\n return new $.Point(\n this.containerSize.x,\n this.containerSize.y\n );\n },\n\n /**\n * The margins push the \"home\" region in from the sides by the specified amounts.\n * @function\n * @returns {Object} Properties (Numbers, in screen coordinates): left, top, right, bottom.\n */\n getMargins: function() {\n return $.extend({}, this._margins); // Make a copy so we are not returning our original\n },\n\n /**\n * The margins push the \"home\" region in from the sides by the specified amounts.\n * @function\n * @param {Object} margins - Properties (Numbers, in screen coordinates): left, top, right, bottom.\n */\n setMargins: function(margins) {\n $.console.assert($.type(margins) === 'object', '[Viewport.setMargins] margins must be an object');\n\n this._margins = $.extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n }, margins);\n\n this._updateContainerInnerSize();\n if (this.viewer) {\n this.viewer.forceRedraw();\n }\n },\n\n /**\n * Returns the bounds of the visible area in viewport coordinates.\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to, in viewport coordinates.\n */\n getBounds: function(current) {\n return this.getBoundsNoRotate(current).rotate(-this.getRotation());\n },\n\n /**\n * Returns the bounds of the visible area in viewport coordinates.\n * This method ignores the viewport rotation. Use\n * {@link OpenSeadragon.Viewport#getBounds} to take it into account.\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to, in viewport coordinates.\n */\n getBoundsNoRotate: function(current) {\n var center = this.getCenter(current);\n var width = 1.0 / this.getZoom(current);\n var height = width / this.getAspectRatio();\n\n return new $.Rect(\n center.x - (width / 2.0),\n center.y - (height / 2.0),\n width,\n height\n );\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to,\n * including the space taken by margins, in viewport coordinates.\n */\n getBoundsWithMargins: function(current) {\n return this.getBoundsNoRotateWithMargins(current).rotate(\n -this.getRotation(), this.getCenter(current));\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @returns {OpenSeadragon.Rect} The location you are zoomed/panned to,\n * including the space taken by margins, in viewport coordinates.\n */\n getBoundsNoRotateWithMargins: function(current) {\n var bounds = this.getBoundsNoRotate(current);\n var factor = this._containerInnerSize.x * this.getZoom(current);\n bounds.x -= this._margins.left / factor;\n bounds.y -= this._margins.top / factor;\n bounds.width += (this._margins.left + this._margins.right) / factor;\n bounds.height += (this._margins.top + this._margins.bottom) / factor;\n return bounds;\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n */\n getCenter: function( current ) {\n var centerCurrent = new $.Point(\n this.centerSpringX.current.value,\n this.centerSpringY.current.value\n ),\n centerTarget = new $.Point(\n this.centerSpringX.target.value,\n this.centerSpringY.target.value\n ),\n oldZoomPixel,\n zoom,\n width,\n height,\n bounds,\n newZoomPixel,\n deltaZoomPixels,\n deltaZoomPoints;\n\n if ( current ) {\n return centerCurrent;\n } else if ( !this.zoomPoint ) {\n return centerTarget;\n }\n\n oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);\n\n zoom = this.getZoom();\n width = 1.0 / zoom;\n height = width / this.getAspectRatio();\n bounds = new $.Rect(\n centerCurrent.x - width / 2.0,\n centerCurrent.y - height / 2.0,\n width,\n height\n );\n\n newZoomPixel = this._pixelFromPoint(this.zoomPoint, bounds);\n deltaZoomPixels = newZoomPixel.minus( oldZoomPixel );\n deltaZoomPoints = deltaZoomPixels.divide( this._containerInnerSize.x * zoom );\n\n return centerTarget.plus( deltaZoomPoints );\n },\n\n /**\n * @function\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n */\n getZoom: function( current ) {\n if ( current ) {\n return this.zoomSpring.current.value;\n } else {\n return this.zoomSpring.target.value;\n }\n },\n\n // private\n _applyZoomConstraints: function(zoom) {\n return Math.max(\n Math.min(zoom, this.getMaxZoom()),\n this.getMinZoom());\n },\n\n /**\n * @function\n * @private\n * @param {OpenSeadragon.Rect} bounds\n * @return {OpenSeadragon.Rect} constrained bounds.\n */\n _applyBoundaryConstraints: function(bounds) {\n var newBounds = new $.Rect(\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height);\n\n if (this.wrapHorizontal) {\n //do nothing\n } else {\n var horizontalThreshold = this.visibilityRatio * newBounds.width;\n var boundsRight = newBounds.x + newBounds.width;\n var contentRight = this._contentBoundsNoRotate.x + this._contentBoundsNoRotate.width;\n var leftDx = this._contentBoundsNoRotate.x - boundsRight + horizontalThreshold;\n var rightDx = contentRight - newBounds.x - horizontalThreshold;\n\n if (horizontalThreshold > this._contentBoundsNoRotate.width) {\n newBounds.x += (leftDx + rightDx) / 2;\n } else if (rightDx < 0) {\n newBounds.x += rightDx;\n } else if (leftDx > 0) {\n newBounds.x += leftDx;\n }\n }\n\n if (this.wrapVertical) {\n //do nothing\n } else {\n var verticalThreshold = this.visibilityRatio * newBounds.height;\n var boundsBottom = newBounds.y + newBounds.height;\n var contentBottom = this._contentBoundsNoRotate.y + this._contentBoundsNoRotate.height;\n var topDy = this._contentBoundsNoRotate.y - boundsBottom + verticalThreshold;\n var bottomDy = contentBottom - newBounds.y - verticalThreshold;\n\n if (verticalThreshold > this._contentBoundsNoRotate.height) {\n newBounds.y += (topDy + bottomDy) / 2;\n } else if (bottomDy < 0) {\n newBounds.y += bottomDy;\n } else if (topDy > 0) {\n newBounds.y += topDy;\n }\n }\n\n return newBounds;\n },\n\n /**\n * @function\n * @private\n * @param {Boolean} [immediately=false] - whether the function that triggered this event was\n * called with the \"immediately\" flag\n */\n _raiseConstraintsEvent: function(immediately) {\n if (this.viewer) {\n /**\n * Raised when the viewport constraints are applied (see {@link OpenSeadragon.Viewport#applyConstraints}).\n *\n * @event constrain\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Boolean} immediately - whether the function that triggered this event was\n * called with the \"immediately\" flag\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'constrain', {\n immediately: immediately\n });\n }\n },\n\n /**\n * Enforces the minZoom, maxZoom and visibilityRatio constraints by\n * zooming and panning to the closest acceptable zoom and location.\n * @function\n * @param {Boolean} [immediately=false]\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:constrain\n */\n applyConstraints: function(immediately) {\n var actualZoom = this.getZoom();\n var constrainedZoom = this._applyZoomConstraints(actualZoom);\n\n if (actualZoom !== constrainedZoom) {\n this.zoomTo(constrainedZoom, this.zoomPoint, immediately);\n }\n\n var bounds = this.getBoundsNoRotate();\n var constrainedBounds = this._applyBoundaryConstraints(bounds);\n this._raiseConstraintsEvent(immediately);\n\n if (bounds.x !== constrainedBounds.x ||\n bounds.y !== constrainedBounds.y ||\n immediately) {\n this.fitBounds(\n constrainedBounds.rotate(-this.getRotation()),\n immediately);\n }\n return this;\n },\n\n /**\n * Equivalent to {@link OpenSeadragon.Viewport#applyConstraints}\n * @function\n * @param {Boolean} [immediately=false]\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:constrain\n */\n ensureVisible: function(immediately) {\n return this.applyConstraints(immediately);\n },\n\n /**\n * @function\n * @private\n * @param {OpenSeadragon.Rect} bounds\n * @param {Object} options (immediately=false, constraints=false)\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n _fitBounds: function(bounds, options) {\n options = options || {};\n var immediately = options.immediately || false;\n var constraints = options.constraints || false;\n\n var aspect = this.getAspectRatio();\n var center = bounds.getCenter();\n\n // Compute width and height of bounding box.\n var newBounds = new $.Rect(\n bounds.x,\n bounds.y,\n bounds.width,\n bounds.height,\n bounds.degrees + this.getRotation())\n .getBoundingBox();\n\n if (newBounds.getAspectRatio() >= aspect) {\n newBounds.height = newBounds.width / aspect;\n } else {\n newBounds.width = newBounds.height * aspect;\n }\n\n // Compute x and y from width, height and center position\n newBounds.x = center.x - newBounds.width / 2;\n newBounds.y = center.y - newBounds.height / 2;\n var newZoom = 1.0 / newBounds.width;\n\n if (constraints) {\n var newBoundsAspectRatio = newBounds.getAspectRatio();\n var newConstrainedZoom = this._applyZoomConstraints(newZoom);\n\n if (newZoom !== newConstrainedZoom) {\n newZoom = newConstrainedZoom;\n newBounds.width = 1.0 / newZoom;\n newBounds.x = center.x - newBounds.width / 2;\n newBounds.height = newBounds.width / newBoundsAspectRatio;\n newBounds.y = center.y - newBounds.height / 2;\n }\n\n newBounds = this._applyBoundaryConstraints(newBounds);\n center = newBounds.getCenter();\n this._raiseConstraintsEvent(immediately);\n }\n\n if (immediately) {\n this.panTo(center, true);\n return this.zoomTo(newZoom, null, true);\n }\n\n this.panTo(this.getCenter(true), true);\n this.zoomTo(this.getZoom(true), null, true);\n\n var oldBounds = this.getBounds();\n var oldZoom = this.getZoom();\n\n if (oldZoom === 0 || Math.abs(newZoom / oldZoom - 1) < 0.00000001) {\n this.zoomTo(newZoom, true);\n return this.panTo(center, immediately);\n }\n\n newBounds = newBounds.rotate(-this.getRotation());\n var referencePoint = newBounds.getTopLeft().times(newZoom)\n .minus(oldBounds.getTopLeft().times(oldZoom))\n .divide(newZoom - oldZoom);\n\n return this.zoomTo(newZoom, referencePoint, immediately);\n },\n\n /**\n * Makes the viewport zoom and pan so that the specified bounds take\n * as much space as possible in the viewport.\n * Note: this method ignores the constraints (minZoom, maxZoom and\n * visibilityRatio).\n * Use {@link OpenSeadragon.Viewport#fitBoundsWithConstraints} to enforce\n * them.\n * @function\n * @param {OpenSeadragon.Rect} bounds\n * @param {Boolean} [immediately=false]\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n fitBounds: function(bounds, immediately) {\n return this._fitBounds(bounds, {\n immediately: immediately,\n constraints: false\n });\n },\n\n /**\n * Makes the viewport zoom and pan so that the specified bounds take\n * as much space as possible in the viewport while enforcing the constraints\n * (minZoom, maxZoom and visibilityRatio).\n * Note: because this method enforces the constraints, part of the\n * provided bounds may end up outside of the viewport.\n * Use {@link OpenSeadragon.Viewport#fitBounds} to ignore them.\n * @function\n * @param {OpenSeadragon.Rect} bounds\n * @param {Boolean} [immediately=false]\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n fitBoundsWithConstraints: function(bounds, immediately) {\n return this._fitBounds(bounds, {\n immediately: immediately,\n constraints: true\n });\n },\n\n /**\n * Zooms so the image just fills the viewer vertically.\n * @param {Boolean} immediately\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n fitVertically: function(immediately) {\n var box = new $.Rect(\n this._contentBounds.x + (this._contentBounds.width / 2),\n this._contentBounds.y,\n 0,\n this._contentBounds.height);\n return this.fitBounds(box, immediately);\n },\n\n /**\n * Zooms so the image just fills the viewer horizontally.\n * @param {Boolean} immediately\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n fitHorizontally: function(immediately) {\n var box = new $.Rect(\n this._contentBounds.x,\n this._contentBounds.y + (this._contentBounds.height / 2),\n this._contentBounds.width,\n 0);\n return this.fitBounds(box, immediately);\n },\n\n\n /**\n * Returns bounds taking constraints into account\n * Added to improve constrained panning\n * @param {Boolean} current - Pass true for the current location; defaults to false (target location).\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n getConstrainedBounds: function(current) {\n var bounds,\n constrainedBounds;\n\n bounds = this.getBounds(current);\n\n constrainedBounds = this._applyBoundaryConstraints(bounds);\n\n return constrainedBounds;\n },\n\n /**\n * @function\n * @param {OpenSeadragon.Point} delta\n * @param {Boolean} immediately\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:pan\n */\n panBy: function( delta, immediately ) {\n var center = new $.Point(\n this.centerSpringX.target.value,\n this.centerSpringY.target.value\n );\n return this.panTo( center.plus( delta ), immediately );\n },\n\n /**\n * @function\n * @param {OpenSeadragon.Point} center\n * @param {Boolean} immediately\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:pan\n */\n panTo: function( center, immediately ) {\n if ( immediately ) {\n this.centerSpringX.resetTo( center.x );\n this.centerSpringY.resetTo( center.y );\n } else {\n this.centerSpringX.springTo( center.x );\n this.centerSpringY.springTo( center.y );\n }\n\n if( this.viewer ){\n /**\n * Raised when the viewport is panned (see {@link OpenSeadragon.Viewport#panBy} and {@link OpenSeadragon.Viewport#panTo}).\n *\n * @event pan\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} center\n * @property {Boolean} immediately\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'pan', {\n center: center,\n immediately: immediately\n });\n }\n\n return this;\n },\n\n /**\n * @function\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:zoom\n */\n zoomBy: function(factor, refPoint, immediately) {\n return this.zoomTo(\n this.zoomSpring.target.value * factor, refPoint, immediately);\n },\n\n /**\n * Zooms to the specified zoom level\n * @function\n * @param {Number} zoom The zoom level to zoom to.\n * @param {OpenSeadragon.Point} [refPoint] The point which will stay at\n * the same screen location. Defaults to the viewport center.\n * @param {Boolean} [immediately=false]\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:zoom\n */\n zoomTo: function(zoom, refPoint, immediately) {\n var _this = this;\n\n this.zoomPoint = refPoint instanceof $.Point &&\n !isNaN(refPoint.x) &&\n !isNaN(refPoint.y) ?\n refPoint :\n null;\n\n if (immediately) {\n this._adjustCenterSpringsForZoomPoint(function() {\n _this.zoomSpring.resetTo(zoom);\n });\n } else {\n this.zoomSpring.springTo(zoom);\n }\n\n if (this.viewer) {\n /**\n * Raised when the viewport zoom level changes (see {@link OpenSeadragon.Viewport#zoomBy} and {@link OpenSeadragon.Viewport#zoomTo}).\n *\n * @event zoom\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {Number} zoom\n * @property {OpenSeadragon.Point} refPoint\n * @property {Boolean} immediately\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('zoom', {\n zoom: zoom,\n refPoint: refPoint,\n immediately: immediately\n });\n }\n\n return this;\n },\n\n /**\n * Rotates this viewport to the angle specified.\n * @function\n * @param {Number} degrees The degrees to set the rotation to.\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n setRotation: function(degrees) {\n if (!this.viewer || !this.viewer.drawer.canRotate()) {\n return this;\n }\n this.degrees = $.positiveModulo(degrees, 360);\n this._setContentBounds(\n this.viewer.world.getHomeBounds(),\n this.viewer.world.getContentFactor());\n this.viewer.forceRedraw();\n\n /**\n * Raised when rotation has been changed.\n *\n * @event rotate\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Number} degrees - The number of degrees the rotation was set to.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('rotate', {\"degrees\": degrees});\n return this;\n },\n\n /**\n * Gets the current rotation in degrees.\n * @function\n * @return {Number} The current rotation in degrees.\n */\n getRotation: function() {\n return this.degrees;\n },\n\n /**\n * @function\n * @return {OpenSeadragon.Viewport} Chainable.\n * @fires OpenSeadragon.Viewer.event:resize\n */\n resize: function( newContainerSize, maintain ) {\n var oldBounds = this.getBoundsNoRotate(),\n newBounds = oldBounds,\n widthDeltaFactor;\n\n this.containerSize.x = newContainerSize.x;\n this.containerSize.y = newContainerSize.y;\n\n this._updateContainerInnerSize();\n\n if ( maintain ) {\n // TODO: widthDeltaFactor will always be 1; probably not what's intended\n widthDeltaFactor = newContainerSize.x / this.containerSize.x;\n newBounds.width = oldBounds.width * widthDeltaFactor;\n newBounds.height = newBounds.width / this.getAspectRatio();\n }\n\n if( this.viewer ){\n /**\n * Raised when the viewer is resized (see {@link OpenSeadragon.Viewport#resize}).\n *\n * @event resize\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised this event.\n * @property {OpenSeadragon.Point} newContainerSize\n * @property {Boolean} maintain\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent( 'resize', {\n newContainerSize: newContainerSize,\n maintain: maintain\n });\n }\n\n return this.fitBounds( newBounds, true );\n },\n\n // private\n _updateContainerInnerSize: function() {\n this._containerInnerSize = new $.Point(\n Math.max(1, this.containerSize.x - (this._margins.left + this._margins.right)),\n Math.max(1, this.containerSize.y - (this._margins.top + this._margins.bottom))\n );\n },\n\n /**\n * Update the zoom and center (X and Y) springs.\n * @function\n * @returns {Boolean} True if any change has been made, false otherwise.\n */\n update: function() {\n var _this = this;\n this._adjustCenterSpringsForZoomPoint(function() {\n _this.zoomSpring.update();\n });\n\n this.centerSpringX.update();\n this.centerSpringY.update();\n\n var changed = this.centerSpringX.current.value !== this._oldCenterX ||\n this.centerSpringY.current.value !== this._oldCenterY ||\n this.zoomSpring.current.value !== this._oldZoom;\n\n this._oldCenterX = this.centerSpringX.current.value;\n this._oldCenterY = this.centerSpringY.current.value;\n this._oldZoom = this.zoomSpring.current.value;\n\n return changed;\n },\n\n _adjustCenterSpringsForZoomPoint: function(zoomSpringHandler) {\n if (this.zoomPoint) {\n var oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);\n zoomSpringHandler();\n var newZoomPixel = this.pixelFromPoint(this.zoomPoint, true);\n\n var deltaZoomPixels = newZoomPixel.minus(oldZoomPixel);\n var deltaZoomPoints = this.deltaPointsFromPixels(\n deltaZoomPixels, true);\n\n this.centerSpringX.shiftBy(deltaZoomPoints.x);\n this.centerSpringY.shiftBy(deltaZoomPoints.y);\n\n if (this.zoomSpring.isAtTargetValue()) {\n this.zoomPoint = null;\n }\n } else {\n zoomSpringHandler();\n }\n },\n\n /**\n * Convert a delta (translation vector) from viewport coordinates to pixels\n * coordinates. This method does not take rotation into account.\n * Consider using deltaPixelsFromPoints if you need to account for rotation.\n * @param {OpenSeadragon.Point} deltaPoints - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPixelsFromPointsNoRotate: function(deltaPoints, current) {\n return deltaPoints.times(\n this._containerInnerSize.x * this.getZoom(current)\n );\n },\n\n /**\n * Convert a delta (translation vector) from viewport coordinates to pixels\n * coordinates.\n * @param {OpenSeadragon.Point} deltaPoints - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPixelsFromPoints: function(deltaPoints, current) {\n return this.deltaPixelsFromPointsNoRotate(\n deltaPoints.rotate(this.getRotation()),\n current);\n },\n\n /**\n * Convert a delta (translation vector) from pixels coordinates to viewport\n * coordinates. This method does not take rotation into account.\n * Consider using deltaPointsFromPixels if you need to account for rotation.\n * @param {OpenSeadragon.Point} deltaPixels - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPointsFromPixelsNoRotate: function(deltaPixels, current) {\n return deltaPixels.divide(\n this._containerInnerSize.x * this.getZoom(current)\n );\n },\n\n /**\n * Convert a delta (translation vector) from pixels coordinates to viewport\n * coordinates.\n * @param {OpenSeadragon.Point} deltaPixels - The translation vector to convert.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n deltaPointsFromPixels: function(deltaPixels, current) {\n return this.deltaPointsFromPixelsNoRotate(deltaPixels, current)\n .rotate(-this.getRotation());\n },\n\n /**\n * Convert viewport coordinates to pixels coordinates.\n * This method does not take rotation into account.\n * Consider using pixelFromPoint if you need to account for rotation.\n * @param {OpenSeadragon.Point} point the viewport coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pixelFromPointNoRotate: function(point, current) {\n return this._pixelFromPointNoRotate(\n point, this.getBoundsNoRotate(current));\n },\n\n /**\n * Convert viewport coordinates to pixel coordinates.\n * @param {OpenSeadragon.Point} point the viewport coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pixelFromPoint: function(point, current) {\n return this._pixelFromPoint(point, this.getBoundsNoRotate(current));\n },\n\n // private\n _pixelFromPointNoRotate: function(point, bounds) {\n return point.minus(\n bounds.getTopLeft()\n ).times(\n this._containerInnerSize.x / bounds.width\n ).plus(\n new $.Point(this._margins.left, this._margins.top)\n );\n },\n\n // private\n _pixelFromPoint: function(point, bounds) {\n return this._pixelFromPointNoRotate(\n point.rotate(this.getRotation(), this.getCenter(true)),\n bounds);\n },\n\n /**\n * Convert pixel coordinates to viewport coordinates.\n * This method does not take rotation into account.\n * Consider using pointFromPixel if you need to account for rotation.\n * @param {OpenSeadragon.Point} pixel Pixel coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pointFromPixelNoRotate: function(pixel, current) {\n var bounds = this.getBoundsNoRotate(current);\n return pixel.minus(\n new $.Point(this._margins.left, this._margins.top)\n ).divide(\n this._containerInnerSize.x / bounds.width\n ).plus(\n bounds.getTopLeft()\n );\n },\n\n /**\n * Convert pixel coordinates to viewport coordinates.\n * @param {OpenSeadragon.Point} pixel Pixel coordinates\n * @param {Boolean} [current=false] - Pass true for the current location;\n * defaults to false (target location).\n * @returns {OpenSeadragon.Point}\n */\n pointFromPixel: function(pixel, current) {\n return this.pointFromPixelNoRotate(pixel, current).rotate(\n -this.getRotation(),\n this.getCenter(true)\n );\n },\n\n // private\n _viewportToImageDelta: function( viewerX, viewerY ) {\n var scale = this._contentBoundsNoRotate.width;\n return new $.Point(\n viewerX * this._contentSizeNoRotate.x / scale,\n viewerY * this._contentSizeNoRotate.x / scale);\n },\n\n /**\n * Translates from OpenSeadragon viewer coordinate system to image coordinate system.\n * This method can be called either by passing X,Y coordinates or an\n * OpenSeadragon.Point\n * Note: not accurate with multi-image; use TiledImage.viewportToImageCoordinates instead.\n * @function\n * @param {(OpenSeadragon.Point|Number)} viewerX either a point or the X\n * coordinate in viewport coordinate system.\n * @param {Number} [viewerY] Y coordinate in viewport coordinate system.\n * @return {OpenSeadragon.Point} a point representing the coordinates in the image.\n */\n viewportToImageCoordinates: function(viewerX, viewerY) {\n if (viewerX instanceof $.Point) {\n //they passed a point instead of individual components\n return this.viewportToImageCoordinates(viewerX.x, viewerX.y);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n $.console.error('[Viewport.viewportToImageCoordinates] is not accurate ' +\n 'with multi-image; use TiledImage.viewportToImageCoordinates instead.');\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageCoordinates\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.viewportToImageCoordinates(viewerX, viewerY, true);\n }\n }\n\n return this._viewportToImageDelta(\n viewerX - this._contentBoundsNoRotate.x,\n viewerY - this._contentBoundsNoRotate.y);\n },\n\n // private\n _imageToViewportDelta: function( imageX, imageY ) {\n var scale = this._contentBoundsNoRotate.width;\n return new $.Point(\n imageX / this._contentSizeNoRotate.x * scale,\n imageY / this._contentSizeNoRotate.x * scale);\n },\n\n /**\n * Translates from image coordinate system to OpenSeadragon viewer coordinate system\n * This method can be called either by passing X,Y coordinates or an\n * OpenSeadragon.Point\n * Note: not accurate with multi-image; use TiledImage.imageToViewportCoordinates instead.\n * @function\n * @param {(OpenSeadragon.Point | Number)} imageX the point or the\n * X coordinate in image coordinate system.\n * @param {Number} [imageY] Y coordinate in image coordinate system.\n * @return {OpenSeadragon.Point} a point representing the coordinates in the viewport.\n */\n imageToViewportCoordinates: function(imageX, imageY) {\n if (imageX instanceof $.Point) {\n //they passed a point instead of individual components\n return this.imageToViewportCoordinates(imageX.x, imageX.y);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n $.console.error('[Viewport.imageToViewportCoordinates] is not accurate ' +\n 'with multi-image; use TiledImage.imageToViewportCoordinates instead.');\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageCoordinates\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.imageToViewportCoordinates(imageX, imageY, true);\n }\n }\n\n var point = this._imageToViewportDelta(imageX, imageY);\n point.x += this._contentBoundsNoRotate.x;\n point.y += this._contentBoundsNoRotate.y;\n return point;\n },\n\n /**\n * Translates from a rectangle which describes a portion of the image in\n * pixel coordinates to OpenSeadragon viewport rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an\n * OpenSeadragon.Rect\n * Note: not accurate with multi-image; use TiledImage.imageToViewportRectangle instead.\n * @function\n * @param {(OpenSeadragon.Rect | Number)} imageX the rectangle or the X\n * coordinate of the top left corner of the rectangle in image coordinate system.\n * @param {Number} [imageY] the Y coordinate of the top left corner of the rectangle\n * in image coordinate system.\n * @param {Number} [pixelWidth] the width in pixel of the rectangle.\n * @param {Number} [pixelHeight] the height in pixel of the rectangle.\n * @returns {OpenSeadragon.Rect} This image's bounds in viewport coordinates\n */\n imageToViewportRectangle: function(imageX, imageY, pixelWidth, pixelHeight) {\n var rect = imageX;\n if (!(rect instanceof $.Rect)) {\n //they passed individual components instead of a rectangle\n rect = new $.Rect(imageX, imageY, pixelWidth, pixelHeight);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n $.console.error('[Viewport.imageToViewportRectangle] is not accurate ' +\n 'with multi-image; use TiledImage.imageToViewportRectangle instead.');\n } else if (count === 1) {\n // It is better to use TiledImage.imageToViewportRectangle\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.imageToViewportRectangle(\n imageX, imageY, pixelWidth, pixelHeight, true);\n }\n }\n\n var coordA = this.imageToViewportCoordinates(rect.x, rect.y);\n var coordB = this._imageToViewportDelta(rect.width, rect.height);\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees\n );\n },\n\n /**\n * Translates from a rectangle which describes a portion of\n * the viewport in point coordinates to image rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an\n * OpenSeadragon.Rect\n * Note: not accurate with multi-image; use TiledImage.viewportToImageRectangle instead.\n * @function\n * @param {(OpenSeadragon.Rect | Number)} viewerX either a rectangle or\n * the X coordinate of the top left corner of the rectangle in viewport\n * coordinate system.\n * @param {Number} [viewerY] the Y coordinate of the top left corner of the rectangle\n * in viewport coordinate system.\n * @param {Number} [pointWidth] the width of the rectangle in viewport coordinate system.\n * @param {Number} [pointHeight] the height of the rectangle in viewport coordinate system.\n */\n viewportToImageRectangle: function(viewerX, viewerY, pointWidth, pointHeight) {\n var rect = viewerX;\n if (!(rect instanceof $.Rect)) {\n //they passed individual components instead of a rectangle\n rect = new $.Rect(viewerX, viewerY, pointWidth, pointHeight);\n }\n\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n $.console.error('[Viewport.viewportToImageRectangle] is not accurate ' +\n 'with multi-image; use TiledImage.viewportToImageRectangle instead.');\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageCoordinates\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.viewportToImageRectangle(\n viewerX, viewerY, pointWidth, pointHeight, true);\n }\n }\n\n var coordA = this.viewportToImageCoordinates(rect.x, rect.y);\n var coordB = this._viewportToImageDelta(rect.width, rect.height);\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees\n );\n },\n\n /**\n * Convert pixel coordinates relative to the viewer element to image\n * coordinates.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n viewerElementToImageCoordinates: function( pixel ) {\n var point = this.pointFromPixel( pixel, true );\n return this.viewportToImageCoordinates( point );\n },\n\n /**\n * Convert pixel coordinates relative to the image to\n * viewer element coordinates.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToViewerElementCoordinates: function( pixel ) {\n var point = this.imageToViewportCoordinates( pixel );\n return this.pixelFromPoint( point, true );\n },\n\n /**\n * Convert pixel coordinates relative to the window to image coordinates.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n windowToImageCoordinates: function(pixel) {\n $.console.assert(this.viewer,\n \"[Viewport.windowToImageCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = pixel.minus(\n $.getElementPosition(this.viewer.element));\n return this.viewerElementToImageCoordinates(viewerCoordinates);\n },\n\n /**\n * Convert image coordinates to pixel coordinates relative to the window.\n * Note: not accurate with multi-image.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToWindowCoordinates: function(pixel) {\n $.console.assert(this.viewer,\n \"[Viewport.imageToWindowCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = this.imageToViewerElementCoordinates(pixel);\n return viewerCoordinates.plus(\n $.getElementPosition(this.viewer.element));\n },\n\n /**\n * Convert pixel coordinates relative to the viewer element to viewport\n * coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n viewerElementToViewportCoordinates: function( pixel ) {\n return this.pointFromPixel( pixel, true );\n },\n\n /**\n * Convert viewport coordinates to pixel coordinates relative to the\n * viewer element.\n * @param {OpenSeadragon.Point} point\n * @returns {OpenSeadragon.Point}\n */\n viewportToViewerElementCoordinates: function( point ) {\n return this.pixelFromPoint( point, true );\n },\n\n /**\n * Convert a rectangle in pixel coordinates relative to the viewer element\n * to viewport coordinates.\n * @param {OpenSeadragon.Rect} rectangle the rectangle to convert\n * @returns {OpenSeadragon.Rect} the converted rectangle\n */\n viewerElementToViewportRectangle: function(rectangle) {\n return $.Rect.fromSummits(\n this.pointFromPixel(rectangle.getTopLeft(), true),\n this.pointFromPixel(rectangle.getTopRight(), true),\n this.pointFromPixel(rectangle.getBottomLeft(), true)\n );\n },\n\n /**\n * Convert a rectangle in viewport coordinates to pixel coordinates relative\n * to the viewer element.\n * @param {OpenSeadragon.Rect} rectangle the rectangle to convert\n * @returns {OpenSeadragon.Rect} the converted rectangle\n */\n viewportToViewerElementRectangle: function(rectangle) {\n return $.Rect.fromSummits(\n this.pixelFromPoint(rectangle.getTopLeft(), true),\n this.pixelFromPoint(rectangle.getTopRight(), true),\n this.pixelFromPoint(rectangle.getBottomLeft(), true)\n );\n },\n\n /**\n * Convert pixel coordinates relative to the window to viewport coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n windowToViewportCoordinates: function(pixel) {\n $.console.assert(this.viewer,\n \"[Viewport.windowToViewportCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = pixel.minus(\n $.getElementPosition(this.viewer.element));\n return this.viewerElementToViewportCoordinates(viewerCoordinates);\n },\n\n /**\n * Convert viewport coordinates to pixel coordinates relative to the window.\n * @param {OpenSeadragon.Point} point\n * @returns {OpenSeadragon.Point}\n */\n viewportToWindowCoordinates: function(point) {\n $.console.assert(this.viewer,\n \"[Viewport.viewportToWindowCoordinates] the viewport must have a viewer.\");\n var viewerCoordinates = this.viewportToViewerElementCoordinates(point);\n return viewerCoordinates.plus(\n $.getElementPosition(this.viewer.element));\n },\n\n /**\n * Convert a viewport zoom to an image zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * Note: not accurate with multi-image.\n * @function\n * @param {Number} viewportZoom The viewport zoom\n * target zoom.\n * @returns {Number} imageZoom The image zoom\n */\n viewportToImageZoom: function(viewportZoom) {\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n $.console.error('[Viewport.viewportToImageZoom] is not ' +\n 'accurate with multi-image.');\n } else if (count === 1) {\n // It is better to use TiledImage.viewportToImageZoom\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.viewportToImageZoom(viewportZoom);\n }\n }\n\n var imageWidth = this._contentSizeNoRotate.x;\n var containerWidth = this._containerInnerSize.x;\n var scale = this._contentBoundsNoRotate.width;\n var viewportToImageZoomRatio = (containerWidth / imageWidth) * scale;\n return viewportZoom * viewportToImageZoomRatio;\n },\n\n /**\n * Convert an image zoom to a viewport zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * Note: not accurate with multi-image.\n * @function\n * @param {Number} imageZoom The image zoom\n * target zoom.\n * @returns {Number} viewportZoom The viewport zoom\n */\n imageToViewportZoom: function(imageZoom) {\n if (this.viewer) {\n var count = this.viewer.world.getItemCount();\n if (count > 1) {\n $.console.error('[Viewport.imageToViewportZoom] is not accurate ' +\n 'with multi-image.');\n } else if (count === 1) {\n // It is better to use TiledImage.imageToViewportZoom\n // because this._contentBoundsNoRotate can not be relied on\n // with clipping.\n var item = this.viewer.world.getItemAt(0);\n return item.imageToViewportZoom(imageZoom);\n }\n }\n\n var imageWidth = this._contentSizeNoRotate.x;\n var containerWidth = this._containerInnerSize.x;\n var scale = this._contentBoundsNoRotate.width;\n var viewportToImageZoomRatio = (imageWidth / containerWidth) / scale;\n return imageZoom * viewportToImageZoomRatio;\n },\n\n /**\n * Toggles flip state and demands a new drawing on navigator and viewer objects.\n * @function\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n toggleFlip: function() {\n this.setFlip(!this.getFlip());\n return this;\n },\n\n /**\n * Get flip state stored on viewport.\n * @function\n * @return {Boolean} Flip state.\n */\n getFlip: function() {\n return this.flipped;\n },\n\n /**\n * Sets flip state according to the state input argument.\n * @function\n * @param {Boolean} state - Flip state to set.\n * @return {OpenSeadragon.Viewport} Chainable.\n */\n setFlip: function( state ) {\n if ( this.flipped === state ) {\n return this;\n }\n\n this.flipped = state;\n if(this.viewer.navigator){\n this.viewer.navigator.setFlip(this.getFlip());\n }\n this.viewer.forceRedraw();\n\n /**\n * Raised when flip state has been changed.\n *\n * @event flip\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {Number} flipped - The flip state after this change.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.viewer.raiseEvent('flip', {\"flipped\": state});\n return this;\n }\n\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - TiledImage\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * You shouldn't have to create a TiledImage instance directly; get it asynchronously by\n * using {@link OpenSeadragon.Viewer#open} or {@link OpenSeadragon.Viewer#addTiledImage} instead.\n * @class TiledImage\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @classdesc Handles rendering of tiles for an {@link OpenSeadragon.Viewer}.\n * A new instance is created for each TileSource opened.\n * @param {Object} options - Configuration for this TiledImage.\n * @param {OpenSeadragon.TileSource} options.source - The TileSource that defines this TiledImage.\n * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this TiledImage.\n * @param {OpenSeadragon.TileCache} options.tileCache - The TileCache for this TiledImage to use.\n * @param {OpenSeadragon.Drawer} options.drawer - The Drawer for this TiledImage to draw onto.\n * @param {OpenSeadragon.ImageLoader} options.imageLoader - The ImageLoader for this TiledImage to use.\n * @param {Number} [options.x=0] - Left position, in viewport coordinates.\n * @param {Number} [options.y=0] - Top position, in viewport coordinates.\n * @param {Number} [options.width=1] - Width, in viewport coordinates.\n * @param {Number} [options.height] - Height, in viewport coordinates.\n * @param {OpenSeadragon.Rect} [options.fitBounds] The bounds in viewport coordinates\n * to fit the image into. If specified, x, y, width and height get ignored.\n * @param {OpenSeadragon.Placement} [options.fitBoundsPlacement=OpenSeadragon.Placement.CENTER]\n * How to anchor the image in the bounds if options.fitBounds is set.\n * @param {OpenSeadragon.Rect} [options.clip] - An area, in image pixels, to clip to\n * (portions of the image outside of this area will not be visible). Only works on\n * browsers that support the HTML5 canvas.\n * @param {Number} [options.springStiffness] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.animationTime] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.minZoomImageRatio] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapHorizontal] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.wrapVertical] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.immediateRender] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.blendTime] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.alwaysBlend] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.minPixelRatio] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.smoothTileEdgesMinZoom] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.iOSDevice] - See {@link OpenSeadragon.Options}.\n * @param {Number} [options.opacity=1] - Set to draw at proportional opacity. If zero, images will not draw.\n * @param {Boolean} [options.preload=false] - Set true to load even when the image is hidden by zero opacity.\n * @param {String} [options.compositeOperation] - How the image is composited onto other images; see compositeOperation in {@link OpenSeadragon.Options} for possible values.\n * @param {Boolean} [options.debugMode] - See {@link OpenSeadragon.Options}.\n * @param {String|CanvasGradient|CanvasPattern|Function} [options.placeholderFillStyle] - See {@link OpenSeadragon.Options}.\n * @param {String|Boolean} [options.crossOriginPolicy] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.ajaxWithCredentials] - See {@link OpenSeadragon.Options}.\n * @param {Boolean} [options.loadTilesWithAjax]\n * Whether to load tile data using AJAX requests.\n * Defaults to the setting in {@link OpenSeadragon.Options}.\n * @param {Object} [options.ajaxHeaders={}]\n * A set of headers to include when making tile AJAX requests.\n */\n$.TiledImage = function( options ) {\n var _this = this;\n /**\n * The {@link OpenSeadragon.TileSource} that defines this TiledImage.\n * @member {OpenSeadragon.TileSource} source\n * @memberof OpenSeadragon.TiledImage#\n */\n $.console.assert( options.tileCache, \"[TiledImage] options.tileCache is required\" );\n $.console.assert( options.drawer, \"[TiledImage] options.drawer is required\" );\n $.console.assert( options.viewer, \"[TiledImage] options.viewer is required\" );\n $.console.assert( options.imageLoader, \"[TiledImage] options.imageLoader is required\" );\n $.console.assert( options.source, \"[TiledImage] options.source is required\" );\n $.console.assert(!options.clip || options.clip instanceof $.Rect,\n \"[TiledImage] options.clip must be an OpenSeadragon.Rect if present\");\n\n $.EventSource.call( this );\n\n this._tileCache = options.tileCache;\n delete options.tileCache;\n\n this._drawer = options.drawer;\n delete options.drawer;\n\n this._imageLoader = options.imageLoader;\n delete options.imageLoader;\n\n if (options.clip instanceof $.Rect) {\n this._clip = options.clip.clone();\n }\n\n delete options.clip;\n\n var x = options.x || 0;\n delete options.x;\n var y = options.y || 0;\n delete options.y;\n\n // Ratio of zoomable image height to width.\n this.normHeight = options.source.dimensions.y / options.source.dimensions.x;\n this.contentAspectX = options.source.dimensions.x / options.source.dimensions.y;\n\n var scale = 1;\n if ( options.width ) {\n scale = options.width;\n delete options.width;\n\n if ( options.height ) {\n $.console.error( \"specifying both width and height to a tiledImage is not supported\" );\n delete options.height;\n }\n } else if ( options.height ) {\n scale = options.height / this.normHeight;\n delete options.height;\n }\n\n var fitBounds = options.fitBounds;\n delete options.fitBounds;\n var fitBoundsPlacement = options.fitBoundsPlacement || OpenSeadragon.Placement.CENTER;\n delete options.fitBoundsPlacement;\n\n var degrees = options.degrees || 0;\n delete options.degrees;\n\n $.extend( true, this, {\n\n //internal state properties\n viewer: null,\n tilesMatrix: {}, // A '3d' dictionary [level][x][y] --> Tile.\n coverage: {}, // A '3d' dictionary [level][x][y] --> Boolean; shows what areas have been drawn.\n loadingCoverage: {}, // A '3d' dictionary [level][x][y] --> Boolean; shows what areas are loaded or are being loaded/blended.\n lastDrawn: [], // An unordered list of Tiles drawn last frame.\n lastResetTime: 0, // Last time for which the tiledImage was reset.\n _midDraw: false, // Is the tiledImage currently updating the viewport?\n _needsDraw: true, // Does the tiledImage need to update the viewport again?\n _hasOpaqueTile: false, // Do we have even one fully opaque tile?\n _tilesLoading: 0, // The number of pending tile requests.\n //configurable settings\n springStiffness: $.DEFAULT_SETTINGS.springStiffness,\n animationTime: $.DEFAULT_SETTINGS.animationTime,\n minZoomImageRatio: $.DEFAULT_SETTINGS.minZoomImageRatio,\n wrapHorizontal: $.DEFAULT_SETTINGS.wrapHorizontal,\n wrapVertical: $.DEFAULT_SETTINGS.wrapVertical,\n immediateRender: $.DEFAULT_SETTINGS.immediateRender,\n blendTime: $.DEFAULT_SETTINGS.blendTime,\n alwaysBlend: $.DEFAULT_SETTINGS.alwaysBlend,\n minPixelRatio: $.DEFAULT_SETTINGS.minPixelRatio,\n smoothTileEdgesMinZoom: $.DEFAULT_SETTINGS.smoothTileEdgesMinZoom,\n iOSDevice: $.DEFAULT_SETTINGS.iOSDevice,\n debugMode: $.DEFAULT_SETTINGS.debugMode,\n crossOriginPolicy: $.DEFAULT_SETTINGS.crossOriginPolicy,\n ajaxWithCredentials: $.DEFAULT_SETTINGS.ajaxWithCredentials,\n placeholderFillStyle: $.DEFAULT_SETTINGS.placeholderFillStyle,\n opacity: $.DEFAULT_SETTINGS.opacity,\n preload: $.DEFAULT_SETTINGS.preload,\n compositeOperation: $.DEFAULT_SETTINGS.compositeOperation\n }, options );\n\n this._preload = this.preload;\n delete this.preload;\n\n this._fullyLoaded = false;\n\n this._xSpring = new $.Spring({\n initial: x,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._ySpring = new $.Spring({\n initial: y,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._scaleSpring = new $.Spring({\n initial: scale,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._degreesSpring = new $.Spring({\n initial: degrees,\n springStiffness: this.springStiffness,\n animationTime: this.animationTime\n });\n\n this._updateForScale();\n\n if (fitBounds) {\n this.fitBounds(fitBounds, fitBoundsPlacement, true);\n }\n\n // We need a callback to give image manipulation a chance to happen\n this._drawingHandler = function(args) {\n /**\n * This event is fired just before the tile is drawn giving the application a chance to alter the image.\n *\n * NOTE: This event is only fired when the drawer is using a <canvas>.\n *\n * @event tile-drawing\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.Tile} tile - The Tile being drawn.\n * @property {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @property {OpenSeadragon.Tile} context - The HTML canvas context being drawn into.\n * @property {OpenSeadragon.Tile} rendered - The HTML canvas context containing the tile imagery.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n _this.viewer.raiseEvent('tile-drawing', $.extend({\n tiledImage: _this\n }, args));\n };\n};\n\n$.extend($.TiledImage.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.TiledImage.prototype */{\n /**\n * @returns {Boolean} Whether the TiledImage needs to be drawn.\n */\n needsDraw: function() {\n return this._needsDraw;\n },\n\n /**\n * @returns {Boolean} Whether all tiles necessary for this TiledImage to draw at the current view have been loaded.\n */\n getFullyLoaded: function() {\n return this._fullyLoaded;\n },\n\n // private\n _setFullyLoaded: function(flag) {\n if (flag === this._fullyLoaded) {\n return;\n }\n\n this._fullyLoaded = flag;\n\n /**\n * Fired when the TiledImage's \"fully loaded\" flag (whether all tiles necessary for this TiledImage\n * to draw at the current view have been loaded) changes.\n *\n * @event fully-loaded-change\n * @memberof OpenSeadragon.TiledImage\n * @type {object}\n * @property {Boolean} fullyLoaded - The new \"fully loaded\" value.\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('fully-loaded-change', {\n fullyLoaded: this._fullyLoaded\n });\n },\n\n /**\n * Clears all tiles and triggers an update on the next call to\n * {@link OpenSeadragon.TiledImage#update}.\n */\n reset: function() {\n this._tileCache.clearTilesFor(this);\n this.lastResetTime = $.now();\n this._needsDraw = true;\n },\n\n /**\n * Updates the TiledImage's bounds, animating if needed.\n * @returns {Boolean} Whether the TiledImage animated.\n */\n update: function() {\n var xUpdated = this._xSpring.update();\n var yUpdated = this._ySpring.update();\n var scaleUpdated = this._scaleSpring.update();\n var degreesUpdated = this._degreesSpring.update();\n\n if (xUpdated || yUpdated || scaleUpdated || degreesUpdated) {\n this._updateForScale();\n this._needsDraw = true;\n return true;\n }\n\n return false;\n },\n\n /**\n * Draws the TiledImage to its Drawer.\n */\n draw: function() {\n if (this.opacity !== 0 || this._preload) {\n this._midDraw = true;\n this._updateViewport();\n this._midDraw = false;\n }\n // Images with opacity 0 should not need to be drawn in future. this._needsDraw = false is set in this._updateViewport() for other images.\n else {\n this._needsDraw = false;\n }\n },\n\n /**\n * Destroy the TiledImage (unload current loaded tiles).\n */\n destroy: function() {\n this.reset();\n },\n\n /**\n * Get this TiledImage's bounds in viewport coordinates.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * false for target location.\n * @returns {OpenSeadragon.Rect} This TiledImage's bounds in viewport coordinates.\n */\n getBounds: function(current) {\n return this.getBoundsNoRotate(current)\n .rotate(this.getRotation(current), this._getRotationPoint(current));\n },\n\n /**\n * Get this TiledImage's bounds in viewport coordinates without taking\n * rotation into account.\n * @param {Boolean} [current=false] - Pass true for the current location;\n * false for target location.\n * @returns {OpenSeadragon.Rect} This TiledImage's bounds in viewport coordinates.\n */\n getBoundsNoRotate: function(current) {\n return current ?\n new $.Rect(\n this._xSpring.current.value,\n this._ySpring.current.value,\n this._worldWidthCurrent,\n this._worldHeightCurrent) :\n new $.Rect(\n this._xSpring.target.value,\n this._ySpring.target.value,\n this._worldWidthTarget,\n this._worldHeightTarget);\n },\n\n // deprecated\n getWorldBounds: function() {\n $.console.error('[TiledImage.getWorldBounds] is deprecated; use TiledImage.getBounds instead');\n return this.getBounds();\n },\n\n /**\n * Get the bounds of the displayed part of the tiled image.\n * @param {Boolean} [current=false] Pass true for the current location,\n * false for the target location.\n * @returns {$.Rect} The clipped bounds in viewport coordinates.\n */\n getClippedBounds: function(current) {\n var bounds = this.getBoundsNoRotate(current);\n if (this._clip) {\n var worldWidth = current ?\n this._worldWidthCurrent : this._worldWidthTarget;\n var ratio = worldWidth / this.source.dimensions.x;\n var clip = this._clip.times(ratio);\n bounds = new $.Rect(\n bounds.x + clip.x,\n bounds.y + clip.y,\n clip.width,\n clip.height);\n }\n return bounds.rotate(this.getRotation(current), this._getRotationPoint(current));\n },\n\n /**\n * @returns {OpenSeadragon.Point} This TiledImage's content size, in original pixels.\n */\n getContentSize: function() {\n return new $.Point(this.source.dimensions.x, this.source.dimensions.y);\n },\n\n // private\n _viewportToImageDelta: function( viewerX, viewerY, current ) {\n var scale = (current ? this._scaleSpring.current.value : this._scaleSpring.target.value);\n return new $.Point(viewerX * (this.source.dimensions.x / scale),\n viewerY * ((this.source.dimensions.y * this.contentAspectX) / scale));\n },\n\n /**\n * Translates from OpenSeadragon viewer coordinate system to image coordinate system.\n * This method can be called either by passing X,Y coordinates or an {@link OpenSeadragon.Point}.\n * @param {Number|OpenSeadragon.Point} viewerX - The X coordinate or point in viewport coordinate system.\n * @param {Number} [viewerY] - The Y coordinate in viewport coordinate system.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @return {OpenSeadragon.Point} A point representing the coordinates in the image.\n */\n viewportToImageCoordinates: function(viewerX, viewerY, current) {\n var point;\n if (viewerX instanceof $.Point) {\n //they passed a point instead of individual components\n current = viewerY;\n point = viewerX;\n } else {\n point = new $.Point(viewerX, viewerY);\n }\n\n point = point.rotate(-this.getRotation(current), this._getRotationPoint(current));\n return current ?\n this._viewportToImageDelta(\n point.x - this._xSpring.current.value,\n point.y - this._ySpring.current.value) :\n this._viewportToImageDelta(\n point.x - this._xSpring.target.value,\n point.y - this._ySpring.target.value);\n },\n\n // private\n _imageToViewportDelta: function( imageX, imageY, current ) {\n var scale = (current ? this._scaleSpring.current.value : this._scaleSpring.target.value);\n return new $.Point((imageX / this.source.dimensions.x) * scale,\n (imageY / this.source.dimensions.y / this.contentAspectX) * scale);\n },\n\n /**\n * Translates from image coordinate system to OpenSeadragon viewer coordinate system\n * This method can be called either by passing X,Y coordinates or an {@link OpenSeadragon.Point}.\n * @param {Number|OpenSeadragon.Point} imageX - The X coordinate or point in image coordinate system.\n * @param {Number} [imageY] - The Y coordinate in image coordinate system.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @return {OpenSeadragon.Point} A point representing the coordinates in the viewport.\n */\n imageToViewportCoordinates: function(imageX, imageY, current) {\n if (imageX instanceof $.Point) {\n //they passed a point instead of individual components\n current = imageY;\n imageY = imageX.y;\n imageX = imageX.x;\n }\n\n var point = this._imageToViewportDelta(imageX, imageY);\n if (current) {\n point.x += this._xSpring.current.value;\n point.y += this._ySpring.current.value;\n } else {\n point.x += this._xSpring.target.value;\n point.y += this._ySpring.target.value;\n }\n\n return point.rotate(this.getRotation(current), this._getRotationPoint(current));\n },\n\n /**\n * Translates from a rectangle which describes a portion of the image in\n * pixel coordinates to OpenSeadragon viewport rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an {@link OpenSeadragon.Rect}.\n * @param {Number|OpenSeadragon.Rect} imageX - The left coordinate or rectangle in image coordinate system.\n * @param {Number} [imageY] - The top coordinate in image coordinate system.\n * @param {Number} [pixelWidth] - The width in pixel of the rectangle.\n * @param {Number} [pixelHeight] - The height in pixel of the rectangle.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @return {OpenSeadragon.Rect} A rect representing the coordinates in the viewport.\n */\n imageToViewportRectangle: function(imageX, imageY, pixelWidth, pixelHeight, current) {\n var rect = imageX;\n if (rect instanceof $.Rect) {\n //they passed a rect instead of individual components\n current = imageY;\n } else {\n rect = new $.Rect(imageX, imageY, pixelWidth, pixelHeight);\n }\n\n var coordA = this.imageToViewportCoordinates(rect.getTopLeft(), current);\n var coordB = this._imageToViewportDelta(rect.width, rect.height, current);\n\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees + this.getRotation(current)\n );\n },\n\n /**\n * Translates from a rectangle which describes a portion of\n * the viewport in point coordinates to image rectangle coordinates.\n * This method can be called either by passing X,Y,width,height or an {@link OpenSeadragon.Rect}.\n * @param {Number|OpenSeadragon.Rect} viewerX - The left coordinate or rectangle in viewport coordinate system.\n * @param {Number} [viewerY] - The top coordinate in viewport coordinate system.\n * @param {Number} [pointWidth] - The width in viewport coordinate system.\n * @param {Number} [pointHeight] - The height in viewport coordinate system.\n * @param {Boolean} [current=false] - Pass true to use the current location; false for target location.\n * @return {OpenSeadragon.Rect} A rect representing the coordinates in the image.\n */\n viewportToImageRectangle: function( viewerX, viewerY, pointWidth, pointHeight, current ) {\n var rect = viewerX;\n if (viewerX instanceof $.Rect) {\n //they passed a rect instead of individual components\n current = viewerY;\n } else {\n rect = new $.Rect(viewerX, viewerY, pointWidth, pointHeight);\n }\n\n var coordA = this.viewportToImageCoordinates(rect.getTopLeft(), current);\n var coordB = this._viewportToImageDelta(rect.width, rect.height, current);\n\n return new $.Rect(\n coordA.x,\n coordA.y,\n coordB.x,\n coordB.y,\n rect.degrees - this.getRotation(current)\n );\n },\n\n /**\n * Convert pixel coordinates relative to the viewer element to image\n * coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n viewerElementToImageCoordinates: function( pixel ) {\n var point = this.viewport.pointFromPixel( pixel, true );\n return this.viewportToImageCoordinates( point );\n },\n\n /**\n * Convert pixel coordinates relative to the image to\n * viewer element coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToViewerElementCoordinates: function( pixel ) {\n var point = this.imageToViewportCoordinates( pixel );\n return this.viewport.pixelFromPoint( point, true );\n },\n\n /**\n * Convert pixel coordinates relative to the window to image coordinates.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n windowToImageCoordinates: function( pixel ) {\n var viewerCoordinates = pixel.minus(\n OpenSeadragon.getElementPosition( this.viewer.element ));\n return this.viewerElementToImageCoordinates( viewerCoordinates );\n },\n\n /**\n * Convert image coordinates to pixel coordinates relative to the window.\n * @param {OpenSeadragon.Point} pixel\n * @returns {OpenSeadragon.Point}\n */\n imageToWindowCoordinates: function( pixel ) {\n var viewerCoordinates = this.imageToViewerElementCoordinates( pixel );\n return viewerCoordinates.plus(\n OpenSeadragon.getElementPosition( this.viewer.element ));\n },\n\n // private\n // Convert rectangle in viewport coordinates to this tiled image point\n // coordinates (x in [0, 1] and y in [0, aspectRatio])\n _viewportToTiledImageRectangle: function(rect) {\n var scale = this._scaleSpring.current.value;\n rect = rect.rotate(-this.getRotation(true), this._getRotationPoint(true));\n return new $.Rect(\n (rect.x - this._xSpring.current.value) / scale,\n (rect.y - this._ySpring.current.value) / scale,\n rect.width / scale,\n rect.height / scale,\n rect.degrees);\n },\n\n /**\n * Convert a viewport zoom to an image zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * @function\n * @param {Number} viewportZoom The viewport zoom\n * @returns {Number} imageZoom The image zoom\n */\n viewportToImageZoom: function( viewportZoom ) {\n var ratio = this._scaleSpring.current.value *\n this.viewport._containerInnerSize.x / this.source.dimensions.x;\n return ratio * viewportZoom;\n },\n\n /**\n * Convert an image zoom to a viewport zoom.\n * Image zoom: ratio of the original image size to displayed image size.\n * 1 means original image size, 0.5 half size...\n * Viewport zoom: ratio of the displayed image's width to viewport's width.\n * 1 means identical width, 2 means image's width is twice the viewport's width...\n * Note: not accurate with multi-image.\n * @function\n * @param {Number} imageZoom The image zoom\n * @returns {Number} viewportZoom The viewport zoom\n */\n imageToViewportZoom: function( imageZoom ) {\n var ratio = this._scaleSpring.current.value *\n this.viewport._containerInnerSize.x / this.source.dimensions.x;\n return imageZoom / ratio;\n },\n\n /**\n * Sets the TiledImage's position in the world.\n * @param {OpenSeadragon.Point} position - The new position, in viewport coordinates.\n * @param {Boolean} [immediately=false] - Whether to animate to the new position or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setPosition: function(position, immediately) {\n var sameTarget = (this._xSpring.target.value === position.x &&\n this._ySpring.target.value === position.y);\n\n if (immediately) {\n if (sameTarget && this._xSpring.current.value === position.x &&\n this._ySpring.current.value === position.y) {\n return;\n }\n\n this._xSpring.resetTo(position.x);\n this._ySpring.resetTo(position.y);\n this._needsDraw = true;\n } else {\n if (sameTarget) {\n return;\n }\n\n this._xSpring.springTo(position.x);\n this._ySpring.springTo(position.y);\n this._needsDraw = true;\n }\n\n if (!sameTarget) {\n this._raiseBoundsChange();\n }\n },\n\n /**\n * Sets the TiledImage's width in the world, adjusting the height to match based on aspect ratio.\n * @param {Number} width - The new width, in viewport coordinates.\n * @param {Boolean} [immediately=false] - Whether to animate to the new size or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setWidth: function(width, immediately) {\n this._setScale(width, immediately);\n },\n\n /**\n * Sets the TiledImage's height in the world, adjusting the width to match based on aspect ratio.\n * @param {Number} height - The new height, in viewport coordinates.\n * @param {Boolean} [immediately=false] - Whether to animate to the new size or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setHeight: function(height, immediately) {\n this._setScale(height / this.normHeight, immediately);\n },\n\n /**\n * Sets an array of polygons to crop the TiledImage during draw tiles.\n * The render function will use the default non-zero winding rule.\n * @param Polygons represented in an array of point object in image coordinates.\n * Example format: [\n * [{x: 197, y:172}, {x: 226, y:172}, {x: 226, y:198}, {x: 197, y:198}], // First polygon\n * [{x: 328, y:200}, {x: 330, y:199}, {x: 332, y:201}, {x: 329, y:202}] // Second polygon\n * [{x: 321, y:201}, {x: 356, y:205}, {x: 341, y:250}] // Third polygon\n * ]\n */\n setCroppingPolygons: function( polygons ) {\n\n var isXYObject = function(obj) {\n return obj instanceof $.Point || (typeof obj.x === 'number' && typeof obj.y === 'number');\n };\n\n var objectToSimpleXYObject = function(objs) {\n return objs.map(function(obj) {\n try {\n if (isXYObject(obj)) {\n return { x: obj.x, y: obj.y };\n } else {\n throw new Error();\n }\n } catch(e) {\n throw new Error('A Provided cropping polygon point is not supported');\n }\n });\n };\n\n try {\n if (!$.isArray(polygons)) {\n throw new Error('Provided cropping polygon is not an array');\n }\n this._croppingPolygons = polygons.map(function(polygon){\n return objectToSimpleXYObject(polygon);\n });\n } catch (e) {\n $.console.error('[TiledImage.setCroppingPolygons] Cropping polygon format not supported');\n $.console.error(e);\n this._croppingPolygons = null;\n }\n },\n\n /**\n * Resets the cropping polygons, thus next render will remove all cropping\n * polygon effects.\n */\n resetCroppingPolygons: function() {\n this._croppingPolygons = null;\n },\n\n /**\n * Positions and scales the TiledImage to fit in the specified bounds.\n * Note: this method fires OpenSeadragon.TiledImage.event:bounds-change\n * twice\n * @param {OpenSeadragon.Rect} bounds The bounds to fit the image into.\n * @param {OpenSeadragon.Placement} [anchor=OpenSeadragon.Placement.CENTER]\n * How to anchor the image in the bounds.\n * @param {Boolean} [immediately=false] Whether to animate to the new size\n * or snap immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n fitBounds: function(bounds, anchor, immediately) {\n anchor = anchor || $.Placement.CENTER;\n var anchorProperties = $.Placement.properties[anchor];\n var aspectRatio = this.contentAspectX;\n var xOffset = 0;\n var yOffset = 0;\n var displayedWidthRatio = 1;\n var displayedHeightRatio = 1;\n if (this._clip) {\n aspectRatio = this._clip.getAspectRatio();\n displayedWidthRatio = this._clip.width / this.source.dimensions.x;\n displayedHeightRatio = this._clip.height / this.source.dimensions.y;\n if (bounds.getAspectRatio() > aspectRatio) {\n xOffset = this._clip.x / this._clip.height * bounds.height;\n yOffset = this._clip.y / this._clip.height * bounds.height;\n } else {\n xOffset = this._clip.x / this._clip.width * bounds.width;\n yOffset = this._clip.y / this._clip.width * bounds.width;\n }\n }\n\n if (bounds.getAspectRatio() > aspectRatio) {\n // We will have margins on the X axis\n var height = bounds.height / displayedHeightRatio;\n var marginLeft = 0;\n if (anchorProperties.isHorizontallyCentered) {\n marginLeft = (bounds.width - bounds.height * aspectRatio) / 2;\n } else if (anchorProperties.isRight) {\n marginLeft = bounds.width - bounds.height * aspectRatio;\n }\n this.setPosition(\n new $.Point(bounds.x - xOffset + marginLeft, bounds.y - yOffset),\n immediately);\n this.setHeight(height, immediately);\n } else {\n // We will have margins on the Y axis\n var width = bounds.width / displayedWidthRatio;\n var marginTop = 0;\n if (anchorProperties.isVerticallyCentered) {\n marginTop = (bounds.height - bounds.width / aspectRatio) / 2;\n } else if (anchorProperties.isBottom) {\n marginTop = bounds.height - bounds.width / aspectRatio;\n }\n this.setPosition(\n new $.Point(bounds.x - xOffset, bounds.y - yOffset + marginTop),\n immediately);\n this.setWidth(width, immediately);\n }\n },\n\n /**\n * @returns {OpenSeadragon.Rect|null} The TiledImage's current clip rectangle,\n * in image pixels, or null if none.\n */\n getClip: function() {\n if (this._clip) {\n return this._clip.clone();\n }\n\n return null;\n },\n\n /**\n * @param {OpenSeadragon.Rect|null} newClip - An area, in image pixels, to clip to\n * (portions of the image outside of this area will not be visible). Only works on\n * browsers that support the HTML5 canvas.\n * @fires OpenSeadragon.TiledImage.event:clip-change\n */\n setClip: function(newClip) {\n $.console.assert(!newClip || newClip instanceof $.Rect,\n \"[TiledImage.setClip] newClip must be an OpenSeadragon.Rect or null\");\n\n if (newClip instanceof $.Rect) {\n this._clip = newClip.clone();\n } else {\n this._clip = null;\n }\n\n this._needsDraw = true;\n /**\n * Raised when the TiledImage's clip is changed.\n * @event clip-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('clip-change');\n },\n\n /**\n * @returns {Number} The TiledImage's current opacity.\n */\n getOpacity: function() {\n return this.opacity;\n },\n\n /**\n * @param {Number} opacity Opacity the tiled image should be drawn at.\n * @fires OpenSeadragon.TiledImage.event:opacity-change\n */\n setOpacity: function(opacity) {\n if (opacity === this.opacity) {\n return;\n }\n\n this.opacity = opacity;\n this._needsDraw = true;\n /**\n * Raised when the TiledImage's opacity is changed.\n * @event opacity-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {Number} opacity - The new opacity value.\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('opacity-change', {\n opacity: this.opacity\n });\n },\n\n /**\n * @returns {Boolean} whether the tiledImage can load its tiles even when it has zero opacity.\n */\n getPreload: function() {\n return this._preload;\n },\n\n /**\n * Set true to load even when hidden. Set false to block loading when hidden.\n */\n setPreload: function(preload) {\n this._preload = !!preload;\n this._needsDraw = true;\n },\n\n /**\n * Get the rotation of this tiled image in degrees.\n * @param {Boolean} [current=false] True for current rotation, false for target.\n * @returns {Number} the rotation of this tiled image in degrees.\n */\n getRotation: function(current) {\n return current ?\n this._degreesSpring.current.value :\n this._degreesSpring.target.value;\n },\n\n /**\n * Set the current rotation of this tiled image in degrees.\n * @param {Number} degrees the rotation in degrees.\n * @param {Boolean} [immediately=false] Whether to animate to the new angle\n * or rotate immediately.\n * @fires OpenSeadragon.TiledImage.event:bounds-change\n */\n setRotation: function(degrees, immediately) {\n if (this._degreesSpring.target.value === degrees &&\n this._degreesSpring.isAtTargetValue()) {\n return;\n }\n if (immediately) {\n this._degreesSpring.resetTo(degrees);\n } else {\n this._degreesSpring.springTo(degrees);\n }\n this._needsDraw = true;\n this._raiseBoundsChange();\n },\n\n /**\n * Get the point around which this tiled image is rotated\n * @private\n * @param {Boolean} current True for current rotation point, false for target.\n * @returns {OpenSeadragon.Point}\n */\n _getRotationPoint: function(current) {\n return this.getBoundsNoRotate(current).getCenter();\n },\n\n /**\n * @returns {String} The TiledImage's current compositeOperation.\n */\n getCompositeOperation: function() {\n return this.compositeOperation;\n },\n\n /**\n * @param {String} compositeOperation the tiled image should be drawn with this globalCompositeOperation.\n * @fires OpenSeadragon.TiledImage.event:composite-operation-change\n */\n setCompositeOperation: function(compositeOperation) {\n if (compositeOperation === this.compositeOperation) {\n return;\n }\n\n this.compositeOperation = compositeOperation;\n this._needsDraw = true;\n /**\n * Raised when the TiledImage's opacity is changed.\n * @event composite-operation-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {String} compositeOperation - The new compositeOperation value.\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('composite-operation-change', {\n compositeOperation: this.compositeOperation\n });\n },\n\n // private\n _setScale: function(scale, immediately) {\n var sameTarget = (this._scaleSpring.target.value === scale);\n if (immediately) {\n if (sameTarget && this._scaleSpring.current.value === scale) {\n return;\n }\n\n this._scaleSpring.resetTo(scale);\n this._updateForScale();\n this._needsDraw = true;\n } else {\n if (sameTarget) {\n return;\n }\n\n this._scaleSpring.springTo(scale);\n this._updateForScale();\n this._needsDraw = true;\n }\n\n if (!sameTarget) {\n this._raiseBoundsChange();\n }\n },\n\n // private\n _updateForScale: function() {\n this._worldWidthTarget = this._scaleSpring.target.value;\n this._worldHeightTarget = this.normHeight * this._scaleSpring.target.value;\n this._worldWidthCurrent = this._scaleSpring.current.value;\n this._worldHeightCurrent = this.normHeight * this._scaleSpring.current.value;\n },\n\n // private\n _raiseBoundsChange: function() {\n /**\n * Raised when the TiledImage's bounds are changed.\n * Note that this event is triggered only when the animation target is changed;\n * not for every frame of animation.\n * @event bounds-change\n * @memberOf OpenSeadragon.TiledImage\n * @type {object}\n * @property {OpenSeadragon.TiledImage} eventSource - A reference to the\n * TiledImage which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('bounds-change');\n },\n\n // private\n _isBottomItem: function() {\n return this.viewer.world.getItemAt(0) === this;\n },\n\n // private\n _getLevelsInterval: function() {\n var lowestLevel = Math.max(\n this.source.minLevel,\n Math.floor(Math.log(this.minZoomImageRatio) / Math.log(2))\n );\n var currentZeroRatio = this.viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(0), true).x *\n this._scaleSpring.current.value;\n var highestLevel = Math.min(\n Math.abs(this.source.maxLevel),\n Math.abs(Math.floor(\n Math.log(currentZeroRatio / this.minPixelRatio) / Math.log(2)\n ))\n );\n\n // Calculations for the interval of levels to draw\n // can return invalid intervals; fix that here if necessary\n highestLevel = Math.max(highestLevel, this.source.minLevel || 0);\n lowestLevel = Math.min(lowestLevel, highestLevel);\n return {\n lowestLevel: lowestLevel,\n highestLevel: highestLevel\n };\n },\n\n /**\n * @private\n * @inner\n * Pretty much every other line in this needs to be documented so it's clear\n * how each piece of this routine contributes to the drawing process. That's\n * why there are so many TODO's inside this function.\n */\n _updateViewport: function() {\n this._needsDraw = false;\n this._tilesLoading = 0;\n this.loadingCoverage = {};\n\n // Reset tile's internal drawn state\n while (this.lastDrawn.length > 0) {\n var tile = this.lastDrawn.pop();\n tile.beingDrawn = false;\n }\n\n var viewport = this.viewport;\n var drawArea = this._viewportToTiledImageRectangle(\n viewport.getBoundsWithMargins(true));\n\n if (!this.wrapHorizontal && !this.wrapVertical) {\n var tiledImageBounds = this._viewportToTiledImageRectangle(\n this.getClippedBounds(true));\n drawArea = drawArea.intersection(tiledImageBounds);\n if (drawArea === null) {\n return;\n }\n }\n\n var levelsInterval = this._getLevelsInterval();\n var lowestLevel = levelsInterval.lowestLevel;\n var highestLevel = levelsInterval.highestLevel;\n var bestTile = null;\n var haveDrawn = false;\n var currentTime = $.now();\n\n // Update any level that will be drawn\n for (var level = highestLevel; level >= lowestLevel; level--) {\n var drawLevel = false;\n\n //Avoid calculations for draw if we have already drawn this\n var currentRenderPixelRatio = viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(level),\n true\n ).x * this._scaleSpring.current.value;\n\n if (level === lowestLevel ||\n (!haveDrawn && currentRenderPixelRatio >= this.minPixelRatio)) {\n drawLevel = true;\n haveDrawn = true;\n } else if (!haveDrawn) {\n continue;\n }\n\n //Perform calculations for draw if we haven't drawn this\n var targetRenderPixelRatio = viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(level),\n false\n ).x * this._scaleSpring.current.value;\n\n var targetZeroRatio = viewport.deltaPixelsFromPointsNoRotate(\n this.source.getPixelRatio(\n Math.max(\n this.source.getClosestLevel(),\n 0\n )\n ),\n false\n ).x * this._scaleSpring.current.value;\n\n var optimalRatio = this.immediateRender ? 1 : targetZeroRatio;\n var levelOpacity = Math.min(1, (currentRenderPixelRatio - 0.5) / 0.5);\n var levelVisibility = optimalRatio / Math.abs(\n optimalRatio - targetRenderPixelRatio\n );\n\n // Update the level and keep track of 'best' tile to load\n bestTile = updateLevel(\n this,\n haveDrawn,\n drawLevel,\n level,\n levelOpacity,\n levelVisibility,\n drawArea,\n currentTime,\n bestTile\n );\n\n // Stop the loop if lower-res tiles would all be covered by\n // already drawn tiles\n if (providesCoverage(this.coverage, level)) {\n break;\n }\n }\n\n // Perform the actual drawing\n drawTiles(this, this.lastDrawn);\n\n // Load the new 'best' tile\n if (bestTile && !bestTile.context2D) {\n loadTile(this, bestTile, currentTime);\n this._needsDraw = true;\n this._setFullyLoaded(false);\n } else {\n this._setFullyLoaded(this._tilesLoading === 0);\n }\n },\n\n // private\n _getCornerTiles: function(level, topLeftBound, bottomRightBound) {\n var leftX;\n var rightX;\n if (this.wrapHorizontal) {\n leftX = $.positiveModulo(topLeftBound.x, 1);\n rightX = $.positiveModulo(bottomRightBound.x, 1);\n } else {\n leftX = Math.max(0, topLeftBound.x);\n rightX = Math.min(1, bottomRightBound.x);\n }\n var topY;\n var bottomY;\n var aspectRatio = 1 / this.source.aspectRatio;\n if (this.wrapVertical) {\n topY = $.positiveModulo(topLeftBound.y, aspectRatio);\n bottomY = $.positiveModulo(bottomRightBound.y, aspectRatio);\n } else {\n topY = Math.max(0, topLeftBound.y);\n bottomY = Math.min(aspectRatio, bottomRightBound.y);\n }\n\n var topLeftTile = this.source.getTileAtPoint(level, new $.Point(leftX, topY));\n var bottomRightTile = this.source.getTileAtPoint(level, new $.Point(rightX, bottomY));\n var numTiles = this.source.getNumTiles(level);\n\n if (this.wrapHorizontal) {\n topLeftTile.x += numTiles.x * Math.floor(topLeftBound.x);\n bottomRightTile.x += numTiles.x * Math.floor(bottomRightBound.x);\n }\n if (this.wrapVertical) {\n topLeftTile.y += numTiles.y * Math.floor(topLeftBound.y / aspectRatio);\n bottomRightTile.y += numTiles.y * Math.floor(bottomRightBound.y / aspectRatio);\n }\n\n return {\n topLeft: topLeftTile,\n bottomRight: bottomRightTile,\n };\n }\n});\n\n/**\n * @private\n * @inner\n * Updates all tiles at a given resolution level.\n * @param {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @param {Boolean} haveDrawn\n * @param {Boolean} drawLevel\n * @param {Number} level\n * @param {Number} levelOpacity\n * @param {Number} levelVisibility\n * @param {OpenSeadragon.Point} viewportTL - The index of the most top-left visible tile.\n * @param {OpenSeadragon.Point} viewportBR - The index of the most bottom-right visible tile.\n * @param {Number} currentTime\n * @param {OpenSeadragon.Tile} best - The current \"best\" tile to draw.\n */\nfunction updateLevel(tiledImage, haveDrawn, drawLevel, level, levelOpacity,\n levelVisibility, drawArea, currentTime, best) {\n\n var topLeftBound = drawArea.getBoundingBox().getTopLeft();\n var bottomRightBound = drawArea.getBoundingBox().getBottomRight();\n\n if (tiledImage.viewer) {\n /**\n * - Needs documentation -\n *\n * @event update-level\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @property {Object} havedrawn\n * @property {Object} level\n * @property {Object} opacity\n * @property {Object} visibility\n * @property {OpenSeadragon.Rect} drawArea\n * @property {Object} topleft deprecated, use drawArea instead\n * @property {Object} bottomright deprecated, use drawArea instead\n * @property {Object} currenttime\n * @property {Object} best\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n tiledImage.viewer.raiseEvent('update-level', {\n tiledImage: tiledImage,\n havedrawn: haveDrawn,\n level: level,\n opacity: levelOpacity,\n visibility: levelVisibility,\n drawArea: drawArea,\n topleft: topLeftBound,\n bottomright: bottomRightBound,\n currenttime: currentTime,\n best: best\n });\n }\n\n resetCoverage(tiledImage.coverage, level);\n resetCoverage(tiledImage.loadingCoverage, level);\n\n //OK, a new drawing so do your calculations\n var cornerTiles = tiledImage._getCornerTiles(level, topLeftBound, bottomRightBound);\n var topLeftTile = cornerTiles.topLeft;\n var bottomRightTile = cornerTiles.bottomRight;\n var numberOfTiles = tiledImage.source.getNumTiles(level);\n\n var viewportCenter = tiledImage.viewport.pixelFromPoint(\n tiledImage.viewport.getCenter());\n for (var x = topLeftTile.x; x <= bottomRightTile.x; x++) {\n for (var y = topLeftTile.y; y <= bottomRightTile.y; y++) {\n\n // Optimisation disabled with wrapping because getTileBounds does not\n // work correctly with x and y outside of the number of tiles\n if (!tiledImage.wrapHorizontal && !tiledImage.wrapVertical) {\n var tileBounds = tiledImage.source.getTileBounds(level, x, y);\n if (drawArea.intersection(tileBounds) === null) {\n // This tile is outside of the viewport, no need to draw it\n continue;\n }\n }\n\n best = updateTile(\n tiledImage,\n drawLevel,\n haveDrawn,\n x, y,\n level,\n levelOpacity,\n levelVisibility,\n viewportCenter,\n numberOfTiles,\n currentTime,\n best\n );\n\n }\n }\n\n return best;\n}\n\n/**\n * @private\n * @inner\n * Update a single tile at a particular resolution level.\n * @param {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @param {Boolean} haveDrawn\n * @param {Boolean} drawLevel\n * @param {Number} x\n * @param {Number} y\n * @param {Number} level\n * @param {Number} levelOpacity\n * @param {Number} levelVisibility\n * @param {OpenSeadragon.Point} viewportCenter\n * @param {Number} numberOfTiles\n * @param {Number} currentTime\n * @param {OpenSeadragon.Tile} best - The current \"best\" tile to draw.\n */\nfunction updateTile( tiledImage, haveDrawn, drawLevel, x, y, level, levelOpacity, levelVisibility, viewportCenter, numberOfTiles, currentTime, best){\n\n var tile = getTile(\n x, y,\n level,\n tiledImage,\n tiledImage.source,\n tiledImage.tilesMatrix,\n currentTime,\n numberOfTiles,\n tiledImage._worldWidthCurrent,\n tiledImage._worldHeightCurrent\n ),\n drawTile = drawLevel;\n\n if( tiledImage.viewer ){\n /**\n * - Needs documentation -\n *\n * @event update-tile\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @property {OpenSeadragon.Tile} tile\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n tiledImage.viewer.raiseEvent( 'update-tile', {\n tiledImage: tiledImage,\n tile: tile\n });\n }\n\n setCoverage( tiledImage.coverage, level, x, y, false );\n\n var loadingCoverage = tile.loaded || tile.loading || isCovered(tiledImage.loadingCoverage, level, x, y);\n setCoverage(tiledImage.loadingCoverage, level, x, y, loadingCoverage);\n\n if ( !tile.exists ) {\n return best;\n }\n\n if ( haveDrawn && !drawTile ) {\n if ( isCovered( tiledImage.coverage, level, x, y ) ) {\n setCoverage( tiledImage.coverage, level, x, y, true );\n } else {\n drawTile = true;\n }\n }\n\n if ( !drawTile ) {\n return best;\n }\n\n positionTile(\n tile,\n tiledImage.source.tileOverlap,\n tiledImage.viewport,\n viewportCenter,\n levelVisibility,\n tiledImage\n );\n\n if (!tile.loaded) {\n if (tile.context2D) {\n setTileLoaded(tiledImage, tile);\n } else {\n var imageRecord = tiledImage._tileCache.getImageRecord(tile.cacheKey);\n if (imageRecord) {\n var image = imageRecord.getImage();\n setTileLoaded(tiledImage, tile, image);\n }\n }\n }\n\n if ( tile.loaded ) {\n var needsDraw = blendTile(\n tiledImage,\n tile,\n x, y,\n level,\n levelOpacity,\n currentTime\n );\n\n if ( needsDraw ) {\n tiledImage._needsDraw = true;\n }\n } else if ( tile.loading ) {\n // the tile is already in the download queue\n tiledImage._tilesLoading++;\n } else if (!loadingCoverage) {\n best = compareTiles( best, tile );\n }\n\n return best;\n}\n\n/**\n * @private\n * @inner\n * Obtains a tile at the given location.\n * @param {Number} x\n * @param {Number} y\n * @param {Number} level\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.TileSource} tileSource\n * @param {Object} tilesMatrix - A '3d' dictionary [level][x][y] --> Tile.\n * @param {Number} time\n * @param {Number} numTiles\n * @param {Number} worldWidth\n * @param {Number} worldHeight\n * @returns {OpenSeadragon.Tile}\n */\nfunction getTile(\n x, y,\n level,\n tiledImage,\n tileSource,\n tilesMatrix,\n time,\n numTiles,\n worldWidth,\n worldHeight\n) {\n var xMod,\n yMod,\n bounds,\n sourceBounds,\n exists,\n url,\n ajaxHeaders,\n context2D,\n tile;\n\n if ( !tilesMatrix[ level ] ) {\n tilesMatrix[ level ] = {};\n }\n if ( !tilesMatrix[ level ][ x ] ) {\n tilesMatrix[ level ][ x ] = {};\n }\n\n if ( !tilesMatrix[ level ][ x ][ y ] ) {\n xMod = ( numTiles.x + ( x % numTiles.x ) ) % numTiles.x;\n yMod = ( numTiles.y + ( y % numTiles.y ) ) % numTiles.y;\n bounds = tileSource.getTileBounds( level, xMod, yMod );\n sourceBounds = tileSource.getTileBounds( level, xMod, yMod, true );\n exists = tileSource.tileExists( level, xMod, yMod );\n url = tileSource.getTileUrl( level, xMod, yMod );\n\n // Headers are only applicable if loadTilesWithAjax is set\n if (tiledImage.loadTilesWithAjax) {\n ajaxHeaders = tileSource.getTileAjaxHeaders( level, xMod, yMod );\n // Combine tile AJAX headers with tiled image AJAX headers (if applicable)\n if ($.isPlainObject(tiledImage.ajaxHeaders)) {\n ajaxHeaders = $.extend({}, tiledImage.ajaxHeaders, ajaxHeaders);\n }\n } else {\n ajaxHeaders = null;\n }\n\n context2D = tileSource.getContext2D ?\n tileSource.getContext2D(level, xMod, yMod) : undefined;\n\n bounds.x += ( x - xMod ) / numTiles.x;\n bounds.y += (worldHeight / worldWidth) * (( y - yMod ) / numTiles.y);\n\n tile = new $.Tile(\n level,\n x,\n y,\n bounds,\n exists,\n url,\n context2D,\n tiledImage.loadTilesWithAjax,\n ajaxHeaders,\n sourceBounds\n );\n\n if (xMod === numTiles.x - 1) {\n tile.isRightMost = true;\n }\n\n if (yMod === numTiles.y - 1) {\n tile.isBottomMost = true;\n }\n\n tilesMatrix[ level ][ x ][ y ] = tile;\n }\n\n tile = tilesMatrix[ level ][ x ][ y ];\n tile.lastTouchTime = time;\n\n return tile;\n}\n\n/**\n * @private\n * @inner\n * Dispatch a job to the ImageLoader to load the Image for a Tile.\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.Tile} tile\n * @param {Number} time\n */\nfunction loadTile( tiledImage, tile, time ) {\n tile.loading = true;\n tiledImage._imageLoader.addJob({\n src: tile.url,\n loadWithAjax: tile.loadWithAjax,\n ajaxHeaders: tile.ajaxHeaders,\n crossOriginPolicy: tiledImage.crossOriginPolicy,\n ajaxWithCredentials: tiledImage.ajaxWithCredentials,\n callback: function( image, errorMsg, tileRequest ){\n onTileLoad( tiledImage, tile, time, image, errorMsg, tileRequest );\n },\n abort: function() {\n tile.loading = false;\n }\n });\n}\n\n/**\n * @private\n * @inner\n * Callback fired when a Tile's Image finished downloading.\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.Tile} tile\n * @param {Number} time\n * @param {Image} image\n * @param {String} errorMsg\n * @param {XMLHttpRequest} tileRequest\n */\nfunction onTileLoad( tiledImage, tile, time, image, errorMsg, tileRequest ) {\n if ( !image ) {\n $.console.log( \"Tile %s failed to load: %s - error: %s\", tile, tile.url, errorMsg );\n /**\n * Triggered when a tile fails to load.\n *\n * @event tile-load-failed\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Tile} tile - The tile that failed to load.\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image the tile belongs to.\n * @property {number} time - The time in milliseconds when the tile load began.\n * @property {string} message - The error message.\n * @property {XMLHttpRequest} tileRequest - The XMLHttpRequest used to load the tile if available.\n */\n tiledImage.viewer.raiseEvent(\"tile-load-failed\", {\n tile: tile,\n tiledImage: tiledImage,\n time: time,\n message: errorMsg,\n tileRequest: tileRequest\n });\n tile.loading = false;\n tile.exists = false;\n return;\n }\n\n if ( time < tiledImage.lastResetTime ) {\n $.console.log( \"Ignoring tile %s loaded before reset: %s\", tile, tile.url );\n tile.loading = false;\n return;\n }\n\n var finish = function() {\n var cutoff = tiledImage.source.getClosestLevel();\n setTileLoaded(tiledImage, tile, image, cutoff, tileRequest);\n };\n\n // Check if we're mid-update; this can happen on IE8 because image load events for\n // cached images happen immediately there\n if ( !tiledImage._midDraw ) {\n finish();\n } else {\n // Wait until after the update, in case caching unloads any tiles\n window.setTimeout( finish, 1);\n }\n}\n\n/**\n * @private\n * @inner\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.Tile} tile\n * @param {Image} image\n * @param {Number} cutoff\n */\nfunction setTileLoaded(tiledImage, tile, image, cutoff, tileRequest) {\n var increment = 0;\n\n function getCompletionCallback() {\n increment++;\n return completionCallback;\n }\n\n function completionCallback() {\n increment--;\n if (increment === 0) {\n tile.loading = false;\n tile.loaded = true;\n if (!tile.context2D) {\n tiledImage._tileCache.cacheTile({\n image: image,\n tile: tile,\n cutoff: cutoff,\n tiledImage: tiledImage\n });\n }\n tiledImage._needsDraw = true;\n }\n }\n\n /**\n * Triggered when a tile has just been loaded in memory. That means that the\n * image has been downloaded and can be modified before being drawn to the canvas.\n *\n * @event tile-loaded\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {Image} image - The image of the tile.\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image of the loaded tile.\n * @property {OpenSeadragon.Tile} tile - The tile which has been loaded.\n * @property {XMLHttpRequest} tiledImage - The AJAX request that loaded this tile (if applicable).\n * @property {function} getCompletionCallback - A function giving a callback to call\n * when the asynchronous processing of the image is done. The image will be\n * marked as entirely loaded when the callback has been called once for each\n * call to getCompletionCallback.\n */\n tiledImage.viewer.raiseEvent(\"tile-loaded\", {\n tile: tile,\n tiledImage: tiledImage,\n tileRequest: tileRequest,\n image: image,\n getCompletionCallback: getCompletionCallback\n });\n // In case the completion callback is never called, we at least force it once.\n getCompletionCallback()();\n}\n\n/**\n * @private\n * @inner\n * @param {OpenSeadragon.Tile} tile\n * @param {Boolean} overlap\n * @param {OpenSeadragon.Viewport} viewport\n * @param {OpenSeadragon.Point} viewportCenter\n * @param {Number} levelVisibility\n * @param {OpenSeadragon.TiledImage} tiledImage\n */\nfunction positionTile( tile, overlap, viewport, viewportCenter, levelVisibility, tiledImage ){\n var boundsTL = tile.bounds.getTopLeft();\n\n boundsTL.x *= tiledImage._scaleSpring.current.value;\n boundsTL.y *= tiledImage._scaleSpring.current.value;\n boundsTL.x += tiledImage._xSpring.current.value;\n boundsTL.y += tiledImage._ySpring.current.value;\n\n var boundsSize = tile.bounds.getSize();\n\n boundsSize.x *= tiledImage._scaleSpring.current.value;\n boundsSize.y *= tiledImage._scaleSpring.current.value;\n\n var positionC = viewport.pixelFromPointNoRotate(boundsTL, true),\n positionT = viewport.pixelFromPointNoRotate(boundsTL, false),\n sizeC = viewport.deltaPixelsFromPointsNoRotate(boundsSize, true),\n sizeT = viewport.deltaPixelsFromPointsNoRotate(boundsSize, false),\n tileCenter = positionT.plus( sizeT.divide( 2 ) ),\n tileSquaredDistance = viewportCenter.squaredDistanceTo( tileCenter );\n\n if ( !overlap ) {\n sizeC = sizeC.plus( new $.Point( 1, 1 ) );\n }\n\n if (tile.isRightMost && tiledImage.wrapHorizontal) {\n sizeC.x += 0.75; // Otherwise Firefox and Safari show seams\n }\n\n if (tile.isBottomMost && tiledImage.wrapVertical) {\n sizeC.y += 0.75; // Otherwise Firefox and Safari show seams\n }\n\n tile.position = positionC;\n tile.size = sizeC;\n tile.squaredDistance = tileSquaredDistance;\n tile.visibility = levelVisibility;\n}\n\n/**\n * @private\n * @inner\n * Updates the opacity of a tile according to the time it has been on screen\n * to perform a fade-in.\n * Updates coverage once a tile is fully opaque.\n * Returns whether the fade-in has completed.\n *\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.Tile} tile\n * @param {Number} x\n * @param {Number} y\n * @param {Number} level\n * @param {Number} levelOpacity\n * @param {Number} currentTime\n * @returns {Boolean}\n */\nfunction blendTile( tiledImage, tile, x, y, level, levelOpacity, currentTime ){\n var blendTimeMillis = 1000 * tiledImage.blendTime,\n deltaTime,\n opacity;\n\n if ( !tile.blendStart ) {\n tile.blendStart = currentTime;\n }\n\n deltaTime = currentTime - tile.blendStart;\n opacity = blendTimeMillis ? Math.min( 1, deltaTime / ( blendTimeMillis ) ) : 1;\n\n if ( tiledImage.alwaysBlend ) {\n opacity *= levelOpacity;\n }\n\n tile.opacity = opacity;\n\n tiledImage.lastDrawn.push( tile );\n\n if ( opacity === 1 ) {\n setCoverage( tiledImage.coverage, level, x, y, true );\n tiledImage._hasOpaqueTile = true;\n } else if ( deltaTime < blendTimeMillis ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @private\n * @inner\n * Returns true if the given tile provides coverage to lower-level tiles of\n * lower resolution representing the same content. If neither x nor y is\n * given, returns true if the entire visible level provides coverage.\n *\n * Note that out-of-bounds tiles provide coverage in this sense, since\n * there's no content that they would need to cover. Tiles at non-existent\n * levels that are within the image bounds, however, do not.\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of the tile.\n * @param {Number} x - The X position of the tile.\n * @param {Number} y - The Y position of the tile.\n * @returns {Boolean}\n */\nfunction providesCoverage( coverage, level, x, y ) {\n var rows,\n cols,\n i, j;\n\n if ( !coverage[ level ] ) {\n return false;\n }\n\n if ( x === undefined || y === undefined ) {\n rows = coverage[ level ];\n for ( i in rows ) {\n if ( Object.prototype.hasOwnProperty.call( rows, i ) ) {\n cols = rows[ i ];\n for ( j in cols ) {\n if ( Object.prototype.hasOwnProperty.call( cols, j ) && !cols[ j ] ) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n\n return (\n coverage[ level ][ x] === undefined ||\n coverage[ level ][ x ][ y ] === undefined ||\n coverage[ level ][ x ][ y ] === true\n );\n}\n\n/**\n * @private\n * @inner\n * Returns true if the given tile is completely covered by higher-level\n * tiles of higher resolution representing the same content. If neither x\n * nor y is given, returns true if the entire visible level is covered.\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of the tile.\n * @param {Number} x - The X position of the tile.\n * @param {Number} y - The Y position of the tile.\n * @returns {Boolean}\n */\nfunction isCovered( coverage, level, x, y ) {\n if ( x === undefined || y === undefined ) {\n return providesCoverage( coverage, level + 1 );\n } else {\n return (\n providesCoverage( coverage, level + 1, 2 * x, 2 * y ) &&\n providesCoverage( coverage, level + 1, 2 * x, 2 * y + 1 ) &&\n providesCoverage( coverage, level + 1, 2 * x + 1, 2 * y ) &&\n providesCoverage( coverage, level + 1, 2 * x + 1, 2 * y + 1 )\n );\n }\n}\n\n/**\n * @private\n * @inner\n * Sets whether the given tile provides coverage or not.\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of the tile.\n * @param {Number} x - The X position of the tile.\n * @param {Number} y - The Y position of the tile.\n * @param {Boolean} covers - Whether the tile provides coverage.\n */\nfunction setCoverage( coverage, level, x, y, covers ) {\n if ( !coverage[ level ] ) {\n $.console.warn(\n \"Setting coverage for a tile before its level's coverage has been reset: %s\",\n level\n );\n return;\n }\n\n if ( !coverage[ level ][ x ] ) {\n coverage[ level ][ x ] = {};\n }\n\n coverage[ level ][ x ][ y ] = covers;\n}\n\n/**\n * @private\n * @inner\n * Resets coverage information for the given level. This should be called\n * after every draw routine. Note that at the beginning of the next draw\n * routine, coverage for every visible tile should be explicitly set.\n *\n * @param {Object} coverage - A '3d' dictionary [level][x][y] --> Boolean.\n * @param {Number} level - The resolution level of tiles to completely reset.\n */\nfunction resetCoverage( coverage, level ) {\n coverage[ level ] = {};\n}\n\n/**\n * @private\n * @inner\n * Determines whether the 'last best' tile for the area is better than the\n * tile in question.\n *\n * @param {OpenSeadragon.Tile} previousBest\n * @param {OpenSeadragon.Tile} tile\n * @returns {OpenSeadragon.Tile} The new best tile.\n */\nfunction compareTiles( previousBest, tile ) {\n if ( !previousBest ) {\n return tile;\n }\n\n if ( tile.visibility > previousBest.visibility ) {\n return tile;\n } else if ( tile.visibility == previousBest.visibility ) {\n if ( tile.squaredDistance < previousBest.squaredDistance ) {\n return tile;\n }\n }\n\n return previousBest;\n}\n\n/**\n * @private\n * @inner\n * Draws a TiledImage.\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.Tile[]} lastDrawn - An unordered list of Tiles drawn last frame.\n */\nfunction drawTiles( tiledImage, lastDrawn ) {\n if (tiledImage.opacity === 0 || (lastDrawn.length === 0 && !tiledImage.placeholderFillStyle)) {\n return;\n }\n\n var tile = lastDrawn[0];\n var useSketch;\n\n if (tile) {\n useSketch = tiledImage.opacity < 1 ||\n (tiledImage.compositeOperation &&\n tiledImage.compositeOperation !== 'source-over') ||\n (!tiledImage._isBottomItem() && tile._hasTransparencyChannel());\n }\n\n var sketchScale;\n var sketchTranslate;\n\n var zoom = tiledImage.viewport.getZoom(true);\n var imageZoom = tiledImage.viewportToImageZoom(zoom);\n\n if (lastDrawn.length > 1 &&\n imageZoom > tiledImage.smoothTileEdgesMinZoom &&\n !tiledImage.iOSDevice &&\n tiledImage.getRotation(true) % 360 === 0 && // TODO: support tile edge smoothing with tiled image rotation.\n $.supportsCanvas) {\n // When zoomed in a lot (>100%) the tile edges are visible.\n // So we have to composite them at ~100% and scale them up together.\n // Note: Disabled on iOS devices per default as it causes a native crash\n useSketch = true;\n sketchScale = tile.getScaleForEdgeSmoothing();\n sketchTranslate = tile.getTranslationForEdgeSmoothing(sketchScale,\n tiledImage._drawer.getCanvasSize(false),\n tiledImage._drawer.getCanvasSize(true));\n }\n\n var bounds;\n if (useSketch) {\n if (!sketchScale) {\n // Except when edge smoothing, we only clean the part of the\n // sketch canvas we are going to use for performance reasons.\n bounds = tiledImage.viewport.viewportToViewerElementRectangle(\n tiledImage.getClippedBounds(true))\n .getIntegerBoundingBox();\n\n if(tiledImage._drawer.viewer.viewport.getFlip()) {\n if (tiledImage.viewport.degrees !== 0 || tiledImage.getRotation(true) % 360 !== 0){\n bounds.x = tiledImage._drawer.viewer.container.clientWidth - (bounds.x + bounds.width);\n }\n }\n\n bounds = bounds.times($.pixelDensityRatio);\n }\n tiledImage._drawer._clear(true, bounds);\n }\n\n // When scaling, we must rotate only when blending the sketch canvas to\n // avoid interpolation\n if (!sketchScale) {\n if (tiledImage.viewport.degrees !== 0) {\n tiledImage._drawer._offsetForRotation({\n degrees: tiledImage.viewport.degrees,\n useSketch: useSketch\n });\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n tiledImage._drawer._offsetForRotation({\n degrees: tiledImage.getRotation(true),\n point: tiledImage.viewport.pixelFromPointNoRotate(\n tiledImage._getRotationPoint(true), true),\n useSketch: useSketch\n });\n }\n\n if (tiledImage.viewport.degrees === 0 && tiledImage.getRotation(true) % 360 === 0){\n if(tiledImage._drawer.viewer.viewport.getFlip()) {\n tiledImage._drawer._flip();\n }\n }\n }\n\n var usedClip = false;\n if ( tiledImage._clip ) {\n tiledImage._drawer.saveContext(useSketch);\n\n var box = tiledImage.imageToViewportRectangle(tiledImage._clip, true);\n box = box.rotate(-tiledImage.getRotation(true), tiledImage._getRotationPoint(true));\n var clipRect = tiledImage._drawer.viewportToDrawerRectangle(box);\n if (sketchScale) {\n clipRect = clipRect.times(sketchScale);\n }\n if (sketchTranslate) {\n clipRect = clipRect.translate(sketchTranslate);\n }\n tiledImage._drawer.setClip(clipRect, useSketch);\n\n usedClip = true;\n }\n\n if (tiledImage._croppingPolygons) {\n tiledImage._drawer.saveContext(useSketch);\n try {\n var polygons = tiledImage._croppingPolygons.map(function (polygon) {\n return polygon.map(function (coord) {\n var point = tiledImage\n .imageToViewportCoordinates(coord.x, coord.y, true)\n .rotate(-tiledImage.getRotation(true), tiledImage._getRotationPoint(true));\n var clipPoint = tiledImage._drawer.viewportCoordToDrawerCoord(point);\n if (sketchScale) {\n clipPoint = clipPoint.times(sketchScale);\n }\n return clipPoint;\n });\n });\n tiledImage._drawer.clipWithPolygons(polygons, useSketch);\n } catch (e) {\n $.console.error(e);\n }\n usedClip = true;\n }\n\n if ( tiledImage.placeholderFillStyle && tiledImage._hasOpaqueTile === false ) {\n var placeholderRect = tiledImage._drawer.viewportToDrawerRectangle(tiledImage.getBounds(true));\n if (sketchScale) {\n placeholderRect = placeholderRect.times(sketchScale);\n }\n if (sketchTranslate) {\n placeholderRect = placeholderRect.translate(sketchTranslate);\n }\n\n var fillStyle = null;\n if ( typeof tiledImage.placeholderFillStyle === \"function\" ) {\n fillStyle = tiledImage.placeholderFillStyle(tiledImage, tiledImage._drawer.context);\n }\n else {\n fillStyle = tiledImage.placeholderFillStyle;\n }\n\n tiledImage._drawer.drawRectangle(placeholderRect, fillStyle, useSketch);\n }\n\n for (var i = lastDrawn.length - 1; i >= 0; i--) {\n tile = lastDrawn[ i ];\n tiledImage._drawer.drawTile( tile, tiledImage._drawingHandler, useSketch, sketchScale, sketchTranslate );\n tile.beingDrawn = true;\n\n if( tiledImage.viewer ){\n /**\n * - Needs documentation -\n *\n * @event tile-drawn\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event.\n * @property {OpenSeadragon.TiledImage} tiledImage - Which TiledImage is being drawn.\n * @property {OpenSeadragon.Tile} tile\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n tiledImage.viewer.raiseEvent( 'tile-drawn', {\n tiledImage: tiledImage,\n tile: tile\n });\n }\n }\n\n if ( usedClip ) {\n tiledImage._drawer.restoreContext( useSketch );\n }\n\n if (!sketchScale) {\n if (tiledImage.getRotation(true) % 360 !== 0) {\n tiledImage._drawer._restoreRotationChanges(useSketch);\n }\n if (tiledImage.viewport.degrees !== 0) {\n tiledImage._drawer._restoreRotationChanges(useSketch);\n }\n }\n\n if (useSketch) {\n if (sketchScale) {\n if (tiledImage.viewport.degrees !== 0) {\n tiledImage._drawer._offsetForRotation({\n degrees: tiledImage.viewport.degrees,\n useSketch: false\n });\n }\n if (tiledImage.getRotation(true) % 360 !== 0) {\n tiledImage._drawer._offsetForRotation({\n degrees: tiledImage.getRotation(true),\n point: tiledImage.viewport.pixelFromPointNoRotate(\n tiledImage._getRotationPoint(true), true),\n useSketch: false\n });\n }\n }\n tiledImage._drawer.blendSketch({\n opacity: tiledImage.opacity,\n scale: sketchScale,\n translate: sketchTranslate,\n compositeOperation: tiledImage.compositeOperation,\n bounds: bounds\n });\n if (sketchScale) {\n if (tiledImage.getRotation(true) % 360 !== 0) {\n tiledImage._drawer._restoreRotationChanges(false);\n }\n if (tiledImage.viewport.degrees !== 0) {\n tiledImage._drawer._restoreRotationChanges(false);\n }\n }\n }\n\n if (!sketchScale) {\n if (tiledImage.viewport.degrees === 0 && tiledImage.getRotation(true) % 360 === 0){\n if(tiledImage._drawer.viewer.viewport.getFlip()) {\n tiledImage._drawer._flip();\n }\n }\n }\n\n drawDebugInfo( tiledImage, lastDrawn );\n}\n\n/**\n * @private\n * @inner\n * Draws special debug information for a TiledImage if in debug mode.\n * @param {OpenSeadragon.TiledImage} tiledImage\n * @param {OpenSeadragon.Tile[]} lastDrawn - An unordered list of Tiles drawn last frame.\n */\nfunction drawDebugInfo( tiledImage, lastDrawn ) {\n if( tiledImage.debugMode ) {\n for ( var i = lastDrawn.length - 1; i >= 0; i-- ) {\n var tile = lastDrawn[ i ];\n try {\n tiledImage._drawer.drawDebugInfo(\n tile, lastDrawn.length, i, tiledImage);\n } catch(e) {\n $.console.error(e);\n }\n }\n }\n}\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - TileCache\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n// private class\nvar TileRecord = function( options ) {\n $.console.assert( options, \"[TileCache.cacheTile] options is required\" );\n $.console.assert( options.tile, \"[TileCache.cacheTile] options.tile is required\" );\n $.console.assert( options.tiledImage, \"[TileCache.cacheTile] options.tiledImage is required\" );\n this.tile = options.tile;\n this.tiledImage = options.tiledImage;\n};\n\n// private class\nvar ImageRecord = function(options) {\n $.console.assert( options, \"[ImageRecord] options is required\" );\n $.console.assert( options.image, \"[ImageRecord] options.image is required\" );\n this._image = options.image;\n this._tiles = [];\n};\n\nImageRecord.prototype = {\n destroy: function() {\n this._image = null;\n this._renderedContext = null;\n this._tiles = null;\n },\n\n getImage: function() {\n return this._image;\n },\n\n getRenderedContext: function() {\n if (!this._renderedContext) {\n var canvas = document.createElement( 'canvas' );\n canvas.width = this._image.width;\n canvas.height = this._image.height;\n this._renderedContext = canvas.getContext('2d');\n this._renderedContext.drawImage( this._image, 0, 0 );\n //since we are caching the prerendered image on a canvas\n //allow the image to not be held in memory\n this._image = null;\n }\n return this._renderedContext;\n },\n\n setRenderedContext: function(renderedContext) {\n $.console.error(\"ImageRecord.setRenderedContext is deprecated. \" +\n \"The rendered context should be created by the ImageRecord \" +\n \"itself when calling ImageRecord.getRenderedContext.\");\n this._renderedContext = renderedContext;\n },\n\n addTile: function(tile) {\n $.console.assert(tile, '[ImageRecord.addTile] tile is required');\n this._tiles.push(tile);\n },\n\n removeTile: function(tile) {\n for (var i = 0; i < this._tiles.length; i++) {\n if (this._tiles[i] === tile) {\n this._tiles.splice(i, 1);\n return;\n }\n }\n\n $.console.warn('[ImageRecord.removeTile] trying to remove unknown tile', tile);\n },\n\n getTileCount: function() {\n return this._tiles.length;\n }\n};\n\n/**\n * @class TileCache\n * @memberof OpenSeadragon\n * @classdesc Stores all the tiles displayed in a {@link OpenSeadragon.Viewer}.\n * You generally won't have to interact with the TileCache directly.\n * @param {Object} options - Configuration for this TileCache.\n * @param {Number} [options.maxImageCacheCount] - See maxImageCacheCount in\n * {@link OpenSeadragon.Options} for details.\n */\n$.TileCache = function( options ) {\n options = options || {};\n\n this._maxImageCacheCount = options.maxImageCacheCount || $.DEFAULT_SETTINGS.maxImageCacheCount;\n this._tilesLoaded = [];\n this._imagesLoaded = [];\n this._imagesLoadedCount = 0;\n};\n\n/** @lends OpenSeadragon.TileCache.prototype */\n$.TileCache.prototype = {\n /**\n * @returns {Number} The total number of tiles that have been loaded by\n * this TileCache.\n */\n numTilesLoaded: function() {\n return this._tilesLoaded.length;\n },\n\n /**\n * Caches the specified tile, removing an old tile if necessary to stay under the\n * maxImageCacheCount specified on construction. Note that if multiple tiles reference\n * the same image, there may be more tiles than maxImageCacheCount; the goal is to keep\n * the number of images below that number. Note, as well, that even the number of images\n * may temporarily surpass that number, but should eventually come back down to the max specified.\n * @param {Object} options - Tile info.\n * @param {OpenSeadragon.Tile} options.tile - The tile to cache.\n * @param {String} options.tile.cacheKey - The unique key used to identify this tile in the cache.\n * @param {Image} options.image - The image of the tile to cache.\n * @param {OpenSeadragon.TiledImage} options.tiledImage - The TiledImage that owns that tile.\n * @param {Number} [options.cutoff=0] - If adding this tile goes over the cache max count, this\n * function will release an old tile. The cutoff option specifies a tile level at or below which\n * tiles will not be released.\n */\n cacheTile: function( options ) {\n $.console.assert( options, \"[TileCache.cacheTile] options is required\" );\n $.console.assert( options.tile, \"[TileCache.cacheTile] options.tile is required\" );\n $.console.assert( options.tile.cacheKey, \"[TileCache.cacheTile] options.tile.cacheKey is required\" );\n $.console.assert( options.tiledImage, \"[TileCache.cacheTile] options.tiledImage is required\" );\n\n var cutoff = options.cutoff || 0;\n var insertionIndex = this._tilesLoaded.length;\n\n var imageRecord = this._imagesLoaded[options.tile.cacheKey];\n if (!imageRecord) {\n $.console.assert( options.image, \"[TileCache.cacheTile] options.image is required to create an ImageRecord\" );\n imageRecord = this._imagesLoaded[options.tile.cacheKey] = new ImageRecord({\n image: options.image\n });\n\n this._imagesLoadedCount++;\n }\n\n imageRecord.addTile(options.tile);\n options.tile.cacheImageRecord = imageRecord;\n\n // Note that just because we're unloading a tile doesn't necessarily mean\n // we're unloading an image. With repeated calls it should sort itself out, though.\n if ( this._imagesLoadedCount > this._maxImageCacheCount ) {\n var worstTile = null;\n var worstTileIndex = -1;\n var worstTileRecord = null;\n var prevTile, worstTime, worstLevel, prevTime, prevLevel, prevTileRecord;\n\n for ( var i = this._tilesLoaded.length - 1; i >= 0; i-- ) {\n prevTileRecord = this._tilesLoaded[ i ];\n prevTile = prevTileRecord.tile;\n\n if ( prevTile.level <= cutoff || prevTile.beingDrawn ) {\n continue;\n } else if ( !worstTile ) {\n worstTile = prevTile;\n worstTileIndex = i;\n worstTileRecord = prevTileRecord;\n continue;\n }\n\n prevTime = prevTile.lastTouchTime;\n worstTime = worstTile.lastTouchTime;\n prevLevel = prevTile.level;\n worstLevel = worstTile.level;\n\n if ( prevTime < worstTime ||\n ( prevTime == worstTime && prevLevel > worstLevel ) ) {\n worstTile = prevTile;\n worstTileIndex = i;\n worstTileRecord = prevTileRecord;\n }\n }\n\n if ( worstTile && worstTileIndex >= 0 ) {\n this._unloadTile(worstTileRecord);\n insertionIndex = worstTileIndex;\n }\n }\n\n this._tilesLoaded[ insertionIndex ] = new TileRecord({\n tile: options.tile,\n tiledImage: options.tiledImage\n });\n },\n\n /**\n * Clears all tiles associated with the specified tiledImage.\n * @param {OpenSeadragon.TiledImage} tiledImage\n */\n clearTilesFor: function( tiledImage ) {\n $.console.assert(tiledImage, '[TileCache.clearTilesFor] tiledImage is required');\n var tileRecord;\n for ( var i = 0; i < this._tilesLoaded.length; ++i ) {\n tileRecord = this._tilesLoaded[ i ];\n if ( tileRecord.tiledImage === tiledImage ) {\n this._unloadTile(tileRecord);\n this._tilesLoaded.splice( i, 1 );\n i--;\n }\n }\n },\n\n // private\n getImageRecord: function(cacheKey) {\n $.console.assert(cacheKey, '[TileCache.getImageRecord] cacheKey is required');\n return this._imagesLoaded[cacheKey];\n },\n\n // private\n _unloadTile: function(tileRecord) {\n $.console.assert(tileRecord, '[TileCache._unloadTile] tileRecord is required');\n var tile = tileRecord.tile;\n var tiledImage = tileRecord.tiledImage;\n\n tile.unload();\n tile.cacheImageRecord = null;\n\n var imageRecord = this._imagesLoaded[tile.cacheKey];\n imageRecord.removeTile(tile);\n if (!imageRecord.getTileCount()) {\n imageRecord.destroy();\n delete this._imagesLoaded[tile.cacheKey];\n this._imagesLoadedCount--;\n }\n\n /**\n * Triggered when a tile has just been unloaded from memory.\n *\n * @event tile-unloaded\n * @memberof OpenSeadragon.Viewer\n * @type {object}\n * @property {OpenSeadragon.TiledImage} tiledImage - The tiled image of the unloaded tile.\n * @property {OpenSeadragon.Tile} tile - The tile which has been unloaded.\n */\n tiledImage.viewer.raiseEvent(\"tile-unloaded\", {\n tile: tile,\n tiledImage: tiledImage\n });\n }\n};\n\n}( OpenSeadragon ));\n\n/*\n * OpenSeadragon - World\n *\n * Copyright (C) 2009 CodePlex Foundation\n * Copyright (C) 2010-2013 OpenSeadragon contributors\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * - Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * - Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * - Neither the name of CodePlex Foundation nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function( $ ){\n\n/**\n * @class World\n * @memberof OpenSeadragon\n * @extends OpenSeadragon.EventSource\n * @classdesc Keeps track of all of the tiled images in the scene.\n * @param {Object} options - World options.\n * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this World.\n **/\n$.World = function( options ) {\n var _this = this;\n\n $.console.assert( options.viewer, \"[World] options.viewer is required\" );\n\n $.EventSource.call( this );\n\n this.viewer = options.viewer;\n this._items = [];\n this._needsDraw = false;\n this._autoRefigureSizes = true;\n this._needsSizesFigured = false;\n this._delegatedFigureSizes = function(event) {\n if (_this._autoRefigureSizes) {\n _this._figureSizes();\n } else {\n _this._needsSizesFigured = true;\n }\n };\n\n this._figureSizes();\n};\n\n$.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.World.prototype */{\n /**\n * Add the specified item.\n * @param {OpenSeadragon.TiledImage} item - The item to add.\n * @param {Number} [options.index] - Index for the item. If not specified, goes at the top.\n * @fires OpenSeadragon.World.event:add-item\n * @fires OpenSeadragon.World.event:metrics-change\n */\n addItem: function( item, options ) {\n $.console.assert(item, \"[World.addItem] item is required\");\n $.console.assert(item instanceof $.TiledImage, \"[World.addItem] only TiledImages supported at this time\");\n\n options = options || {};\n if (options.index !== undefined) {\n var index = Math.max(0, Math.min(this._items.length, options.index));\n this._items.splice(index, 0, item);\n } else {\n this._items.push( item );\n }\n\n if (this._autoRefigureSizes) {\n this._figureSizes();\n } else {\n this._needsSizesFigured = true;\n }\n\n this._needsDraw = true;\n\n item.addHandler('bounds-change', this._delegatedFigureSizes);\n item.addHandler('clip-change', this._delegatedFigureSizes);\n\n /**\n * Raised when an item is added to the World.\n * @event add-item\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.Viewer} eventSource - A reference to the World which raised the event.\n * @property {OpenSeadragon.TiledImage} item - The item that has been added.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'add-item', {\n item: item\n } );\n },\n\n /**\n * Get the item at the specified index.\n * @param {Number} index - The item's index.\n * @returns {OpenSeadragon.TiledImage} The item at the specified index.\n */\n getItemAt: function( index ) {\n $.console.assert(index !== undefined, \"[World.getItemAt] index is required\");\n return this._items[ index ];\n },\n\n /**\n * Get the index of the given item or -1 if not present.\n * @param {OpenSeadragon.TiledImage} item - The item.\n * @returns {Number} The index of the item or -1 if not present.\n */\n getIndexOfItem: function( item ) {\n $.console.assert(item, \"[World.getIndexOfItem] item is required\");\n return $.indexOf( this._items, item );\n },\n\n /**\n * @returns {Number} The number of items used.\n */\n getItemCount: function() {\n return this._items.length;\n },\n\n /**\n * Change the index of a item so that it appears over or under others.\n * @param {OpenSeadragon.TiledImage} item - The item to move.\n * @param {Number} index - The new index.\n * @fires OpenSeadragon.World.event:item-index-change\n */\n setItemIndex: function( item, index ) {\n $.console.assert(item, \"[World.setItemIndex] item is required\");\n $.console.assert(index !== undefined, \"[World.setItemIndex] index is required\");\n\n var oldIndex = this.getIndexOfItem( item );\n\n if ( index >= this._items.length ) {\n throw new Error( \"Index bigger than number of layers.\" );\n }\n\n if ( index === oldIndex || oldIndex === -1 ) {\n return;\n }\n\n this._items.splice( oldIndex, 1 );\n this._items.splice( index, 0, item );\n this._needsDraw = true;\n\n /**\n * Raised when the order of the indexes has been changed.\n * @event item-index-change\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.World} eventSource - A reference to the World which raised the event.\n * @property {OpenSeadragon.TiledImage} item - The item whose index has\n * been changed\n * @property {Number} previousIndex - The previous index of the item\n * @property {Number} newIndex - The new index of the item\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'item-index-change', {\n item: item,\n previousIndex: oldIndex,\n newIndex: index\n } );\n },\n\n /**\n * Remove an item.\n * @param {OpenSeadragon.TiledImage} item - The item to remove.\n * @fires OpenSeadragon.World.event:remove-item\n * @fires OpenSeadragon.World.event:metrics-change\n */\n removeItem: function( item ) {\n $.console.assert(item, \"[World.removeItem] item is required\");\n\n var index = $.indexOf(this._items, item );\n if ( index === -1 ) {\n return;\n }\n\n item.removeHandler('bounds-change', this._delegatedFigureSizes);\n item.removeHandler('clip-change', this._delegatedFigureSizes);\n item.destroy();\n this._items.splice( index, 1 );\n this._figureSizes();\n this._needsDraw = true;\n this._raiseRemoveItem(item);\n },\n\n /**\n * Remove all items.\n * @fires OpenSeadragon.World.event:remove-item\n * @fires OpenSeadragon.World.event:metrics-change\n */\n removeAll: function() {\n // We need to make sure any pending images are canceled so the world items don't get messed up\n this.viewer._cancelPendingImages();\n var item;\n var i;\n for (i = 0; i < this._items.length; i++) {\n item = this._items[i];\n item.removeHandler('bounds-change', this._delegatedFigureSizes);\n item.removeHandler('clip-change', this._delegatedFigureSizes);\n item.destroy();\n }\n\n var removedItems = this._items;\n this._items = [];\n this._figureSizes();\n this._needsDraw = true;\n\n for (i = 0; i < removedItems.length; i++) {\n item = removedItems[i];\n this._raiseRemoveItem(item);\n }\n },\n\n /**\n * Clears all tiles and triggers updates for all items.\n */\n resetItems: function() {\n for ( var i = 0; i < this._items.length; i++ ) {\n this._items[i].reset();\n }\n },\n\n /**\n * Updates (i.e. animates bounds of) all items.\n */\n update: function() {\n var animated = false;\n for ( var i = 0; i < this._items.length; i++ ) {\n animated = this._items[i].update() || animated;\n }\n\n return animated;\n },\n\n /**\n * Draws all items.\n */\n draw: function() {\n for ( var i = 0; i < this._items.length; i++ ) {\n this._items[i].draw();\n }\n\n this._needsDraw = false;\n },\n\n /**\n * @returns {Boolean} true if any items need updating.\n */\n needsDraw: function() {\n for ( var i = 0; i < this._items.length; i++ ) {\n if ( this._items[i].needsDraw() ) {\n return true;\n }\n }\n return this._needsDraw;\n },\n\n /**\n * @returns {OpenSeadragon.Rect} The smallest rectangle that encloses all items, in viewport coordinates.\n */\n getHomeBounds: function() {\n return this._homeBounds.clone();\n },\n\n /**\n * To facilitate zoom constraints, we keep track of the pixel density of the\n * densest item in the World (i.e. the item whose content size to viewport size\n * ratio is the highest) and save it as this \"content factor\".\n * @returns {Number} the number of content units per viewport unit.\n */\n getContentFactor: function() {\n return this._contentFactor;\n },\n\n /**\n * As a performance optimization, setting this flag to false allows the bounds-change event handler\n * on tiledImages to skip calculations on the world bounds. If a lot of images are going to be positioned in\n * rapid succession, this is a good idea. When finished, setAutoRefigureSizes should be called with true\n * or the system may behave oddly.\n * @param {Boolean} [value] The value to which to set the flag.\n */\n setAutoRefigureSizes: function(value) {\n this._autoRefigureSizes = value;\n if (value & this._needsSizesFigured) {\n this._figureSizes();\n this._needsSizesFigured = false;\n }\n },\n\n /**\n * Arranges all of the TiledImages with the specified settings.\n * @param {Object} options - Specifies how to arrange.\n * @param {Boolean} [options.immediately=false] - Whether to animate to the new arrangement.\n * @param {String} [options.layout] - See collectionLayout in {@link OpenSeadragon.Options}.\n * @param {Number} [options.rows] - See collectionRows in {@link OpenSeadragon.Options}.\n * @param {Number} [options.columns] - See collectionColumns in {@link OpenSeadragon.Options}.\n * @param {Number} [options.tileSize] - See collectionTileSize in {@link OpenSeadragon.Options}.\n * @param {Number} [options.tileMargin] - See collectionTileMargin in {@link OpenSeadragon.Options}.\n * @fires OpenSeadragon.World.event:metrics-change\n */\n arrange: function(options) {\n options = options || {};\n var immediately = options.immediately || false;\n var layout = options.layout || $.DEFAULT_SETTINGS.collectionLayout;\n var rows = options.rows || $.DEFAULT_SETTINGS.collectionRows;\n var columns = options.columns || $.DEFAULT_SETTINGS.collectionColumns;\n var tileSize = options.tileSize || $.DEFAULT_SETTINGS.collectionTileSize;\n var tileMargin = options.tileMargin || $.DEFAULT_SETTINGS.collectionTileMargin;\n var increment = tileSize + tileMargin;\n var wrap;\n if (!options.rows && columns) {\n wrap = columns;\n } else {\n wrap = Math.ceil(this._items.length / rows);\n }\n var x = 0;\n var y = 0;\n var item, box, width, height, position;\n\n this.setAutoRefigureSizes(false);\n for (var i = 0; i < this._items.length; i++) {\n if (i && (i % wrap) === 0) {\n if (layout === 'horizontal') {\n y += increment;\n x = 0;\n } else {\n x += increment;\n y = 0;\n }\n }\n\n item = this._items[i];\n box = item.getBounds();\n if (box.width > box.height) {\n width = tileSize;\n } else {\n width = tileSize * (box.width / box.height);\n }\n\n height = width * (box.height / box.width);\n position = new $.Point(x + ((tileSize - width) / 2),\n y + ((tileSize - height) / 2));\n\n item.setPosition(position, immediately);\n item.setWidth(width, immediately);\n\n if (layout === 'horizontal') {\n x += increment;\n } else {\n y += increment;\n }\n }\n this.setAutoRefigureSizes(true);\n },\n\n // private\n _figureSizes: function() {\n var oldHomeBounds = this._homeBounds ? this._homeBounds.clone() : null;\n var oldContentSize = this._contentSize ? this._contentSize.clone() : null;\n var oldContentFactor = this._contentFactor || 0;\n\n if (!this._items.length) {\n this._homeBounds = new $.Rect(0, 0, 1, 1);\n this._contentSize = new $.Point(1, 1);\n this._contentFactor = 1;\n } else {\n var item = this._items[0];\n var bounds = item.getBounds();\n this._contentFactor = item.getContentSize().x / bounds.width;\n var clippedBounds = item.getClippedBounds().getBoundingBox();\n var left = clippedBounds.x;\n var top = clippedBounds.y;\n var right = clippedBounds.x + clippedBounds.width;\n var bottom = clippedBounds.y + clippedBounds.height;\n for (var i = 1; i < this._items.length; i++) {\n item = this._items[i];\n bounds = item.getBounds();\n this._contentFactor = Math.max(this._contentFactor,\n item.getContentSize().x / bounds.width);\n clippedBounds = item.getClippedBounds().getBoundingBox();\n left = Math.min(left, clippedBounds.x);\n top = Math.min(top, clippedBounds.y);\n right = Math.max(right, clippedBounds.x + clippedBounds.width);\n bottom = Math.max(bottom, clippedBounds.y + clippedBounds.height);\n }\n\n this._homeBounds = new $.Rect(left, top, right - left, bottom - top);\n this._contentSize = new $.Point(\n this._homeBounds.width * this._contentFactor,\n this._homeBounds.height * this._contentFactor);\n }\n\n if (this._contentFactor !== oldContentFactor ||\n !this._homeBounds.equals(oldHomeBounds) ||\n !this._contentSize.equals(oldContentSize)) {\n /**\n * Raised when the home bounds or content factor change.\n * @event metrics-change\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.World} eventSource - A reference to the World which raised the event.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent('metrics-change', {});\n }\n },\n\n // private\n _raiseRemoveItem: function(item) {\n /**\n * Raised when an item is removed.\n * @event remove-item\n * @memberOf OpenSeadragon.World\n * @type {object}\n * @property {OpenSeadragon.World} eventSource - A reference to the World which raised the event.\n * @property {OpenSeadragon.TiledImage} item - The item's underlying item.\n * @property {?Object} userData - Arbitrary subscriber-defined object.\n */\n this.raiseEvent( 'remove-item', { item: item } );\n }\n});\n\n}( OpenSeadragon ));\n\n//# sourceMappingURL=openseadragon.js.map","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","module.exports = require(\"regenerator-runtime\");\n","module.exports = (function(e) {\n\tvar t = {};\n\tfunction r(n) {\n\t\tif (t[n]) return t[n].exports;\n\t\tvar o = (t[n] = { i: n, l: !1, exports: {} });\n\t\treturn e[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports;\n\t}\n\treturn (\n\t\t(r.m = e),\n\t\t(r.c = t),\n\t\t(r.d = function(e, t, n) {\n\t\t\tr.o(e, t) ||\n\t\t\t\tObject.defineProperty(e, t, { enumerable: !0, get: n });\n\t\t}),\n\t\t(r.r = function(e) {\n\t\t\t'undefined' != typeof Symbol &&\n\t\t\t\tSymbol.toStringTag &&\n\t\t\t\tObject.defineProperty(e, Symbol.toStringTag, {\n\t\t\t\t\tvalue: 'Module',\n\t\t\t\t}),\n\t\t\t\tObject.defineProperty(e, '__esModule', { value: !0 });\n\t\t}),\n\t\t(r.t = function(e, t) {\n\t\t\tif ((1 & t && (e = r(e)), 8 & t)) return e;\n\t\t\tif (4 & t && 'object' == typeof e && e && e.__esModule) return e;\n\t\t\tvar n = Object.create(null);\n\t\t\tif (\n\t\t\t\t(r.r(n),\n\t\t\t\tObject.defineProperty(n, 'default', {\n\t\t\t\t\tenumerable: !0,\n\t\t\t\t\tvalue: e,\n\t\t\t\t}),\n\t\t\t\t2 & t && 'string' != typeof e)\n\t\t\t)\n\t\t\t\tfor (var o in e)\n\t\t\t\t\tr.d(\n\t\t\t\t\t\tn,\n\t\t\t\t\t\to,\n\t\t\t\t\t\tfunction(t) {\n\t\t\t\t\t\t\treturn e[t];\n\t\t\t\t\t\t}.bind(null, o)\n\t\t\t\t\t);\n\t\t\treturn n;\n\t\t}),\n\t\t(r.n = function(e) {\n\t\t\tvar t =\n\t\t\t\te && e.__esModule\n\t\t\t\t\t? function() {\n\t\t\t\t\t\t\treturn e.default;\n\t\t\t\t\t }\n\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn e;\n\t\t\t\t\t };\n\t\t\treturn r.d(t, 'a', t), t;\n\t\t}),\n\t\t(r.o = function(e, t) {\n\t\t\treturn Object.prototype.hasOwnProperty.call(e, t);\n\t\t}),\n\t\t(r.p = ''),\n\t\tr((r.s = 8))\n\t);\n})([\n\tfunction(e, t) {\n\t\te.exports = require('react');\n\t},\n\tfunction(e, t, r) {\n\t\te.exports = r(10)();\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 }),\n\t\t\t(t.default = function() {\n\t\t\t\treturn (\n\t\t\t\t\t'undefined' != typeof window &&\n\t\t\t\t\t'IntersectionObserver' in window &&\n\t\t\t\t\t'isIntersecting' in\n\t\t\t\t\t\twindow.IntersectionObserverEntry.prototype\n\t\t\t\t);\n\t\t\t});\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 });\n\t\tvar n = (function() {\n\t\t\t\tfunction e(e, t) {\n\t\t\t\t\tfor (var r = 0; r < t.length; r++) {\n\t\t\t\t\t\tvar n = t[r];\n\t\t\t\t\t\t(n.enumerable = n.enumerable || !1),\n\t\t\t\t\t\t\t(n.configurable = !0),\n\t\t\t\t\t\t\t'value' in n && (n.writable = !0),\n\t\t\t\t\t\t\tObject.defineProperty(e, n.key, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn function(t, r, n) {\n\t\t\t\t\treturn r && e(t.prototype, r), n && e(t, n), t;\n\t\t\t\t};\n\t\t\t})(),\n\t\t\to = u(r(0)),\n\t\t\ti = r(1),\n\t\t\ta = u(r(4)),\n\t\t\ts = u(r(12)),\n\t\t\tl = u(r(2));\n\t\tfunction u(e) {\n\t\t\treturn e && e.__esModule ? e : { default: e };\n\t\t}\n\t\tvar c = (function(e) {\n\t\t\tfunction t(e) {\n\t\t\t\t!(function(e, t) {\n\t\t\t\t\tif (!(e instanceof t))\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'Cannot call a class as a function'\n\t\t\t\t\t\t);\n\t\t\t\t})(this, t);\n\t\t\t\tvar r = (function(e, t) {\n\t\t\t\t\t\tif (!e)\n\t\t\t\t\t\t\tthrow new ReferenceError(\n\t\t\t\t\t\t\t\t\"this hasn't been initialised - super() hasn't been called\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn !t ||\n\t\t\t\t\t\t\t('object' != typeof t && 'function' != typeof t)\n\t\t\t\t\t\t\t? e\n\t\t\t\t\t\t\t: t;\n\t\t\t\t\t})(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t(t.__proto__ || Object.getPrototypeOf(t)).call(this, e)\n\t\t\t\t\t),\n\t\t\t\t\tn = e.afterLoad,\n\t\t\t\t\to = e.beforeLoad,\n\t\t\t\t\ti = e.scrollPosition,\n\t\t\t\t\ta = e.visibleByDefault;\n\t\t\t\treturn (\n\t\t\t\t\t(r.state = { visible: a }),\n\t\t\t\t\ta && (o(), n()),\n\t\t\t\t\t(r.onVisible = r.onVisible.bind(r)),\n\t\t\t\t\t(r.isScrollTracked = Boolean(\n\t\t\t\t\t\ti &&\n\t\t\t\t\t\t\tNumber.isFinite(i.x) &&\n\t\t\t\t\t\t\ti.x >= 0 &&\n\t\t\t\t\t\t\tNumber.isFinite(i.y) &&\n\t\t\t\t\t\t\ti.y >= 0\n\t\t\t\t\t)),\n\t\t\t\t\tr\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t(function(e, t) {\n\t\t\t\t\tif ('function' != typeof t && null !== t)\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'Super expression must either be null or a function, not ' +\n\t\t\t\t\t\t\t\ttypeof t\n\t\t\t\t\t\t);\n\t\t\t\t\t(e.prototype = Object.create(t && t.prototype, {\n\t\t\t\t\t\tconstructor: {\n\t\t\t\t\t\t\tvalue: e,\n\t\t\t\t\t\t\tenumerable: !1,\n\t\t\t\t\t\t\twritable: !0,\n\t\t\t\t\t\t\tconfigurable: !0,\n\t\t\t\t\t\t},\n\t\t\t\t\t})),\n\t\t\t\t\t\tt &&\n\t\t\t\t\t\t\t(Object.setPrototypeOf\n\t\t\t\t\t\t\t\t? Object.setPrototypeOf(e, t)\n\t\t\t\t\t\t\t\t: (e.__proto__ = t));\n\t\t\t\t})(t, e),\n\t\t\t\tn(t, [\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'componentDidUpdate',\n\t\t\t\t\t\tvalue: function(e, t) {\n\t\t\t\t\t\t\tt.visible !== this.state.visible &&\n\t\t\t\t\t\t\t\tthis.props.afterLoad();\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'onVisible',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\tthis.props.beforeLoad(),\n\t\t\t\t\t\t\t\tthis.setState({ visible: !0 });\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'render',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\tif (this.state.visible) return this.props.children;\n\t\t\t\t\t\t\tvar e = this.props,\n\t\t\t\t\t\t\t\tt = e.className,\n\t\t\t\t\t\t\t\tr = e.delayMethod,\n\t\t\t\t\t\t\t\tn = e.delayTime,\n\t\t\t\t\t\t\t\ti = e.height,\n\t\t\t\t\t\t\t\tu = e.placeholder,\n\t\t\t\t\t\t\t\tc = e.scrollPosition,\n\t\t\t\t\t\t\t\tf = e.style,\n\t\t\t\t\t\t\t\tp = e.threshold,\n\t\t\t\t\t\t\t\td = e.useIntersectionObserver,\n\t\t\t\t\t\t\t\ty = e.width;\n\t\t\t\t\t\t\treturn this.isScrollTracked ||\n\t\t\t\t\t\t\t\t(d && (0, l.default)())\n\t\t\t\t\t\t\t\t? o.default.createElement(a.default, {\n\t\t\t\t\t\t\t\t\t\tclassName: t,\n\t\t\t\t\t\t\t\t\t\theight: i,\n\t\t\t\t\t\t\t\t\t\tonVisible: this.onVisible,\n\t\t\t\t\t\t\t\t\t\tplaceholder: u,\n\t\t\t\t\t\t\t\t\t\tscrollPosition: c,\n\t\t\t\t\t\t\t\t\t\tstyle: f,\n\t\t\t\t\t\t\t\t\t\tthreshold: p,\n\t\t\t\t\t\t\t\t\t\tuseIntersectionObserver: d,\n\t\t\t\t\t\t\t\t\t\twidth: y,\n\t\t\t\t\t\t\t\t })\n\t\t\t\t\t\t\t\t: o.default.createElement(s.default, {\n\t\t\t\t\t\t\t\t\t\tclassName: t,\n\t\t\t\t\t\t\t\t\t\tdelayMethod: r,\n\t\t\t\t\t\t\t\t\t\tdelayTime: n,\n\t\t\t\t\t\t\t\t\t\theight: i,\n\t\t\t\t\t\t\t\t\t\tonVisible: this.onVisible,\n\t\t\t\t\t\t\t\t\t\tplaceholder: u,\n\t\t\t\t\t\t\t\t\t\tstyle: f,\n\t\t\t\t\t\t\t\t\t\tthreshold: p,\n\t\t\t\t\t\t\t\t\t\twidth: y,\n\t\t\t\t\t\t\t\t });\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]),\n\t\t\t\tt\n\t\t\t);\n\t\t})(o.default.Component);\n\t\t(c.propTypes = {\n\t\t\tafterLoad: i.PropTypes.func,\n\t\t\tbeforeLoad: i.PropTypes.func,\n\t\t\tuseIntersectionObserver: i.PropTypes.bool,\n\t\t\tvisibleByDefault: i.PropTypes.bool,\n\t\t}),\n\t\t\t(c.defaultProps = {\n\t\t\t\tafterLoad: function() {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tbeforeLoad: function() {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tuseIntersectionObserver: !0,\n\t\t\t\tvisibleByDefault: !1,\n\t\t\t}),\n\t\t\t(t.default = c);\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 });\n\t\tvar n =\n\t\t\t\tObject.assign ||\n\t\t\t\tfunction(e) {\n\t\t\t\t\tfor (var t = 1; t < arguments.length; t++) {\n\t\t\t\t\t\tvar r = arguments[t];\n\t\t\t\t\t\tfor (var n in r)\n\t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(r, n) &&\n\t\t\t\t\t\t\t\t(e[n] = r[n]);\n\t\t\t\t\t}\n\t\t\t\t\treturn e;\n\t\t\t\t},\n\t\t\to = (function() {\n\t\t\t\tfunction e(e, t) {\n\t\t\t\t\tfor (var r = 0; r < t.length; r++) {\n\t\t\t\t\t\tvar n = t[r];\n\t\t\t\t\t\t(n.enumerable = n.enumerable || !1),\n\t\t\t\t\t\t\t(n.configurable = !0),\n\t\t\t\t\t\t\t'value' in n && (n.writable = !0),\n\t\t\t\t\t\t\tObject.defineProperty(e, n.key, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn function(t, r, n) {\n\t\t\t\t\treturn r && e(t.prototype, r), n && e(t, n), t;\n\t\t\t\t};\n\t\t\t})(),\n\t\t\ti = u(r(0)),\n\t\t\ta = u(r(5)),\n\t\t\ts = r(1),\n\t\t\tl = u(r(2));\n\t\tfunction u(e) {\n\t\t\treturn e && e.__esModule ? e : { default: e };\n\t\t}\n\t\tvar c = function(e) {\n\t\t\t\te.forEach(function(e) {\n\t\t\t\t\te.isIntersecting && e.target.onVisible();\n\t\t\t\t});\n\t\t\t},\n\t\t\tf = {},\n\t\t\tp = function(e) {\n\t\t\t\treturn (\n\t\t\t\t\t(f[e] =\n\t\t\t\t\t\tf[e] ||\n\t\t\t\t\t\tnew IntersectionObserver(c, { rootMargin: e + 'px' })),\n\t\t\t\t\tf[e]\n\t\t\t\t);\n\t\t\t},\n\t\t\td = (function(e) {\n\t\t\t\tfunction t(e) {\n\t\t\t\t\t!(function(e, t) {\n\t\t\t\t\t\tif (!(e instanceof t))\n\t\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t\t'Cannot call a class as a function'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t})(this, t);\n\t\t\t\t\tvar r = (function(e, t) {\n\t\t\t\t\t\tif (!e)\n\t\t\t\t\t\t\tthrow new ReferenceError(\n\t\t\t\t\t\t\t\t\"this hasn't been initialised - super() hasn't been called\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn !t ||\n\t\t\t\t\t\t\t('object' != typeof t && 'function' != typeof t)\n\t\t\t\t\t\t\t? e\n\t\t\t\t\t\t\t: t;\n\t\t\t\t\t})(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t(t.__proto__ || Object.getPrototypeOf(t)).call(this, e)\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\t((r.supportsObserver =\n\t\t\t\t\t\t\t!e.scrollPosition &&\n\t\t\t\t\t\t\te.useIntersectionObserver &&\n\t\t\t\t\t\t\t(0, l.default)()),\n\t\t\t\t\t\tr.supportsObserver)\n\t\t\t\t\t) {\n\t\t\t\t\t\tvar n = e.threshold;\n\t\t\t\t\t\tr.observer = p(n);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t(function(e, t) {\n\t\t\t\t\t\tif ('function' != typeof t && null !== t)\n\t\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t\t'Super expression must either be null or a function, not ' +\n\t\t\t\t\t\t\t\t\ttypeof t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t(e.prototype = Object.create(t && t.prototype, {\n\t\t\t\t\t\t\tconstructor: {\n\t\t\t\t\t\t\t\tvalue: e,\n\t\t\t\t\t\t\t\tenumerable: !1,\n\t\t\t\t\t\t\t\twritable: !0,\n\t\t\t\t\t\t\t\tconfigurable: !0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tt &&\n\t\t\t\t\t\t\t\t(Object.setPrototypeOf\n\t\t\t\t\t\t\t\t\t? Object.setPrototypeOf(e, t)\n\t\t\t\t\t\t\t\t\t: (e.__proto__ = t));\n\t\t\t\t\t})(t, e),\n\t\t\t\t\to(t, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'componentDidMount',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.placeholder &&\n\t\t\t\t\t\t\t\t\tthis.observer &&\n\t\t\t\t\t\t\t\t\t((this.placeholder.onVisible = this.props.onVisible),\n\t\t\t\t\t\t\t\t\tthis.observer.observe(this.placeholder)),\n\t\t\t\t\t\t\t\t\tthis.supportsObserver ||\n\t\t\t\t\t\t\t\t\t\tthis.updateVisibility();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'componentWillUnmount',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.observer &&\n\t\t\t\t\t\t\t\t\tthis.observer.unobserve(this.placeholder);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'componentDidUpdate',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.supportsObserver ||\n\t\t\t\t\t\t\t\t\tthis.updateVisibility();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'getPlaceholderBoundingBox',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tvar e =\n\t\t\t\t\t\t\t\t\t\targuments.length > 0 &&\n\t\t\t\t\t\t\t\t\t\tvoid 0 !== arguments[0]\n\t\t\t\t\t\t\t\t\t\t\t? arguments[0]\n\t\t\t\t\t\t\t\t\t\t\t: this.props.scrollPosition,\n\t\t\t\t\t\t\t\t\tt = this.placeholder.getBoundingClientRect(),\n\t\t\t\t\t\t\t\t\tr = a.default.findDOMNode(this.placeholder)\n\t\t\t\t\t\t\t\t\t\t.style,\n\t\t\t\t\t\t\t\t\tn = {\n\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\tparseInt(\n\t\t\t\t\t\t\t\t\t\t\t\tr.getPropertyValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'margin-left'\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t10\n\t\t\t\t\t\t\t\t\t\t\t) || 0,\n\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\tparseInt(\n\t\t\t\t\t\t\t\t\t\t\t\tr.getPropertyValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'margin-top'\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t10\n\t\t\t\t\t\t\t\t\t\t\t) || 0,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tbottom: e.y + t.bottom + n.top,\n\t\t\t\t\t\t\t\t\tleft: e.x + t.left + n.left,\n\t\t\t\t\t\t\t\t\tright: e.x + t.right + n.left,\n\t\t\t\t\t\t\t\t\ttop: e.y + t.top + n.top,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'isPlaceholderInViewport',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t'undefined' == typeof window ||\n\t\t\t\t\t\t\t\t\t!this.placeholder\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\treturn !1;\n\t\t\t\t\t\t\t\tvar e = this.props,\n\t\t\t\t\t\t\t\t\tt = e.scrollPosition,\n\t\t\t\t\t\t\t\t\tr = e.threshold,\n\t\t\t\t\t\t\t\t\tn = this.getPlaceholderBoundingBox(t),\n\t\t\t\t\t\t\t\t\to = t.y + window.innerHeight,\n\t\t\t\t\t\t\t\t\ti = t.x,\n\t\t\t\t\t\t\t\t\ta = t.x + window.innerWidth,\n\t\t\t\t\t\t\t\t\ts = t.y;\n\t\t\t\t\t\t\t\treturn Boolean(\n\t\t\t\t\t\t\t\t\ts - r <= n.bottom &&\n\t\t\t\t\t\t\t\t\t\to + r >= n.top &&\n\t\t\t\t\t\t\t\t\t\ti - r <= n.right &&\n\t\t\t\t\t\t\t\t\t\ta + r >= n.left\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'updateVisibility',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.isPlaceholderInViewport() &&\n\t\t\t\t\t\t\t\t\tthis.props.onVisible();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'render',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tvar e = this,\n\t\t\t\t\t\t\t\t\tt = this.props,\n\t\t\t\t\t\t\t\t\tr = t.className,\n\t\t\t\t\t\t\t\t\to = t.height,\n\t\t\t\t\t\t\t\t\ta = t.placeholder,\n\t\t\t\t\t\t\t\t\ts = t.style,\n\t\t\t\t\t\t\t\t\tl = t.width;\n\t\t\t\t\t\t\t\tif (a && 'function' != typeof a.type)\n\t\t\t\t\t\t\t\t\treturn i.default.cloneElement(a, {\n\t\t\t\t\t\t\t\t\t\tref: function(t) {\n\t\t\t\t\t\t\t\t\t\t\treturn (e.placeholder = t);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tvar u = n({ display: 'inline-block' }, s);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tvoid 0 !== l && (u.width = l),\n\t\t\t\t\t\t\t\t\tvoid 0 !== o && (u.height = o),\n\t\t\t\t\t\t\t\t\ti.default.createElement(\n\t\t\t\t\t\t\t\t\t\t'span',\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: r,\n\t\t\t\t\t\t\t\t\t\t\tref: function(t) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (e.placeholder = t);\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tstyle: u,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t\t\tt\n\t\t\t\t);\n\t\t\t})(i.default.Component);\n\t\t(d.propTypes = {\n\t\t\tonVisible: s.PropTypes.func.isRequired,\n\t\t\tclassName: s.PropTypes.string,\n\t\t\theight: s.PropTypes.oneOfType([\n\t\t\t\ts.PropTypes.number,\n\t\t\t\ts.PropTypes.string,\n\t\t\t]),\n\t\t\tplaceholder: s.PropTypes.element,\n\t\t\tthreshold: s.PropTypes.number,\n\t\t\tuseIntersectionObserver: s.PropTypes.bool,\n\t\t\tscrollPosition: s.PropTypes.shape({\n\t\t\t\tx: s.PropTypes.number.isRequired,\n\t\t\t\ty: s.PropTypes.number.isRequired,\n\t\t\t}),\n\t\t\twidth: s.PropTypes.oneOfType([\n\t\t\t\ts.PropTypes.number,\n\t\t\t\ts.PropTypes.string,\n\t\t\t]),\n\t\t}),\n\t\t\t(d.defaultProps = {\n\t\t\t\tclassName: '',\n\t\t\t\tplaceholder: null,\n\t\t\t\tthreshold: 100,\n\t\t\t\tuseIntersectionObserver: !0,\n\t\t\t}),\n\t\t\t(t.default = d);\n\t},\n\tfunction(e, t) {\n\t\te.exports = require('react-dom');\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 });\n\t\tvar n =\n\t\t\t\tObject.assign ||\n\t\t\t\tfunction(e) {\n\t\t\t\t\tfor (var t = 1; t < arguments.length; t++) {\n\t\t\t\t\t\tvar r = arguments[t];\n\t\t\t\t\t\tfor (var n in r)\n\t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(r, n) &&\n\t\t\t\t\t\t\t\t(e[n] = r[n]);\n\t\t\t\t\t}\n\t\t\t\t\treturn e;\n\t\t\t\t},\n\t\t\to = (function() {\n\t\t\t\tfunction e(e, t) {\n\t\t\t\t\tfor (var r = 0; r < t.length; r++) {\n\t\t\t\t\t\tvar n = t[r];\n\t\t\t\t\t\t(n.enumerable = n.enumerable || !1),\n\t\t\t\t\t\t\t(n.configurable = !0),\n\t\t\t\t\t\t\t'value' in n && (n.writable = !0),\n\t\t\t\t\t\t\tObject.defineProperty(e, n.key, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn function(t, r, n) {\n\t\t\t\t\treturn r && e(t.prototype, r), n && e(t, n), t;\n\t\t\t\t};\n\t\t\t})(),\n\t\t\ti = p(r(0)),\n\t\t\ta = p(r(5)),\n\t\t\ts = r(1),\n\t\t\tl = p(r(13)),\n\t\t\tu = p(r(14)),\n\t\t\tc = p(r(2)),\n\t\t\tf = p(r(15));\n\t\tfunction p(e) {\n\t\t\treturn e && e.__esModule ? e : { default: e };\n\t\t}\n\t\tfunction d(e, t) {\n\t\t\tif (!e)\n\t\t\t\tthrow new ReferenceError(\n\t\t\t\t\t\"this hasn't been initialised - super() hasn't been called\"\n\t\t\t\t);\n\t\t\treturn !t || ('object' != typeof t && 'function' != typeof t)\n\t\t\t\t? e\n\t\t\t\t: t;\n\t\t}\n\t\tvar y = function() {\n\t\t\t\treturn 'undefined' == typeof window\n\t\t\t\t\t? 0\n\t\t\t\t\t: window.scrollX || window.pageXOffset;\n\t\t\t},\n\t\t\th = function() {\n\t\t\t\treturn 'undefined' == typeof window\n\t\t\t\t\t? 0\n\t\t\t\t\t: window.scrollY || window.pageYOffset;\n\t\t\t};\n\t\tt.default = function(e) {\n\t\t\tvar t = (function(t) {\n\t\t\t\tfunction r(e) {\n\t\t\t\t\t!(function(e, t) {\n\t\t\t\t\t\tif (!(e instanceof t))\n\t\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t\t'Cannot call a class as a function'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t})(this, r);\n\t\t\t\t\tvar t = d(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t(r.__proto__ || Object.getPrototypeOf(r)).call(this, e)\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\t((t.useIntersectionObserver =\n\t\t\t\t\t\t\te.useIntersectionObserver && (0, c.default)()),\n\t\t\t\t\t\tt.useIntersectionObserver)\n\t\t\t\t\t)\n\t\t\t\t\t\treturn d(t);\n\t\t\t\t\tvar n = t.onChangeScroll.bind(t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t'debounce' === e.delayMethod\n\t\t\t\t\t\t\t? (t.delayedScroll = (0, l.default)(n, e.delayTime))\n\t\t\t\t\t\t\t: 'throttle' === e.delayMethod &&\n\t\t\t\t\t\t\t (t.delayedScroll = (0, u.default)(\n\t\t\t\t\t\t\t\t\tn,\n\t\t\t\t\t\t\t\t\te.delayTime\n\t\t\t\t\t\t\t )),\n\t\t\t\t\t\t(t.state = { scrollPosition: { x: y(), y: h() } }),\n\t\t\t\t\t\t(t.baseComponentRef = i.default.createRef()),\n\t\t\t\t\t\tt\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t(function(e, t) {\n\t\t\t\t\t\tif ('function' != typeof t && null !== t)\n\t\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t\t'Super expression must either be null or a function, not ' +\n\t\t\t\t\t\t\t\t\ttypeof t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t(e.prototype = Object.create(t && t.prototype, {\n\t\t\t\t\t\t\tconstructor: {\n\t\t\t\t\t\t\t\tvalue: e,\n\t\t\t\t\t\t\t\tenumerable: !1,\n\t\t\t\t\t\t\t\twritable: !0,\n\t\t\t\t\t\t\t\tconfigurable: !0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tt &&\n\t\t\t\t\t\t\t\t(Object.setPrototypeOf\n\t\t\t\t\t\t\t\t\t? Object.setPrototypeOf(e, t)\n\t\t\t\t\t\t\t\t\t: (e.__proto__ = t));\n\t\t\t\t\t})(r, t),\n\t\t\t\t\to(r, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'componentDidMount',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.addListeners();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'componentWillUnmount',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.removeListeners();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'componentDidUpdate',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\t'undefined' == typeof window ||\n\t\t\t\t\t\t\t\t\tthis.useIntersectionObserver ||\n\t\t\t\t\t\t\t\t\t((0, f.default)(\n\t\t\t\t\t\t\t\t\t\ta.default.findDOMNode(\n\t\t\t\t\t\t\t\t\t\t\tthis.baseComponentRef.current\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t) !== this.scrollElement &&\n\t\t\t\t\t\t\t\t\t\t(this.removeListeners(),\n\t\t\t\t\t\t\t\t\t\tthis.addListeners()));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'addListeners',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\t'undefined' == typeof window ||\n\t\t\t\t\t\t\t\t\tthis.useIntersectionObserver ||\n\t\t\t\t\t\t\t\t\t((this.scrollElement = (0, f.default)(\n\t\t\t\t\t\t\t\t\t\ta.default.findDOMNode(\n\t\t\t\t\t\t\t\t\t\t\tthis.baseComponentRef.current\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\tthis.scrollElement.addEventListener(\n\t\t\t\t\t\t\t\t\t\t'scroll',\n\t\t\t\t\t\t\t\t\t\tthis.delayedScroll,\n\t\t\t\t\t\t\t\t\t\t{ passive: !0 }\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\twindow.addEventListener(\n\t\t\t\t\t\t\t\t\t\t'resize',\n\t\t\t\t\t\t\t\t\t\tthis.delayedScroll,\n\t\t\t\t\t\t\t\t\t\t{ passive: !0 }\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tthis.scrollElement !== window &&\n\t\t\t\t\t\t\t\t\t\twindow.addEventListener(\n\t\t\t\t\t\t\t\t\t\t\t'scroll',\n\t\t\t\t\t\t\t\t\t\t\tthis.delayedScroll,\n\t\t\t\t\t\t\t\t\t\t\t{ passive: !0 }\n\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'removeListeners',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\t'undefined' == typeof window ||\n\t\t\t\t\t\t\t\t\tthis.useIntersectionObserver ||\n\t\t\t\t\t\t\t\t\t(this.scrollElement.removeEventListener(\n\t\t\t\t\t\t\t\t\t\t'scroll',\n\t\t\t\t\t\t\t\t\t\tthis.delayedScroll\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\twindow.removeEventListener(\n\t\t\t\t\t\t\t\t\t\t'resize',\n\t\t\t\t\t\t\t\t\t\tthis.delayedScroll\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tthis.scrollElement !== window &&\n\t\t\t\t\t\t\t\t\t\twindow.removeEventListener(\n\t\t\t\t\t\t\t\t\t\t\t'scroll',\n\t\t\t\t\t\t\t\t\t\t\tthis.delayedScroll\n\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'onChangeScroll',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tthis.useIntersectionObserver ||\n\t\t\t\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\t\t\t\tscrollPosition: { x: y(), y: h() },\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'render',\n\t\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\t\tvar t = this.props,\n\t\t\t\t\t\t\t\t\tr =\n\t\t\t\t\t\t\t\t\t\t(t.delayMethod,\n\t\t\t\t\t\t\t\t\t\tt.delayTime,\n\t\t\t\t\t\t\t\t\t\t(function(e, t) {\n\t\t\t\t\t\t\t\t\t\t\tvar r = {};\n\t\t\t\t\t\t\t\t\t\t\tfor (var n in e)\n\t\t\t\t\t\t\t\t\t\t\t\tt.indexOf(n) >= 0 ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t(Object.prototype.hasOwnProperty.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn\n\t\t\t\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(r[n] = e[n]));\n\t\t\t\t\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t\t\t\t\t})(t, ['delayMethod', 'delayTime'])),\n\t\t\t\t\t\t\t\t\to = this.useIntersectionObserver\n\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t: this.state.scrollPosition;\n\t\t\t\t\t\t\t\treturn i.default.createElement(\n\t\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\t\tn(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tref: this.baseComponentRef,\n\t\t\t\t\t\t\t\t\t\t\tscrollPosition: o,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tr\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t\t\tr\n\t\t\t\t);\n\t\t\t})(i.default.Component);\n\t\t\treturn (\n\t\t\t\t(t.propTypes = {\n\t\t\t\t\tdelayMethod: s.PropTypes.oneOf(['debounce', 'throttle']),\n\t\t\t\t\tdelayTime: s.PropTypes.number,\n\t\t\t\t\tuseIntersectionObserver: s.PropTypes.bool,\n\t\t\t\t}),\n\t\t\t\t(t.defaultProps = {\n\t\t\t\t\tdelayMethod: 'throttle',\n\t\t\t\t\tdelayTime: 300,\n\t\t\t\t\tuseIntersectionObserver: !0,\n\t\t\t\t}),\n\t\t\t\tt\n\t\t\t);\n\t\t};\n\t},\n\tfunction(e, t) {\n\t\tvar r;\n\t\tr = (function() {\n\t\t\treturn this;\n\t\t})();\n\t\ttry {\n\t\t\tr = r || new Function('return this')();\n\t\t} catch (e) {\n\t\t\t'object' == typeof window && (r = window);\n\t\t}\n\t\te.exports = r;\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 }),\n\t\t\t(t.trackWindowScroll = t.LazyLoadComponent = t.LazyLoadImage = void 0);\n\t\tvar n = a(r(9)),\n\t\t\to = a(r(3)),\n\t\t\ti = a(r(6));\n\t\tfunction a(e) {\n\t\t\treturn e && e.__esModule ? e : { default: e };\n\t\t}\n\t\t(t.LazyLoadImage = n.default),\n\t\t\t(t.LazyLoadComponent = o.default),\n\t\t\t(t.trackWindowScroll = i.default);\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 });\n\t\tvar n =\n\t\t\t\tObject.assign ||\n\t\t\t\tfunction(e) {\n\t\t\t\t\tfor (var t = 1; t < arguments.length; t++) {\n\t\t\t\t\t\tvar r = arguments[t];\n\t\t\t\t\t\tfor (var n in r)\n\t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(r, n) &&\n\t\t\t\t\t\t\t\t(e[n] = r[n]);\n\t\t\t\t\t}\n\t\t\t\t\treturn e;\n\t\t\t\t},\n\t\t\to = (function() {\n\t\t\t\tfunction e(e, t) {\n\t\t\t\t\tfor (var r = 0; r < t.length; r++) {\n\t\t\t\t\t\tvar n = t[r];\n\t\t\t\t\t\t(n.enumerable = n.enumerable || !1),\n\t\t\t\t\t\t\t(n.configurable = !0),\n\t\t\t\t\t\t\t'value' in n && (n.writable = !0),\n\t\t\t\t\t\t\tObject.defineProperty(e, n.key, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn function(t, r, n) {\n\t\t\t\t\treturn r && e(t.prototype, r), n && e(t, n), t;\n\t\t\t\t};\n\t\t\t})(),\n\t\t\ti = l(r(0)),\n\t\t\ta = r(1),\n\t\t\ts = l(r(3));\n\t\tfunction l(e) {\n\t\t\treturn e && e.__esModule ? e : { default: e };\n\t\t}\n\t\tvar u = (function(e) {\n\t\t\tfunction t(e) {\n\t\t\t\t!(function(e, t) {\n\t\t\t\t\tif (!(e instanceof t))\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'Cannot call a class as a function'\n\t\t\t\t\t\t);\n\t\t\t\t})(this, t);\n\t\t\t\tvar r = (function(e, t) {\n\t\t\t\t\tif (!e)\n\t\t\t\t\t\tthrow new ReferenceError(\n\t\t\t\t\t\t\t\"this hasn't been initialised - super() hasn't been called\"\n\t\t\t\t\t\t);\n\t\t\t\t\treturn !t ||\n\t\t\t\t\t\t('object' != typeof t && 'function' != typeof t)\n\t\t\t\t\t\t? e\n\t\t\t\t\t\t: t;\n\t\t\t\t})(\n\t\t\t\t\tthis,\n\t\t\t\t\t(t.__proto__ || Object.getPrototypeOf(t)).call(this, e)\n\t\t\t\t);\n\t\t\t\treturn (r.state = { loaded: !1 }), r;\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t(function(e, t) {\n\t\t\t\t\tif ('function' != typeof t && null !== t)\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'Super expression must either be null or a function, not ' +\n\t\t\t\t\t\t\t\ttypeof t\n\t\t\t\t\t\t);\n\t\t\t\t\t(e.prototype = Object.create(t && t.prototype, {\n\t\t\t\t\t\tconstructor: {\n\t\t\t\t\t\t\tvalue: e,\n\t\t\t\t\t\t\tenumerable: !1,\n\t\t\t\t\t\t\twritable: !0,\n\t\t\t\t\t\t\tconfigurable: !0,\n\t\t\t\t\t\t},\n\t\t\t\t\t})),\n\t\t\t\t\t\tt &&\n\t\t\t\t\t\t\t(Object.setPrototypeOf\n\t\t\t\t\t\t\t\t? Object.setPrototypeOf(e, t)\n\t\t\t\t\t\t\t\t: (e.__proto__ = t));\n\t\t\t\t})(t, e),\n\t\t\t\to(t, [\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'onImageLoad',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\tvar e = this;\n\t\t\t\t\t\t\treturn this.state.loaded\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\t\t\t\te.props.afterLoad(),\n\t\t\t\t\t\t\t\t\t\t\te.setState({ loaded: !0 });\n\t\t\t\t\t\t\t\t };\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'getImg',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\tvar e = this.props,\n\t\t\t\t\t\t\t\tt =\n\t\t\t\t\t\t\t\t\t(e.afterLoad,\n\t\t\t\t\t\t\t\t\te.beforeLoad,\n\t\t\t\t\t\t\t\t\te.delayMethod,\n\t\t\t\t\t\t\t\t\te.delayTime,\n\t\t\t\t\t\t\t\t\te.effect,\n\t\t\t\t\t\t\t\t\te.placeholder,\n\t\t\t\t\t\t\t\t\te.placeholderSrc,\n\t\t\t\t\t\t\t\t\te.scrollPosition,\n\t\t\t\t\t\t\t\t\te.threshold,\n\t\t\t\t\t\t\t\t\te.useIntersectionObserver,\n\t\t\t\t\t\t\t\t\te.visibleByDefault,\n\t\t\t\t\t\t\t\t\te.wrapperClassName,\n\t\t\t\t\t\t\t\t\te.wrapperProps,\n\t\t\t\t\t\t\t\t\t(function(e, t) {\n\t\t\t\t\t\t\t\t\t\tvar r = {};\n\t\t\t\t\t\t\t\t\t\tfor (var n in e)\n\t\t\t\t\t\t\t\t\t\t\tt.indexOf(n) >= 0 ||\n\t\t\t\t\t\t\t\t\t\t\t\t(Object.prototype.hasOwnProperty.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\t\t\t\t\t\tn\n\t\t\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t(r[n] = e[n]));\n\t\t\t\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t\t\t\t})(e, [\n\t\t\t\t\t\t\t\t\t\t'afterLoad',\n\t\t\t\t\t\t\t\t\t\t'beforeLoad',\n\t\t\t\t\t\t\t\t\t\t'delayMethod',\n\t\t\t\t\t\t\t\t\t\t'delayTime',\n\t\t\t\t\t\t\t\t\t\t'effect',\n\t\t\t\t\t\t\t\t\t\t'placeholder',\n\t\t\t\t\t\t\t\t\t\t'placeholderSrc',\n\t\t\t\t\t\t\t\t\t\t'scrollPosition',\n\t\t\t\t\t\t\t\t\t\t'threshold',\n\t\t\t\t\t\t\t\t\t\t'useIntersectionObserver',\n\t\t\t\t\t\t\t\t\t\t'visibleByDefault',\n\t\t\t\t\t\t\t\t\t\t'wrapperClassName',\n\t\t\t\t\t\t\t\t\t\t'wrapperProps',\n\t\t\t\t\t\t\t\t\t]));\n\t\t\t\t\t\t\treturn i.default.createElement(\n\t\t\t\t\t\t\t\t'img',\n\t\t\t\t\t\t\t\tn({ onLoad: this.onImageLoad() }, t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'getLazyLoadImage',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\tvar e = this.props,\n\t\t\t\t\t\t\t\tt = e.beforeLoad,\n\t\t\t\t\t\t\t\tr = e.className,\n\t\t\t\t\t\t\t\tn = e.delayMethod,\n\t\t\t\t\t\t\t\to = e.delayTime,\n\t\t\t\t\t\t\t\ta = e.height,\n\t\t\t\t\t\t\t\tl = e.placeholder,\n\t\t\t\t\t\t\t\tu = e.scrollPosition,\n\t\t\t\t\t\t\t\tc = e.style,\n\t\t\t\t\t\t\t\tf = e.threshold,\n\t\t\t\t\t\t\t\tp = e.useIntersectionObserver,\n\t\t\t\t\t\t\t\td = e.visibleByDefault,\n\t\t\t\t\t\t\t\ty = e.width;\n\t\t\t\t\t\t\treturn i.default.createElement(\n\t\t\t\t\t\t\t\ts.default,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tbeforeLoad: t,\n\t\t\t\t\t\t\t\t\tclassName: r,\n\t\t\t\t\t\t\t\t\tdelayMethod: n,\n\t\t\t\t\t\t\t\t\tdelayTime: o,\n\t\t\t\t\t\t\t\t\theight: a,\n\t\t\t\t\t\t\t\t\tplaceholder: l,\n\t\t\t\t\t\t\t\t\tscrollPosition: u,\n\t\t\t\t\t\t\t\t\tstyle: c,\n\t\t\t\t\t\t\t\t\tthreshold: f,\n\t\t\t\t\t\t\t\t\tuseIntersectionObserver: p,\n\t\t\t\t\t\t\t\t\tvisibleByDefault: d,\n\t\t\t\t\t\t\t\t\twidth: y,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tthis.getImg()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'getWrappedLazyLoadImage',\n\t\t\t\t\t\tvalue: function(e) {\n\t\t\t\t\t\t\tvar t = this.props,\n\t\t\t\t\t\t\t\tr = t.effect,\n\t\t\t\t\t\t\t\to = t.height,\n\t\t\t\t\t\t\t\ta = t.placeholderSrc,\n\t\t\t\t\t\t\t\ts = t.width,\n\t\t\t\t\t\t\t\tl = t.wrapperClassName,\n\t\t\t\t\t\t\t\tu = t.wrapperProps,\n\t\t\t\t\t\t\t\tc = this.state.loaded,\n\t\t\t\t\t\t\t\tf = c ? ' lazy-load-image-loaded' : '';\n\t\t\t\t\t\t\treturn i.default.createElement(\n\t\t\t\t\t\t\t\t'span',\n\t\t\t\t\t\t\t\tn(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName:\n\t\t\t\t\t\t\t\t\t\t\tl +\n\t\t\t\t\t\t\t\t\t\t\t' lazy-load-image-background ' +\n\t\t\t\t\t\t\t\t\t\t\tr +\n\t\t\t\t\t\t\t\t\t\t\tf,\n\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\tbackgroundImage:\n\t\t\t\t\t\t\t\t\t\t\t\tc || !a ? '' : 'url(' + a + ')',\n\t\t\t\t\t\t\t\t\t\t\tbackgroundSize:\n\t\t\t\t\t\t\t\t\t\t\t\tc || !a ? '' : '100% 100%',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'inline-block',\n\t\t\t\t\t\t\t\t\t\t\theight: o,\n\t\t\t\t\t\t\t\t\t\t\twidth: s,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tu\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\te\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'render',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\tvar e = this.props,\n\t\t\t\t\t\t\t\tt = e.effect,\n\t\t\t\t\t\t\t\tr = e.placeholderSrc,\n\t\t\t\t\t\t\t\tn = e.visibleByDefault,\n\t\t\t\t\t\t\t\to = e.wrapperClassName,\n\t\t\t\t\t\t\t\ti = e.wrapperProps,\n\t\t\t\t\t\t\t\ta = this.getLazyLoadImage();\n\t\t\t\t\t\t\treturn ((t || r) && !n) || o || i\n\t\t\t\t\t\t\t\t? this.getWrappedLazyLoadImage(a)\n\t\t\t\t\t\t\t\t: a;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]),\n\t\t\t\tt\n\t\t\t);\n\t\t})(i.default.Component);\n\t\t(u.propTypes = {\n\t\t\tafterLoad: a.PropTypes.func,\n\t\t\tbeforeLoad: a.PropTypes.func,\n\t\t\tdelayMethod: a.PropTypes.string,\n\t\t\tdelayTime: a.PropTypes.number,\n\t\t\teffect: a.PropTypes.string,\n\t\t\tplaceholderSrc: a.PropTypes.string,\n\t\t\tthreshold: a.PropTypes.number,\n\t\t\tuseIntersectionObserver: a.PropTypes.bool,\n\t\t\tvisibleByDefault: a.PropTypes.bool,\n\t\t\twrapperClassName: a.PropTypes.string,\n\t\t\twrapperProps: a.PropTypes.object,\n\t\t}),\n\t\t\t(u.defaultProps = {\n\t\t\t\tafterLoad: function() {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tbeforeLoad: function() {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tdelayMethod: 'throttle',\n\t\t\t\tdelayTime: 300,\n\t\t\t\teffect: '',\n\t\t\t\tplaceholderSrc: null,\n\t\t\t\tthreshold: 100,\n\t\t\t\tuseIntersectionObserver: !0,\n\t\t\t\tvisibleByDefault: !1,\n\t\t\t\twrapperClassName: '',\n\t\t\t}),\n\t\t\t(t.default = u);\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tvar n = r(11);\n\t\tfunction o() {}\n\t\tfunction i() {}\n\t\t(i.resetWarningCache = o),\n\t\t\t(e.exports = function() {\n\t\t\t\tfunction e(e, t, r, o, i, a) {\n\t\t\t\t\tif (a !== n) {\n\t\t\t\t\t\tvar s = new Error(\n\t\t\t\t\t\t\t'Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthrow ((s.name = 'Invariant Violation'), s);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfunction t() {\n\t\t\t\t\treturn e;\n\t\t\t\t}\n\t\t\t\te.isRequired = e;\n\t\t\t\tvar r = {\n\t\t\t\t\tarray: e,\n\t\t\t\t\tbool: e,\n\t\t\t\t\tfunc: e,\n\t\t\t\t\tnumber: e,\n\t\t\t\t\tobject: e,\n\t\t\t\t\tstring: e,\n\t\t\t\t\tsymbol: e,\n\t\t\t\t\tany: e,\n\t\t\t\t\tarrayOf: t,\n\t\t\t\t\telement: e,\n\t\t\t\t\telementType: e,\n\t\t\t\t\tinstanceOf: t,\n\t\t\t\t\tnode: e,\n\t\t\t\t\tobjectOf: t,\n\t\t\t\t\toneOf: t,\n\t\t\t\t\toneOfType: t,\n\t\t\t\t\tshape: t,\n\t\t\t\t\texact: t,\n\t\t\t\t\tcheckPropTypes: i,\n\t\t\t\t\tresetWarningCache: o,\n\t\t\t\t};\n\t\t\t\treturn (r.PropTypes = r), r;\n\t\t\t});\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\te.exports = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 });\n\t\tvar n = (function() {\n\t\t\t\tfunction e(e, t) {\n\t\t\t\t\tfor (var r = 0; r < t.length; r++) {\n\t\t\t\t\t\tvar n = t[r];\n\t\t\t\t\t\t(n.enumerable = n.enumerable || !1),\n\t\t\t\t\t\t\t(n.configurable = !0),\n\t\t\t\t\t\t\t'value' in n && (n.writable = !0),\n\t\t\t\t\t\t\tObject.defineProperty(e, n.key, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn function(t, r, n) {\n\t\t\t\t\treturn r && e(t.prototype, r), n && e(t, n), t;\n\t\t\t\t};\n\t\t\t})(),\n\t\t\to = s(r(0)),\n\t\t\ti = s(r(4)),\n\t\t\ta = s(r(6));\n\t\tfunction s(e) {\n\t\t\treturn e && e.__esModule ? e : { default: e };\n\t\t}\n\t\tvar l = (function(e) {\n\t\t\tfunction t(e) {\n\t\t\t\treturn (\n\t\t\t\t\t(function(e, t) {\n\t\t\t\t\t\tif (!(e instanceof t))\n\t\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t\t'Cannot call a class as a function'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t})(this, t),\n\t\t\t\t\t(function(e, t) {\n\t\t\t\t\t\tif (!e)\n\t\t\t\t\t\t\tthrow new ReferenceError(\n\t\t\t\t\t\t\t\t\"this hasn't been initialised - super() hasn't been called\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn !t ||\n\t\t\t\t\t\t\t('object' != typeof t && 'function' != typeof t)\n\t\t\t\t\t\t\t? e\n\t\t\t\t\t\t\t: t;\n\t\t\t\t\t})(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t(t.__proto__ || Object.getPrototypeOf(t)).call(this, e)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t(function(e, t) {\n\t\t\t\t\tif ('function' != typeof t && null !== t)\n\t\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t\t'Super expression must either be null or a function, not ' +\n\t\t\t\t\t\t\t\ttypeof t\n\t\t\t\t\t\t);\n\t\t\t\t\t(e.prototype = Object.create(t && t.prototype, {\n\t\t\t\t\t\tconstructor: {\n\t\t\t\t\t\t\tvalue: e,\n\t\t\t\t\t\t\tenumerable: !1,\n\t\t\t\t\t\t\twritable: !0,\n\t\t\t\t\t\t\tconfigurable: !0,\n\t\t\t\t\t\t},\n\t\t\t\t\t})),\n\t\t\t\t\t\tt &&\n\t\t\t\t\t\t\t(Object.setPrototypeOf\n\t\t\t\t\t\t\t\t? Object.setPrototypeOf(e, t)\n\t\t\t\t\t\t\t\t: (e.__proto__ = t));\n\t\t\t\t})(t, e),\n\t\t\t\tn(t, [\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'render',\n\t\t\t\t\t\tvalue: function() {\n\t\t\t\t\t\t\treturn o.default.createElement(\n\t\t\t\t\t\t\t\ti.default,\n\t\t\t\t\t\t\t\tthis.props\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]),\n\t\t\t\tt\n\t\t\t);\n\t\t})(o.default.Component);\n\t\tt.default = (0, a.default)(l);\n\t},\n\tfunction(e, t, r) {\n\t\t(function(t) {\n\t\t\tvar r = 'Expected a function',\n\t\t\t\tn = NaN,\n\t\t\t\to = '[object Symbol]',\n\t\t\t\ti = /^\\s+|\\s+$/g,\n\t\t\t\ta = /^[-+]0x[0-9a-f]+$/i,\n\t\t\t\ts = /^0b[01]+$/i,\n\t\t\t\tl = /^0o[0-7]+$/i,\n\t\t\t\tu = parseInt,\n\t\t\t\tc = 'object' == typeof t && t && t.Object === Object && t,\n\t\t\t\tf =\n\t\t\t\t\t'object' == typeof self &&\n\t\t\t\t\tself &&\n\t\t\t\t\tself.Object === Object &&\n\t\t\t\t\tself,\n\t\t\t\tp = c || f || Function('return this')(),\n\t\t\t\td = Object.prototype.toString,\n\t\t\t\ty = Math.max,\n\t\t\t\th = Math.min,\n\t\t\t\tb = function() {\n\t\t\t\t\treturn p.Date.now();\n\t\t\t\t};\n\t\t\tfunction v(e) {\n\t\t\t\tvar t = typeof e;\n\t\t\t\treturn !!e && ('object' == t || 'function' == t);\n\t\t\t}\n\t\t\tfunction m(e) {\n\t\t\t\tif ('number' == typeof e) return e;\n\t\t\t\tif (\n\t\t\t\t\t(function(e) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'symbol' == typeof e ||\n\t\t\t\t\t\t\t((function(e) {\n\t\t\t\t\t\t\t\treturn !!e && 'object' == typeof e;\n\t\t\t\t\t\t\t})(e) &&\n\t\t\t\t\t\t\t\td.call(e) == o)\n\t\t\t\t\t\t);\n\t\t\t\t\t})(e)\n\t\t\t\t)\n\t\t\t\t\treturn n;\n\t\t\t\tif (v(e)) {\n\t\t\t\t\tvar t = 'function' == typeof e.valueOf ? e.valueOf() : e;\n\t\t\t\t\te = v(t) ? t + '' : t;\n\t\t\t\t}\n\t\t\t\tif ('string' != typeof e) return 0 === e ? e : +e;\n\t\t\t\te = e.replace(i, '');\n\t\t\t\tvar r = s.test(e);\n\t\t\t\treturn r || l.test(e)\n\t\t\t\t\t? u(e.slice(2), r ? 2 : 8)\n\t\t\t\t\t: a.test(e)\n\t\t\t\t\t? n\n\t\t\t\t\t: +e;\n\t\t\t}\n\t\t\te.exports = function(e, t, n) {\n\t\t\t\tvar o,\n\t\t\t\t\ti,\n\t\t\t\t\ta,\n\t\t\t\t\ts,\n\t\t\t\t\tl,\n\t\t\t\t\tu,\n\t\t\t\t\tc = 0,\n\t\t\t\t\tf = !1,\n\t\t\t\t\tp = !1,\n\t\t\t\t\td = !0;\n\t\t\t\tif ('function' != typeof e) throw new TypeError(r);\n\t\t\t\tfunction w(t) {\n\t\t\t\t\tvar r = o,\n\t\t\t\t\t\tn = i;\n\t\t\t\t\treturn (o = i = void 0), (c = t), (s = e.apply(n, r));\n\t\t\t\t}\n\t\t\t\tfunction O(e) {\n\t\t\t\t\tvar r = e - u;\n\t\t\t\t\treturn void 0 === u || r >= t || r < 0 || (p && e - c >= a);\n\t\t\t\t}\n\t\t\t\tfunction g() {\n\t\t\t\t\tvar e = b();\n\t\t\t\t\tif (O(e)) return P(e);\n\t\t\t\t\tl = setTimeout(\n\t\t\t\t\t\tg,\n\t\t\t\t\t\t(function(e) {\n\t\t\t\t\t\t\tvar r = t - (e - u);\n\t\t\t\t\t\t\treturn p ? h(r, a - (e - c)) : r;\n\t\t\t\t\t\t})(e)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tfunction P(e) {\n\t\t\t\t\treturn (l = void 0), d && o ? w(e) : ((o = i = void 0), s);\n\t\t\t\t}\n\t\t\t\tfunction T() {\n\t\t\t\t\tvar e = b(),\n\t\t\t\t\t\tr = O(e);\n\t\t\t\t\tif (((o = arguments), (i = this), (u = e), r)) {\n\t\t\t\t\t\tif (void 0 === l)\n\t\t\t\t\t\t\treturn (function(e) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t(c = e),\n\t\t\t\t\t\t\t\t\t(l = setTimeout(g, t)),\n\t\t\t\t\t\t\t\t\tf ? w(e) : s\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})(u);\n\t\t\t\t\t\tif (p) return (l = setTimeout(g, t)), w(u);\n\t\t\t\t\t}\n\t\t\t\t\treturn void 0 === l && (l = setTimeout(g, t)), s;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t(t = m(t) || 0),\n\t\t\t\t\tv(n) &&\n\t\t\t\t\t\t((f = !!n.leading),\n\t\t\t\t\t\t(a = (p = 'maxWait' in n)\n\t\t\t\t\t\t\t? y(m(n.maxWait) || 0, t)\n\t\t\t\t\t\t\t: a),\n\t\t\t\t\t\t(d = 'trailing' in n ? !!n.trailing : d)),\n\t\t\t\t\t(T.cancel = function() {\n\t\t\t\t\t\tvoid 0 !== l && clearTimeout(l),\n\t\t\t\t\t\t\t(c = 0),\n\t\t\t\t\t\t\t(o = u = i = l = void 0);\n\t\t\t\t\t}),\n\t\t\t\t\t(T.flush = function() {\n\t\t\t\t\t\treturn void 0 === l ? s : P(b());\n\t\t\t\t\t}),\n\t\t\t\t\tT\n\t\t\t\t);\n\t\t\t};\n\t\t}.call(this, r(7)));\n\t},\n\tfunction(e, t, r) {\n\t\t(function(t) {\n\t\t\tvar r = 'Expected a function',\n\t\t\t\tn = NaN,\n\t\t\t\to = '[object Symbol]',\n\t\t\t\ti = /^\\s+|\\s+$/g,\n\t\t\t\ta = /^[-+]0x[0-9a-f]+$/i,\n\t\t\t\ts = /^0b[01]+$/i,\n\t\t\t\tl = /^0o[0-7]+$/i,\n\t\t\t\tu = parseInt,\n\t\t\t\tc = 'object' == typeof t && t && t.Object === Object && t,\n\t\t\t\tf =\n\t\t\t\t\t'object' == typeof self &&\n\t\t\t\t\tself &&\n\t\t\t\t\tself.Object === Object &&\n\t\t\t\t\tself,\n\t\t\t\tp = c || f || Function('return this')(),\n\t\t\t\td = Object.prototype.toString,\n\t\t\t\ty = Math.max,\n\t\t\t\th = Math.min,\n\t\t\t\tb = function() {\n\t\t\t\t\treturn p.Date.now();\n\t\t\t\t};\n\t\t\tfunction v(e, t, n) {\n\t\t\t\tvar o,\n\t\t\t\t\ti,\n\t\t\t\t\ta,\n\t\t\t\t\ts,\n\t\t\t\t\tl,\n\t\t\t\t\tu,\n\t\t\t\t\tc = 0,\n\t\t\t\t\tf = !1,\n\t\t\t\t\tp = !1,\n\t\t\t\t\td = !0;\n\t\t\t\tif ('function' != typeof e) throw new TypeError(r);\n\t\t\t\tfunction v(t) {\n\t\t\t\t\tvar r = o,\n\t\t\t\t\t\tn = i;\n\t\t\t\t\treturn (o = i = void 0), (c = t), (s = e.apply(n, r));\n\t\t\t\t}\n\t\t\t\tfunction O(e) {\n\t\t\t\t\tvar r = e - u;\n\t\t\t\t\treturn void 0 === u || r >= t || r < 0 || (p && e - c >= a);\n\t\t\t\t}\n\t\t\t\tfunction g() {\n\t\t\t\t\tvar e = b();\n\t\t\t\t\tif (O(e)) return P(e);\n\t\t\t\t\tl = setTimeout(\n\t\t\t\t\t\tg,\n\t\t\t\t\t\t(function(e) {\n\t\t\t\t\t\t\tvar r = t - (e - u);\n\t\t\t\t\t\t\treturn p ? h(r, a - (e - c)) : r;\n\t\t\t\t\t\t})(e)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tfunction P(e) {\n\t\t\t\t\treturn (l = void 0), d && o ? v(e) : ((o = i = void 0), s);\n\t\t\t\t}\n\t\t\t\tfunction T() {\n\t\t\t\t\tvar e = b(),\n\t\t\t\t\t\tr = O(e);\n\t\t\t\t\tif (((o = arguments), (i = this), (u = e), r)) {\n\t\t\t\t\t\tif (void 0 === l)\n\t\t\t\t\t\t\treturn (function(e) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t(c = e),\n\t\t\t\t\t\t\t\t\t(l = setTimeout(g, t)),\n\t\t\t\t\t\t\t\t\tf ? v(e) : s\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})(u);\n\t\t\t\t\t\tif (p) return (l = setTimeout(g, t)), v(u);\n\t\t\t\t\t}\n\t\t\t\t\treturn void 0 === l && (l = setTimeout(g, t)), s;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t(t = w(t) || 0),\n\t\t\t\t\tm(n) &&\n\t\t\t\t\t\t((f = !!n.leading),\n\t\t\t\t\t\t(a = (p = 'maxWait' in n)\n\t\t\t\t\t\t\t? y(w(n.maxWait) || 0, t)\n\t\t\t\t\t\t\t: a),\n\t\t\t\t\t\t(d = 'trailing' in n ? !!n.trailing : d)),\n\t\t\t\t\t(T.cancel = function() {\n\t\t\t\t\t\tvoid 0 !== l && clearTimeout(l),\n\t\t\t\t\t\t\t(c = 0),\n\t\t\t\t\t\t\t(o = u = i = l = void 0);\n\t\t\t\t\t}),\n\t\t\t\t\t(T.flush = function() {\n\t\t\t\t\t\treturn void 0 === l ? s : P(b());\n\t\t\t\t\t}),\n\t\t\t\t\tT\n\t\t\t\t);\n\t\t\t}\n\t\t\tfunction m(e) {\n\t\t\t\tvar t = typeof e;\n\t\t\t\treturn !!e && ('object' == t || 'function' == t);\n\t\t\t}\n\t\t\tfunction w(e) {\n\t\t\t\tif ('number' == typeof e) return e;\n\t\t\t\tif (\n\t\t\t\t\t(function(e) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'symbol' == typeof e ||\n\t\t\t\t\t\t\t((function(e) {\n\t\t\t\t\t\t\t\treturn !!e && 'object' == typeof e;\n\t\t\t\t\t\t\t})(e) &&\n\t\t\t\t\t\t\t\td.call(e) == o)\n\t\t\t\t\t\t);\n\t\t\t\t\t})(e)\n\t\t\t\t)\n\t\t\t\t\treturn n;\n\t\t\t\tif (m(e)) {\n\t\t\t\t\tvar t = 'function' == typeof e.valueOf ? e.valueOf() : e;\n\t\t\t\t\te = m(t) ? t + '' : t;\n\t\t\t\t}\n\t\t\t\tif ('string' != typeof e) return 0 === e ? e : +e;\n\t\t\t\te = e.replace(i, '');\n\t\t\t\tvar r = s.test(e);\n\t\t\t\treturn r || l.test(e)\n\t\t\t\t\t? u(e.slice(2), r ? 2 : 8)\n\t\t\t\t\t: a.test(e)\n\t\t\t\t\t? n\n\t\t\t\t\t: +e;\n\t\t\t}\n\t\t\te.exports = function(e, t, n) {\n\t\t\t\tvar o = !0,\n\t\t\t\t\ti = !0;\n\t\t\t\tif ('function' != typeof e) throw new TypeError(r);\n\t\t\t\treturn (\n\t\t\t\t\tm(n) &&\n\t\t\t\t\t\t((o = 'leading' in n ? !!n.leading : o),\n\t\t\t\t\t\t(i = 'trailing' in n ? !!n.trailing : i)),\n\t\t\t\t\tv(e, t, { leading: o, maxWait: t, trailing: i })\n\t\t\t\t);\n\t\t\t};\n\t\t}.call(this, r(7)));\n\t},\n\tfunction(e, t, r) {\n\t\t'use strict';\n\t\tObject.defineProperty(t, '__esModule', { value: !0 });\n\t\tvar n = function(e, t) {\n\t\t\t\treturn 'undefined' == typeof getComputedStyle\n\t\t\t\t\t? e.style[t]\n\t\t\t\t\t: getComputedStyle(e, null).getPropertyValue(t);\n\t\t\t},\n\t\t\to = function(e) {\n\t\t\t\treturn (\n\t\t\t\t\tn(e, 'overflow') + n(e, 'overflow-y') + n(e, 'overflow-x')\n\t\t\t\t);\n\t\t\t};\n\t\tt.default = function(e) {\n\t\t\tif (!(e instanceof HTMLElement)) return window;\n\t\t\tfor (\n\t\t\t\tvar t = e;\n\t\t\t\tt &&\n\t\t\t\tt !== document.body &&\n\t\t\t\tt !== document.documentElement &&\n\t\t\t\tt.parentNode;\n\n\t\t\t) {\n\t\t\t\tif (/(scroll|auto)/.test(o(t))) return t;\n\t\t\t\tt = t.parentNode;\n\t\t\t}\n\t\t\treturn window;\n\t\t};\n\t},\n]);\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`])\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.width;\n const height =\n sizes.height || element.clientHeight || result.height;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop);\n const marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n const isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false,\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","'use strict';\n\nvar origSymbol = global.Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","/**\n * lodash 3.0.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _implementation = require('./implementation');\n\nvar _implementation2 = _interopRequireDefault(_implementation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _react2.default.createContext || _implementation2.default;\nmodule.exports = exports['default'];","import { useEffect, useRef } from 'react';\n/**\n * Store the last of some value. Tracked via a `Ref` only updating it\n * after the component renders.\n *\n * Helpful if you need to compare a prop value to it's previous value during render.\n *\n * ```ts\n * function Component(props) {\n * const lastProps = usePrevious(props)\n *\n * if (lastProps.foo !== props.foo)\n * resetValueFromProps(props.foo)\n * }\n * ```\n *\n * @param value the value to track\n */\n\nexport default function usePrevious(value) {\n var ref = useRef(null);\n useEffect(function () {\n ref.current = value;\n });\n return ref.current;\n}","/**\n * Common (non-printable) keycodes for `keydown` and `keyup` events. Note that\n * `keypress` handles things differently and may not return the same values.\n */\nexport var BACKSPACE = 8;\nexport var TAB = 9;\nexport var RETURN = 13;\nexport var ESC = 27;\nexport var SPACE = 32;\nexport var LEFT = 37;\nexport var UP = 38;\nexport var RIGHT = 39;\nexport var DOWN = 40;\nexport var DEFAULT_LABELKEY = 'label';\nexport var ALIGN = {\n JUSTIFY: 'justify',\n LEFT: 'left',\n RIGHT: 'right'\n};\nexport var SIZE = {\n LARGE: 'large',\n LG: 'lg',\n SM: 'sm',\n SMALL: 'small'\n};","import { DEFAULT_LABELKEY } from '../constants';\nexport default function getStringLabelKey(labelKey) {\n return typeof labelKey === 'string' ? labelKey : DEFAULT_LABELKEY;\n}","var idCounter = 0;\nexport function head(arr) {\n return Array.isArray(arr) && arr.length ? arr[0] : undefined;\n}\nexport function isFunction(value) {\n return typeof value === 'function';\n}\nexport function isString(value) {\n return typeof value === 'string';\n}\nexport function noop() {}\nexport function pick(obj, keys) {\n var result = {};\n keys.forEach(function (k) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n result[k] = obj[k];\n }\n });\n return result;\n}\nexport function uniqueId(prefix) {\n idCounter += 1;\n return (prefix == null ? '' : String(prefix)) + idCounter;\n} // Export for testing purposes.\n\nexport function valuesPolyfill(obj) {\n return Object.keys(obj).reduce(function (accum, key) {\n if (Object.prototype.propertyIsEnumerable.call(obj, key)) {\n accum.push(obj[key]);\n }\n\n return accum;\n }, []);\n}\nexport function values(obj) {\n return isFunction(Object.values) ? Object.values(obj) : valuesPolyfill(obj);\n}","import invariant from 'invariant';\nimport getStringLabelKey from './getStringLabelKey';\nimport { isFunction, isString } from './nodash';\n\n/**\n * Retrieves the display string from an option. Options can be the string\n * themselves, or an object with a defined display string. Anything else throws\n * an error.\n */\nfunction getOptionLabel(option, labelKey) {\n // Handle internally created options first.\n if (!isString(option) && (option.paginationOption || option.customOption)) {\n return option[getStringLabelKey(labelKey)];\n }\n\n var optionLabel;\n\n if (isFunction(labelKey)) {\n optionLabel = labelKey(option);\n } else if (isString(option)) {\n optionLabel = option;\n } else {\n // `option` is an object and `labelKey` is a string.\n optionLabel = option[labelKey];\n }\n\n !isString(optionLabel) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'One or more options does not have a valid label string. Check the ' + '`labelKey` prop to ensure that it matches the correct option key and ' + 'provides a string for filtering and display.') : invariant(false) : void 0;\n return optionLabel;\n}\n\nexport default getOptionLabel;","import getOptionLabel from './getOptionLabel';\n\nfunction addCustomOption(results, props) {\n var allowNew = props.allowNew,\n labelKey = props.labelKey,\n text = props.text;\n\n if (!allowNew || !text.trim()) {\n return false;\n } // If the consumer has provided a callback, use that to determine whether or\n // not to add the custom option.\n\n\n if (typeof allowNew === 'function') {\n return allowNew(results, props);\n } // By default, don't add the custom option if there is an exact text match\n // with an existing option.\n\n\n return !results.some(function (o) {\n return getOptionLabel(o, labelKey) === text;\n });\n}\n\nexport default addCustomOption;","import { isString } from './nodash';\nexport default function getOptionProperty(option, key) {\n if (isString(option)) {\n return undefined;\n }\n\n return option[key];\n}","/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Taken from: http://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/18391901#18391901\n */\n\n/* eslint-disable max-len */\nvar map = [{\n base: 'A',\n letters: \"A\\u24B6\\uFF21\\xC0\\xC1\\xC2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\xC3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\xC4\\u01DE\\u1EA2\\xC5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\"\n}, {\n base: 'AA',\n letters: \"\\uA732\"\n}, {\n base: 'AE',\n letters: \"\\xC6\\u01FC\\u01E2\"\n}, {\n base: 'AO',\n letters: \"\\uA734\"\n}, {\n base: 'AU',\n letters: \"\\uA736\"\n}, {\n base: 'AV',\n letters: \"\\uA738\\uA73A\"\n}, {\n base: 'AY',\n letters: \"\\uA73C\"\n}, {\n base: 'B',\n letters: \"B\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181\"\n}, {\n base: 'C',\n letters: \"C\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\xC7\\u1E08\\u0187\\u023B\\uA73E\"\n}, {\n base: 'D',\n letters: \"D\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\\xD0\"\n}, {\n base: 'DZ',\n letters: \"\\u01F1\\u01C4\"\n}, {\n base: 'Dz',\n letters: \"\\u01F2\\u01C5\"\n}, {\n base: 'E',\n letters: \"E\\u24BA\\uFF25\\xC8\\xC9\\xCA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\xCB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\"\n}, {\n base: 'F',\n letters: \"F\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\"\n}, {\n base: 'G',\n letters: \"G\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\"\n}, {\n base: 'H',\n letters: \"H\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\"\n}, {\n base: 'I',\n letters: \"I\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\"\n}, {\n base: 'J',\n letters: \"J\\u24BF\\uFF2A\\u0134\\u0248\"\n}, {\n base: 'K',\n letters: \"K\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\"\n}, {\n base: 'L',\n letters: \"L\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\"\n}, {\n base: 'LJ',\n letters: \"\\u01C7\"\n}, {\n base: 'Lj',\n letters: \"\\u01C8\"\n}, {\n base: 'M',\n letters: \"M\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\"\n}, {\n base: 'N',\n letters: \"N\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\"\n}, {\n base: 'NJ',\n letters: \"\\u01CA\"\n}, {\n base: 'Nj',\n letters: \"\\u01CB\"\n}, {\n base: 'O',\n letters: \"O\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\"\n}, {\n base: 'OI',\n letters: \"\\u01A2\"\n}, {\n base: 'OO',\n letters: \"\\uA74E\"\n}, {\n base: 'OU',\n letters: \"\\u0222\"\n}, {\n base: 'OE',\n letters: \"\\x8C\\u0152\"\n}, {\n base: 'oe',\n letters: \"\\x9C\\u0153\"\n}, {\n base: 'P',\n letters: \"P\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\"\n}, {\n base: 'Q',\n letters: \"Q\\u24C6\\uFF31\\uA756\\uA758\\u024A\"\n}, {\n base: 'R',\n letters: \"R\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\"\n}, {\n base: 'S',\n letters: \"S\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\"\n}, {\n base: 'T',\n letters: \"T\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\"\n}, {\n base: 'TZ',\n letters: \"\\uA728\"\n}, {\n base: 'U',\n letters: \"U\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\"\n}, {\n base: 'V',\n letters: \"V\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\"\n}, {\n base: 'VY',\n letters: \"\\uA760\"\n}, {\n base: 'W',\n letters: \"W\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\"\n}, {\n base: 'X',\n letters: \"X\\u24CD\\uFF38\\u1E8A\\u1E8C\"\n}, {\n base: 'Y',\n letters: \"Y\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\"\n}, {\n base: 'Z',\n letters: \"Z\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\"\n}, {\n base: 'a',\n letters: \"a\\u24D0\\uFF41\\u1E9A\\xE0\\xE1\\xE2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\xE3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\xE4\\u01DF\\u1EA3\\xE5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\"\n}, {\n base: 'aa',\n letters: \"\\uA733\"\n}, {\n base: 'ae',\n letters: \"\\xE6\\u01FD\\u01E3\"\n}, {\n base: 'ao',\n letters: \"\\uA735\"\n}, {\n base: 'au',\n letters: \"\\uA737\"\n}, {\n base: 'av',\n letters: \"\\uA739\\uA73B\"\n}, {\n base: 'ay',\n letters: \"\\uA73D\"\n}, {\n base: 'b',\n letters: \"b\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\"\n}, {\n base: 'c',\n letters: \"c\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\xE7\\u1E09\\u0188\\u023C\\uA73F\\u2184\"\n}, {\n base: 'd',\n letters: \"d\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\"\n}, {\n base: 'dz',\n letters: \"\\u01F3\\u01C6\"\n}, {\n base: 'e',\n letters: \"e\\u24D4\\uFF45\\xE8\\xE9\\xEA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\xEB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD\"\n}, {\n base: 'f',\n letters: \"f\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C\"\n}, {\n base: 'g',\n letters: \"g\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F\"\n}, {\n base: 'h',\n letters: \"h\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\"\n}, {\n base: 'hv',\n letters: \"\\u0195\"\n}, {\n base: 'i',\n letters: \"i\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\"\n}, {\n base: 'j',\n letters: \"j\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\"\n}, {\n base: 'k',\n letters: \"k\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\"\n}, {\n base: 'l',\n letters: \"l\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\"\n}, {\n base: 'lj',\n letters: \"\\u01C9\"\n}, {\n base: 'm',\n letters: \"m\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\"\n}, {\n base: 'n',\n letters: \"n\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\"\n}, {\n base: 'nj',\n letters: \"\\u01CC\"\n}, {\n base: 'o',\n letters: \"o\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\u0254\\uA74B\\uA74D\\u0275\"\n}, {\n base: 'oi',\n letters: \"\\u01A3\"\n}, {\n base: 'ou',\n letters: \"\\u0223\"\n}, {\n base: 'oo',\n letters: \"\\uA74F\"\n}, {\n base: 'p',\n letters: \"p\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\"\n}, {\n base: 'q',\n letters: \"q\\u24E0\\uFF51\\u024B\\uA757\\uA759\"\n}, {\n base: 'r',\n letters: \"r\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\"\n}, {\n base: 's',\n letters: \"s\\u24E2\\uFF53\\xDF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\"\n}, {\n base: 't',\n letters: \"t\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\"\n}, {\n base: 'tz',\n letters: \"\\uA729\"\n}, {\n base: 'u',\n letters: \"u\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\"\n}, {\n base: 'v',\n letters: \"v\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\"\n}, {\n base: 'vy',\n letters: \"\\uA761\"\n}, {\n base: 'w',\n letters: \"w\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\"\n}, {\n base: 'x',\n letters: \"x\\u24E7\\uFF58\\u1E8B\\u1E8D\"\n}, {\n base: 'y',\n letters: \"y\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\"\n}, {\n base: 'z',\n letters: \"z\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\"\n}];\n/* eslint-enable max-len */\n\nvar diacriticsMap = {};\n\nfor (var ii = 0; ii < map.length; ii++) {\n var letters = map[ii].letters;\n\n for (var jj = 0; jj < letters.length; jj++) {\n diacriticsMap[letters[jj]] = map[ii].base;\n }\n} // \"what?\" version ... http://jsperf.com/diacritics/12\n\n\nexport default function stripDiacritics(str) {\n return str.replace(/[\\u0300-\\u036F]/g, '') // Remove combining diacritics\n\n /* eslint-disable-next-line no-control-regex */\n .replace(/[^\\u0000-\\u007E]/g, function (a) {\n return diacriticsMap[a] || a;\n });\n}","import warning from 'warning';\nvar warned = {};\n/**\n * Copied from: https://github.com/ReactTraining/react-router/blob/master/modules/routerWarning.js\n */\n\nexport default function warn(falseToWarn, message) {\n // Only issue deprecation warnings once.\n if (!falseToWarn && message.indexOf('deprecated') !== -1) {\n if (warned[message]) {\n return;\n }\n\n warned[message] = true;\n }\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warning.apply(void 0, [falseToWarn, \"[react-bootstrap-typeahead] \" + message].concat(args));\n}\nexport function resetWarned() {\n warned = {};\n}","import isEqual from 'fast-deep-equal';\nimport getOptionProperty from './getOptionProperty';\nimport { isFunction, isString } from './nodash';\nimport stripDiacritics from './stripDiacritics';\nimport warn from './warn';\n\nfunction isMatch(input, string, props) {\n var searchStr = input;\n var str = string;\n\n if (!props.caseSensitive) {\n searchStr = searchStr.toLowerCase();\n str = str.toLowerCase();\n }\n\n if (props.ignoreDiacritics) {\n searchStr = stripDiacritics(searchStr);\n str = stripDiacritics(str);\n }\n\n return str.indexOf(searchStr) !== -1;\n}\n/**\n * Default algorithm for filtering results.\n */\n\n\nexport default function defaultFilterBy(option, props) {\n var filterBy = props.filterBy,\n labelKey = props.labelKey,\n multiple = props.multiple,\n selected = props.selected,\n text = props.text; // Don't show selected options in the menu for the multi-select case.\n\n if (multiple && selected.some(function (o) {\n return isEqual(o, option);\n })) {\n return false;\n }\n\n if (isFunction(labelKey) && isMatch(text, labelKey(option), props)) {\n return true;\n }\n\n var fields = filterBy.slice();\n\n if (isString(labelKey)) {\n // Add the `labelKey` field to the list of fields if it isn't already there.\n if (fields.indexOf(labelKey) === -1) {\n fields.unshift(labelKey);\n }\n }\n\n if (isString(option)) {\n warn(fields.length <= 1, 'You cannot filter by properties when `option` is a string.');\n return isMatch(text, option, props);\n }\n\n return fields.some(function (field) {\n var value = getOptionProperty(option, field);\n\n if (!isString(value)) {\n warn(false, 'Fields passed to `filterBy` should have string values. Value will ' + 'be converted to a string; results may be unexpected.');\n value = String(value);\n }\n\n return isMatch(text, value, props);\n });\n}","export default function getDisplayName(Component) {\n return Component.displayName || Component.name || 'Component';\n}","import invariant from 'invariant';\nimport stripDiacritics from './stripDiacritics';\nvar CASE_INSENSITIVE = 'i';\nvar COMBINING_MARKS = /[\\u0300-\\u036F]/;\n// Export for testing.\nexport function escapeStringRegexp(str) {\n !(typeof str === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, '`escapeStringRegexp` expected a string.') : invariant(false) : void 0; // Escape characters with special meaning either inside or outside character\n // sets. Use a simple backslash escape when it’s always valid, and a \\unnnn\n // escape when the simpler form would be disallowed by Unicode patterns’\n // stricter grammar.\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\nexport default function getMatchBounds(subject, str) {\n var search = new RegExp(escapeStringRegexp(stripDiacritics(str)), CASE_INSENSITIVE);\n var matches = search.exec(stripDiacritics(subject));\n\n if (!matches) {\n return null;\n }\n\n var start = matches.index;\n var matchLength = matches[0].length; // Account for combining marks, which changes the indices.\n\n if (COMBINING_MARKS.test(subject)) {\n // Starting at the beginning of the subject string, check for the number of\n // combining marks and increment the start index whenever one is found.\n for (var ii = 0; ii <= start; ii++) {\n if (COMBINING_MARKS.test(subject[ii])) {\n start += 1;\n }\n } // Similarly, increment the length of the match string if it contains a\n // combining mark.\n\n\n for (var _ii = start; _ii <= start + matchLength; _ii++) {\n if (COMBINING_MARKS.test(subject[_ii])) {\n matchLength += 1;\n }\n }\n }\n\n return {\n end: start + matchLength,\n start: start\n };\n}","import getMatchBounds from './getMatchBounds';\nimport getOptionLabel from './getOptionLabel';\n\nfunction getHintText(props) {\n var activeIndex = props.activeIndex,\n initialItem = props.initialItem,\n isFocused = props.isFocused,\n isMenuShown = props.isMenuShown,\n labelKey = props.labelKey,\n multiple = props.multiple,\n selected = props.selected,\n text = props.text; // Don't display a hint under the following conditions:\n\n if ( // No text entered.\n !text || // The input is not focused.\n !isFocused || // The menu is hidden.\n !isMenuShown || // No item in the menu.\n !initialItem || // The initial item is a custom option.\n initialItem.customOption || // One of the menu items is active.\n activeIndex > -1 || // There's already a selection in single-select mode.\n !!selected.length && !multiple) {\n return '';\n }\n\n var initialItemStr = getOptionLabel(initialItem, labelKey);\n var bounds = getMatchBounds(initialItemStr.toLowerCase(), text.toLowerCase());\n\n if (!(bounds && bounds.start === 0)) {\n return '';\n } // Text matching is case- and accent-insensitive, so to display the hint\n // correctly, splice the input string with the hint string.\n\n\n return text + initialItemStr.slice(bounds.end, initialItemStr.length);\n}\n\nexport default getHintText;","export default function getMenuItemId(id, position) {\n return (id || '') + \"-item-\" + position;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport cx from 'classnames';\nimport getMenuItemId from './getMenuItemId';\n\nvar getInputProps = function getInputProps(_ref) {\n var activeIndex = _ref.activeIndex,\n id = _ref.id,\n isFocused = _ref.isFocused,\n isMenuShown = _ref.isMenuShown,\n multiple = _ref.multiple,\n onFocus = _ref.onFocus,\n placeholder = _ref.placeholder,\n rest = _objectWithoutPropertiesLoose(_ref, [\"activeIndex\", \"id\", \"isFocused\", \"isMenuShown\", \"multiple\", \"onFocus\", \"placeholder\"]);\n\n return function (_temp) {\n var _cx;\n\n var _ref2 = _temp === void 0 ? {} : _temp,\n className = _ref2.className,\n inputProps = _objectWithoutPropertiesLoose(_ref2, [\"className\"]);\n\n var props = _extends({\n /* eslint-disable sort-keys */\n // These props can be overridden by values in `inputProps`.\n autoComplete: 'off',\n placeholder: placeholder,\n type: 'text'\n }, inputProps, rest, {\n 'aria-activedescendant': activeIndex >= 0 ? getMenuItemId(id, activeIndex) : undefined,\n 'aria-autocomplete': 'both',\n 'aria-expanded': isMenuShown,\n 'aria-haspopup': 'listbox',\n 'aria-owns': isMenuShown ? id : undefined,\n className: cx((_cx = {}, _cx[className || ''] = !multiple, _cx.focus = isFocused, _cx)),\n // Re-open the menu, eg: if it's closed via ESC.\n onClick: onFocus,\n onFocus: onFocus,\n // Comboboxes are single-select by definition:\n // https://www.w3.org/TR/wai-aria-practices-1.1/#combobox\n role: 'combobox'\n /* eslint-enable sort-keys */\n\n });\n\n if (!multiple) {\n return props;\n }\n\n return _extends({}, props, {\n 'aria-autocomplete': 'list',\n 'aria-expanded': undefined,\n inputClassName: className,\n role: undefined\n });\n };\n};\n\nexport default getInputProps;","import getOptionLabel from './getOptionLabel';\nimport { head } from './nodash';\n\nfunction getInputText(props) {\n var activeItem = props.activeItem,\n labelKey = props.labelKey,\n multiple = props.multiple,\n selected = props.selected,\n text = props.text;\n\n if (activeItem) {\n // Display the input value if the pagination item is active.\n return getOptionLabel(activeItem, labelKey);\n }\n\n var selectedItem = !multiple && !!selected.length && head(selected);\n\n if (selectedItem) {\n return getOptionLabel(selectedItem, labelKey);\n }\n\n return text;\n}\n\nexport default getInputText;","import getOptionProperty from './getOptionProperty';\nimport { head } from './nodash';\n\nfunction getIsOnlyResult(props) {\n var allowNew = props.allowNew,\n highlightOnlyResult = props.highlightOnlyResult,\n results = props.results;\n\n if (!highlightOnlyResult || allowNew) {\n return false;\n }\n\n return results.length === 1 && !getOptionProperty(head(results), 'disabled');\n}\n\nexport default getIsOnlyResult;","/**\n * Truncates the result set based on `maxResults` and returns the new set.\n */\nfunction getTruncatedOptions(options, maxResults) {\n if (!maxResults || maxResults >= options.length) {\n return options;\n }\n\n return options.slice(0, maxResults);\n}\n\nexport default getTruncatedOptions;","import { DOWN, UP } from '../constants';\n\nfunction skipDisabledOptions(currentIndex, keyCode, items) {\n var newIndex = currentIndex;\n\n while (items[newIndex] && items[newIndex].disabled) {\n newIndex += keyCode === UP ? -1 : 1;\n }\n\n return newIndex;\n}\n\nexport default function getUpdatedActiveIndex(currentIndex, keyCode, items) {\n var newIndex = currentIndex; // Increment or decrement index based on user keystroke.\n\n newIndex += keyCode === UP ? -1 : 1; // Skip over any disabled options.\n\n newIndex = skipDisabledOptions(newIndex, keyCode, items); // If we've reached the end, go back to the beginning or vice-versa.\n\n if (newIndex === items.length) {\n newIndex = -1;\n } else if (newIndex === -2) {\n newIndex = items.length - 1; // Skip over any disabled options.\n\n newIndex = skipDisabledOptions(newIndex, keyCode, items);\n }\n\n return newIndex;\n}","/**\n * Check if an input type is selectable, based on WHATWG spec.\n *\n * See:\n * - https://stackoverflow.com/questions/21177489/selectionstart-selectionend-on-input-type-number-no-longer-allowed-in-chrome/24175357\n * - https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n */\nexport default function isSelectable(inputNode) {\n return inputNode.selectionStart != null;\n}","/**\n * Prevent the main input from blurring when a menu item or the clear button is\n * clicked. (#226 & #310)\n */\nexport default function preventInputBlur(e) {\n e.preventDefault();\n}","export function isSizeLarge(size) {\n return size === 'large' || size === 'lg';\n}\nexport function isSizeSmall(size) {\n return size === 'small' || size === 'sm';\n}","import { createContext, useContext } from 'react';\nimport { noop } from '../utils';\nexport var TypeaheadContext = /*#__PURE__*/createContext({\n activeIndex: -1,\n hintText: '',\n id: '',\n initialItem: null,\n inputNode: null,\n isOnlyResult: false,\n onActiveItemChange: noop,\n onAdd: noop,\n onInitialItemChange: noop,\n onMenuItemClick: noop,\n selectHintOnEnter: undefined,\n setItem: noop\n});\nexport var useTypeaheadContext = function useTypeaheadContext() {\n return useContext(TypeaheadContext);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport React, { useEffect } from 'react';\nimport usePrevious from '@restart/hooks/usePrevious';\nimport { TypeaheadContext } from './Context';\nimport { getHintText, getInputProps, getInputText, getIsOnlyResult, pick } from '../utils';\nimport { RETURN } from '../constants';\nvar inputPropKeys = ['activeIndex', 'disabled', 'id', 'inputRef', 'isFocused', 'isMenuShown', 'multiple', 'onBlur', 'onChange', 'onFocus', 'onKeyDown', 'placeholder'];\nvar propKeys = ['activeIndex', 'hideMenu', 'isMenuShown', 'labelKey', 'onClear', 'onHide', 'onRemove', 'results', 'selected', 'text', 'toggleMenu'];\nvar contextKeys = ['activeIndex', 'id', 'initialItem', 'inputNode', 'onActiveItemChange', 'onAdd', 'onInitialItemChange', 'onMenuItemClick', 'selectHintOnEnter', 'setItem'];\n\nvar TypeaheadManager = function TypeaheadManager(props) {\n var allowNew = props.allowNew,\n children = props.children,\n initialItem = props.initialItem,\n isMenuShown = props.isMenuShown,\n onAdd = props.onAdd,\n onInitialItemChange = props.onInitialItemChange,\n onKeyDown = props.onKeyDown,\n onMenuToggle = props.onMenuToggle,\n results = props.results;\n var prevProps = usePrevious(props);\n useEffect(function () {\n // Clear the initial item when there are no results.\n if (!(allowNew || results.length)) {\n onInitialItemChange(null);\n }\n });\n useEffect(function () {\n if (prevProps && prevProps.isMenuShown !== isMenuShown) {\n onMenuToggle(isMenuShown);\n }\n });\n\n var handleKeyDown = function handleKeyDown(e) {\n switch (e.keyCode) {\n case RETURN:\n if (initialItem && getIsOnlyResult(props)) {\n onAdd(initialItem);\n }\n\n break;\n\n default:\n break;\n }\n\n onKeyDown(e);\n };\n\n var childProps = _extends({}, pick(props, propKeys), {\n getInputProps: getInputProps(_extends({}, pick(props, inputPropKeys), {\n onKeyDown: handleKeyDown,\n value: getInputText(props)\n }))\n });\n\n var contextValue = _extends({}, pick(props, contextKeys), {\n hintText: getHintText(props),\n isOnlyResult: getIsOnlyResult(props)\n });\n\n return /*#__PURE__*/React.createElement(TypeaheadContext.Provider, {\n value: contextValue\n }, children(childProps));\n};\n\nexport default TypeaheadManager;","import PropTypes from 'prop-types';\nimport { isFunction, values, warn } from './utils';\nimport { SIZE } from './constants';\nvar INPUT_PROPS_BLACKLIST = [{\n alt: 'onBlur',\n prop: 'onBlur'\n}, {\n alt: 'onInputChange',\n prop: 'onChange'\n}, {\n alt: 'onFocus',\n prop: 'onFocus'\n}, {\n alt: 'onKeyDown',\n prop: 'onKeyDown'\n}];\nexport var sizeType = PropTypes.oneOf(values(SIZE));\n/**\n * Allows additional warnings or messaging related to prop validation.\n */\n\nexport function checkPropType(validator, callback) {\n return function (props, propName, componentName) {\n var _PropTypes$checkPropT;\n\n PropTypes.checkPropTypes((_PropTypes$checkPropT = {}, _PropTypes$checkPropT[propName] = validator, _PropTypes$checkPropT), props, 'prop', componentName);\n isFunction(callback) && callback(props, propName, componentName);\n };\n}\nexport function caseSensitiveType(props, propName, componentName) {\n var caseSensitive = props.caseSensitive,\n filterBy = props.filterBy;\n warn(!caseSensitive || typeof filterBy !== 'function', 'Your `filterBy` function will override the `caseSensitive` prop.');\n}\nexport function deprecated(validator, reason) {\n return function (props, propName, componentName) {\n var _PropTypes$checkPropT2;\n\n if (props[propName] != null) {\n warn(false, \"The `\" + propName + \"` prop is deprecated. \" + reason);\n }\n\n return PropTypes.checkPropTypes((_PropTypes$checkPropT2 = {}, _PropTypes$checkPropT2[propName] = validator, _PropTypes$checkPropT2), props, 'prop', componentName);\n };\n}\nexport function defaultInputValueType(props, propName, componentName) {\n var defaultInputValue = props.defaultInputValue,\n defaultSelected = props.defaultSelected,\n multiple = props.multiple,\n selected = props.selected;\n var name = defaultSelected.length ? 'defaultSelected' : 'selected';\n warn(!(!multiple && defaultInputValue && (defaultSelected.length || selected && selected.length)), \"`defaultInputValue` will be overridden by the value from `\" + name + \"`.\");\n}\nexport function defaultSelectedType(props, propName, componentName) {\n var defaultSelected = props.defaultSelected,\n multiple = props.multiple;\n warn(multiple || defaultSelected.length <= 1, 'You are passing multiple options to the `defaultSelected` prop of a ' + 'Typeahead in single-select mode. The selections will be truncated to a ' + 'single selection.');\n}\nexport function highlightOnlyResultType(props, propName, componentName) {\n var allowNew = props.allowNew,\n highlightOnlyResult = props.highlightOnlyResult;\n warn(!(highlightOnlyResult && allowNew), '`highlightOnlyResult` will not work with `allowNew`.');\n}\nexport function ignoreDiacriticsType(props, propName, componentName) {\n var filterBy = props.filterBy,\n ignoreDiacritics = props.ignoreDiacritics;\n warn(ignoreDiacritics || typeof filterBy !== 'function', 'Your `filterBy` function will override the `ignoreDiacritics` prop.');\n}\nexport function inputPropsType(props, propName, componentName) {\n var inputProps = props.inputProps;\n\n if (!(inputProps && Object.prototype.toString.call(inputProps) === '[object Object]')) {\n return;\n } // Blacklisted properties.\n\n\n INPUT_PROPS_BLACKLIST.forEach(function (_ref) {\n var alt = _ref.alt,\n prop = _ref.prop;\n var msg = alt ? \" Use the top-level `\" + alt + \"` prop instead.\" : null;\n warn(!inputProps[prop], \"The `\" + prop + \"` property of `inputProps` will be ignored.\" + msg);\n });\n}\nexport function isRequiredForA11y(props, propName, componentName) {\n warn(props[propName] != null, \"The prop `\" + propName + \"` is required to make `\" + componentName + \"` \" + 'accessible for users of assistive technologies such as screen readers.');\n}\nexport function labelKeyType(props, propName, componentName) {\n var allowNew = props.allowNew,\n labelKey = props.labelKey;\n warn(!(isFunction(labelKey) && allowNew), '`labelKey` must be a string when `allowNew={true}`.');\n}\nexport var optionType = PropTypes.oneOfType([PropTypes.object, PropTypes.string]);\nexport function selectedType(props, propName, componentName) {\n var multiple = props.multiple,\n onChange = props.onChange,\n selected = props.selected;\n warn(multiple || !selected || selected.length <= 1, 'You are passing multiple options to the `selected` prop of a Typeahead ' + 'in single-select mode. This may lead to unexpected behaviors or errors.');\n warn(!selected || selected && isFunction(onChange), 'You provided a `selected` prop without an `onChange` handler. If you ' + 'want the typeahead to be uncontrolled, use `defaultSelected`. ' + 'Otherwise, set `onChange`.');\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport isEqual from 'fast-deep-equal';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TypeaheadManager from './TypeaheadManager';\nimport { caseSensitiveType, checkPropType, defaultInputValueType, defaultSelectedType, deprecated, highlightOnlyResultType, ignoreDiacriticsType, isRequiredForA11y, labelKeyType, optionType, selectedType } from '../propTypes';\nimport { addCustomOption, defaultFilterBy, getOptionLabel, getStringLabelKey, getUpdatedActiveIndex, getTruncatedOptions, head, isShown, isString, noop, uniqueId, validateSelectedPropChange } from '../utils';\nimport { DEFAULT_LABELKEY, DOWN, ESC, RETURN, TAB, UP } from '../constants';\nvar propTypes = {\n /**\n * Allows the creation of new selections on the fly. Note that any new items\n * will be added to the list of selections, but not the list of original\n * options unless handled as such by `Typeahead`'s parent.\n *\n * If a function is specified, it will be used to determine whether a custom\n * option should be included. The return value should be true or false.\n */\n allowNew: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n /**\n * Autofocus the input when the component initially mounts.\n */\n autoFocus: PropTypes.bool,\n\n /**\n * Whether or not filtering should be case-sensitive.\n */\n caseSensitive: checkPropType(PropTypes.bool, caseSensitiveType),\n\n /**\n * The initial value displayed in the text input.\n */\n defaultInputValue: checkPropType(PropTypes.string, defaultInputValueType),\n\n /**\n * Whether or not the menu is displayed upon initial render.\n */\n defaultOpen: PropTypes.bool,\n\n /**\n * Specify any pre-selected options. Use only if you want the component to\n * be uncontrolled.\n */\n defaultSelected: checkPropType(PropTypes.arrayOf(optionType), defaultSelectedType),\n\n /**\n * Either an array of fields in `option` to search, or a custom filtering\n * callback.\n */\n filterBy: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]),\n\n /**\n * Highlights the menu item if there is only one result and allows selecting\n * that item by hitting enter. Does not work with `allowNew`.\n */\n highlightOnlyResult: checkPropType(PropTypes.bool, highlightOnlyResultType),\n\n /**\n * An html id attribute, required for assistive technologies such as screen\n * readers.\n */\n id: checkPropType(PropTypes.oneOfType([PropTypes.number, PropTypes.string]), isRequiredForA11y),\n\n /**\n * Whether the filter should ignore accents and other diacritical marks.\n */\n ignoreDiacritics: checkPropType(PropTypes.bool, ignoreDiacriticsType),\n\n /**\n * Specify the option key to use for display or a function returning the\n * display string. By default, the selector will use the `label` key.\n */\n labelKey: checkPropType(PropTypes.oneOfType([PropTypes.string, PropTypes.func]), labelKeyType),\n\n /**\n * Maximum number of results to display by default. Mostly done for\n * performance reasons so as not to render too many DOM nodes in the case of\n * large data sets.\n */\n maxResults: PropTypes.number,\n\n /**\n * Number of input characters that must be entered before showing results.\n */\n minLength: PropTypes.number,\n\n /**\n * Whether or not multiple selections are allowed.\n */\n multiple: PropTypes.bool,\n\n /**\n * Invoked when the input is blurred. Receives an event.\n */\n onBlur: PropTypes.func,\n\n /**\n * Invoked whenever items are added or removed. Receives an array of the\n * selected options.\n */\n onChange: PropTypes.func,\n\n /**\n * Invoked when the input is focused. Receives an event.\n */\n onFocus: PropTypes.func,\n\n /**\n * Invoked when the input value changes. Receives the string value of the\n * input.\n */\n onInputChange: PropTypes.func,\n\n /**\n * Invoked when a key is pressed. Receives an event.\n */\n onKeyDown: PropTypes.func,\n\n /**\n * Invoked when menu visibility changes.\n */\n onMenuToggle: PropTypes.func,\n\n /**\n * Invoked when the pagination menu item is clicked. Receives an event.\n */\n onPaginate: PropTypes.func,\n\n /**\n * Whether or not the menu should be displayed. `undefined` allows the\n * component to control visibility, while `true` and `false` show and hide\n * the menu, respectively.\n */\n open: PropTypes.bool,\n\n /**\n * Full set of options, including pre-selected options. Must either be an\n * array of objects (recommended) or strings.\n */\n options: PropTypes.arrayOf(optionType).isRequired,\n\n /**\n * Give user the ability to display additional results if the number of\n * results exceeds `maxResults`.\n */\n paginate: PropTypes.bool,\n\n /**\n * The selected option(s) displayed in the input. Use this prop if you want\n * to control the component via its parent.\n */\n selected: checkPropType(PropTypes.arrayOf(optionType), selectedType),\n\n /**\n * Allows selecting the hinted result by pressing enter.\n */\n selectHintOnEnter: deprecated(PropTypes.bool, 'Use the `shouldSelect` prop on the `Hint` component to define which ' + 'keystrokes can select the hint.')\n};\nvar defaultProps = {\n allowNew: false,\n autoFocus: false,\n caseSensitive: false,\n defaultInputValue: '',\n defaultOpen: false,\n defaultSelected: [],\n filterBy: [],\n highlightOnlyResult: false,\n ignoreDiacritics: true,\n labelKey: DEFAULT_LABELKEY,\n maxResults: 100,\n minLength: 0,\n multiple: false,\n onBlur: noop,\n onFocus: noop,\n onInputChange: noop,\n onKeyDown: noop,\n onMenuToggle: noop,\n onPaginate: noop,\n paginate: true\n};\nexport function getInitialState(props) {\n var defaultInputValue = props.defaultInputValue,\n defaultOpen = props.defaultOpen,\n defaultSelected = props.defaultSelected,\n maxResults = props.maxResults,\n multiple = props.multiple;\n var selected = props.selected ? props.selected.slice() : defaultSelected.slice();\n var text = defaultInputValue;\n\n if (!multiple && selected.length) {\n // Set the text if an initial selection is passed in.\n text = getOptionLabel(head(selected), props.labelKey);\n\n if (selected.length > 1) {\n // Limit to 1 selection in single-select mode.\n selected = selected.slice(0, 1);\n }\n }\n\n return {\n activeIndex: -1,\n activeItem: null,\n initialItem: null,\n isFocused: false,\n selected: selected,\n showMenu: defaultOpen,\n shownResults: maxResults,\n text: text\n };\n}\nexport function clearTypeahead(state, props) {\n return _extends({}, getInitialState(props), {\n isFocused: state.isFocused,\n selected: [],\n text: ''\n });\n}\nexport function hideMenu(state, props) {\n var _getInitialState = getInitialState(props),\n activeIndex = _getInitialState.activeIndex,\n activeItem = _getInitialState.activeItem,\n initialItem = _getInitialState.initialItem,\n shownResults = _getInitialState.shownResults;\n\n return {\n activeIndex: activeIndex,\n activeItem: activeItem,\n initialItem: initialItem,\n showMenu: false,\n shownResults: shownResults\n };\n}\nexport function toggleMenu(state, props) {\n return state.showMenu ? hideMenu(state, props) : {\n showMenu: true\n };\n}\n\nvar Typeahead = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Typeahead, _React$Component);\n\n function Typeahead() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"state\", getInitialState(_this.props));\n\n _defineProperty(_assertThisInitialized(_this), \"inputNode\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"isMenuShown\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"items\", []);\n\n _defineProperty(_assertThisInitialized(_this), \"blur\", function () {\n _this.inputNode && _this.inputNode.blur();\n\n _this.hideMenu();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"clear\", function () {\n _this.setState(clearTypeahead);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"focus\", function () {\n _this.inputNode && _this.inputNode.focus();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getInput\", function () {\n return _this.inputNode;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"inputRef\", function (inputNode) {\n _this.inputNode = inputNode;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItem\", function (item, position) {\n _this.items[position] = item;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"hideMenu\", function () {\n _this.setState(hideMenu);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"toggleMenu\", function () {\n _this.setState(toggleMenu);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleActiveIndexChange\", function (activeIndex) {\n _this.setState(function (state) {\n return {\n activeIndex: activeIndex,\n activeItem: activeIndex === -1 ? null : state.activeItem\n };\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleActiveItemChange\", function (activeItem) {\n // Don't update the active item if it hasn't changed.\n if (!isEqual(activeItem, _this.state.activeItem)) {\n _this.setState({\n activeItem: activeItem\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleBlur\", function (e) {\n e.persist();\n\n _this.setState({\n isFocused: false\n }, function () {\n return _this.props.onBlur(e);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleChange\", function (selected) {\n _this.props.onChange && _this.props.onChange(selected);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleClear\", function () {\n _this.setState(clearTypeahead, function () {\n return _this._handleChange([]);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleFocus\", function (e) {\n e.persist();\n\n _this.setState({\n isFocused: true,\n showMenu: true\n }, function () {\n return _this.props.onFocus(e);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleInitialItemChange\", function (initialItem) {\n // Don't update the initial item if it hasn't changed.\n if (!isEqual(initialItem, _this.state.initialItem)) {\n _this.setState({\n initialItem: initialItem\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleInputChange\", function (e) {\n e.persist();\n var text = e.currentTarget.value;\n var _this$props = _this.props,\n multiple = _this$props.multiple,\n onInputChange = _this$props.onInputChange; // Clear selections when the input value changes in single-select mode.\n\n var shouldClearSelections = _this.state.selected.length && !multiple;\n\n _this.setState(function (state, props) {\n var _getInitialState2 = getInitialState(props),\n activeIndex = _getInitialState2.activeIndex,\n activeItem = _getInitialState2.activeItem,\n shownResults = _getInitialState2.shownResults;\n\n return {\n activeIndex: activeIndex,\n activeItem: activeItem,\n selected: shouldClearSelections ? [] : state.selected,\n showMenu: true,\n shownResults: shownResults,\n text: text\n };\n }, function () {\n onInputChange(text, e);\n shouldClearSelections && _this._handleChange([]);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleKeyDown\", function (e) {\n var activeItem = _this.state.activeItem; // Skip most actions when the menu is hidden.\n\n if (!_this.isMenuShown) {\n if (e.keyCode === UP || e.keyCode === DOWN) {\n _this.setState({\n showMenu: true\n });\n }\n\n _this.props.onKeyDown(e);\n\n return;\n }\n\n switch (e.keyCode) {\n case UP:\n case DOWN:\n // Prevent input cursor from going to the beginning when pressing up.\n e.preventDefault();\n\n _this._handleActiveIndexChange(getUpdatedActiveIndex(_this.state.activeIndex, e.keyCode, _this.items));\n\n break;\n\n case RETURN:\n // Prevent form submission while menu is open.\n e.preventDefault();\n activeItem && _this._handleMenuItemSelect(activeItem, e);\n break;\n\n case ESC:\n case TAB:\n // ESC simply hides the menu. TAB will blur the input and move focus to\n // the next item; hide the menu so it doesn't gain focus.\n _this.hideMenu();\n\n break;\n\n default:\n break;\n }\n\n _this.props.onKeyDown(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleMenuItemSelect\", function (option, e) {\n if (option.paginationOption) {\n _this._handlePaginate(e);\n } else {\n _this._handleSelectionAdd(option);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handlePaginate\", function (e) {\n e.persist();\n\n _this.setState(function (state, props) {\n return {\n shownResults: state.shownResults + props.maxResults\n };\n }, function () {\n return _this.props.onPaginate(e, _this.state.shownResults);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleSelectionAdd\", function (option) {\n var _this$props2 = _this.props,\n multiple = _this$props2.multiple,\n labelKey = _this$props2.labelKey;\n var selected;\n var selection = option;\n var text; // Add a unique id to the custom selection. Avoid doing this in `render` so\n // the id doesn't increment every time.\n\n if (!isString(selection) && selection.customOption) {\n selection = _extends({}, selection, {\n id: uniqueId('new-id-')\n });\n }\n\n if (multiple) {\n // If multiple selections are allowed, add the new selection to the\n // existing selections.\n selected = _this.state.selected.concat(selection);\n text = '';\n } else {\n // If only a single selection is allowed, replace the existing selection\n // with the new one.\n selected = [selection];\n text = getOptionLabel(selection, labelKey);\n }\n\n _this.setState(function (state, props) {\n return _extends({}, hideMenu(state, props), {\n initialItem: selection,\n selected: selected,\n text: text\n });\n }, function () {\n return _this._handleChange(selected);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleSelectionRemove\", function (selection) {\n var selected = _this.state.selected.filter(function (option) {\n return !isEqual(option, selection);\n }); // Make sure the input stays focused after the item is removed.\n\n\n _this.focus();\n\n _this.setState(function (state, props) {\n return _extends({}, hideMenu(state, props), {\n selected: selected\n });\n }, function () {\n return _this._handleChange(selected);\n });\n });\n\n return _this;\n }\n\n var _proto = Typeahead.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.props.autoFocus && this.focus();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n var _this$props3 = this.props,\n labelKey = _this$props3.labelKey,\n multiple = _this$props3.multiple,\n selected = _this$props3.selected;\n validateSelectedPropChange(selected, prevProps.selected); // Sync selections in state with those in props.\n\n if (selected && !isEqual(selected, prevState.selected)) {\n this.setState({\n selected: selected\n });\n\n if (!multiple) {\n this.setState({\n text: selected.length ? getOptionLabel(head(selected), labelKey) : ''\n });\n }\n }\n };\n\n _proto.render = function render() {\n // Omit `onChange` so Flow doesn't complain.\n var _this$props4 = this.props,\n onChange = _this$props4.onChange,\n otherProps = _objectWithoutPropertiesLoose(_this$props4, [\"onChange\"]);\n\n var mergedPropsAndState = _extends({}, otherProps, this.state);\n\n var filterBy = mergedPropsAndState.filterBy,\n labelKey = mergedPropsAndState.labelKey,\n options = mergedPropsAndState.options,\n paginate = mergedPropsAndState.paginate,\n shownResults = mergedPropsAndState.shownResults,\n text = mergedPropsAndState.text;\n this.isMenuShown = isShown(mergedPropsAndState);\n this.items = []; // Reset items on re-render.\n\n var results = [];\n\n if (this.isMenuShown) {\n var cb = typeof filterBy === 'function' ? filterBy : defaultFilterBy;\n results = options.filter(function (option) {\n return cb(option, mergedPropsAndState);\n }); // This must come before results are truncated.\n\n var shouldPaginate = paginate && results.length > shownResults; // Truncate results if necessary.\n\n results = getTruncatedOptions(results, shownResults); // Add the custom option if necessary.\n\n if (addCustomOption(results, mergedPropsAndState)) {\n var _results$push;\n\n results.push((_results$push = {\n customOption: true\n }, _results$push[getStringLabelKey(labelKey)] = text, _results$push));\n } // Add the pagination item if necessary.\n\n\n if (shouldPaginate) {\n var _results$push2;\n\n results.push((_results$push2 = {}, _results$push2[getStringLabelKey(labelKey)] = '', _results$push2.paginationOption = true, _results$push2));\n }\n }\n\n return /*#__PURE__*/React.createElement(TypeaheadManager, _extends({}, mergedPropsAndState, {\n hideMenu: this.hideMenu,\n inputNode: this.inputNode,\n inputRef: this.inputRef,\n isMenuShown: this.isMenuShown,\n onActiveItemChange: this._handleActiveItemChange,\n onAdd: this._handleSelectionAdd,\n onBlur: this._handleBlur,\n onChange: this._handleInputChange,\n onClear: this._handleClear,\n onFocus: this._handleFocus,\n onHide: this.hideMenu,\n onInitialItemChange: this._handleInitialItemChange,\n onKeyDown: this._handleKeyDown,\n onMenuItemClick: this._handleMenuItemSelect,\n onRemove: this._handleSelectionRemove,\n results: results,\n setItem: this.setItem,\n toggleMenu: this.toggleMenu\n }));\n };\n\n return Typeahead;\n}(React.Component);\n\n_defineProperty(Typeahead, \"propTypes\", propTypes);\n\n_defineProperty(Typeahead, \"defaultProps\", defaultProps);\n\nexport default Typeahead;","import warn from './warn';\nexport default function validateSelectedPropChange(prevSelected, selected) {\n var uncontrolledToControlled = !prevSelected && selected;\n var controlledToUncontrolled = prevSelected && !selected;\n var from, to, precedent;\n\n if (uncontrolledToControlled) {\n from = 'uncontrolled';\n to = 'controlled';\n precedent = 'an';\n } else {\n from = 'controlled';\n to = 'uncontrolled';\n precedent = 'a';\n }\n\n var message = \"You are changing \" + precedent + \" \" + from + \" typeahead to be \" + to + \". \" + (\"Input elements should not switch from \" + from + \" to \" + to + \" (or vice versa). \") + 'Decide between using a controlled or uncontrolled element for the ' + 'lifetime of the component.';\n warn(!(uncontrolledToControlled || controlledToUncontrolled), message);\n}","export default function isShown(props) {\n var open = props.open,\n minLength = props.minLength,\n showMenu = props.showMenu,\n text = props.text; // If menu visibility is controlled via props, that value takes precedence.\n\n if (open || open === false) {\n return open;\n }\n\n if (text.length < minLength) {\n return false;\n }\n\n return showMenu;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport debounce from 'lodash.debounce';\nimport PropTypes from 'prop-types';\nimport React, { forwardRef, useCallback, useEffect, useRef } from 'react';\nimport useForceUpdate from '@restart/hooks/useForceUpdate';\nimport usePrevious from '@restart/hooks/usePrevious';\nimport Typeahead from '../core/Typeahead';\nimport { optionType } from '../propTypes';\nimport { getDisplayName, isFunction, warn } from '../utils';\nvar propTypes = {\n /**\n * Delay, in milliseconds, before performing search.\n */\n delay: PropTypes.number,\n\n /**\n * Whether or not a request is currently pending. Necessary for the\n * container to know when new results are available.\n */\n isLoading: PropTypes.bool.isRequired,\n\n /**\n * Number of input characters that must be entered before showing results.\n */\n minLength: PropTypes.number,\n\n /**\n * Callback to perform when the search is executed.\n */\n onSearch: PropTypes.func.isRequired,\n\n /**\n * Options to be passed to the typeahead. Will typically be the query\n * results, but can also be initial default options.\n */\n options: PropTypes.arrayOf(optionType),\n\n /**\n * Message displayed in the menu when there is no user input.\n */\n promptText: PropTypes.node,\n\n /**\n * Message displayed in the menu while the request is pending.\n */\n searchText: PropTypes.node,\n\n /**\n * Whether or not the component should cache query results.\n */\n useCache: PropTypes.bool\n};\nvar defaultProps = {\n delay: 200,\n minLength: 2,\n options: [],\n promptText: 'Type to search...',\n searchText: 'Searching...',\n useCache: true\n};\n\n/**\n * Logic that encapsulates common behavior and functionality around\n * asynchronous searches, including:\n *\n * - Debouncing user input\n * - Optional query caching\n * - Search prompt and empty results behaviors\n */\nexport function useAsync(props) {\n var allowNew = props.allowNew,\n delay = props.delay,\n emptyLabel = props.emptyLabel,\n isLoading = props.isLoading,\n minLength = props.minLength,\n onInputChange = props.onInputChange,\n onSearch = props.onSearch,\n options = props.options,\n promptText = props.promptText,\n searchText = props.searchText,\n useCache = props.useCache,\n otherProps = _objectWithoutPropertiesLoose(props, [\"allowNew\", \"delay\", \"emptyLabel\", \"isLoading\", \"minLength\", \"onInputChange\", \"onSearch\", \"options\", \"promptText\", \"searchText\", \"useCache\"]);\n\n var cacheRef = useRef({});\n var handleSearchDebouncedRef = useRef();\n var queryRef = useRef(props.defaultInputValue || '');\n var forceUpdate = useForceUpdate();\n var prevProps = usePrevious(props);\n var handleSearch = useCallback(function (query) {\n queryRef.current = query;\n\n if (!query || minLength && query.length < minLength) {\n return;\n } // Use cached results, if applicable.\n\n\n if (useCache && cacheRef.current[query]) {\n // Re-render the component with the cached results.\n forceUpdate();\n return;\n } // Perform the search.\n\n\n onSearch(query);\n }, [forceUpdate, minLength, onSearch, useCache]); // Set the debounced search function.\n\n useEffect(function () {\n handleSearchDebouncedRef.current = debounce(handleSearch, delay);\n return function () {\n handleSearchDebouncedRef.current && handleSearchDebouncedRef.current.cancel();\n };\n }, [delay, handleSearch]);\n useEffect(function () {\n // Ensure that we've gone from a loading to a completed state. Otherwise\n // an empty response could get cached if the component updates during the\n // request (eg: if the parent re-renders for some reason).\n if (!isLoading && prevProps && prevProps.isLoading && useCache) {\n cacheRef.current[queryRef.current] = options;\n }\n });\n\n var getEmptyLabel = function getEmptyLabel() {\n if (!queryRef.current.length) {\n return promptText;\n }\n\n if (isLoading) {\n return searchText;\n }\n\n return emptyLabel;\n };\n\n var handleInputChange = useCallback(function (query, e) {\n onInputChange && onInputChange(query, e);\n handleSearchDebouncedRef.current && handleSearchDebouncedRef.current(query);\n }, [onInputChange]);\n var cachedQuery = cacheRef.current[queryRef.current];\n return _extends({}, otherProps, {\n // Disable custom selections during a search if `allowNew` isn't a function.\n allowNew: isFunction(allowNew) ? allowNew : allowNew && !isLoading,\n emptyLabel: getEmptyLabel(),\n isLoading: isLoading,\n minLength: minLength,\n onInputChange: handleInputChange,\n options: useCache && cachedQuery ? cachedQuery : options\n });\n}\nexport function withAsync(Component) {\n var AsyncTypeahead = /*#__PURE__*/forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(Component, _extends({}, useAsync(props), {\n ref: ref\n }));\n });\n AsyncTypeahead.displayName = \"withAsync(\" + getDisplayName(Component) + \")\"; // $FlowFixMe\n\n AsyncTypeahead.propTypes = propTypes; // $FlowFixMe\n\n AsyncTypeahead.defaultProps = defaultProps;\n return AsyncTypeahead;\n}\nexport default function asyncContainer(Component) {\n /* istanbul ignore next */\n warn(false, 'The `asyncContainer` export is deprecated; use `withAsync` instead.');\n /* istanbul ignore next */\n\n return withAsync(Component);\n}","import { useReducer } from 'react';\n/**\n * Returns a function that triggers a component update. the hook equivalent to\n * `this.forceUpdate()` in a class component. In most cases using a state value directly\n * is preferable but may be required in some advanced usages of refs for interop or\n * when direct DOM manipulation is required.\n *\n * ```ts\n * const forceUpdate = useForceUpdate();\n *\n * const updateOnClick = useCallback(() => {\n * forceUpdate()\n * }, [forceUpdate])\n *\n * return \n * ```\n */\n\nexport default function useForceUpdate() {\n // The toggling state value is designed to defeat React optimizations for skipping\n // updates when they are stricting equal to the last state value\n var _useReducer = useReducer(function (state) {\n return !state;\n }, false),\n dispatch = _useReducer[1];\n\n return dispatch;\n}","export default !!(typeof window !== 'undefined' && window.document && window.document.createElement);","/* eslint-disable no-return-assign */\nimport canUseDOM from './canUseDOM';\nexport var optionsSupported = false;\nexport var onceSupported = false;\n\ntry {\n var options = {\n get passive() {\n return optionsSupported = true;\n },\n\n get once() {\n // eslint-disable-next-line no-multi-assign\n return onceSupported = optionsSupported = true;\n }\n\n };\n\n if (canUseDOM) {\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, true);\n }\n} catch (e) {\n /* */\n}\n\n/**\n * An `addEventListener` ponyfill, supports the `once` option\n */\nfunction addEventListener(node, eventName, handler, options) {\n if (options && typeof options !== 'boolean' && !onceSupported) {\n var once = options.once,\n capture = options.capture;\n var wrappedHandler = handler;\n\n if (!onceSupported && once) {\n wrappedHandler = handler.__once || function onceHandler(event) {\n this.removeEventListener(eventName, onceHandler, capture);\n handler.call(this, event);\n };\n\n handler.__once = wrappedHandler;\n }\n\n node.addEventListener(eventName, wrappedHandler, optionsSupported ? options : capture);\n }\n\n node.addEventListener(eventName, handler, options);\n}\n\nexport default addEventListener;","function removeEventListener(node, eventName, handler, options) {\n var capture = options && typeof options !== 'boolean' ? options.capture : options;\n node.removeEventListener(eventName, handler, capture);\n\n if (handler.__once) {\n node.removeEventListener(eventName, handler.__once, capture);\n }\n}\n\nexport default removeEventListener;","import addEventListener from './addEventListener';\nimport removeEventListener from './removeEventListener';\n\nfunction listen(node, eventName, handler, options) {\n addEventListener(node, eventName, handler, options);\n return function () {\n removeEventListener(node, eventName, handler, options);\n };\n}\n\nexport default listen;","import { useEffect, useRef } from 'react';\n/**\n * Creates a `Ref` whose value is updated in an effect, ensuring the most recent\n * value is the one rendered with. Generally only required for Concurrent mode usage\n * where previous work in `render()` may be discarded befor being used.\n *\n * This is safe to access in an event handler.\n *\n * @param value The `Ref` value\n */\n\nfunction useCommittedRef(value) {\n var ref = useRef(value);\n useEffect(function () {\n ref.current = value;\n }, [value]);\n return ref;\n}\n\nexport default useCommittedRef;","import { useCallback } from 'react';\nimport useCommittedRef from './useCommittedRef';\nexport default function useEventCallback(fn) {\n var ref = useCommittedRef(fn);\n return useCallback(function () {\n return ref.current && ref.current.apply(ref, arguments);\n }, [ref]);\n}","import ownerDocument from 'dom-helpers/ownerDocument';\nimport safeFindDOMNode from './safeFindDOMNode';\nexport default (function (componentOrElement) {\n return ownerDocument(safeFindDOMNode(componentOrElement));\n});","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ReactDOM from 'react-dom';\nexport default function safeFindDOMNode(componentOrElement) {\n if (componentOrElement && 'setState' in componentOrElement) {\n return ReactDOM.findDOMNode(componentOrElement);\n }\n\n return componentOrElement != null ? componentOrElement : null;\n}","import contains from 'dom-helpers/contains';\nimport listen from 'dom-helpers/listen';\nimport { useCallback, useEffect, useRef } from 'react';\nimport useEventCallback from '@restart/hooks/useEventCallback';\nimport warning from 'warning';\nimport ownerDocument from './ownerDocument';\nvar escapeKeyCode = 27;\n\nvar noop = function noop() {};\n\nfunction isLeftClickEvent(event) {\n return event.button === 0;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar getRefTarget = function getRefTarget(ref) {\n return ref && ('current' in ref ? ref.current : ref);\n};\n\n/**\n * The `useRootClose` hook registers your callback on the document\n * when rendered. Powers the `` component. This is used achieve modal\n * style behavior where your callback is triggered when the user tries to\n * interact with the rest of the document or hits the `esc` key.\n *\n * @param {Ref| HTMLElement} ref The element boundary\n * @param {function} onRootClose\n * @param {object=} options\n * @param {boolean=} options.disabled\n * @param {string=} options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on\n */\nfunction useRootClose(ref, onRootClose, _temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n disabled = _ref.disabled,\n _ref$clickTrigger = _ref.clickTrigger,\n clickTrigger = _ref$clickTrigger === void 0 ? 'click' : _ref$clickTrigger;\n\n var preventMouseRootCloseRef = useRef(false);\n var onClose = onRootClose || noop;\n var handleMouseCapture = useCallback(function (e) {\n var currentTarget = getRefTarget(ref);\n warning(!!currentTarget, 'RootClose captured a close event but does not have a ref to compare it to. ' + 'useRootClose(), should be passed a ref that resolves to a DOM node');\n preventMouseRootCloseRef.current = !currentTarget || isModifiedEvent(e) || !isLeftClickEvent(e) || !!contains(currentTarget, e.target);\n }, [ref]);\n var handleMouse = useEventCallback(function (e) {\n if (!preventMouseRootCloseRef.current) {\n onClose(e);\n }\n });\n var handleKeyUp = useEventCallback(function (e) {\n if (e.keyCode === escapeKeyCode) {\n onClose(e);\n }\n });\n useEffect(function () {\n if (disabled || ref == null) return undefined; // Store the current event to avoid triggering handlers immediately\n // https://github.com/facebook/react/issues/20074\n\n var currentEvent = window.event;\n var doc = ownerDocument(getRefTarget(ref)); // Use capture for this listener so it fires before React's listener, to\n // avoid false positives in the contains() check below if the target DOM\n // element is removed in the React mouse callback.\n\n var removeMouseCaptureListener = listen(doc, clickTrigger, handleMouseCapture, true);\n var removeMouseListener = listen(doc, clickTrigger, function (e) {\n // skip if this event is the same as the one running when we added the handlers\n if (e === currentEvent) {\n currentEvent = undefined;\n return;\n }\n\n handleMouse(e);\n });\n var removeKeyupListener = listen(doc, 'keyup', function (e) {\n // skip if this event is the same as the one running when we added the handlers\n if (e === currentEvent) {\n currentEvent = undefined;\n return;\n }\n\n handleKeyUp(e);\n });\n var mobileSafariHackListeners = [];\n\n if ('ontouchstart' in doc.documentElement) {\n mobileSafariHackListeners = [].slice.call(doc.body.children).map(function (el) {\n return listen(el, 'mousemove', noop);\n });\n }\n\n return function () {\n removeMouseCaptureListener();\n removeMouseListener();\n removeKeyupListener();\n mobileSafariHackListeners.forEach(function (remove) {\n return remove();\n });\n };\n }, [ref, disabled, clickTrigger, handleMouseCapture, handleMouse, handleKeyUp]);\n}\n\nexport default useRootClose;","/* eslint-disable no-bitwise, no-cond-assign */\n// HTML DOM and SVG DOM may have different support levels,\n// so we need to check on context instead of a document root element.\nexport default function contains(context, node) {\n if (context.contains) return context.contains(node);\n if (context.compareDocumentPosition) return context === node || !!(context.compareDocumentPosition(node) & 16);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport cx from 'classnames';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { isSizeLarge, noop } from '../utils';\nimport { sizeType } from '../propTypes';\nimport { BACKSPACE } from '../constants';\nvar propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n onKeyDown: PropTypes.func,\n size: sizeType\n};\nvar defaultProps = {\n label: 'Clear',\n onClick: noop,\n onKeyDown: noop\n};\n\n/**\n * ClearButton\n *\n * http://getbootstrap.com/css/#helper-classes-close\n */\nvar ClearButton = function ClearButton(_ref) {\n var className = _ref.className,\n label = _ref.label,\n _onClick = _ref.onClick,\n _onKeyDown = _ref.onKeyDown,\n size = _ref.size,\n props = _objectWithoutPropertiesLoose(_ref, [\"className\", \"label\", \"onClick\", \"onKeyDown\", \"size\"]);\n\n return /*#__PURE__*/React.createElement(\"button\", _extends({}, props, {\n \"aria-label\": label,\n className: cx('close', 'rbt-close', {\n 'rbt-close-lg': isSizeLarge(size)\n }, className),\n onClick: function onClick(e) {\n e.stopPropagation();\n\n _onClick(e);\n },\n onKeyDown: function onKeyDown(e) {\n // Prevent browser from navigating back.\n if (e.keyCode === BACKSPACE) {\n e.preventDefault();\n }\n\n _onKeyDown(e);\n },\n type: \"button\"\n }), /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xD7\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"sr-only\"\n }, label));\n};\n\nClearButton.propTypes = propTypes;\nClearButton.defaultProps = defaultProps;\nexport default ClearButton;","import PropTypes from 'prop-types';\nimport React from 'react';\nvar propTypes = {\n label: PropTypes.string\n};\nvar defaultProps = {\n label: 'Loading...'\n};\n\nvar Loader = function Loader(_ref) {\n var label = _ref.label;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"rbt-loader spinner-border spinner-border-sm\",\n role: \"status\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"sr-only\"\n }, label));\n};\n\nLoader.propTypes = propTypes;\nLoader.defaultProps = defaultProps;\nexport default Loader;","import _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport * as React from 'react';\nimport createContext from 'create-react-context';\nexport var ManagerReferenceNodeContext = createContext();\nexport var ManagerReferenceNodeSetterContext = createContext();\n\nvar Manager =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Manager, _React$Component);\n\n function Manager() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"referenceNode\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setReferenceNode\", function (newReferenceNode) {\n if (newReferenceNode && _this.referenceNode !== newReferenceNode) {\n _this.referenceNode = newReferenceNode;\n\n _this.forceUpdate();\n }\n });\n\n return _this;\n }\n\n var _proto = Manager.prototype;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.referenceNode = null;\n };\n\n _proto.render = function render() {\n return React.createElement(ManagerReferenceNodeContext.Provider, {\n value: this.referenceNode\n }, React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n value: this.setReferenceNode\n }, this.props.children));\n };\n\n return Manager;\n}(React.Component);\n\nexport { Manager as default };","/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === \"function\") {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Does a shallow equality check of two objects by comparing the reference\n * equality of each value.\n */\n\nexport var shallowEqual = function shallowEqual(objA, objB) {\n var aKeys = Object.keys(objA);\n var bKeys = Object.keys(objB);\n\n if (bKeys.length !== aKeys.length) {\n return false;\n }\n\n for (var i = 0; i < bKeys.length; i++) {\n var key = aKeys[i];\n\n if (objA[key] !== objB[key]) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === \"function\") {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport deepEqual from \"deep-equal\";\nimport * as React from 'react';\nimport PopperJS from 'popper.js';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef, shallowEqual } from './utils';\nvar initialStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: 0,\n pointerEvents: 'none'\n};\nvar initialArrowStyle = {};\nexport var InnerPopper =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(InnerPopper, _React$Component);\n\n function InnerPopper() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n data: undefined,\n placement: undefined\n });\n\n _defineProperty(_assertThisInitialized(_this), \"popperInstance\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"popperNode\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"arrowNode\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"setPopperNode\", function (popperNode) {\n if (!popperNode || _this.popperNode === popperNode) return;\n setRef(_this.props.innerRef, popperNode);\n _this.popperNode = popperNode;\n\n _this.updatePopperInstance();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setArrowNode\", function (arrowNode) {\n _this.arrowNode = arrowNode;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateStateModifier\", {\n enabled: true,\n order: 900,\n fn: function fn(data) {\n var placement = data.placement;\n\n _this.setState({\n data: data,\n placement: placement\n });\n\n return data;\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getOptions\", function () {\n return {\n placement: _this.props.placement,\n eventsEnabled: _this.props.eventsEnabled,\n positionFixed: _this.props.positionFixed,\n modifiers: _extends({}, _this.props.modifiers, {\n arrow: _extends({}, _this.props.modifiers && _this.props.modifiers.arrow, {\n enabled: !!_this.arrowNode,\n element: _this.arrowNode\n }),\n applyStyle: {\n enabled: false\n },\n updateStateModifier: _this.updateStateModifier\n })\n };\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getPopperStyle\", function () {\n return !_this.popperNode || !_this.state.data ? initialStyle : _extends({\n position: _this.state.data.offsets.popper.position\n }, _this.state.data.styles);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getPopperPlacement\", function () {\n return !_this.state.data ? undefined : _this.state.placement;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getArrowStyle\", function () {\n return !_this.arrowNode || !_this.state.data ? initialArrowStyle : _this.state.data.arrowStyles;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getOutOfBoundariesState\", function () {\n return _this.state.data ? _this.state.data.hide : undefined;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"destroyPopperInstance\", function () {\n if (!_this.popperInstance) return;\n\n _this.popperInstance.destroy();\n\n _this.popperInstance = null;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updatePopperInstance\", function () {\n _this.destroyPopperInstance();\n\n var _assertThisInitialize = _assertThisInitialized(_this),\n popperNode = _assertThisInitialize.popperNode;\n\n var referenceElement = _this.props.referenceElement;\n if (!referenceElement || !popperNode) return;\n _this.popperInstance = new PopperJS(referenceElement, popperNode, _this.getOptions());\n });\n\n _defineProperty(_assertThisInitialized(_this), \"scheduleUpdate\", function () {\n if (_this.popperInstance) {\n _this.popperInstance.scheduleUpdate();\n }\n });\n\n return _this;\n }\n\n var _proto = InnerPopper.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // If the Popper.js options have changed, update the instance (destroy + create)\n if (this.props.placement !== prevProps.placement || this.props.referenceElement !== prevProps.referenceElement || this.props.positionFixed !== prevProps.positionFixed || !deepEqual(this.props.modifiers, prevProps.modifiers, {\n strict: true\n })) {\n // develop only check that modifiers isn't being updated needlessly\n if (process.env.NODE_ENV === \"development\") {\n if (this.props.modifiers !== prevProps.modifiers && this.props.modifiers != null && prevProps.modifiers != null && shallowEqual(this.props.modifiers, prevProps.modifiers)) {\n console.warn(\"'modifiers' prop reference updated even though all values appear the same.\\nConsider memoizing the 'modifiers' object to avoid needless rendering.\");\n }\n }\n\n this.updatePopperInstance();\n } else if (this.props.eventsEnabled !== prevProps.eventsEnabled && this.popperInstance) {\n this.props.eventsEnabled ? this.popperInstance.enableEventListeners() : this.popperInstance.disableEventListeners();\n } // A placement difference in state means popper determined a new placement\n // apart from the props value. By the time the popper element is rendered with\n // the new position Popper has already measured it, if the place change triggers\n // a size change it will result in a misaligned popper. So we schedule an update to be sure.\n\n\n if (prevState.placement !== this.state.placement) {\n this.scheduleUpdate();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n setRef(this.props.innerRef, null);\n this.destroyPopperInstance();\n };\n\n _proto.render = function render() {\n return unwrapArray(this.props.children)({\n ref: this.setPopperNode,\n style: this.getPopperStyle(),\n placement: this.getPopperPlacement(),\n outOfBoundaries: this.getOutOfBoundariesState(),\n scheduleUpdate: this.scheduleUpdate,\n arrowProps: {\n ref: this.setArrowNode,\n style: this.getArrowStyle()\n }\n });\n };\n\n return InnerPopper;\n}(React.Component);\n\n_defineProperty(InnerPopper, \"defaultProps\", {\n placement: 'bottom',\n eventsEnabled: true,\n referenceElement: undefined,\n positionFixed: false\n});\n\nvar placements = PopperJS.placements;\nexport { placements };\nexport default function Popper(_ref) {\n var referenceElement = _ref.referenceElement,\n props = _objectWithoutPropertiesLoose(_ref, [\"referenceElement\"]);\n\n return React.createElement(ManagerReferenceNodeContext.Consumer, null, function (referenceNode) {\n return React.createElement(InnerPopper, _extends({\n referenceElement: referenceElement !== undefined ? referenceElement : referenceNode\n }, props));\n });\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\n\n/* eslint-disable react/no-unused-prop-types */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Popper } from 'react-popper';\nimport { values } from '../utils';\nimport { ALIGN } from '../constants';\n// `Element` is not defined during server-side rendering, so shim it here.\n\n/* istanbul ignore next */\nvar SafeElement = typeof Element === 'undefined' ? function () {} : Element;\nvar propTypes = {\n /**\n * Specify menu alignment. The default value is `justify`, which makes the\n * menu as wide as the input and truncates long values. Specifying `left`\n * or `right` will align the menu to that side and the width will be\n * determined by the length of menu item values.\n */\n align: PropTypes.oneOf(values(ALIGN)),\n children: PropTypes.func.isRequired,\n\n /**\n * Specify whether the menu should appear above the input.\n */\n dropup: PropTypes.bool,\n\n /**\n * Whether or not to automatically adjust the position of the menu when it\n * reaches the viewport boundaries.\n */\n flip: PropTypes.bool,\n isMenuShown: PropTypes.bool,\n positionFixed: PropTypes.bool,\n referenceElement: PropTypes.instanceOf(SafeElement)\n};\nvar defaultProps = {\n align: ALIGN.JUSTIFY,\n dropup: false,\n flip: false,\n isMenuShown: false,\n positionFixed: false\n};\n\nfunction getModifiers(_ref) {\n var align = _ref.align,\n flip = _ref.flip;\n return {\n computeStyles: {\n enabled: true,\n fn: function fn(_ref2) {\n var styles = _ref2.styles,\n data = _objectWithoutPropertiesLoose(_ref2, [\"styles\"]);\n\n return _extends({}, data, {\n styles: _extends({}, styles, {\n // Use the following condition instead of `align === 'justify'`\n // since it allows the component to fall back to justifying the\n // menu width if `align` is undefined.\n width: align !== ALIGN.RIGHT && align !== ALIGN.LEFT ? // Set the popper width to match the target width.\n data.offsets.reference.width : styles.width\n })\n });\n }\n },\n flip: {\n enabled: flip\n },\n preventOverflow: {\n escapeWithReference: true\n }\n };\n} // Flow expects a string literal value for `placement`.\n\n\nvar PLACEMENT = {\n bottom: {\n end: 'bottom-end',\n start: 'bottom-start'\n },\n top: {\n end: 'top-end',\n start: 'top-start'\n }\n};\nexport function getPlacement(_ref3) {\n var align = _ref3.align,\n dropup = _ref3.dropup;\n var x = align === ALIGN.RIGHT ? 'end' : 'start';\n var y = dropup ? 'top' : 'bottom';\n return PLACEMENT[y][x];\n}\n\nvar Overlay = function Overlay(props) {\n var children = props.children,\n isMenuShown = props.isMenuShown,\n positionFixed = props.positionFixed,\n referenceElement = props.referenceElement;\n\n if (!isMenuShown) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(Popper, {\n modifiers: getModifiers(props),\n placement: getPlacement(props),\n positionFixed: positionFixed,\n referenceElement: referenceElement\n }, function (_ref4) {\n var ref = _ref4.ref,\n popperProps = _objectWithoutPropertiesLoose(_ref4, [\"ref\"]);\n\n return children(_extends({}, popperProps, {\n innerRef: ref,\n inputHeight: referenceElement ? referenceElement.offsetHeight : 0\n }));\n });\n};\n\nOverlay.propTypes = propTypes;\nOverlay.defaultProps = defaultProps;\nexport default Overlay;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport PropTypes from 'prop-types';\nimport React, { useState } from 'react';\nimport useRootClose from \"react-overlays/useRootClose\";\nimport { getDisplayName, isFunction, warn } from '../utils';\nimport { BACKSPACE } from '../constants';\nimport { optionType } from '../propTypes';\nvar propTypes = {\n onBlur: PropTypes.func,\n onClick: PropTypes.func,\n onFocus: PropTypes.func,\n onRemove: PropTypes.func,\n option: optionType.isRequired\n};\nexport var useToken = function useToken(_ref) {\n var onBlur = _ref.onBlur,\n onClick = _ref.onClick,\n onFocus = _ref.onFocus,\n onRemove = _ref.onRemove,\n option = _ref.option,\n props = _objectWithoutPropertiesLoose(_ref, [\"onBlur\", \"onClick\", \"onFocus\", \"onRemove\", \"option\"]);\n\n var _useState = useState(false),\n active = _useState[0],\n setActive = _useState[1];\n\n var _useState2 = useState(null),\n rootElement = _useState2[0],\n attachRef = _useState2[1];\n\n var handleActiveChange = function handleActiveChange(e, isActive, callback) {\n e.stopPropagation();\n setActive(isActive);\n typeof callback === 'function' && callback(e);\n };\n\n var handleBlur = function handleBlur(e) {\n handleActiveChange(e, false, onBlur);\n };\n\n var handleClick = function handleClick(e) {\n handleActiveChange(e, true, onClick);\n };\n\n var handleFocus = function handleFocus(e) {\n handleActiveChange(e, true, onFocus);\n };\n\n var handleRemove = function handleRemove() {\n onRemove && onRemove(option);\n };\n\n var handleKeyDown = function handleKeyDown(e) {\n switch (e.keyCode) {\n case BACKSPACE:\n if (active) {\n // Prevent backspace keypress from triggering the browser \"back\"\n // action.\n e.preventDefault();\n handleRemove();\n }\n\n break;\n\n default:\n break;\n }\n };\n\n useRootClose(rootElement, handleBlur, _extends({}, props, {\n disabled: !active\n }));\n return _extends({}, props, {\n active: active,\n onBlur: handleBlur,\n onClick: handleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onRemove: isFunction(onRemove) ? handleRemove : undefined,\n ref: attachRef\n });\n};\nexport var withToken = function withToken(Component) {\n var displayName = \"withToken(\" + getDisplayName(Component) + \")\";\n\n var WrappedToken = function WrappedToken(props) {\n return /*#__PURE__*/React.createElement(Component, useToken(props));\n };\n\n WrappedToken.displayName = displayName;\n WrappedToken.propTypes = propTypes;\n return WrappedToken;\n};\nexport default function tokenContainer(Component) {\n /* istanbul ignore next */\n warn(false, 'The `tokenContainer` export is deprecated; use `withToken` instead.');\n /* istanbul ignore next */\n\n return withToken(Component);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport cx from 'classnames';\nimport React, { forwardRef } from 'react';\nimport ClearButton from './ClearButton';\nimport { withToken } from '../behaviors/token';\nimport { isFunction } from '../utils';\nvar InteractiveToken = /*#__PURE__*/forwardRef(function (_ref, ref) {\n var active = _ref.active,\n children = _ref.children,\n className = _ref.className,\n onRemove = _ref.onRemove,\n tabIndex = _ref.tabIndex,\n props = _objectWithoutPropertiesLoose(_ref, [\"active\", \"children\", \"className\", \"onRemove\", \"tabIndex\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, props, {\n className: cx('rbt-token', 'rbt-token-removeable', {\n 'rbt-token-active': !!active\n }, className),\n ref: ref,\n tabIndex: tabIndex || 0\n }), children, /*#__PURE__*/React.createElement(ClearButton, {\n className: \"rbt-token-remove-button\",\n label: \"Remove\",\n onClick: onRemove,\n tabIndex: -1\n }));\n});\n\nvar StaticToken = function StaticToken(_ref2) {\n var children = _ref2.children,\n className = _ref2.className,\n disabled = _ref2.disabled,\n href = _ref2.href;\n var classnames = cx('rbt-token', {\n 'rbt-token-disabled': disabled\n }, className);\n\n if (href && !disabled) {\n return /*#__PURE__*/React.createElement(\"a\", {\n className: classnames,\n href: href\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classnames\n }, children);\n};\n/**\n * Token\n *\n * Individual token component, generally displayed within the TokenizerInput\n * component, but can also be rendered on its own.\n */\n\n\nvar Token = /*#__PURE__*/forwardRef(function (props, ref) {\n var disabled = props.disabled,\n onRemove = props.onRemove,\n readOnly = props.readOnly;\n return !disabled && !readOnly && isFunction(onRemove) ? /*#__PURE__*/React.createElement(InteractiveToken, _extends({}, props, {\n ref: ref\n })) : /*#__PURE__*/React.createElement(StaticToken, props);\n});\nexport default withToken(Token);","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport invariant from 'invariant';\nimport React, { cloneElement, useEffect, useRef } from 'react';\nimport { useTypeaheadContext } from '../core/Context';\nimport { isSelectable } from '../utils';\nimport { RETURN, RIGHT, TAB } from '../constants';\n\n// IE doesn't seem to get the composite computed value (eg: 'padding',\n// 'borderStyle', etc.), so generate these from the individual values.\nfunction interpolateStyle(styles, attr, subattr) {\n if (subattr === void 0) {\n subattr = '';\n }\n\n // Title-case the sub-attribute.\n if (subattr) {\n /* eslint-disable-next-line no-param-reassign */\n subattr = subattr.replace(subattr[0], subattr[0].toUpperCase());\n }\n\n return ['Top', 'Right', 'Bottom', 'Left'].map(function (dir) {\n return styles[attr + dir + subattr];\n }).join(' ');\n}\n\nfunction copyStyles(inputNode, hintNode) {\n if (!inputNode || !hintNode) {\n return;\n }\n\n var inputStyle = window.getComputedStyle(inputNode);\n /* eslint-disable no-param-reassign */\n\n hintNode.style.borderStyle = interpolateStyle(inputStyle, 'border', 'style');\n hintNode.style.borderWidth = interpolateStyle(inputStyle, 'border', 'width');\n hintNode.style.fontSize = inputStyle.fontSize;\n hintNode.style.height = inputStyle.height;\n hintNode.style.lineHeight = inputStyle.lineHeight;\n hintNode.style.margin = interpolateStyle(inputStyle, 'margin');\n hintNode.style.padding = interpolateStyle(inputStyle, 'padding');\n /* eslint-enable no-param-reassign */\n}\n\nexport function defaultShouldSelect(e, state) {\n var shouldSelectHint = false;\n var currentTarget = e.currentTarget,\n keyCode = e.keyCode;\n\n if (keyCode === RIGHT) {\n // For selectable input types (\"text\", \"search\"), only select the hint if\n // it's at the end of the input value. For non-selectable types (\"email\",\n // \"number\"), always select the hint.\n shouldSelectHint = isSelectable(currentTarget) ? currentTarget.selectionStart === currentTarget.value.length : true;\n }\n\n if (keyCode === TAB) {\n // Prevent input from blurring on TAB.\n e.preventDefault();\n shouldSelectHint = true;\n }\n\n if (keyCode === RETURN) {\n shouldSelectHint = !!state.selectHintOnEnter;\n }\n\n return typeof state.shouldSelect === 'function' ? state.shouldSelect(shouldSelectHint, e) : shouldSelectHint;\n}\nexport var useHint = function useHint(_ref) {\n var children = _ref.children,\n shouldSelect = _ref.shouldSelect;\n !(React.Children.count(children) === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, '`useHint` expects one child.') : invariant(false) : void 0;\n\n var _useTypeaheadContext = useTypeaheadContext(),\n hintText = _useTypeaheadContext.hintText,\n initialItem = _useTypeaheadContext.initialItem,\n inputNode = _useTypeaheadContext.inputNode,\n onAdd = _useTypeaheadContext.onAdd,\n selectHintOnEnter = _useTypeaheadContext.selectHintOnEnter;\n\n var hintRef = useRef(null);\n\n var onKeyDown = function onKeyDown(e) {\n if (hintText && initialItem && defaultShouldSelect(e, {\n selectHintOnEnter: selectHintOnEnter,\n shouldSelect: shouldSelect\n })) {\n onAdd(initialItem);\n }\n\n children.props.onKeyDown && children.props.onKeyDown(e);\n };\n\n useEffect(function () {\n copyStyles(inputNode, hintRef.current);\n });\n return {\n child: /*#__PURE__*/cloneElement(children, _extends({}, children.props, {\n onKeyDown: onKeyDown\n })),\n hintRef: hintRef,\n hintText: hintText\n };\n};\n\nvar Hint = function Hint(_ref2) {\n var className = _ref2.className,\n props = _objectWithoutPropertiesLoose(_ref2, [\"className\"]);\n\n var _useHint = useHint(props),\n child = _useHint.child,\n hintRef = _useHint.hintRef,\n hintText = _useHint.hintText;\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className,\n style: {\n display: 'flex',\n flex: 1,\n height: '100%',\n position: 'relative'\n }\n }, child, /*#__PURE__*/React.createElement(\"input\", {\n \"aria-hidden\": true,\n className: \"rbt-input-hint\",\n ref: hintRef,\n readOnly: true,\n style: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n boxShadow: 'none',\n color: 'rgba(0, 0, 0, 0.35)',\n left: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: '100%'\n },\n tabIndex: -1,\n value: hintText\n }));\n};\n\nexport default Hint;","import _extends from \"@babel/runtime/helpers/extends\";\nimport cx from 'classnames';\nimport React from 'react';\nvar Input = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(\"input\", _extends({}, props, {\n className: cx('rbt-input-main', props.className),\n ref: ref\n }));\n});\nexport default Input;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport cx from 'classnames';\nimport React from 'react';\nimport { getDisplayName, isSizeLarge, isSizeSmall } from '../utils';\n\nfunction withClassNames(Component) {\n // Use a class instead of function component to support refs.\n\n /* eslint-disable-next-line react/prefer-stateless-function */\n var WrappedComponent = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(WrappedComponent, _React$Component);\n\n function WrappedComponent() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = WrappedComponent.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n isInvalid = _this$props.isInvalid,\n isValid = _this$props.isValid,\n size = _this$props.size,\n props = _objectWithoutPropertiesLoose(_this$props, [\"className\", \"isInvalid\", \"isValid\", \"size\"]);\n\n return /*#__PURE__*/React.createElement(Component, _extends({}, props, {\n className: cx('form-control', 'rbt-input', {\n 'form-control-lg': isSizeLarge(size),\n 'form-control-sm': isSizeSmall(size),\n 'is-invalid': isInvalid,\n 'is-valid': isValid\n }, className)\n }));\n };\n\n return WrappedComponent;\n }(React.Component);\n\n _defineProperty(WrappedComponent, \"displayName\", \"withClassNames(\" + getDisplayName(Component) + \")\");\n\n return WrappedComponent;\n}\n\nexport default withClassNames;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport cx from 'classnames';\nimport React from 'react';\nimport Hint from './Hint';\nimport Input from './Input';\nimport { isSelectable } from '../utils';\nimport withClassNames from '../behaviors/classNames';\nimport { BACKSPACE } from '../constants';\n\nvar TypeaheadInputMulti = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(TypeaheadInputMulti, _React$Component);\n\n function TypeaheadInputMulti() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"wrapperRef\", /*#__PURE__*/React.createRef());\n\n _defineProperty(_assertThisInitialized(_this), \"_input\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"getInputRef\", function (input) {\n _this._input = input;\n\n _this.props.inputRef(input);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleContainerClickOrFocus\", function (e) {\n // Don't focus the input if it's disabled.\n if (_this.props.disabled) {\n e.currentTarget.blur();\n return;\n } // Move cursor to the end if the user clicks outside the actual input.\n\n\n var inputNode = _this._input;\n\n if (!inputNode) {\n return;\n }\n\n if (e.currentTarget !== inputNode && isSelectable(inputNode)) {\n inputNode.selectionStart = inputNode.value.length;\n }\n\n inputNode.focus();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_handleKeyDown\", function (e) {\n var _this$props = _this.props,\n onKeyDown = _this$props.onKeyDown,\n selected = _this$props.selected,\n value = _this$props.value;\n\n switch (e.keyCode) {\n case BACKSPACE:\n if (e.currentTarget === _this._input && selected.length && !value) {\n // Prevent browser from going back.\n e.preventDefault(); // If the input is selected and there is no text, focus the last\n // token when the user hits backspace.\n\n if (_this.wrapperRef.current) {\n var children = _this.wrapperRef.current.children;\n var lastToken = children[children.length - 2];\n lastToken && lastToken.focus();\n }\n }\n\n break;\n\n default:\n break;\n }\n\n onKeyDown(e);\n });\n\n return _this;\n }\n\n var _proto = TypeaheadInputMulti.prototype;\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n children = _this$props2.children,\n className = _this$props2.className,\n inputClassName = _this$props2.inputClassName,\n inputRef = _this$props2.inputRef,\n placeholder = _this$props2.placeholder,\n referenceElementRef = _this$props2.referenceElementRef,\n selected = _this$props2.selected,\n shouldSelectHint = _this$props2.shouldSelectHint,\n props = _objectWithoutPropertiesLoose(_this$props2, [\"children\", \"className\", \"inputClassName\", \"inputRef\", \"placeholder\", \"referenceElementRef\", \"selected\", \"shouldSelectHint\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: cx('rbt-input-multi', className),\n disabled: props.disabled,\n onClick: this._handleContainerClickOrFocus,\n onFocus: this._handleContainerClickOrFocus,\n ref: referenceElementRef,\n tabIndex: -1\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"rbt-input-wrapper\",\n ref: this.wrapperRef\n }, children, /*#__PURE__*/React.createElement(Hint, {\n shouldSelect: shouldSelectHint\n }, /*#__PURE__*/React.createElement(Input, _extends({}, props, {\n className: inputClassName,\n onKeyDown: this._handleKeyDown,\n placeholder: selected.length ? '' : placeholder,\n ref: this.getInputRef,\n style: {\n backgroundColor: 'transparent',\n border: 0,\n boxShadow: 'none',\n cursor: 'inherit',\n outline: 'none',\n padding: 0,\n width: '100%',\n zIndex: 1\n }\n })))));\n };\n\n return TypeaheadInputMulti;\n}(React.Component);\n\nexport default withClassNames(TypeaheadInputMulti);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport Hint from './Hint';\nimport Input from './Input';\nimport withClassNames from '../behaviors/classNames';\nexport default withClassNames(function (_ref) {\n var inputRef = _ref.inputRef,\n referenceElementRef = _ref.referenceElementRef,\n shouldSelectHint = _ref.shouldSelectHint,\n props = _objectWithoutPropertiesLoose(_ref, [\"inputRef\", \"referenceElementRef\", \"shouldSelectHint\"]);\n\n return /*#__PURE__*/React.createElement(Hint, {\n shouldSelect: shouldSelectHint\n }, /*#__PURE__*/React.createElement(Input, _extends({}, props, {\n ref: function ref(node) {\n inputRef(node);\n referenceElementRef(node);\n }\n })));\n});","import _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { getMatchBounds } from '../utils';\nvar propTypes = {\n children: PropTypes.string.isRequired,\n highlightClassName: PropTypes.string,\n search: PropTypes.string.isRequired\n};\nvar defaultProps = {\n highlightClassName: 'rbt-highlight-text'\n};\n\n/**\n * Stripped-down version of https://github.com/helior/react-highlighter\n *\n * Results are already filtered by the time the component is used internally so\n * we can safely ignore case and diacritical marks for the purposes of matching.\n */\nvar Highlighter = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Highlighter, _React$PureComponent);\n\n function Highlighter() {\n return _React$PureComponent.apply(this, arguments) || this;\n }\n\n var _proto = Highlighter.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n highlightClassName = _this$props.highlightClassName,\n search = _this$props.search;\n\n if (!search || !children) {\n return children;\n }\n\n var matchCount = 0;\n var remaining = children;\n var highlighterChildren = [];\n\n while (remaining) {\n var bounds = getMatchBounds(remaining, search); // No match anywhere in the remaining string, stop.\n\n if (!bounds) {\n highlighterChildren.push(remaining);\n break;\n } // Capture the string that leads up to a match.\n\n\n var nonMatch = remaining.slice(0, bounds.start);\n\n if (nonMatch) {\n highlighterChildren.push(nonMatch);\n } // Capture the matching string.\n\n\n var match = remaining.slice(bounds.start, bounds.end);\n highlighterChildren.push( /*#__PURE__*/React.createElement(\"mark\", {\n className: highlightClassName,\n key: matchCount\n }, match));\n matchCount += 1; // And if there's anything left over, continue the loop.\n\n remaining = remaining.slice(bounds.end);\n }\n\n return highlighterChildren;\n };\n\n return Highlighter;\n}(React.PureComponent);\n\n_defineProperty(Highlighter, \"propTypes\", propTypes);\n\n_defineProperty(Highlighter, \"defaultProps\", defaultProps);\n\nexport default Highlighter;","// Compute what scrolling needs to be done on required scrolling boxes for target to be in view\n\n// The type names here are named after the spec to make it easier to find more information around what they mean:\n// To reduce churn and reduce things that need be maintained things from the official TS DOM library is used here\n// https://drafts.csswg.org/cssom-view/\n\n// For a definition on what is \"block flow direction\" exactly, check this: https://drafts.csswg.org/css-writing-modes-4/#block-flow-direction\n\n// add support for visualViewport object currently implemented in chrome\ninterface visualViewport {\n height: number\n width: number\n}\n\ntype ScrollLogicalPosition = 'start' | 'center' | 'end' | 'nearest'\n// This new option is tracked in this PR, which is the most likely candidate at the time: https://github.com/w3c/csswg-drafts/pull/1805\ntype ScrollMode = 'always' | 'if-needed'\n// New option that skips auto-scrolling all nodes with overflow: hidden set\n// See FF implementation: https://hg.mozilla.org/integration/fx-team/rev/c48c3ec05012#l7.18\ntype SkipOverflowHiddenElements = boolean\n\ninterface Options {\n block?: ScrollLogicalPosition\n inline?: ScrollLogicalPosition\n scrollMode?: ScrollMode\n boundary?: CustomScrollBoundary\n skipOverflowHiddenElements?: SkipOverflowHiddenElements\n}\n\n// Custom behavior, not in any spec\ntype CustomScrollBoundaryCallback = (parent: Element) => boolean\ntype CustomScrollBoundary = Element | CustomScrollBoundaryCallback | null\ninterface CustomScrollAction {\n el: Element\n top: number\n left: number\n}\n\n// @TODO better shadowdom test, 11 = document fragment\nfunction isElement(el: any) {\n return el != null && typeof el === 'object' && el.nodeType === 1\n}\n\nfunction canOverflow(\n overflow: string | null,\n skipOverflowHiddenElements?: boolean\n) {\n if (skipOverflowHiddenElements && overflow === 'hidden') {\n return false\n }\n\n return overflow !== 'visible' && overflow !== 'clip'\n}\n\nfunction getFrameElement(el: Element) {\n if (!el.ownerDocument || !el.ownerDocument.defaultView) {\n return null\n }\n\n try {\n return el.ownerDocument.defaultView.frameElement\n } catch (e) {\n return null\n }\n}\n\nfunction isHiddenByFrame(el: Element): boolean {\n const frame = getFrameElement(el)\n if (!frame) {\n return false\n }\n\n return (\n frame.clientHeight < el.scrollHeight || frame.clientWidth < el.scrollWidth\n )\n}\n\nfunction isScrollable(el: Element, skipOverflowHiddenElements?: boolean) {\n if (el.clientHeight < el.scrollHeight || el.clientWidth < el.scrollWidth) {\n const style = getComputedStyle(el, null)\n return (\n canOverflow(style.overflowY, skipOverflowHiddenElements) ||\n canOverflow(style.overflowX, skipOverflowHiddenElements) ||\n isHiddenByFrame(el)\n )\n }\n\n return false\n}\n/**\n * Find out which edge to align against when logical scroll position is \"nearest\"\n * Interesting fact: \"nearest\" works similarily to \"if-needed\", if the element is fully visible it will not scroll it\n *\n * Legends:\n * ┌────────┐ ┏ ━ ━ ━ ┓\n * │ target │ frame\n * └────────┘ ┗ ━ ━ ━ ┛\n */\nfunction alignNearest(\n scrollingEdgeStart: number,\n scrollingEdgeEnd: number,\n scrollingSize: number,\n scrollingBorderStart: number,\n scrollingBorderEnd: number,\n elementEdgeStart: number,\n elementEdgeEnd: number,\n elementSize: number\n) {\n /**\n * If element edge A and element edge B are both outside scrolling box edge A and scrolling box edge B\n *\n * ┌──┐\n * ┏━│━━│━┓\n * │ │\n * ┃ │ │ ┃ do nothing\n * │ │\n * ┗━│━━│━┛\n * └──┘\n *\n * If element edge C and element edge D are both outside scrolling box edge C and scrolling box edge D\n *\n * ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐\n * │┃ ┃│ do nothing\n * └───────────┘\n * ┗ ━ ━ ━ ━ ┛\n */\n if (\n (elementEdgeStart < scrollingEdgeStart &&\n elementEdgeEnd > scrollingEdgeEnd) ||\n (elementEdgeStart > scrollingEdgeStart && elementEdgeEnd < scrollingEdgeEnd)\n ) {\n return 0\n }\n\n /**\n * If element edge A is outside scrolling box edge A and element height is less than scrolling box height\n *\n * ┌──┐\n * ┏━│━━│━┓ ┏━┌━━┐━┓\n * └──┘ │ │\n * from ┃ ┃ to ┃ └──┘ ┃\n *\n * ┗━ ━━ ━┛ ┗━ ━━ ━┛\n *\n * If element edge B is outside scrolling box edge B and element height is greater than scrolling box height\n *\n * ┏━ ━━ ━┓ ┏━┌━━┐━┓\n * │ │\n * from ┃ ┌──┐ ┃ to ┃ │ │ ┃\n * │ │ │ │\n * ┗━│━━│━┛ ┗━│━━│━┛\n * │ │ └──┘\n * │ │\n * └──┘\n *\n * If element edge C is outside scrolling box edge C and element width is less than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───┐ ┌───┐\n * │ ┃ │ ┃ ┃ │ ┃\n * └───┘ └───┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n * If element edge D is outside scrolling box edge D and element width is greater than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐ ┌───────────┐\n * ┃ │ ┃ │ ┃ ┃ │\n * └───────────┘ └───────────┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n */\n if (\n (elementEdgeStart <= scrollingEdgeStart && elementSize <= scrollingSize) ||\n (elementEdgeEnd >= scrollingEdgeEnd && elementSize >= scrollingSize)\n ) {\n return elementEdgeStart - scrollingEdgeStart - scrollingBorderStart\n }\n\n /**\n * If element edge B is outside scrolling box edge B and element height is less than scrolling box height\n *\n * ┏━ ━━ ━┓ ┏━ ━━ ━┓\n *\n * from ┃ ┃ to ┃ ┌──┐ ┃\n * ┌──┐ │ │\n * ┗━│━━│━┛ ┗━└━━┘━┛\n * └──┘\n *\n * If element edge A is outside scrolling box edge A and element height is greater than scrolling box height\n *\n * ┌──┐\n * │ │\n * │ │ ┌──┐\n * ┏━│━━│━┓ ┏━│━━│━┓\n * │ │ │ │\n * from ┃ └──┘ ┃ to ┃ │ │ ┃\n * │ │\n * ┗━ ━━ ━┛ ┗━└━━┘━┛\n *\n * If element edge C is outside scrolling box edge C and element width is greater than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐ ┌───────────┐\n * │ ┃ │ ┃ │ ┃ ┃\n * └───────────┘ └───────────┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n * If element edge D is outside scrolling box edge D and element width is less than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───┐ ┌───┐\n * ┃ │ ┃ │ ┃ │ ┃\n * └───┘ └───┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n */\n if (\n (elementEdgeEnd > scrollingEdgeEnd && elementSize < scrollingSize) ||\n (elementEdgeStart < scrollingEdgeStart && elementSize > scrollingSize)\n ) {\n return elementEdgeEnd - scrollingEdgeEnd + scrollingBorderEnd\n }\n\n return 0\n}\n\nexport default (target: Element, options: Options): CustomScrollAction[] => {\n //TODO: remove this hack when microbundle will support typescript >= 4.0\n const windowWithViewport = (window as unknown) as Window & {\n visualViewport: visualViewport\n }\n\n const {\n scrollMode,\n block,\n inline,\n boundary,\n skipOverflowHiddenElements,\n } = options\n // Allow using a callback to check the boundary\n // The default behavior is to check if the current target matches the boundary element or not\n // If undefined it'll check that target is never undefined (can happen as we recurse up the tree)\n const checkBoundary =\n typeof boundary === 'function' ? boundary : (node: any) => node !== boundary\n\n if (!isElement(target)) {\n throw new TypeError('Invalid target')\n }\n\n // Used to handle the top most element that can be scrolled\n const scrollingElement = document.scrollingElement || document.documentElement\n\n // Collect all the scrolling boxes, as defined in the spec: https://drafts.csswg.org/cssom-view/#scrolling-box\n const frames: Element[] = []\n let cursor = target\n while (isElement(cursor) && checkBoundary(cursor)) {\n // Move cursor to parent\n cursor = cursor.parentNode as Element\n\n // Stop when we reach the viewport\n if (cursor === scrollingElement) {\n frames.push(cursor)\n break\n }\n\n // Skip document.body if it's not the scrollingElement and documentElement isn't independently scrollable\n if (\n cursor === document.body &&\n isScrollable(cursor) &&\n !isScrollable(document.documentElement as HTMLElement)\n ) {\n continue\n }\n\n // Now we check if the element is scrollable, this code only runs if the loop haven't already hit the viewport or a custom boundary\n if (isScrollable(cursor, skipOverflowHiddenElements)) {\n frames.push(cursor)\n }\n }\n\n // Support pinch-zooming properly, making sure elements scroll into the visual viewport\n // Browsers that don't support visualViewport will report the layout viewport dimensions on document.documentElement.clientWidth/Height\n // and viewport dimensions on window.innerWidth/Height\n // https://www.quirksmode.org/mobile/viewports2.html\n // https://bokand.github.io/viewport/index.html\n const viewportWidth = windowWithViewport.visualViewport\n ? windowWithViewport.visualViewport.width\n : innerWidth\n const viewportHeight = windowWithViewport.visualViewport\n ? windowWithViewport.visualViewport.height\n : innerHeight\n\n // Newer browsers supports scroll[X|Y], page[X|Y]Offset is\n const viewportX = window.scrollX || pageXOffset\n const viewportY = window.scrollY || pageYOffset\n\n const {\n height: targetHeight,\n width: targetWidth,\n top: targetTop,\n right: targetRight,\n bottom: targetBottom,\n left: targetLeft,\n } = target.getBoundingClientRect()\n\n // These values mutate as we loop through and generate scroll coordinates\n let targetBlock: number =\n block === 'start' || block === 'nearest'\n ? targetTop\n : block === 'end'\n ? targetBottom\n : targetTop + targetHeight / 2 // block === 'center\n let targetInline: number =\n inline === 'center'\n ? targetLeft + targetWidth / 2\n : inline === 'end'\n ? targetRight\n : targetLeft // inline === 'start || inline === 'nearest\n\n // Collect new scroll positions\n const computations: CustomScrollAction[] = []\n // In chrome there's no longer a difference between caching the `frames.length` to a var or not, so we don't in this case (size > speed anyways)\n for (let index = 0; index < frames.length; index++) {\n const frame = frames[index]\n\n // @TODO add a shouldScroll hook here that allows userland code to take control\n\n const {\n height,\n width,\n top,\n right,\n bottom,\n left,\n } = frame.getBoundingClientRect()\n\n // If the element is already visible we can end it here\n // @TODO targetBlock and targetInline should be taken into account to be compliant with https://github.com/w3c/csswg-drafts/pull/1805/files#diff-3c17f0e43c20f8ecf89419d49e7ef5e0R1333\n if (\n scrollMode === 'if-needed' &&\n targetTop >= 0 &&\n targetLeft >= 0 &&\n targetBottom <= viewportHeight &&\n targetRight <= viewportWidth &&\n targetTop >= top &&\n targetBottom <= bottom &&\n targetLeft >= left &&\n targetRight <= right\n ) {\n // Break the loop and return the computations for things that are not fully visible\n return computations\n }\n\n const frameStyle = getComputedStyle(frame)\n const borderLeft = parseInt(frameStyle.borderLeftWidth as string, 10)\n const borderTop = parseInt(frameStyle.borderTopWidth as string, 10)\n const borderRight = parseInt(frameStyle.borderRightWidth as string, 10)\n const borderBottom = parseInt(frameStyle.borderBottomWidth as string, 10)\n\n let blockScroll: number = 0\n let inlineScroll: number = 0\n\n // The property existance checks for offfset[Width|Height] is because only HTMLElement objects have them, but any Element might pass by here\n // @TODO find out if the \"as HTMLElement\" overrides can be dropped\n const scrollbarWidth =\n 'offsetWidth' in frame\n ? (frame as HTMLElement).offsetWidth -\n (frame as HTMLElement).clientWidth -\n borderLeft -\n borderRight\n : 0\n const scrollbarHeight =\n 'offsetHeight' in frame\n ? (frame as HTMLElement).offsetHeight -\n (frame as HTMLElement).clientHeight -\n borderTop -\n borderBottom\n : 0\n\n if (scrollingElement === frame) {\n // Handle viewport logic (document.documentElement or document.body)\n\n if (block === 'start') {\n blockScroll = targetBlock\n } else if (block === 'end') {\n blockScroll = targetBlock - viewportHeight\n } else if (block === 'nearest') {\n blockScroll = alignNearest(\n viewportY,\n viewportY + viewportHeight,\n viewportHeight,\n borderTop,\n borderBottom,\n viewportY + targetBlock,\n viewportY + targetBlock + targetHeight,\n targetHeight\n )\n } else {\n // block === 'center' is the default\n blockScroll = targetBlock - viewportHeight / 2\n }\n\n if (inline === 'start') {\n inlineScroll = targetInline\n } else if (inline === 'center') {\n inlineScroll = targetInline - viewportWidth / 2\n } else if (inline === 'end') {\n inlineScroll = targetInline - viewportWidth\n } else {\n // inline === 'nearest' is the default\n inlineScroll = alignNearest(\n viewportX,\n viewportX + viewportWidth,\n viewportWidth,\n borderLeft,\n borderRight,\n viewportX + targetInline,\n viewportX + targetInline + targetWidth,\n targetWidth\n )\n }\n\n // Apply scroll position offsets and ensure they are within bounds\n // @TODO add more test cases to cover this 100%\n blockScroll = Math.max(0, blockScroll + viewportY)\n inlineScroll = Math.max(0, inlineScroll + viewportX)\n } else {\n // Handle each scrolling frame that might exist between the target and the viewport\n\n if (block === 'start') {\n blockScroll = targetBlock - top - borderTop\n } else if (block === 'end') {\n blockScroll = targetBlock - bottom + borderBottom + scrollbarHeight\n } else if (block === 'nearest') {\n blockScroll = alignNearest(\n top,\n bottom,\n height,\n borderTop,\n borderBottom + scrollbarHeight,\n targetBlock,\n targetBlock + targetHeight,\n targetHeight\n )\n } else {\n // block === 'center' is the default\n blockScroll = targetBlock - (top + height / 2) + scrollbarHeight / 2\n }\n\n if (inline === 'start') {\n inlineScroll = targetInline - left - borderLeft\n } else if (inline === 'center') {\n inlineScroll = targetInline - (left + width / 2) + scrollbarWidth / 2\n } else if (inline === 'end') {\n inlineScroll = targetInline - right + borderRight + scrollbarWidth\n } else {\n // inline === 'nearest' is the default\n inlineScroll = alignNearest(\n left,\n right,\n width,\n borderLeft,\n borderRight + scrollbarWidth,\n targetInline,\n targetInline + targetWidth,\n targetWidth\n )\n }\n\n const { scrollLeft, scrollTop } = frame\n // Ensure scroll coordinates are not out of bounds while applying scroll offsets\n blockScroll = Math.max(\n 0,\n Math.min(\n scrollTop + blockScroll,\n frame.scrollHeight - height + scrollbarHeight\n )\n )\n inlineScroll = Math.max(\n 0,\n Math.min(\n scrollLeft + inlineScroll,\n frame.scrollWidth - width + scrollbarWidth\n )\n )\n\n // Cache the offset so that parent frames can scroll this into view correctly\n targetBlock += scrollTop - blockScroll\n targetInline += scrollLeft - inlineScroll\n }\n\n computations.push({ el: frame, top: blockScroll, left: inlineScroll })\n }\n\n return computations\n}\n","import compute from 'compute-scroll-into-view';\n\nfunction isOptionsObject(options) {\n return options === Object(options) && Object.keys(options).length !== 0;\n}\n\nfunction defaultBehavior(actions, behavior) {\n if (behavior === void 0) {\n behavior = 'auto';\n }\n\n var canSmoothScroll = ('scrollBehavior' in document.body.style);\n actions.forEach(function (_ref) {\n var el = _ref.el,\n top = _ref.top,\n left = _ref.left;\n\n if (el.scroll && canSmoothScroll) {\n el.scroll({\n top: top,\n left: left,\n behavior: behavior\n });\n } else {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n });\n}\n\nfunction getOptions(options) {\n if (options === false) {\n return {\n block: 'end',\n inline: 'nearest'\n };\n }\n\n if (isOptionsObject(options)) {\n return options;\n }\n\n return {\n block: 'start',\n inline: 'nearest'\n };\n}\n\nfunction scrollIntoView(target, options) {\n var targetIsDetached = !target.ownerDocument.documentElement.contains(target);\n\n if (isOptionsObject(options) && typeof options.behavior === 'function') {\n return options.behavior(targetIsDetached ? [] : compute(target, options));\n }\n\n if (targetIsDetached) {\n return;\n }\n\n var computeOptions = getOptions(options);\n return defaultBehavior(compute(target, computeOptions), computeOptions.behavior);\n}\n\nexport default scrollIntoView;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport scrollIntoView from 'scroll-into-view-if-needed';\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTypeaheadContext } from '../core/Context';\nimport { getDisplayName, getMenuItemId, preventInputBlur, warn } from '../utils';\nimport { optionType } from '../propTypes';\nvar propTypes = {\n option: optionType.isRequired,\n position: PropTypes.number\n};\nexport var useItem = function useItem(_ref) {\n var label = _ref.label,\n onClick = _ref.onClick,\n option = _ref.option,\n position = _ref.position,\n props = _objectWithoutPropertiesLoose(_ref, [\"label\", \"onClick\", \"option\", \"position\"]);\n\n var _useTypeaheadContext = useTypeaheadContext(),\n activeIndex = _useTypeaheadContext.activeIndex,\n id = _useTypeaheadContext.id,\n isOnlyResult = _useTypeaheadContext.isOnlyResult,\n onActiveItemChange = _useTypeaheadContext.onActiveItemChange,\n onInitialItemChange = _useTypeaheadContext.onInitialItemChange,\n onMenuItemClick = _useTypeaheadContext.onMenuItemClick,\n setItem = _useTypeaheadContext.setItem;\n\n var itemRef = useRef(null);\n useEffect(function () {\n if (position === 0) {\n onInitialItemChange(option);\n }\n });\n useEffect(function () {\n if (position === activeIndex) {\n onActiveItemChange(option); // Automatically scroll the menu as the user keys through it.\n\n var node = itemRef.current;\n node && scrollIntoView(node, {\n block: 'nearest',\n boundary: node.parentNode,\n inline: 'nearest',\n scrollMode: 'if-needed'\n });\n }\n });\n var handleClick = useCallback(function (e) {\n onMenuItemClick(option, e);\n onClick && onClick(e);\n }, [onClick, onMenuItemClick, option]);\n var active = isOnlyResult || activeIndex === position; // Update the item's position in the item stack.\n\n setItem(option, position);\n return _extends({}, props, {\n active: active,\n 'aria-label': label,\n 'aria-selected': active,\n id: getMenuItemId(id, position),\n onClick: handleClick,\n onMouseDown: preventInputBlur,\n ref: itemRef,\n role: 'option'\n });\n};\nexport var withItem = function withItem(Component) {\n var displayName = \"withItem(\" + getDisplayName(Component) + \")\";\n\n var WrappedMenuItem = function WrappedMenuItem(props) {\n return /*#__PURE__*/React.createElement(Component, useItem(props));\n };\n\n WrappedMenuItem.displayName = displayName;\n WrappedMenuItem.propTypes = propTypes;\n return WrappedMenuItem;\n};\nexport default function menuItemContainer(Component) {\n /* istanbul ignore next */\n warn(false, 'The `menuItemContainer` export is deprecated; use `withItem` instead.');\n /* istanbul ignore next */\n\n return withItem(Component);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport cx from 'classnames';\nimport React from 'react';\nimport { withItem } from '../behaviors/item';\nvar BaseMenuItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var active = _ref.active,\n children = _ref.children,\n className = _ref.className,\n disabled = _ref.disabled,\n _onClick = _ref.onClick,\n onMouseDown = _ref.onMouseDown,\n props = _objectWithoutPropertiesLoose(_ref, [\"active\", \"children\", \"className\", \"disabled\", \"onClick\", \"onMouseDown\"]);\n\n return (\n /*#__PURE__*/\n\n /* eslint-disable jsx-a11y/anchor-is-valid */\n React.createElement(\"a\", _extends({}, props, {\n className: cx('dropdown-item', {\n active: active,\n disabled: disabled\n }, className),\n href: \"#\",\n onClick: function onClick(e) {\n e.preventDefault();\n !disabled && _onClick && _onClick(e);\n },\n onMouseDown: onMouseDown,\n ref: ref\n }), children)\n /* eslint-enable jsx-a11y/anchor-is-valid */\n\n );\n});\nexport { BaseMenuItem };\nexport default withItem(BaseMenuItem);","import _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { Children } from 'react';\nimport { BaseMenuItem } from './MenuItem';\nimport { preventInputBlur } from '../utils';\nimport { checkPropType, isRequiredForA11y } from '../propTypes';\n\nvar MenuDivider = function MenuDivider(props) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"dropdown-divider\",\n role: \"separator\"\n });\n};\n\nvar MenuHeader = function MenuHeader(props) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/role-has-required-aria-props\n React.createElement(\"div\", _extends({}, props, {\n className: \"dropdown-header\",\n role: \"heading\"\n }))\n );\n};\n\nvar propTypes = {\n 'aria-label': PropTypes.string,\n\n /**\n * Message to display in the menu if there are no valid results.\n */\n emptyLabel: PropTypes.node,\n\n /**\n * Needed for accessibility.\n */\n id: checkPropType(PropTypes.oneOfType([PropTypes.number, PropTypes.string]), isRequiredForA11y),\n\n /**\n * Maximum height of the dropdown menu.\n */\n maxHeight: PropTypes.string\n};\nvar defaultProps = {\n 'aria-label': 'menu-options',\n emptyLabel: 'No matches found.',\n maxHeight: '300px'\n};\n\n/**\n * Menu component that handles empty state when passed a set of results.\n */\nvar Menu = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Menu, _React$Component);\n\n function Menu() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Menu.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props = this.props,\n inputHeight = _this$props.inputHeight,\n scheduleUpdate = _this$props.scheduleUpdate; // Update the menu position if the height of the input changes.\n\n if (inputHeight !== prevProps.inputHeight) {\n scheduleUpdate();\n }\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n children = _this$props2.children,\n className = _this$props2.className,\n emptyLabel = _this$props2.emptyLabel,\n id = _this$props2.id,\n innerRef = _this$props2.innerRef,\n maxHeight = _this$props2.maxHeight,\n style = _this$props2.style,\n text = _this$props2.text;\n var contents = Children.count(children) === 0 ? /*#__PURE__*/React.createElement(BaseMenuItem, {\n disabled: true,\n role: \"option\"\n }, emptyLabel) : children;\n return (\n /*#__PURE__*/\n\n /* eslint-disable jsx-a11y/interactive-supports-focus */\n React.createElement(\"div\", {\n \"aria-label\": this.props['aria-label'],\n className: cx('rbt-menu', 'dropdown-menu', 'show', className),\n id: id,\n key: // Force a re-render if the text changes to ensure that menu\n // positioning updates correctly.\n text,\n onMouseDown: // Prevent input from blurring when clicking on the menu scrollbar.\n preventInputBlur,\n ref: innerRef,\n role: \"listbox\",\n style: _extends({}, style, {\n display: 'block',\n maxHeight: maxHeight,\n overflow: 'auto'\n })\n }, contents)\n /* eslint-enable jsx-a11y/interactive-supports-focus */\n\n );\n };\n\n return Menu;\n}(React.Component);\n\n_defineProperty(Menu, \"propTypes\", propTypes);\n\n_defineProperty(Menu, \"defaultProps\", defaultProps);\n\n_defineProperty(Menu, \"Divider\", MenuDivider);\n\n_defineProperty(Menu, \"Header\", MenuHeader);\n\nexport default Menu;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport Highlighter from './Highlighter';\nimport Menu from './Menu';\nimport MenuItem from './MenuItem';\nimport { getOptionLabel, getOptionProperty } from '../utils';\nvar propTypes = {\n /**\n * Provides the ability to specify a prefix before the user-entered text to\n * indicate that the selection will be new. No-op unless `allowNew={true}`.\n */\n newSelectionPrefix: PropTypes.node,\n\n /**\n * Prompt displayed when large data sets are paginated.\n */\n paginationText: PropTypes.node,\n\n /**\n * Provides a hook for customized rendering of menu item contents.\n */\n renderMenuItemChildren: PropTypes.func\n};\nvar defaultProps = {\n newSelectionPrefix: 'New selection: ',\n paginationText: 'Display additional results...',\n renderMenuItemChildren: function renderMenuItemChildren(option, props, idx) {\n return /*#__PURE__*/React.createElement(Highlighter, {\n search: props.text\n }, getOptionLabel(option, props.labelKey));\n }\n};\n\nvar TypeaheadMenu = function TypeaheadMenu(props) {\n var labelKey = props.labelKey,\n newSelectionPrefix = props.newSelectionPrefix,\n options = props.options,\n paginationText = props.paginationText,\n renderMenuItemChildren = props.renderMenuItemChildren,\n text = props.text,\n menuProps = _objectWithoutPropertiesLoose(props, [\"labelKey\", \"newSelectionPrefix\", \"options\", \"paginationText\", \"renderMenuItemChildren\", \"text\"]);\n\n var renderMenuItem = function renderMenuItem(option, position) {\n var label = getOptionLabel(option, labelKey);\n var menuItemProps = {\n disabled: getOptionProperty(option, 'disabled'),\n label: label,\n option: option,\n position: position\n };\n\n if (option.customOption) {\n return /*#__PURE__*/React.createElement(MenuItem, _extends({}, menuItemProps, {\n className: \"rbt-menu-custom-option\",\n key: position,\n label: label\n }), newSelectionPrefix, /*#__PURE__*/React.createElement(Highlighter, {\n search: text\n }, label));\n }\n\n if (option.paginationOption) {\n return /*#__PURE__*/React.createElement(Fragment, {\n key: \"pagination-item\"\n }, /*#__PURE__*/React.createElement(Menu.Divider, null), /*#__PURE__*/React.createElement(MenuItem, _extends({}, menuItemProps, {\n className: \"rbt-menu-pagination-option\",\n label: paginationText\n }), paginationText));\n }\n\n return /*#__PURE__*/React.createElement(MenuItem, _extends({}, menuItemProps, {\n key: position\n }), renderMenuItemChildren(option, props, position));\n };\n\n return (\n /*#__PURE__*/\n // Explictly pass `text` so Flow doesn't complain...\n React.createElement(Menu, _extends({}, menuProps, {\n text: text\n }), options.map(renderMenuItem))\n );\n};\n\nTypeaheadMenu.propTypes = propTypes;\nTypeaheadMenu.defaultProps = defaultProps;\nexport default TypeaheadMenu;","import _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { forwardRef, useState } from 'react';\nimport useRootClose from \"react-overlays/useRootClose\";\nimport Typeahead from '../core/Typeahead';\nimport ClearButton from './ClearButton';\nimport Loader from './Loader';\nimport Overlay from './Overlay';\nimport Token from './Token';\nimport TypeaheadInputMulti from './TypeaheadInputMulti';\nimport TypeaheadInputSingle from './TypeaheadInputSingle';\nimport TypeaheadMenu from './TypeaheadMenu';\nimport { getOptionLabel, isFunction, isSizeLarge, pick, preventInputBlur } from '../utils';\nimport { checkPropType, inputPropsType, sizeType } from '../propTypes';\nvar propTypes = {\n /**\n * Displays a button to clear the input when there are selections.\n */\n clearButton: PropTypes.bool,\n\n /**\n * Props to be applied directly to the input. `onBlur`, `onChange`,\n * `onFocus`, and `onKeyDown` are ignored.\n */\n inputProps: checkPropType(PropTypes.object, inputPropsType),\n\n /**\n * Bootstrap 4 only. Adds the `is-invalid` classname to the `form-control`.\n */\n isInvalid: PropTypes.bool,\n\n /**\n * Indicate whether an asynchronous data fetch is happening.\n */\n isLoading: PropTypes.bool,\n\n /**\n * Bootstrap 4 only. Adds the `is-valid` classname to the `form-control`.\n */\n isValid: PropTypes.bool,\n\n /**\n * Callback for custom input rendering.\n */\n renderInput: PropTypes.func,\n\n /**\n * Callback for custom menu rendering.\n */\n renderMenu: PropTypes.func,\n\n /**\n * Callback for custom menu rendering.\n */\n renderToken: PropTypes.func,\n\n /**\n * Specifies the size of the input.\n */\n size: sizeType\n};\nvar defaultProps = {\n clearButton: false,\n inputProps: {},\n isInvalid: false,\n isLoading: false,\n isValid: false,\n renderMenu: function renderMenu(results, menuProps, props) {\n return /*#__PURE__*/React.createElement(TypeaheadMenu, _extends({}, menuProps, {\n labelKey: props.labelKey,\n options: results,\n text: props.text\n }));\n },\n renderToken: function renderToken(option, props, idx) {\n return /*#__PURE__*/React.createElement(Token, {\n disabled: props.disabled,\n key: idx,\n onRemove: props.onRemove,\n option: option,\n tabIndex: props.tabIndex\n }, getOptionLabel(option, props.labelKey));\n }\n};\n\nfunction getOverlayProps(props) {\n return pick(props, ['align', 'dropup', 'flip', 'positionFixed']);\n}\n\nvar RootClose = function RootClose(_ref) {\n var children = _ref.children,\n onRootClose = _ref.onRootClose,\n props = _objectWithoutPropertiesLoose(_ref, [\"children\", \"onRootClose\"]);\n\n var _useState = useState(null),\n rootElement = _useState[0],\n attachRef = _useState[1];\n\n useRootClose(rootElement, onRootClose, props);\n return children(attachRef);\n};\n\nvar TypeaheadComponent = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(TypeaheadComponent, _React$Component);\n\n function TypeaheadComponent() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"_referenceElement\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"referenceElementRef\", function (referenceElement) {\n _this._referenceElement = referenceElement;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_renderInput\", function (inputProps, props) {\n var _this$props = _this.props,\n isInvalid = _this$props.isInvalid,\n isValid = _this$props.isValid,\n multiple = _this$props.multiple,\n renderInput = _this$props.renderInput,\n renderToken = _this$props.renderToken,\n size = _this$props.size;\n\n if (isFunction(renderInput)) {\n return renderInput(inputProps, props);\n }\n\n var commonProps = _extends({}, inputProps, {\n isInvalid: isInvalid,\n isValid: isValid,\n size: size\n });\n\n if (!multiple) {\n return /*#__PURE__*/React.createElement(TypeaheadInputSingle, commonProps);\n }\n\n var labelKey = props.labelKey,\n onRemove = props.onRemove,\n selected = props.selected;\n return /*#__PURE__*/React.createElement(TypeaheadInputMulti, _extends({}, commonProps, {\n selected: selected\n }), selected.map(function (option, idx) {\n return renderToken(option, _extends({}, commonProps, {\n labelKey: labelKey,\n onRemove: onRemove\n }), idx);\n }));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_renderMenu\", function (results, menuProps, props) {\n var _this$props2 = _this.props,\n emptyLabel = _this$props2.emptyLabel,\n id = _this$props2.id,\n maxHeight = _this$props2.maxHeight,\n newSelectionPrefix = _this$props2.newSelectionPrefix,\n paginationText = _this$props2.paginationText,\n renderMenu = _this$props2.renderMenu,\n renderMenuItemChildren = _this$props2.renderMenuItemChildren;\n return renderMenu(results, _extends({}, menuProps, {\n emptyLabel: emptyLabel,\n id: id,\n maxHeight: maxHeight,\n newSelectionPrefix: newSelectionPrefix,\n paginationText: paginationText,\n renderMenuItemChildren: renderMenuItemChildren\n }), props);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_renderAux\", function (_ref2) {\n var onClear = _ref2.onClear,\n selected = _ref2.selected;\n var _this$props3 = _this.props,\n clearButton = _this$props3.clearButton,\n disabled = _this$props3.disabled,\n isLoading = _this$props3.isLoading,\n size = _this$props3.size;\n var content;\n\n if (isLoading) {\n content = /*#__PURE__*/React.createElement(Loader, null);\n } else if (clearButton && !disabled && selected.length) {\n content = /*#__PURE__*/React.createElement(ClearButton, {\n onClick: onClear,\n onFocus: function onFocus(e) {\n // Prevent the main input from auto-focusing again.\n e.stopPropagation();\n },\n onMouseDown: preventInputBlur,\n size: size\n });\n }\n\n return content ? /*#__PURE__*/React.createElement(\"div\", {\n className: cx('rbt-aux', {\n 'rbt-aux-lg': isSizeLarge(size)\n })\n }, content) : null;\n });\n\n return _this;\n }\n\n var _proto = TypeaheadComponent.prototype;\n\n _proto.render = function render() {\n var _this2 = this;\n\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n instanceRef = _this$props4.instanceRef,\n open = _this$props4.open,\n options = _this$props4.options,\n style = _this$props4.style;\n return /*#__PURE__*/React.createElement(Typeahead, _extends({}, this.props, {\n options: options,\n ref: instanceRef\n }), function (_ref3) {\n var getInputProps = _ref3.getInputProps,\n props = _objectWithoutPropertiesLoose(_ref3, [\"getInputProps\"]);\n\n var hideMenu = props.hideMenu,\n isMenuShown = props.isMenuShown,\n results = props.results;\n\n var auxContent = _this2._renderAux(props);\n\n return /*#__PURE__*/React.createElement(RootClose, {\n disabled: open || !isMenuShown,\n onRootClose: hideMenu\n }, function (ref) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: cx('rbt', {\n 'has-aux': !!auxContent\n }, className),\n ref: ref,\n style: _extends({}, style, {\n outline: 'none',\n position: 'relative'\n }),\n tabIndex: -1\n }, _this2._renderInput(_extends({}, getInputProps(_this2.props.inputProps), {\n referenceElementRef: _this2.referenceElementRef\n }), props), /*#__PURE__*/React.createElement(Overlay, _extends({}, getOverlayProps(_this2.props), {\n isMenuShown: isMenuShown,\n referenceElement: _this2._referenceElement\n }), function (menuProps) {\n return _this2._renderMenu(results, menuProps, props);\n }), auxContent, isFunction(children) ? children(props) : children);\n });\n });\n };\n\n return TypeaheadComponent;\n}(React.Component);\n\n_defineProperty(TypeaheadComponent, \"propTypes\", propTypes);\n\n_defineProperty(TypeaheadComponent, \"defaultProps\", defaultProps);\n\nexport default /*#__PURE__*/forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(TypeaheadComponent, _extends({}, props, {\n instanceRef: ref\n }));\n});","import { withAsync } from '../behaviors/async';\nimport Typeahead from './Typeahead';\nexport default withAsync(Typeahead);","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n/* globals\n\tAggregateError,\n\tAtomics,\n\tFinalizationRegistry,\n\tSharedArrayBuffer,\n\tWeakRef,\n*/\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\t// eslint-disable-next-line no-new-func\n\t\treturn Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar asyncGenFunction = getEvalledConstructor('async function* () {}');\nvar asyncGenFunctionPrototype = asyncGenFunction ? asyncGenFunction.prototype : undefined;\nvar asyncGenPrototype = asyncGenFunctionPrototype ? asyncGenFunctionPrototype.prototype : undefined;\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': getEvalledConstructor('async function () {}'),\n\t'%AsyncGenerator%': asyncGenFunctionPrototype,\n\t'%AsyncGeneratorFunction%': asyncGenFunction,\n\t'%AsyncIteratorPrototype%': asyncGenPrototype ? getProto(asyncGenPrototype) : undefined,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': getEvalledConstructor('function* () {}'),\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind() {\n\treturn $reflectApply(bind, $call, arguments);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n nullTag = '[object Null]',\n proxyTag = '[object Proxy]',\n undefinedTag = '[object Undefined]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isFunction;\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _Highlighter = __webpack_require__(2);\n\t\n\tvar _Highlighter2 = _interopRequireDefault(_Highlighter);\n\n\texports['default'] = _Highlighter2['default'];\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\texports['default'] = Highlighter;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\t\n\tvar _highlightWordsCore = __webpack_require__(3);\n\t\n\tvar _propTypes = __webpack_require__(4);\n\t\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\t\n\tvar _react = __webpack_require__(14);\n\t\n\tvar _memoizeOne = __webpack_require__(15);\n\t\n\tvar _memoizeOne2 = _interopRequireDefault(_memoizeOne);\n\t\n\tHighlighter.propTypes = {\n\t activeClassName: _propTypes2['default'].string,\n\t activeIndex: _propTypes2['default'].number,\n\t activeStyle: _propTypes2['default'].object,\n\t autoEscape: _propTypes2['default'].bool,\n\t className: _propTypes2['default'].string,\n\t findChunks: _propTypes2['default'].func,\n\t highlightClassName: _propTypes2['default'].oneOfType([_propTypes2['default'].object, _propTypes2['default'].string]),\n\t highlightStyle: _propTypes2['default'].object,\n\t highlightTag: _propTypes2['default'].oneOfType([_propTypes2['default'].node, _propTypes2['default'].func, _propTypes2['default'].string]),\n\t sanitize: _propTypes2['default'].func,\n\t searchWords: _propTypes2['default'].arrayOf(_propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].instanceOf(RegExp)])).isRequired,\n\t textToHighlight: _propTypes2['default'].string.isRequired,\n\t unhighlightClassName: _propTypes2['default'].string,\n\t unhighlightStyle: _propTypes2['default'].object\n\t};\n\t\n\t/**\n\t * Highlights all occurrences of search terms (searchText) within a string (textToHighlight).\n\t * This function returns an array of strings and s (wrapping highlighted words).\n\t */\n\t\n\tfunction Highlighter(_ref) {\n\t var _ref$activeClassName = _ref.activeClassName;\n\t var activeClassName = _ref$activeClassName === undefined ? '' : _ref$activeClassName;\n\t var _ref$activeIndex = _ref.activeIndex;\n\t var activeIndex = _ref$activeIndex === undefined ? -1 : _ref$activeIndex;\n\t var activeStyle = _ref.activeStyle;\n\t var autoEscape = _ref.autoEscape;\n\t var _ref$caseSensitive = _ref.caseSensitive;\n\t var caseSensitive = _ref$caseSensitive === undefined ? false : _ref$caseSensitive;\n\t var className = _ref.className;\n\t var findChunks = _ref.findChunks;\n\t var _ref$highlightClassName = _ref.highlightClassName;\n\t var highlightClassName = _ref$highlightClassName === undefined ? '' : _ref$highlightClassName;\n\t var _ref$highlightStyle = _ref.highlightStyle;\n\t var highlightStyle = _ref$highlightStyle === undefined ? {} : _ref$highlightStyle;\n\t var _ref$highlightTag = _ref.highlightTag;\n\t var highlightTag = _ref$highlightTag === undefined ? 'mark' : _ref$highlightTag;\n\t var sanitize = _ref.sanitize;\n\t var searchWords = _ref.searchWords;\n\t var textToHighlight = _ref.textToHighlight;\n\t var _ref$unhighlightClassName = _ref.unhighlightClassName;\n\t var unhighlightClassName = _ref$unhighlightClassName === undefined ? '' : _ref$unhighlightClassName;\n\t var unhighlightStyle = _ref.unhighlightStyle;\n\t\n\t var rest = _objectWithoutProperties(_ref, ['activeClassName', 'activeIndex', 'activeStyle', 'autoEscape', 'caseSensitive', 'className', 'findChunks', 'highlightClassName', 'highlightStyle', 'highlightTag', 'sanitize', 'searchWords', 'textToHighlight', 'unhighlightClassName', 'unhighlightStyle']);\n\t\n\t var chunks = (0, _highlightWordsCore.findAll)({\n\t autoEscape: autoEscape,\n\t caseSensitive: caseSensitive,\n\t findChunks: findChunks,\n\t sanitize: sanitize,\n\t searchWords: searchWords,\n\t textToHighlight: textToHighlight\n\t });\n\t var HighlightTag = highlightTag;\n\t var highlightIndex = -1;\n\t var highlightClassNames = '';\n\t var highlightStyles = undefined;\n\t\n\t var lowercaseProps = function lowercaseProps(object) {\n\t var mapped = {};\n\t for (var key in object) {\n\t mapped[key.toLowerCase()] = object[key];\n\t }\n\t return mapped;\n\t };\n\t var memoizedLowercaseProps = (0, _memoizeOne2['default'])(lowercaseProps);\n\t\n\t return (0, _react.createElement)('span', _extends({\n\t className: className\n\t }, rest, {\n\t children: chunks.map(function (chunk, index) {\n\t var text = textToHighlight.substr(chunk.start, chunk.end - chunk.start);\n\t\n\t if (chunk.highlight) {\n\t highlightIndex++;\n\t\n\t var highlightClass = undefined;\n\t if (typeof highlightClassName === 'object') {\n\t if (!caseSensitive) {\n\t highlightClassName = memoizedLowercaseProps(highlightClassName);\n\t highlightClass = highlightClassName[text.toLowerCase()];\n\t } else {\n\t highlightClass = highlightClassName[text];\n\t }\n\t } else {\n\t highlightClass = highlightClassName;\n\t }\n\t\n\t var isActive = highlightIndex === +activeIndex;\n\t\n\t highlightClassNames = highlightClass + ' ' + (isActive ? activeClassName : '');\n\t highlightStyles = isActive === true && activeStyle != null ? Object.assign({}, highlightStyle, activeStyle) : highlightStyle;\n\t\n\t var props = {\n\t children: text,\n\t className: highlightClassNames,\n\t key: index,\n\t style: highlightStyles\n\t };\n\t\n\t // Don't attach arbitrary props to DOM elements; this triggers React DEV warnings (https://fb.me/react-unknown-prop)\n\t // Only pass through the highlightIndex attribute for custom components.\n\t if (typeof HighlightTag !== 'string') {\n\t props.highlightIndex = highlightIndex;\n\t }\n\t\n\t return (0, _react.createElement)(HighlightTag, props);\n\t } else {\n\t return (0, _react.createElement)('span', {\n\t children: text,\n\t className: unhighlightClassName,\n\t key: index,\n\t style: unhighlightStyle\n\t });\n\t }\n\t })\n\t }));\n\t}\n\t\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports =\n\t/******/ (function(modules) { // webpackBootstrap\n\t/******/ \t// The module cache\n\t/******/ \tvar installedModules = {};\n\t/******/\n\t/******/ \t// The require function\n\t/******/ \tfunction __webpack_require__(moduleId) {\n\t/******/\n\t/******/ \t\t// Check if module is in cache\n\t/******/ \t\tif(installedModules[moduleId])\n\t/******/ \t\t\treturn installedModules[moduleId].exports;\n\t/******/\n\t/******/ \t\t// Create a new module (and put it into the cache)\n\t/******/ \t\tvar module = installedModules[moduleId] = {\n\t/******/ \t\t\texports: {},\n\t/******/ \t\t\tid: moduleId,\n\t/******/ \t\t\tloaded: false\n\t/******/ \t\t};\n\t/******/\n\t/******/ \t\t// Execute the module function\n\t/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t/******/\n\t/******/ \t\t// Flag the module as loaded\n\t/******/ \t\tmodule.loaded = true;\n\t/******/\n\t/******/ \t\t// Return the exports of the module\n\t/******/ \t\treturn module.exports;\n\t/******/ \t}\n\t/******/\n\t/******/\n\t/******/ \t// expose the modules object (__webpack_modules__)\n\t/******/ \t__webpack_require__.m = modules;\n\t/******/\n\t/******/ \t// expose the module cache\n\t/******/ \t__webpack_require__.c = installedModules;\n\t/******/\n\t/******/ \t// __webpack_public_path__\n\t/******/ \t__webpack_require__.p = \"\";\n\t/******/\n\t/******/ \t// Load entry module and return exports\n\t/******/ \treturn __webpack_require__(0);\n\t/******/ })\n\t/************************************************************************/\n\t/******/ ([\n\t/* 0 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\tmodule.exports = __webpack_require__(1);\n\t\n\t\n\t/***/ }),\n\t/* 1 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\t\n\t\tObject.defineProperty(exports, \"__esModule\", {\n\t\t value: true\n\t\t});\n\t\t\n\t\tvar _utils = __webpack_require__(2);\n\t\t\n\t\tObject.defineProperty(exports, 'combineChunks', {\n\t\t enumerable: true,\n\t\t get: function get() {\n\t\t return _utils.combineChunks;\n\t\t }\n\t\t});\n\t\tObject.defineProperty(exports, 'fillInChunks', {\n\t\t enumerable: true,\n\t\t get: function get() {\n\t\t return _utils.fillInChunks;\n\t\t }\n\t\t});\n\t\tObject.defineProperty(exports, 'findAll', {\n\t\t enumerable: true,\n\t\t get: function get() {\n\t\t return _utils.findAll;\n\t\t }\n\t\t});\n\t\tObject.defineProperty(exports, 'findChunks', {\n\t\t enumerable: true,\n\t\t get: function get() {\n\t\t return _utils.findChunks;\n\t\t }\n\t\t});\n\t\n\t/***/ }),\n\t/* 2 */\n\t/***/ (function(module, exports) {\n\t\n\t\t'use strict';\n\t\t\n\t\tObject.defineProperty(exports, \"__esModule\", {\n\t\t value: true\n\t\t});\n\t\t/**\n\t\t * Creates an array of chunk objects representing both higlightable and non highlightable pieces of text that match each search word.\n\t\t * @return Array of \"chunks\" (where a Chunk is { start:number, end:number, highlight:boolean })\n\t\t */\n\t\tvar findAll = exports.findAll = function findAll(_ref) {\n\t\t var autoEscape = _ref.autoEscape,\n\t\t _ref$caseSensitive = _ref.caseSensitive,\n\t\t caseSensitive = _ref$caseSensitive === undefined ? false : _ref$caseSensitive,\n\t\t _ref$findChunks = _ref.findChunks,\n\t\t findChunks = _ref$findChunks === undefined ? defaultFindChunks : _ref$findChunks,\n\t\t sanitize = _ref.sanitize,\n\t\t searchWords = _ref.searchWords,\n\t\t textToHighlight = _ref.textToHighlight;\n\t\t return fillInChunks({\n\t\t chunksToHighlight: combineChunks({\n\t\t chunks: findChunks({\n\t\t autoEscape: autoEscape,\n\t\t caseSensitive: caseSensitive,\n\t\t sanitize: sanitize,\n\t\t searchWords: searchWords,\n\t\t textToHighlight: textToHighlight\n\t\t })\n\t\t }),\n\t\t totalLength: textToHighlight ? textToHighlight.length : 0\n\t\t });\n\t\t};\n\t\t\n\t\t/**\n\t\t * Takes an array of {start:number, end:number} objects and combines chunks that overlap into single chunks.\n\t\t * @return {start:number, end:number}[]\n\t\t */\n\t\tvar combineChunks = exports.combineChunks = function combineChunks(_ref2) {\n\t\t var chunks = _ref2.chunks;\n\t\t\n\t\t chunks = chunks.sort(function (first, second) {\n\t\t return first.start - second.start;\n\t\t }).reduce(function (processedChunks, nextChunk) {\n\t\t // First chunk just goes straight in the array...\n\t\t if (processedChunks.length === 0) {\n\t\t return [nextChunk];\n\t\t } else {\n\t\t // ... subsequent chunks get checked to see if they overlap...\n\t\t var prevChunk = processedChunks.pop();\n\t\t if (nextChunk.start <= prevChunk.end) {\n\t\t // It may be the case that prevChunk completely surrounds nextChunk, so take the\n\t\t // largest of the end indeces.\n\t\t var endIndex = Math.max(prevChunk.end, nextChunk.end);\n\t\t processedChunks.push({ start: prevChunk.start, end: endIndex });\n\t\t } else {\n\t\t processedChunks.push(prevChunk, nextChunk);\n\t\t }\n\t\t return processedChunks;\n\t\t }\n\t\t }, []);\n\t\t\n\t\t return chunks;\n\t\t};\n\t\t\n\t\t/**\n\t\t * Examine text for any matches.\n\t\t * If we find matches, add them to the returned array as a \"chunk\" object ({start:number, end:number}).\n\t\t * @return {start:number, end:number}[]\n\t\t */\n\t\tvar defaultFindChunks = function defaultFindChunks(_ref3) {\n\t\t var autoEscape = _ref3.autoEscape,\n\t\t caseSensitive = _ref3.caseSensitive,\n\t\t _ref3$sanitize = _ref3.sanitize,\n\t\t sanitize = _ref3$sanitize === undefined ? identity : _ref3$sanitize,\n\t\t searchWords = _ref3.searchWords,\n\t\t textToHighlight = _ref3.textToHighlight;\n\t\t\n\t\t textToHighlight = sanitize(textToHighlight);\n\t\t\n\t\t return searchWords.filter(function (searchWord) {\n\t\t return searchWord;\n\t\t }) // Remove empty words\n\t\t .reduce(function (chunks, searchWord) {\n\t\t searchWord = sanitize(searchWord);\n\t\t\n\t\t if (autoEscape) {\n\t\t searchWord = escapeRegExpFn(searchWord);\n\t\t }\n\t\t\n\t\t var regex = new RegExp(searchWord, caseSensitive ? 'g' : 'gi');\n\t\t\n\t\t var match = void 0;\n\t\t while (match = regex.exec(textToHighlight)) {\n\t\t var start = match.index;\n\t\t var end = regex.lastIndex;\n\t\t // We do not return zero-length matches\n\t\t if (end > start) {\n\t\t chunks.push({ start: start, end: end });\n\t\t }\n\t\t\n\t\t // Prevent browsers like Firefox from getting stuck in an infinite loop\n\t\t // See http://www.regexguru.com/2008/04/watch-out-for-zero-length-matches/\n\t\t if (match.index == regex.lastIndex) {\n\t\t regex.lastIndex++;\n\t\t }\n\t\t }\n\t\t\n\t\t return chunks;\n\t\t }, []);\n\t\t};\n\t\t// Allow the findChunks to be overridden in findAll,\n\t\t// but for backwards compatibility we export as the old name\n\t\texports.findChunks = defaultFindChunks;\n\t\t\n\t\t/**\n\t\t * Given a set of chunks to highlight, create an additional set of chunks\n\t\t * to represent the bits of text between the highlighted text.\n\t\t * @param chunksToHighlight {start:number, end:number}[]\n\t\t * @param totalLength number\n\t\t * @return {start:number, end:number, highlight:boolean}[]\n\t\t */\n\t\t\n\t\tvar fillInChunks = exports.fillInChunks = function fillInChunks(_ref4) {\n\t\t var chunksToHighlight = _ref4.chunksToHighlight,\n\t\t totalLength = _ref4.totalLength;\n\t\t\n\t\t var allChunks = [];\n\t\t var append = function append(start, end, highlight) {\n\t\t if (end - start > 0) {\n\t\t allChunks.push({\n\t\t start: start,\n\t\t end: end,\n\t\t highlight: highlight\n\t\t });\n\t\t }\n\t\t };\n\t\t\n\t\t if (chunksToHighlight.length === 0) {\n\t\t append(0, totalLength, false);\n\t\t } else {\n\t\t var lastIndex = 0;\n\t\t chunksToHighlight.forEach(function (chunk) {\n\t\t append(lastIndex, chunk.start, false);\n\t\t append(chunk.start, chunk.end, true);\n\t\t lastIndex = chunk.end;\n\t\t });\n\t\t append(lastIndex, totalLength, false);\n\t\t }\n\t\t return allChunks;\n\t\t};\n\t\t\n\t\tfunction identity(value) {\n\t\t return value;\n\t\t}\n\t\t\n\t\tfunction escapeRegExpFn(str) {\n\t\t return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n\t\t}\n\t\n\t/***/ })\n\t/******/ ]);\n\t//# sourceMappingURL=index.js.map\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n\t Symbol.for &&\n\t Symbol.for('react.element')) ||\n\t 0xeac7;\n\t\n\t var isValidElement = function(object) {\n\t return typeof object === 'object' &&\n\t object !== null &&\n\t object.$$typeof === REACT_ELEMENT_TYPE;\n\t };\n\t\n\t // By explicitly using `prop-types` you are opting into new development behavior.\n\t // http://fb.me/prop-types-in-prod\n\t var throwOnDirectAccess = true;\n\t module.exports = __webpack_require__(6)(isValidElement, throwOnDirectAccess);\n\t} else {\n\t // By explicitly using `prop-types` you are opting into new production behavior.\n\t // http://fb.me/prop-types-in-prod\n\t module.exports = __webpack_require__(13)();\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(7);\n\tvar invariant = __webpack_require__(8);\n\tvar warning = __webpack_require__(9);\n\tvar assign = __webpack_require__(10);\n\t\n\tvar ReactPropTypesSecret = __webpack_require__(11);\n\tvar checkPropTypes = __webpack_require__(12);\n\t\n\tmodule.exports = function(isValidElement, throwOnDirectAccess) {\n\t /* global Symbol */\n\t var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n\t var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\t\n\t /**\n\t * Returns the iterator method function contained on the iterable object.\n\t *\n\t * Be sure to invoke the function with the iterable as context:\n\t *\n\t * var iteratorFn = getIteratorFn(myIterable);\n\t * if (iteratorFn) {\n\t * var iterator = iteratorFn.call(myIterable);\n\t * ...\n\t * }\n\t *\n\t * @param {?object} maybeIterable\n\t * @return {?function}\n\t */\n\t function getIteratorFn(maybeIterable) {\n\t var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\t if (typeof iteratorFn === 'function') {\n\t return iteratorFn;\n\t }\n\t }\n\t\n\t /**\n\t * Collection of methods that allow declaration and validation of props that are\n\t * supplied to React components. Example usage:\n\t *\n\t * var Props = require('ReactPropTypes');\n\t * var MyArticle = React.createClass({\n\t * propTypes: {\n\t * // An optional string prop named \"description\".\n\t * description: Props.string,\n\t *\n\t * // A required enum prop named \"category\".\n\t * category: Props.oneOf(['News','Photos']).isRequired,\n\t *\n\t * // A prop named \"dialog\" that requires an instance of Dialog.\n\t * dialog: Props.instanceOf(Dialog).isRequired\n\t * },\n\t * render: function() { ... }\n\t * });\n\t *\n\t * A more formal specification of how these methods are used:\n\t *\n\t * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n\t * decl := ReactPropTypes.{type}(.isRequired)?\n\t *\n\t * Each and every declaration produces a function with the same signature. This\n\t * allows the creation of custom validation functions. For example:\n\t *\n\t * var MyLink = React.createClass({\n\t * propTypes: {\n\t * // An optional string or URI prop named \"href\".\n\t * href: function(props, propName, componentName) {\n\t * var propValue = props[propName];\n\t * if (propValue != null && typeof propValue !== 'string' &&\n\t * !(propValue instanceof URI)) {\n\t * return new Error(\n\t * 'Expected a string or an URI for ' + propName + ' in ' +\n\t * componentName\n\t * );\n\t * }\n\t * }\n\t * },\n\t * render: function() {...}\n\t * });\n\t *\n\t * @internal\n\t */\n\t\n\t var ANONYMOUS = '<>';\n\t\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\t var ReactPropTypes = {\n\t array: createPrimitiveTypeChecker('array'),\n\t bool: createPrimitiveTypeChecker('boolean'),\n\t func: createPrimitiveTypeChecker('function'),\n\t number: createPrimitiveTypeChecker('number'),\n\t object: createPrimitiveTypeChecker('object'),\n\t string: createPrimitiveTypeChecker('string'),\n\t symbol: createPrimitiveTypeChecker('symbol'),\n\t\n\t any: createAnyTypeChecker(),\n\t arrayOf: createArrayOfTypeChecker,\n\t element: createElementTypeChecker(),\n\t instanceOf: createInstanceTypeChecker,\n\t node: createNodeChecker(),\n\t objectOf: createObjectOfTypeChecker,\n\t oneOf: createEnumTypeChecker,\n\t oneOfType: createUnionTypeChecker,\n\t shape: createShapeTypeChecker,\n\t exact: createStrictShapeTypeChecker,\n\t };\n\t\n\t /**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\t /*eslint-disable no-self-compare*/\n\t function is(x, y) {\n\t // SameValue algorithm\n\t if (x === y) {\n\t // Steps 1-5, 7-10\n\t // Steps 6.b-6.e: +0 != -0\n\t return x !== 0 || 1 / x === 1 / y;\n\t } else {\n\t // Step 6.a: NaN == NaN\n\t return x !== x && y !== y;\n\t }\n\t }\n\t /*eslint-enable no-self-compare*/\n\t\n\t /**\n\t * We use an Error-like object for backward compatibility as people may call\n\t * PropTypes directly and inspect their output. However, we don't use real\n\t * Errors anymore. We don't inspect their stack anyway, and creating them\n\t * is prohibitively expensive if they are created too often, such as what\n\t * happens in oneOfType() for any type before the one that matched.\n\t */\n\t function PropTypeError(message) {\n\t this.message = message;\n\t this.stack = '';\n\t }\n\t // Make `instanceof Error` still work for returned errors.\n\t PropTypeError.prototype = Error.prototype;\n\t\n\t function createChainableTypeChecker(validate) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t var manualPropTypeCallCache = {};\n\t var manualPropTypeWarningCount = 0;\n\t }\n\t function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n\t componentName = componentName || ANONYMOUS;\n\t propFullName = propFullName || propName;\n\t\n\t if (secret !== ReactPropTypesSecret) {\n\t if (throwOnDirectAccess) {\n\t // New behavior only for users of `prop-types` package\n\t invariant(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use `PropTypes.checkPropTypes()` to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n\t // Old behavior for people using React.PropTypes\n\t var cacheKey = componentName + ':' + propName;\n\t if (\n\t !manualPropTypeCallCache[cacheKey] &&\n\t // Avoid spamming the console because they are often not actionable except for lib authors\n\t manualPropTypeWarningCount < 3\n\t ) {\n\t warning(\n\t false,\n\t 'You are manually calling a React.PropTypes validation ' +\n\t 'function for the `%s` prop on `%s`. This is deprecated ' +\n\t 'and will throw in the standalone `prop-types` package. ' +\n\t 'You may be seeing this warning due to a third-party PropTypes ' +\n\t 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',\n\t propFullName,\n\t componentName\n\t );\n\t manualPropTypeCallCache[cacheKey] = true;\n\t manualPropTypeWarningCount++;\n\t }\n\t }\n\t }\n\t if (props[propName] == null) {\n\t if (isRequired) {\n\t if (props[propName] === null) {\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n\t }\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n\t }\n\t return null;\n\t } else {\n\t return validate(props, propName, componentName, location, propFullName);\n\t }\n\t }\n\t\n\t var chainedCheckType = checkType.bind(null, false);\n\t chainedCheckType.isRequired = checkType.bind(null, true);\n\t\n\t return chainedCheckType;\n\t }\n\t\n\t function createPrimitiveTypeChecker(expectedType) {\n\t function validate(props, propName, componentName, location, propFullName, secret) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== expectedType) {\n\t // `propValue` being instance of, say, date/regexp, pass the 'object'\n\t // check, but we can offer a more precise error message here rather than\n\t // 'of type `object`'.\n\t var preciseType = getPreciseType(propValue);\n\t\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createAnyTypeChecker() {\n\t return createChainableTypeChecker(emptyFunction.thatReturnsNull);\n\t }\n\t\n\t function createArrayOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n\t }\n\t var propValue = props[propName];\n\t if (!Array.isArray(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n\t }\n\t for (var i = 0; i < propValue.length; i++) {\n\t var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createElementTypeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t if (!isValidElement(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createInstanceTypeChecker(expectedClass) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!(props[propName] instanceof expectedClass)) {\n\t var expectedClassName = expectedClass.name || ANONYMOUS;\n\t var actualClassName = getClassName(props[propName]);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createEnumTypeChecker(expectedValues) {\n\t if (!Array.isArray(expectedValues)) {\n\t process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n\t return emptyFunction.thatReturnsNull;\n\t }\n\t\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t for (var i = 0; i < expectedValues.length; i++) {\n\t if (is(propValue, expectedValues[i])) {\n\t return null;\n\t }\n\t }\n\t\n\t var valuesString = JSON.stringify(expectedValues);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createObjectOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n\t }\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n\t }\n\t for (var key in propValue) {\n\t if (propValue.hasOwnProperty(key)) {\n\t var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createUnionTypeChecker(arrayOfTypeCheckers) {\n\t if (!Array.isArray(arrayOfTypeCheckers)) {\n\t process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n\t return emptyFunction.thatReturnsNull;\n\t }\n\t\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (typeof checker !== 'function') {\n\t warning(\n\t false,\n\t 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n\t 'received %s at index %s.',\n\t getPostfixForTypeWarning(checker),\n\t i\n\t );\n\t return emptyFunction.thatReturnsNull;\n\t }\n\t }\n\t\n\t function validate(props, propName, componentName, location, propFullName) {\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n\t return null;\n\t }\n\t }\n\t\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createNodeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!isNode(props[propName])) {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t for (var key in shapeTypes) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t continue;\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function createStrictShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t // We need to check all keys in case some are required but missing from\n\t // props.\n\t var allKeys = assign({}, props[propName], shapeTypes);\n\t for (var key in allKeys) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t return new PropTypeError(\n\t 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n\t '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n\t '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n\t );\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t\n\t return createChainableTypeChecker(validate);\n\t }\n\t\n\t function isNode(propValue) {\n\t switch (typeof propValue) {\n\t case 'number':\n\t case 'string':\n\t case 'undefined':\n\t return true;\n\t case 'boolean':\n\t return !propValue;\n\t case 'object':\n\t if (Array.isArray(propValue)) {\n\t return propValue.every(isNode);\n\t }\n\t if (propValue === null || isValidElement(propValue)) {\n\t return true;\n\t }\n\t\n\t var iteratorFn = getIteratorFn(propValue);\n\t if (iteratorFn) {\n\t var iterator = iteratorFn.call(propValue);\n\t var step;\n\t if (iteratorFn !== propValue.entries) {\n\t while (!(step = iterator.next()).done) {\n\t if (!isNode(step.value)) {\n\t return false;\n\t }\n\t }\n\t } else {\n\t // Iterator will provide entry [k,v] tuples rather than values.\n\t while (!(step = iterator.next()).done) {\n\t var entry = step.value;\n\t if (entry) {\n\t if (!isNode(entry[1])) {\n\t return false;\n\t }\n\t }\n\t }\n\t }\n\t } else {\n\t return false;\n\t }\n\t\n\t return true;\n\t default:\n\t return false;\n\t }\n\t }\n\t\n\t function isSymbol(propType, propValue) {\n\t // Native Symbol.\n\t if (propType === 'symbol') {\n\t return true;\n\t }\n\t\n\t // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\t if (propValue['@@toStringTag'] === 'Symbol') {\n\t return true;\n\t }\n\t\n\t // Fallback for non-spec compliant Symbols which are polyfilled.\n\t if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n\t return true;\n\t }\n\t\n\t return false;\n\t }\n\t\n\t // Equivalent of `typeof` but with special handling for array and regexp.\n\t function getPropType(propValue) {\n\t var propType = typeof propValue;\n\t if (Array.isArray(propValue)) {\n\t return 'array';\n\t }\n\t if (propValue instanceof RegExp) {\n\t // Old webkits (at least until Android 4.0) return 'function' rather than\n\t // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n\t // passes PropTypes.object.\n\t return 'object';\n\t }\n\t if (isSymbol(propType, propValue)) {\n\t return 'symbol';\n\t }\n\t return propType;\n\t }\n\t\n\t // This handles more types than `getPropType`. Only used for error messages.\n\t // See `createPrimitiveTypeChecker`.\n\t function getPreciseType(propValue) {\n\t if (typeof propValue === 'undefined' || propValue === null) {\n\t return '' + propValue;\n\t }\n\t var propType = getPropType(propValue);\n\t if (propType === 'object') {\n\t if (propValue instanceof Date) {\n\t return 'date';\n\t } else if (propValue instanceof RegExp) {\n\t return 'regexp';\n\t }\n\t }\n\t return propType;\n\t }\n\t\n\t // Returns a string that is postfixed to a warning about an invalid type.\n\t // For example, \"undefined\" or \"of type array\"\n\t function getPostfixForTypeWarning(value) {\n\t var type = getPreciseType(value);\n\t switch (type) {\n\t case 'array':\n\t case 'object':\n\t return 'an ' + type;\n\t case 'boolean':\n\t case 'date':\n\t case 'regexp':\n\t return 'a ' + type;\n\t default:\n\t return type;\n\t }\n\t }\n\t\n\t // Returns class name of the object, if any.\n\t function getClassName(propValue) {\n\t if (!propValue.constructor || !propValue.constructor.name) {\n\t return ANONYMOUS;\n\t }\n\t return propValue.constructor.name;\n\t }\n\t\n\t ReactPropTypes.checkPropTypes = checkPropTypes;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\t\n\t return ReactPropTypes;\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\t\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tvar emptyFunction = function emptyFunction() {};\n\t\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\t\n\tmodule.exports = emptyFunction;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\t\n\tvar validateFormat = function validateFormat(format) {};\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t validateFormat = function validateFormat(format) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t };\n\t}\n\t\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t validateFormat(format);\n\t\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\t\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\t\n\tmodule.exports = invariant;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2014-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(7);\n\t\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\t\n\tvar warning = emptyFunction;\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t var printWarning = function printWarning(format) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\t\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t };\n\t\n\t warning = function warning(condition, format) {\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\t\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\t\n\t if (!condition) {\n\t for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n\t args[_key2 - 2] = arguments[_key2];\n\t }\n\t\n\t printWarning.apply(undefined, [format].concat(args));\n\t }\n\t };\n\t}\n\t\n\tmodule.exports = warning;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t\n\t'use strict';\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t\n\t'use strict';\n\t\n\tvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\t\n\tmodule.exports = ReactPropTypesSecret;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t\n\t'use strict';\n\t\n\tif (process.env.NODE_ENV !== 'production') {\n\t var invariant = __webpack_require__(8);\n\t var warning = __webpack_require__(9);\n\t var ReactPropTypesSecret = __webpack_require__(11);\n\t var loggedTypeFailures = {};\n\t}\n\t\n\t/**\n\t * Assert that the values match with the type specs.\n\t * Error messages are memorized and will only be shown once.\n\t *\n\t * @param {object} typeSpecs Map of name to a ReactPropType\n\t * @param {object} values Runtime values that need to be type-checked\n\t * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n\t * @param {string} componentName Name of the component for error messages.\n\t * @param {?Function} getStack Returns the component stack.\n\t * @private\n\t */\n\tfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t for (var typeSpecName in typeSpecs) {\n\t if (typeSpecs.hasOwnProperty(typeSpecName)) {\n\t var error;\n\t // Prop type validation may throw. In case they do, we don't want to\n\t // fail the render phase where it didn't fail before. So we log it.\n\t // After these have been cleaned up, we'll let them throw.\n\t try {\n\t // This is intentionally an invariant that gets caught. It's the same\n\t // behavior as without this statement except with a better message.\n\t invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);\n\t error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n\t } catch (ex) {\n\t error = ex;\n\t }\n\t warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);\n\t if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n\t // Only monitor this failure once because there tends to be a lot of the\n\t // same error.\n\t loggedTypeFailures[error.message] = true;\n\t\n\t var stack = getStack ? getStack() : '';\n\t\n\t warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n\t }\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = checkPropTypes;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(7);\n\tvar invariant = __webpack_require__(8);\n\tvar ReactPropTypesSecret = __webpack_require__(11);\n\t\n\tmodule.exports = function() {\n\t function shim(props, propName, componentName, location, propFullName, secret) {\n\t if (secret === ReactPropTypesSecret) {\n\t // It is still safe when called from React.\n\t return;\n\t }\n\t invariant(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use PropTypes.checkPropTypes() to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t };\n\t shim.isRequired = shim;\n\t function getShim() {\n\t return shim;\n\t };\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\t var ReactPropTypes = {\n\t array: shim,\n\t bool: shim,\n\t func: shim,\n\t number: shim,\n\t object: shim,\n\t string: shim,\n\t symbol: shim,\n\t\n\t any: shim,\n\t arrayOf: getShim,\n\t element: shim,\n\t instanceOf: getShim,\n\t node: shim,\n\t objectOf: getShim,\n\t oneOf: getShim,\n\t oneOfType: getShim,\n\t shape: getShim,\n\t exact: getShim\n\t };\n\t\n\t ReactPropTypes.checkPropTypes = emptyFunction;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\t\n\t return ReactPropTypes;\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"react\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar simpleIsEqual = function simpleIsEqual(a, b) {\n\t return a === b;\n\t};\n\t\n\tfunction index (resultFn) {\n\t var isEqual = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : simpleIsEqual;\n\t\n\t var lastThis = void 0;\n\t var lastArgs = [];\n\t var lastResult = void 0;\n\t var calledOnce = false;\n\t\n\t var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n\t return isEqual(newArg, lastArgs[index]);\n\t };\n\t\n\t var result = function result() {\n\t for (var _len = arguments.length, newArgs = Array(_len), _key = 0; _key < _len; _key++) {\n\t newArgs[_key] = arguments[_key];\n\t }\n\t\n\t if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n\t return lastResult;\n\t }\n\t\n\t calledOnce = true;\n\t lastThis = this;\n\t lastArgs = newArgs;\n\t lastResult = resultFn.apply(this, newArgs);\n\t return lastResult;\n\t };\n\t\n\t return result;\n\t}\n\t\n\tmodule.exports = index;\n\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=main.js.map","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;kb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\nvar hasOwnProperty;\nvar regexExec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);\n\tregexExec = Function.call.bind(RegExp.prototype.exec);\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar toStr = Object.prototype.toString;\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwnProperty(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tregexExec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn toStr.call(value) === regexClass;\n\t};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('es-abstract/helpers/callBind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar GetIntrinsic = require('../GetIntrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind() {\n\treturn $reflectApply(bind, $call, arguments);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\n/* globals\n\tAtomics,\n\tSharedArrayBuffer,\n*/\n\nvar undefined;\n\nvar $TypeError = TypeError;\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () { throw new $TypeError(); };\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar generator; // = function * () {};\nvar generatorFunction = generator ? getProto(generator) : undefined;\nvar asyncFn; // async function() {};\nvar asyncFunction = asyncFn ? asyncFn.constructor : undefined;\nvar asyncGen; // async function * () {};\nvar asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined;\nvar asyncGenIterator = asyncGen ? asyncGen() : undefined;\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%ArrayPrototype%': Array.prototype,\n\t'%ArrayProto_entries%': Array.prototype.entries,\n\t'%ArrayProto_forEach%': Array.prototype.forEach,\n\t'%ArrayProto_keys%': Array.prototype.keys,\n\t'%ArrayProto_values%': Array.prototype.values,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': asyncFunction,\n\t'%AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined,\n\t'%AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined,\n\t'%AsyncGeneratorFunction%': asyncGenFunction,\n\t'%AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined,\n\t'%AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%Boolean%': Boolean,\n\t'%BooleanPrototype%': Boolean.prototype,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype,\n\t'%Date%': Date,\n\t'%DatePrototype%': Date.prototype,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%ErrorPrototype%': Error.prototype,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%EvalErrorPrototype%': EvalError.prototype,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype,\n\t'%Function%': Function,\n\t'%FunctionPrototype%': Function.prototype,\n\t'%Generator%': generator ? getProto(generator()) : undefined,\n\t'%GeneratorFunction%': generatorFunction,\n\t'%GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype,\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%NumberPrototype%': Number.prototype,\n\t'%Object%': Object,\n\t'%ObjectPrototype%': Object.prototype,\n\t'%ObjProto_toString%': Object.prototype.toString,\n\t'%ObjProto_valueOf%': Object.prototype.valueOf,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype,\n\t'%PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then,\n\t'%Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all,\n\t'%Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject,\n\t'%Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%RangeErrorPrototype%': RangeError.prototype,\n\t'%ReferenceError%': ReferenceError,\n\t'%ReferenceErrorPrototype%': ReferenceError.prototype,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%RegExpPrototype%': RegExp.prototype,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype,\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%StringPrototype%': String.prototype,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined,\n\t'%SyntaxError%': SyntaxError,\n\t'%SyntaxErrorPrototype%': SyntaxError.prototype,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined,\n\t'%TypeError%': $TypeError,\n\t'%TypeErrorPrototype%': $TypeError.prototype,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype,\n\t'%URIError%': URIError,\n\t'%URIErrorPrototype%': URIError.prototype,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\t'%WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype\n};\n\nvar bind = require('function-bind');\nvar $replace = bind.call(Function.call, String.prototype.replace);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tif (!(name in INTRINSICS)) {\n\t\tthrow new SyntaxError('intrinsic ' + name + ' does not exist!');\n\t}\n\n\t// istanbul ignore if // hopefully this is impossible to test :-)\n\tif (typeof INTRINSICS[name] === 'undefined' && !allowMissing) {\n\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t}\n\n\treturn INTRINSICS[name];\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\n\tvar value = getBaseIntrinsic('%' + (parts.length > 0 ? parts[0] : '') + '%', allowMissing);\n\tfor (var i = 1; i < parts.length; i += 1) {\n\t\tif (value != null) {\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, parts[i]);\n\t\t\t\tif (!allowMissing && !(parts[i] in value)) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tvalue = desc && 'get' in desc && !('originalValue' in desc.get) ? desc.get : value[parts[i]];\n\t\t\t} else {\n\t\t\t\tvalue = value[parts[i]];\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _gud = require('gud');\n\nvar _gud2 = _interopRequireDefault(_gud);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\n// Inlined Object.is polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + (0, _gud2.default)() + '__';\n\n var Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n function Provider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Provider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.emitter = createEventEmitter(_this.props.value), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Provider.prototype.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n Provider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits = void 0;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0; // No change\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n if (process.env.NODE_ENV !== 'production') {\n (0, _warning2.default)((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n Provider.prototype.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(_react.Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = _propTypes2.default.object.isRequired, _Provider$childContex);\n\n var Consumer = function (_Component2) {\n _inherits(Consumer, _Component2);\n\n function Consumer() {\n var _temp2, _this2, _ret2;\n\n _classCallCheck(this, Consumer);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.state = {\n value: _this2.getValue()\n }, _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({ value: _this2.getValue() });\n }\n }, _temp2), _possibleConstructorReturn(_this2, _ret2);\n }\n\n Consumer.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n Consumer.prototype.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n var observedBits = this.props.observedBits;\n\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n Consumer.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n Consumer.prototype.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n Consumer.prototype.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(_react.Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = _propTypes2.default.object, _Consumer$contextType);\n\n\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nexports.default = createReactContext;\nmodule.exports = exports['default'];","// @flow\n'use strict';\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n return global[key] = (global[key] || 0) + 1;\n};\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"invariant\";\nimport { createLocation } from \"history\";\n\nvar isModifiedEvent = function isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n};\n\n/**\n * The public API for rendering a history-aware .\n */\n\nvar Link = function (_React$Component) {\n _inherits(Link, _React$Component);\n\n function Link() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Link);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleClick = function (event) {\n if (_this.props.onClick) _this.props.onClick(event);\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore everything but left clicks\n !_this.props.target && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n\n var history = _this.context.router.history;\n var _this$props = _this.props,\n replace = _this$props.replace,\n to = _this$props.to;\n\n\n if (replace) {\n history.replace(to);\n } else {\n history.push(to);\n }\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Link.prototype.render = function render() {\n var _props = this.props,\n replace = _props.replace,\n to = _props.to,\n innerRef = _props.innerRef,\n props = _objectWithoutProperties(_props, [\"replace\", \"to\", \"innerRef\"]); // eslint-disable-line no-unused-vars\n\n invariant(this.context.router, \"You should not use outside a \");\n\n invariant(to !== undefined, 'You must specify the \"to\" property');\n\n var history = this.context.router.history;\n\n var location = typeof to === \"string\" ? createLocation(to, null, null, history.location) : to;\n\n var href = history.createHref(location);\n return React.createElement(\"a\", _extends({}, props, { onClick: this.handleClick, href: href, ref: innerRef }));\n };\n\n return Link;\n}(React.Component);\n\nLink.propTypes = {\n onClick: PropTypes.func,\n target: PropTypes.string,\n replace: PropTypes.bool,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n innerRef: PropTypes.oneOfType([PropTypes.string, PropTypes.func])\n};\nLink.defaultProps = {\n replace: false\n};\nLink.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n replace: PropTypes.func.isRequired,\n createHref: PropTypes.func.isRequired\n }).isRequired\n }).isRequired\n};\n\n\nexport default Link;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n _inherits(Router, _React$Component);\n\n function Router() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Router);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props.history.location.pathname)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Router.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n history: this.props.history,\n route: {\n location: this.props.history.location,\n match: this.state.match\n }\n })\n };\n };\n\n Router.prototype.computeMatch = function computeMatch(pathname) {\n return {\n path: \"/\",\n url: \"/\",\n params: {},\n isExact: pathname === \"/\"\n };\n };\n\n Router.prototype.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n var _props = this.props,\n children = _props.children,\n history = _props.history;\n\n\n invariant(children == null || React.Children.count(children) === 1, \"A may have only one child element\");\n\n // Do this here so we can setState when a changes the\n // location in componentWillMount. This happens e.g. when doing\n // server rendering using a .\n this.unlisten = history.listen(function () {\n _this2.setState({\n match: _this2.computeMatch(history.location.pathname)\n });\n });\n };\n\n Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n warning(this.props.history === nextProps.history, \"You cannot change \");\n };\n\n Router.prototype.componentWillUnmount = function componentWillUnmount() {\n this.unlisten();\n };\n\n Router.prototype.render = function render() {\n var children = this.props.children;\n\n return children ? React.Children.only(children) : null;\n };\n\n return Router;\n}(React.Component);\n\nRouter.propTypes = {\n history: PropTypes.object.isRequired,\n children: PropTypes.node\n};\nRouter.contextTypes = {\n router: PropTypes.object\n};\nRouter.childContextTypes = {\n router: PropTypes.object.isRequired\n};\n\n\nexport default Router;","// Written in this round about way for babel-transform-imports\nimport Router from \"react-router/es/Router\";\n\nexport default Router;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from \"warning\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport Router from \"./Router\";\n\n/**\n * The public API for a that uses HTML5 history.\n */\n\nvar BrowserRouter = function (_React$Component) {\n _inherits(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, BrowserRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = createHistory(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n BrowserRouter.prototype.componentWillMount = function componentWillMount() {\n warning(!this.props.history, \" ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\");\n };\n\n BrowserRouter.prototype.render = function render() {\n return React.createElement(Router, { history: this.history, children: this.props.children });\n };\n\n return BrowserRouter;\n}(React.Component);\n\nBrowserRouter.propTypes = {\n basename: PropTypes.string,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n};\n\n\nexport default BrowserRouter;","import pathToRegexp from \"path-to-regexp\";\n\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nvar compilePath = function compilePath(pattern, options) {\n var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n\n if (cache[pattern]) return cache[pattern];\n\n var keys = [];\n var re = pathToRegexp(pattern, keys, options);\n var compiledPattern = { re: re, keys: keys };\n\n if (cacheCount < cacheLimit) {\n cache[pattern] = compiledPattern;\n cacheCount++;\n }\n\n return compiledPattern;\n};\n\n/**\n * Public API for matching a URL pathname to a path pattern.\n */\nvar matchPath = function matchPath(pathname) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var parent = arguments[2];\n\n if (typeof options === \"string\") options = { path: options };\n\n var _options = options,\n path = _options.path,\n _options$exact = _options.exact,\n exact = _options$exact === undefined ? false : _options$exact,\n _options$strict = _options.strict,\n strict = _options$strict === undefined ? false : _options$strict,\n _options$sensitive = _options.sensitive,\n sensitive = _options$sensitive === undefined ? false : _options$sensitive;\n\n\n if (path == null) return parent;\n\n var _compilePath = compilePath(path, { end: exact, strict: strict, sensitive: sensitive }),\n re = _compilePath.re,\n keys = _compilePath.keys;\n\n var match = re.exec(pathname);\n\n if (!match) return null;\n\n var url = match[0],\n values = match.slice(1);\n\n var isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path: path, // the path pattern used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact: isExact, // whether or not we matched exactly\n params: keys.reduce(function (memo, key, index) {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n};\n\nexport default matchPath;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport matchPath from \"./matchPath\";\n\nvar isEmptyChildren = function isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n};\n\n/**\n * The public API for matching a single path and rendering.\n */\n\nvar Route = function (_React$Component) {\n _inherits(Route, _React$Component);\n\n function Route() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Route);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props, _this.context.router)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Route.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n route: {\n location: this.props.location || this.context.router.route.location,\n match: this.state.match\n }\n })\n };\n };\n\n Route.prototype.computeMatch = function computeMatch(_ref, router) {\n var computedMatch = _ref.computedMatch,\n location = _ref.location,\n path = _ref.path,\n strict = _ref.strict,\n exact = _ref.exact,\n sensitive = _ref.sensitive;\n\n if (computedMatch) return computedMatch; // already computed the match for us\n\n invariant(router, \"You should not use or withRouter() outside a \");\n\n var route = router.route;\n\n var pathname = (location || route.location).pathname;\n\n return matchPath(pathname, { path: path, strict: strict, exact: exact, sensitive: sensitive }, route.match);\n };\n\n Route.prototype.componentWillMount = function componentWillMount() {\n warning(!(this.props.component && this.props.render), \"You should not use and in the same route; will be ignored\");\n\n warning(!(this.props.component && this.props.children && !isEmptyChildren(this.props.children)), \"You should not use and in the same route; will be ignored\");\n\n warning(!(this.props.render && this.props.children && !isEmptyChildren(this.props.children)), \"You should not use and in the same route; will be ignored\");\n };\n\n Route.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextContext) {\n warning(!(nextProps.location && !this.props.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.');\n\n warning(!(!nextProps.location && this.props.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.');\n\n this.setState({\n match: this.computeMatch(nextProps, nextContext.router)\n });\n };\n\n Route.prototype.render = function render() {\n var match = this.state.match;\n var _props = this.props,\n children = _props.children,\n component = _props.component,\n render = _props.render;\n var _context$router = this.context.router,\n history = _context$router.history,\n route = _context$router.route,\n staticContext = _context$router.staticContext;\n\n var location = this.props.location || route.location;\n var props = { match: match, location: location, history: history, staticContext: staticContext };\n\n if (component) return match ? React.createElement(component, props) : null;\n\n if (render) return match ? render(props) : null;\n\n if (typeof children === \"function\") return children(props);\n\n if (children && !isEmptyChildren(children)) return React.Children.only(children);\n\n return null;\n };\n\n return Route;\n}(React.Component);\n\nRoute.propTypes = {\n computedMatch: PropTypes.object, // private, from \n path: PropTypes.string,\n exact: PropTypes.bool,\n strict: PropTypes.bool,\n sensitive: PropTypes.bool,\n component: PropTypes.func,\n render: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n location: PropTypes.object\n};\nRoute.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.object.isRequired,\n route: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n })\n};\nRoute.childContextTypes = {\n router: PropTypes.object.isRequired\n};\n\n\nexport default Route;"],"sourceRoot":""}