{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///mdc.tabs.js","webpack:///webpack/bootstrap b31518711b0023492c74","webpack:///./packages/mdc-base/foundation.ts","webpack:///./packages/mdc-base/component.ts","webpack:///./packages/mdc-animation/util.ts","webpack:///./packages/mdc-tabs/index.ts","webpack:///./packages/mdc-tabs/tab/index.ts","webpack:///./packages/mdc-tabs/tab-bar/index.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/index.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/component.ts","webpack:///./packages/mdc-dom/ponyfill.ts","webpack:///./packages/mdc-ripple/util.ts","webpack:///./packages/mdc-ripple/foundation.ts","webpack:///./packages/mdc-ripple/constants.ts","webpack:///./packages/mdc-tabs/tab/constants.ts","webpack:///./packages/mdc-tabs/tab/foundation.ts","webpack:///./packages/mdc-ripple/component.ts","webpack:///./packages/mdc-tabs/tab/component.ts","webpack:///./packages/mdc-tabs/tab-bar/component.ts","webpack:///./packages/mdc-tabs/tab-bar/foundation.ts","webpack:///./packages/mdc-tabs/tab-bar/constants.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/foundation.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/constants.ts"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","0","value","MDCFoundation","adapter","adapter_","init","destroy","default","1","__read","Symbol","iterator","r","ar","e","next","done","push","error","__spread","arguments","length","concat","foundation_1","MDCComponent","foundation","args","_i","root_","initialize","apply","foundation_","undefined","getDefaultFoundation","initialSyncWithDOM","attachTo","_args","Error","listen","evtType","handler","addEventListener","unlisten","removeEventListener","emit","evtData","shouldBubble","evt","CustomEvent","bubbles","detail","document","createEvent","initCustomEvent","dispatchEvent","11","cssPropertyNameMap","animation","prefixed","standard","transform","transition","jsEventTypeMap","animationend","cssProperty","animationiteration","animationstart","transitionend","isWindow","windowObj","Boolean","createElement","getCorrectPropertyName","el","_a","isStandard","style","getCorrectEventName","eventType","163","__export","164","constants_1","tabCssClasses","cssClasses","tabStrings","strings","165","tabBarCssClasses","tabBarStrings","166","tabBarScrollerCssClasses","tabBarScrollerStrings","167","__extends","_extendStatics","extendStatics","b","setPrototypeOf","__proto__","Array","__","constructor","create","util_1","component_1","component_2","MDCTabBarScroller","_super","tabBar_","tabBarFactory","MDCTabBar","scrollFrame_","querySelector","MDCTabBarScrollerFoundation","FRAME_SELECTOR","tabBarEl_","TABS_SELECTOR","forwardIndicator_","INDICATOR_FORWARD_SELECTOR","backIndicator_","INDICATOR_BACK_SELECTOR","_this","addClass","className","classList","add","removeClass","remove","eventTargetHasClass","target","contains","addClassToForwardIndicator","removeClassFromForwardIndicator","addClassToBackIndicator","removeClassFromBackIndicator","isRTL","getComputedStyle","getPropertyValue","registerBackIndicatorClickHandler","deregisterBackIndicatorClickHandler","registerForwardIndicatorClickHandler","deregisterForwardIndicatorClickHandler","registerCapturedInteractionHandler","deregisterCapturedInteractionHandler","registerWindowResizeHandler","window","deregisterWindowResizeHandler","getNumberOfTabs","tabBar","tabs","getComputedWidthForTabAtIndex","index","computedWidth","getComputedLeftForTabAtIndex","computedLeft","getOffsetWidthForScrollFrame","offsetWidth","getScrollLeftForScrollFrame","scrollLeft","setScrollLeftForScrollFrame","scrollLeftAmount","getOffsetWidthForTabBar","setTransformStyleForTabBar","setProperty","getOffsetLeftForEventTarget","offsetLeft","getOffsetWidthForEventTarget","layout","2","closest","element","selector","matches","parentElement","nativeMatches","webkitMatchesSelector","msMatchesSelector","3","supportsCssVariables_","supportsPassive_","detectEdgePseudoVarBug","node","body","appendChild","computedStyle","hasPseudoVarBug","borderTopStyle","parentNode","removeChild","supportsCssVariables","forceRefresh","CSS","supportsCssVars","supportsFunctionPresent","supports","explicitlySupportsCssVars","weAreFeatureDetectingSafari10plus","applyPassive","globalObj","isSupported_1","passive","getNormalizedEventCoords","pageOffset","clientRect","x","y","documentX","left","documentY","top","normalizedX","normalizedY","type","touchEvent","changedTouches","pageX","pageY","mouseEvent","4","__assign","assign","t","ACTIVATION_EVENT_TYPES","POINTER_DEACTIVATION_EVENT_TYPES","activatedTargets","MDCRippleFoundation","defaultAdapter","activationAnimationHasEnded_","activationTimer_","fgDeactivationRemovalTimer_","fgScale_","frame_","width","height","initialSize_","layoutFrame_","maxRadius_","unboundedCoords_","activationState_","defaultActivationState_","activationTimerCallback_","runDeactivationUXLogicIfReady_","activateHandler_","activate_","deactivateHandler_","deactivate_","focusHandler_","handleFocus","blurHandler_","handleBlur","resizeHandler_","numbers","browserSupportsCssVars","computeBoundingRect","right","bottom","containsEventTarget","deregisterDocumentInteractionHandler","deregisterInteractionHandler","deregisterResizeHandler","getWindowPageOffset","isSurfaceActive","isSurfaceDisabled","isUnbounded","registerDocumentInteractionHandler","registerInteractionHandler","registerResizeHandler","updateCssVariable","supportsPressRipple","supportsPressRipple_","registerRootHandlers_","ROOT_1","ROOT","UNBOUNDED_1","UNBOUNDED","requestAnimationFrame","layoutInternal_","clearTimeout","FG_ACTIVATION","FG_DEACTIVATION","ROOT_2","UNBOUNDED_2","removeCssVars_","deregisterRootHandlers_","deregisterDeactivationHandlers_","activate","deactivate","cancelAnimationFrame","setUnbounded","unbounded","BG_FOCUSED","activationEvent","hasDeactivationUXRun","isActivated","isProgrammatic","wasActivatedByPointer","wasElementMadeActive","forEach","registerDeactivationHandlers_","rippleStrings","keys","key","indexOf","activationState","previousActivationEvent","previousActivationEvent_","isSameInteraction","hasActivatedChild","some","resetActivationState_","checkElementMadeActive_","animateActivation_","keyCode","VAR_FG_TRANSLATE_START","VAR_FG_TRANSLATE_END","_b","DEACTIVATION_TIMEOUT_MS","translateStart","translateEnd","_c","getFgTranslationCoordinates_","startPoint","endPoint","rmBoundedActivationClasses_","setTimeout","activationHasEnded","FG_DEACTIVATION_MS","TAP_DELAY_MS","state","animateDeactivation_","maxDim","Math","max","getBoundedRadius","hypotenuse","sqrt","pow","PADDING","floor","INITIAL_ORIGIN_SCALE","updateLayoutCssVars_","VAR_FG_SIZE","VAR_LEFT","VAR_TOP","VAR_FG_SCALE","round","5","50","ACTIVE","SELECTED_EVENT","51","MDCTabFoundation","computedWidth_","computedLeft_","isActive_","preventDefaultOnClick_","clickHandler_","preventDefault","notifySelected","keydownHandler_","getOffsetWidth","getOffsetLeft","getComputedWidth","getComputedLeft","isActive","setActive","preventsDefaultOnClick","setPreventDefaultOnClick","preventDefaultOnClick","measureSelf","6","__importStar","mod","result","k","ponyfill_1","util","MDCRipple","disabled","opts","ripple","createAdapter","instance","getBoundingClientRect","documentElement","pageXOffset","pageYOffset","varName","unbounded_","set","setUnbounded_","dataset","93","MDCTab","ripple_","tab","94","foundation_2","MDCTabBarFoundation","tabs_","activeIndex","getActiveTabIndex","setActiveTab_","setActiveTabIndex_","tabFactory","indicator_","INDICATOR_SELECTOR","gatherTabs_","tabSelectedHandler_","bindOnMDCTabSelectedEvent","unbindOnMDCTabSelectedEvent","setStyleForIndicator","propertyName","getOffsetWidthForIndicator","notifyChange","CHANGE_EVENT","isTabActiveAtIndex","setTabActiveAtIndex","isDefaultPreventedOnClickForTabAtIndex","setPreventDefaultOnClickForTabAtIndex","measureTabAtIndex","tabElements","slice","querySelectorAll","TAB_SELECTOR","map","activeTabIndex","switchToTabAtIndex","activeTab","indexOfTab","95","isIndicatorShown_","activeTabIndex_","UPGRADED","findActiveTabIndex_","shouldNotify","prevActiveTabIndex","layoutIndicator_","forEachTabIndex_","isIndicatorFirstRender","translateAmtForActiveTabLeft","scaleAmtForActiveTabWidth","transformValue","numTabs","shouldBreak","96","97","INTERACTION_EVENTS","pointerDownRecognized_","currentTranslateOffset_","focusedTarget_","scrollFrameScrollLeft_","forwardIndicatorClickHandler_","scrollForward","backIndicatorClickHandler_","scrollBack","interactionHandler_","handlePossibleTabKeyboardFocus_","tabWidthAccumulator","scrollTargetIndex","tabOffsetLeft","tabBarWidthLessTabOffsetLeft","tabIsNotOccluded","isRTL_","scrollTargetDetermined","scrollToTabAtIndex","scrollFrameOffsetWidth","tabOffsetLeftAndWidth","frameOffsetAndTabWidth","tabRightOffset","layout_","scrollTargetOffsetLeft","scrollTargetOffsetWidth","normalizeForRTL_","shiftFrame_","frameWidth","isOverflowing","updateIndicatorEnabledStates_","shiftAmount","TAB","resetAmt","scrollFrameWidth","tabBarWidth","leftEdge","rightEdge","shouldScrollBack","shouldScrollForward","normalizedLeftOffset","INDICATOR_ENABLED","remainingTabBarWidth","98","INDICATOR_BACK","INDICATOR_FORWARD"],"mappings":"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","file":"mdc.tabs.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tabs\"] = factory();\n\telse\n\t\troot[\"mdc\"] = root[\"mdc\"] || {}, root[\"mdc\"][\"tabs\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tabs\"] = factory();\n\telse\n\t\troot[\"mdc\"] = root[\"mdc\"] || {}, root[\"mdc\"][\"tabs\"] = factory();\n})(this, function() {\nreturn /******/ (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/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 163);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MDCFoundation = /** @class */function () {\n    function MDCFoundation(adapter) {\n        if (adapter === void 0) {\n            adapter = {};\n        }\n        this.adapter_ = adapter;\n    }\n    Object.defineProperty(MDCFoundation, \"cssClasses\", {\n        get: function get() {\n            // Classes extending MDCFoundation should implement this method to return an object which exports every\n            // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'}\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCFoundation, \"strings\", {\n        get: function get() {\n            // Classes extending MDCFoundation should implement this method to return an object which exports all\n            // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCFoundation, \"numbers\", {\n        get: function get() {\n            // Classes extending MDCFoundation should implement this method to return an object which exports all\n            // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient\n            // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter\n            // validation.\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCFoundation.prototype.init = function () {\n        // Subclasses should override this method to perform initialization routines (registering events, etc.)\n    };\n    MDCFoundation.prototype.destroy = function () {\n        // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\n    };\n    return MDCFoundation;\n}();\nexports.MDCFoundation = MDCFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCFoundation;\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __read = this && this.__read || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o),\n        r,\n        ar = [],\n        e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n            ar.push(r.value);\n        }\n    } catch (error) {\n        e = { error: error };\n    } finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        } finally {\n            if (e) throw e.error;\n        }\n    }\n    return ar;\n};\nvar __spread = this && this.__spread || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) {\n        ar = ar.concat(__read(arguments[i]));\n    }return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar MDCComponent = /** @class */function () {\n    function MDCComponent(root, foundation) {\n        var args = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            args[_i - 2] = arguments[_i];\n        }\n        this.root_ = root;\n        this.initialize.apply(this, __spread(args));\n        // Note that we initialize foundation here and not within the constructor's default param so that\n        // this.root_ is defined and can be used within the foundation class.\n        this.foundation_ = foundation === undefined ? this.getDefaultFoundation() : foundation;\n        this.foundation_.init();\n        this.initialSyncWithDOM();\n    }\n    MDCComponent.attachTo = function (root) {\n        // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and\n        // returns an instantiated component with its root set to that element. Also note that in the cases of\n        // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized\n        // from getDefaultFoundation().\n        return new MDCComponent(root, new foundation_1.MDCFoundation({}));\n    };\n    /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */\n    MDCComponent.prototype.initialize = function () {\n        var _args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            _args[_i] = arguments[_i];\n        }\n        // Subclasses can override this to do any additional setup work that would be considered part of a\n        // \"constructor\". Essentially, it is a hook into the parent constructor before the foundation is\n        // initialized. Any additional arguments besides root and foundation will be passed in here.\n    };\n    MDCComponent.prototype.getDefaultFoundation = function () {\n        // Subclasses must override this method to return a properly configured foundation class for the\n        // component.\n        throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' + 'foundation class');\n    };\n    MDCComponent.prototype.initialSyncWithDOM = function () {\n        // Subclasses should override this method if they need to perform work to synchronize with a host DOM\n        // object. An example of this would be a form control wrapper that needs to synchronize its internal state\n        // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM\n        // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor.\n    };\n    MDCComponent.prototype.destroy = function () {\n        // Subclasses may implement this method to release any resources / deregister any listeners they have\n        // attached. An example of this might be deregistering a resize event from the window object.\n        this.foundation_.destroy();\n    };\n    MDCComponent.prototype.listen = function (evtType, handler) {\n        this.root_.addEventListener(evtType, handler);\n    };\n    MDCComponent.prototype.unlisten = function (evtType, handler) {\n        this.root_.removeEventListener(evtType, handler);\n    };\n    /**\n     * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data.\n     */\n    MDCComponent.prototype.emit = function (evtType, evtData, shouldBubble) {\n        if (shouldBubble === void 0) {\n            shouldBubble = false;\n        }\n        var evt;\n        if (typeof CustomEvent === 'function') {\n            evt = new CustomEvent(evtType, {\n                bubbles: shouldBubble,\n                detail: evtData\n            });\n        } else {\n            evt = document.createEvent('CustomEvent');\n            evt.initCustomEvent(evtType, shouldBubble, false, evtData);\n        }\n        this.root_.dispatchEvent(evt);\n    };\n    return MDCComponent;\n}();\nexports.MDCComponent = MDCComponent;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCComponent;\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar cssPropertyNameMap = {\n    animation: {\n        prefixed: '-webkit-animation',\n        standard: 'animation'\n    },\n    transform: {\n        prefixed: '-webkit-transform',\n        standard: 'transform'\n    },\n    transition: {\n        prefixed: '-webkit-transition',\n        standard: 'transition'\n    }\n};\nvar jsEventTypeMap = {\n    animationend: {\n        cssProperty: 'animation',\n        prefixed: 'webkitAnimationEnd',\n        standard: 'animationend'\n    },\n    animationiteration: {\n        cssProperty: 'animation',\n        prefixed: 'webkitAnimationIteration',\n        standard: 'animationiteration'\n    },\n    animationstart: {\n        cssProperty: 'animation',\n        prefixed: 'webkitAnimationStart',\n        standard: 'animationstart'\n    },\n    transitionend: {\n        cssProperty: 'transition',\n        prefixed: 'webkitTransitionEnd',\n        standard: 'transitionend'\n    }\n};\nfunction isWindow(windowObj) {\n    return Boolean(windowObj.document) && typeof windowObj.document.createElement === 'function';\n}\nfunction getCorrectPropertyName(windowObj, cssProperty) {\n    if (isWindow(windowObj) && cssProperty in cssPropertyNameMap) {\n        var el = windowObj.document.createElement('div');\n        var _a = cssPropertyNameMap[cssProperty],\n            standard = _a.standard,\n            prefixed = _a.prefixed;\n        var isStandard = standard in el.style;\n        return isStandard ? standard : prefixed;\n    }\n    return cssProperty;\n}\nexports.getCorrectPropertyName = getCorrectPropertyName;\nfunction getCorrectEventName(windowObj, eventType) {\n    if (isWindow(windowObj) && eventType in jsEventTypeMap) {\n        var el = windowObj.document.createElement('div');\n        var _a = jsEventTypeMap[eventType],\n            standard = _a.standard,\n            prefixed = _a.prefixed,\n            cssProperty = _a.cssProperty;\n        var isStandard = cssProperty in el.style;\n        return isStandard ? standard : prefixed;\n    }\n    return eventType;\n}\nexports.getCorrectEventName = getCorrectEventName;\n\n/***/ }),\n\n/***/ 163:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(164));\n__export(__webpack_require__(165));\n__export(__webpack_require__(166));\n\n/***/ }),\n\n/***/ 164:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(93));\n__export(__webpack_require__(51));\nvar constants_1 = __webpack_require__(50);\nexports.tabCssClasses = constants_1.cssClasses;\nexports.tabStrings = constants_1.strings;\n\n/***/ }),\n\n/***/ 165:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(94));\n__export(__webpack_require__(95));\nvar constants_1 = __webpack_require__(96);\nexports.tabBarCssClasses = constants_1.cssClasses;\nexports.tabBarStrings = constants_1.strings;\n\n/***/ }),\n\n/***/ 166:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(167));\n__export(__webpack_require__(97));\nvar constants_1 = __webpack_require__(98);\nexports.tabBarScrollerCssClasses = constants_1.cssClasses;\nexports.tabBarScrollerStrings = constants_1.strings;\n\n/***/ }),\n\n/***/ 167:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = __webpack_require__(11);\nvar component_1 = __webpack_require__(1);\nvar component_2 = __webpack_require__(94);\nvar foundation_1 = __webpack_require__(97);\nvar MDCTabBarScroller = /** @class */function (_super) {\n    __extends(MDCTabBarScroller, _super);\n    function MDCTabBarScroller() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MDCTabBarScroller.attachTo = function (root) {\n        return new MDCTabBarScroller(root);\n    };\n    Object.defineProperty(MDCTabBarScroller.prototype, \"tabBar\", {\n        get: function get() {\n            return this.tabBar_;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBarScroller.prototype.initialize = function (tabBarFactory) {\n        if (tabBarFactory === void 0) {\n            tabBarFactory = function tabBarFactory(el) {\n                return new component_2.MDCTabBar(el);\n            };\n        }\n        this.scrollFrame_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.FRAME_SELECTOR);\n        this.tabBarEl_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.TABS_SELECTOR);\n        this.forwardIndicator_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.INDICATOR_FORWARD_SELECTOR);\n        this.backIndicator_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.INDICATOR_BACK_SELECTOR);\n        this.tabBar_ = tabBarFactory(this.tabBarEl_);\n    };\n    MDCTabBarScroller.prototype.getDefaultFoundation = function () {\n        var _this = this;\n        // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n        // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n        // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n        var adapter = {\n            addClass: function addClass(className) {\n                return _this.root_.classList.add(className);\n            },\n            removeClass: function removeClass(className) {\n                return _this.root_.classList.remove(className);\n            },\n            eventTargetHasClass: function eventTargetHasClass(target, className) {\n                return target.classList.contains(className);\n            },\n            addClassToForwardIndicator: function addClassToForwardIndicator(className) {\n                return _this.forwardIndicator_.classList.add(className);\n            },\n            removeClassFromForwardIndicator: function removeClassFromForwardIndicator(className) {\n                return _this.forwardIndicator_.classList.remove(className);\n            },\n            addClassToBackIndicator: function addClassToBackIndicator(className) {\n                return _this.backIndicator_.classList.add(className);\n            },\n            removeClassFromBackIndicator: function removeClassFromBackIndicator(className) {\n                return _this.backIndicator_.classList.remove(className);\n            },\n            isRTL: function isRTL() {\n                return getComputedStyle(_this.root_).getPropertyValue('direction') === 'rtl';\n            },\n            registerBackIndicatorClickHandler: function registerBackIndicatorClickHandler(handler) {\n                return _this.backIndicator_.addEventListener('click', handler);\n            },\n            deregisterBackIndicatorClickHandler: function deregisterBackIndicatorClickHandler(handler) {\n                return _this.backIndicator_.removeEventListener('click', handler);\n            },\n            registerForwardIndicatorClickHandler: function registerForwardIndicatorClickHandler(handler) {\n                return _this.forwardIndicator_.addEventListener('click', handler);\n            },\n            deregisterForwardIndicatorClickHandler: function deregisterForwardIndicatorClickHandler(handler) {\n                return _this.forwardIndicator_.removeEventListener('click', handler);\n            },\n            registerCapturedInteractionHandler: function registerCapturedInteractionHandler(evt, handler) {\n                return _this.root_.addEventListener(evt, handler, true);\n            },\n            deregisterCapturedInteractionHandler: function deregisterCapturedInteractionHandler(evt, handler) {\n                return _this.root_.removeEventListener(evt, handler, true);\n            },\n            registerWindowResizeHandler: function registerWindowResizeHandler(handler) {\n                return window.addEventListener('resize', handler);\n            },\n            deregisterWindowResizeHandler: function deregisterWindowResizeHandler(handler) {\n                return window.removeEventListener('resize', handler);\n            },\n            getNumberOfTabs: function getNumberOfTabs() {\n                return _this.tabBar.tabs.length;\n            },\n            getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex(index) {\n                return _this.tabBar.tabs[index].computedWidth;\n            },\n            getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex(index) {\n                return _this.tabBar.tabs[index].computedLeft;\n            },\n            getOffsetWidthForScrollFrame: function getOffsetWidthForScrollFrame() {\n                return _this.scrollFrame_.offsetWidth;\n            },\n            getScrollLeftForScrollFrame: function getScrollLeftForScrollFrame() {\n                return _this.scrollFrame_.scrollLeft;\n            },\n            setScrollLeftForScrollFrame: function setScrollLeftForScrollFrame(scrollLeftAmount) {\n                return _this.scrollFrame_.scrollLeft = scrollLeftAmount;\n            },\n            getOffsetWidthForTabBar: function getOffsetWidthForTabBar() {\n                return _this.tabBarEl_.offsetWidth;\n            },\n            setTransformStyleForTabBar: function setTransformStyleForTabBar(value) {\n                _this.tabBarEl_.style.setProperty(util_1.getCorrectPropertyName(window, 'transform'), value);\n            },\n            getOffsetLeftForEventTarget: function getOffsetLeftForEventTarget(target) {\n                return target.offsetLeft;\n            },\n            getOffsetWidthForEventTarget: function getOffsetWidthForEventTarget(target) {\n                return target.offsetWidth;\n            }\n        };\n        // tslint:enable:object-literal-sort-keys\n        return new foundation_1.MDCTabBarScrollerFoundation(adapter);\n    };\n    MDCTabBarScroller.prototype.layout = function () {\n        this.foundation_.layout();\n    };\n    return MDCTabBarScroller;\n}(component_1.MDCComponent);\nexports.MDCTabBarScroller = MDCTabBarScroller;\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\n * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\n */\nfunction closest(element, selector) {\n    if (element.closest) {\n        return element.closest(selector);\n    }\n    var el = element;\n    while (el) {\n        if (matches(el, selector)) {\n            return el;\n        }\n        el = el.parentElement;\n    }\n    return null;\n}\nexports.closest = closest;\nfunction matches(element, selector) {\n    var nativeMatches = element.matches || element.webkitMatchesSelector || element.msMatchesSelector;\n    return nativeMatches.call(element, selector);\n}\nexports.matches = matches;\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Stores result from supportsCssVariables to avoid redundant processing to\n * detect CSS custom variable support.\n */\nvar supportsCssVariables_;\n/**\n * Stores result from applyPassive to avoid redundant processing to detect\n * passive event listener support.\n */\nvar supportsPassive_;\nfunction detectEdgePseudoVarBug(windowObj) {\n    // Detect versions of Edge with buggy var() support\n    // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11495448/\n    var document = windowObj.document;\n    var node = document.createElement('div');\n    node.className = 'mdc-ripple-surface--test-edge-var-bug';\n    document.body.appendChild(node);\n    // The bug exists if ::before style ends up propagating to the parent element.\n    // Additionally, getComputedStyle returns null in iframes with display: \"none\" in Firefox,\n    // but Firefox is known to support CSS custom properties correctly.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    var computedStyle = windowObj.getComputedStyle(node);\n    var hasPseudoVarBug = computedStyle !== null && computedStyle.borderTopStyle === 'solid';\n    if (node.parentNode) {\n        node.parentNode.removeChild(node);\n    }\n    return hasPseudoVarBug;\n}\nfunction supportsCssVariables(windowObj, forceRefresh) {\n    if (forceRefresh === void 0) {\n        forceRefresh = false;\n    }\n    var CSS = windowObj.CSS;\n    var supportsCssVars = supportsCssVariables_;\n    if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\n        return supportsCssVariables_;\n    }\n    var supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\n    if (!supportsFunctionPresent) {\n        return false;\n    }\n    var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\n    // See: https://bugs.webkit.org/show_bug.cgi?id=154669\n    // See: README section on Safari\n    var weAreFeatureDetectingSafari10plus = CSS.supports('(--css-vars: yes)') && CSS.supports('color', '#00000000');\n    if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) {\n        supportsCssVars = !detectEdgePseudoVarBug(windowObj);\n    } else {\n        supportsCssVars = false;\n    }\n    if (!forceRefresh) {\n        supportsCssVariables_ = supportsCssVars;\n    }\n    return supportsCssVars;\n}\nexports.supportsCssVariables = supportsCssVariables;\n/**\n * Determine whether the current browser supports passive event listeners, and\n * if so, use them.\n */\nfunction applyPassive(globalObj, forceRefresh) {\n    if (globalObj === void 0) {\n        globalObj = window;\n    }\n    if (forceRefresh === void 0) {\n        forceRefresh = false;\n    }\n    if (supportsPassive_ === undefined || forceRefresh) {\n        var isSupported_1 = false;\n        try {\n            globalObj.document.addEventListener('test', function () {\n                return undefined;\n            }, {\n                get passive() {\n                    isSupported_1 = true;\n                    return isSupported_1;\n                }\n            });\n        } catch (e) {} // tslint:disable-line:no-empty cannot throw error due to tests. tslint also disables console.log.\n        supportsPassive_ = isSupported_1;\n    }\n    return supportsPassive_ ? { passive: true } : false;\n}\nexports.applyPassive = applyPassive;\nfunction getNormalizedEventCoords(evt, pageOffset, clientRect) {\n    if (!evt) {\n        return { x: 0, y: 0 };\n    }\n    var x = pageOffset.x,\n        y = pageOffset.y;\n    var documentX = x + clientRect.left;\n    var documentY = y + clientRect.top;\n    var normalizedX;\n    var normalizedY;\n    // Determine touch point relative to the ripple container.\n    if (evt.type === 'touchstart') {\n        var touchEvent = evt;\n        normalizedX = touchEvent.changedTouches[0].pageX - documentX;\n        normalizedY = touchEvent.changedTouches[0].pageY - documentY;\n    } else {\n        var mouseEvent = evt;\n        normalizedX = mouseEvent.pageX - documentX;\n        normalizedY = mouseEvent.pageY - documentY;\n    }\n    return { x: normalizedX, y: normalizedY };\n}\nexports.getNormalizedEventCoords = getNormalizedEventCoords;\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(5);\nvar util_1 = __webpack_require__(3);\n// Activation events registered on the root element of each instance for activation\nvar ACTIVATION_EVENT_TYPES = ['touchstart', 'pointerdown', 'mousedown', 'keydown'];\n// Deactivation events registered on documentElement when a pointer-related down event occurs\nvar POINTER_DEACTIVATION_EVENT_TYPES = ['touchend', 'pointerup', 'mouseup', 'contextmenu'];\n// simultaneous nested activations\nvar activatedTargets = [];\nvar MDCRippleFoundation = /** @class */function (_super) {\n    __extends(MDCRippleFoundation, _super);\n    function MDCRippleFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCRippleFoundation.defaultAdapter, adapter)) || this;\n        _this.activationAnimationHasEnded_ = false;\n        _this.activationTimer_ = 0;\n        _this.fgDeactivationRemovalTimer_ = 0;\n        _this.fgScale_ = '0';\n        _this.frame_ = { width: 0, height: 0 };\n        _this.initialSize_ = 0;\n        _this.layoutFrame_ = 0;\n        _this.maxRadius_ = 0;\n        _this.unboundedCoords_ = { left: 0, top: 0 };\n        _this.activationState_ = _this.defaultActivationState_();\n        _this.activationTimerCallback_ = function () {\n            _this.activationAnimationHasEnded_ = true;\n            _this.runDeactivationUXLogicIfReady_();\n        };\n        _this.activateHandler_ = function (e) {\n            return _this.activate_(e);\n        };\n        _this.deactivateHandler_ = function () {\n            return _this.deactivate_();\n        };\n        _this.focusHandler_ = function () {\n            return _this.handleFocus();\n        };\n        _this.blurHandler_ = function () {\n            return _this.handleBlur();\n        };\n        _this.resizeHandler_ = function () {\n            return _this.layout();\n        };\n        return _this;\n    }\n    Object.defineProperty(MDCRippleFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCRippleFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCRippleFoundation, \"numbers\", {\n        get: function get() {\n            return constants_1.numbers;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCRippleFoundation, \"defaultAdapter\", {\n        get: function get() {\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                browserSupportsCssVars: function browserSupportsCssVars() {\n                    return true;\n                },\n                computeBoundingRect: function computeBoundingRect() {\n                    return { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n                },\n                containsEventTarget: function containsEventTarget() {\n                    return true;\n                },\n                deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler() {\n                    return undefined;\n                },\n                deregisterInteractionHandler: function deregisterInteractionHandler() {\n                    return undefined;\n                },\n                deregisterResizeHandler: function deregisterResizeHandler() {\n                    return undefined;\n                },\n                getWindowPageOffset: function getWindowPageOffset() {\n                    return { x: 0, y: 0 };\n                },\n                isSurfaceActive: function isSurfaceActive() {\n                    return true;\n                },\n                isSurfaceDisabled: function isSurfaceDisabled() {\n                    return true;\n                },\n                isUnbounded: function isUnbounded() {\n                    return true;\n                },\n                registerDocumentInteractionHandler: function registerDocumentInteractionHandler() {\n                    return undefined;\n                },\n                registerInteractionHandler: function registerInteractionHandler() {\n                    return undefined;\n                },\n                registerResizeHandler: function registerResizeHandler() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                updateCssVariable: function updateCssVariable() {\n                    return undefined;\n                }\n            };\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCRippleFoundation.prototype.init = function () {\n        var _this = this;\n        var supportsPressRipple = this.supportsPressRipple_();\n        this.registerRootHandlers_(supportsPressRipple);\n        if (supportsPressRipple) {\n            var _a = MDCRippleFoundation.cssClasses,\n                ROOT_1 = _a.ROOT,\n                UNBOUNDED_1 = _a.UNBOUNDED;\n            requestAnimationFrame(function () {\n                _this.adapter_.addClass(ROOT_1);\n                if (_this.adapter_.isUnbounded()) {\n                    _this.adapter_.addClass(UNBOUNDED_1);\n                    // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple\n                    _this.layoutInternal_();\n                }\n            });\n        }\n    };\n    MDCRippleFoundation.prototype.destroy = function () {\n        var _this = this;\n        if (this.supportsPressRipple_()) {\n            if (this.activationTimer_) {\n                clearTimeout(this.activationTimer_);\n                this.activationTimer_ = 0;\n                this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION);\n            }\n            if (this.fgDeactivationRemovalTimer_) {\n                clearTimeout(this.fgDeactivationRemovalTimer_);\n                this.fgDeactivationRemovalTimer_ = 0;\n                this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION);\n            }\n            var _a = MDCRippleFoundation.cssClasses,\n                ROOT_2 = _a.ROOT,\n                UNBOUNDED_2 = _a.UNBOUNDED;\n            requestAnimationFrame(function () {\n                _this.adapter_.removeClass(ROOT_2);\n                _this.adapter_.removeClass(UNBOUNDED_2);\n                _this.removeCssVars_();\n            });\n        }\n        this.deregisterRootHandlers_();\n        this.deregisterDeactivationHandlers_();\n    };\n    /**\n     * @param evt Optional event containing position information.\n     */\n    MDCRippleFoundation.prototype.activate = function (evt) {\n        this.activate_(evt);\n    };\n    MDCRippleFoundation.prototype.deactivate = function () {\n        this.deactivate_();\n    };\n    MDCRippleFoundation.prototype.layout = function () {\n        var _this = this;\n        if (this.layoutFrame_) {\n            cancelAnimationFrame(this.layoutFrame_);\n        }\n        this.layoutFrame_ = requestAnimationFrame(function () {\n            _this.layoutInternal_();\n            _this.layoutFrame_ = 0;\n        });\n    };\n    MDCRippleFoundation.prototype.setUnbounded = function (unbounded) {\n        var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED;\n        if (unbounded) {\n            this.adapter_.addClass(UNBOUNDED);\n        } else {\n            this.adapter_.removeClass(UNBOUNDED);\n        }\n    };\n    MDCRippleFoundation.prototype.handleFocus = function () {\n        var _this = this;\n        requestAnimationFrame(function () {\n            return _this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\n        });\n    };\n    MDCRippleFoundation.prototype.handleBlur = function () {\n        var _this = this;\n        requestAnimationFrame(function () {\n            return _this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\n        });\n    };\n    /**\n     * We compute this property so that we are not querying information about the client\n     * until the point in time where the foundation requests it. This prevents scenarios where\n     * client-side feature-detection may happen too early, such as when components are rendered on the server\n     * and then initialized at mount time on the client.\n     */\n    MDCRippleFoundation.prototype.supportsPressRipple_ = function () {\n        return this.adapter_.browserSupportsCssVars();\n    };\n    MDCRippleFoundation.prototype.defaultActivationState_ = function () {\n        return {\n            activationEvent: undefined,\n            hasDeactivationUXRun: false,\n            isActivated: false,\n            isProgrammatic: false,\n            wasActivatedByPointer: false,\n            wasElementMadeActive: false\n        };\n    };\n    /**\n     * supportsPressRipple Passed from init to save a redundant function call\n     */\n    MDCRippleFoundation.prototype.registerRootHandlers_ = function (supportsPressRipple) {\n        var _this = this;\n        if (supportsPressRipple) {\n            ACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n                _this.adapter_.registerInteractionHandler(evtType, _this.activateHandler_);\n            });\n            if (this.adapter_.isUnbounded()) {\n                this.adapter_.registerResizeHandler(this.resizeHandler_);\n            }\n        }\n        this.adapter_.registerInteractionHandler('focus', this.focusHandler_);\n        this.adapter_.registerInteractionHandler('blur', this.blurHandler_);\n    };\n    MDCRippleFoundation.prototype.registerDeactivationHandlers_ = function (evt) {\n        var _this = this;\n        if (evt.type === 'keydown') {\n            this.adapter_.registerInteractionHandler('keyup', this.deactivateHandler_);\n        } else {\n            POINTER_DEACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n                _this.adapter_.registerDocumentInteractionHandler(evtType, _this.deactivateHandler_);\n            });\n        }\n    };\n    MDCRippleFoundation.prototype.deregisterRootHandlers_ = function () {\n        var _this = this;\n        ACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n            _this.adapter_.deregisterInteractionHandler(evtType, _this.activateHandler_);\n        });\n        this.adapter_.deregisterInteractionHandler('focus', this.focusHandler_);\n        this.adapter_.deregisterInteractionHandler('blur', this.blurHandler_);\n        if (this.adapter_.isUnbounded()) {\n            this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n        }\n    };\n    MDCRippleFoundation.prototype.deregisterDeactivationHandlers_ = function () {\n        var _this = this;\n        this.adapter_.deregisterInteractionHandler('keyup', this.deactivateHandler_);\n        POINTER_DEACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n            _this.adapter_.deregisterDocumentInteractionHandler(evtType, _this.deactivateHandler_);\n        });\n    };\n    MDCRippleFoundation.prototype.removeCssVars_ = function () {\n        var _this = this;\n        var rippleStrings = MDCRippleFoundation.strings;\n        var keys = Object.keys(rippleStrings);\n        keys.forEach(function (key) {\n            if (key.indexOf('VAR_') === 0) {\n                _this.adapter_.updateCssVariable(rippleStrings[key], null);\n            }\n        });\n    };\n    MDCRippleFoundation.prototype.activate_ = function (evt) {\n        var _this = this;\n        if (this.adapter_.isSurfaceDisabled()) {\n            return;\n        }\n        var activationState = this.activationState_;\n        if (activationState.isActivated) {\n            return;\n        }\n        // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction\n        var previousActivationEvent = this.previousActivationEvent_;\n        var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type;\n        if (isSameInteraction) {\n            return;\n        }\n        activationState.isActivated = true;\n        activationState.isProgrammatic = evt === undefined;\n        activationState.activationEvent = evt;\n        activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown');\n        var hasActivatedChild = evt !== undefined && activatedTargets.length > 0 && activatedTargets.some(function (target) {\n            return _this.adapter_.containsEventTarget(target);\n        });\n        if (hasActivatedChild) {\n            // Immediately reset activation state, while preserving logic that prevents touch follow-on events\n            this.resetActivationState_();\n            return;\n        }\n        if (evt !== undefined) {\n            activatedTargets.push(evt.target);\n            this.registerDeactivationHandlers_(evt);\n        }\n        activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\n        if (activationState.wasElementMadeActive) {\n            this.animateActivation_();\n        }\n        requestAnimationFrame(function () {\n            // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples\n            activatedTargets = [];\n            if (!activationState.wasElementMadeActive && evt !== undefined && (evt.key === ' ' || evt.keyCode === 32)) {\n                // If space was pressed, try again within an rAF call to detect :active, because different UAs report\n                // active states inconsistently when they're called within event handling code:\n                // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971\n                // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741\n                // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS\n                // variable is set within a rAF callback for a submit button interaction (#2241).\n                activationState.wasElementMadeActive = _this.checkElementMadeActive_(evt);\n                if (activationState.wasElementMadeActive) {\n                    _this.animateActivation_();\n                }\n            }\n            if (!activationState.wasElementMadeActive) {\n                // Reset activation state immediately if element was not made active.\n                _this.activationState_ = _this.defaultActivationState_();\n            }\n        });\n    };\n    MDCRippleFoundation.prototype.checkElementMadeActive_ = function (evt) {\n        return evt !== undefined && evt.type === 'keydown' ? this.adapter_.isSurfaceActive() : true;\n    };\n    MDCRippleFoundation.prototype.animateActivation_ = function () {\n        var _this = this;\n        var _a = MDCRippleFoundation.strings,\n            VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START,\n            VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END;\n        var _b = MDCRippleFoundation.cssClasses,\n            FG_DEACTIVATION = _b.FG_DEACTIVATION,\n            FG_ACTIVATION = _b.FG_ACTIVATION;\n        var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS;\n        this.layoutInternal_();\n        var translateStart = '';\n        var translateEnd = '';\n        if (!this.adapter_.isUnbounded()) {\n            var _c = this.getFgTranslationCoordinates_(),\n                startPoint = _c.startPoint,\n                endPoint = _c.endPoint;\n            translateStart = startPoint.x + \"px, \" + startPoint.y + \"px\";\n            translateEnd = endPoint.x + \"px, \" + endPoint.y + \"px\";\n        }\n        this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart);\n        this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd);\n        // Cancel any ongoing activation/deactivation animations\n        clearTimeout(this.activationTimer_);\n        clearTimeout(this.fgDeactivationRemovalTimer_);\n        this.rmBoundedActivationClasses_();\n        this.adapter_.removeClass(FG_DEACTIVATION);\n        // Force layout in order to re-trigger the animation.\n        this.adapter_.computeBoundingRect();\n        this.adapter_.addClass(FG_ACTIVATION);\n        this.activationTimer_ = setTimeout(function () {\n            return _this.activationTimerCallback_();\n        }, DEACTIVATION_TIMEOUT_MS);\n    };\n    MDCRippleFoundation.prototype.getFgTranslationCoordinates_ = function () {\n        var _a = this.activationState_,\n            activationEvent = _a.activationEvent,\n            wasActivatedByPointer = _a.wasActivatedByPointer;\n        var startPoint;\n        if (wasActivatedByPointer) {\n            startPoint = util_1.getNormalizedEventCoords(activationEvent, this.adapter_.getWindowPageOffset(), this.adapter_.computeBoundingRect());\n        } else {\n            startPoint = {\n                x: this.frame_.width / 2,\n                y: this.frame_.height / 2\n            };\n        }\n        // Center the element around the start point.\n        startPoint = {\n            x: startPoint.x - this.initialSize_ / 2,\n            y: startPoint.y - this.initialSize_ / 2\n        };\n        var endPoint = {\n            x: this.frame_.width / 2 - this.initialSize_ / 2,\n            y: this.frame_.height / 2 - this.initialSize_ / 2\n        };\n        return { startPoint: startPoint, endPoint: endPoint };\n    };\n    MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady_ = function () {\n        var _this = this;\n        // This method is called both when a pointing device is released, and when the activation animation ends.\n        // The deactivation animation should only run after both of those occur.\n        var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION;\n        var _a = this.activationState_,\n            hasDeactivationUXRun = _a.hasDeactivationUXRun,\n            isActivated = _a.isActivated;\n        var activationHasEnded = hasDeactivationUXRun || !isActivated;\n        if (activationHasEnded && this.activationAnimationHasEnded_) {\n            this.rmBoundedActivationClasses_();\n            this.adapter_.addClass(FG_DEACTIVATION);\n            this.fgDeactivationRemovalTimer_ = setTimeout(function () {\n                _this.adapter_.removeClass(FG_DEACTIVATION);\n            }, constants_1.numbers.FG_DEACTIVATION_MS);\n        }\n    };\n    MDCRippleFoundation.prototype.rmBoundedActivationClasses_ = function () {\n        var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION;\n        this.adapter_.removeClass(FG_ACTIVATION);\n        this.activationAnimationHasEnded_ = false;\n        this.adapter_.computeBoundingRect();\n    };\n    MDCRippleFoundation.prototype.resetActivationState_ = function () {\n        var _this = this;\n        this.previousActivationEvent_ = this.activationState_.activationEvent;\n        this.activationState_ = this.defaultActivationState_();\n        // Touch devices may fire additional events for the same interaction within a short time.\n        // Store the previous event until it's safe to assume that subsequent events are for new interactions.\n        setTimeout(function () {\n            return _this.previousActivationEvent_ = undefined;\n        }, MDCRippleFoundation.numbers.TAP_DELAY_MS);\n    };\n    MDCRippleFoundation.prototype.deactivate_ = function () {\n        var _this = this;\n        var activationState = this.activationState_;\n        // This can happen in scenarios such as when you have a keyup event that blurs the element.\n        if (!activationState.isActivated) {\n            return;\n        }\n        var state = __assign({}, activationState);\n        if (activationState.isProgrammatic) {\n            requestAnimationFrame(function () {\n                return _this.animateDeactivation_(state);\n            });\n            this.resetActivationState_();\n        } else {\n            this.deregisterDeactivationHandlers_();\n            requestAnimationFrame(function () {\n                _this.activationState_.hasDeactivationUXRun = true;\n                _this.animateDeactivation_(state);\n                _this.resetActivationState_();\n            });\n        }\n    };\n    MDCRippleFoundation.prototype.animateDeactivation_ = function (_a) {\n        var wasActivatedByPointer = _a.wasActivatedByPointer,\n            wasElementMadeActive = _a.wasElementMadeActive;\n        if (wasActivatedByPointer || wasElementMadeActive) {\n            this.runDeactivationUXLogicIfReady_();\n        }\n    };\n    MDCRippleFoundation.prototype.layoutInternal_ = function () {\n        var _this = this;\n        this.frame_ = this.adapter_.computeBoundingRect();\n        var maxDim = Math.max(this.frame_.height, this.frame_.width);\n        // Surface diameter is treated differently for unbounded vs. bounded ripples.\n        // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately\n        // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically\n        // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter\n        // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via\n        // `overflow: hidden`.\n        var getBoundedRadius = function getBoundedRadius() {\n            var hypotenuse = Math.sqrt(Math.pow(_this.frame_.width, 2) + Math.pow(_this.frame_.height, 2));\n            return hypotenuse + MDCRippleFoundation.numbers.PADDING;\n        };\n        this.maxRadius_ = this.adapter_.isUnbounded() ? maxDim : getBoundedRadius();\n        // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform\n        this.initialSize_ = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE);\n        this.fgScale_ = \"\" + this.maxRadius_ / this.initialSize_;\n        this.updateLayoutCssVars_();\n    };\n    MDCRippleFoundation.prototype.updateLayoutCssVars_ = function () {\n        var _a = MDCRippleFoundation.strings,\n            VAR_FG_SIZE = _a.VAR_FG_SIZE,\n            VAR_LEFT = _a.VAR_LEFT,\n            VAR_TOP = _a.VAR_TOP,\n            VAR_FG_SCALE = _a.VAR_FG_SCALE;\n        this.adapter_.updateCssVariable(VAR_FG_SIZE, this.initialSize_ + \"px\");\n        this.adapter_.updateCssVariable(VAR_FG_SCALE, this.fgScale_);\n        if (this.adapter_.isUnbounded()) {\n            this.unboundedCoords_ = {\n                left: Math.round(this.frame_.width / 2 - this.initialSize_ / 2),\n                top: Math.round(this.frame_.height / 2 - this.initialSize_ / 2)\n            };\n            this.adapter_.updateCssVariable(VAR_LEFT, this.unboundedCoords_.left + \"px\");\n            this.adapter_.updateCssVariable(VAR_TOP, this.unboundedCoords_.top + \"px\");\n        }\n    };\n    return MDCRippleFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCRippleFoundation = MDCRippleFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCRippleFoundation;\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\n    // given that it's an 'upgrade' to an existing component. That being said it is the root\n    // CSS class that all other CSS classes derive from.\n    BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\n    FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\n    FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\n    ROOT: 'mdc-ripple-upgraded',\n    UNBOUNDED: 'mdc-ripple-upgraded--unbounded'\n};\nexports.strings = {\n    VAR_FG_SCALE: '--mdc-ripple-fg-scale',\n    VAR_FG_SIZE: '--mdc-ripple-fg-size',\n    VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\n    VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\n    VAR_LEFT: '--mdc-ripple-left',\n    VAR_TOP: '--mdc-ripple-top'\n};\nexports.numbers = {\n    DEACTIVATION_TIMEOUT_MS: 225,\n    FG_DEACTIVATION_MS: 150,\n    INITIAL_ORIGIN_SCALE: 0.6,\n    PADDING: 10,\n    TAP_DELAY_MS: 300\n};\n\n/***/ }),\n\n/***/ 50:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    ACTIVE: 'mdc-tab--active'\n};\nexports.strings = {\n    SELECTED_EVENT: 'MDCTab:selected'\n};\n\n/***/ }),\n\n/***/ 51:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(50);\nvar MDCTabFoundation = /** @class */function (_super) {\n    __extends(MDCTabFoundation, _super);\n    function MDCTabFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCTabFoundation.defaultAdapter, adapter)) || this;\n        _this.computedWidth_ = 0;\n        _this.computedLeft_ = 0;\n        _this.isActive_ = false;\n        _this.preventDefaultOnClick_ = false;\n        _this.clickHandler_ = function (evt) {\n            if (_this.preventDefaultOnClick_) {\n                evt.preventDefault();\n            }\n            _this.adapter_.notifySelected();\n        };\n        _this.keydownHandler_ = function (evt) {\n            if (evt.key === 'Enter' || evt.keyCode === 13) {\n                _this.adapter_.notifySelected();\n            }\n        };\n        return _this;\n    }\n    Object.defineProperty(MDCTabFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                registerInteractionHandler: function registerInteractionHandler() {\n                    return undefined;\n                },\n                deregisterInteractionHandler: function deregisterInteractionHandler() {\n                    return undefined;\n                },\n                getOffsetWidth: function getOffsetWidth() {\n                    return 0;\n                },\n                getOffsetLeft: function getOffsetLeft() {\n                    return 0;\n                },\n                notifySelected: function notifySelected() {\n                    return undefined;\n                }\n            };\n            // tslint:enable:object-literal-sort-keys\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabFoundation.prototype.init = function () {\n        this.adapter_.registerInteractionHandler('click', this.clickHandler_);\n        this.adapter_.registerInteractionHandler('keydown', this.keydownHandler_);\n    };\n    MDCTabFoundation.prototype.destroy = function () {\n        this.adapter_.deregisterInteractionHandler('click', this.clickHandler_);\n        this.adapter_.deregisterInteractionHandler('keydown', this.keydownHandler_);\n    };\n    MDCTabFoundation.prototype.getComputedWidth = function () {\n        return this.computedWidth_;\n    };\n    MDCTabFoundation.prototype.getComputedLeft = function () {\n        return this.computedLeft_;\n    };\n    MDCTabFoundation.prototype.isActive = function () {\n        return this.isActive_;\n    };\n    MDCTabFoundation.prototype.setActive = function (isActive) {\n        this.isActive_ = isActive;\n        if (this.isActive_) {\n            this.adapter_.addClass(constants_1.cssClasses.ACTIVE);\n        } else {\n            this.adapter_.removeClass(constants_1.cssClasses.ACTIVE);\n        }\n    };\n    MDCTabFoundation.prototype.preventsDefaultOnClick = function () {\n        return this.preventDefaultOnClick_;\n    };\n    MDCTabFoundation.prototype.setPreventDefaultOnClick = function (preventDefaultOnClick) {\n        this.preventDefaultOnClick_ = preventDefaultOnClick;\n    };\n    MDCTabFoundation.prototype.measureSelf = function () {\n        this.computedWidth_ = this.adapter_.getOffsetWidth();\n        this.computedLeft_ = this.adapter_.getOffsetLeft();\n    };\n    return MDCTabFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCTabFoundation = MDCTabFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCTabFoundation;\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __importStar = this && this.__importStar || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) {\n        if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    }result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = __webpack_require__(1);\nvar ponyfill_1 = __webpack_require__(2);\nvar foundation_1 = __webpack_require__(4);\nvar util = __importStar(__webpack_require__(3));\nvar MDCRipple = /** @class */function (_super) {\n    __extends(MDCRipple, _super);\n    function MDCRipple() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.disabled = false;\n        return _this;\n    }\n    MDCRipple.attachTo = function (root, opts) {\n        if (opts === void 0) {\n            opts = { isUnbounded: undefined };\n        }\n        var ripple = new MDCRipple(root);\n        // Only override unbounded behavior if option is explicitly specified\n        if (opts.isUnbounded !== undefined) {\n            ripple.unbounded = opts.isUnbounded;\n        }\n        return ripple;\n    };\n    MDCRipple.createAdapter = function (instance) {\n        return {\n            addClass: function addClass(className) {\n                return instance.root_.classList.add(className);\n            },\n            browserSupportsCssVars: function browserSupportsCssVars() {\n                return util.supportsCssVariables(window);\n            },\n            computeBoundingRect: function computeBoundingRect() {\n                return instance.root_.getBoundingClientRect();\n            },\n            containsEventTarget: function containsEventTarget(target) {\n                return instance.root_.contains(target);\n            },\n            deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler(evtType, handler) {\n                return document.documentElement.removeEventListener(evtType, handler, util.applyPassive());\n            },\n            deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\n                return instance.root_.removeEventListener(evtType, handler, util.applyPassive());\n            },\n            deregisterResizeHandler: function deregisterResizeHandler(handler) {\n                return window.removeEventListener('resize', handler);\n            },\n            getWindowPageOffset: function getWindowPageOffset() {\n                return { x: window.pageXOffset, y: window.pageYOffset };\n            },\n            isSurfaceActive: function isSurfaceActive() {\n                return ponyfill_1.matches(instance.root_, ':active');\n            },\n            isSurfaceDisabled: function isSurfaceDisabled() {\n                return Boolean(instance.disabled);\n            },\n            isUnbounded: function isUnbounded() {\n                return Boolean(instance.unbounded);\n            },\n            registerDocumentInteractionHandler: function registerDocumentInteractionHandler(evtType, handler) {\n                return document.documentElement.addEventListener(evtType, handler, util.applyPassive());\n            },\n            registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\n                return instance.root_.addEventListener(evtType, handler, util.applyPassive());\n            },\n            registerResizeHandler: function registerResizeHandler(handler) {\n                return window.addEventListener('resize', handler);\n            },\n            removeClass: function removeClass(className) {\n                return instance.root_.classList.remove(className);\n            },\n            updateCssVariable: function updateCssVariable(varName, value) {\n                return instance.root_.style.setProperty(varName, value);\n            }\n        };\n    };\n    Object.defineProperty(MDCRipple.prototype, \"unbounded\", {\n        get: function get() {\n            return Boolean(this.unbounded_);\n        },\n        set: function set(unbounded) {\n            this.unbounded_ = Boolean(unbounded);\n            this.setUnbounded_();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCRipple.prototype.activate = function () {\n        this.foundation_.activate();\n    };\n    MDCRipple.prototype.deactivate = function () {\n        this.foundation_.deactivate();\n    };\n    MDCRipple.prototype.layout = function () {\n        this.foundation_.layout();\n    };\n    MDCRipple.prototype.getDefaultFoundation = function () {\n        return new foundation_1.MDCRippleFoundation(MDCRipple.createAdapter(this));\n    };\n    MDCRipple.prototype.initialSyncWithDOM = function () {\n        var root = this.root_;\n        this.unbounded = 'mdcRippleIsUnbounded' in root.dataset;\n    };\n    /**\n     * Closure Compiler throws an access control error when directly accessing a\n     * protected or private property inside a getter/setter, like unbounded above.\n     * By accessing the protected property inside a method, we solve that problem.\n     * That's why this function exists.\n     */\n    MDCRipple.prototype.setUnbounded_ = function () {\n        this.foundation_.setUnbounded(Boolean(this.unbounded_));\n    };\n    return MDCRipple;\n}(component_1.MDCComponent);\nexports.MDCRipple = MDCRipple;\n\n/***/ }),\n\n/***/ 93:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = __webpack_require__(1);\nvar component_2 = __webpack_require__(6);\nvar constants_1 = __webpack_require__(50);\nvar foundation_1 = __webpack_require__(51);\nvar MDCTab = /** @class */function (_super) {\n    __extends(MDCTab, _super);\n    function MDCTab() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.ripple_ = component_2.MDCRipple.attachTo(_this.root_);\n        return _this;\n    }\n    MDCTab.attachTo = function (root) {\n        return new MDCTab(root);\n    };\n    Object.defineProperty(MDCTab.prototype, \"computedWidth\", {\n        get: function get() {\n            return this.foundation_.getComputedWidth();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTab.prototype, \"computedLeft\", {\n        get: function get() {\n            return this.foundation_.getComputedLeft();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTab.prototype, \"isActive\", {\n        get: function get() {\n            return this.foundation_.isActive();\n        },\n        set: function set(isActive) {\n            this.foundation_.setActive(isActive);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTab.prototype, \"preventDefaultOnClick\", {\n        get: function get() {\n            return this.foundation_.preventsDefaultOnClick();\n        },\n        set: function set(preventDefaultOnClick) {\n            this.foundation_.setPreventDefaultOnClick(preventDefaultOnClick);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTab.prototype.destroy = function () {\n        this.ripple_.destroy();\n        _super.prototype.destroy.call(this);\n    };\n    MDCTab.prototype.getDefaultFoundation = function () {\n        var _this = this;\n        // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n        // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n        // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n        var adapter = {\n            addClass: function addClass(className) {\n                return _this.root_.classList.add(className);\n            },\n            removeClass: function removeClass(className) {\n                return _this.root_.classList.remove(className);\n            },\n            registerInteractionHandler: function registerInteractionHandler(type, handler) {\n                return _this.listen(type, handler);\n            },\n            deregisterInteractionHandler: function deregisterInteractionHandler(type, handler) {\n                return _this.unlisten(type, handler);\n            },\n            getOffsetWidth: function getOffsetWidth() {\n                return _this.root_.offsetWidth;\n            },\n            getOffsetLeft: function getOffsetLeft() {\n                return _this.root_.offsetLeft;\n            },\n            notifySelected: function notifySelected() {\n                return _this.emit(foundation_1.MDCTabFoundation.strings.SELECTED_EVENT, { tab: _this }, true);\n            }\n        };\n        // tslint:enable:object-literal-sort-keys\n        return new foundation_1.MDCTabFoundation(adapter);\n    };\n    MDCTab.prototype.initialSyncWithDOM = function () {\n        this.isActive = this.root_.classList.contains(constants_1.cssClasses.ACTIVE);\n    };\n    MDCTab.prototype.measureSelf = function () {\n        this.foundation_.measureSelf();\n    };\n    return MDCTab;\n}(component_1.MDCComponent);\nexports.MDCTab = MDCTab;\n\n/***/ }),\n\n/***/ 94:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = __webpack_require__(1);\nvar component_2 = __webpack_require__(93);\nvar foundation_1 = __webpack_require__(51);\nvar foundation_2 = __webpack_require__(95);\nvar strings = foundation_2.MDCTabBarFoundation.strings;\nvar MDCTabBar = /** @class */function (_super) {\n    __extends(MDCTabBar, _super);\n    function MDCTabBar() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MDCTabBar.attachTo = function (root) {\n        return new MDCTabBar(root);\n    };\n    Object.defineProperty(MDCTabBar.prototype, \"tabs\", {\n        get: function get() {\n            return this.tabs_;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBar.prototype, \"activeTab\", {\n        get: function get() {\n            var activeIndex = this.foundation_.getActiveTabIndex();\n            return this.tabs[activeIndex];\n        },\n        set: function set(tab) {\n            this.setActiveTab_(tab, false);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBar.prototype, \"activeTabIndex\", {\n        get: function get() {\n            return this.foundation_.getActiveTabIndex();\n        },\n        set: function set(index) {\n            this.setActiveTabIndex_(index, false);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBar.prototype.initialize = function (tabFactory) {\n        var _this = this;\n        if (tabFactory === void 0) {\n            tabFactory = function tabFactory(el) {\n                return new component_2.MDCTab(el);\n            };\n        }\n        this.indicator_ = this.root_.querySelector(strings.INDICATOR_SELECTOR);\n        this.tabs_ = this.gatherTabs_(tabFactory);\n        this.tabSelectedHandler_ = function (_a) {\n            var detail = _a.detail;\n            var tab = detail.tab;\n            _this.setActiveTab_(tab, true);\n        };\n    };\n    MDCTabBar.prototype.getDefaultFoundation = function () {\n        var _this = this;\n        // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n        // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n        // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n        var adapter = {\n            addClass: function addClass(className) {\n                return _this.root_.classList.add(className);\n            },\n            removeClass: function removeClass(className) {\n                return _this.root_.classList.remove(className);\n            },\n            bindOnMDCTabSelectedEvent: function bindOnMDCTabSelectedEvent() {\n                return _this.listen(foundation_1.MDCTabFoundation.strings.SELECTED_EVENT, _this.tabSelectedHandler_);\n            },\n            unbindOnMDCTabSelectedEvent: function unbindOnMDCTabSelectedEvent() {\n                return _this.unlisten(foundation_1.MDCTabFoundation.strings.SELECTED_EVENT, _this.tabSelectedHandler_);\n            },\n            registerResizeHandler: function registerResizeHandler(handler) {\n                return window.addEventListener('resize', handler);\n            },\n            deregisterResizeHandler: function deregisterResizeHandler(handler) {\n                return window.removeEventListener('resize', handler);\n            },\n            getOffsetWidth: function getOffsetWidth() {\n                return _this.root_.offsetWidth;\n            },\n            setStyleForIndicator: function setStyleForIndicator(propertyName, value) {\n                return _this.indicator_.style.setProperty(propertyName, value);\n            },\n            getOffsetWidthForIndicator: function getOffsetWidthForIndicator() {\n                return _this.indicator_.offsetWidth;\n            },\n            notifyChange: function notifyChange(evtData) {\n                return _this.emit(strings.CHANGE_EVENT, evtData);\n            },\n            getNumberOfTabs: function getNumberOfTabs() {\n                return _this.tabs.length;\n            },\n            isTabActiveAtIndex: function isTabActiveAtIndex(index) {\n                return _this.tabs[index].isActive;\n            },\n            setTabActiveAtIndex: function setTabActiveAtIndex(index, isActive) {\n                _this.tabs[index].isActive = isActive;\n            },\n            isDefaultPreventedOnClickForTabAtIndex: function isDefaultPreventedOnClickForTabAtIndex(index) {\n                return _this.tabs[index].preventDefaultOnClick;\n            },\n            setPreventDefaultOnClickForTabAtIndex: function setPreventDefaultOnClickForTabAtIndex(index, preventDefaultOnClick) {\n                _this.tabs[index].preventDefaultOnClick = preventDefaultOnClick;\n            },\n            measureTabAtIndex: function measureTabAtIndex(index) {\n                return _this.tabs[index].measureSelf();\n            },\n            getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex(index) {\n                return _this.tabs[index].computedWidth;\n            },\n            getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex(index) {\n                return _this.tabs[index].computedLeft;\n            }\n        };\n        // tslint:enable:object-literal-sort-keys\n        return new foundation_2.MDCTabBarFoundation(adapter);\n    };\n    MDCTabBar.prototype.layout = function () {\n        this.foundation_.layout();\n    };\n    MDCTabBar.prototype.gatherTabs_ = function (tabFactory) {\n        var tabElements = [].slice.call(this.root_.querySelectorAll(strings.TAB_SELECTOR));\n        return tabElements.map(function (el) {\n            return tabFactory(el);\n        });\n    };\n    MDCTabBar.prototype.setActiveTabIndex_ = function (activeTabIndex, notifyChange) {\n        this.foundation_.switchToTabAtIndex(activeTabIndex, notifyChange);\n    };\n    MDCTabBar.prototype.setActiveTab_ = function (activeTab, notifyChange) {\n        var indexOfTab = this.tabs.indexOf(activeTab);\n        if (indexOfTab < 0) {\n            throw new Error('Invalid tab component given as activeTab: Tab not found within this component\\'s tab list');\n        }\n        this.setActiveTabIndex_(indexOfTab, notifyChange);\n    };\n    return MDCTabBar;\n}(component_1.MDCComponent);\nexports.MDCTabBar = MDCTabBar;\n\n/***/ }),\n\n/***/ 95:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = __webpack_require__(11);\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(96);\nvar MDCTabBarFoundation = /** @class */function (_super) {\n    __extends(MDCTabBarFoundation, _super);\n    function MDCTabBarFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCTabBarFoundation.defaultAdapter, adapter)) || this;\n        _this.isIndicatorShown_ = false;\n        _this.activeTabIndex_ = 0;\n        _this.layoutFrame_ = 0;\n        return _this;\n    }\n    Object.defineProperty(MDCTabBarFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                bindOnMDCTabSelectedEvent: function bindOnMDCTabSelectedEvent() {\n                    return undefined;\n                },\n                unbindOnMDCTabSelectedEvent: function unbindOnMDCTabSelectedEvent() {\n                    return undefined;\n                },\n                registerResizeHandler: function registerResizeHandler() {\n                    return undefined;\n                },\n                deregisterResizeHandler: function deregisterResizeHandler() {\n                    return undefined;\n                },\n                getOffsetWidth: function getOffsetWidth() {\n                    return 0;\n                },\n                setStyleForIndicator: function setStyleForIndicator() {\n                    return undefined;\n                },\n                getOffsetWidthForIndicator: function getOffsetWidthForIndicator() {\n                    return 0;\n                },\n                notifyChange: function notifyChange() {\n                    return undefined;\n                },\n                getNumberOfTabs: function getNumberOfTabs() {\n                    return 0;\n                },\n                isTabActiveAtIndex: function isTabActiveAtIndex() {\n                    return false;\n                },\n                setTabActiveAtIndex: function setTabActiveAtIndex() {\n                    return undefined;\n                },\n                isDefaultPreventedOnClickForTabAtIndex: function isDefaultPreventedOnClickForTabAtIndex() {\n                    return false;\n                },\n                setPreventDefaultOnClickForTabAtIndex: function setPreventDefaultOnClickForTabAtIndex() {\n                    return undefined;\n                },\n                measureTabAtIndex: function measureTabAtIndex() {\n                    return undefined;\n                },\n                getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex() {\n                    return 0;\n                },\n                getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex() {\n                    return 0;\n                }\n            };\n            // tslint:enable:object-literal-sort-keys\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBarFoundation.prototype.init = function () {\n        var _this = this;\n        this.resizeHandler_ = function () {\n            return _this.layout();\n        };\n        this.adapter_.addClass(constants_1.cssClasses.UPGRADED);\n        this.adapter_.bindOnMDCTabSelectedEvent();\n        this.adapter_.registerResizeHandler(this.resizeHandler_);\n        var activeTabIndex = this.findActiveTabIndex_();\n        if (activeTabIndex >= 0) {\n            this.activeTabIndex_ = activeTabIndex;\n        }\n        this.layout();\n    };\n    MDCTabBarFoundation.prototype.destroy = function () {\n        this.adapter_.removeClass(constants_1.cssClasses.UPGRADED);\n        this.adapter_.unbindOnMDCTabSelectedEvent();\n        this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n    };\n    MDCTabBarFoundation.prototype.layout = function () {\n        var _this = this;\n        if (this.layoutFrame_) {\n            cancelAnimationFrame(this.layoutFrame_);\n        }\n        this.layoutFrame_ = requestAnimationFrame(function () {\n            _this.layoutInternal_();\n            _this.layoutFrame_ = 0;\n        });\n    };\n    MDCTabBarFoundation.prototype.switchToTabAtIndex = function (index, shouldNotify) {\n        var _this = this;\n        if (index === this.activeTabIndex_) {\n            return;\n        }\n        if (index < 0 || index >= this.adapter_.getNumberOfTabs()) {\n            throw new Error(\"Out of bounds index specified for tab: \" + index);\n        }\n        var prevActiveTabIndex = this.activeTabIndex_;\n        this.activeTabIndex_ = index;\n        requestAnimationFrame(function () {\n            if (prevActiveTabIndex >= 0) {\n                _this.adapter_.setTabActiveAtIndex(prevActiveTabIndex, false);\n            }\n            _this.adapter_.setTabActiveAtIndex(_this.activeTabIndex_, true);\n            _this.layoutIndicator_();\n            if (shouldNotify) {\n                _this.adapter_.notifyChange({ activeTabIndex: _this.activeTabIndex_ });\n            }\n        });\n    };\n    MDCTabBarFoundation.prototype.getActiveTabIndex = function () {\n        return this.findActiveTabIndex_();\n    };\n    MDCTabBarFoundation.prototype.layoutInternal_ = function () {\n        var _this = this;\n        this.forEachTabIndex_(function (index) {\n            return _this.adapter_.measureTabAtIndex(index);\n        });\n        this.layoutIndicator_();\n    };\n    MDCTabBarFoundation.prototype.layoutIndicator_ = function () {\n        var isIndicatorFirstRender = !this.isIndicatorShown_;\n        // Ensure that indicator appears in the right position immediately for correct first render.\n        if (isIndicatorFirstRender) {\n            this.adapter_.setStyleForIndicator('transition', 'none');\n        }\n        var translateAmtForActiveTabLeft = this.adapter_.getComputedLeftForTabAtIndex(this.activeTabIndex_);\n        var scaleAmtForActiveTabWidth = this.adapter_.getComputedWidthForTabAtIndex(this.activeTabIndex_) / this.adapter_.getOffsetWidth();\n        var transformValue = \"translateX(\" + translateAmtForActiveTabLeft + \"px) scale(\" + scaleAmtForActiveTabWidth + \", 1)\";\n        this.adapter_.setStyleForIndicator(util_1.getCorrectPropertyName(window, 'transform'), transformValue);\n        if (isIndicatorFirstRender) {\n            // Force layout so that transform styles to take effect.\n            this.adapter_.getOffsetWidthForIndicator();\n            this.adapter_.setStyleForIndicator('transition', '');\n            this.adapter_.setStyleForIndicator('visibility', 'visible');\n            this.isIndicatorShown_ = true;\n        }\n    };\n    MDCTabBarFoundation.prototype.findActiveTabIndex_ = function () {\n        var _this = this;\n        var activeTabIndex = -1;\n        this.forEachTabIndex_(function (index) {\n            if (_this.adapter_.isTabActiveAtIndex(index)) {\n                activeTabIndex = index;\n                return true;\n            }\n        });\n        return activeTabIndex;\n    };\n    MDCTabBarFoundation.prototype.forEachTabIndex_ = function (iterator) {\n        var numTabs = this.adapter_.getNumberOfTabs();\n        for (var index = 0; index < numTabs; index++) {\n            var shouldBreak = iterator(index);\n            if (shouldBreak) {\n                break;\n            }\n        }\n    };\n    return MDCTabBarFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCTabBarFoundation = MDCTabBarFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCTabBarFoundation;\n\n/***/ }),\n\n/***/ 96:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    UPGRADED: 'mdc-tab-bar-upgraded'\n};\nexports.strings = {\n    CHANGE_EVENT: 'MDCTabBar:change',\n    INDICATOR_SELECTOR: '.mdc-tab-bar__indicator',\n    TAB_SELECTOR: '.mdc-tab'\n};\n\n/***/ }),\n\n/***/ 97:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(98);\nvar INTERACTION_EVENTS = ['touchstart', 'mousedown', 'focus'];\nvar MDCTabBarScrollerFoundation = /** @class */function (_super) {\n    __extends(MDCTabBarScrollerFoundation, _super);\n    function MDCTabBarScrollerFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCTabBarScrollerFoundation.defaultAdapter, adapter)) || this;\n        _this.pointerDownRecognized_ = false;\n        _this.currentTranslateOffset_ = 0;\n        _this.focusedTarget_ = null;\n        _this.layoutFrame_ = 0;\n        _this.scrollFrameScrollLeft_ = 0;\n        _this.forwardIndicatorClickHandler_ = function (evt) {\n            return _this.scrollForward(evt);\n        };\n        _this.backIndicatorClickHandler_ = function (evt) {\n            return _this.scrollBack(evt);\n        };\n        _this.resizeHandler_ = function () {\n            return _this.layout();\n        };\n        _this.interactionHandler_ = function (evt) {\n            if (evt.type === 'touchstart' || evt.type === 'mousedown') {\n                _this.pointerDownRecognized_ = true;\n            }\n            _this.handlePossibleTabKeyboardFocus_(evt);\n            if (evt.type === 'focus') {\n                _this.pointerDownRecognized_ = false;\n            }\n        };\n        return _this;\n    }\n    Object.defineProperty(MDCTabBarScrollerFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarScrollerFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarScrollerFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                eventTargetHasClass: function eventTargetHasClass() {\n                    return false;\n                },\n                addClassToForwardIndicator: function addClassToForwardIndicator() {\n                    return undefined;\n                },\n                removeClassFromForwardIndicator: function removeClassFromForwardIndicator() {\n                    return undefined;\n                },\n                addClassToBackIndicator: function addClassToBackIndicator() {\n                    return undefined;\n                },\n                removeClassFromBackIndicator: function removeClassFromBackIndicator() {\n                    return undefined;\n                },\n                isRTL: function isRTL() {\n                    return false;\n                },\n                registerBackIndicatorClickHandler: function registerBackIndicatorClickHandler() {\n                    return undefined;\n                },\n                deregisterBackIndicatorClickHandler: function deregisterBackIndicatorClickHandler() {\n                    return undefined;\n                },\n                registerForwardIndicatorClickHandler: function registerForwardIndicatorClickHandler() {\n                    return undefined;\n                },\n                deregisterForwardIndicatorClickHandler: function deregisterForwardIndicatorClickHandler() {\n                    return undefined;\n                },\n                registerCapturedInteractionHandler: function registerCapturedInteractionHandler() {\n                    return undefined;\n                },\n                deregisterCapturedInteractionHandler: function deregisterCapturedInteractionHandler() {\n                    return undefined;\n                },\n                registerWindowResizeHandler: function registerWindowResizeHandler() {\n                    return undefined;\n                },\n                deregisterWindowResizeHandler: function deregisterWindowResizeHandler() {\n                    return undefined;\n                },\n                getNumberOfTabs: function getNumberOfTabs() {\n                    return 0;\n                },\n                getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex() {\n                    return 0;\n                },\n                getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex() {\n                    return 0;\n                },\n                getOffsetWidthForScrollFrame: function getOffsetWidthForScrollFrame() {\n                    return 0;\n                },\n                getScrollLeftForScrollFrame: function getScrollLeftForScrollFrame() {\n                    return 0;\n                },\n                setScrollLeftForScrollFrame: function setScrollLeftForScrollFrame() {\n                    return undefined;\n                },\n                getOffsetWidthForTabBar: function getOffsetWidthForTabBar() {\n                    return 0;\n                },\n                setTransformStyleForTabBar: function setTransformStyleForTabBar() {\n                    return undefined;\n                },\n                getOffsetLeftForEventTarget: function getOffsetLeftForEventTarget() {\n                    return 0;\n                },\n                getOffsetWidthForEventTarget: function getOffsetWidthForEventTarget() {\n                    return 0;\n                }\n            };\n            // tslint:enable:object-literal-sort-keys\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBarScrollerFoundation.prototype.init = function () {\n        var _this = this;\n        this.adapter_.registerBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n        this.adapter_.registerForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n        this.adapter_.registerWindowResizeHandler(this.resizeHandler_);\n        INTERACTION_EVENTS.forEach(function (evtType) {\n            _this.adapter_.registerCapturedInteractionHandler(evtType, _this.interactionHandler_);\n        });\n        this.layout();\n    };\n    MDCTabBarScrollerFoundation.prototype.destroy = function () {\n        var _this = this;\n        this.adapter_.deregisterBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n        this.adapter_.deregisterForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n        this.adapter_.deregisterWindowResizeHandler(this.resizeHandler_);\n        INTERACTION_EVENTS.forEach(function (evtType) {\n            _this.adapter_.deregisterCapturedInteractionHandler(evtType, _this.interactionHandler_);\n        });\n    };\n    MDCTabBarScrollerFoundation.prototype.scrollBack = function (evt) {\n        if (evt) {\n            evt.preventDefault();\n        }\n        var tabWidthAccumulator = 0;\n        var scrollTargetIndex = 0;\n        for (var i = this.adapter_.getNumberOfTabs() - 1; i > 0; i--) {\n            var tabOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(i);\n            var tabBarWidthLessTabOffsetLeft = this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeft;\n            var tabIsNotOccluded = tabOffsetLeft > this.currentTranslateOffset_;\n            if (this.isRTL_()) {\n                tabIsNotOccluded = tabBarWidthLessTabOffsetLeft > this.currentTranslateOffset_;\n            }\n            if (tabIsNotOccluded) {\n                continue;\n            }\n            tabWidthAccumulator += this.adapter_.getComputedWidthForTabAtIndex(i);\n            var scrollTargetDetermined = tabWidthAccumulator > this.adapter_.getOffsetWidthForScrollFrame();\n            if (scrollTargetDetermined) {\n                scrollTargetIndex = this.isRTL_() ? i + 1 : i;\n                break;\n            }\n        }\n        this.scrollToTabAtIndex(scrollTargetIndex);\n    };\n    MDCTabBarScrollerFoundation.prototype.scrollForward = function (evt) {\n        if (evt) {\n            evt.preventDefault();\n        }\n        var scrollFrameOffsetWidth = this.adapter_.getOffsetWidthForScrollFrame() + this.currentTranslateOffset_;\n        var scrollTargetIndex = 0;\n        for (var i = 0; i < this.adapter_.getNumberOfTabs(); i++) {\n            var tabOffsetLeftAndWidth = this.adapter_.getComputedLeftForTabAtIndex(i) + this.adapter_.getComputedWidthForTabAtIndex(i);\n            var scrollTargetDetermined = tabOffsetLeftAndWidth > scrollFrameOffsetWidth;\n            if (this.isRTL_()) {\n                var frameOffsetAndTabWidth = scrollFrameOffsetWidth - this.adapter_.getComputedWidthForTabAtIndex(i);\n                var tabRightOffset = this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeftAndWidth;\n                scrollTargetDetermined = tabRightOffset > frameOffsetAndTabWidth;\n            }\n            if (scrollTargetDetermined) {\n                scrollTargetIndex = i;\n                break;\n            }\n        }\n        this.scrollToTabAtIndex(scrollTargetIndex);\n    };\n    MDCTabBarScrollerFoundation.prototype.layout = function () {\n        var _this = this;\n        cancelAnimationFrame(this.layoutFrame_);\n        this.scrollFrameScrollLeft_ = this.adapter_.getScrollLeftForScrollFrame();\n        this.layoutFrame_ = requestAnimationFrame(function () {\n            return _this.layout_();\n        });\n    };\n    MDCTabBarScrollerFoundation.prototype.scrollToTabAtIndex = function (index) {\n        var _this = this;\n        var scrollTargetOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(index);\n        var scrollTargetOffsetWidth = this.adapter_.getComputedWidthForTabAtIndex(index);\n        this.currentTranslateOffset_ = this.normalizeForRTL_(scrollTargetOffsetLeft, scrollTargetOffsetWidth);\n        requestAnimationFrame(function () {\n            return _this.shiftFrame_();\n        });\n    };\n    MDCTabBarScrollerFoundation.prototype.layout_ = function () {\n        var frameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n        var isOverflowing = this.adapter_.getOffsetWidthForTabBar() > frameWidth;\n        if (!isOverflowing) {\n            this.currentTranslateOffset_ = 0;\n        }\n        this.shiftFrame_();\n        this.updateIndicatorEnabledStates_();\n    };\n    MDCTabBarScrollerFoundation.prototype.shiftFrame_ = function () {\n        var shiftAmount = this.isRTL_() ? this.currentTranslateOffset_ : -this.currentTranslateOffset_;\n        this.adapter_.setTransformStyleForTabBar(\"translateX(\" + shiftAmount + \"px)\");\n        this.updateIndicatorEnabledStates_();\n    };\n    MDCTabBarScrollerFoundation.prototype.handlePossibleTabKeyboardFocus_ = function (evt) {\n        var target = evt.target;\n        if (!this.adapter_.eventTargetHasClass(target, constants_1.cssClasses.TAB) || this.pointerDownRecognized_) {\n            return;\n        }\n        var resetAmt = this.isRTL_() ? this.scrollFrameScrollLeft_ : 0;\n        this.adapter_.setScrollLeftForScrollFrame(resetAmt);\n        this.focusedTarget_ = target;\n        var scrollFrameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n        var tabBarWidth = this.adapter_.getOffsetWidthForTabBar();\n        var leftEdge = this.adapter_.getOffsetLeftForEventTarget(this.focusedTarget_);\n        var rightEdge = leftEdge + this.adapter_.getOffsetWidthForEventTarget(this.focusedTarget_);\n        var shouldScrollBack = rightEdge <= this.currentTranslateOffset_;\n        var shouldScrollForward = rightEdge > this.currentTranslateOffset_ + scrollFrameWidth;\n        if (this.isRTL_()) {\n            var normalizedLeftOffset = tabBarWidth - leftEdge;\n            shouldScrollBack = leftEdge >= tabBarWidth - this.currentTranslateOffset_;\n            shouldScrollForward = normalizedLeftOffset > scrollFrameWidth + this.currentTranslateOffset_;\n        }\n        if (shouldScrollForward) {\n            this.scrollForward();\n        } else if (shouldScrollBack) {\n            this.scrollBack();\n        }\n        this.pointerDownRecognized_ = false;\n    };\n    MDCTabBarScrollerFoundation.prototype.updateIndicatorEnabledStates_ = function () {\n        var INDICATOR_ENABLED = constants_1.cssClasses.INDICATOR_ENABLED;\n        if (this.currentTranslateOffset_ === 0) {\n            this.adapter_.removeClassFromBackIndicator(INDICATOR_ENABLED);\n        } else {\n            this.adapter_.addClassToBackIndicator(INDICATOR_ENABLED);\n        }\n        var remainingTabBarWidth = this.adapter_.getOffsetWidthForTabBar() - this.currentTranslateOffset_;\n        if (remainingTabBarWidth > this.adapter_.getOffsetWidthForScrollFrame()) {\n            this.adapter_.addClassToForwardIndicator(INDICATOR_ENABLED);\n        } else {\n            this.adapter_.removeClassFromForwardIndicator(INDICATOR_ENABLED);\n        }\n    };\n    MDCTabBarScrollerFoundation.prototype.normalizeForRTL_ = function (left, width) {\n        return this.isRTL_() ? this.adapter_.getOffsetWidthForTabBar() - (left + width) : left;\n    };\n    MDCTabBarScrollerFoundation.prototype.isRTL_ = function () {\n        return this.adapter_.isRTL();\n    };\n    return MDCTabBarScrollerFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCTabBarScrollerFoundation = MDCTabBarScrollerFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCTabBarScrollerFoundation;\n\n/***/ }),\n\n/***/ 98:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    INDICATOR_BACK: 'mdc-tab-bar-scroller__indicator--back',\n    INDICATOR_ENABLED: 'mdc-tab-bar-scroller__indicator--enabled',\n    INDICATOR_FORWARD: 'mdc-tab-bar-scroller__indicator--forward',\n    TAB: 'mdc-tab'\n};\nexports.strings = {\n    FRAME_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame',\n    INDICATOR_BACK_SELECTOR: '.mdc-tab-bar-scroller__indicator--back',\n    INDICATOR_FORWARD_SELECTOR: '.mdc-tab-bar-scroller__indicator--forward',\n    TABS_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame__tabs',\n    TAB_SELECTOR: '.mdc-tab'\n};\n\n/***/ })\n\n/******/ });\n});\n\n\n// WEBPACK FOOTER //\n// mdc.tabs.js"," \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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 163);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b31518711b0023492c74","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport class MDCFoundation<AdapterType extends {} = {}> {\n  static get cssClasses(): { [key: string]: string } {\n    // Classes extending MDCFoundation should implement this method to return an object which exports every\n    // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'}\n    return {};\n  }\n\n  static get strings(): { [key: string]: string } {\n    // Classes extending MDCFoundation should implement this method to return an object which exports all\n    // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\n    return {};\n  }\n\n  static get numbers(): { [key: string]: number } {\n    // Classes extending MDCFoundation should implement this method to return an object which exports all\n    // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\n    return {};\n  }\n\n  static get defaultAdapter(): {} {\n    // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient\n    // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter\n    // validation.\n    return {};\n  }\n\n  protected adapter_: AdapterType;\n\n  constructor(adapter: AdapterType = {} as AdapterType) {\n    this.adapter_ = adapter;\n  }\n\n  init() {\n    // Subclasses should override this method to perform initialization routines (registering events, etc.)\n  }\n\n  destroy() {\n    // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-base/foundation.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from './foundation';\nimport {CustomEventListener, EventType, SpecificEventListener} from './types';\n\nexport class MDCComponent<FoundationType extends MDCFoundation> {\n  static attachTo(root: Element): MDCComponent<MDCFoundation<{}>> {\n    // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and\n    // returns an instantiated component with its root set to that element. Also note that in the cases of\n    // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized\n    // from getDefaultFoundation().\n    return new MDCComponent(root, new MDCFoundation({}));\n  }\n\n  protected root_: Element;\n  protected foundation_: FoundationType;\n\n  constructor(\n      root: Element,\n      foundation?: FoundationType,\n      ...args: Array<unknown>\n  ) {\n    this.root_ = root;\n    this.initialize(...args);\n    // Note that we initialize foundation here and not within the constructor's default param so that\n    // this.root_ is defined and can be used within the foundation class.\n    this.foundation_ = foundation === undefined ? this.getDefaultFoundation() : foundation;\n    this.foundation_.init();\n    this.initialSyncWithDOM();\n  }\n\n  /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */\n  initialize(..._args: Array<unknown>) {\n    // Subclasses can override this to do any additional setup work that would be considered part of a\n    // \"constructor\". Essentially, it is a hook into the parent constructor before the foundation is\n    // initialized. Any additional arguments besides root and foundation will be passed in here.\n  }\n\n  getDefaultFoundation(): FoundationType {\n    // Subclasses must override this method to return a properly configured foundation class for the\n    // component.\n    throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' +\n        'foundation class');\n  }\n\n  initialSyncWithDOM() {\n    // Subclasses should override this method if they need to perform work to synchronize with a host DOM\n    // object. An example of this would be a form control wrapper that needs to synchronize its internal state\n    // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM\n    // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor.\n  }\n\n  destroy() {\n    // Subclasses may implement this method to release any resources / deregister any listeners they have\n    // attached. An example of this might be deregistering a resize event from the window object.\n    this.foundation_.destroy();\n  }\n\n  /**\n   * Wrapper method to add an event listener to the component's root element. This is most useful when\n   * listening for custom events.\n   */\n  listen<K extends EventType>(evtType: K, handler: SpecificEventListener<K>): void;\n  listen<E extends Event>(evtType: string, handler: CustomEventListener<E>): void;\n  listen(evtType: string, handler: EventListener) {\n    this.root_.addEventListener(evtType, handler);\n  }\n\n  /**\n   * Wrapper method to remove an event listener to the component's root element. This is most useful when\n   * unlistening for custom events.\n   */\n  unlisten<K extends EventType>(evtType: K, handler: SpecificEventListener<K>): void;\n  unlisten<E extends Event>(evtType: string, handler: CustomEventListener<E>): void;\n  unlisten(evtType: string, handler: EventListener) {\n    this.root_.removeEventListener(evtType, handler);\n  }\n\n  /**\n   * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data.\n   */\n  emit<T extends object>(evtType: string, evtData: T, shouldBubble = false) {\n    let evt: CustomEvent<T>;\n    if (typeof CustomEvent === 'function') {\n      evt = new CustomEvent<T>(evtType, {\n        bubbles: shouldBubble,\n        detail: evtData,\n      });\n    } else {\n      evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(evtType, shouldBubble, false, evtData);\n    }\n\n    this.root_.dispatchEvent(evt);\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCComponent;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-base/component.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {\n  CssVendorPropertyMap, JsVendorPropertyMap,\n  PrefixedCssPropertyName, PrefixedJsEventType,\n  StandardCssPropertyName, StandardJsEventType,\n} from './types';\n\nconst cssPropertyNameMap: CssVendorPropertyMap = {\n  animation: {\n    prefixed: '-webkit-animation',\n    standard: 'animation',\n  },\n  transform: {\n    prefixed: '-webkit-transform',\n    standard: 'transform',\n  },\n  transition: {\n    prefixed: '-webkit-transition',\n    standard: 'transition',\n  },\n};\n\nconst jsEventTypeMap: JsVendorPropertyMap = {\n  animationend: {\n    cssProperty: 'animation',\n    prefixed: 'webkitAnimationEnd',\n    standard: 'animationend',\n  },\n  animationiteration: {\n    cssProperty: 'animation',\n    prefixed: 'webkitAnimationIteration',\n    standard: 'animationiteration',\n  },\n  animationstart: {\n    cssProperty: 'animation',\n    prefixed: 'webkitAnimationStart',\n    standard: 'animationstart',\n  },\n  transitionend: {\n    cssProperty: 'transition',\n    prefixed: 'webkitTransitionEnd',\n    standard: 'transitionend',\n  },\n};\n\nfunction isWindow(windowObj: Window): boolean {\n  return Boolean(windowObj.document) && typeof windowObj.document.createElement === 'function';\n}\n\nexport function getCorrectPropertyName(windowObj: Window, cssProperty: StandardCssPropertyName):\n    StandardCssPropertyName | PrefixedCssPropertyName {\n  if (isWindow(windowObj) && cssProperty in cssPropertyNameMap) {\n    const el = windowObj.document.createElement('div');\n    const {standard, prefixed} = cssPropertyNameMap[cssProperty];\n    const isStandard = standard in el.style;\n    return isStandard ? standard : prefixed;\n  }\n  return cssProperty;\n}\n\nexport function getCorrectEventName(windowObj: Window, eventType: StandardJsEventType):\n    StandardJsEventType | PrefixedJsEventType {\n  if (isWindow(windowObj) && eventType in jsEventTypeMap) {\n    const el = windowObj.document.createElement('div');\n    const {standard, prefixed, cssProperty} = jsEventTypeMap[eventType];\n    const isStandard = cssProperty in el.style;\n    return isStandard ? standard : prefixed;\n  }\n  return eventType;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-animation/util.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './tab/index';\nexport * from './tab-bar/index';\nexport * from './tab-bar-scroller/index';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/index.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './adapter';\nexport * from './component';\nexport * from './foundation';\nexport {cssClasses as tabCssClasses, strings as tabStrings} from './constants';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/index.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './adapter';\nexport * from './component';\nexport * from './foundation';\nexport * from './types';\nexport {cssClasses as tabBarCssClasses, strings as tabBarStrings} from './constants';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/index.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './adapter';\nexport * from './component';\nexport * from './foundation';\nexport {cssClasses as tabBarScrollerCssClasses, strings as tabBarScrollerStrings} from './constants';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/index.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {getCorrectPropertyName} from '@material/animation/util';\nimport {MDCComponent} from '@material/base/component';\nimport {MDCTabBar, MDCTabBarFactory} from '../tab-bar/component';\nimport {MDCTabBarScrollerAdapter} from './adapter';\nimport {MDCTabBarScrollerFoundation} from './foundation';\n\nexport class MDCTabBarScroller extends MDCComponent<MDCTabBarScrollerFoundation> {\n  static attachTo(root: Element) {\n    return new MDCTabBarScroller(root);\n  }\n\n  get tabBar() {\n    return this.tabBar_;\n  }\n\n  protected root_!: HTMLElement; // assigned in MDCComponent constructor\n\n  private tabBar_!: MDCTabBar; // assigned in initialize()\n  private scrollFrame_!: HTMLElement; // assigned in initialize()\n  private tabBarEl_!: HTMLElement; // assigned in initialize()\n  private forwardIndicator_!: HTMLElement; // assigned in initialize()\n  private backIndicator_!: HTMLElement; // assigned in initialize()\n\n  initialize(tabBarFactory: MDCTabBarFactory = (el) => new MDCTabBar(el)) {\n    this.scrollFrame_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.FRAME_SELECTOR)!;\n    this.tabBarEl_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.TABS_SELECTOR)!;\n    this.forwardIndicator_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.INDICATOR_FORWARD_SELECTOR)!;\n    this.backIndicator_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.INDICATOR_BACK_SELECTOR)!;\n\n    this.tabBar_ = tabBarFactory(this.tabBarEl_);\n  }\n\n  getDefaultFoundation() {\n    // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n    // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    const adapter: MDCTabBarScrollerAdapter = {\n      addClass: (className) => this.root_.classList.add(className),\n      removeClass: (className) => this.root_.classList.remove(className),\n      eventTargetHasClass: (target, className) => target.classList.contains(className),\n      addClassToForwardIndicator: (className) => this.forwardIndicator_.classList.add(className),\n      removeClassFromForwardIndicator: (className) => this.forwardIndicator_.classList.remove(className),\n      addClassToBackIndicator: (className) => this.backIndicator_.classList.add(className),\n      removeClassFromBackIndicator: (className) => this.backIndicator_.classList.remove(className),\n      isRTL: () => getComputedStyle(this.root_).getPropertyValue('direction') === 'rtl',\n      registerBackIndicatorClickHandler: (handler) => this.backIndicator_.addEventListener('click', handler),\n      deregisterBackIndicatorClickHandler: (handler) => this.backIndicator_.removeEventListener('click', handler),\n      registerForwardIndicatorClickHandler: (handler) => this.forwardIndicator_.addEventListener('click', handler),\n      deregisterForwardIndicatorClickHandler: (handler) => this.forwardIndicator_.removeEventListener('click', handler),\n      registerCapturedInteractionHandler: (evt, handler) => this.root_.addEventListener(evt, handler, true),\n      deregisterCapturedInteractionHandler: (evt, handler) => this.root_.removeEventListener(evt, handler, true),\n      registerWindowResizeHandler: (handler) => window.addEventListener('resize', handler),\n      deregisterWindowResizeHandler: (handler) => window.removeEventListener('resize', handler),\n      getNumberOfTabs: () => this.tabBar.tabs.length,\n      getComputedWidthForTabAtIndex: (index) => this.tabBar.tabs[index].computedWidth,\n      getComputedLeftForTabAtIndex: (index) => this.tabBar.tabs[index].computedLeft,\n      getOffsetWidthForScrollFrame: () => this.scrollFrame_.offsetWidth,\n      getScrollLeftForScrollFrame: () => this.scrollFrame_.scrollLeft,\n      setScrollLeftForScrollFrame: (scrollLeftAmount) => this.scrollFrame_.scrollLeft = scrollLeftAmount,\n      getOffsetWidthForTabBar: () => this.tabBarEl_.offsetWidth,\n      setTransformStyleForTabBar: (value) => {\n        this.tabBarEl_.style.setProperty(getCorrectPropertyName(window, 'transform'), value);\n      },\n      getOffsetLeftForEventTarget: (target) => target.offsetLeft,\n      getOffsetWidthForEventTarget: (target) => target.offsetWidth,\n    };\n    // tslint:enable:object-literal-sort-keys\n    return new MDCTabBarScrollerFoundation(adapter);\n  }\n\n  layout() {\n    this.foundation_.layout();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/component.ts","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\n * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\n */\n\nexport function closest(element: Element, selector: string): Element | null {\n  if (element.closest) {\n    return element.closest(selector);\n  }\n\n  let el: Element | null = element;\n  while (el) {\n    if (matches(el, selector)) {\n      return el;\n    }\n    el = el.parentElement;\n  }\n  return null;\n}\n\nexport function matches(element: Element, selector: string): boolean {\n  const nativeMatches = element.matches\n      || element.webkitMatchesSelector\n      || element.msMatchesSelector;\n  return nativeMatches.call(element, selector);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-dom/ponyfill.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nimport {MDCRipplePoint} from './types';\n\n/**\n * Stores result from supportsCssVariables to avoid redundant processing to\n * detect CSS custom variable support.\n */\nlet supportsCssVariables_: boolean | undefined;\n\n/**\n * Stores result from applyPassive to avoid redundant processing to detect\n * passive event listener support.\n */\nlet supportsPassive_: boolean | undefined;\n\nfunction detectEdgePseudoVarBug(windowObj: Window): boolean {\n  // Detect versions of Edge with buggy var() support\n  // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11495448/\n  const document = windowObj.document;\n  const node = document.createElement('div');\n  node.className = 'mdc-ripple-surface--test-edge-var-bug';\n  document.body.appendChild(node);\n\n  // The bug exists if ::before style ends up propagating to the parent element.\n  // Additionally, getComputedStyle returns null in iframes with display: \"none\" in Firefox,\n  // but Firefox is known to support CSS custom properties correctly.\n  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n  const computedStyle = windowObj.getComputedStyle(node);\n  const hasPseudoVarBug = computedStyle !== null && computedStyle.borderTopStyle === 'solid';\n  if (node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n  return hasPseudoVarBug;\n}\n\nexport function supportsCssVariables(windowObj: Window, forceRefresh = false): boolean {\n  const {CSS} = windowObj;\n  let supportsCssVars = supportsCssVariables_;\n  if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\n    return supportsCssVariables_;\n  }\n\n  const supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\n  if (!supportsFunctionPresent) {\n    return false;\n  }\n\n  const explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\n  // See: https://bugs.webkit.org/show_bug.cgi?id=154669\n  // See: README section on Safari\n  const weAreFeatureDetectingSafari10plus = (\n      CSS.supports('(--css-vars: yes)') &&\n      CSS.supports('color', '#00000000')\n  );\n\n  if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) {\n    supportsCssVars = !detectEdgePseudoVarBug(windowObj);\n  } else {\n    supportsCssVars = false;\n  }\n\n  if (!forceRefresh) {\n    supportsCssVariables_ = supportsCssVars;\n  }\n  return supportsCssVars;\n}\n\n/**\n * Determine whether the current browser supports passive event listeners, and\n * if so, use them.\n */\nexport function applyPassive(globalObj: Window = window, forceRefresh = false):\n    boolean | EventListenerOptions {\n  if (supportsPassive_ === undefined || forceRefresh) {\n    let isSupported = false;\n    try {\n      globalObj.document.addEventListener('test', () => undefined, {\n        get passive() {\n          isSupported = true;\n          return isSupported;\n        },\n      });\n    } catch (e) {\n    } // tslint:disable-line:no-empty cannot throw error due to tests. tslint also disables console.log.\n\n    supportsPassive_ = isSupported;\n  }\n\n  return supportsPassive_ ? {passive: true} as EventListenerOptions : false;\n}\n\nexport function getNormalizedEventCoords(evt: Event | undefined, pageOffset: MDCRipplePoint, clientRect: ClientRect):\n    MDCRipplePoint {\n  if (!evt) {\n    return {x: 0, y: 0};\n  }\n  const {x, y} = pageOffset;\n  const documentX = x + clientRect.left;\n  const documentY = y + clientRect.top;\n\n  let normalizedX;\n  let normalizedY;\n  // Determine touch point relative to the ripple container.\n  if (evt.type === 'touchstart') {\n    const touchEvent = evt as TouchEvent;\n    normalizedX = touchEvent.changedTouches[0].pageX - documentX;\n    normalizedY = touchEvent.changedTouches[0].pageY - documentY;\n  } else {\n    const mouseEvent = evt as MouseEvent;\n    normalizedX = mouseEvent.pageX - documentX;\n    normalizedY = mouseEvent.pageY - documentY;\n  }\n\n  return {x: normalizedX, y: normalizedY};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/util.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from '@material/base/foundation';\nimport {MDCRippleAdapter} from './adapter';\nimport {cssClasses, numbers, strings} from './constants';\nimport {MDCRipplePoint} from './types';\nimport {getNormalizedEventCoords} from './util';\n\ninterface ActivationStateType {\n  isActivated?: boolean;\n  hasDeactivationUXRun?: boolean;\n  wasActivatedByPointer?: boolean;\n  wasElementMadeActive?: boolean;\n  activationEvent?: Event;\n  isProgrammatic?: boolean;\n}\n\ninterface FgTranslationCoordinates {\n  startPoint: MDCRipplePoint;\n  endPoint: MDCRipplePoint;\n}\n\ninterface Coordinates {\n  left: number;\n  top: number;\n}\n\ntype ActivationEventType = 'touchstart' | 'pointerdown' | 'mousedown' | 'keydown';\ntype DeactivationEventType = 'touchend' | 'pointerup' | 'mouseup' | 'contextmenu';\n\n// Activation events registered on the root element of each instance for activation\nconst ACTIVATION_EVENT_TYPES: ActivationEventType[] = [\n  'touchstart', 'pointerdown', 'mousedown', 'keydown',\n];\n\n// Deactivation events registered on documentElement when a pointer-related down event occurs\nconst POINTER_DEACTIVATION_EVENT_TYPES: DeactivationEventType[] = [\n  'touchend', 'pointerup', 'mouseup', 'contextmenu',\n];\n\n// simultaneous nested activations\nlet activatedTargets: Array<EventTarget | null> = [];\n\nexport class MDCRippleFoundation extends MDCFoundation<MDCRippleAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get numbers() {\n    return numbers;\n  }\n\n  static get defaultAdapter(): MDCRippleAdapter {\n    return {\n      addClass: () => undefined,\n      browserSupportsCssVars: () => true,\n      computeBoundingRect: () => ({top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0}),\n      containsEventTarget: () => true,\n      deregisterDocumentInteractionHandler: () => undefined,\n      deregisterInteractionHandler: () => undefined,\n      deregisterResizeHandler: () => undefined,\n      getWindowPageOffset: () => ({x: 0, y: 0}),\n      isSurfaceActive: () => true,\n      isSurfaceDisabled: () => true,\n      isUnbounded: () => true,\n      registerDocumentInteractionHandler: () => undefined,\n      registerInteractionHandler: () => undefined,\n      registerResizeHandler: () => undefined,\n      removeClass: () => undefined,\n      updateCssVariable: () => undefined,\n    };\n  }\n\n  private activationAnimationHasEnded_ = false;\n  private activationState_: ActivationStateType;\n  private activationTimer_ = 0;\n  private fgDeactivationRemovalTimer_ = 0;\n  private fgScale_ = '0';\n  private frame_ = {width: 0, height: 0};\n  private initialSize_ = 0;\n  private layoutFrame_ = 0;\n  private maxRadius_ = 0;\n  private unboundedCoords_: Coordinates = {left: 0, top: 0};\n\n  private readonly activationTimerCallback_: () => void;\n  private readonly activateHandler_: EventHandlerNonNull;\n  private readonly deactivateHandler_: EventHandlerNonNull;\n  private readonly focusHandler_: EventHandlerNonNull;\n  private readonly blurHandler_: EventHandlerNonNull;\n  private readonly resizeHandler_: EventHandlerNonNull;\n\n  private previousActivationEvent_?: Event;\n\n  constructor(adapter?: Partial<MDCRippleAdapter>) {\n    super({...MDCRippleFoundation.defaultAdapter, ...adapter});\n\n    this.activationState_ = this.defaultActivationState_();\n\n    this.activationTimerCallback_ = () => {\n      this.activationAnimationHasEnded_ = true;\n      this.runDeactivationUXLogicIfReady_();\n    };\n    this.activateHandler_ = (e) => this.activate_(e);\n    this.deactivateHandler_ = () => this.deactivate_();\n    this.focusHandler_ = () => this.handleFocus();\n    this.blurHandler_ = () => this.handleBlur();\n    this.resizeHandler_ = () => this.layout();\n  }\n\n  init() {\n    const supportsPressRipple = this.supportsPressRipple_();\n\n    this.registerRootHandlers_(supportsPressRipple);\n\n    if (supportsPressRipple) {\n      const {ROOT, UNBOUNDED} = MDCRippleFoundation.cssClasses;\n      requestAnimationFrame(() => {\n        this.adapter_.addClass(ROOT);\n        if (this.adapter_.isUnbounded()) {\n          this.adapter_.addClass(UNBOUNDED);\n          // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple\n          this.layoutInternal_();\n        }\n      });\n    }\n  }\n\n  destroy() {\n    if (this.supportsPressRipple_()) {\n      if (this.activationTimer_) {\n        clearTimeout(this.activationTimer_);\n        this.activationTimer_ = 0;\n        this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION);\n      }\n\n      if (this.fgDeactivationRemovalTimer_) {\n        clearTimeout(this.fgDeactivationRemovalTimer_);\n        this.fgDeactivationRemovalTimer_ = 0;\n        this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION);\n      }\n\n      const {ROOT, UNBOUNDED} = MDCRippleFoundation.cssClasses;\n      requestAnimationFrame(() => {\n        this.adapter_.removeClass(ROOT);\n        this.adapter_.removeClass(UNBOUNDED);\n        this.removeCssVars_();\n      });\n    }\n\n    this.deregisterRootHandlers_();\n    this.deregisterDeactivationHandlers_();\n  }\n\n  /**\n   * @param evt Optional event containing position information.\n   */\n  activate(evt?: Event): void {\n    this.activate_(evt);\n  }\n\n  deactivate(): void {\n    this.deactivate_();\n  }\n\n  layout(): void {\n    if (this.layoutFrame_) {\n      cancelAnimationFrame(this.layoutFrame_);\n    }\n    this.layoutFrame_ = requestAnimationFrame(() => {\n      this.layoutInternal_();\n      this.layoutFrame_ = 0;\n    });\n  }\n\n  setUnbounded(unbounded: boolean): void {\n    const {UNBOUNDED} = MDCRippleFoundation.cssClasses;\n    if (unbounded) {\n      this.adapter_.addClass(UNBOUNDED);\n    } else {\n      this.adapter_.removeClass(UNBOUNDED);\n    }\n  }\n\n  handleFocus(): void {\n    requestAnimationFrame(() =>\n        this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED));\n  }\n\n  handleBlur(): void {\n    requestAnimationFrame(() =>\n        this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED));\n  }\n\n  /**\n   * We compute this property so that we are not querying information about the client\n   * until the point in time where the foundation requests it. This prevents scenarios where\n   * client-side feature-detection may happen too early, such as when components are rendered on the server\n   * and then initialized at mount time on the client.\n   */\n  private supportsPressRipple_(): boolean {\n    return this.adapter_.browserSupportsCssVars();\n  }\n\n  private defaultActivationState_(): ActivationStateType {\n    return {\n      activationEvent: undefined,\n      hasDeactivationUXRun: false,\n      isActivated: false,\n      isProgrammatic: false,\n      wasActivatedByPointer: false,\n      wasElementMadeActive: false,\n    };\n  }\n\n  /**\n   * supportsPressRipple Passed from init to save a redundant function call\n   */\n  private registerRootHandlers_(supportsPressRipple: boolean) {\n    if (supportsPressRipple) {\n      ACTIVATION_EVENT_TYPES.forEach((evtType) => {\n        this.adapter_.registerInteractionHandler(evtType, this.activateHandler_);\n      });\n      if (this.adapter_.isUnbounded()) {\n        this.adapter_.registerResizeHandler(this.resizeHandler_);\n      }\n    }\n\n    this.adapter_.registerInteractionHandler('focus', this.focusHandler_);\n    this.adapter_.registerInteractionHandler('blur', this.blurHandler_);\n  }\n\n  private registerDeactivationHandlers_(evt: Event) {\n    if (evt.type === 'keydown') {\n      this.adapter_.registerInteractionHandler('keyup', this.deactivateHandler_);\n    } else {\n      POINTER_DEACTIVATION_EVENT_TYPES.forEach((evtType) => {\n        this.adapter_.registerDocumentInteractionHandler(evtType, this.deactivateHandler_);\n      });\n    }\n  }\n\n  private deregisterRootHandlers_() {\n    ACTIVATION_EVENT_TYPES.forEach((evtType) => {\n      this.adapter_.deregisterInteractionHandler(evtType, this.activateHandler_);\n    });\n    this.adapter_.deregisterInteractionHandler('focus', this.focusHandler_);\n    this.adapter_.deregisterInteractionHandler('blur', this.blurHandler_);\n\n    if (this.adapter_.isUnbounded()) {\n      this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n    }\n  }\n\n  private deregisterDeactivationHandlers_() {\n    this.adapter_.deregisterInteractionHandler('keyup', this.deactivateHandler_);\n    POINTER_DEACTIVATION_EVENT_TYPES.forEach((evtType) => {\n      this.adapter_.deregisterDocumentInteractionHandler(evtType, this.deactivateHandler_);\n    });\n  }\n\n  private removeCssVars_() {\n    const rippleStrings = MDCRippleFoundation.strings;\n    const keys = Object.keys(rippleStrings) as Array<keyof typeof rippleStrings>;\n    keys.forEach((key) => {\n      if (key.indexOf('VAR_') === 0) {\n        this.adapter_.updateCssVariable(rippleStrings[key], null);\n      }\n    });\n  }\n\n  private activate_(evt?: Event) {\n    if (this.adapter_.isSurfaceDisabled()) {\n      return;\n    }\n\n    const activationState = this.activationState_;\n    if (activationState.isActivated) {\n      return;\n    }\n\n    // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction\n    const previousActivationEvent = this.previousActivationEvent_;\n    const isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type;\n    if (isSameInteraction) {\n      return;\n    }\n\n    activationState.isActivated = true;\n    activationState.isProgrammatic = evt === undefined;\n    activationState.activationEvent = evt;\n    activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (\n        evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown'\n    );\n\n    const hasActivatedChild = evt !== undefined && activatedTargets.length > 0 && activatedTargets.some(\n        (target) => this.adapter_.containsEventTarget(target));\n    if (hasActivatedChild) {\n      // Immediately reset activation state, while preserving logic that prevents touch follow-on events\n      this.resetActivationState_();\n      return;\n    }\n\n    if (evt !== undefined) {\n      activatedTargets.push(evt.target);\n      this.registerDeactivationHandlers_(evt);\n    }\n\n    activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\n    if (activationState.wasElementMadeActive) {\n      this.animateActivation_();\n    }\n\n    requestAnimationFrame(() => {\n      // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples\n      activatedTargets = [];\n\n      if (!activationState.wasElementMadeActive\n          && evt !== undefined\n          && ((evt as KeyboardEvent).key === ' ' || (evt as KeyboardEvent).keyCode === 32)) {\n        // If space was pressed, try again within an rAF call to detect :active, because different UAs report\n        // active states inconsistently when they're called within event handling code:\n        // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971\n        // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741\n        // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS\n        // variable is set within a rAF callback for a submit button interaction (#2241).\n        activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\n        if (activationState.wasElementMadeActive) {\n          this.animateActivation_();\n        }\n      }\n\n      if (!activationState.wasElementMadeActive) {\n        // Reset activation state immediately if element was not made active.\n        this.activationState_ = this.defaultActivationState_();\n      }\n    });\n  }\n\n  private checkElementMadeActive_(evt?: Event) {\n    return (evt !== undefined && evt.type === 'keydown') ? this.adapter_.isSurfaceActive() : true;\n  }\n\n  private animateActivation_() {\n    const {VAR_FG_TRANSLATE_START, VAR_FG_TRANSLATE_END} = MDCRippleFoundation.strings;\n    const {FG_DEACTIVATION, FG_ACTIVATION} = MDCRippleFoundation.cssClasses;\n    const {DEACTIVATION_TIMEOUT_MS} = MDCRippleFoundation.numbers;\n\n    this.layoutInternal_();\n\n    let translateStart = '';\n    let translateEnd = '';\n\n    if (!this.adapter_.isUnbounded()) {\n      const {startPoint, endPoint} = this.getFgTranslationCoordinates_();\n      translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n      translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n    }\n\n    this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart);\n    this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd);\n    // Cancel any ongoing activation/deactivation animations\n    clearTimeout(this.activationTimer_);\n    clearTimeout(this.fgDeactivationRemovalTimer_);\n    this.rmBoundedActivationClasses_();\n    this.adapter_.removeClass(FG_DEACTIVATION);\n\n    // Force layout in order to re-trigger the animation.\n    this.adapter_.computeBoundingRect();\n    this.adapter_.addClass(FG_ACTIVATION);\n    this.activationTimer_ = setTimeout(() => this.activationTimerCallback_(), DEACTIVATION_TIMEOUT_MS);\n  }\n\n  private getFgTranslationCoordinates_(): FgTranslationCoordinates {\n    const {activationEvent, wasActivatedByPointer} = this.activationState_;\n\n    let startPoint;\n    if (wasActivatedByPointer) {\n      startPoint = getNormalizedEventCoords(\n          activationEvent,\n          this.adapter_.getWindowPageOffset(),\n          this.adapter_.computeBoundingRect(),\n      );\n    } else {\n      startPoint = {\n        x: this.frame_.width / 2,\n        y: this.frame_.height / 2,\n      };\n    }\n    // Center the element around the start point.\n    startPoint = {\n      x: startPoint.x - (this.initialSize_ / 2),\n      y: startPoint.y - (this.initialSize_ / 2),\n    };\n\n    const endPoint = {\n      x: (this.frame_.width / 2) - (this.initialSize_ / 2),\n      y: (this.frame_.height / 2) - (this.initialSize_ / 2),\n    };\n\n    return {startPoint, endPoint};\n  }\n\n  private runDeactivationUXLogicIfReady_() {\n    // This method is called both when a pointing device is released, and when the activation animation ends.\n    // The deactivation animation should only run after both of those occur.\n    const {FG_DEACTIVATION} = MDCRippleFoundation.cssClasses;\n    const {hasDeactivationUXRun, isActivated} = this.activationState_;\n    const activationHasEnded = hasDeactivationUXRun || !isActivated;\n\n    if (activationHasEnded && this.activationAnimationHasEnded_) {\n      this.rmBoundedActivationClasses_();\n      this.adapter_.addClass(FG_DEACTIVATION);\n      this.fgDeactivationRemovalTimer_ = setTimeout(() => {\n        this.adapter_.removeClass(FG_DEACTIVATION);\n      }, numbers.FG_DEACTIVATION_MS);\n    }\n  }\n\n  private rmBoundedActivationClasses_() {\n    const {FG_ACTIVATION} = MDCRippleFoundation.cssClasses;\n    this.adapter_.removeClass(FG_ACTIVATION);\n    this.activationAnimationHasEnded_ = false;\n    this.adapter_.computeBoundingRect();\n  }\n\n  private resetActivationState_() {\n    this.previousActivationEvent_ = this.activationState_.activationEvent;\n    this.activationState_ = this.defaultActivationState_();\n    // Touch devices may fire additional events for the same interaction within a short time.\n    // Store the previous event until it's safe to assume that subsequent events are for new interactions.\n    setTimeout(() => this.previousActivationEvent_ = undefined, MDCRippleFoundation.numbers.TAP_DELAY_MS);\n  }\n\n  private deactivate_(): void {\n    const activationState = this.activationState_;\n    // This can happen in scenarios such as when you have a keyup event that blurs the element.\n    if (!activationState.isActivated) {\n      return;\n    }\n\n    const state: ActivationStateType = {...activationState};\n\n    if (activationState.isProgrammatic) {\n      requestAnimationFrame(() => this.animateDeactivation_(state));\n      this.resetActivationState_();\n    } else {\n      this.deregisterDeactivationHandlers_();\n      requestAnimationFrame(() => {\n        this.activationState_.hasDeactivationUXRun = true;\n        this.animateDeactivation_(state);\n        this.resetActivationState_();\n      });\n    }\n  }\n\n  private animateDeactivation_({wasActivatedByPointer, wasElementMadeActive}: ActivationStateType) {\n    if (wasActivatedByPointer || wasElementMadeActive) {\n      this.runDeactivationUXLogicIfReady_();\n    }\n  }\n\n  private layoutInternal_() {\n    this.frame_ = this.adapter_.computeBoundingRect();\n    const maxDim = Math.max(this.frame_.height, this.frame_.width);\n\n    // Surface diameter is treated differently for unbounded vs. bounded ripples.\n    // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately\n    // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically\n    // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter\n    // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via\n    // `overflow: hidden`.\n    const getBoundedRadius = () => {\n      const hypotenuse = Math.sqrt(Math.pow(this.frame_.width, 2) + Math.pow(this.frame_.height, 2));\n      return hypotenuse + MDCRippleFoundation.numbers.PADDING;\n    };\n\n    this.maxRadius_ = this.adapter_.isUnbounded() ? maxDim : getBoundedRadius();\n\n    // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform\n    this.initialSize_ = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE);\n    this.fgScale_ = `${this.maxRadius_ / this.initialSize_}`;\n\n    this.updateLayoutCssVars_();\n  }\n\n  private updateLayoutCssVars_() {\n    const {\n      VAR_FG_SIZE, VAR_LEFT, VAR_TOP, VAR_FG_SCALE,\n    } = MDCRippleFoundation.strings;\n\n    this.adapter_.updateCssVariable(VAR_FG_SIZE, `${this.initialSize_}px`);\n    this.adapter_.updateCssVariable(VAR_FG_SCALE, this.fgScale_);\n\n    if (this.adapter_.isUnbounded()) {\n      this.unboundedCoords_ = {\n        left: Math.round((this.frame_.width / 2) - (this.initialSize_ / 2)),\n        top: Math.round((this.frame_.height / 2) - (this.initialSize_ / 2)),\n      };\n\n      this.adapter_.updateCssVariable(VAR_LEFT, `${this.unboundedCoords_.left}px`);\n      this.adapter_.updateCssVariable(VAR_TOP, `${this.unboundedCoords_.top}px`);\n    }\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCRippleFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/foundation.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\n  // given that it's an 'upgrade' to an existing component. That being said it is the root\n  // CSS class that all other CSS classes derive from.\n  BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\n  FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\n  FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\n  ROOT: 'mdc-ripple-upgraded',\n  UNBOUNDED: 'mdc-ripple-upgraded--unbounded',\n};\n\nexport const strings = {\n  VAR_FG_SCALE: '--mdc-ripple-fg-scale',\n  VAR_FG_SIZE: '--mdc-ripple-fg-size',\n  VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\n  VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\n  VAR_LEFT: '--mdc-ripple-left',\n  VAR_TOP: '--mdc-ripple-top',\n};\n\nexport const numbers = {\n  DEACTIVATION_TIMEOUT_MS: 225, // Corresponds to $mdc-ripple-translate-duration (i.e. activation animation duration)\n  FG_DEACTIVATION_MS: 150, // Corresponds to $mdc-ripple-fade-out-duration (i.e. deactivation animation duration)\n  INITIAL_ORIGIN_SCALE: 0.6,\n  PADDING: 10,\n  TAP_DELAY_MS: 300, // Delay between touch and simulated mouse events on touch devices\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/constants.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  ACTIVE: 'mdc-tab--active',\n};\n\nexport const strings = {\n  SELECTED_EVENT: 'MDCTab:selected',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/constants.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from '@material/base/foundation';\nimport {SpecificEventListener} from '@material/base/types';\nimport {MDCTabAdapter} from './adapter';\nimport {cssClasses, strings} from './constants';\n\nexport class MDCTabFoundation extends MDCFoundation<MDCTabAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get defaultAdapter(): MDCTabAdapter {\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    return {\n      addClass: () => undefined,\n      removeClass: () => undefined,\n      registerInteractionHandler: () => undefined,\n      deregisterInteractionHandler: () => undefined,\n      getOffsetWidth: () => 0,\n      getOffsetLeft: () => 0,\n      notifySelected: () => undefined,\n    };\n    // tslint:enable:object-literal-sort-keys\n  }\n\n  private computedWidth_ = 0;\n  private computedLeft_ = 0;\n  private isActive_ = false;\n  private preventDefaultOnClick_ = false;\n\n  private readonly clickHandler_: SpecificEventListener<'click'>;\n  private readonly keydownHandler_: SpecificEventListener<'keydown'>;\n\n  constructor(adapter?: Partial<MDCTabAdapter>) {\n    super({...MDCTabFoundation.defaultAdapter, ...adapter});\n\n    this.clickHandler_ = (evt) => {\n      if (this.preventDefaultOnClick_) {\n        evt.preventDefault();\n      }\n      this.adapter_.notifySelected();\n    };\n\n    this.keydownHandler_ = (evt) => {\n      if (evt.key === 'Enter' || evt.keyCode === 13) {\n        this.adapter_.notifySelected();\n      }\n    };\n  }\n\n  init() {\n    this.adapter_.registerInteractionHandler('click', this.clickHandler_);\n    this.adapter_.registerInteractionHandler('keydown', this.keydownHandler_);\n  }\n\n  destroy() {\n    this.adapter_.deregisterInteractionHandler('click', this.clickHandler_);\n    this.adapter_.deregisterInteractionHandler('keydown', this.keydownHandler_);\n  }\n\n  getComputedWidth() {\n    return this.computedWidth_;\n  }\n\n  getComputedLeft() {\n    return this.computedLeft_;\n  }\n\n  isActive() {\n    return this.isActive_;\n  }\n\n  setActive(isActive: boolean) {\n    this.isActive_ = isActive;\n    if (this.isActive_) {\n      this.adapter_.addClass(cssClasses.ACTIVE);\n    } else {\n      this.adapter_.removeClass(cssClasses.ACTIVE);\n    }\n  }\n\n  preventsDefaultOnClick() {\n    return this.preventDefaultOnClick_;\n  }\n\n  setPreventDefaultOnClick(preventDefaultOnClick: boolean) {\n    this.preventDefaultOnClick_ = preventDefaultOnClick;\n  }\n\n  measureSelf() {\n    this.computedWidth_ = this.adapter_.getOffsetWidth();\n    this.computedLeft_ = this.adapter_.getOffsetLeft();\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCTabFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/foundation.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCComponent} from '@material/base/component';\nimport {matches} from '@material/dom/ponyfill';\nimport {MDCRippleAdapter} from './adapter';\nimport {MDCRippleFoundation} from './foundation';\nimport {MDCRippleAttachOpts, MDCRippleCapableSurface} from './types';\nimport * as util from './util';\n\nexport type MDCRippleFactory = (el: Element, foundation?: MDCRippleFoundation) => MDCRipple;\n\nexport class MDCRipple extends MDCComponent<MDCRippleFoundation> implements MDCRippleCapableSurface {\n  static attachTo(root: Element, opts: MDCRippleAttachOpts = {isUnbounded: undefined}): MDCRipple {\n    const ripple = new MDCRipple(root);\n    // Only override unbounded behavior if option is explicitly specified\n    if (opts.isUnbounded !== undefined) {\n      ripple.unbounded = opts.isUnbounded;\n    }\n    return ripple;\n  }\n\n  static createAdapter(instance: MDCRippleCapableSurface): MDCRippleAdapter {\n    return {\n      addClass: (className) => instance.root_.classList.add(className),\n      browserSupportsCssVars: () => util.supportsCssVariables(window),\n      computeBoundingRect: () => instance.root_.getBoundingClientRect(),\n      containsEventTarget: (target) => instance.root_.contains(target as Node),\n      deregisterDocumentInteractionHandler: (evtType, handler) =>\n          document.documentElement.removeEventListener(evtType, handler, util.applyPassive()),\n      deregisterInteractionHandler: (evtType, handler) =>\n          instance.root_.removeEventListener(evtType, handler, util.applyPassive()),\n      deregisterResizeHandler: (handler) => window.removeEventListener('resize', handler),\n      getWindowPageOffset: () => ({x: window.pageXOffset, y: window.pageYOffset}),\n      isSurfaceActive: () => matches(instance.root_, ':active'),\n      isSurfaceDisabled: () => Boolean(instance.disabled),\n      isUnbounded: () => Boolean(instance.unbounded),\n      registerDocumentInteractionHandler: (evtType, handler) =>\n          document.documentElement.addEventListener(evtType, handler, util.applyPassive()),\n      registerInteractionHandler: (evtType, handler) =>\n          instance.root_.addEventListener(evtType, handler, util.applyPassive()),\n      registerResizeHandler: (handler) => window.addEventListener('resize', handler),\n      removeClass: (className) => instance.root_.classList.remove(className),\n      updateCssVariable: (varName, value) => (instance.root_ as HTMLElement).style.setProperty(varName, value),\n    };\n  }\n\n  // Public visibility for this property is required by MDCRippleCapableSurface.\n  root_!: Element; // assigned in MDCComponent constructor\n\n  disabled = false;\n\n  private unbounded_?: boolean;\n\n  get unbounded(): boolean {\n    return Boolean(this.unbounded_);\n  }\n\n  set unbounded(unbounded: boolean) {\n    this.unbounded_ = Boolean(unbounded);\n    this.setUnbounded_();\n  }\n\n  activate() {\n    this.foundation_.activate();\n  }\n\n  deactivate() {\n    this.foundation_.deactivate();\n  }\n\n  layout() {\n    this.foundation_.layout();\n  }\n\n  getDefaultFoundation() {\n    return new MDCRippleFoundation(MDCRipple.createAdapter(this));\n  }\n\n  initialSyncWithDOM() {\n    const root = this.root_ as HTMLElement;\n    this.unbounded = 'mdcRippleIsUnbounded' in root.dataset;\n  }\n\n  /**\n   * Closure Compiler throws an access control error when directly accessing a\n   * protected or private property inside a getter/setter, like unbounded above.\n   * By accessing the protected property inside a method, we solve that problem.\n   * That's why this function exists.\n   */\n  private setUnbounded_() {\n    this.foundation_.setUnbounded(Boolean(this.unbounded_));\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/component.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCComponent} from '@material/base/component';\nimport {MDCRipple} from '@material/ripple/component';\nimport {MDCTabAdapter} from './adapter';\nimport {cssClasses} from './constants';\nimport {MDCTabFoundation} from './foundation';\n\nexport type MDCTabFactory = (el: Element, foundation?: MDCTabFoundation) => MDCTab;\n\nexport interface MDCTabSelectedEventDetail {\n  tab: MDCTab;\n}\n\n// Note: CustomEvent<T> is not supported by Closure Compiler.\n\nexport interface MDCTabSelectedEvent extends Event {\n  readonly detail: MDCTabSelectedEventDetail;\n}\n\nexport class MDCTab extends MDCComponent<MDCTabFoundation> {\n  static attachTo(root: Element) {\n    return new MDCTab(root);\n  }\n\n  get computedWidth() {\n    return this.foundation_.getComputedWidth();\n  }\n\n  get computedLeft() {\n    return this.foundation_.getComputedLeft();\n  }\n\n  get isActive() {\n    return this.foundation_.isActive();\n  }\n\n  set isActive(isActive) {\n    this.foundation_.setActive(isActive);\n  }\n\n  get preventDefaultOnClick() {\n    return this.foundation_.preventsDefaultOnClick();\n  }\n\n  set preventDefaultOnClick(preventDefaultOnClick) {\n    this.foundation_.setPreventDefaultOnClick(preventDefaultOnClick);\n  }\n\n  protected root_!: HTMLElement; // assigned in MDCComponent constructor\n\n  private ripple_ = MDCRipple.attachTo(this.root_);\n\n  destroy() {\n    this.ripple_.destroy();\n    super.destroy();\n  }\n\n  getDefaultFoundation() {\n    // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n    // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    const adapter: MDCTabAdapter = {\n      addClass: (className) => this.root_.classList.add(className),\n      removeClass: (className) => this.root_.classList.remove(className),\n      registerInteractionHandler: (type, handler) => this.listen(type, handler),\n      deregisterInteractionHandler: (type, handler) => this.unlisten(type, handler),\n      getOffsetWidth: () => this.root_.offsetWidth,\n      getOffsetLeft: () => this.root_.offsetLeft,\n      notifySelected: () =>\n          this.emit<MDCTabSelectedEventDetail>(MDCTabFoundation.strings.SELECTED_EVENT, {tab: this}, true),\n    };\n    // tslint:enable:object-literal-sort-keys\n    return new MDCTabFoundation(adapter);\n  }\n\n  initialSyncWithDOM() {\n    this.isActive = this.root_.classList.contains(cssClasses.ACTIVE);\n  }\n\n  measureSelf() {\n    this.foundation_.measureSelf();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/component.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCComponent} from '@material/base/component';\nimport {MDCTab, MDCTabFactory, MDCTabSelectedEvent} from '../tab/component';\nimport {MDCTabFoundation} from '../tab/foundation';\nimport {MDCTabBarAdapter} from './adapter';\nimport {MDCTabBarFoundation} from './foundation';\nimport {MDCTabBarChangeEventDetail} from './types';\n\nconst {strings} = MDCTabBarFoundation;\n\nexport type MDCTabBarFactory = (el: Element, foundation?: MDCTabBarFoundation) => MDCTabBar;\n\nexport class MDCTabBar extends MDCComponent<MDCTabBarFoundation> {\n  static attachTo(root: Element) {\n    return new MDCTabBar(root);\n  }\n\n  get tabs() {\n    return this.tabs_;\n  }\n\n  get activeTab() {\n    const activeIndex = this.foundation_.getActiveTabIndex();\n    return this.tabs[activeIndex];\n  }\n\n  set activeTab(tab) {\n    this.setActiveTab_(tab, false);\n  }\n\n  get activeTabIndex() {\n    return this.foundation_.getActiveTabIndex();\n  }\n\n  set activeTabIndex(index) {\n    this.setActiveTabIndex_(index, false);\n  }\n\n  protected root_!: HTMLElement; // assigned in MDCComponent constructor\n\n  private tabs_!: MDCTab[]; // assigned in initialize()\n  private indicator_!: HTMLElement; // assigned in initialize()\n  private tabSelectedHandler_!: (evt: MDCTabSelectedEvent) => void; // assigned in initialize()\n\n  initialize(tabFactory: MDCTabFactory = (el) => new MDCTab(el)) {\n    this.indicator_ = this.root_.querySelector<HTMLElement>(strings.INDICATOR_SELECTOR)!;\n    this.tabs_ = this.gatherTabs_(tabFactory);\n    this.tabSelectedHandler_ = ({detail}) => {\n      const {tab} = detail;\n      this.setActiveTab_(tab, true);\n    };\n  }\n\n  getDefaultFoundation() {\n    // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n    // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    const adapter: MDCTabBarAdapter = {\n      addClass: (className) => this.root_.classList.add(className),\n      removeClass: (className) => this.root_.classList.remove(className),\n      bindOnMDCTabSelectedEvent: () =>\n          this.listen(MDCTabFoundation.strings.SELECTED_EVENT, this.tabSelectedHandler_),\n      unbindOnMDCTabSelectedEvent: () =>\n          this.unlisten(MDCTabFoundation.strings.SELECTED_EVENT, this.tabSelectedHandler_),\n      registerResizeHandler: (handler) => window.addEventListener('resize', handler),\n      deregisterResizeHandler: (handler) => window.removeEventListener('resize', handler),\n      getOffsetWidth: () => this.root_.offsetWidth,\n      setStyleForIndicator: (propertyName, value) => this.indicator_.style.setProperty(propertyName, value),\n      getOffsetWidthForIndicator: () => this.indicator_.offsetWidth,\n      notifyChange: (evtData) => this.emit<MDCTabBarChangeEventDetail>(strings.CHANGE_EVENT, evtData),\n      getNumberOfTabs: () => this.tabs.length,\n      isTabActiveAtIndex: (index) => this.tabs[index].isActive,\n      setTabActiveAtIndex: (index, isActive) => {\n        this.tabs[index].isActive = isActive;\n      },\n      isDefaultPreventedOnClickForTabAtIndex: (index) => this.tabs[index].preventDefaultOnClick,\n      setPreventDefaultOnClickForTabAtIndex: (index, preventDefaultOnClick) => {\n        this.tabs[index].preventDefaultOnClick = preventDefaultOnClick;\n      },\n      measureTabAtIndex: (index) => this.tabs[index].measureSelf(),\n      getComputedWidthForTabAtIndex: (index) => this.tabs[index].computedWidth,\n      getComputedLeftForTabAtIndex: (index) => this.tabs[index].computedLeft,\n    };\n    // tslint:enable:object-literal-sort-keys\n    return new MDCTabBarFoundation(adapter);\n  }\n\n  layout() {\n    this.foundation_.layout();\n  }\n\n  private gatherTabs_(tabFactory: MDCTabFactory): MDCTab[] {\n    const tabElements: HTMLElement[] =\n        [].slice.call(this.root_.querySelectorAll(strings.TAB_SELECTOR));\n    return tabElements.map((el: Element) => tabFactory(el));\n  }\n\n  private setActiveTabIndex_(activeTabIndex: number, notifyChange: boolean) {\n    this.foundation_.switchToTabAtIndex(activeTabIndex, notifyChange);\n  }\n\n  private setActiveTab_(activeTab: MDCTab, notifyChange: boolean) {\n    const indexOfTab = this.tabs.indexOf(activeTab);\n    if (indexOfTab < 0) {\n      throw new Error('Invalid tab component given as activeTab: Tab not found within this component\\'s tab list');\n    }\n    this.setActiveTabIndex_(indexOfTab, notifyChange);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/component.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {getCorrectPropertyName} from '@material/animation/util';\nimport {MDCFoundation} from '@material/base/foundation';\nimport {SpecificEventListener} from '@material/base/types';\nimport {MDCTabBarAdapter} from './adapter';\nimport {cssClasses, strings} from './constants';\n\nexport class MDCTabBarFoundation extends MDCFoundation<MDCTabBarAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get defaultAdapter(): MDCTabBarAdapter {\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    return {\n      addClass: () => undefined,\n      removeClass: () => undefined,\n      bindOnMDCTabSelectedEvent: () => undefined,\n      unbindOnMDCTabSelectedEvent: () => undefined,\n      registerResizeHandler: () => undefined,\n      deregisterResizeHandler: () => undefined,\n      getOffsetWidth: () => 0,\n      setStyleForIndicator: () => undefined,\n      getOffsetWidthForIndicator: () => 0,\n      notifyChange: () => undefined,\n      getNumberOfTabs: () => 0,\n      isTabActiveAtIndex: () => false,\n      setTabActiveAtIndex: () => undefined,\n      isDefaultPreventedOnClickForTabAtIndex: () => false,\n      setPreventDefaultOnClickForTabAtIndex: () => undefined,\n      measureTabAtIndex: () => undefined,\n      getComputedWidthForTabAtIndex: () => 0,\n      getComputedLeftForTabAtIndex: () => 0,\n    };\n    // tslint:enable:object-literal-sort-keys\n  }\n\n  private isIndicatorShown_ = false;\n  private activeTabIndex_ = 0;\n  private layoutFrame_ = 0;\n\n  private resizeHandler_!: SpecificEventListener<'resize'>; // assigned in init()\n\n  constructor(adapter?: Partial<MDCTabBarAdapter>) {\n    super({...MDCTabBarFoundation.defaultAdapter, ...adapter});\n  }\n\n  init() {\n    this.resizeHandler_ = () => this.layout();\n    this.adapter_.addClass(cssClasses.UPGRADED);\n    this.adapter_.bindOnMDCTabSelectedEvent();\n    this.adapter_.registerResizeHandler(this.resizeHandler_);\n    const activeTabIndex = this.findActiveTabIndex_();\n    if (activeTabIndex >= 0) {\n      this.activeTabIndex_ = activeTabIndex;\n    }\n    this.layout();\n  }\n\n  destroy() {\n    this.adapter_.removeClass(cssClasses.UPGRADED);\n    this.adapter_.unbindOnMDCTabSelectedEvent();\n    this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n  }\n\n  layout() {\n    if (this.layoutFrame_) {\n      cancelAnimationFrame(this.layoutFrame_);\n    }\n\n    this.layoutFrame_ = requestAnimationFrame(() => {\n      this.layoutInternal_();\n      this.layoutFrame_ = 0;\n    });\n  }\n\n  switchToTabAtIndex(index: number, shouldNotify: boolean) {\n    if (index === this.activeTabIndex_) {\n      return;\n    }\n\n    if (index < 0 || index >= this.adapter_.getNumberOfTabs()) {\n      throw new Error(`Out of bounds index specified for tab: ${index}`);\n    }\n\n    const prevActiveTabIndex = this.activeTabIndex_;\n    this.activeTabIndex_ = index;\n    requestAnimationFrame(() => {\n      if (prevActiveTabIndex >= 0) {\n        this.adapter_.setTabActiveAtIndex(prevActiveTabIndex, false);\n      }\n      this.adapter_.setTabActiveAtIndex(this.activeTabIndex_, true);\n      this.layoutIndicator_();\n      if (shouldNotify) {\n        this.adapter_.notifyChange({activeTabIndex: this.activeTabIndex_});\n      }\n    });\n  }\n\n  getActiveTabIndex() {\n    return this.findActiveTabIndex_();\n  }\n\n  private layoutInternal_() {\n    this.forEachTabIndex_((index) => this.adapter_.measureTabAtIndex(index));\n    this.layoutIndicator_();\n  }\n\n  private layoutIndicator_() {\n    const isIndicatorFirstRender = !this.isIndicatorShown_;\n\n    // Ensure that indicator appears in the right position immediately for correct first render.\n    if (isIndicatorFirstRender) {\n      this.adapter_.setStyleForIndicator('transition', 'none');\n    }\n\n    const translateAmtForActiveTabLeft = this.adapter_.getComputedLeftForTabAtIndex(this.activeTabIndex_);\n    const scaleAmtForActiveTabWidth =\n        this.adapter_.getComputedWidthForTabAtIndex(this.activeTabIndex_) / this.adapter_.getOffsetWidth();\n\n    const transformValue = `translateX(${translateAmtForActiveTabLeft}px) scale(${scaleAmtForActiveTabWidth}, 1)`;\n    this.adapter_.setStyleForIndicator(getCorrectPropertyName(window, 'transform'), transformValue);\n\n    if (isIndicatorFirstRender) {\n      // Force layout so that transform styles to take effect.\n      this.adapter_.getOffsetWidthForIndicator();\n      this.adapter_.setStyleForIndicator('transition', '');\n      this.adapter_.setStyleForIndicator('visibility', 'visible');\n      this.isIndicatorShown_ = true;\n    }\n  }\n\n  private findActiveTabIndex_() {\n    let activeTabIndex = -1;\n    this.forEachTabIndex_((index) => {\n      if (this.adapter_.isTabActiveAtIndex(index)) {\n        activeTabIndex = index;\n        return true;\n      }\n    });\n    return activeTabIndex;\n  }\n\n  private forEachTabIndex_(iterator: (index: number) => boolean | void) {\n    const numTabs = this.adapter_.getNumberOfTabs();\n    for (let index = 0; index < numTabs; index++) {\n      const shouldBreak = iterator(index);\n      if (shouldBreak) {\n        break;\n      }\n    }\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCTabBarFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/foundation.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  UPGRADED: 'mdc-tab-bar-upgraded',\n};\n\nexport const strings = {\n  CHANGE_EVENT: 'MDCTabBar:change',\n  INDICATOR_SELECTOR: '.mdc-tab-bar__indicator',\n  TAB_SELECTOR: '.mdc-tab',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/constants.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from '@material/base/foundation';\nimport {SpecificEventListener} from '@material/base/types';\nimport {MDCTabBarScrollerAdapter} from './adapter';\nimport {cssClasses, strings} from './constants';\n\ntype InteractionEventType = 'touchstart' | 'mousedown' | 'focus';\n\nconst INTERACTION_EVENTS: InteractionEventType[] = ['touchstart', 'mousedown', 'focus'];\n\nexport class MDCTabBarScrollerFoundation extends MDCFoundation<MDCTabBarScrollerAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get defaultAdapter(): MDCTabBarScrollerAdapter {\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    return {\n      addClass: () => undefined,\n      removeClass: () => undefined,\n      eventTargetHasClass: () => false,\n      addClassToForwardIndicator: () => undefined,\n      removeClassFromForwardIndicator: () => undefined,\n      addClassToBackIndicator: () => undefined,\n      removeClassFromBackIndicator: () => undefined,\n      isRTL: () => false,\n      registerBackIndicatorClickHandler: () => undefined,\n      deregisterBackIndicatorClickHandler: () => undefined,\n      registerForwardIndicatorClickHandler: () => undefined,\n      deregisterForwardIndicatorClickHandler: () => undefined,\n      registerCapturedInteractionHandler: () => undefined,\n      deregisterCapturedInteractionHandler: () => undefined,\n      registerWindowResizeHandler: () => undefined,\n      deregisterWindowResizeHandler: () => undefined,\n      getNumberOfTabs: () => 0,\n      getComputedWidthForTabAtIndex: () => 0,\n      getComputedLeftForTabAtIndex: () => 0,\n      getOffsetWidthForScrollFrame: () => 0,\n      getScrollLeftForScrollFrame: () => 0,\n      setScrollLeftForScrollFrame: () => undefined,\n      getOffsetWidthForTabBar: () => 0,\n      setTransformStyleForTabBar: () => undefined,\n      getOffsetLeftForEventTarget: () => 0,\n      getOffsetWidthForEventTarget: () => 0,\n    };\n    // tslint:enable:object-literal-sort-keys\n  }\n\n  private pointerDownRecognized_ = false;\n  private currentTranslateOffset_ = 0;\n  private focusedTarget_: HTMLElement | null = null;\n  private layoutFrame_ = 0;\n  private scrollFrameScrollLeft_ = 0;\n\n  private readonly forwardIndicatorClickHandler_: SpecificEventListener<'click'>;\n  private readonly backIndicatorClickHandler_: SpecificEventListener<'click'>;\n  private readonly resizeHandler_: SpecificEventListener<'resize'>;\n  private readonly interactionHandler_: SpecificEventListener<InteractionEventType>;\n\n  constructor(adapter?: Partial<MDCTabBarScrollerAdapter>) {\n    super({...MDCTabBarScrollerFoundation.defaultAdapter, ...adapter});\n\n    this.forwardIndicatorClickHandler_ = (evt) => this.scrollForward(evt);\n    this.backIndicatorClickHandler_ = (evt) => this.scrollBack(evt);\n    this.resizeHandler_ = () => this.layout();\n    this.interactionHandler_ = (evt) => {\n      if (evt.type === 'touchstart' || evt.type === 'mousedown') {\n        this.pointerDownRecognized_ = true;\n      }\n      this.handlePossibleTabKeyboardFocus_(evt);\n      if (evt.type === 'focus') {\n        this.pointerDownRecognized_ = false;\n      }\n    };\n  }\n\n  init() {\n    this.adapter_.registerBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n    this.adapter_.registerForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n    this.adapter_.registerWindowResizeHandler(this.resizeHandler_);\n    INTERACTION_EVENTS.forEach((evtType) => {\n      this.adapter_.registerCapturedInteractionHandler(evtType, this.interactionHandler_);\n    });\n    this.layout();\n  }\n\n  destroy() {\n    this.adapter_.deregisterBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n    this.adapter_.deregisterForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n    this.adapter_.deregisterWindowResizeHandler(this.resizeHandler_);\n    INTERACTION_EVENTS.forEach((evtType) => {\n      this.adapter_.deregisterCapturedInteractionHandler(evtType, this.interactionHandler_);\n    });\n  }\n\n  scrollBack(evt?: MouseEvent) {\n    if (evt) {\n      evt.preventDefault();\n    }\n\n    let tabWidthAccumulator = 0;\n    let scrollTargetIndex = 0;\n\n    for (let i = this.adapter_.getNumberOfTabs() - 1; i > 0; i--) {\n      const tabOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(i);\n      const tabBarWidthLessTabOffsetLeft = this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeft;\n\n      let tabIsNotOccluded = tabOffsetLeft > this.currentTranslateOffset_;\n      if (this.isRTL_()) {\n        tabIsNotOccluded = tabBarWidthLessTabOffsetLeft > this.currentTranslateOffset_;\n      }\n\n      if (tabIsNotOccluded) {\n        continue;\n      }\n\n      tabWidthAccumulator += this.adapter_.getComputedWidthForTabAtIndex(i);\n\n      const scrollTargetDetermined = tabWidthAccumulator > this.adapter_.getOffsetWidthForScrollFrame();\n      if (scrollTargetDetermined) {\n        scrollTargetIndex = this.isRTL_() ? i + 1 : i;\n        break;\n      }\n    }\n\n    this.scrollToTabAtIndex(scrollTargetIndex);\n  }\n\n  scrollForward(evt?: MouseEvent) {\n    if (evt) {\n      evt.preventDefault();\n    }\n\n    const scrollFrameOffsetWidth = this.adapter_.getOffsetWidthForScrollFrame() + this.currentTranslateOffset_;\n    let scrollTargetIndex = 0;\n\n    for (let i = 0; i < this.adapter_.getNumberOfTabs(); i++) {\n      const tabOffsetLeftAndWidth =\n          this.adapter_.getComputedLeftForTabAtIndex(i) + this.adapter_.getComputedWidthForTabAtIndex(i);\n      let scrollTargetDetermined = tabOffsetLeftAndWidth > scrollFrameOffsetWidth;\n\n      if (this.isRTL_()) {\n        const frameOffsetAndTabWidth =\n            scrollFrameOffsetWidth - this.adapter_.getComputedWidthForTabAtIndex(i);\n        const tabRightOffset =\n            this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeftAndWidth;\n\n        scrollTargetDetermined = tabRightOffset > frameOffsetAndTabWidth;\n      }\n\n      if (scrollTargetDetermined) {\n        scrollTargetIndex = i;\n        break;\n      }\n    }\n\n    this.scrollToTabAtIndex(scrollTargetIndex);\n  }\n\n  layout() {\n    cancelAnimationFrame(this.layoutFrame_);\n    this.scrollFrameScrollLeft_ = this.adapter_.getScrollLeftForScrollFrame();\n    this.layoutFrame_ = requestAnimationFrame(() => this.layout_());\n  }\n\n  scrollToTabAtIndex(index: number) {\n    const scrollTargetOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(index);\n    const scrollTargetOffsetWidth = this.adapter_.getComputedWidthForTabAtIndex(index);\n\n    this.currentTranslateOffset_ =\n        this.normalizeForRTL_(scrollTargetOffsetLeft, scrollTargetOffsetWidth);\n\n    requestAnimationFrame(() => this.shiftFrame_());\n  }\n\n  private layout_() {\n    const frameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n    const isOverflowing = this.adapter_.getOffsetWidthForTabBar() > frameWidth;\n\n    if (!isOverflowing) {\n      this.currentTranslateOffset_ = 0;\n    }\n\n    this.shiftFrame_();\n    this.updateIndicatorEnabledStates_();\n  }\n\n  private shiftFrame_() {\n    const shiftAmount = this.isRTL_() ?\n        this.currentTranslateOffset_ : -this.currentTranslateOffset_;\n\n    this.adapter_.setTransformStyleForTabBar(`translateX(${shiftAmount}px)`);\n    this.updateIndicatorEnabledStates_();\n  }\n\n  private handlePossibleTabKeyboardFocus_(evt: MouseEvent | TouchEvent | FocusEvent) {\n    const target = evt.target as HTMLElement;\n\n    if (!this.adapter_.eventTargetHasClass(target, cssClasses.TAB) || this.pointerDownRecognized_) {\n      return;\n    }\n\n    const resetAmt = this.isRTL_() ? this.scrollFrameScrollLeft_ : 0;\n    this.adapter_.setScrollLeftForScrollFrame(resetAmt);\n\n    this.focusedTarget_ = target;\n\n    const scrollFrameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n    const tabBarWidth = this.adapter_.getOffsetWidthForTabBar();\n    const leftEdge = this.adapter_.getOffsetLeftForEventTarget(this.focusedTarget_);\n    const rightEdge = leftEdge + this.adapter_.getOffsetWidthForEventTarget(this.focusedTarget_);\n\n    let shouldScrollBack = rightEdge <= this.currentTranslateOffset_;\n    let shouldScrollForward = rightEdge > this.currentTranslateOffset_ + scrollFrameWidth;\n\n    if (this.isRTL_()) {\n      const normalizedLeftOffset = tabBarWidth - leftEdge;\n      shouldScrollBack = leftEdge >= tabBarWidth - this.currentTranslateOffset_;\n      shouldScrollForward = normalizedLeftOffset > scrollFrameWidth + this.currentTranslateOffset_;\n    }\n\n    if (shouldScrollForward) {\n      this.scrollForward();\n    } else if (shouldScrollBack) {\n      this.scrollBack();\n    }\n\n    this.pointerDownRecognized_ = false;\n  }\n\n  private updateIndicatorEnabledStates_() {\n    const {INDICATOR_ENABLED} = cssClasses;\n    if (this.currentTranslateOffset_ === 0) {\n      this.adapter_.removeClassFromBackIndicator(INDICATOR_ENABLED);\n    } else {\n      this.adapter_.addClassToBackIndicator(INDICATOR_ENABLED);\n    }\n\n    const remainingTabBarWidth = this.adapter_.getOffsetWidthForTabBar() - this.currentTranslateOffset_;\n    if (remainingTabBarWidth > this.adapter_.getOffsetWidthForScrollFrame()) {\n      this.adapter_.addClassToForwardIndicator(INDICATOR_ENABLED);\n    } else {\n      this.adapter_.removeClassFromForwardIndicator(INDICATOR_ENABLED);\n    }\n  }\n\n  private normalizeForRTL_(left: number, width: number) {\n    return this.isRTL_() ? this.adapter_.getOffsetWidthForTabBar() - (left + width) : left;\n  }\n\n  private isRTL_() {\n    return this.adapter_.isRTL();\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCTabBarScrollerFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/foundation.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  INDICATOR_BACK: 'mdc-tab-bar-scroller__indicator--back',\n  INDICATOR_ENABLED: 'mdc-tab-bar-scroller__indicator--enabled',\n  INDICATOR_FORWARD: 'mdc-tab-bar-scroller__indicator--forward',\n  TAB: 'mdc-tab',\n};\n\nexport const strings = {\n  FRAME_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame',\n  INDICATOR_BACK_SELECTOR: '.mdc-tab-bar-scroller__indicator--back',\n  INDICATOR_FORWARD_SELECTOR: '.mdc-tab-bar-scroller__indicator--forward',\n  TABS_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame__tabs',\n  TAB_SELECTOR: '.mdc-tab',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/constants.ts"],"sourceRoot":""}