{"version":3,"sources":["webpack:///webpack/bootstrap cbe29a369b24fc401605","webpack:///./node_modules/@material/top-app-bar/adapter.js","webpack:///./node_modules/@material/top-app-bar/constants.js","webpack:///./node_modules/@material/top-app-bar/foundation.js","webpack:///./node_modules/@material/base/foundation.js","webpack:///./node_modules/@material/base/component.js","webpack:///./node_modules/@material/ripple/adapter.js","webpack:///./node_modules/@material/ripple/util.js","webpack:///./module/mdc-top-app-bar.js","webpack:///./node_modules/@material/top-app-bar/index.js","webpack:///./node_modules/@material/ripple/index.js","webpack:///./node_modules/@material/ripple/foundation.js","webpack:///./node_modules/@material/ripple/constants.js","webpack:///./node_modules/@material/top-app-bar/fixed/foundation.js","webpack:///./node_modules/@material/top-app-bar/short/foundation.js","webpack:///./node_modules/@material/top-app-bar/standard/foundation.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","addClass","className","removeClass","hasClass","setStyle","value","getTopAppBarHeight","registerNavigationIconInteractionHandler","type","handler","deregisterNavigationIconInteractionHandler","notifyNavigationIconClicked","registerScrollHandler","deregisterScrollHandler","registerResizeHandler","deregisterResizeHandler","getViewportScrollY","getTotalActionItems","strings","ACTION_ITEM_SELECTOR","NAVIGATION_EVENT","NAVIGATION_ICON_SELECTOR","ROOT_SELECTOR","TITLE_SELECTOR","cssClasses","FIXED_CLASS","FIXED_SCROLLED_CLASS","SHORT_CLASS","SHORT_HAS_ACTION_ITEM_CLASS","SHORT_COLLAPSED_CLASS","numbers","DEBOUNCE_THROTTLE_RESIZE_TIME_MS","MAX_TOP_APP_BAR_HEIGHT","_constants","MDCTopAppBarBaseFoundation","MDCFoundation","defaultAdapter","constructor","adapter","super","assign","this","navClickHandler_","adapter_","init","destroy","_foundation","MDCComponent","[object Object]","root","foundation","args","root_","initialize","foundation_","undefined","getDefaultFoundation","initialSyncWithDOM","Error","listen","evtType","addEventListener","unlisten","removeEventListener","emit","evtData","shouldBubble","evt","CustomEvent","detail","bubbles","document","createEvent","initCustomEvent","dispatchEvent","browserSupportsCssVars","isUnbounded","isSurfaceActive","isSurfaceDisabled","containsEventTarget","target","registerInteractionHandler","deregisterInteractionHandler","registerDocumentInteractionHandler","deregisterDocumentInteractionHandler","updateCssVariable","varName","computeBoundingRect","getWindowPageOffset","supportsCssVariables_","supportsPassive_","supportsCssVariables","windowObj","forceRefresh","CSS","supports","explicitlySupportsCssVars","weAreFeatureDetectingSafari10plus","node","createElement","body","appendChild","computedStyle","getComputedStyle","hasPseudoVarBug","borderTopStyle","remove","detectEdgePseudoVarBug","applyPassive","globalObj","window","isSupported","passive","e","getMatchesProperty","HTMLElementPrototype","filter","pop","getNormalizedEventCoords","ev","pageOffset","clientRect","x","y","documentX","left","documentY","top","normalizedX","normalizedY","changedTouches","pageX","pageY","_topAppBar","mdc","MDCTopAppBar","_index","navIcon_","iconRipples_","rippleFactory","el","MDCRipple","attachTo","querySelector","icons","slice","querySelectorAll","push","map","icon","ripple","unbounded","forEach","iconRipple","classList","contains","add","style","setProperty","clientHeight","pageYOffset","length","MDCShortTopAppBarFoundation","MDCFixedTopAppBarFoundation","MDCTopAppBarFoundation","util","disabled","unbounded_","instance","MATCHES","HTMLElement","documentElement","getBoundingClientRect","pageXOffset","Boolean","setUnbounded_","setUnbounded","activate","deactivate","layout","MDCRippleFoundation","createAdapter","dataset","RippleCapableSurface","_util","ACTIVATION_EVENT_TYPES","POINTER_DEACTIVATION_EVENT_TYPES","activatedTargets","layoutFrame_","frame_","width","height","activationState_","defaultActivationState_","initialSize_","maxRadius_","activateHandler_","activate_","deactivateHandler_","deactivate_","focusHandler_","requestAnimationFrame","BG_FOCUSED","blurHandler_","resizeHandler_","unboundedCoords_","fgScale_","activationTimer_","fgDeactivationRemovalTimer_","activationAnimationHasEnded_","activationTimerCallback_","runDeactivationUXLogicIfReady_","previousActivationEvent_","isSupported_","isActivated","hasDeactivationUXRun","wasActivatedByPointer","wasElementMadeActive","activationEvent","isProgrammatic","registerRootHandlers_","ROOT","UNBOUNDED","layoutInternal_","clearTimeout","FG_ACTIVATION","deregisterRootHandlers_","deregisterDeactivationHandlers_","removeCssVars_","registerDeactivationHandlers_","keys","k","indexOf","activationState","previousActivationEvent","some","resetActivationState_","checkElementMadeActive_","animateActivation_","key","keyCode","event","VAR_FG_TRANSLATE_START","VAR_FG_TRANSLATE_END","FG_DEACTIVATION","DEACTIVATION_TIMEOUT_MS","translateStart","translateEnd","startPoint","endPoint","getFgTranslationCoordinates_","rmBoundedActivationClasses_","setTimeout","FG_DEACTIVATION_MS","TAP_DELAY_MS","state","evtObject","animateDeactivation_","cancelAnimationFrame","maxDim","Math","max","sqrt","pow","PADDING","getBoundedRadius","INITIAL_ORIGIN_SCALE","updateLayoutCssVars_","VAR_FG_SIZE","VAR_LEFT","VAR_TOP","VAR_FG_SCALE","round","wasScrolled_","scrollHandler_","fixedScrollHandler_","isCollapsed","shortAppBarScrollHandler_","isAlwaysCollapsed","INITIAL_VALUE","lastScrollPosition_","topAppBarHeight_","wasDocked_","isDockedShowing_","currentAppBarOffsetTop_","isCurrentlyBeingResized_","resizeThrottleId_","resizeDebounceId_","topAppBarScrollHandler_","topAppBarResizeHandler_","checkForUpdate_","offscreenBoundaryTop","hasAnyPixelsOffscreen","hasAnyPixelsOnscreen","partiallyShowing","moveTopAppBar_","offset","abs","currentScrollPosition","diff","throttledResizeHandler_","currentHeight"],"mappings":"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","file":"js/mdc-top-app-bar.js","sourcesContent":[" \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 = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap cbe29a369b24fc401605","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint no-unused-vars: [2, {\"args\": \"none\"}] */\n\n/**\n * Adapter for MDC Top App Bar\n *\n * Defines the shape of the adapter expected by the foundation. Implement this\n * adapter to integrate the Top App Bar into your framework. See\n * https://github.com/material-components/material-components-web/blob/master/docs/authoring-components.md\n * for more information.\n *\n * @record\n */\nclass MDCTopAppBarAdapter {\n /**\n * Adds a class to the root Element.\n * @param {string} className\n */\n addClass(className) {}\n\n /**\n * Removes a class from the root Element.\n * @param {string} className\n */\n removeClass(className) {}\n\n /**\n * Returns true if the root Element contains the given class.\n * @param {string} className\n * @return {boolean}\n */\n hasClass(className) {}\n\n /**\n * Sets the specified inline style property on the root Element to the given value.\n * @param {string} property\n * @param {string} value\n */\n setStyle(property, value) {}\n\n /**\n * Gets the height of the top app bar.\n * @return {number}\n */\n getTopAppBarHeight() {}\n\n /**\n * Registers an event handler on the navigation icon element for a given event.\n * @param {string} type\n * @param {function(!Event): undefined} handler\n */\n registerNavigationIconInteractionHandler(type, handler) {}\n\n /**\n * Deregisters an event handler on the navigation icon element for a given event.\n * @param {string} type\n * @param {function(!Event): undefined} handler\n */\n deregisterNavigationIconInteractionHandler(type, handler) {}\n\n /**\n * Emits an event when the navigation icon is clicked.\n */\n notifyNavigationIconClicked() {}\n\n /** @param {function(!Event)} handler */\n registerScrollHandler(handler) {}\n\n /** @param {function(!Event)} handler */\n deregisterScrollHandler(handler) {}\n\n /** @param {function(!Event)} handler */\n registerResizeHandler(handler) {}\n\n /** @param {function(!Event)} handler */\n deregisterResizeHandler(handler) {}\n\n /** @return {number} */\n getViewportScrollY() {}\n\n /** @return {number} */\n getTotalActionItems() {}\n}\n\nexport default MDCTopAppBarAdapter;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/adapter.js","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @enum {string} */\nconst cssClasses = {\n FIXED_CLASS: 'mdc-top-app-bar--fixed',\n FIXED_SCROLLED_CLASS: 'mdc-top-app-bar--fixed-scrolled',\n SHORT_CLASS: 'mdc-top-app-bar--short',\n SHORT_HAS_ACTION_ITEM_CLASS: 'mdc-top-app-bar--short-has-action-item',\n SHORT_COLLAPSED_CLASS: 'mdc-top-app-bar--short-collapsed',\n};\n\n/** @enum {number} */\nconst numbers = {\n DEBOUNCE_THROTTLE_RESIZE_TIME_MS: 100,\n MAX_TOP_APP_BAR_HEIGHT: 128,\n};\n\n/** @enum {string} */\nconst strings = {\n ACTION_ITEM_SELECTOR: '.mdc-top-app-bar__action-item',\n NAVIGATION_EVENT: 'MDCTopAppBar:nav',\n NAVIGATION_ICON_SELECTOR: '.mdc-top-app-bar__navigation-icon',\n ROOT_SELECTOR: '.mdc-top-app-bar',\n TITLE_SELECTOR: '.mdc-top-app-bar__title',\n};\n\nexport {strings, cssClasses, numbers};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/constants.js","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {strings, cssClasses, numbers} from './constants';\nimport MDCTopAppBarAdapter from './adapter';\nimport MDCFoundation from '@material/base/foundation';\n\n/**\n * @extends {MDCFoundation}\n */\nclass MDCTopAppBarBaseFoundation extends MDCFoundation {\n /** @return enum {string} */\n static get strings() {\n return strings;\n }\n\n /** @return enum {string} */\n static get cssClasses() {\n return cssClasses;\n }\n\n /** @return enum {number} */\n static get numbers() {\n return numbers;\n }\n\n /**\n * {@see MDCTopAppBarAdapter} for typing information on parameters and return\n * types.\n * @return {!MDCTopAppBarAdapter}\n */\n static get defaultAdapter() {\n return /** @type {!MDCTopAppBarAdapter} */ ({\n hasClass: (/* className: string */) => {},\n addClass: (/* className: string */) => {},\n removeClass: (/* className: string */) => {},\n setStyle: (/* property: string, value: string */) => {},\n getTopAppBarHeight: () => {},\n registerNavigationIconInteractionHandler: (/* type: string, handler: EventListener */) => {},\n deregisterNavigationIconInteractionHandler: (/* type: string, handler: EventListener */) => {},\n notifyNavigationIconClicked: () => {},\n registerScrollHandler: (/* handler: EventListener */) => {},\n deregisterScrollHandler: (/* handler: EventListener */) => {},\n registerResizeHandler: (/* handler: EventListener */) => {},\n deregisterResizeHandler: (/* handler: EventListener */) => {},\n getViewportScrollY: () => /* number */ 0,\n getTotalActionItems: () => /* number */ 0,\n });\n }\n\n /**\n * @param {!MDCTopAppBarAdapter} adapter\n */\n constructor(/** @type {!MDCTopAppBarAdapter} */ adapter) {\n super(Object.assign(MDCTopAppBarBaseFoundation.defaultAdapter, adapter));\n\n this.navClickHandler_ = () => this.adapter_.notifyNavigationIconClicked();\n }\n\n init() {\n this.adapter_.registerNavigationIconInteractionHandler('click', this.navClickHandler_);\n }\n\n destroy() {\n this.adapter_.deregisterNavigationIconInteractionHandler('click', this.navClickHandler_);\n }\n}\n\nexport default MDCTopAppBarBaseFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/foundation.js","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @template A\n */\nclass MDCFoundation {\n /** @return enum{cssClasses} */\n static get cssClasses() {\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 /** @return enum{strings} */\n static get strings() {\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 /** @return enum{numbers} */\n static get numbers() {\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 /** @return {!Object} */\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 /**\n * @param {A=} adapter\n */\n constructor(adapter = {}) {\n /** @protected {!A} */\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\nexport default MDCFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/base/foundation.js","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport MDCFoundation from './foundation';\n\n/**\n * @template F\n */\nclass MDCComponent {\n /**\n * @param {!Element} root\n * @return {!MDCComponent}\n */\n static attachTo(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 MDCFoundation());\n }\n\n /**\n * @param {!Element} root\n * @param {F=} foundation\n * @param {...?} args\n */\n constructor(root, foundation = undefined, ...args) {\n /** @protected {!Element} */\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 /** @protected {!F} */\n this.foundation_ = foundation === undefined ? this.getDefaultFoundation() : foundation;\n this.foundation_.init();\n this.initialSyncWithDOM();\n }\n\n initialize(/* ...args */) {\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 /**\n * @return {!F} foundation\n */\n getDefaultFoundation() {\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 * @param {string} evtType\n * @param {!Function} handler\n */\n listen(evtType, handler) {\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 * @param {string} evtType\n * @param {!Function} handler\n */\n unlisten(evtType, handler) {\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,\n * with the given data.\n * @param {string} evtType\n * @param {!Object} evtData\n * @param {boolean=} shouldBubble\n */\n emit(evtType, evtData, shouldBubble = false) {\n let evt;\n if (typeof CustomEvent === 'function') {\n evt = new CustomEvent(evtType, {\n detail: evtData,\n bubbles: shouldBubble,\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\nexport default MDCComponent;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/base/component.js","/**\n * @license\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint no-unused-vars: [2, {\"args\": \"none\"}] */\n\n/**\n * Adapter for MDC Ripple. Provides an interface for managing\n * - classes\n * - dom\n * - CSS variables\n * - position\n * - dimensions\n * - scroll position\n * - event handlers\n * - unbounded, active and disabled states\n *\n * Additionally, provides type information for the adapter to the Closure\n * compiler.\n *\n * Implement this adapter for your framework of choice to delegate updates to\n * the component in your framework of choice. See architecture documentation\n * for more details.\n * https://github.com/material-components/material-components-web/blob/master/docs/code/architecture.md\n *\n * @record\n */\nclass MDCRippleAdapter {\n /** @return {boolean} */\n browserSupportsCssVars() {}\n\n /** @return {boolean} */\n isUnbounded() {}\n\n /** @return {boolean} */\n isSurfaceActive() {}\n\n /** @return {boolean} */\n isSurfaceDisabled() {}\n\n /** @param {string} className */\n addClass(className) {}\n\n /** @param {string} className */\n removeClass(className) {}\n\n /** @param {!EventTarget} target */\n containsEventTarget(target) {}\n\n /**\n * @param {string} evtType\n * @param {!Function} handler\n */\n registerInteractionHandler(evtType, handler) {}\n\n /**\n * @param {string} evtType\n * @param {!Function} handler\n */\n deregisterInteractionHandler(evtType, handler) {}\n\n /**\n * @param {string} evtType\n * @param {!Function} handler\n */\n registerDocumentInteractionHandler(evtType, handler) {}\n\n /**\n * @param {string} evtType\n * @param {!Function} handler\n */\n deregisterDocumentInteractionHandler(evtType, handler) {}\n\n /**\n * @param {!Function} handler\n */\n registerResizeHandler(handler) {}\n\n /**\n * @param {!Function} handler\n */\n deregisterResizeHandler(handler) {}\n\n /**\n * @param {string} varName\n * @param {?number|string} value\n */\n updateCssVariable(varName, value) {}\n\n /** @return {!ClientRect} */\n computeBoundingRect() {}\n\n /** @return {{x: number, y: number}} */\n getWindowPageOffset() {}\n}\n\nexport default MDCRippleAdapter;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/ripple/adapter.js","/**\n * @license\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Stores result from supportsCssVariables to avoid redundant processing to detect CSS custom variable support.\n * @private {boolean|undefined}\n */\nlet supportsCssVariables_;\n\n/**\n * Stores result from applyPassive to avoid redundant processing to detect passive event listener support.\n * @private {boolean|undefined}\n */\nlet supportsPassive_;\n\n/**\n * @param {!Window} windowObj\n * @return {boolean}\n */\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 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 node.remove();\n return hasPseudoVarBug;\n}\n\n/**\n * @param {!Window} windowObj\n * @param {boolean=} forceRefresh\n * @return {boolean|undefined}\n */\n\nfunction supportsCssVariables(windowObj, forceRefresh = false) {\n let supportsCssVariables = supportsCssVariables_;\n if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\n return supportsCssVariables;\n }\n\n const supportsFunctionPresent = windowObj.CSS && typeof windowObj.CSS.supports === 'function';\n if (!supportsFunctionPresent) {\n return;\n }\n\n const explicitlySupportsCssVars = windowObj.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 windowObj.CSS.supports('(--css-vars: yes)') &&\n windowObj.CSS.supports('color', '#00000000')\n );\n\n if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) {\n supportsCssVariables = !detectEdgePseudoVarBug(windowObj);\n } else {\n supportsCssVariables = false;\n }\n\n if (!forceRefresh) {\n supportsCssVariables_ = supportsCssVariables;\n }\n return supportsCssVariables;\n}\n\n//\n/**\n * Determine whether the current browser supports passive event listeners, and if so, use them.\n * @param {!Window=} globalObj\n * @param {boolean=} forceRefresh\n * @return {boolean|{passive: boolean}}\n */\nfunction applyPassive(globalObj = window, forceRefresh = false) {\n if (supportsPassive_ === undefined || forceRefresh) {\n let isSupported = false;\n try {\n globalObj.document.addEventListener('test', null, {get passive() {\n isSupported = true;\n }});\n } catch (e) { }\n\n supportsPassive_ = isSupported;\n }\n\n return supportsPassive_ ? {passive: true} : false;\n}\n\n/**\n * @param {!Object} HTMLElementPrototype\n * @return {!Array}\n */\nfunction getMatchesProperty(HTMLElementPrototype) {\n return [\n 'webkitMatchesSelector', 'msMatchesSelector', 'matches',\n ].filter((p) => p in HTMLElementPrototype).pop();\n}\n\n/**\n * @param {!Event} ev\n * @param {{x: number, y: number}} pageOffset\n * @param {!ClientRect} clientRect\n * @return {{x: number, y: number}}\n */\nfunction getNormalizedEventCoords(ev, pageOffset, clientRect) {\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 (ev.type === 'touchstart') {\n normalizedX = ev.changedTouches[0].pageX - documentX;\n normalizedY = ev.changedTouches[0].pageY - documentY;\n } else {\n normalizedX = ev.pageX - documentX;\n normalizedY = ev.pageY - documentY;\n }\n\n return {x: normalizedX, y: normalizedY};\n}\n\nexport {supportsCssVariables, applyPassive, getMatchesProperty, getNormalizedEventCoords};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/ripple/util.js","import { MDCTopAppBar } from \"@material/top-app-bar\";\n\nif (!(\"mdc\" in window))\n\twindow.mdc = { MDCTopAppBar };\nelse if (!(\"MDCTopAppBar\" in window.mdc))\n\twindow.mdc.MDCTopAppBar = MDCTopAppBar;\n\n\n// WEBPACK FOOTER //\n// ./module/mdc-top-app-bar.js","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport MDCTopAppBarAdapter from './adapter';\nimport MDCComponent from '@material/base/component';\nimport {MDCRipple} from '@material/ripple/index';\nimport {cssClasses, strings} from './constants';\nimport MDCTopAppBarBaseFoundation from './foundation';\nimport MDCFixedTopAppBarFoundation from './fixed/foundation';\nimport MDCShortTopAppBarFoundation from './short/foundation';\nimport MDCTopAppBarFoundation from './standard/foundation';\n\n/**\n * @extends {MDCComponent}\n * @final\n */\nclass MDCTopAppBar extends MDCComponent {\n /**\n * @param {...?} args\n */\n constructor(...args) {\n super(...args);\n /** @private {?Element} */\n this.navIcon_;\n /** @type {?Array} */\n this.iconRipples_;\n }\n\n initialize(\n rippleFactory = (el) => MDCRipple.attachTo(el)) {\n this.navIcon_ = this.root_.querySelector(strings.NAVIGATION_ICON_SELECTOR);\n\n // Get all icons in the toolbar and instantiate the ripples\n const icons = [].slice.call(this.root_.querySelectorAll(strings.ACTION_ITEM_SELECTOR));\n if (this.navIcon_) {\n icons.push(this.navIcon_);\n }\n\n this.iconRipples_ = icons.map((icon) => {\n const ripple = rippleFactory(icon);\n ripple.unbounded = true;\n return ripple;\n });\n }\n\n destroy() {\n this.iconRipples_.forEach((iconRipple) => iconRipple.destroy());\n super.destroy();\n }\n\n /**\n * @param {!Element} root\n * @return {!MDCTopAppBar}\n */\n static attachTo(root) {\n return new MDCTopAppBar(root);\n }\n\n /**\n * @return {!MDCTopAppBarBaseFoundation}\n */\n getDefaultFoundation() {\n /** @type {!MDCTopAppBarAdapter} */\n const adapter = /** @type {!MDCTopAppBarAdapter} */ (Object.assign({\n hasClass: (className) => this.root_.classList.contains(className),\n addClass: (className) => this.root_.classList.add(className),\n removeClass: (className) => this.root_.classList.remove(className),\n setStyle: (property, value) => this.root_.style.setProperty(property, value),\n getTopAppBarHeight: () => this.root_.clientHeight,\n registerNavigationIconInteractionHandler: (evtType, handler) => {\n if (this.navIcon_) {\n this.navIcon_.addEventListener(evtType, handler);\n }\n },\n deregisterNavigationIconInteractionHandler: (evtType, handler) => {\n if (this.navIcon_) {\n this.navIcon_.removeEventListener(evtType, handler);\n }\n },\n notifyNavigationIconClicked: () => {\n this.emit(strings.NAVIGATION_EVENT, {});\n },\n registerScrollHandler: (handler) => window.addEventListener('scroll', handler),\n deregisterScrollHandler: (handler) => window.removeEventListener('scroll', handler),\n registerResizeHandler: (handler) => window.addEventListener('resize', handler),\n deregisterResizeHandler: (handler) => window.removeEventListener('resize', handler),\n getViewportScrollY: () => window.pageYOffset,\n getTotalActionItems: () =>\n this.root_.querySelectorAll(strings.ACTION_ITEM_SELECTOR).length,\n })\n );\n\n /** @type {!MDCTopAppBarBaseFoundation} */\n let foundation;\n if (this.root_.classList.contains(cssClasses.SHORT_CLASS)) {\n foundation = new MDCShortTopAppBarFoundation(adapter);\n } else if (this.root_.classList.contains(cssClasses.FIXED_CLASS)) {\n foundation = new MDCFixedTopAppBarFoundation(adapter);\n } else {\n foundation = new MDCTopAppBarFoundation(adapter);\n }\n\n return foundation;\n }\n}\n\nexport {MDCTopAppBar, MDCTopAppBarBaseFoundation,\n MDCTopAppBarFoundation, MDCFixedTopAppBarFoundation,\n MDCShortTopAppBarFoundation};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/index.js","/**\n * @license\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport MDCComponent from '@material/base/component';\nimport MDCRippleAdapter from './adapter';\nimport MDCRippleFoundation from './foundation';\nimport * as util from './util';\n\n/**\n * @extends MDCComponent\n */\nclass MDCRipple extends MDCComponent {\n /** @param {...?} args */\n constructor(...args) {\n super(...args);\n\n /** @type {boolean} */\n this.disabled = false;\n\n /** @private {boolean} */\n this.unbounded_;\n }\n\n /**\n * @param {!Element} root\n * @param {{isUnbounded: (boolean|undefined)}=} options\n * @return {!MDCRipple}\n */\n static attachTo(root, {isUnbounded = undefined} = {}) {\n const ripple = new MDCRipple(root);\n // Only override unbounded behavior if option is explicitly specified\n if (isUnbounded !== undefined) {\n ripple.unbounded = /** @type {boolean} */ (isUnbounded);\n }\n return ripple;\n }\n\n /**\n * @param {!RippleCapableSurface} instance\n * @return {!MDCRippleAdapter}\n */\n static createAdapter(instance) {\n const MATCHES = util.getMatchesProperty(HTMLElement.prototype);\n\n return {\n browserSupportsCssVars: () => util.supportsCssVariables(window),\n isUnbounded: () => instance.unbounded,\n isSurfaceActive: () => instance.root_[MATCHES](':active'),\n isSurfaceDisabled: () => instance.disabled,\n addClass: (className) => instance.root_.classList.add(className),\n removeClass: (className) => instance.root_.classList.remove(className),\n containsEventTarget: (target) => instance.root_.contains(target),\n registerInteractionHandler: (evtType, handler) =>\n instance.root_.addEventListener(evtType, handler, util.applyPassive()),\n deregisterInteractionHandler: (evtType, handler) =>\n instance.root_.removeEventListener(evtType, handler, util.applyPassive()),\n registerDocumentInteractionHandler: (evtType, handler) =>\n document.documentElement.addEventListener(evtType, handler, util.applyPassive()),\n deregisterDocumentInteractionHandler: (evtType, handler) =>\n document.documentElement.removeEventListener(evtType, handler, util.applyPassive()),\n registerResizeHandler: (handler) => window.addEventListener('resize', handler),\n deregisterResizeHandler: (handler) => window.removeEventListener('resize', handler),\n updateCssVariable: (varName, value) => instance.root_.style.setProperty(varName, value),\n computeBoundingRect: () => instance.root_.getBoundingClientRect(),\n getWindowPageOffset: () => ({x: window.pageXOffset, y: window.pageYOffset}),\n };\n }\n\n /** @return {boolean} */\n get unbounded() {\n return this.unbounded_;\n }\n\n /** @param {boolean} unbounded */\n set unbounded(unbounded) {\n this.unbounded_ = Boolean(unbounded);\n this.setUnbounded_();\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 * @private\n */\n setUnbounded_() {\n this.foundation_.setUnbounded(this.unbounded_);\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 /** @return {!MDCRippleFoundation} */\n getDefaultFoundation() {\n return new MDCRippleFoundation(MDCRipple.createAdapter(this));\n }\n\n initialSyncWithDOM() {\n this.unbounded = 'mdcRippleIsUnbounded' in this.root_.dataset;\n }\n}\n\n/**\n * See Material Design spec for more details on when to use ripples.\n * https://material.io/guidelines/motion/choreography.html#choreography-creation\n * @record\n */\nclass RippleCapableSurface {}\n\n/** @protected {!Element} */\nRippleCapableSurface.prototype.root_;\n\n/**\n * Whether or not the ripple bleeds out of the bounds of the element.\n * @type {boolean|undefined}\n */\nRippleCapableSurface.prototype.unbounded;\n\n/**\n * Whether or not the ripple is attached to a disabled component.\n * @type {boolean|undefined}\n */\nRippleCapableSurface.prototype.disabled;\n\nexport {MDCRipple, MDCRippleFoundation, RippleCapableSurface, util};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/ripple/index.js","/**\n * @license\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport MDCFoundation from '@material/base/foundation';\nimport MDCRippleAdapter from './adapter';\nimport {cssClasses, strings, numbers} from './constants';\nimport {getNormalizedEventCoords} from './util';\n\n/**\n * @typedef {{\n * isActivated: (boolean|undefined),\n * hasDeactivationUXRun: (boolean|undefined),\n * wasActivatedByPointer: (boolean|undefined),\n * wasElementMadeActive: (boolean|undefined),\n * activationEvent: Event,\n * isProgrammatic: (boolean|undefined)\n * }}\n */\nlet ActivationStateType;\n\n/**\n * @typedef {{\n * activate: (string|undefined),\n * deactivate: (string|undefined),\n * focus: (string|undefined),\n * blur: (string|undefined)\n * }}\n */\nlet ListenerInfoType;\n\n/**\n * @typedef {{\n * activate: function(!Event),\n * deactivate: function(!Event),\n * focus: function(),\n * blur: function()\n * }}\n */\nlet ListenersType;\n\n/**\n * @typedef {{\n * x: number,\n * y: number\n * }}\n */\nlet PointType;\n\n// Activation events registered on the root element of each instance for activation\nconst ACTIVATION_EVENT_TYPES = ['touchstart', 'pointerdown', 'mousedown', 'keydown'];\n\n// Deactivation events registered on documentElement when a pointer-related down event occurs\nconst POINTER_DEACTIVATION_EVENT_TYPES = ['touchend', 'pointerup', 'mouseup'];\n\n// Tracks activations that have occurred on the current frame, to avoid simultaneous nested activations\n/** @type {!Array} */\nlet activatedTargets = [];\n\n/**\n * @extends {MDCFoundation}\n */\nclass MDCRippleFoundation extends MDCFoundation {\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() {\n return {\n browserSupportsCssVars: () => /* boolean - cached */ {},\n isUnbounded: () => /* boolean */ {},\n isSurfaceActive: () => /* boolean */ {},\n isSurfaceDisabled: () => /* boolean */ {},\n addClass: (/* className: string */) => {},\n removeClass: (/* className: string */) => {},\n containsEventTarget: (/* target: !EventTarget */) => {},\n registerInteractionHandler: (/* evtType: string, handler: EventListener */) => {},\n deregisterInteractionHandler: (/* evtType: string, handler: EventListener */) => {},\n registerDocumentInteractionHandler: (/* evtType: string, handler: EventListener */) => {},\n deregisterDocumentInteractionHandler: (/* evtType: string, handler: EventListener */) => {},\n registerResizeHandler: (/* handler: EventListener */) => {},\n deregisterResizeHandler: (/* handler: EventListener */) => {},\n updateCssVariable: (/* varName: string, value: string */) => {},\n computeBoundingRect: () => /* ClientRect */ {},\n getWindowPageOffset: () => /* {x: number, y: number} */ {},\n };\n }\n\n constructor(adapter) {\n super(Object.assign(MDCRippleFoundation.defaultAdapter, adapter));\n\n /** @private {number} */\n this.layoutFrame_ = 0;\n\n /** @private {!ClientRect} */\n this.frame_ = /** @type {!ClientRect} */ ({width: 0, height: 0});\n\n /** @private {!ActivationStateType} */\n this.activationState_ = this.defaultActivationState_();\n\n /** @private {number} */\n this.initialSize_ = 0;\n\n /** @private {number} */\n this.maxRadius_ = 0;\n\n /** @private {function(!Event)} */\n this.activateHandler_ = (e) => this.activate_(e);\n\n /** @private {function(!Event)} */\n this.deactivateHandler_ = (e) => this.deactivate_(e);\n\n /** @private {function(?Event=)} */\n this.focusHandler_ = () => requestAnimationFrame(\n () => this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED)\n );\n\n /** @private {function(?Event=)} */\n this.blurHandler_ = () => requestAnimationFrame(\n () => this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED)\n );\n\n /** @private {!Function} */\n this.resizeHandler_ = () => this.layout();\n\n /** @private {{left: number, top:number}} */\n this.unboundedCoords_ = {\n left: 0,\n top: 0,\n };\n\n /** @private {number} */\n this.fgScale_ = 0;\n\n /** @private {number} */\n this.activationTimer_ = 0;\n\n /** @private {number} */\n this.fgDeactivationRemovalTimer_ = 0;\n\n /** @private {boolean} */\n this.activationAnimationHasEnded_ = false;\n\n /** @private {!Function} */\n this.activationTimerCallback_ = () => {\n this.activationAnimationHasEnded_ = true;\n this.runDeactivationUXLogicIfReady_();\n };\n\n /** @private {?Event} */\n this.previousActivationEvent_ = null;\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 * @return {boolean}\n * @private\n */\n isSupported_() {\n return this.adapter_.browserSupportsCssVars();\n }\n\n /**\n * @return {!ActivationStateType}\n */\n defaultActivationState_() {\n return {\n isActivated: false,\n hasDeactivationUXRun: false,\n wasActivatedByPointer: false,\n wasElementMadeActive: false,\n activationEvent: null,\n isProgrammatic: false,\n };\n }\n\n init() {\n if (!this.isSupported_()) {\n return;\n }\n this.registerRootHandlers_();\n\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 destroy() {\n if (!this.isSupported_()) {\n return;\n }\n\n if (this.activationTimer_) {\n clearTimeout(this.activationTimer_);\n this.activationTimer_ = 0;\n const {FG_ACTIVATION} = MDCRippleFoundation.cssClasses;\n this.adapter_.removeClass(FG_ACTIVATION);\n }\n\n this.deregisterRootHandlers_();\n this.deregisterDeactivationHandlers_();\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 /** @private */\n registerRootHandlers_() {\n ACTIVATION_EVENT_TYPES.forEach((type) => {\n this.adapter_.registerInteractionHandler(type, this.activateHandler_);\n });\n this.adapter_.registerInteractionHandler('focus', this.focusHandler_);\n this.adapter_.registerInteractionHandler('blur', this.blurHandler_);\n\n if (this.adapter_.isUnbounded()) {\n this.adapter_.registerResizeHandler(this.resizeHandler_);\n }\n }\n\n /**\n * @param {!Event} e\n * @private\n */\n registerDeactivationHandlers_(e) {\n if (e.type === 'keydown') {\n this.adapter_.registerInteractionHandler('keyup', this.deactivateHandler_);\n } else {\n POINTER_DEACTIVATION_EVENT_TYPES.forEach((type) => {\n this.adapter_.registerDocumentInteractionHandler(type, this.deactivateHandler_);\n });\n }\n }\n\n /** @private */\n deregisterRootHandlers_() {\n ACTIVATION_EVENT_TYPES.forEach((type) => {\n this.adapter_.deregisterInteractionHandler(type, 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 */\n deregisterDeactivationHandlers_() {\n this.adapter_.deregisterInteractionHandler('keyup', this.deactivateHandler_);\n POINTER_DEACTIVATION_EVENT_TYPES.forEach((type) => {\n this.adapter_.deregisterDocumentInteractionHandler(type, this.deactivateHandler_);\n });\n }\n\n /** @private */\n removeCssVars_() {\n const {strings} = MDCRippleFoundation;\n Object.keys(strings).forEach((k) => {\n if (k.indexOf('VAR_') === 0) {\n this.adapter_.updateCssVariable(strings[k], null);\n }\n });\n }\n\n /**\n * @param {?Event} e\n * @private\n */\n activate_(e) {\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 && e && previousActivationEvent.type !== e.type;\n if (isSameInteraction) {\n return;\n }\n\n activationState.isActivated = true;\n activationState.isProgrammatic = e === null;\n activationState.activationEvent = e;\n activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : (\n e.type === 'mousedown' || e.type === 'touchstart' || e.type === 'pointerdown'\n );\n\n const hasActivatedChild =\n e && activatedTargets.length > 0 && activatedTargets.some((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 (e) {\n activatedTargets.push(/** @type {!EventTarget} */ (e.target));\n this.registerDeactivationHandlers_(e);\n }\n\n activationState.wasElementMadeActive = this.checkElementMadeActive_(e);\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 && (e.key === ' ' || e.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_(e);\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 /**\n * @param {?Event} e\n * @private\n */\n checkElementMadeActive_(e) {\n return (e && e.type === 'keydown') ? this.adapter_.isSurfaceActive() : true;\n }\n\n /**\n * @param {?Event=} event Optional event containing position information.\n */\n activate(event = null) {\n this.activate_(event);\n }\n\n /** @private */\n 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 /**\n * @private\n * @return {{startPoint: PointType, endPoint: PointType}}\n */\n getFgTranslationCoordinates_() {\n const {activationEvent, wasActivatedByPointer} = this.activationState_;\n\n let startPoint;\n if (wasActivatedByPointer) {\n startPoint = getNormalizedEventCoords(\n /** @type {!Event} */ (activationEvent),\n this.adapter_.getWindowPageOffset(), 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 */\n 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 */\n rmBoundedActivationClasses_() {\n const {FG_ACTIVATION} = MDCRippleFoundation.cssClasses;\n this.adapter_.removeClass(FG_ACTIVATION);\n this.activationAnimationHasEnded_ = false;\n this.adapter_.computeBoundingRect();\n }\n\n 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_ = null, MDCRippleFoundation.numbers.TAP_DELAY_MS);\n }\n\n /**\n * @param {?Event} e\n * @private\n */\n deactivate_(e) {\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 = /** @type {!ActivationStateType} */ (Object.assign({}, activationState));\n\n if (activationState.isProgrammatic) {\n const evtObject = null;\n requestAnimationFrame(() => this.animateDeactivation_(evtObject, state));\n this.resetActivationState_();\n } else {\n this.deregisterDeactivationHandlers_();\n requestAnimationFrame(() => {\n this.activationState_.hasDeactivationUXRun = true;\n this.animateDeactivation_(e, state);\n this.resetActivationState_();\n });\n }\n }\n\n /**\n * @param {?Event=} event Optional event containing position information.\n */\n deactivate(event = null) {\n this.deactivate_(event);\n }\n\n /**\n * @param {Event} e\n * @param {!ActivationStateType} options\n * @private\n */\n animateDeactivation_(e, {wasActivatedByPointer, wasElementMadeActive}) {\n if (wasActivatedByPointer || wasElementMadeActive) {\n this.runDeactivationUXLogicIfReady_();\n }\n }\n\n layout() {\n if (this.layoutFrame_) {\n cancelAnimationFrame(this.layoutFrame_);\n }\n this.layoutFrame_ = requestAnimationFrame(() => {\n this.layoutInternal_();\n this.layoutFrame_ = 0;\n });\n }\n\n /** @private */\n 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_ = maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE;\n this.fgScale_ = this.maxRadius_ / this.initialSize_;\n\n this.updateLayoutCssVars_();\n }\n\n /** @private */\n 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 /** @param {boolean} unbounded */\n setUnbounded(unbounded) {\n const {UNBOUNDED} = MDCRippleFoundation.cssClasses;\n if (unbounded) {\n this.adapter_.addClass(UNBOUNDED);\n } else {\n this.adapter_.removeClass(UNBOUNDED);\n }\n }\n}\n\nexport default MDCRippleFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/ripple/foundation.js","/**\n * @license\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst 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 ROOT: 'mdc-ripple-upgraded',\n UNBOUNDED: 'mdc-ripple-upgraded--unbounded',\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};\n\nconst strings = {\n VAR_LEFT: '--mdc-ripple-left',\n VAR_TOP: '--mdc-ripple-top',\n VAR_FG_SIZE: '--mdc-ripple-fg-size',\n VAR_FG_SCALE: '--mdc-ripple-fg-scale',\n VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\n VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\n};\n\nconst numbers = {\n PADDING: 10,\n INITIAL_ORIGIN_SCALE: 0.6,\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 TAP_DELAY_MS: 300, // Delay between touch and simulated mouse events on touch devices\n};\n\nexport {cssClasses, strings, numbers};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/ripple/constants.js","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {cssClasses} from '../constants';\nimport MDCTopAppBarAdapter from '../adapter';\nimport MDCTopAppBarFoundation from '../foundation';\n\n/**\n * @extends {MDCTopAppBarFoundation}\n * @final\n */\nclass MDCFixedTopAppBarFoundation extends MDCTopAppBarFoundation {\n /**\n * @param {!MDCTopAppBarAdapter} adapter\n */\n constructor(adapter) {\n super(adapter);\n /** State variable for the previous scroll iteration top app bar state */\n this.wasScrolled_ = false;\n\n this.scrollHandler_ = () => this.fixedScrollHandler_();\n }\n\n init() {\n super.init();\n this.adapter_.registerScrollHandler(this.scrollHandler_);\n }\n\n destroy() {\n super.destroy();\n this.adapter_.deregisterScrollHandler(this.scrollHandler_);\n }\n\n /**\n * Scroll handler for applying/removing the modifier class\n * on the fixed top app bar.\n */\n fixedScrollHandler_() {\n const currentScroll = this.adapter_.getViewportScrollY();\n\n if (currentScroll <= 0) {\n if (this.wasScrolled_) {\n this.adapter_.removeClass(cssClasses.FIXED_SCROLLED_CLASS);\n this.wasScrolled_ = false;\n }\n } else {\n if (!this.wasScrolled_) {\n this.adapter_.addClass(cssClasses.FIXED_SCROLLED_CLASS);\n this.wasScrolled_ = true;\n }\n }\n }\n}\n\nexport default MDCFixedTopAppBarFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/fixed/foundation.js","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport MDCTopAppBarAdapter from '../adapter';\nimport MDCTopAppBarBaseFoundation from '../foundation';\nimport {cssClasses} from '../constants';\n\n/**\n * @extends {MDCTopAppBarBaseFoundation}\n * @final\n */\nclass MDCShortTopAppBarFoundation extends MDCTopAppBarBaseFoundation {\n /**\n * @param {!MDCTopAppBarAdapter} adapter\n */\n constructor(adapter) {\n super(adapter);\n // State variable for the current top app bar state\n this.isCollapsed = false;\n\n this.scrollHandler_ = () => this.shortAppBarScrollHandler_();\n }\n\n init() {\n super.init();\n const isAlwaysCollapsed = this.adapter_.hasClass(cssClasses.SHORT_COLLAPSED_CLASS);\n\n if (this.adapter_.getTotalActionItems() > 0) {\n this.adapter_.addClass(cssClasses.SHORT_HAS_ACTION_ITEM_CLASS);\n }\n\n if (!isAlwaysCollapsed) {\n this.adapter_.registerScrollHandler(this.scrollHandler_);\n this.shortAppBarScrollHandler_();\n }\n }\n\n destroy() {\n super.destroy();\n this.adapter_.deregisterScrollHandler(this.scrollHandler_);\n }\n\n\n /**\n * Scroll handler for applying/removing the collapsed modifier class\n * on the short top app bar.\n * @private\n */\n shortAppBarScrollHandler_() {\n const currentScroll = this.adapter_.getViewportScrollY();\n\n if (currentScroll <= 0) {\n if (this.isCollapsed) {\n this.adapter_.removeClass(cssClasses.SHORT_COLLAPSED_CLASS);\n this.isCollapsed = false;\n }\n } else {\n if (!this.isCollapsed) {\n this.adapter_.addClass(cssClasses.SHORT_COLLAPSED_CLASS);\n this.isCollapsed = true;\n }\n }\n }\n}\n\nexport default MDCShortTopAppBarFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/short/foundation.js","/**\n * @license\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport MDCTopAppBarAdapter from '../adapter';\nimport MDCTopAppBarBaseFoundation from '../foundation';\nimport {numbers} from '../constants';\n\nconst INITIAL_VALUE = 0;\n/**\n * @extends {MDCTopAppBarBaseFoundation}\n * @final\n */\nclass MDCTopAppBarFoundation extends MDCTopAppBarBaseFoundation {\n /**\n * @param {!MDCTopAppBarAdapter} adapter\n */\n constructor(adapter) {\n super(adapter);\n /**\n * Used for diffs of current scroll position vs previous scroll position\n * @private {number}\n */\n this.lastScrollPosition_ = this.adapter_.getViewportScrollY();\n\n /**\n * Used to verify when the top app bar is completely showing or completely hidden\n * @private {number}\n */\n this.topAppBarHeight_ = this.adapter_.getTopAppBarHeight();\n\n /**\n * wasDocked_ is used to indicate if the top app bar was docked in the previous\n * scroll handler iteration.\n * @private {boolean}\n */\n this.wasDocked_ = true;\n\n /**\n * isDockedShowing_ is used to indicate if the top app bar is docked in the fully\n * shown position.\n * @private {boolean}\n */\n this.isDockedShowing_ = true;\n\n /**\n * Variable for current scroll position of the top app bar\n * @private {number}\n */\n this.currentAppBarOffsetTop_ = 0;\n\n /**\n * Used to prevent the top app bar from being scrolled out of view during resize events\n * @private {boolean} */\n this.isCurrentlyBeingResized_ = false;\n\n /**\n * The timeout that's used to throttle the resize events\n * @private {number}\n */\n this.resizeThrottleId_ = INITIAL_VALUE;\n\n /**\n * The timeout that's used to debounce toggling the isCurrentlyBeingResized_ variable after a resize\n * @private {number}\n */\n this.resizeDebounceId_ = INITIAL_VALUE;\n\n this.scrollHandler_ = () => this.topAppBarScrollHandler_();\n this.resizeHandler_ = () => this.topAppBarResizeHandler_();\n }\n\n init() {\n super.init();\n this.adapter_.registerScrollHandler(this.scrollHandler_);\n this.adapter_.registerResizeHandler(this.resizeHandler_);\n }\n\n destroy() {\n super.destroy();\n this.adapter_.deregisterScrollHandler(this.scrollHandler_);\n this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n this.adapter_.setStyle('top', '');\n }\n\n /**\n * Function to determine if the DOM needs to update.\n * @return {boolean}\n * @private\n */\n checkForUpdate_() {\n const offscreenBoundaryTop = -this.topAppBarHeight_;\n const hasAnyPixelsOffscreen = this.currentAppBarOffsetTop_ < 0;\n const hasAnyPixelsOnscreen = this.currentAppBarOffsetTop_ > offscreenBoundaryTop;\n const partiallyShowing = hasAnyPixelsOffscreen && hasAnyPixelsOnscreen;\n\n // If it's partially showing, it can't be docked.\n if (partiallyShowing) {\n this.wasDocked_ = false;\n } else {\n // Not previously docked and not partially showing, it's now docked.\n if (!this.wasDocked_) {\n this.wasDocked_ = true;\n return true;\n } else if (this.isDockedShowing_ !== hasAnyPixelsOnscreen) {\n this.isDockedShowing_ = hasAnyPixelsOnscreen;\n return true;\n }\n }\n\n return partiallyShowing;\n }\n\n /**\n * Function to move the top app bar if needed.\n * @private\n */\n moveTopAppBar_() {\n if (this.checkForUpdate_()) {\n // Once the top app bar is fully hidden we use the max potential top app bar height as our offset\n // so the top app bar doesn't show if the window resizes and the new height > the old height.\n let offset = this.currentAppBarOffsetTop_;\n if (Math.abs(offset) >= this.topAppBarHeight_) {\n offset = -numbers.MAX_TOP_APP_BAR_HEIGHT;\n }\n\n this.adapter_.setStyle('top', offset + 'px');\n }\n }\n\n /**\n * Scroll handler for the default scroll behavior of the top app bar.\n * @private\n */\n topAppBarScrollHandler_() {\n const currentScrollPosition = Math.max(this.adapter_.getViewportScrollY(), 0);\n const diff = currentScrollPosition - this.lastScrollPosition_;\n this.lastScrollPosition_ = currentScrollPosition;\n\n // If the window is being resized the lastScrollPosition_ needs to be updated but the\n // current scroll of the top app bar should stay in the same position.\n if (!this.isCurrentlyBeingResized_) {\n this.currentAppBarOffsetTop_ -= diff;\n\n if (this.currentAppBarOffsetTop_ > 0) {\n this.currentAppBarOffsetTop_ = 0;\n } else if (Math.abs(this.currentAppBarOffsetTop_) > this.topAppBarHeight_) {\n this.currentAppBarOffsetTop_ = -this.topAppBarHeight_;\n }\n\n this.moveTopAppBar_();\n }\n }\n\n /**\n * Top app bar resize handler that throttle/debounce functions that execute updates.\n * @private\n */\n topAppBarResizeHandler_() {\n // Throttle resize events 10 p/s\n if (!this.resizeThrottleId_) {\n this.resizeThrottleId_ = setTimeout(() => {\n this.resizeThrottleId_ = INITIAL_VALUE;\n this.throttledResizeHandler_();\n }, numbers.DEBOUNCE_THROTTLE_RESIZE_TIME_MS);\n }\n\n this.isCurrentlyBeingResized_ = true;\n\n if (this.resizeDebounceId_) {\n clearTimeout(this.resizeDebounceId_);\n }\n\n this.resizeDebounceId_ = setTimeout(() => {\n this.topAppBarScrollHandler_();\n this.isCurrentlyBeingResized_ = false;\n this.resizeDebounceId_ = INITIAL_VALUE;\n }, numbers.DEBOUNCE_THROTTLE_RESIZE_TIME_MS);\n }\n\n /**\n * Throttled function that updates the top app bar scrolled values if the\n * top app bar height changes.\n * @private\n */\n throttledResizeHandler_() {\n const currentHeight = this.adapter_.getTopAppBarHeight();\n if (this.topAppBarHeight_ !== currentHeight) {\n this.wasDocked_ = false;\n\n // Since the top app bar has a different height depending on the screen width, this\n // will ensure that the top app bar remains in the correct location if\n // completely hidden and a resize makes the top app bar a different height.\n this.currentAppBarOffsetTop_ -= this.topAppBarHeight_ - currentHeight;\n this.topAppBarHeight_ = currentHeight;\n }\n this.topAppBarScrollHandler_();\n }\n}\n\nexport default MDCTopAppBarFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@material/top-app-bar/standard/foundation.js"],"sourceRoot":""}