{"version":3,"mappings":"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","names":["focusableQueryString","Menu","constructor","hostRef","registerInstance","this","ionWillOpen","createEvent","ionWillClose","ionDidOpen","ionDidClose","ionMenuChange","lastOnEnd","blocker","GESTURE_CONTROLLER","disableScroll","isAnimating","_isOpen","inheritedAttributes","handleFocus","ev","lastOverlay","getOverlay","document","contains","el","trapKeyboardFocus","isPaneVisible","isEndSide","disabled","side","swipeGesture","maxEdgeStart","typeChanged","type","oldType","contentEl","undefined","classList","remove","add","removeAttribute","menuInnerEl","animation","disabledChanged","updateState","emit","open","sideChanged","swipeGestureChanged","connectedCallback","customElements","whenDefined","t","config","content","contentId","getElementById","console","error","menuController","gesture","Promise","createGesture","gestureName","gesturePriority","threshold","blurOnStart","canStart","onWillStart","onStart","onMove","onEnd","componentWillLoad","inheritAttributes","componentDidLoad","disconnectedCallback","destroy","backdropEl","onSplitPaneChanged","detail","isPane","onBackdropClick","timeStamp","composedPath","includes","preventDefault","stopPropagation","close","onKeydown","key","isOpen","resolve","isActive","_isActive","animated","setOpen","toggle","shouldOpen","focusFirstDescendant","firstInput","querySelector","focus","focusLastDescendant","inputs","Array","from","querySelectorAll","lastInput","length","doc","target","lastFocus","activeElement","_setOpen","n","beforeAnimation","loadAnimation","startAnimation","afterAnimation","width","offsetWidth","duration","fill","isReversed","mode","getIonMode","easing","easingReverse","ani","direction","onFinish","getDirection","play","sync","canSwipe","checkEdgeSide","window","currentX","progressStart","assert","stepValue","computeDelta","deltaX","progressStep","delta","velocity","velocityX","z","shouldCompleteRight","shouldCompleteLeft","shouldComplete","currentTime","newStepValue","getTimeGivenProgression","clamp","playTo","oneTimeCallback","progressEnd","SHOW_MENU","setAttribute","SHOW_BACKDROP","block","unblock","MENU_CONTENT_OPEN","addEventListener","stop","removeEventListener","enable","forceClosing","render","h","Host","role","class","part","ref","tappable","getElement","watchers","Math","max","win","posX","innerWidth","style","ios","md","updateVisibility","menu","menuEl","MenuButton","visible","autoHide","onClick","d","e","visibilityChanged","color","menuIcon","menuOutline","menuSharp","hidden","attrs","ariaLabel","createColorClasses","button","hostContext","Object","assign","icon","lazy","MenuToggle"],"sources":["./node_modules/@ionic/core/dist/esm/ion-menu_3.entry.js"],"sourcesContent":["/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { r as registerInstance, e as createEvent, h, H as Host, i as getElement } from './index-06cd27b1.js';\nimport { c as config, b as getIonMode } from './ionic-global-a049bcbf.js';\nimport { g as getTimeGivenProgression } from './cubic-bezier-154a53a5.js';\nimport { G as GESTURE_CONTROLLER } from './gesture-controller-68c023a4.js';\nimport { n as isEndSide, i as inheritAttributes, m as assert, d as clamp } from './helpers-eed79a2b.js';\nimport { m as menuController } from './index-4464d2dc.js';\nimport { g as getOverlay } from './overlays-942c6b99.js';\nimport { p as menuOutline, q as menuSharp } from './index-e3f61316.js';\nimport { c as createColorClasses, h as hostContext } from './theme-a24ff1ad.js';\nimport './hardware-back-button-ace6a71b.js';\nimport './animation-c9c2a359.js';\nimport './haptic-9a9aa7ec.js';\nimport './index-41bf41f2.js';\nimport './index-c841c933.js';\nimport './backdrop-1b2f5527.js';\nimport './framework-delegate-a922018c.js';\nimport './keyboard-808e4e15.js';\nimport './index-c8ef55b5.js';\nimport './ripple-effect-0576252b.js';\nimport './spinner-21670fb6.js';\nimport './spinner-configs-163ed7fb.js';\n\nconst menuIosCss = \":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{left:0;right:auto;top:0;bottom:0;-webkit-transform:translate3d(-9999px, 0, 0);transform:translate3d(-9999px, 0, 0);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}[dir=rtl] .menu-inner,:host-context([dir=rtl]) .menu-inner{left:unset;right:unset;left:auto;right:0}[dir=rtl] .menu-inner,:host-context([dir=rtl]) .menu-inner{-webkit-transform:translate3d(calc(-1 * -9999px), 0, 0);transform:translate3d(calc(-1 * -9999px), 0, 0)}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;right:auto;left:0}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;right:0;left:auto;}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){width:var(--width);min-width:var(--min-width);max-width:var(--max-width)}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none !important;transform:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}:host(.menu-pane-visible) ion-backdrop{display:hidden !important;}:host(.menu-type-push){z-index:1000}:host(.menu-type-push) .show-backdrop{display:block}\";\n\nconst menuMdCss = \":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{left:0;right:auto;top:0;bottom:0;-webkit-transform:translate3d(-9999px, 0, 0);transform:translate3d(-9999px, 0, 0);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}[dir=rtl] .menu-inner,:host-context([dir=rtl]) .menu-inner{left:unset;right:unset;left:auto;right:0}[dir=rtl] .menu-inner,:host-context([dir=rtl]) .menu-inner{-webkit-transform:translate3d(calc(-1 * -9999px), 0, 0);transform:translate3d(calc(-1 * -9999px), 0, 0)}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;right:auto;left:0}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;right:0;left:auto;}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){width:var(--width);min-width:var(--min-width);max-width:var(--max-width)}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none !important;transform:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}:host(.menu-pane-visible) ion-backdrop{display:hidden !important;}:host(.menu-type-overlay) .menu-inner{-webkit-box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18);box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18)}\";\n\nconst iosEasing = 'cubic-bezier(0.32,0.72,0,1)';\nconst mdEasing = 'cubic-bezier(0.0,0.0,0.2,1)';\nconst iosEasingReverse = 'cubic-bezier(1, 0, 0.68, 0.28)';\nconst mdEasingReverse = 'cubic-bezier(0.4, 0, 0.6, 1)';\nconst focusableQueryString = '[tabindex]:not([tabindex^=\"-\"]), input:not([type=hidden]):not([tabindex^=\"-\"]), textarea:not([tabindex^=\"-\"]), button:not([tabindex^=\"-\"]), select:not([tabindex^=\"-\"]), .ion-focusable:not([tabindex^=\"-\"])';\nlet Menu = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionWillOpen = createEvent(this, \"ionWillOpen\", 7);\n this.ionWillClose = createEvent(this, \"ionWillClose\", 7);\n this.ionDidOpen = createEvent(this, \"ionDidOpen\", 7);\n this.ionDidClose = createEvent(this, \"ionDidClose\", 7);\n this.ionMenuChange = createEvent(this, \"ionMenuChange\", 7);\n this.lastOnEnd = 0;\n this.blocker = GESTURE_CONTROLLER.createBlocker({ disableScroll: true });\n this.isAnimating = false;\n this._isOpen = false;\n this.inheritedAttributes = {};\n this.handleFocus = (ev) => {\n /**\n * Overlays have their own focus trapping listener\n * so we do not want the two listeners to conflict\n * with each other. If the top-most overlay that is\n * open does not contain this ion-menu, then ion-menu's\n * focus trapping should not run.\n */\n const lastOverlay = getOverlay(document);\n if (lastOverlay && !lastOverlay.contains(this.el)) {\n return;\n }\n this.trapKeyboardFocus(ev, document);\n };\n this.isPaneVisible = false;\n this.isEndSide = false;\n /**\n * If `true`, the menu is disabled.\n */\n this.disabled = false;\n /**\n * Which side of the view the menu should be placed.\n */\n this.side = 'start';\n /**\n * If `true`, swiping the menu is enabled.\n */\n this.swipeGesture = true;\n /**\n * The edge threshold for dragging the menu open.\n * If a drag/swipe happens over this value, the menu is not triggered.\n */\n this.maxEdgeStart = 50;\n }\n typeChanged(type, oldType) {\n const contentEl = this.contentEl;\n if (contentEl) {\n if (oldType !== undefined) {\n contentEl.classList.remove(`menu-content-${oldType}`);\n }\n contentEl.classList.add(`menu-content-${type}`);\n contentEl.removeAttribute('style');\n }\n if (this.menuInnerEl) {\n // Remove effects of previous animations\n this.menuInnerEl.removeAttribute('style');\n }\n this.animation = undefined;\n }\n disabledChanged() {\n this.updateState();\n this.ionMenuChange.emit({\n disabled: this.disabled,\n open: this._isOpen\n });\n }\n sideChanged() {\n this.isEndSide = isEndSide(this.side);\n }\n swipeGestureChanged() {\n this.updateState();\n }\n async connectedCallback() {\n // TODO: connectedCallback is fired in CE build\n // before WC is defined. This needs to be fixed in Stencil.\n if (typeof customElements !== 'undefined') {\n await customElements.whenDefined('ion-menu');\n }\n if (this.type === undefined) {\n this.type = config.get('menuType', 'overlay');\n }\n const content = this.contentId !== undefined\n ? document.getElementById(this.contentId)\n : null;\n if (content === null) {\n console.error('Menu: must have a \"content\" element to listen for drag events on.');\n return;\n }\n if (this.el.contains(content)) {\n console.error(`Menu: \"contentId\" should refer to the main view's ion-content, not the ion-content inside of the ion-menu.`);\n }\n this.contentEl = content;\n // add menu's content classes\n content.classList.add('menu-content');\n this.typeChanged(this.type, undefined);\n this.sideChanged();\n // register this menu with the app's menu controller\n menuController._register(this);\n this.gesture = (await import('./index-41bf41f2.js')).createGesture({\n el: document,\n gestureName: 'menu-swipe',\n gesturePriority: 30,\n threshold: 10,\n blurOnStart: true,\n canStart: ev => this.canStart(ev),\n onWillStart: () => this.onWillStart(),\n onStart: () => this.onStart(),\n onMove: ev => this.onMove(ev),\n onEnd: ev => this.onEnd(ev),\n });\n this.updateState();\n }\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);\n }\n async componentDidLoad() {\n this.ionMenuChange.emit({ disabled: this.disabled, open: this._isOpen });\n this.updateState();\n }\n disconnectedCallback() {\n this.blocker.destroy();\n menuController._unregister(this);\n if (this.animation) {\n this.animation.destroy();\n }\n if (this.gesture) {\n this.gesture.destroy();\n this.gesture = undefined;\n }\n this.animation = undefined;\n this.contentEl = this.backdropEl = this.menuInnerEl = undefined;\n }\n onSplitPaneChanged(ev) {\n this.isPaneVisible = ev.detail.isPane(this.el);\n this.updateState();\n }\n onBackdropClick(ev) {\n if (this._isOpen && this.lastOnEnd < ev.timeStamp - 100) {\n const shouldClose = (ev.composedPath)\n ? !ev.composedPath().includes(this.menuInnerEl)\n : false;\n if (shouldClose) {\n ev.preventDefault();\n ev.stopPropagation();\n this.close();\n }\n }\n }\n onKeydown(ev) {\n if (ev.key === 'Escape') {\n this.close();\n }\n }\n /**\n * Returns `true` is the menu is open.\n */\n isOpen() {\n return Promise.resolve(this._isOpen);\n }\n /**\n * Returns `true` is the menu is active.\n *\n * A menu is active when it can be opened or closed, meaning it's enabled\n * and it's not part of a `ion-split-pane`.\n */\n isActive() {\n return Promise.resolve(this._isActive());\n }\n /**\n * Opens the menu. If the menu is already open or it can't be opened,\n * it returns `false`.\n */\n open(animated = true) {\n return this.setOpen(true, animated);\n }\n /**\n * Closes the menu. If the menu is already closed or it can't be closed,\n * it returns `false`.\n */\n close(animated = true) {\n return this.setOpen(false, animated);\n }\n /**\n * Toggles the menu. If the menu is already open, it will try to close, otherwise it will try to open it.\n * If the operation can't be completed successfully, it returns `false`.\n */\n toggle(animated = true) {\n return this.setOpen(!this._isOpen, animated);\n }\n /**\n * Opens or closes the button.\n * If the operation can't be completed successfully, it returns `false`.\n */\n setOpen(shouldOpen, animated = true) {\n return menuController._setOpen(this, shouldOpen, animated);\n }\n focusFirstDescendant() {\n const { el } = this;\n const firstInput = el.querySelector(focusableQueryString);\n if (firstInput) {\n firstInput.focus();\n }\n else {\n el.focus();\n }\n }\n focusLastDescendant() {\n const { el } = this;\n const inputs = Array.from(el.querySelectorAll(focusableQueryString));\n const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;\n if (lastInput) {\n lastInput.focus();\n }\n else {\n el.focus();\n }\n }\n trapKeyboardFocus(ev, doc) {\n const target = ev.target;\n if (!target) {\n return;\n }\n /**\n * If the target is inside the menu contents, let the browser\n * focus as normal and keep a log of the last focused element.\n */\n if (this.el.contains(target)) {\n this.lastFocus = target;\n }\n else {\n /**\n * Otherwise, we are about to have focus go out of the menu.\n * Wrap the focus to either the first or last element.\n */\n /**\n * Once we call `focusFirstDescendant`, another focus event\n * will fire, which will cause `lastFocus` to be updated\n * before we can run the code after that. We cache the value\n * here to avoid that.\n */\n this.focusFirstDescendant();\n /**\n * If the cached last focused element is the same as the now-\n * active element, that means the user was on the first element\n * already and pressed Shift + Tab, so we need to wrap to the\n * last descendant.\n */\n if (this.lastFocus === doc.activeElement) {\n this.focusLastDescendant();\n }\n }\n }\n async _setOpen(shouldOpen, animated = true) {\n // If the menu is disabled or it is currently being animated, let's do nothing\n if (!this._isActive() || this.isAnimating || shouldOpen === this._isOpen) {\n return false;\n }\n this.beforeAnimation(shouldOpen);\n await this.loadAnimation();\n await this.startAnimation(shouldOpen, animated);\n this.afterAnimation(shouldOpen);\n return true;\n }\n async loadAnimation() {\n // Menu swipe animation takes the menu's inner width as parameter,\n // If `offsetWidth` changes, we need to create a new animation.\n const width = this.menuInnerEl.offsetWidth;\n if (width === this.width && this.animation !== undefined) {\n return;\n }\n this.width = width;\n // Destroy existing animation\n if (this.animation) {\n this.animation.destroy();\n this.animation = undefined;\n }\n // Create new animation\n this.animation = await menuController._createAnimation(this.type, this);\n if (!config.getBoolean('animated', true)) {\n this.animation.duration(0);\n }\n this.animation.fill('both');\n }\n async startAnimation(shouldOpen, animated) {\n const isReversed = !shouldOpen;\n const mode = getIonMode(this);\n const easing = mode === 'ios' ? iosEasing : mdEasing;\n const easingReverse = mode === 'ios' ? iosEasingReverse : mdEasingReverse;\n const ani = this.animation\n .direction((isReversed) ? 'reverse' : 'normal')\n .easing((isReversed) ? easingReverse : easing)\n .onFinish(() => {\n if (ani.getDirection() === 'reverse') {\n ani.direction('normal');\n }\n });\n if (animated) {\n await ani.play();\n }\n else {\n ani.play({ sync: true });\n }\n }\n _isActive() {\n return !this.disabled && !this.isPaneVisible;\n }\n canSwipe() {\n return this.swipeGesture && !this.isAnimating && this._isActive();\n }\n canStart(detail) {\n // Do not allow swipe gesture if a modal is open\n const isModalPresented = !!document.querySelector('ion-modal.show-modal');\n if (isModalPresented || !this.canSwipe()) {\n return false;\n }\n if (this._isOpen) {\n return true;\n // TODO error\n }\n else if (menuController._getOpenSync()) {\n return false;\n }\n return checkEdgeSide(window, detail.currentX, this.isEndSide, this.maxEdgeStart);\n }\n onWillStart() {\n this.beforeAnimation(!this._isOpen);\n return this.loadAnimation();\n }\n onStart() {\n if (!this.isAnimating || !this.animation) {\n assert(false, 'isAnimating has to be true');\n return;\n }\n // the cloned animation should not use an easing curve during seek\n this.animation.progressStart(true, (this._isOpen) ? 1 : 0);\n }\n onMove(detail) {\n if (!this.isAnimating || !this.animation) {\n assert(false, 'isAnimating has to be true');\n return;\n }\n const delta = computeDelta(detail.deltaX, this._isOpen, this.isEndSide);\n const stepValue = delta / this.width;\n this.animation.progressStep((this._isOpen) ? 1 - stepValue : stepValue);\n }\n onEnd(detail) {\n if (!this.isAnimating || !this.animation) {\n assert(false, 'isAnimating has to be true');\n return;\n }\n const isOpen = this._isOpen;\n const isEndSide = this.isEndSide;\n const delta = computeDelta(detail.deltaX, isOpen, isEndSide);\n const width = this.width;\n const stepValue = delta / width;\n const velocity = detail.velocityX;\n const z = width / 2.0;\n const shouldCompleteRight = velocity >= 0 && (velocity > 0.2 || detail.deltaX > z);\n const shouldCompleteLeft = velocity <= 0 && (velocity < -0.2 || detail.deltaX < -z);\n const shouldComplete = isOpen\n ? isEndSide ? shouldCompleteRight : shouldCompleteLeft\n : isEndSide ? shouldCompleteLeft : shouldCompleteRight;\n let shouldOpen = !isOpen && shouldComplete;\n if (isOpen && !shouldComplete) {\n shouldOpen = true;\n }\n this.lastOnEnd = detail.currentTime;\n // Account for rounding errors in JS\n let newStepValue = (shouldComplete) ? 0.001 : -0.001;\n /**\n * TODO: stepValue can sometimes return a negative\n * value, but you can't have a negative time value\n * for the cubic bezier curve (at least with web animations)\n * Not sure if the negative step value is an error or not\n */\n const adjustedStepValue = (stepValue < 0) ? 0.01 : stepValue;\n /**\n * Animation will be reversed here, so need to\n * reverse the easing curve as well\n *\n * Additionally, we need to account for the time relative\n * to the new easing curve, as `stepValue` is going to be given\n * in terms of a linear curve.\n */\n newStepValue += getTimeGivenProgression([0, 0], [0.4, 0], [0.6, 1], [1, 1], clamp(0, adjustedStepValue, 0.9999))[0] || 0;\n const playTo = (this._isOpen) ? !shouldComplete : shouldComplete;\n this.animation\n .easing('cubic-bezier(0.4, 0.0, 0.6, 1)')\n .onFinish(() => this.afterAnimation(shouldOpen), { oneTimeCallback: true })\n .progressEnd((playTo) ? 1 : 0, (this._isOpen) ? 1 - newStepValue : newStepValue, 300);\n }\n beforeAnimation(shouldOpen) {\n assert(!this.isAnimating, '_before() should not be called while animating');\n // this places the menu into the correct location before it animates in\n // this css class doesn't actually kick off any animations\n this.el.classList.add(SHOW_MENU);\n /**\n * We add a tabindex here so that focus trapping\n * still works even if the menu does not have\n * any focusable elements slotted inside. The\n * focus trapping utility will fallback to focusing\n * the menu so focus does not leave when the menu\n * is open.\n */\n this.el.setAttribute('tabindex', '0');\n if (this.backdropEl) {\n this.backdropEl.classList.add(SHOW_BACKDROP);\n }\n this.blocker.block();\n this.isAnimating = true;\n if (shouldOpen) {\n this.ionWillOpen.emit();\n }\n else {\n this.ionWillClose.emit();\n }\n }\n afterAnimation(isOpen) {\n assert(this.isAnimating, '_before() should be called while animating');\n // keep opening/closing the menu disabled for a touch more yet\n // only add listeners/css if it's enabled and isOpen\n // and only remove listeners/css if it's not open\n // emit opened/closed events\n this._isOpen = isOpen;\n this.isAnimating = false;\n if (!this._isOpen) {\n this.blocker.unblock();\n }\n if (isOpen) {\n // add css class and hide content behind menu from screen readers\n if (this.contentEl) {\n this.contentEl.classList.add(MENU_CONTENT_OPEN);\n /**\n * When the menu is open and overlaying the main\n * content, the main content should not be announced\n * by the screenreader as the menu is the main\n * focus. This is useful with screenreaders that have\n * \"read from top\" gestures that read the entire\n * page from top to bottom when activated.\n */\n this.contentEl.setAttribute('aria-hidden', 'true');\n }\n // emit open event\n this.ionDidOpen.emit();\n // focus menu content for screen readers\n if (this.menuInnerEl) {\n this.focusFirstDescendant();\n }\n // setup focus trapping\n document.addEventListener('focus', this.handleFocus, true);\n }\n else {\n // remove css classes and unhide content from screen readers\n this.el.classList.remove(SHOW_MENU);\n /**\n * Remove tabindex from the menu component\n * so that is cannot be tabbed to.\n */\n this.el.removeAttribute('tabindex');\n if (this.contentEl) {\n this.contentEl.classList.remove(MENU_CONTENT_OPEN);\n /**\n * Remove aria-hidden so screen readers\n * can announce the main content again\n * now that the menu is not the main focus.\n */\n this.contentEl.removeAttribute('aria-hidden');\n }\n if (this.backdropEl) {\n this.backdropEl.classList.remove(SHOW_BACKDROP);\n }\n if (this.animation) {\n this.animation.stop();\n }\n // emit close event\n this.ionDidClose.emit();\n // undo focus trapping so multiple menus don't collide\n document.removeEventListener('focus', this.handleFocus, true);\n }\n }\n updateState() {\n const isActive = this._isActive();\n if (this.gesture) {\n this.gesture.enable(isActive && this.swipeGesture);\n }\n // Close menu immediately\n if (!isActive && this._isOpen) {\n // close if this menu is open, and should not be enabled\n this.forceClosing();\n }\n if (!this.disabled) {\n menuController._setActiveMenu(this);\n }\n assert(!this.isAnimating, 'can not be animating');\n }\n forceClosing() {\n assert(this._isOpen, 'menu cannot be closed');\n this.isAnimating = true;\n const ani = this.animation.direction('reverse');\n ani.play({ sync: true });\n this.afterAnimation(false);\n }\n render() {\n const { isEndSide, type, disabled, isPaneVisible, inheritedAttributes } = this;\n const mode = getIonMode(this);\n return (h(Host, { role: \"navigation\", \"aria-label\": inheritedAttributes['aria-label'] || 'menu', class: {\n [mode]: true,\n [`menu-type-${type}`]: true,\n 'menu-enabled': !disabled,\n 'menu-side-end': isEndSide,\n 'menu-side-start': !isEndSide,\n 'menu-pane-visible': isPaneVisible\n } }, h(\"div\", { class: \"menu-inner\", part: \"container\", ref: el => this.menuInnerEl = el }, h(\"slot\", null)), h(\"ion-backdrop\", { ref: el => this.backdropEl = el, class: \"menu-backdrop\", tappable: false, stopPropagation: false, part: \"backdrop\" })));\n }\n get el() { return getElement(this); }\n static get watchers() { return {\n \"type\": [\"typeChanged\"],\n \"disabled\": [\"disabledChanged\"],\n \"side\": [\"sideChanged\"],\n \"swipeGesture\": [\"swipeGestureChanged\"]\n }; }\n};\nconst computeDelta = (deltaX, isOpen, isEndSide) => {\n return Math.max(0, isOpen !== isEndSide ? -deltaX : deltaX);\n};\nconst checkEdgeSide = (win, posX, isEndSide, maxEdgeStart) => {\n if (isEndSide) {\n return posX >= win.innerWidth - maxEdgeStart;\n }\n else {\n return posX <= maxEdgeStart;\n }\n};\nconst SHOW_MENU = 'show-menu';\nconst SHOW_BACKDROP = 'show-backdrop';\nconst MENU_CONTENT_OPEN = 'menu-content-open';\nMenu.style = {\n ios: menuIosCss,\n md: menuMdCss\n};\n\n// Given a menu, return whether or not the menu toggle should be visible\nconst updateVisibility = async (menu) => {\n const menuEl = await menuController.get(menu);\n return !!(menuEl && await menuEl.isActive());\n};\n\nconst menuButtonIosCss = \":host{--background:transparent;--color-focused:currentColor;--border-radius:initial;--padding-top:0;--padding-bottom:0;color:var(--color);text-align:center;text-decoration:none;text-overflow:ellipsis;text-transform:none;white-space:nowrap;-webkit-font-kerning:none;font-kerning:none}.button-native{border-radius:var(--border-radius);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:-ms-flexbox;display:flex;position:relative;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;border:0;outline:none;background:var(--background);line-height:1;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.button-native{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.button-inner{display:-ms-flexbox;display:flex;position:relative;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;z-index:1}ion-icon{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;pointer-events:none}:host(.menu-button-hidden){display:none}:host(.menu-button-disabled){cursor:default;opacity:0.5;pointer-events:none}:host(.ion-focused) .button-native{color:var(--color-focused)}:host(.ion-focused) .button-native::after{background:var(--background-focused);opacity:var(--background-focused-opacity)}.button-native::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0}@media (any-hover: hover){:host(:hover) .button-native{color:var(--color-hover)}:host(:hover) .button-native::after{background:var(--background-hover);opacity:var(--background-hover-opacity, 0)}}:host(.ion-color) .button-native{color:var(--ion-color-base)}:host(.in-toolbar:not(.in-toolbar-color)){color:var(--ion-toolbar-color, var(--color))}:host{--background-focused:currentColor;--background-focused-opacity:.1;--border-radius:4px;--color:var(--ion-color-primary, #3880ff);--padding-start:5px;--padding-end:5px;height:32px;font-size:31px}:host(.ion-activated){opacity:0.4}@media (any-hover: hover){:host(:hover){opacity:0.6}}\";\n\nconst menuButtonMdCss = \":host{--background:transparent;--color-focused:currentColor;--border-radius:initial;--padding-top:0;--padding-bottom:0;color:var(--color);text-align:center;text-decoration:none;text-overflow:ellipsis;text-transform:none;white-space:nowrap;-webkit-font-kerning:none;font-kerning:none}.button-native{border-radius:var(--border-radius);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:-ms-flexbox;display:flex;position:relative;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;border:0;outline:none;background:var(--background);line-height:1;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.button-native{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.button-inner{display:-ms-flexbox;display:flex;position:relative;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;z-index:1}ion-icon{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;pointer-events:none}:host(.menu-button-hidden){display:none}:host(.menu-button-disabled){cursor:default;opacity:0.5;pointer-events:none}:host(.ion-focused) .button-native{color:var(--color-focused)}:host(.ion-focused) .button-native::after{background:var(--background-focused);opacity:var(--background-focused-opacity)}.button-native::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0}@media (any-hover: hover){:host(:hover) .button-native{color:var(--color-hover)}:host(:hover) .button-native::after{background:var(--background-hover);opacity:var(--background-hover-opacity, 0)}}:host(.ion-color) .button-native{color:var(--ion-color-base)}:host(.in-toolbar:not(.in-toolbar-color)){color:var(--ion-toolbar-color, var(--color))}:host{--background-focused:currentColor;--background-focused-opacity:.12;--background-hover:currentColor;--background-hover-opacity:.04;--border-radius:50%;--color:initial;--padding-start:8px;--padding-end:8px;width:48px;height:48px;font-size:24px}:host(.ion-color.ion-focused)::after{background:var(--ion-color-base)}@media (any-hover: hover){:host(.ion-color:hover) .button-native::after{background:var(--ion-color-base)}}\";\n\nlet MenuButton = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.inheritedAttributes = {};\n this.visible = false;\n /**\n * If `true`, the user cannot interact with the menu button.\n */\n this.disabled = false;\n /**\n * Automatically hides the menu button when the corresponding menu is not active\n */\n this.autoHide = true;\n /**\n * The type of the button.\n */\n this.type = 'button';\n this.onClick = async () => {\n return menuController.toggle(this.menu);\n };\n }\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);\n }\n componentDidLoad() {\n this.visibilityChanged();\n }\n async visibilityChanged() {\n this.visible = await updateVisibility(this.menu);\n }\n render() {\n const { color, disabled, inheritedAttributes } = this;\n const mode = getIonMode(this);\n const menuIcon = config.get('menuIcon', mode === 'ios' ? menuOutline : menuSharp);\n const hidden = this.autoHide && !this.visible;\n const attrs = {\n type: this.type\n };\n const ariaLabel = inheritedAttributes['aria-label'] || 'menu';\n return (h(Host, { onClick: this.onClick, \"aria-disabled\": disabled ? 'true' : null, \"aria-hidden\": hidden ? 'true' : null, class: createColorClasses(color, {\n [mode]: true,\n 'button': true,\n 'menu-button-hidden': hidden,\n 'menu-button-disabled': disabled,\n 'in-toolbar': hostContext('ion-toolbar', this.el),\n 'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),\n 'ion-activatable': true,\n 'ion-focusable': true\n }) }, h(\"button\", Object.assign({}, attrs, { disabled: disabled, class: \"button-native\", part: \"native\", \"aria-label\": ariaLabel }), h(\"span\", { class: \"button-inner\" }, h(\"slot\", null, h(\"ion-icon\", { part: \"icon\", icon: menuIcon, mode: mode, lazy: false, \"aria-hidden\": \"true\" }))), mode === 'md' && h(\"ion-ripple-effect\", { type: \"unbounded\" }))));\n }\n get el() { return getElement(this); }\n};\nMenuButton.style = {\n ios: menuButtonIosCss,\n md: menuButtonMdCss\n};\n\nconst menuToggleCss = \":host(.menu-toggle-hidden){display:none}\";\n\nlet MenuToggle = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.visible = false;\n /**\n * Automatically hides the content when the corresponding menu is not active.\n *\n * By default, it's `true`. Change it to `false` in order to\n * keep `ion-menu-toggle` always visible regardless the state of the menu.\n */\n this.autoHide = true;\n this.onClick = () => {\n return menuController.toggle(this.menu);\n };\n }\n connectedCallback() {\n this.visibilityChanged();\n }\n async visibilityChanged() {\n this.visible = await updateVisibility(this.menu);\n }\n render() {\n const mode = getIonMode(this);\n const hidden = this.autoHide && !this.visible;\n return (h(Host, { onClick: this.onClick, \"aria-hidden\": hidden ? 'true' : null, class: {\n [mode]: true,\n 'menu-toggle-hidden': hidden,\n } }, h(\"slot\", null)));\n }\n};\nMenuToggle.style = menuToggleCss;\n\nexport { Menu as ion_menu, MenuButton as ion_menu_button, MenuToggle as ion_menu_toggle };\n"],"sourceRoot":"webpack:///","file":"6065.80447385dfd67dfa.js"}