framework7 7.0.0-beta.11 → 7.0.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/ssr-window/ssr-window.esm.js","../../node_modules/dom7/dom7.esm.js","../../src/core/shared/dom7.js","../../src/core/shared/utils.js","../../src/core/shared/get-support.js","../../src/core/shared/get-device.js","../../src/core/shared/events-class.js","../../src/core/shared/class.js","../../src/core/shared/constructor-methods.js","../../src/core/components/app/load-module.js","../../src/core/components/app/app-class.js","../../src/core/shared/modal-methods.js","../../src/core/modules/device/device.js","../../src/core/modules/support/support.js","../../src/core/modules/utils/utils.js","../../src/core/modules/resize/resize.js","../../src/core/shared/request.js","../../src/core/modules/request/request.js","../../src/core/modules/touch/touch.js","../../node_modules/path-to-regexp/dist.es2015/index.js","../../src/core/shared/history.js","../../src/core/modules/router/swipe-back.js","../../src/core/modules/router/redirect.js","../../src/core/modules/router/process-route-queue.js","../../src/core/modules/router/app-router-check.js","../../src/core/modules/router/async-component.js","../../src/core/modules/router/navigate.js","../../src/core/modules/router/back.js","../../src/core/modules/router/router-class.js","../../src/core/modules/router/tab.js","../../src/core/modules/router/modal.js","../../src/core/modules/router/clear-previous-history.js","../../src/core/modules/router/router.js","../../src/core/components/view/resizable-view.js","../../src/core/components/view/view-class.js","../../src/core/modules/clicks/clicks.js","../../src/core/modules/router/component-loader.js","../../node_modules/htm/dist/htm.mjs","../../src/core/modules/component/$h.js","../../src/core/modules/component/snabbdom/vnode.js","../../src/core/modules/component/snabbdom/is.js","../../src/core/modules/component/snabbdom/h.js","../../src/core/modules/component/custom-components.js","../../src/core/modules/component/vdom.js","../../src/core/modules/component/snabbdom/htmldomapi.js","../../src/core/modules/component/snabbdom/snabbdom.js","../../src/core/modules/component/snabbdom/modules/attributes.js","../../src/core/modules/component/snabbdom/modules/props.js","../../src/core/modules/component/snabbdom/modules/style.js","../../src/core/modules/component/eventslisteners.js","../../src/core/modules/component/patch.js","../../src/core/modules/component/component-class.js","../../src/core/modules/component/component.js","../../src/core/modules/component/parse-component.js","../../src/core/modules/history/history.js","../../src/core/modules/service-worker/service-worker.js","../../src/core/modules/store/create-store.js","../../src/core/modules/store/store.js","../../src/core/components/statusbar/statusbar.js","../../src/core/components/view/view.js","../../src/core/components/navbar/navbar.js","../../src/core/components/toolbar/toolbar.js","../../src/core/components/subnavbar/subnavbar.js","../../src/core/components/touch-ripple/touch-ripple-class.js","../../src/core/components/touch-ripple/touch-ripple.js","../../src/core/components/modal/modal-class.js","../../src/core/components/modal/custom-modal-class.js","../../src/core/components/modal/modal.js","../../src/core/framework7.js"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","Dom7","Array","items","super","proto","__proto__","defineProperty","get","set","value","makeReactive","arrayFlat","arr","res","el","isArray","push","arrayFilter","prototype","filter","call","$","selector","context","html","trim","indexOf","toCreate","tempParent","innerHTML","i","a","qsa","nodeType","uniqueArray","arrayUnique","fn","noTrigger","split","shortcut","name","args","trigger","on","click","focus","focusin","focusout","keyup","keydown","keypress","submit","change","mousedown","mousemove","mouseup","mouseenter","mouseleave","mouseout","mouseover","touchstart","touchend","touchmove","resize","scroll","els","dom","j","toAdd","classes","classNames","map","c","classList","add","initialProps","initialParams","props","assign","params","duration","easing","elements","animating","que","easingProgress","progress","Math","cos","PI","stop","frameId","each","dom7AnimateInstance","done","complete","shift","animate","index","initialFullValue","initialValue","unit","finalValue","finalFullValue","container","prop","replace","parseFloat","currentValue","time","startTime","elementsDone","propsDone","began","render","easeProgress","getTime","begin","max","min","element","animateInstance","fireCallBack","e","off","newChild","k","tempDiv","firstChild","appendChild","parent","append","attrs","arguments","getAttribute","attrName","is","closest","parents","eq","dom7ElementDataStorage","dataKey","dataset","attributes","attr","string","toLowerCase","match","group","toUpperCase","remove","apply","parentNode","removeChild","textContent","returnIndex","foundElements","found","className","contains","innerHeight","css","display","child","previousSibling","after","insertBefore","nextSibling","cloneNode","before","compareWith","matches","webkitMatchesSelector","msMatchesSelector","nextElementSibling","nextEls","next","eventType","targetSelector","listener","capture","undefined","events","event","handlers","dom7Listeners","dom7LiveListeners","handler","dom7proxy","proxyListener","splice","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","handleLiveEvent","eventData","dom7EventData","unshift","handleEvent","eventName","onceHandler","eventArgs","includeMargins","styles","offsetHeight","offsetWidth","prepend","previousElementSibling","prevEls","prev","propName","removeAttribute","scrollTo","currentTop","currentLeft","maxTop","maxLeft","newTop","newLeft","animateTop","animateLeft","scrollHeight","scrollWidth","nextAll","prevAll","text","toggle","transform","transitionDuration","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","multiple","values","selectedOptions","options","selected","val","innerWidth","methods","methodName","uniqueNum","mask","floor","random","mdPreloaderContent","iosPreloaderContent","join","eventNameToColonCase","hasColon","char","deleteProps","object","nextTick","delay","nextFrame","now","parseUrlQuery","url","query","param","urlToParse","paramsPart","decodeURIComponent","slice","serializeObject","resultArray","newParents","varName","parentParts","encodeURIComponent","varValue","toPush","String","o","merge","to","from","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","deep","colorHexToRgb","hex","h","m","r","g","b","result","exec","n","parseInt","colorRgbToHex","toString","colorRgbToHsl","d","l","abs","colorHslToRgb","s","hp","x","rgb1","Number","isNaN","round","bindMethods","instance","subKey","bind","flattenArray","arg","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","HSL","HSB","t","rgb","hsl","hslShade","hslTint","shade","tint","--f7-theme-color","--f7-theme-color-rgb","--f7-theme-color-shade","--f7-theme-color-tint","support","deviceCalculated","getSupport","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","passiveListener","supportsPassive","opts","intersectionObserver","calcSupport","getDevice","overrides","reset","platform","ua","device","ios","android","androidChrome","desktop","iphone","ipod","ipad","edge","ie","firefox","macos","windows","cordova","phonegap","electron","capacitor","Capacitor","nwjs","screenWidth","width","screenHeight","height","nw","process","versions","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","prefersColorScheme","theme","calcDevice","EventsClass","eventsParents","eventsListeners","priority","self","method","once","f7proxy","eventHandler","emit","local","eventsArray","localEvents","parentEvents","eventsParent","Framework7Class","useModuleParams","module","instanceParams","originalParams","paramKey","useModulesParams","modules","moduleName","useModule","moduleParams","modulePropName","moduleProp","moduleEventName","vnode","vnodeHooks","vnodeId","hookName","create","useModules","modulesParams","components","use","[object Object]","Class","static","install","installModule","ConstructorMethods","parameters","defaultSelector","Constructor","domProp","app","addMethods","$el","destroy","fetchedModules","Framework7","Error","passedParams","w","defaults","version","language","routes","lazyModulesPath","initOnDeviceReady","init","autoDarkMode","iosTranslucentBars","iosTranslucentModals","component","componentUrl","online","onLine","store","f7","initStore","mount","rootEl","$rootEl","rtl","DARK","LIGHT","mq","dark","light","colorSchemeListener","media","darkMode","__store","createStore","enableAutoDarkMode","addListener","disableAutoDarkMode","removeListener","initAppComponent","router","componentLoader","componentOptions","$elComponent","f7Component","initialized","addClass","removeClass","loadModule","loadModules","getVnodeHooks","hook","Events","ModalMethods","open","targetEl","$targetPage","modalEl","$modalEl","f7Modal","close","$parentEl","$targetEl","moduleToLoad","Promise","resolve","reject","modulePath","moduleObj","moduleFunc","matchNamePattern","scriptLoad","resolveScript","rejectScript","request","scriptContent","callbackLoadName","scriptEl","xhr","status","styleLoad","resolveStyle","styleContent","styleEl","all","then","catch","err","DeviceModule","metaStatusbar","content","SupportModule","UtilsModule","utils","ResizeModule","getSize","offset","orientationchange","globals","jsonpRequests","RequestResponse","RequestError","requestOptions","globalsNoCallbacks","callbackName","async","cache","user","password","headers","xhrFields","statusCode","processData","dataType","contentType","timeout","proceedRequest","abortController","canceled","message","fireCallback","globalCallbackValue","optionCallbackValue","type","paramsPrefix","stringData","abortTimeout","callbackSplit","requestUrl","addVars","script","onerror","XMLHttpRequest","aborted","onAbort","abort","requestParameters","postData","ArrayBuffer","Blob","Document","FormData","boundary","setRequestHeader","newData","JSON","stringify","Accept","headerName","crossDomain","test","RegExp","$2","onload","responseData","parseError","parse","responseText","responseType","response","statusText","ontimeout","send","requestShortcut","success","error","post","json","getJSON","postJSON","contoller","setup","RequestModule","TouchModule","touchClicksDistanceThreshold","disableContextMenu","tapHold","tapHoldDelay","tapHoldPreventClicks","activeState","activeStateElements","activeStateOnMouseMove","mdTouchRipple","iosTouchRipple","auroraTouchRipple","touchRippleElements","touchRippleInsetElements","touchEvents","start","move","end","useRipple","touchStartX","touchStartY","targetElement","isMoved","tapHoldFired","tapHoldTimeout","preventClick","activableElement","activeTimeout","rippleWave","rippleTarget","rippleTimeout","isScrolling","findActivableElement","activable","newActivable","preventPropagation","hasClass","isInsideScrollableView","addActive","removeActive","createRipple","y","touchRipple","removeRipple","rippleTouchStart","rippleElements","rippleParent","findRippleElement","rippleTouchMove","rippleTouchEnd","handleMouseUp","isSegmentedStrong","segmentedStrongEl","touchMoveActivableIos","isTouchMoveActivable","touchmoveActivableEl","emitAppTouchEvent","appTouchStartActive","appTouchMoveActive","appTouchEndActive","appTouchStartPassive","appTouchMovePassive","appTouchEndPassive","passive","passiveListenerCapture","activeListener","activeListenerCapture","isOverswipe","isSegmented","localPreventClick","stopImmediatePropagation","stopPropagation","preventDefault","targetTouches","touches","pageX","pageY","distance","shouldRemoveActive","touchCurrentX","touchCurrentY","buttonEl","elementFromPoint","clientX","clientY","$activableEl","which","isNative","str","tokens","count","pattern","TypeError","code","charCodeAt","lexer","_a","prefixes","defaultPattern","escapeString","delimiter","path","tryConsume","mustConsume","nextType","consumeText","prefix","suffix","modifier","name_1","pattern_1","compile","reFlags","flags","encode","_b","validate","token","optional","repeat","segment","typeOfMessage","tokensToFunction","sensitive","stringToRegexp","strict","_c","_d","endsWith","route","_i","tokens_1","mod","endToken","isEndDelimited","tokensToRegexp","pathToRegexp","groupsRegex","execResult","source","regexpToRegexp","paths","parts","arrayToRegexp","History","queue","clearQueue","currentQueue","routerQueue","clearRouterQueue","pop","stateUrl","action","browserHistoryAnimate","browserHistory","navigate","handle","blockPopstate","state","previousState","allowChange","views","view","viewState","allowPageChange","initViewState","viewId","newState","substr","readyState","SwipeBack","$navbarsEl","isTouched","touchesStart","viewContainerWidth","touchesDiff","touchStartTime","dynamicNavbar","$pageShadowEl","$pageOpacityEl","animatableNavEls","$currentPageEl","$previousPageEl","allowViewTouchMove","$currentNavbarEl","$previousNavbarEl","paramsSwipeBackAnimateShadow","paramsSwipeBackAnimateOpacity","paramsSwipeBackActiveArea","paramsSwipeBackThreshold","transformOrigin","transformOriginTitleLarge","setAnimatableNavElements","transition","reflow","_clientLeft","classNameSet","styleProp","handleTouchStart","swipeBackEnabled","swipeout","masterDetailBreakpoint","handleTouchMove","f7PreventSwipeBack","preventSwipeBack","cancel","find","notFromBorder","inverter","currentNavIsTransparent","currentNavIsLarge","currentNavIsCollapsed","currentNavIsLargeTransparent","previousNavIsTransparent","previousNavIsLarge","previousNavIsCollapsed","previousNavIsLargeTransparent","fromLarge","toLarge","$currentNavElements","$previousNavElements","activeNavBackIconText","previousNavBackIconText","iosAnimateNavbarBackIcon","f7NavbarLeftOffset","navEl","$navEl","isSubnavbar","isLeft","isTitle","isBg","overflow","subNavEl","opacity","transform-origin","isSliding","transformTarget","textEl","activeNavTranslate","f7NavbarRightOffset","previousNavTranslate","animatableNavElements","sheet","f7PreventSwipePanel","preventSwipePanelBySwipeBack","percentage","callbackData","currentPageEl","previousPageEl","currentNavbarEl","previousNavbarEl","currentPageTranslate","previousPageTranslate","swipeBackActive","handleTouchEnd","$pages","timeDiff","pageChanged","removeAttr","setNavbarPosition","currentRoute","f7Page","currentPage","pageCallback","swipeBack","transitionEnd","saveHistory","stackPages","initialPages","removePage","removeNavbar","previousRoute","preloadPreviousPage","preload","attachEvents","redirect","direction","initial","redirectUrl","redirectOptions","processQueue","routeQueue","processRouteQueue","enterNextRoute","routesBeforeEnter","beforeEnter","routesBeforeLeave","beforeLeave","appRouterCheck","asyncComponent","resolvePromise","componentPromise","default","_default","asyncComponentResult","forward","forwardOptions","reloadCurrent","reloadPages","reloadPrevious","reloadAll","clearPreviousHistory","reloadDetail","masterDetailEnabled","isMaster","master","masterPageEl","otherDetailPageEl","modalType","detailsInBetweenRemoved","currentRouteIsModal","modal","modalLoadProp","modalToClose","modalInstance","previousUrl","findMatchingRoute","modalRemove","$viewEl","$newPage","reload","$oldPage","$newNavbarEl","$oldNavbarEl","removeThemeElements","$navbarEl","keepAlive","keepAliveData","pageEl","$pagesInView","pageInView","$navbarsInView","isDetail","isDetailRoot","navbarInView","newPagePosition","position","role","root","detailRoot","navbar","getElByPage","navbarEl","removedPageEls","removedNavbarEls","oldNavbarEl","browserHistoryRoot","browserHistorySeparator","newPageInDom","componentEl","f7PageMounted","$oldPageEl","$oldNavbarElEl","tab","tabLoad","checkMasterDetailBreakpoint","setPagePosition","afterAnimation","keepOldPage","setPositionClasses","f7PageTransition","load","loadParams","loadOptions","ignorePageChange","pageName","parentPath","sameParams","paramName","allowDuplicateUrls","parseRouteUrl","getPageEl","pageComponentLoader","routerEl","newOptions","xhrAbortController","xhrRequest","pageContent","backward","backwardOptions","masterPageRemoved","initialPreload","currentIsMaster","backIndex","masterRoute","force","pageToRemove","$pageToRemove","$navbarToRemove","insertPage","$previousPages","loadBack","backParams","backOptions","Router","isAppRouter","routerId","scrollHistory","iosDynamicNavbar","initialNavbars","configurable","newRoute","tempDom","navbarsEl","animateIcon","newNavEls","oldNavEls","animatableNavEl","$navbarInner","needsOpacityTransition","$iconEl","isIconLabel","leftOffset","rightOffset","navEls","otherEls","otherNavEl","iconTextEl","offsetLeft","$newPageEl","animateCustom","routerCustomTransitionClass","onCustomTransitionDone","animationEnd","routerTransitionClass","toDifferent","oldIsLarge","newIsLarge","animateNavbars","setProperty","removeModal","removeEl","removeTabContent","tabEl","tabChild","removeElements","removeElementsWithTimeout","removeElementsTimeout","findElement","stringSelector","notStacked","$container","viewMainClass","flattenRoutes","flattenedRoutes","hasTabRoutes","tabs","mergedPathsRoutes","tabRoute","tRoute","concat","detailRoutes","detailRoute","dRoute","masterRoutePath","childRoute","cRoute","generateUrl","findRouteByKey","constructRouteUrl","toUrl","findTabRouteUrl","$tabEl","tabId","foundTabRouteUrl","matchingRoute","pathsToMatch","matched","alias","aliasPath","pathToMatch","keyObj","paramValue","replaceRequestUrlParams","compiledUrl","regExp","removeFromXhrCache","xhrCache","ignoreCache","hasQuery","passRouteQueryToRequest","passRouteParamsToRequest","xhrCacheIgnoreGetParameters","xhrCacheIgnore","cachedUrl","xhrCacheDuration","beforeSend","ariaHidden","toRemove","getPageData","pageFromEl","$pageEl","pageFrom","fromPage","$pageFromEl","page","restoreScrollTopOnBack","camelName","colonName","f7RouteEventsAttached","f7RouteEventsOn","f7RouteEventsOnce","$pageContent","pageContentEl","f7PageInitialized","browserHistoryStoreHistory","localStorage","restoreHistory","clearHistory","updateCurrentUrl","newUrl","getInitialUrl","initialUrl","historyRestored","URL","documentUrl","browserHistoryOnLoad","console","warn","iosSwipeBack","mdSwipeBack","auroraSwipeBack","browserHistoryAnimateOnLoad","browserHistoryInitialMatch","initUrl","loadInitialPage","modalOpen","pageAfterIn","hasTabRoute","initOptions","routerProp","navigateParams","navigateOptions","createRoute","navigateUrl","currentPath","viewName","anotherViewName","anotherView","openIn","ignoreOpenIn","routerLoaded","asyncResolve","resolveParams","resolveOptions","resolvedAsModal","modalRoute","modalLoad","asyncReject","pageLoadProp","preloadMaster","masterLoaded","refreshPage","parentPageEl","browserHistoryTabs","$parentPageEl","tabShowResult","show","$newTabEl","$oldTabEl","animated","onTabsChanged","tabParentPageData","f7RouterTabLoaded","loadTab","loadTabParams","loadTabOptions","contentEl","tabEventTarget","unloadTabContent","tabRemove","onTabLoaded","tabComponentLoader","tabContent","hasContentLoadProp","tabLoadProp","hasTabComponentChild","isPanel","modalOrPanel","modalParams","routeCallback","panelOpen","modalClose","panelClose","modalClosed","panelClosed","onModalLoaded","hasEl","closeOnSwipeBack","closeByRouter","modalComponent","loadModal","loadModalParams","loadModalOptions","modalComponentLoader","modalContent","foundLoadProp","prevOpenedModals","forceOtherUrl","isBrokenBrowserHistory","needHistoryBack","currentRouteWithoutBrowserHistory","skipMaster","$previousPage","$previousMaster","expectedPreviousPageUrl","expectedPreviousPageRoute","previousPageRoute","backForceLoaded","panel","clearPreviousPages","RouterModule","templates","resizableView","resizableInitialized","resizable","resizableWidth","$htmlEl","$resizeHandlerEl","minWidth","maxWidth","transformCSSWidth","v","newV","$pageMasterEl","newWidth","handleResize","View","viewParams","routesAdd","main","f7View","viewProp","wasMasterDetail","isMasterDetail","initMasterDetail","masterDetailResizable","viewEl","ClicksModule","clicks","externalLinks","$clickedEl","$clickedLinkEl","isLink","InAppBrowser","Plugins","Browser","moduleClicks","preventF7Router","clickSelector","matchingClickedElement","clickedLinkData","clickedEl","current","linksView","ViewClass","f7RouteProps","initClicks","RouterComponentLoaderModule","popup","loginScreen","popover","side","effect","componentFunction","componentContext","f7route","f7router","componentProps","routeProps","componentRoot","createdComponent","cachedComponent","componentCache","cached","loadedComponent","parsedComponent","u","p","Map","ignoreChildren","$h","sel","elm","array","primitive","addNS","ns","childData","is.array","is.primitive","customComponents","SELF_CLOSING","PROPS_ATTRS","BOOLEAN_PROPS","getTagName","treeNode","propsFromAttrs","word","isCustomComponent","treeNodeType","getHooks","isRoot","hooks","insert","update","postpatch","isFakeElement","tagName","isCustom","__component__","createCustomComponent","destroyCustomComponent","oldVnode","newProps","updateCustomComponent","class","vn","f","getChildren","nodes","childNode","treeNodeToVNode","isTreeNode","slotName","slotNodes","childTreeNode","childSlotName","slot","subTreeNode","getSlots","attrValue","prevent","eventNamePart","eventNameIndex","fired","getEventHandler","prepatch","getData","vdom","tree","htmlDomApi","namespaceURI","qualifiedName","createTextNode","createComment","newNode","referenceNode","node","setTextContent","getTextContent","isElement","isUndef","isDef","emptyNode","sameVnode","vnode1","vnode2","createKeyToOldIdx","beginIdx","endIdx","ch","updateAttrs","oldAttrs","cur","setAttributeNS","attributesModule","updateProps","oldProps","propsModule","raf","setNextFrame","updateStyle","oldStyle","oldHasDel","removeProperty","delayed","name2","updateEvents","oldOn","oldListener","oldElm","invokeHandler","patch","domApi","cbs","api","emptyNodeAt","createRmCb","childElm","listeners","parent_1","createElm","insertedVnodeQueue","hashIdx","dotIdx","dot","tag","addVnodes","parentElm","vnodes","startIdx","invokeDestroyHook","removeVnodes","i_1","rm","patchVnode","oldCh","newCh","oldKeyToIdx","idxInOld","elmToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","updateChildren","pre","isVnode","amount","applied","ev","Component","generateId","md","aurora","__updateQueue","__eventHandlers","__onceEventHandlers","__onBeforeMount","__onMounted","__onBeforeUpdate","__onUpdated","__onBeforeUnmount","__onUnmounted","createComponent","getComponentContext","componentResult","getRenderFuncion","renderFunction","getComponentRef","getComponentStore","_gettersPlain","dispatch","$store","getters","Proxy","onUpdated","includeHooks","ctx","$f7route","$f7router","$id","$f7","$f7ready","f7ready","$theme","$tick","tick","$update","$emit","$ref","$on","$once","$onBeforeMount","$onMounted","$onBeforeUpdate","$onUpdated","$onBeforeUnmount","$onUnmounted","detachEvents","startUpdateQueue","__requestAnimationFrameId","newVNode","__updateIsPending","resolvers","resolver","__destroyed","setState","mountMethod","registerComponent","unregisterComponent","ComponentModule","componentString","componentId","callbackCreateName","template","item","scripts","parseComponent","HistoryModule","SW","registrations","register","scope","serviceWorker","reg","unregister","registration","ServiceWorkerModule","storeParams","originalState","actions","propsQueue","gettersDependencies","gettersCallbacks","getterKey","getGetterValue","addGetterCallback","__removeCallback","stateKey","callbacks","removeGetterCallback","getterValue","addCallback","deps","dep","addGetterDependencies","__callback","actionName","StoreModule","isCapacitor","StatusBar","Statusbar","hide","onClick","setTextColor","color","styleLightContent","styleDefault","setStyle","setBackgroundColor","backgroundColorByHexString","isVisible","getInfo","info","visible","overlaysWebView","overlays","setOverlaysWebView","overlay","statusbar","enabled","isCordova","isCap","scrollTopOnClick","iosOverlaysWebView","iosTextColor","androidOverlaysWebView","androidTextColor","iosBackgroundColor","androidBackgroundColor","Statusbar$1","iosSwipeBackAnimateShadow","iosSwipeBackAnimateOpacity","iosSwipeBackActiveArea","iosSwipeBackThreshold","mdSwipeBackAnimateShadow","mdSwipeBackAnimateOpacity","mdSwipeBackActiveArea","mdSwipeBackThreshold","auroraSwipeBackAnimateShadow","auroraSwipeBackAnimateOpacity","auroraSwipeBackActiveArea","auroraSwipeBackThreshold","iosPageLoadDelay","mdPageLoadDelay","auroraPageLoadDelay","$popoverView","$popupView","$panelView","$viewsEl","getCurrentView","modalOpen panelOpen","modalBeforeDestroy panelBeforeDestroy","view-init","Navbar","size","$innerEl","needCenterTitle","needLeftTitle","iosCenterTitle","right","title","subnavbar","noLeft","noRight","leftWidth","outerWidth","rightWidth","titleWidth","navbarStyles","navbarInnerWidth","paddingLeft","paddingRight","isPrevious","sliding","currLeft","diff","requiredLeft","titleLeftOffset","titleRightOffset","activeNavbarBackLink","titleLeft","hideStatusbar","hideOnlyCurrent","isDynamic","subEl","pageData","getPageByEl","collapseLargeTitle","expandLargeTitle","toggleLargeTitle","initNavbarOnScroll","needHide","needCollapse","needTransparent","$titleLargeEl","isLarge","navbarHideHeight","snapPageScrollToLargeTitle","snapPageScrollToTransparentNavbar","previousScrollTop","currentScrollTop","reachEnd","navbarHidden","navbarCollapsed","navbarTitleLargeHeight","navbarOffsetHeight","scrollChanged","scrollContent","scrollTimeoutId","touchEndTimeoutId","calcScrollableDistance","f7ScrollableDistance","snapLargeNavbar","snapTransparentNavbar","previousCollapseProgress","collapseProgress","handleScroll","isLargeTransparent","scrollableDistance","previousCollapseWasInMiddle","handleLargeNavbarCollapse","isHidden","notTransparent","handleNavbarTransparent","showOnPageScrollEnd","showOnPageScrollTop","handeTouchStart","f7DetachNavbarScrollHandlers","Navbar$1","scrollTopOnTitleClick","mdCenterTitle","auroraCenterTitle","hideOnPageScroll","collapseLargeTitleOnScroll","panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint","pageBeforeRemove","pageBeforeIn","pageReinit","pageInit","needCollapseOnScrollHandler","needTransparentOnScroll","needHideOnScrollHandler","panelOpen panelSwipeOpen modalOpen","tabShow",".navbar .title","clickedData","$pageContentEl","Toolbar","setHighlight","tabbarEl","$tabbarEl","$highlightEl","tabLinksCount","$activeLink","highlightWidth","highlightTranslate","activeIndex","toolbar","initToolbarOnScroll","toolbarHidden","$toolbarEl","f7ScrollToolbarHandler","Toolbar$1","tabbar","Subnavbar","subnavbarEl","TouchRipple","ripple","center","diameter","isInset","insetElements","rippleTransform","scale","$rippleWaveEl","shouldBeRemoved","out","removeTimeout","openedModals","dialogsQueue","Modal","opened","$containerEl","containerEl","onOpen","onOpened","onClose","onClosed","backdrop","backdropUnique","forceBackdropUnique","$backdropEl","animateModal","queueDialogs","pushToQueue","openedModal","$modalParentEl","wasInDom","needToHideBackdrop","popupEl","popupInstance","closeByBackdropClick","backdropEl","clearDialogsQueue","destroyed","CustomModal","extendedParams","customModal","handleClick"],"mappings":"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","file":"framework7.min.js","sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","// eslint-disable-next-line\nimport * as methods from 'dom7';\n\nObject.keys(methods).forEach((methodName) => {\n if (methodName === '$') return;\n methods.$.fn[methodName] = methods[methodName];\n});\n\nexport default methods.$;\n","import { getWindow } from 'ssr-window';\n\nlet uniqueNum = 0;\nexport function uniqueNumber() {\n uniqueNum += 1;\n return uniqueNum;\n}\nexport function id(mask = 'xxxxxxxxxx', map = '0123456789abcdef') {\n const length = map.length;\n return mask.replace(/x/g, () => map[Math.floor(Math.random() * length)]);\n}\nexport const mdPreloaderContent = `\n <span class=\"preloader-inner\">\n <svg viewBox=\"0 0 36 36\">\n <circle cx=\"18\" cy=\"18\" r=\"16\"></circle>\n </svg>\n </span>\n`.trim();\n\nexport const iosPreloaderContent = `\n <span class=\"preloader-inner\">\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(() => '<span class=\"preloader-inner-line\"></span>').join('')}\n </span>\n`.trim();\n\nexport const auroraPreloaderContent = `\n <span class=\"preloader-inner\">\n <span class=\"preloader-inner-circle\"></span>\n </span>\n`;\nexport function eventNameToColonCase(eventName) {\n let hasColon;\n return eventName\n .split('')\n .map((char, index) => {\n if (char.match(/[A-Z]/) && index !== 0 && !hasColon) {\n hasColon = true;\n return `:${char.toLowerCase()}`;\n }\n return char.toLowerCase();\n })\n .join('');\n}\nexport function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no setter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nexport function requestAnimationFrame(callback) {\n const window = getWindow();\n return window.requestAnimationFrame(callback);\n}\nexport function cancelAnimationFrame(frameId) {\n const window = getWindow();\n return window.cancelAnimationFrame(frameId);\n}\nexport function nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nexport function nextFrame(callback) {\n return requestAnimationFrame(() => {\n requestAnimationFrame(callback);\n });\n}\nexport function now() {\n return Date.now();\n}\n\nexport function parseUrlQuery(url) {\n const window = getWindow();\n const query = {};\n let urlToParse = url || window.location.href;\n let i;\n let params;\n let param;\n let length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] =\n typeof param[1] === 'undefined'\n ? undefined\n : decodeURIComponent(param.slice(1).join('=')) || '';\n }\n }\n return query;\n}\nexport function getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = window.getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform\n .split(', ')\n .map((a) => a.replace(',', '.'))\n .join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix =\n curStyle.MozTransform ||\n curStyle.OTransform ||\n curStyle.MsTransform ||\n curStyle.msTransform ||\n curStyle.transform ||\n curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nexport function serializeObject(obj, parents = []) {\n if (typeof obj === 'string') return obj;\n const resultArray = [];\n const separator = '&';\n let newParents;\n function varName(name) {\n if (parents.length > 0) {\n let parentParts = '';\n for (let j = 0; j < parents.length; j += 1) {\n if (j === 0) parentParts += parents[j];\n else parentParts += `[${encodeURIComponent(parents[j])}]`;\n }\n return `${parentParts}[${encodeURIComponent(name)}]`;\n }\n return encodeURIComponent(name);\n }\n function varValue(value) {\n return encodeURIComponent(value);\n }\n Object.keys(obj).forEach((prop) => {\n let toPush;\n if (Array.isArray(obj[prop])) {\n toPush = [];\n for (let i = 0; i < obj[prop].length; i += 1) {\n if (!Array.isArray(obj[prop][i]) && typeof obj[prop][i] === 'object') {\n newParents = parents.slice();\n newParents.push(prop);\n newParents.push(String(i));\n toPush.push(serializeObject(obj[prop][i], newParents));\n } else {\n toPush.push(`${varName(prop)}[]=${varValue(obj[prop][i])}`);\n }\n }\n if (toPush.length > 0) resultArray.push(toPush.join(separator));\n } else if (obj[prop] === null || obj[prop] === '') {\n resultArray.push(`${varName(prop)}=`);\n } else if (typeof obj[prop] === 'object') {\n // Object, convert to named array\n newParents = parents.slice();\n newParents.push(prop);\n toPush = serializeObject(obj[prop], newParents);\n if (toPush !== '') resultArray.push(toPush);\n } else if (typeof obj[prop] !== 'undefined' && obj[prop] !== '') {\n // Should be string or plain value\n resultArray.push(`${varName(prop)}=${varValue(obj[prop])}`);\n } else if (obj[prop] === '') resultArray.push(varName(prop));\n });\n return resultArray.join(separator);\n}\nexport function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\nexport function merge(...args) {\n const to = args[0];\n args.splice(0, 1);\n const from = args;\n\n for (let i = 0; i < from.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\nexport function extend(...args) {\n let deep = true;\n let to;\n let from;\n if (typeof args[0] === 'boolean') {\n deep = args[0];\n to = args[1];\n args.splice(0, 2);\n from = args;\n } else {\n to = args[0];\n args.splice(0, 1);\n from = args;\n }\n for (let i = 0; i < from.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (!deep) {\n to[nextKey] = nextSource[nextKey];\n } else if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n extend(to[nextKey], nextSource[nextKey]);\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nexport function colorHexToRgb(hex) {\n const h = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => r + r + g + g + b + b);\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(h);\n return result ? result.slice(1).map((n) => parseInt(n, 16)) : null;\n}\nexport function colorRgbToHex(r, g, b) {\n const result = [r, g, b]\n .map((n) => {\n const hex = n.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n })\n .join('');\n return `#${result}`;\n}\nexport function colorRgbToHsl(r, g, b) {\n r /= 255; // eslint-disable-line\n g /= 255; // eslint-disable-line\n b /= 255; // eslint-disable-line\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n let h;\n if (d === 0) h = 0;\n else if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else if (max === b) h = (r - g) / d + 4;\n const l = (min + max) / 2;\n const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));\n if (h < 0) h = 360 / 60 + h;\n return [h * 60, s, l];\n}\nexport function colorHslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hp = h / 60;\n const x = c * (1 - Math.abs((hp % 2) - 1));\n let rgb1;\n if (Number.isNaN(h) || typeof h === 'undefined') {\n rgb1 = [0, 0, 0];\n } else if (hp <= 1) rgb1 = [c, x, 0];\n else if (hp <= 2) rgb1 = [x, c, 0];\n else if (hp <= 3) rgb1 = [0, c, x];\n else if (hp <= 4) rgb1 = [0, x, c];\n else if (hp <= 5) rgb1 = [x, 0, c];\n else if (hp <= 6) rgb1 = [c, 0, x];\n const m = l - c / 2;\n return rgb1.map((n) => Math.max(0, Math.min(255, Math.round(255 * (n + m)))));\n}\nexport function colorHsbToHsl(h, s, b) {\n const HSL = {\n h,\n s: 0,\n l: 0,\n };\n const HSB = { h, s, b };\n\n HSL.l = ((2 - HSB.s) * HSB.b) / 2;\n HSL.s = HSL.l && HSL.l < 1 ? (HSB.s * HSB.b) / (HSL.l < 0.5 ? HSL.l * 2 : 2 - HSL.l * 2) : HSL.s;\n\n return [HSL.h, HSL.s, HSL.l];\n}\nexport function colorHslToHsb(h, s, l) {\n const HSB = {\n h,\n s: 0,\n b: 0,\n };\n const HSL = { h, s, l };\n\n const t = HSL.s * (HSL.l < 0.5 ? HSL.l : 1 - HSL.l);\n HSB.b = HSL.l + t;\n HSB.s = HSL.l > 0 ? (2 * t) / HSB.b : HSB.s;\n\n return [HSB.h, HSB.s, HSB.b];\n}\nexport function colorThemeCSSProperties(...args) {\n let hex;\n let rgb;\n if (args.length === 1) {\n hex = args[0];\n rgb = colorHexToRgb(hex);\n } else if (args.length === 3) {\n rgb = args;\n hex = colorRgbToHex(...rgb);\n }\n if (!rgb) return {};\n const hsl = colorRgbToHsl(...rgb);\n const hslShade = [hsl[0], hsl[1], Math.max(0, hsl[2] - 0.08)];\n const hslTint = [hsl[0], hsl[1], Math.max(0, hsl[2] + 0.08)];\n const shade = colorRgbToHex(...colorHslToRgb(...hslShade));\n const tint = colorRgbToHex(...colorHslToRgb(...hslTint));\n return {\n '--f7-theme-color': hex,\n '--f7-theme-color-rgb': rgb.join(', '),\n '--f7-theme-color-shade': shade,\n '--f7-theme-color-tint': tint,\n };\n}\n\nexport function bindMethods(instance, obj) {\n Object.keys(obj).forEach((key) => {\n if (isObject(obj[key])) {\n Object.keys(obj[key]).forEach((subKey) => {\n if (typeof obj[key][subKey] === 'function') {\n obj[key][subKey] = obj[key][subKey].bind(instance);\n }\n });\n }\n instance[key] = obj[key];\n });\n}\n\nexport function flattenArray(...args) {\n const arr = [];\n args.forEach((arg) => {\n if (Array.isArray(arg)) arr.push(...flattenArray(...arg));\n else arr.push(arg);\n });\n return arr;\n}\n","import { getWindow, getDocument } from 'ssr-window';\n\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n\n return {\n touch: !!(\n 'ontouchstart' in window ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)\n ),\n\n pointerEvents:\n !!window.PointerEvent &&\n 'maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints >= 0,\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n })(),\n\n intersectionObserver: (function checkObserver() {\n return 'IntersectionObserver' in window;\n })(),\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nexport { getSupport };\n","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\n\nlet deviceCalculated;\n\nfunction calcDevice({ userAgent } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n iphone: false,\n ipod: false,\n ipad: false,\n edge: false,\n ie: false,\n firefox: false,\n macos: false,\n windows: false,\n cordova: !!(window.cordova || window.phonegap),\n phonegap: !!(window.cordova || window.phonegap),\n electron: false,\n capacitor: !!window.Capacitor,\n nwjs: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS|iPhone;\\sCPU\\sOS)\\s([\\d_]+)/);\n const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n const edge = ua.indexOf('Edge/') >= 0;\n const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n const windows = platform === 'Win32';\n const electron = ua.toLowerCase().indexOf('electron') >= 0;\n const nwjs =\n typeof nw !== 'undefined' &&\n typeof process !== 'undefined' &&\n typeof process.versions !== 'undefined' &&\n typeof process.versions.nw !== 'undefined';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810',\n ];\n if (\n !ipad &&\n macos &&\n support.touch &&\n iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n device.ie = ie;\n device.edge = edge;\n device.firefox = firefox;\n\n // Android\n if (android) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.ipod = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Webview\n device.webView =\n !!(\n (iphone || ipad || ipod) &&\n (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone)\n ) ||\n (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n device.webview = device.webView;\n device.standalone = device.webView;\n\n // Desktop\n device.desktop = !(device.ios || device.android) || electron || nwjs;\n if (device.desktop) {\n device.electron = electron;\n device.nwjs = nwjs;\n device.macos = macos;\n device.windows = windows;\n if (device.macos) {\n device.os = 'macos';\n }\n if (device.windows) {\n device.os = 'windows';\n }\n }\n\n // Pixel Ratio\n device.pixelRatio = window.devicePixelRatio || 1;\n\n // Color Scheme\n const DARK = '(prefers-color-scheme: dark)';\n const LIGHT = '(prefers-color-scheme: light)';\n device.prefersColorScheme = function prefersColorTheme() {\n let theme;\n if (window.matchMedia && window.matchMedia(LIGHT).matches) {\n theme = 'light';\n }\n if (window.matchMedia && window.matchMedia(DARK).matches) {\n theme = 'dark';\n }\n return theme;\n };\n\n // Export object\n return device;\n}\n\nfunction getDevice(overrides = {}, reset) {\n if (!deviceCalculated || reset) {\n deviceCalculated = calcDevice(overrides);\n }\n return deviceCalculated;\n}\n\nexport { getDevice };\n","class EventsClass {\n constructor(parents = []) {\n const self = this;\n self.eventsParents = parents;\n self.eventsListeners = {};\n }\n\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n }\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n handler.apply(self, args);\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n }\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (\n eventHandler === handler ||\n (eventHandler.f7proxy && eventHandler.f7proxy === handler)\n ) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n }\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n let eventsParents;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n eventsParents = self.eventsParents;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n eventsParents = args[0].local ? [] : args[0].parents || self.eventsParents;\n }\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n const localEvents = eventsArray.map((eventName) => eventName.replace('local::', ''));\n const parentEvents = eventsArray.filter((eventName) => eventName.indexOf('local::') < 0);\n\n localEvents.forEach((event) => {\n if (self.eventsListeners && self.eventsListeners[event]) {\n const handlers = [];\n self.eventsListeners[event].forEach((eventHandler) => {\n handlers.push(eventHandler);\n });\n handlers.forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n if (eventsParents && eventsParents.length > 0) {\n eventsParents.forEach((eventsParent) => {\n eventsParent.emit(parentEvents, ...data);\n });\n }\n return self;\n }\n}\n\nexport default EventsClass;\n","import { extend, now } from './utils.js';\nimport EventsClass from './events-class.js';\n\nclass Framework7Class extends EventsClass {\n constructor(params = {}, parents = []) {\n super(parents);\n const self = this;\n self.params = params;\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach((eventName) => {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n }\n\n // eslint-disable-next-line\n useModuleParams(module, instanceParams) {\n if (module.params) {\n const originalParams = {};\n Object.keys(module.params).forEach((paramKey) => {\n if (typeof instanceParams[paramKey] === 'undefined') return;\n originalParams[paramKey] = extend({}, instanceParams[paramKey]);\n });\n extend(instanceParams, module.params);\n Object.keys(originalParams).forEach((paramKey) => {\n extend(instanceParams[paramKey], originalParams[paramKey]);\n });\n }\n }\n\n useModulesParams(instanceParams) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n extend(instanceParams, module.params);\n }\n });\n }\n\n useModule(moduleName = '', moduleParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n const module = typeof moduleName === 'string' ? instance.modules[moduleName] : moduleName;\n if (!module) return;\n\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach((modulePropName) => {\n const moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach((moduleEventName) => {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n // Add vnode hooks\n if (module.vnode) {\n if (!instance.vnodeHooks) instance.vnodeHooks = {};\n Object.keys(module.vnode).forEach((vnodeId) => {\n Object.keys(module.vnode[vnodeId]).forEach((hookName) => {\n const handler = module.vnode[vnodeId][hookName];\n if (!instance.vnodeHooks[hookName]) instance.vnodeHooks[hookName] = {};\n if (!instance.vnodeHooks[hookName][vnodeId]) instance.vnodeHooks[hookName][vnodeId] = [];\n instance.vnodeHooks[hookName][vnodeId].push(handler.bind(instance));\n });\n });\n }\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n }\n\n useModules(modulesParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const moduleParams = modulesParams[moduleName] || {};\n instance.useModule(moduleName, moduleParams);\n });\n }\n\n static set components(components) {\n const Class = this;\n if (!Class.use) return;\n Class.use(components);\n }\n\n static installModule(module, ...params) {\n const Class = this;\n if (!Class.prototype.modules) Class.prototype.modules = {};\n const name = module.name || `${Object.keys(Class.prototype.modules).length}_${now()}`;\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach((key) => {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach((key) => {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n }\n\n static use(module, ...params) {\n const Class = this;\n if (Array.isArray(module)) {\n module.forEach((m) => Class.installModule(m));\n return Class;\n }\n return Class.installModule(module, ...params);\n }\n}\n\nexport default Framework7Class;\n","import $ from './dom7.js';\n\nexport default function ConstructorMethods(parameters = {}) {\n const { defaultSelector, constructor: Constructor, domProp, app, addMethods } = parameters;\n const methods = {\n create(...args) {\n if (app) return new Constructor(app, ...args);\n return new Constructor(...args);\n },\n get(el = defaultSelector) {\n if (el instanceof Constructor) return el;\n const $el = $(el);\n if ($el.length === 0) return undefined;\n return $el[0][domProp];\n },\n destroy(el) {\n const instance = methods.get(el);\n if (instance && instance.destroy) return instance.destroy();\n return undefined;\n },\n };\n if (addMethods && Array.isArray(addMethods)) {\n addMethods.forEach((methodName) => {\n methods[methodName] = (el = defaultSelector, ...args) => {\n const instance = methods.get(el);\n if (instance && instance[methodName]) return instance[methodName](...args);\n return undefined;\n };\n });\n }\n return methods;\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport { id } from '../../shared/utils.js';\nimport $ from '../../shared/dom7.js';\n\nconst fetchedModules = [];\nfunction loadModule(moduleToLoad) {\n const Framework7 = this;\n const window = getWindow();\n const document = getDocument();\n return new Promise((resolve, reject) => {\n const app = Framework7.instance;\n let modulePath;\n let moduleObj;\n let moduleFunc;\n if (!moduleToLoad) {\n reject(new Error('Framework7: Lazy module must be specified'));\n return;\n }\n\n function install(module) {\n Framework7.use(module);\n\n if (app) {\n app.useModuleParams(module, app.params);\n app.useModule(module);\n }\n }\n\n if (typeof moduleToLoad === 'string') {\n const matchNamePattern = moduleToLoad.match(/([a-z0-9-]*)/i);\n if (\n moduleToLoad.indexOf('.') < 0 &&\n matchNamePattern &&\n matchNamePattern[0].length === moduleToLoad.length\n ) {\n if (!app || (app && !app.params.lazyModulesPath)) {\n reject(\n new Error(\n 'Framework7: \"lazyModulesPath\" app parameter must be specified to fetch module by name',\n ),\n );\n return;\n }\n modulePath = `${app.params.lazyModulesPath}/${moduleToLoad}/${moduleToLoad}.lazy.js`;\n } else {\n modulePath = moduleToLoad;\n }\n } else if (typeof moduleToLoad === 'function') {\n moduleFunc = moduleToLoad;\n } else {\n // considering F7-Plugin object\n moduleObj = moduleToLoad;\n }\n\n if (moduleFunc) {\n const module = moduleFunc(Framework7, false);\n if (!module) {\n reject(\n new Error(\"Framework7: Can't find Framework7 component in specified component function\"),\n );\n return;\n }\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolve();\n return;\n }\n // Install It\n install(module);\n\n resolve();\n }\n if (moduleObj) {\n const module = moduleObj;\n if (!module) {\n reject(new Error(\"Framework7: Can't find Framework7 component in specified component\"));\n return;\n }\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolve();\n return;\n }\n // Install It\n install(module);\n\n resolve();\n }\n if (modulePath) {\n if (fetchedModules.indexOf(modulePath) >= 0) {\n resolve();\n return;\n }\n fetchedModules.push(modulePath);\n const scriptLoad = new Promise((resolveScript, rejectScript) => {\n Framework7.request.get(\n modulePath,\n (scriptContent) => {\n const callbackId = id();\n const callbackLoadName = `f7_component_loader_callback_${callbackId}`;\n\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = `window.${callbackLoadName} = function (Framework7, Framework7AutoInstallComponent) {return ${scriptContent.trim()}}`;\n $('head').append(scriptEl);\n\n const componentLoader = window[callbackLoadName];\n delete window[callbackLoadName];\n $(scriptEl).remove();\n\n const module = componentLoader(Framework7, false);\n\n if (!module) {\n rejectScript(\n new Error(`Framework7: Can't find Framework7 component in ${modulePath} file`),\n );\n return;\n }\n\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolveScript();\n return;\n }\n\n // Install It\n install(module);\n\n resolveScript();\n },\n (xhr, status) => {\n rejectScript(xhr, status);\n },\n );\n });\n const styleLoad = new Promise((resolveStyle) => {\n Framework7.request.get(\n modulePath\n .replace('.lazy.js', app.rtl ? '.rtl.css' : '.css')\n .replace('.js', app.rtl ? '.rtl.css' : '.css'),\n (styleContent) => {\n const styleEl = document.createElement('style');\n styleEl.innerHTML = styleContent;\n $('head').append(styleEl);\n\n resolveStyle();\n },\n () => {\n resolveStyle();\n },\n );\n });\n\n Promise.all([scriptLoad, styleLoad])\n .then(() => {\n resolve();\n })\n .catch((err) => {\n reject(err);\n });\n }\n });\n}\n\nexport default loadModule;\n","/* eslint-disable no-underscore-dangle */\n\nimport { getWindow, getDocument } from 'ssr-window';\nimport { extend, nextFrame } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport Framework7Class from '../../shared/class.js';\nimport EventsClass from '../../shared/events-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nimport $ from '../../shared/dom7.js';\nimport loadModule from './load-module.js';\n\nclass Framework7 extends Framework7Class {\n constructor(params = {}) {\n super(params);\n // eslint-disable-next-line\n if (Framework7.instance && typeof window !== 'undefined') {\n throw new Error(\"Framework7 is already initialized and can't be initialized more than once\");\n }\n const device = getDevice({ userAgent: params.userAgent || undefined });\n const support = getSupport();\n\n const passedParams = extend({}, params);\n\n // App Instance\n const app = this;\n\n app.device = device;\n app.support = support;\n\n const w = getWindow();\n const d = getDocument();\n\n Framework7.instance = app;\n\n // Default\n const defaults = {\n version: '1.0.0',\n id: 'io.framework7.myapp',\n el: 'body',\n theme: 'auto',\n language: w.navigator.language,\n routes: [],\n name: 'Framework7',\n lazyModulesPath: null,\n initOnDeviceReady: true,\n init: true,\n autoDarkMode: false,\n iosTranslucentBars: true,\n iosTranslucentModals: true,\n component: undefined,\n componentUrl: undefined,\n userAgent: null,\n url: null,\n };\n\n // Extend defaults with modules params\n app.useModulesParams(defaults);\n\n // Extend defaults with passed params\n app.params = extend(defaults, params);\n\n extend(app, {\n // App Id\n id: app.params.id,\n // App Name\n name: app.params.name,\n // App version\n version: app.params.version,\n // Routes\n routes: app.params.routes,\n // Lang\n language: app.params.language,\n\n // Theme\n theme: (function getTheme() {\n if (app.params.theme === 'auto') {\n if (device.ios) return 'ios';\n if (device.desktop && device.electron) return 'aurora';\n return 'md';\n }\n return app.params.theme;\n })(),\n\n // Initially passed parameters\n passedParams,\n online: w.navigator.onLine,\n });\n\n if (params.store) app.params.store = params.store;\n\n // Save Root\n if (app.$el && app.$el[0]) {\n app.$el[0].f7 = app;\n }\n\n // Install Modules\n app.useModules();\n\n // Init Store\n app.initStore();\n\n // Init\n if (app.params.init) {\n if (device.cordova && app.params.initOnDeviceReady) {\n $(d).on('deviceready', () => {\n app.init();\n });\n } else {\n app.init();\n }\n }\n\n // Return app instance\n return app;\n }\n\n mount(rootEl) {\n const app = this;\n const window = getWindow();\n const document = getDocument();\n const $rootEl = $(rootEl || app.params.el).eq(0);\n app.$el = $rootEl;\n if (app.$el && app.$el[0]) {\n app.el = app.$el[0];\n app.el.f7 = app;\n app.rtl = $rootEl.css('direction') === 'rtl';\n }\n\n // Auto Dark Mode\n const DARK = '(prefers-color-scheme: dark)';\n const LIGHT = '(prefers-color-scheme: light)';\n app.mq = {};\n if (window.matchMedia) {\n app.mq.dark = window.matchMedia(DARK);\n app.mq.light = window.matchMedia(LIGHT);\n }\n app.colorSchemeListener = function colorSchemeListener({ matches, media }) {\n if (!matches) {\n return;\n }\n const html = document.querySelector('html');\n if (media === DARK) {\n html.classList.add('dark');\n app.darkMode = true;\n app.emit('darkModeChange', true);\n } else if (media === LIGHT) {\n html.classList.remove('dark');\n app.darkMode = false;\n app.emit('darkModeChange', false);\n }\n };\n app.emit('mount');\n }\n\n initStore() {\n const app = this;\n if (typeof app.params.store !== 'undefined' && app.params.store.__store) {\n app.store = app.params.store;\n } else {\n app.store = app.createStore(app.params.store);\n }\n }\n\n enableAutoDarkMode() {\n const window = getWindow();\n const document = getDocument();\n if (!window.matchMedia) return;\n const app = this;\n const html = document.querySelector('html');\n if (app.mq.dark && app.mq.light) {\n app.mq.dark.addListener(app.colorSchemeListener);\n app.mq.light.addListener(app.colorSchemeListener);\n }\n if (app.mq.dark && app.mq.dark.matches) {\n html.classList.add('dark');\n app.darkMode = true;\n app.emit('darkModeChange', true);\n } else if (app.mq.light && app.mq.light.matches) {\n html.classList.remove('dark');\n app.darkMode = false;\n app.emit('darkModeChange', false);\n }\n }\n\n disableAutoDarkMode() {\n const window = getWindow();\n if (!window.matchMedia) return;\n const app = this;\n if (app.mq.dark) app.mq.dark.removeListener(app.colorSchemeListener);\n if (app.mq.light) app.mq.light.removeListener(app.colorSchemeListener);\n }\n\n initAppComponent(callback) {\n const app = this;\n app.router.componentLoader(\n app.params.component,\n app.params.componentUrl,\n { componentOptions: { el: app.$el[0] } },\n (el) => {\n app.$el = $(el);\n app.$el[0].f7 = app;\n app.$elComponent = el.f7Component;\n app.el = app.$el[0];\n if (callback) callback();\n },\n () => {},\n );\n }\n\n init(rootEl) {\n const app = this;\n\n app.mount(rootEl);\n\n const init = () => {\n if (app.initialized) return;\n\n app.$el.addClass('framework7-initializing');\n\n // RTL attr\n if (app.rtl) {\n $('html').attr('dir', 'rtl');\n }\n\n // Auto Dark Mode\n if (app.params.autoDarkMode) {\n app.enableAutoDarkMode();\n }\n\n // Watch for online/offline state\n const window = getWindow();\n window.addEventListener('offline', () => {\n app.online = false;\n app.emit('offline');\n app.emit('connection', false);\n });\n window.addEventListener('online', () => {\n app.online = true;\n app.emit('online');\n app.emit('connection', true);\n });\n\n // Root class\n app.$el.addClass('framework7-root');\n\n // Theme class\n $('html').removeClass('ios md aurora').addClass(app.theme);\n\n // iOS Translucent\n const device = app.device;\n if (app.params.iosTranslucentBars && app.theme === 'ios' && device.ios) {\n $('html').addClass('ios-translucent-bars');\n }\n if (app.params.iosTranslucentModals && app.theme === 'ios' && device.ios) {\n $('html').addClass('ios-translucent-modals');\n }\n\n // Init class\n nextFrame(() => {\n app.$el.removeClass('framework7-initializing');\n });\n // Emit, init other modules\n app.initialized = true;\n app.emit('init');\n };\n if (app.params.component || app.params.componentUrl) {\n app.initAppComponent(() => {\n init();\n });\n } else {\n init();\n }\n return app;\n }\n\n // eslint-disable-next-line\n loadModule(...args) {\n return Framework7.loadModule(...args);\n }\n\n // eslint-disable-next-line\n loadModules(...args) {\n return Framework7.loadModules(...args);\n }\n\n getVnodeHooks(hook, id) {\n const app = this;\n if (!app.vnodeHooks || !app.vnodeHooks[hook]) return [];\n return app.vnodeHooks[hook][id] || [];\n }\n\n // eslint-disable-next-line\n get $() {\n return $;\n }\n\n static get Dom7() {\n return $;\n }\n\n static get $() {\n return $;\n }\n\n static get device() {\n return getDevice();\n }\n\n static get support() {\n return getSupport();\n }\n\n static get Class() {\n return Framework7Class;\n }\n\n static get Events() {\n return EventsClass;\n }\n}\n\nFramework7.ModalMethods = ModalMethods;\nFramework7.ConstructorMethods = ConstructorMethods;\n\nFramework7.loadModule = loadModule;\nFramework7.loadModules = function loadModules(modules) {\n return Promise.all(modules.map((module) => Framework7.loadModule(module)));\n};\n\nexport default Framework7;\n","import $ from './dom7.js';\nimport { extend } from './utils.js';\nimport ConstructorMethods from './constructor-methods.js';\n\nexport default function ModalMethods(parameters = {}) {\n const { defaultSelector, constructor: Constructor, app } = parameters;\n const methods = extend(\n ConstructorMethods({\n defaultSelector,\n constructor: Constructor,\n app,\n domProp: 'f7Modal',\n }),\n {\n open(el, animate, targetEl) {\n let $el = $(el);\n if ($el.length > 1 && targetEl) {\n // check if same modal in other page\n const $targetPage = $(targetEl).parents('.page');\n if ($targetPage.length) {\n $el.each((modalEl) => {\n const $modalEl = $(modalEl);\n if ($modalEl.parents($targetPage)[0] === $targetPage[0]) {\n $el = $modalEl;\n }\n });\n }\n }\n if ($el.length > 1) {\n $el = $el.eq($el.length - 1);\n }\n if (!$el.length) return undefined;\n let instance = $el[0].f7Modal;\n if (!instance) {\n const params = $el.dataset();\n instance = new Constructor(app, { el: $el, ...params });\n }\n return instance.open(animate);\n },\n close(el = defaultSelector, animate, targetEl) {\n let $el = $(el);\n if (!$el.length) return undefined;\n if ($el.length > 1) {\n // check if close link (targetEl) in this modal\n let $parentEl;\n if (targetEl) {\n const $targetEl = $(targetEl);\n if ($targetEl.length) {\n $parentEl = $targetEl.parents($el);\n }\n }\n if ($parentEl && $parentEl.length > 0) {\n $el = $parentEl;\n } else {\n $el = $el.eq($el.length - 1);\n }\n }\n let instance = $el[0].f7Modal;\n if (!instance) {\n const params = $el.dataset();\n instance = new Constructor(app, { el: $el, ...params });\n }\n return instance.close(animate);\n },\n },\n );\n return methods;\n}\n","import { getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\n\nexport default {\n name: 'device',\n static: {\n getDevice,\n },\n on: {\n init() {\n const document = getDocument();\n const device = getDevice();\n const classNames = [];\n const html = document.querySelector('html');\n const metaStatusbar = document.querySelector(\n 'meta[name=\"apple-mobile-web-app-status-bar-style\"]',\n );\n if (!html) return;\n if (\n device.standalone &&\n device.ios &&\n metaStatusbar &&\n metaStatusbar.content === 'black-translucent'\n ) {\n classNames.push('device-full-viewport');\n }\n\n // Pixel Ratio\n classNames.push(`device-pixel-ratio-${Math.floor(device.pixelRatio)}`);\n // OS classes\n if (device.os && !device.desktop) {\n classNames.push(`device-${device.os}`);\n } else if (device.desktop) {\n classNames.push('device-desktop');\n if (device.os) {\n classNames.push(`device-${device.os}`);\n }\n }\n if (device.cordova || device.phonegap) {\n classNames.push('device-cordova');\n }\n if (device.capacitor) {\n classNames.push('device-capacitor');\n }\n\n // Add html classes\n classNames.forEach((className) => {\n html.classList.add(className);\n });\n },\n },\n};\n","import { getSupport } from '../../shared/get-support.js';\n\nexport default {\n name: 'support',\n static: {\n getSupport,\n },\n};\n","import * as utils from '../../shared/utils.js';\n\nexport default {\n name: 'utils',\n proto: {\n utils,\n },\n static: {\n utils,\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\n\nexport default {\n name: 'resize',\n create() {\n const app = this;\n app.getSize = () => {\n if (!app.el) return { width: 0, height: 0, left: 0, top: 0 };\n const offset = app.$el.offset();\n const [width, height, left, top] = [\n app.el.offsetWidth,\n app.el.offsetHeight,\n offset.left,\n offset.top,\n ];\n app.width = width;\n app.height = height;\n app.left = left;\n app.top = top;\n return { width, height, left, top };\n };\n },\n on: {\n init() {\n const app = this;\n const window = getWindow();\n\n // Get Size\n app.getSize();\n\n // Emit resize\n window.addEventListener(\n 'resize',\n () => {\n app.emit('resize');\n },\n false,\n );\n\n // Emit orientationchange\n window.addEventListener('orientationchange', () => {\n app.emit('orientationchange');\n });\n },\n orientationchange() {\n const document = getDocument();\n const device = getDevice();\n // Fix iPad weird body scroll\n if (device.ipad) {\n document.body.scrollLeft = 0;\n setTimeout(() => {\n document.body.scrollLeft = 0;\n }, 0);\n }\n },\n resize() {\n const app = this;\n app.getSize();\n },\n },\n};\n","/* eslint-disable max-classes-per-file */\nimport { getWindow, getDocument } from 'ssr-window';\nimport { extend, serializeObject } from './utils.js';\n\nconst globals = {};\nlet jsonpRequests = 0;\n\nclass RequestResponse {\n constructor(obj) {\n Object.assign(this, obj);\n }\n}\n\nclass RequestError extends Error {\n constructor(obj) {\n super();\n Object.assign(this, obj);\n }\n}\n\nconst request = (requestOptions) =>\n new Promise((resolve, reject) => {\n const window = getWindow();\n const document = getDocument();\n const globalsNoCallbacks = extend({}, globals);\n 'beforeCreate beforeOpen beforeSend error complete success statusCode'\n .split(' ')\n .forEach((callbackName) => {\n delete globalsNoCallbacks[callbackName];\n });\n const defaults = extend(\n {\n url: window.location.toString(),\n method: 'GET',\n data: false,\n async: true,\n cache: true,\n user: '',\n password: '',\n headers: {},\n xhrFields: {},\n statusCode: {},\n processData: true,\n dataType: 'text',\n contentType: 'application/x-www-form-urlencoded',\n timeout: 0,\n },\n globalsNoCallbacks,\n );\n\n let proceedRequest;\n\n const options = extend({}, defaults, requestOptions);\n if (requestOptions.abortController) {\n options.abortController = requestOptions.abortController;\n }\n\n if (options.abortController && options.abortController.canceled) {\n reject(new RequestError({ options, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // Function to run XHR callbacks and events\n function fireCallback(callbackName, ...data) {\n /*\n Callbacks:\n beforeCreate (options),\n beforeOpen (xhr, options),\n beforeSend (xhr, options),\n error (xhr, status, message),\n complete (xhr, status),\n success (response, status, xhr),\n statusCode ()\n */\n let globalCallbackValue;\n let optionCallbackValue;\n if (globals[callbackName]) {\n globalCallbackValue = globals[callbackName](...data);\n }\n if (options[callbackName]) {\n optionCallbackValue = options[callbackName](...data);\n }\n if (typeof globalCallbackValue !== 'boolean') globalCallbackValue = true;\n if (typeof optionCallbackValue !== 'boolean') optionCallbackValue = true;\n if (\n options.abortController &&\n options.abortController.canceled &&\n (callbackName === 'beforeCreate' ||\n callbackName === 'beforeOpen' ||\n callbackName === 'beforeSend')\n ) {\n return false;\n }\n return globalCallbackValue && optionCallbackValue;\n }\n\n // Before create callback\n proceedRequest = fireCallback('beforeCreate', options);\n if (proceedRequest === false) {\n reject(new RequestError({ options, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // For jQuery guys\n if (options.type) options.method = options.type;\n\n // Parameters Prefix\n let paramsPrefix = options.url.indexOf('?') >= 0 ? '&' : '?';\n\n // UC method\n const method = options.method.toUpperCase();\n\n // Data to modify GET URL\n if (\n (method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') &&\n options.data\n ) {\n let stringData;\n if (typeof options.data === 'string') {\n // Should be key=value string\n if (options.data.indexOf('?') >= 0) stringData = options.data.split('?')[1];\n else stringData = options.data;\n } else {\n // Should be key=value object\n stringData = serializeObject(options.data);\n }\n if (stringData.length) {\n options.url += paramsPrefix + stringData;\n if (paramsPrefix === '?') paramsPrefix = '&';\n }\n }\n\n // JSONP\n if (options.dataType === 'json' && options.url.indexOf('callback=') >= 0) {\n const callbackName = `f7jsonp_${Date.now() + (jsonpRequests += 1)}`;\n let abortTimeout;\n const callbackSplit = options.url.split('callback=');\n let requestUrl = `${callbackSplit[0]}callback=${callbackName}`;\n if (callbackSplit[1].indexOf('&') >= 0) {\n const addVars = callbackSplit[1]\n .split('&')\n .filter((el) => el.indexOf('=') > 0)\n .join('&');\n if (addVars.length > 0) requestUrl += `&${addVars}`;\n }\n\n // Create script\n let script = document.createElement('script');\n script.type = 'text/javascript';\n script.onerror = function onerror() {\n clearTimeout(abortTimeout);\n fireCallback('error', null, 'scripterror', 'scripterror');\n reject(new RequestError({ options, status: 'scripterror', message: 'scripterror' }));\n fireCallback('complete', null, 'scripterror');\n };\n script.src = requestUrl;\n\n // Handler\n window[callbackName] = function jsonpCallback(data) {\n clearTimeout(abortTimeout);\n fireCallback('success', data);\n script.parentNode.removeChild(script);\n script = null;\n delete window[callbackName];\n resolve(new RequestResponse({ options, data }));\n };\n document.querySelector('head').appendChild(script);\n\n if (options.timeout > 0) {\n abortTimeout = setTimeout(() => {\n script.parentNode.removeChild(script);\n script = null;\n fireCallback('error', null, 'timeout', 'timeout');\n reject(new RequestError({ options, status: 'timeout', message: 'timeout' }));\n }, options.timeout);\n }\n\n return;\n }\n\n // Cache for GET/HEAD requests\n if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') {\n if (options.cache === false) {\n options.url += `${paramsPrefix}_nocache${Date.now()}`;\n }\n }\n\n // Create XHR\n const xhr = new XMLHttpRequest();\n\n if (options.abortController) {\n let aborted = false;\n options.abortController.onAbort = () => {\n if (aborted) return;\n aborted = true;\n xhr.abort();\n reject(new RequestError({ options, xhr, status: 'canceled', message: 'canceled' }));\n };\n }\n\n // Save Request URL\n xhr.requestUrl = options.url;\n xhr.requestParameters = options;\n\n // Before open callback\n proceedRequest = fireCallback('beforeOpen', xhr, options);\n if (proceedRequest === false) {\n reject(new RequestError({ options, xhr, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // Open XHR\n xhr.open(method, options.url, options.async, options.user, options.password);\n\n // Create POST Data\n let postData = null;\n\n if ((method === 'POST' || method === 'PUT' || method === 'PATCH') && options.data) {\n if (options.processData) {\n const postDataInstances = [ArrayBuffer, Blob, Document, FormData];\n // Post Data\n if (postDataInstances.indexOf(options.data.constructor) >= 0) {\n postData = options.data;\n } else {\n // POST Headers\n const boundary = `---------------------------${Date.now().toString(16)}`;\n\n if (options.contentType === 'multipart/form-data') {\n xhr.setRequestHeader('Content-Type', `multipart/form-data; boundary=${boundary}`);\n } else {\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n postData = '';\n let data = serializeObject(options.data);\n if (options.contentType === 'multipart/form-data') {\n data = data.split('&');\n const newData = [];\n for (let i = 0; i < data.length; i += 1) {\n newData.push(\n `Content-Disposition: form-data; name=\"${data[i].split('=')[0]}\"\\r\\n\\r\\n${\n data[i].split('=')[1]\n }\\r\\n`,\n );\n }\n postData = `--${boundary}\\r\\n${newData.join(`--${boundary}\\r\\n`)}--${boundary}--\\r\\n`;\n } else if (options.contentType === 'application/json') {\n postData = JSON.stringify(options.data);\n } else {\n postData = data;\n }\n }\n } else {\n postData = options.data;\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n }\n if (options.dataType === 'json' && (!options.headers || !options.headers.Accept)) {\n xhr.setRequestHeader('Accept', 'application/json');\n }\n\n // Additional headers\n if (options.headers) {\n Object.keys(options.headers).forEach((headerName) => {\n if (typeof options.headers[headerName] === 'undefined') return;\n xhr.setRequestHeader(headerName, options.headers[headerName]);\n });\n }\n\n // Check for crossDomain\n if (typeof options.crossDomain === 'undefined') {\n options.crossDomain =\n // eslint-disable-next-line\n /^([\\w-]+:)?\\/\\/([^\\/]+)/.test(options.url) && RegExp.$2 !== window.location.host;\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (options.xhrFields) {\n extend(xhr, options.xhrFields);\n }\n\n // Handle XHR\n xhr.onload = function onload() {\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) {\n let responseData;\n if (options.dataType === 'json') {\n let parseError;\n try {\n responseData = JSON.parse(xhr.responseText);\n } catch (err) {\n parseError = true;\n }\n if (!parseError) {\n fireCallback('success', responseData, xhr.status, xhr);\n resolve(new RequestResponse({ options, data: responseData, status: xhr.status, xhr }));\n } else {\n fireCallback('error', xhr, 'parseerror', 'parseerror');\n reject(new RequestError({ options, xhr, status: 'parseerror', message: 'parseerror' }));\n }\n } else {\n responseData =\n xhr.responseType === 'text' || xhr.responseType === ''\n ? xhr.responseText\n : xhr.response;\n fireCallback('success', responseData, xhr.status, xhr);\n resolve(new RequestResponse({ options, data: responseData, status: xhr.status, xhr }));\n }\n } else {\n fireCallback('error', xhr, xhr.status, xhr.statusText);\n reject(new RequestError({ options, xhr, status: xhr.status, message: xhr.statusText }));\n }\n if (options.statusCode) {\n if (globals.statusCode && globals.statusCode[xhr.status])\n globals.statusCode[xhr.status](xhr);\n if (options.statusCode[xhr.status]) options.statusCode[xhr.status](xhr);\n }\n fireCallback('complete', xhr, xhr.status);\n };\n\n xhr.onerror = function onerror() {\n fireCallback('error', xhr, xhr.status, xhr.status);\n reject(new RequestError({ options, xhr, status: xhr.status, message: xhr.statusText }));\n fireCallback('complete', xhr, 'error');\n };\n\n // Timeout\n if (options.timeout > 0) {\n xhr.timeout = options.timeout;\n xhr.ontimeout = () => {\n fireCallback('error', xhr, 'timeout', 'timeout');\n reject(new RequestError({ options, xhr, status: 'timeout', message: 'timeout' }));\n fireCallback('complete', xhr, 'timeout');\n };\n }\n\n // Ajax start callback\n proceedRequest = fireCallback('beforeSend', xhr, options);\n if (proceedRequest === false) {\n reject(new RequestError({ options, xhr, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // Send XHR\n xhr.send(postData);\n });\n\nfunction requestShortcut(method, ...args) {\n let [url, data, success, error, dataType] = [];\n if (typeof args[1] === 'function') {\n [url, success, error, dataType] = args;\n } else {\n [url, data, success, error, dataType] = args;\n }\n [success, error].forEach((callback) => {\n if (typeof callback === 'string') {\n dataType = callback;\n if (callback === success) success = undefined;\n else error = undefined;\n }\n });\n dataType = dataType || (method === 'json' || method === 'postJSON' ? 'json' : undefined);\n const requestOptions = {\n url,\n method: method === 'post' || method === 'postJSON' ? 'POST' : 'GET',\n data,\n success,\n error,\n dataType,\n };\n if (method === 'postJSON') {\n extend(requestOptions, {\n contentType: 'application/json',\n processData: false,\n crossDomain: true,\n data: typeof data === 'string' ? data : JSON.stringify(data),\n });\n }\n return request(requestOptions);\n}\n\nObject.assign(request, {\n get: (...args) => requestShortcut('get', ...args),\n post: (...args) => requestShortcut('post', ...args),\n json: (...args) => requestShortcut('json', ...args),\n getJSON: (...args) => requestShortcut('json', ...args),\n postJSON: (...args) => requestShortcut('postJSON', ...args),\n});\n\nrequest.abortController = () => {\n const contoller = {\n canceled: false,\n onAbort: null,\n abort() {\n contoller.canceled = true;\n if (contoller.onAbort) contoller.onAbort();\n },\n };\n return contoller;\n};\n\nrequest.setup = function setup(options) {\n if (options.type && !options.method) {\n extend(options, { method: options.type });\n }\n extend(globals, options);\n};\n\nexport default request;\n","/* eslint no-param-reassign: \"off\" */\nimport request from '../../shared/request.js';\n\nexport default {\n name: 'request',\n proto: {\n request,\n },\n static: {\n request,\n },\n};\n","/* eslint-disable no-nested-ternary */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { extend } from '../../shared/utils.js';\n\nfunction initTouch() {\n const app = this;\n const device = getDevice();\n const support = getSupport();\n const window = getWindow();\n const document = getDocument();\n const params = app.params.touch;\n const useRipple = params[`${app.theme}TouchRipple`];\n\n if (device.ios && device.webView) {\n // Strange hack required for iOS 8 webview to work on inputs\n window.addEventListener('touchstart', () => {});\n }\n\n let touchStartX;\n let touchStartY;\n let targetElement;\n let isMoved;\n let tapHoldFired;\n let tapHoldTimeout;\n let preventClick;\n\n let activableElement;\n let activeTimeout;\n\n let rippleWave;\n let rippleTarget;\n let rippleTimeout;\n\n function findActivableElement(el) {\n const target = $(el);\n const parents = target.parents(params.activeStateElements);\n if (target.closest('.no-active-state').length) {\n return null;\n }\n let activable;\n if (target.is(params.activeStateElements)) {\n activable = target;\n }\n if (parents.length > 0) {\n activable = activable ? activable.add(parents) : parents;\n }\n if (activable && activable.length > 1) {\n const newActivable = [];\n let preventPropagation;\n for (let i = 0; i < activable.length; i += 1) {\n if (!preventPropagation) {\n newActivable.push(activable[i]);\n if (\n activable.eq(i).hasClass('prevent-active-state-propagation') ||\n activable.eq(i).hasClass('no-active-state-propagation')\n ) {\n preventPropagation = true;\n }\n }\n }\n activable = $(newActivable);\n }\n return activable || target;\n }\n\n function isInsideScrollableView(el) {\n const pageContent = el.parents('.page-content');\n return pageContent.length > 0;\n }\n\n function addActive() {\n if (!activableElement) return;\n activableElement.addClass('active-state');\n }\n function removeActive() {\n if (!activableElement) return;\n activableElement.removeClass('active-state');\n activableElement = null;\n }\n\n // Ripple handlers\n function findRippleElement(el) {\n const rippleElements = params.touchRippleElements;\n const $el = $(el);\n if ($el.is(rippleElements)) {\n if ($el.hasClass('no-ripple')) {\n return false;\n }\n return $el;\n }\n if ($el.parents(rippleElements).length > 0) {\n const rippleParent = $el.parents(rippleElements).eq(0);\n if (rippleParent.hasClass('no-ripple')) {\n return false;\n }\n return rippleParent;\n }\n return false;\n }\n function createRipple($el, x, y) {\n if (!$el) return;\n rippleWave = app.touchRipple.create(app, $el, x, y);\n }\n\n function removeRipple() {\n if (!rippleWave) return;\n rippleWave.remove();\n rippleWave = undefined;\n rippleTarget = undefined;\n }\n function rippleTouchStart(el) {\n rippleTarget = findRippleElement(el);\n if (!rippleTarget || rippleTarget.length === 0) {\n rippleTarget = undefined;\n return;\n }\n const inScrollable = isInsideScrollableView(rippleTarget);\n\n if (!inScrollable) {\n removeRipple();\n createRipple(rippleTarget, touchStartX, touchStartY);\n } else {\n clearTimeout(rippleTimeout);\n rippleTimeout = setTimeout(() => {\n removeRipple();\n createRipple(rippleTarget, touchStartX, touchStartY);\n }, 80);\n }\n }\n function rippleTouchMove() {\n clearTimeout(rippleTimeout);\n removeRipple();\n }\n function rippleTouchEnd() {\n if (!rippleWave && rippleTarget && !isMoved) {\n clearTimeout(rippleTimeout);\n createRipple(rippleTarget, touchStartX, touchStartY);\n setTimeout(removeRipple, 0);\n } else {\n removeRipple();\n }\n }\n\n // Mouse Handlers\n function handleMouseDown(e) {\n const $activableEl = findActivableElement(e.target);\n if ($activableEl) {\n $activableEl.addClass('active-state');\n if ('which' in e && e.which === 3) {\n setTimeout(() => {\n $('.active-state').removeClass('active-state');\n }, 0);\n }\n }\n\n if (useRipple) {\n touchStartX = e.pageX;\n touchStartY = e.pageY;\n rippleTouchStart(e.target, e.pageX, e.pageY);\n }\n }\n function handleMouseMove() {\n if (!params.activeStateOnMouseMove) {\n $('.active-state').removeClass('active-state');\n }\n if (useRipple) {\n rippleTouchMove();\n }\n }\n function handleMouseUp() {\n $('.active-state').removeClass('active-state');\n if (useRipple) {\n rippleTouchEnd();\n }\n }\n\n function handleTouchCancel() {\n targetElement = null;\n\n // Remove Active State\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (params.activeState) {\n removeActive();\n }\n\n // Remove Ripple\n if (useRipple) {\n rippleTouchEnd();\n }\n }\n\n let isScrolling;\n let isSegmentedStrong = false;\n let segmentedStrongEl = null;\n\n const touchMoveActivableIos = '.dialog-button, .actions-button';\n let isTouchMoveActivable = false;\n let touchmoveActivableEl = null;\n\n function handleTouchStart(e) {\n isMoved = false;\n tapHoldFired = false;\n preventClick = false;\n isScrolling = undefined;\n if (e.targetTouches.length > 1) {\n if (activableElement) removeActive();\n return true;\n }\n if (e.touches.length > 1 && activableElement) {\n removeActive();\n }\n if (params.tapHold) {\n if (tapHoldTimeout) clearTimeout(tapHoldTimeout);\n tapHoldTimeout = setTimeout(() => {\n if (e && e.touches && e.touches.length > 1) return;\n tapHoldFired = true;\n e.preventDefault();\n preventClick = true;\n $(e.target).trigger('taphold', e);\n app.emit('taphold', e);\n }, params.tapHoldDelay);\n }\n targetElement = e.target;\n touchStartX = e.targetTouches[0].pageX;\n touchStartY = e.targetTouches[0].pageY;\n isSegmentedStrong = e.target.closest(\n '.segmented-strong .button-active, .segmented-strong .tab-link-active',\n );\n isTouchMoveActivable = app.theme === 'ios' && e.target.closest(touchMoveActivableIos);\n if (isSegmentedStrong) {\n segmentedStrongEl = isSegmentedStrong.closest('.segmented-strong');\n }\n\n if (params.activeState) {\n activableElement = findActivableElement(targetElement);\n if (activableElement && !isInsideScrollableView(activableElement)) {\n addActive();\n } else if (activableElement) {\n activeTimeout = setTimeout(addActive, 80);\n }\n }\n if (useRipple) {\n rippleTouchStart(targetElement, touchStartX, touchStartY);\n }\n return true;\n }\n function handleTouchMove(e) {\n let touch;\n let distance;\n let shouldRemoveActive = true;\n\n if (e.type === 'touchmove') {\n touch = e.targetTouches[0];\n distance = params.touchClicksDistanceThreshold;\n }\n\n const touchCurrentX = e.targetTouches[0].pageX;\n const touchCurrentY = e.targetTouches[0].pageY;\n\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(\n isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX)\n );\n }\n\n if (isTouchMoveActivable || (!isScrolling && isSegmentedStrong && segmentedStrongEl)) {\n if (e.cancelable) e.preventDefault();\n }\n\n if (!isScrolling && isSegmentedStrong && segmentedStrongEl) {\n const elementFromPoint = document.elementFromPoint(\n e.targetTouches[0].clientX,\n e.targetTouches[0].clientY,\n );\n const buttonEl = elementFromPoint.closest(\n '.segmented-strong .button:not(.button-active):not(.tab-link-active)',\n );\n if (buttonEl && segmentedStrongEl.contains(buttonEl)) {\n $(buttonEl).trigger('click', 'f7Segmented');\n targetElement = buttonEl;\n }\n }\n\n if (distance && touch) {\n const pageX = touch.pageX;\n const pageY = touch.pageY;\n if (Math.abs(pageX - touchStartX) > distance || Math.abs(pageY - touchStartY) > distance) {\n isMoved = true;\n }\n } else {\n isMoved = true;\n }\n if (isMoved) {\n preventClick = true;\n // Keep active state on touchMove (for dialog and actions buttons)\n if (isTouchMoveActivable) {\n const elementFromPoint = document.elementFromPoint(\n e.targetTouches[0].clientX,\n e.targetTouches[0].clientY,\n );\n touchmoveActivableEl = elementFromPoint.closest(touchMoveActivableIos);\n if (\n touchmoveActivableEl &&\n activableElement &&\n activableElement[0] === touchmoveActivableEl\n ) {\n shouldRemoveActive = false;\n } else if (touchmoveActivableEl) {\n setTimeout(() => {\n activableElement = findActivableElement(touchmoveActivableEl);\n addActive();\n });\n }\n }\n if (params.tapHold) {\n clearTimeout(tapHoldTimeout);\n }\n if (params.activeState && shouldRemoveActive) {\n clearTimeout(activeTimeout);\n removeActive();\n }\n if (useRipple) {\n rippleTouchMove();\n }\n }\n }\n function handleTouchEnd(e) {\n isScrolling = undefined;\n isSegmentedStrong = false;\n segmentedStrongEl = null;\n isTouchMoveActivable = false;\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (touchmoveActivableEl) {\n $(touchmoveActivableEl).trigger('click', 'f7TouchMoveActivable');\n touchmoveActivableEl = null;\n }\n if (document.activeElement === e.target) {\n if (params.activeState) removeActive();\n if (useRipple) {\n rippleTouchEnd();\n }\n return true;\n }\n if (params.activeState) {\n addActive();\n setTimeout(removeActive, 0);\n }\n if (useRipple) {\n rippleTouchEnd();\n }\n if ((params.tapHoldPreventClicks && tapHoldFired) || preventClick) {\n if (e.cancelable) e.preventDefault();\n preventClick = true;\n return false;\n }\n return true;\n }\n function handleClick(e) {\n const isOverswipe = e && e.detail && e.detail === 'f7Overswipe';\n const isSegmented = e && e.detail && e.detail === 'f7Segmented';\n // eslint-disable-next-line\n const isTouchMoveActivable = e && e.detail && e.detail === 'f7TouchMoveActivable';\n let localPreventClick = preventClick;\n if (targetElement && e.target !== targetElement) {\n if (isOverswipe || isSegmented || isTouchMoveActivable) {\n localPreventClick = false;\n } else {\n localPreventClick = true;\n }\n } else if (isTouchMoveActivable) {\n localPreventClick = false;\n }\n if (params.tapHold && params.tapHoldPreventClicks && tapHoldFired) {\n localPreventClick = true;\n }\n if (localPreventClick) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n }\n\n if (params.tapHold) {\n tapHoldTimeout = setTimeout(\n () => {\n tapHoldFired = false;\n },\n device.ios || device.androidChrome ? 100 : 400,\n );\n }\n preventClick = false;\n targetElement = null;\n\n return !localPreventClick;\n }\n\n function emitAppTouchEvent(name, e) {\n app.emit({\n events: name,\n data: [e],\n });\n }\n function appClick(e) {\n emitAppTouchEvent('click', e);\n }\n function appTouchStartActive(e) {\n emitAppTouchEvent('touchstart touchstart:active', e);\n }\n function appTouchMoveActive(e) {\n emitAppTouchEvent('touchmove touchmove:active', e);\n }\n function appTouchEndActive(e) {\n emitAppTouchEvent('touchend touchend:active', e);\n }\n function appTouchStartPassive(e) {\n emitAppTouchEvent('touchstart:passive', e);\n }\n function appTouchMovePassive(e) {\n emitAppTouchEvent('touchmove:passive', e);\n }\n function appTouchEndPassive(e) {\n emitAppTouchEvent('touchend:passive', e);\n }\n\n const passiveListener = support.passiveListener ? { passive: true } : false;\n const passiveListenerCapture = support.passiveListener ? { passive: true, capture: true } : true;\n const activeListener = support.passiveListener ? { passive: false } : false;\n const activeListenerCapture = support.passiveListener ? { passive: false, capture: true } : true;\n\n document.addEventListener('click', appClick, true);\n\n if (support.passiveListener) {\n document.addEventListener(app.touchEvents.start, appTouchStartActive, activeListenerCapture);\n document.addEventListener(app.touchEvents.move, appTouchMoveActive, activeListener);\n document.addEventListener(app.touchEvents.end, appTouchEndActive, activeListener);\n\n document.addEventListener(app.touchEvents.start, appTouchStartPassive, passiveListenerCapture);\n document.addEventListener(app.touchEvents.move, appTouchMovePassive, passiveListener);\n document.addEventListener(app.touchEvents.end, appTouchEndPassive, passiveListener);\n } else {\n document.addEventListener(\n app.touchEvents.start,\n (e) => {\n appTouchStartActive(e);\n appTouchStartPassive(e);\n },\n true,\n );\n document.addEventListener(\n app.touchEvents.move,\n (e) => {\n appTouchMoveActive(e);\n appTouchMovePassive(e);\n },\n false,\n );\n document.addEventListener(\n app.touchEvents.end,\n (e) => {\n appTouchEndActive(e);\n appTouchEndPassive(e);\n },\n false,\n );\n }\n\n if (support.touch) {\n app.on('click', handleClick);\n app.on('touchstart', handleTouchStart);\n app.on('touchmove', handleTouchMove);\n app.on('touchend', handleTouchEnd);\n document.addEventListener('touchcancel', handleTouchCancel, { passive: true });\n } else if (params.activeState) {\n app.on('touchstart', handleMouseDown);\n app.on('touchmove', handleMouseMove);\n app.on('touchend', handleMouseUp);\n document.addEventListener('pointercancel', handleMouseUp, { passive: true });\n }\n document.addEventListener('contextmenu', (e) => {\n if (\n params.disableContextMenu &&\n (device.ios ||\n device.android ||\n device.cordova ||\n (window.Capacitor && window.Capacitor.isNative))\n ) {\n e.preventDefault();\n }\n if (useRipple) {\n if (activableElement) removeActive();\n rippleTouchEnd();\n }\n });\n}\n\nexport default {\n name: 'touch',\n params: {\n touch: {\n // Clicks\n touchClicksDistanceThreshold: 5,\n // ContextMenu\n disableContextMenu: false,\n // Tap Hold\n tapHold: false,\n tapHoldDelay: 750,\n tapHoldPreventClicks: true,\n // Active State\n activeState: true,\n activeStateElements:\n 'a, button, label, span, .actions-button, .stepper-button, .stepper-button-plus, .stepper-button-minus, .card-expandable, .menu-item, .link, .item-link, .accordion-item-toggle',\n activeStateOnMouseMove: false,\n mdTouchRipple: true,\n iosTouchRipple: false,\n auroraTouchRipple: false,\n touchRippleElements:\n '.ripple, .link, .item-link, .list-button, .links-list a, .button, button, .input-clear-button, .dialog-button, .tab-link, .item-radio, .item-checkbox, .actions-button, .searchbar-disable-button, .fab a, .checkbox, .radio, .data-table .sortable-cell:not(.input-cell), .notification-close-button, .stepper-button, .stepper-button-minus, .stepper-button-plus, .menu-item-content, .list.accordion-list .accordion-item-toggle',\n touchRippleInsetElements:\n '.ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back',\n },\n },\n create() {\n const app = this;\n const support = getSupport();\n extend(app, {\n touchEvents: {\n start: support.touch ? 'touchstart' : support.pointerEvents ? 'pointerdown' : 'mousedown',\n move: support.touch ? 'touchmove' : support.pointerEvents ? 'pointermove' : 'mousemove',\n end: support.touch ? 'touchend' : support.pointerEvents ? 'pointerup' : 'mouseup',\n },\n });\n },\n on: {\n init: initTouch,\n },\n};\n","/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n while (i < str.length) {\n var char = str[i];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n if (char === \":\") {\n var name = \"\";\n var j = i + 1;\n while (j < str.length) {\n var code = str.charCodeAt(j);\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n break;\n }\n if (!name)\n throw new TypeError(\"Missing parameter name at \" + i);\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n if (char === \"(\") {\n var count = 1;\n var pattern = \"\";\n var j = i + 1;\n if (str[j] === \"?\") {\n throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \" + j);\n }\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n }\n else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(\"Capturing groups are not allowed at \" + j);\n }\n }\n pattern += str[j++];\n }\n if (count)\n throw new TypeError(\"Unbalanced pattern at \" + i);\n if (!pattern)\n throw new TypeError(\"Missing pattern at \" + i);\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n tokens.push({ type: \"END\", index: i, value: \"\" });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str, options) {\n if (options === void 0) { options = {}; }\n var tokens = lexer(str);\n var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n var defaultPattern = \"[^\" + escapeString(options.delimiter || \"/#?\") + \"]+?\";\n var result = [];\n var key = 0;\n var i = 0;\n var path = \"\";\n var tryConsume = function (type) {\n if (i < tokens.length && tokens[i].type === type)\n return tokens[i++].value;\n };\n var mustConsume = function (type) {\n var value = tryConsume(type);\n if (value !== undefined)\n return value;\n var _a = tokens[i], nextType = _a.type, index = _a.index;\n throw new TypeError(\"Unexpected \" + nextType + \" at \" + index + \", expected \" + type);\n };\n var consumeText = function () {\n var result = \"\";\n var value;\n // tslint:disable-next-line\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n while (i < tokens.length) {\n var char = tryConsume(\"CHAR\");\n var name = tryConsume(\"NAME\");\n var pattern = tryConsume(\"PATTERN\");\n if (name || pattern) {\n var prefix = char || \"\";\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n var value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n var open = tryConsume(\"OPEN\");\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume(\"NAME\") || \"\";\n var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n var suffix = consumeText();\n mustConsume(\"CLOSE\");\n result.push({\n name: name_1 || (pattern_1 ? key++ : \"\"),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n mustConsume(\"END\");\n }\n return result;\n}\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction(tokens, options) {\n if (options === void 0) { options = {}; }\n var reFlags = flags(options);\n var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n // Compile all the tokens into regexps.\n var matches = tokens.map(function (token) {\n if (typeof token === \"object\") {\n return new RegExp(\"^(?:\" + token.pattern + \")$\", reFlags);\n }\n });\n return function (data) {\n var path = \"\";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === \"?\" || token.modifier === \"*\";\n var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not repeat, but got an array\");\n }\n if (value.length === 0) {\n if (optional)\n continue;\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not be empty\");\n }\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected all \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n }\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n var segment = encode(String(value), token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n continue;\n }\n if (optional)\n continue;\n var typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to be \" + typeOfMessage);\n }\n return path;\n };\n}\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction(re, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m)\n return false;\n var path = m[0], index = m.index;\n var params = Object.create(null);\n var _loop_1 = function (i) {\n // tslint:disable-next-line\n if (m[i] === undefined)\n return \"continue\";\n var key = keys[i - 1];\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n }\n else {\n params[key.name] = decode(m[i], key);\n }\n };\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n return { path: path, index: index, params: params };\n };\n}\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n if (!keys)\n return path;\n var groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n var index = 0;\n var execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n });\n execResult = groupsRegex.exec(path.source);\n }\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n return new RegExp(\"(?:\" + parts.join(\"|\") + \")\", flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(tokens, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d;\n var endsWith = \"[\" + escapeString(options.endsWith || \"\") + \"]|$\";\n var delimiter = \"[\" + escapeString(options.delimiter || \"/#?\") + \"]\";\n var route = start ? \"^\" : \"\";\n // Iterate over the tokens and create our regexp string.\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n }\n else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n if (token.pattern) {\n if (keys)\n keys.push(token);\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n var mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += \"(?:\" + prefix + \"((?:\" + token.pattern + \")(?:\" + suffix + prefix + \"(?:\" + token.pattern + \"))*)\" + suffix + \")\" + mod;\n }\n else {\n route += \"(?:\" + prefix + \"(\" + token.pattern + \")\" + suffix + \")\" + token.modifier;\n }\n }\n else {\n route += \"(\" + token.pattern + \")\" + token.modifier;\n }\n }\n else {\n route += \"(?:\" + prefix + suffix + \")\" + token.modifier;\n }\n }\n }\n if (end) {\n if (!strict)\n route += delimiter + \"?\";\n route += !options.endsWith ? \"$\" : \"(?=\" + endsWith + \")\";\n }\n else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === \"string\"\n ? delimiter.indexOf(endToken[endToken.length - 1]) > -1\n : // tslint:disable-next-line\n endToken === undefined;\n if (!strict) {\n route += \"(?:\" + delimiter + \"(?=\" + endsWith + \"))?\";\n }\n if (!isEndDelimited) {\n route += \"(?=\" + delimiter + \"|\" + endsWith + \")\";\n }\n }\n return new RegExp(route, flags(options));\n}\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(path, keys, options) {\n if (path instanceof RegExp)\n return regexpToRegexp(path, keys);\n if (Array.isArray(path))\n return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n//# sourceMappingURL=index.js.map","import { getWindow, getDocument } from 'ssr-window';\nimport $ from './dom7.js';\nimport { extend } from './utils.js';\n\nconst History = {\n queue: [],\n clearQueue() {\n if (History.queue.length === 0) return;\n const currentQueue = History.queue.shift();\n currentQueue();\n },\n routerQueue: [],\n clearRouterQueue() {\n if (History.routerQueue.length === 0) return;\n const currentQueue = History.routerQueue.pop();\n const { router, stateUrl, action } = currentQueue;\n\n let animate = router.params.animate;\n if (router.params.browserHistoryAnimate === false) animate = false;\n\n if (action === 'back') {\n router.back({ animate, browserHistory: false });\n }\n if (action === 'load') {\n router.navigate(stateUrl, { animate, browserHistory: false });\n }\n },\n handle(e) {\n if (History.blockPopstate) return;\n const app = this;\n // const mainView = app.views.main;\n let state = e.state;\n History.previousState = History.state;\n History.state = state;\n\n History.allowChange = true;\n History.clearQueue();\n\n state = History.state;\n if (!state) state = {};\n\n app.views.forEach((view) => {\n const router = view.router;\n let viewState = state[view.id];\n if (!viewState && view.params.browserHistory) {\n viewState = {\n url: view.router.history[0],\n };\n }\n if (!viewState) return;\n const stateUrl = viewState.url || undefined;\n\n let animate = router.params.animate;\n if (router.params.browserHistoryAnimate === false) animate = false;\n\n if (stateUrl !== router.url) {\n if (router.history.indexOf(stateUrl) >= 0) {\n // Go Back\n if (router.allowPageChange) {\n router.back({ animate, browserHistory: false });\n } else {\n History.routerQueue.push({\n action: 'back',\n router,\n });\n }\n } else if (router.allowPageChange) {\n // Load page\n router.navigate(stateUrl, { animate, browserHistory: false });\n } else {\n History.routerQueue.unshift({\n action: 'load',\n stateUrl,\n router,\n });\n }\n }\n });\n },\n initViewState(viewId, viewState) {\n const window = getWindow();\n const newState = extend({}, History.state || {}, {\n [viewId]: viewState,\n });\n History.state = newState;\n window.history.replaceState(newState, '');\n },\n push(viewId, viewState, url) {\n const window = getWindow();\n if (url.substr(-3) === '#!/') {\n // eslint-disable-next-line\n url = url.replace('#!/', '');\n }\n if (!History.allowChange) {\n History.queue.push(() => {\n History.push(viewId, viewState, url);\n });\n return;\n }\n History.previousState = History.state;\n const newState = extend({}, History.previousState || {}, {\n [viewId]: viewState,\n });\n History.state = newState;\n window.history.pushState(newState, '', url);\n },\n replace(viewId, viewState, url) {\n const window = getWindow();\n if (url.substr(-3) === '#!/') {\n // eslint-disable-next-line\n url = url.replace('#!/', '');\n }\n if (!History.allowChange) {\n History.queue.push(() => {\n History.replace(viewId, viewState, url);\n });\n return;\n }\n History.previousState = History.state;\n const newState = extend({}, History.previousState || {}, {\n [viewId]: viewState,\n });\n History.state = newState;\n window.history.replaceState(newState, '', url);\n },\n go(index) {\n const window = getWindow();\n History.allowChange = false;\n window.history.go(index);\n },\n back() {\n const window = getWindow();\n History.allowChange = false;\n window.history.back();\n },\n allowChange: true,\n previousState: {},\n state: {},\n blockPopstate: true,\n init(app) {\n const window = getWindow();\n const document = getDocument();\n History.state = window.history.state;\n $(window).on('load', () => {\n setTimeout(() => {\n History.blockPopstate = false;\n }, 0);\n });\n\n if (document.readyState && document.readyState === 'complete') {\n History.blockPopstate = false;\n }\n\n $(window).on('popstate', History.handle.bind(app));\n },\n};\n\nexport default History;\n","import $ from '../../shared/dom7.js';\nimport History from '../../shared/history.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { now } from '../../shared/utils.js';\n\nfunction SwipeBack(r) {\n const router = r;\n const { $el, $navbarsEl, app, params } = router;\n const support = getSupport();\n const device = getDevice();\n let isTouched = false;\n let isMoved = false;\n const touchesStart = {};\n let isScrolling;\n let $currentPageEl = [];\n let $previousPageEl = [];\n let viewContainerWidth;\n let touchesDiff;\n let allowViewTouchMove = true;\n let touchStartTime;\n let $currentNavbarEl = [];\n let $previousNavbarEl = [];\n let dynamicNavbar;\n let $pageShadowEl;\n let $pageOpacityEl;\n\n let animatableNavEls;\n\n const paramsSwipeBackAnimateShadow = params[`${app.theme}SwipeBackAnimateShadow`];\n const paramsSwipeBackAnimateOpacity = params[`${app.theme}SwipeBackAnimateOpacity`];\n const paramsSwipeBackActiveArea = params[`${app.theme}SwipeBackActiveArea`];\n const paramsSwipeBackThreshold = params[`${app.theme}SwipeBackThreshold`];\n\n const transformOrigin = app.rtl ? 'right center' : 'left center';\n const transformOriginTitleLarge = app.rtl\n ? 'calc(100% - var(--f7-navbar-large-title-padding-left) - var(--f7-safe-area-left)) center'\n : 'calc(var(--f7-navbar-large-title-padding-left) + var(--f7-safe-area-left)) center';\n\n function animatableNavElements() {\n const els = [];\n const inverter = app.rtl ? -1 : 1;\n const currentNavIsTransparent =\n $currentNavbarEl.hasClass('navbar-transparent') &&\n !$currentNavbarEl.hasClass('navbar-large') &&\n !$currentNavbarEl.hasClass('navbar-transparent-visible');\n const currentNavIsLarge = $currentNavbarEl.hasClass('navbar-large');\n const currentNavIsCollapsed = $currentNavbarEl.hasClass('navbar-large-collapsed');\n const currentNavIsLargeTransparent =\n $currentNavbarEl.hasClass('navbar-large-transparent') ||\n ($currentNavbarEl.hasClass('navbar-large') &&\n $currentNavbarEl.hasClass('navbar-transparent'));\n const previousNavIsTransparent =\n $previousNavbarEl.hasClass('navbar-transparent') &&\n !$previousNavbarEl.hasClass('navbar-large') &&\n !$previousNavbarEl.hasClass('navbar-transparent-visible');\n const previousNavIsLarge = $previousNavbarEl.hasClass('navbar-large');\n const previousNavIsCollapsed = $previousNavbarEl.hasClass('navbar-large-collapsed');\n const previousNavIsLargeTransparent =\n $previousNavbarEl.hasClass('navbar-large-transparent') ||\n ($previousNavbarEl.hasClass('navbar-large') &&\n $previousNavbarEl.hasClass('navbar-transparent'));\n const fromLarge = currentNavIsLarge && !currentNavIsCollapsed;\n const toLarge = previousNavIsLarge && !previousNavIsCollapsed;\n const $currentNavElements = $currentNavbarEl.find(\n '.left, .title, .right, .subnavbar, .fading, .title-large, .navbar-bg',\n );\n const $previousNavElements = $previousNavbarEl.find(\n '.left, .title, .right, .subnavbar, .fading, .title-large, .navbar-bg',\n );\n let activeNavBackIconText;\n let previousNavBackIconText;\n\n if (params.iosAnimateNavbarBackIcon) {\n if (\n $currentNavbarEl.hasClass('sliding') ||\n $currentNavbarEl.find('.navbar-inner.sliding').length\n ) {\n activeNavBackIconText = $currentNavbarEl.find('.left').find('.back .icon + span').eq(0);\n } else {\n activeNavBackIconText = $currentNavbarEl\n .find('.left.sliding')\n .find('.back .icon + span')\n .eq(0);\n }\n if (\n $previousNavbarEl.hasClass('sliding') ||\n $previousNavbarEl.find('.navbar-inner.sliding').length\n ) {\n previousNavBackIconText = $previousNavbarEl.find('.left').find('.back .icon + span').eq(0);\n } else {\n previousNavBackIconText = $previousNavbarEl\n .find('.left.sliding')\n .find('.back .icon + span')\n .eq(0);\n }\n if (activeNavBackIconText.length) {\n $previousNavElements.each((el) => {\n if (!$(el).hasClass('title')) return;\n el.f7NavbarLeftOffset += activeNavBackIconText.prev('.icon')[0].offsetWidth;\n });\n }\n }\n $currentNavElements.each((navEl) => {\n const $navEl = $(navEl);\n const isSubnavbar = $navEl.hasClass('subnavbar');\n const isLeft = $navEl.hasClass('left');\n const isTitle = $navEl.hasClass('title');\n const isBg = $navEl.hasClass('navbar-bg');\n if ((isTitle || isBg) && currentNavIsTransparent) return;\n if (!fromLarge && $navEl.hasClass('.title-large')) return;\n const el = {\n el: navEl,\n };\n if (fromLarge) {\n if (isTitle) return;\n if ($navEl.hasClass('title-large')) {\n if (els.indexOf(el) < 0) els.push(el);\n el.overflow = 'visible';\n $navEl.find('.title-large-text').each((subNavEl) => {\n els.push({\n el: subNavEl,\n transform: (progress) => `translateX(${progress * 100 * inverter}%)`,\n });\n });\n return;\n }\n }\n if (toLarge) {\n if (!fromLarge) {\n if ($navEl.hasClass('title-large')) {\n if (els.indexOf(el) < 0) els.push(el);\n el.opacity = 0;\n }\n }\n if (isLeft) {\n if (els.indexOf(el) < 0) els.push(el);\n el.opacity = (progress) => 1 - progress ** 0.33;\n $navEl.find('.back span').each((subNavEl) => {\n els.push({\n el: subNavEl,\n 'transform-origin': transformOrigin,\n transform: (progress) =>\n `translateX(calc(${progress} * (var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset)))) translateY(calc(${progress} * (var(--f7-navbar-large-title-height) - var(--f7-navbar-large-title-padding-vertical) / 2))) scale(${\n 1 + 1 * progress\n })`,\n });\n });\n return;\n }\n }\n if (isBg) {\n if (els.indexOf(el) < 0) els.push(el);\n if (!fromLarge && !toLarge) {\n if (currentNavIsCollapsed) {\n if (currentNavIsLargeTransparent) {\n el.className = 'ios-swipeback-navbar-bg-large';\n }\n el.transform = (progress) =>\n `translateX(${\n 100 * progress * inverter\n }%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))`;\n } else {\n el.transform = (progress) => `translateX(${100 * progress * inverter}%)`;\n }\n }\n if (!fromLarge && toLarge) {\n el.className = 'ios-swipeback-navbar-bg-large';\n el.transform = (progress) =>\n `translateX(${100 * progress * inverter}%) translateY(calc(-1 * ${\n 1 - progress\n } * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && toLarge) {\n el.transform = (progress) => `translateX(${100 * progress * inverter}%)`;\n }\n if (fromLarge && !toLarge) {\n el.transform = (progress) =>\n `translateX(${\n 100 * progress * inverter\n }%) translateY(calc(-${progress} * var(--f7-navbar-large-title-height)))`;\n }\n return;\n }\n if ($navEl.hasClass('title-large')) return;\n const isSliding =\n $navEl.hasClass('sliding') || $navEl.parents('.navbar-inner.sliding').length;\n if (els.indexOf(el) < 0) els.push(el);\n if (!isSubnavbar || (isSubnavbar && !isSliding)) {\n el.opacity = (progress) => 1 - progress ** 0.33;\n }\n if (isSliding) {\n let transformTarget = el;\n if (isLeft && activeNavBackIconText.length && params.iosAnimateNavbarBackIcon) {\n const textEl = { el: activeNavBackIconText[0] };\n transformTarget = textEl;\n els.push(textEl);\n }\n transformTarget.transform = (progress) => {\n let activeNavTranslate = progress * transformTarget.el.f7NavbarRightOffset;\n if (device.pixelRatio === 1) activeNavTranslate = Math.round(activeNavTranslate);\n if (isSubnavbar && currentNavIsLarge) {\n return `translate3d(${activeNavTranslate}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`;\n }\n return `translate3d(${activeNavTranslate}px,0,0)`;\n };\n }\n });\n $previousNavElements.each((navEl) => {\n const $navEl = $(navEl);\n const isSubnavbar = $navEl.hasClass('subnavbar');\n const isLeft = $navEl.hasClass('left');\n const isTitle = $navEl.hasClass('title');\n const isBg = $navEl.hasClass('navbar-bg');\n if ((isTitle || isBg) && previousNavIsTransparent) return;\n const el = {\n el: navEl,\n };\n if (toLarge) {\n if (isTitle) return;\n if (els.indexOf(el) < 0) els.push(el);\n\n if ($navEl.hasClass('title-large')) {\n el.opacity = 1;\n el.overflow = 'visible';\n $navEl.find('.title-large-text').each((subNavEl) => {\n els.push({\n el: subNavEl,\n 'transform-origin': transformOriginTitleLarge,\n opacity: (progress) => progress ** 3,\n transform: (progress) =>\n `translateX(calc(${\n 1 - progress\n } * (var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset)))) translateY(calc(${\n progress - 1\n } * var(--f7-navbar-large-title-height) + ${\n 1 - progress\n } * var(--f7-navbar-large-title-padding-vertical))) scale(${0.5 + progress * 0.5})`,\n });\n });\n return;\n }\n }\n if (isBg) {\n if (els.indexOf(el) < 0) els.push(el);\n if (!fromLarge && !toLarge) {\n if (previousNavIsCollapsed) {\n if (previousNavIsLargeTransparent) {\n el.className = 'ios-swipeback-navbar-bg-large';\n }\n el.transform = (progress) =>\n `translateX(${\n (-100 + 100 * progress) * inverter\n }%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))`;\n } else {\n el.transform = (progress) => `translateX(${(-100 + 100 * progress) * inverter}%)`;\n }\n }\n if (!fromLarge && toLarge) {\n el.transform = (progress) =>\n `translateX(${(-100 + 100 * progress) * inverter}%) translateY(calc(-1 * ${\n 1 - progress\n } * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && !toLarge) {\n el.className = 'ios-swipeback-navbar-bg-large';\n el.transform = (progress) =>\n `translateX(${\n (-100 + 100 * progress) * inverter\n }%) translateY(calc(-${progress} * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && toLarge) {\n el.transform = (progress) => `translateX(${(-100 + 100 * progress) * inverter}%)`;\n }\n\n return;\n }\n if ($navEl.hasClass('title-large')) return;\n const isSliding =\n $navEl.hasClass('sliding') || $previousNavbarEl.children('.navbar-inner.sliding').length;\n if (els.indexOf(el) < 0) els.push(el);\n if (!isSubnavbar || (isSubnavbar && !isSliding)) {\n el.opacity = (progress) => progress ** 3;\n }\n if (isSliding) {\n let transformTarget = el;\n if (isLeft && previousNavBackIconText.length && params.iosAnimateNavbarBackIcon) {\n const textEl = { el: previousNavBackIconText[0] };\n transformTarget = textEl;\n els.push(textEl);\n }\n transformTarget.transform = (progress) => {\n let previousNavTranslate = transformTarget.el.f7NavbarLeftOffset * (1 - progress);\n if (device.pixelRatio === 1) previousNavTranslate = Math.round(previousNavTranslate);\n if (isSubnavbar && previousNavIsLarge) {\n return `translate3d(${previousNavTranslate}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`;\n }\n return `translate3d(${previousNavTranslate}px,0,0)`;\n };\n }\n });\n return els;\n }\n\n function setAnimatableNavElements({ progress, reset, transition, reflow } = {}) {\n const styles = ['overflow', 'transform', 'transform-origin', 'opacity'];\n if (transition === true || transition === false) {\n for (let i = 0; i < animatableNavEls.length; i += 1) {\n const el = animatableNavEls[i];\n if (el && el.el) {\n if (transition === true) el.el.classList.add('navbar-page-transitioning');\n if (transition === false) el.el.classList.remove('navbar-page-transitioning');\n }\n }\n }\n if (reflow && animatableNavEls.length && animatableNavEls[0] && animatableNavEls[0].el) {\n // eslint-disable-next-line\n animatableNavEls[0].el._clientLeft = animatableNavEls[0].el.clientLeft;\n }\n for (let i = 0; i < animatableNavEls.length; i += 1) {\n const el = animatableNavEls[i];\n if (el && el.el) {\n if (el.className && !el.classNameSet && !reset) {\n el.el.classList.add(el.className);\n el.classNameSet = true;\n }\n if (el.className && reset) {\n el.el.classList.remove(el.className);\n }\n for (let j = 0; j < styles.length; j += 1) {\n const styleProp = styles[j];\n if (el[styleProp]) {\n if (reset) {\n el.el.style[styleProp] = '';\n } else if (typeof el[styleProp] === 'function') {\n el.el.style[styleProp] = el[styleProp](progress);\n } else {\n el.el.style[styleProp] = el[styleProp];\n }\n }\n }\n }\n }\n }\n\n function handleTouchStart(e) {\n const swipeBackEnabled = params[`${app.theme}SwipeBack`];\n if (\n !allowViewTouchMove ||\n !swipeBackEnabled ||\n isTouched ||\n (app.swipeout && app.swipeout.el) ||\n !router.allowPageChange\n )\n return;\n if ($(e.target).closest('.range-slider, .calendar-months').length > 0) return;\n if (\n $(e.target).closest('.page-master, .page-master-detail').length > 0 &&\n params.masterDetailBreakpoint > 0 &&\n app.width >= params.masterDetailBreakpoint\n )\n return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = now();\n dynamicNavbar = router.dynamicNavbar;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling =\n !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x)) ||\n (pageX < touchesStart.x && !app.rtl) ||\n (pageX > touchesStart.x && app.rtl);\n }\n if (isScrolling || e.f7PreventSwipeBack || app.preventSwipeBack) {\n isTouched = false;\n return;\n }\n if (!isMoved) {\n // Calc values during first move fired\n let cancel = false;\n const target = $(e.target);\n\n const swipeout = target.closest('.swipeout');\n if (swipeout.length > 0) {\n if (!app.rtl && swipeout.find('.swipeout-actions-left').length > 0) cancel = true;\n if (app.rtl && swipeout.find('.swipeout-actions-right').length > 0) cancel = true;\n }\n\n $currentPageEl = target.closest('.page');\n if (\n $currentPageEl.hasClass('no-swipeback') ||\n target.closest('.no-swipeback, .card-opened').length > 0\n )\n cancel = true;\n $previousPageEl = $el.find('.page-previous:not(.stacked)');\n if ($previousPageEl.length > 1) {\n $previousPageEl = $previousPageEl.eq($previousPageEl.length - 1);\n }\n let notFromBorder = touchesStart.x - $el.offset().left > paramsSwipeBackActiveArea;\n viewContainerWidth = $el.width();\n if (app.rtl) {\n notFromBorder =\n touchesStart.x <\n $el.offset().left - $el[0].scrollLeft + (viewContainerWidth - paramsSwipeBackActiveArea);\n } else {\n notFromBorder = touchesStart.x - $el.offset().left > paramsSwipeBackActiveArea;\n }\n if (notFromBorder) cancel = true;\n if ($previousPageEl.length === 0 || $currentPageEl.length === 0) cancel = true;\n if (cancel) {\n isTouched = false;\n return;\n }\n\n if (paramsSwipeBackAnimateShadow) {\n $pageShadowEl = $currentPageEl.find('.page-shadow-effect');\n if ($pageShadowEl.length === 0) {\n $pageShadowEl = $('<div class=\"page-shadow-effect\"></div>');\n $currentPageEl.append($pageShadowEl);\n }\n }\n if (paramsSwipeBackAnimateOpacity) {\n $pageOpacityEl = $previousPageEl.find('.page-opacity-effect');\n if ($pageOpacityEl.length === 0) {\n $pageOpacityEl = $('<div class=\"page-opacity-effect\"></div>');\n $previousPageEl.append($pageOpacityEl);\n }\n }\n\n if (dynamicNavbar) {\n $currentNavbarEl = $navbarsEl.find('.navbar-current:not(.stacked)');\n $previousNavbarEl = $navbarsEl.find('.navbar-previous:not(.stacked)');\n if ($previousNavbarEl.length > 1) {\n $previousNavbarEl = $previousNavbarEl.eq($previousNavbarEl.length - 1);\n }\n\n animatableNavEls = animatableNavElements($previousNavbarEl, $currentNavbarEl);\n }\n\n // Close/Hide Any Picker\n if ($('.sheet.modal-in').length > 0 && app.sheet) {\n app.sheet.close($('.sheet.modal-in'));\n }\n }\n e.f7PreventSwipePanel = true;\n isMoved = true;\n app.preventSwipePanelBySwipeBack = true;\n e.preventDefault();\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n\n // Touches diff\n touchesDiff = (pageX - touchesStart.x - paramsSwipeBackThreshold) * inverter;\n if (touchesDiff < 0) touchesDiff = 0;\n const percentage = Math.min(Math.max(touchesDiff / viewContainerWidth, 0), 1);\n\n // Swipe Back Callback\n const callbackData = {\n percentage,\n progress: percentage,\n currentPageEl: $currentPageEl[0],\n previousPageEl: $previousPageEl[0],\n currentNavbarEl: $currentNavbarEl[0],\n previousNavbarEl: $previousNavbarEl[0],\n };\n $el.trigger('swipeback:move', callbackData);\n router.emit('swipebackMove', callbackData);\n\n // Transform pages\n let currentPageTranslate = touchesDiff * inverter;\n let previousPageTranslate = (touchesDiff / 5 - viewContainerWidth / 5) * inverter;\n if (!app.rtl) {\n currentPageTranslate = Math.min(currentPageTranslate, viewContainerWidth);\n previousPageTranslate = Math.min(previousPageTranslate, 0);\n } else {\n currentPageTranslate = Math.max(currentPageTranslate, -viewContainerWidth);\n previousPageTranslate = Math.max(previousPageTranslate, 0);\n }\n if (device.pixelRatio === 1) {\n currentPageTranslate = Math.round(currentPageTranslate);\n previousPageTranslate = Math.round(previousPageTranslate);\n }\n\n router.swipeBackActive = true;\n $([$currentPageEl[0], $previousPageEl[0]]).addClass('page-swipeback-active');\n\n $currentPageEl.transform(`translate3d(${currentPageTranslate}px,0,0)`);\n if (paramsSwipeBackAnimateShadow) $pageShadowEl[0].style.opacity = 1 - 1 * percentage;\n\n if (app.theme === 'ios') {\n $previousPageEl.transform(`translate3d(${previousPageTranslate}px,0,0)`);\n }\n if (paramsSwipeBackAnimateOpacity) $pageOpacityEl[0].style.opacity = 1 - 1 * percentage;\n\n // Dynamic Navbars Animation\n if (!dynamicNavbar) return;\n\n setAnimatableNavElements({ progress: percentage });\n }\n function handleTouchEnd() {\n app.preventSwipePanelBySwipeBack = false;\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n router.swipeBackActive = false;\n const $pages = $([$currentPageEl[0], $previousPageEl[0]]);\n $pages.removeClass('page-swipeback-active');\n if (touchesDiff === 0) {\n $pages.transform('');\n if ($pageShadowEl && $pageShadowEl.length > 0) $pageShadowEl.remove();\n if ($pageOpacityEl && $pageOpacityEl.length > 0) $pageOpacityEl.remove();\n if (dynamicNavbar) {\n setAnimatableNavElements({ reset: true });\n }\n return;\n }\n const timeDiff = now() - touchStartTime;\n let pageChanged = false;\n // Swipe back to previous page\n if (\n (timeDiff < 300 && touchesDiff > 10) ||\n (timeDiff >= 300 && touchesDiff > viewContainerWidth / 2)\n ) {\n $currentPageEl\n .removeClass('page-current')\n .addClass(`page-next${app.theme !== 'ios' ? ' page-next-on-right' : ''}`);\n $previousPageEl\n .removeClass('page-previous')\n .addClass('page-current')\n .removeAttr('aria-hidden');\n if ($pageShadowEl) $pageShadowEl[0].style.opacity = '';\n if ($pageOpacityEl) $pageOpacityEl[0].style.opacity = '';\n if (dynamicNavbar) {\n router.setNavbarPosition($currentNavbarEl, 'next');\n router.setNavbarPosition($previousNavbarEl, 'current', false);\n }\n pageChanged = true;\n }\n // Reset custom styles\n // Add transitioning class for transition-duration\n $pages.addClass('page-transitioning page-transitioning-swipeback');\n if (device.ios) {\n // eslint-disable-next-line\n $currentPageEl[0]._clientLeft = $currentPageEl[0].clientLeft;\n }\n $pages.transform('');\n\n if (dynamicNavbar) {\n setAnimatableNavElements({\n progress: pageChanged ? 1 : 0,\n transition: true,\n reflow: !!device.ios,\n });\n }\n allowViewTouchMove = false;\n router.allowPageChange = false;\n\n // Swipe Back Callback\n const callbackData = {\n currentPageEl: $currentPageEl[0],\n previousPageEl: $previousPageEl[0],\n currentNavbarEl: $currentNavbarEl[0],\n previousNavbarEl: $previousNavbarEl[0],\n };\n\n if (pageChanged) {\n // Update Route\n router.currentRoute = $previousPageEl[0].f7Page.route;\n router.currentPage = $previousPageEl[0];\n\n // Page before animation callback\n router.pageCallback('beforeOut', $currentPageEl, $currentNavbarEl, 'current', 'next', {\n route: $currentPageEl[0].f7Page.route,\n swipeBack: true,\n });\n router.pageCallback(\n 'beforeIn',\n $previousPageEl,\n $previousNavbarEl,\n 'previous',\n 'current',\n { route: $previousPageEl[0].f7Page.route, swipeBack: true },\n $currentPageEl[0],\n );\n\n $el.trigger('swipeback:beforechange', callbackData);\n router.emit('swipebackBeforeChange', callbackData);\n } else {\n $el.trigger('swipeback:beforereset', callbackData);\n router.emit('swipebackBeforeReset', callbackData);\n }\n\n $currentPageEl.transitionEnd(() => {\n $pages.removeClass('page-transitioning page-transitioning-swipeback');\n if (dynamicNavbar) {\n setAnimatableNavElements({ reset: true, transition: false });\n }\n allowViewTouchMove = true;\n router.allowPageChange = true;\n if (pageChanged) {\n // Update History\n if (router.history.length === 1) {\n router.history.unshift(router.url);\n }\n router.history.pop();\n router.saveHistory();\n\n // Update push state\n if (params.browserHistory) {\n History.back();\n }\n\n // Page after animation callback\n router.pageCallback('afterOut', $currentPageEl, $currentNavbarEl, 'current', 'next', {\n route: $currentPageEl[0].f7Page.route,\n swipeBack: true,\n });\n router.pageCallback('afterIn', $previousPageEl, $previousNavbarEl, 'previous', 'current', {\n route: $previousPageEl[0].f7Page.route,\n swipeBack: true,\n });\n\n // Remove Old Page\n if (params.stackPages && router.initialPages.indexOf($currentPageEl[0]) >= 0) {\n $currentPageEl.addClass('stacked');\n if (dynamicNavbar) {\n $currentNavbarEl.addClass('stacked');\n }\n } else {\n router.pageCallback('beforeRemove', $currentPageEl, $currentNavbarEl, 'next', {\n swipeBack: true,\n });\n router.removePage($currentPageEl);\n if (dynamicNavbar) {\n router.removeNavbar($currentNavbarEl);\n }\n }\n\n $el.trigger('swipeback:afterchange', callbackData);\n router.emit('swipebackAfterChange', callbackData);\n\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n if (params.preloadPreviousPage) {\n router.back(router.history[router.history.length - 2], { preload: true });\n }\n } else {\n $el.trigger('swipeback:afterreset', callbackData);\n router.emit('swipebackAfterReset', callbackData);\n }\n if ($pageShadowEl && $pageShadowEl.length > 0) $pageShadowEl.remove();\n if ($pageOpacityEl && $pageOpacityEl.length > 0) $pageOpacityEl.remove();\n });\n }\n\n function attachEvents() {\n const passiveListener =\n app.touchEvents.start === 'touchstart' && support.passiveListener\n ? { passive: true, capture: false }\n : false;\n $el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n function detachEvents() {\n const passiveListener =\n app.touchEvents.start === 'touchstart' && support.passiveListener\n ? { passive: true, capture: false }\n : false;\n $el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n\n attachEvents();\n\n router.on('routerDestroy', detachEvents);\n}\n\nexport default SwipeBack;\n","import { extend } from '../../shared/utils.js';\n\nexport default function redirect(direction, route, options) {\n const router = this;\n const r = route.route.redirect;\n const method = direction === 'forward' ? 'navigate' : 'back';\n if (options.initial && router.params.browserHistory) {\n options.replaceState = true; // eslint-disable-line\n options.history = true; // eslint-disable-line\n }\n function redirectResolve(redirectUrl, redirectOptions = {}) {\n router.allowPageChange = true;\n router[method](redirectUrl, extend({}, options, redirectOptions));\n }\n function redirectReject() {\n router.allowPageChange = true;\n }\n if (typeof r === 'function') {\n router.allowPageChange = false;\n const redirectUrl = r.call(router, {\n router,\n to: route,\n resolve: redirectResolve,\n reject: redirectReject,\n direction,\n app: router.app,\n });\n if (redirectUrl && typeof redirectUrl === 'string') {\n router.allowPageChange = true;\n return router[method](redirectUrl, options);\n }\n return router;\n }\n return router[method](r, options);\n}\n","function processQueue(router, routerQueue, routeQueue, to, from, resolve, reject, direction) {\n const queue = [];\n\n if (Array.isArray(routeQueue)) {\n queue.push(...routeQueue);\n } else if (routeQueue && typeof routeQueue === 'function') {\n queue.push(routeQueue);\n }\n if (routerQueue) {\n if (Array.isArray(routerQueue)) {\n queue.push(...routerQueue);\n } else {\n queue.push(routerQueue);\n }\n }\n\n function next() {\n if (queue.length === 0) {\n resolve();\n return;\n }\n const queueItem = queue.shift();\n\n queueItem.call(router, {\n router,\n to,\n from,\n resolve() {\n next();\n },\n reject() {\n reject();\n },\n direction,\n app: router.app,\n });\n }\n next();\n}\n\nexport default function processRouteQueue(to, from, resolve, reject, direction) {\n const router = this;\n function enterNextRoute() {\n if (to && to.route && (router.params.routesBeforeEnter || to.route.beforeEnter)) {\n router.allowPageChange = false;\n processQueue(\n router,\n router.params.routesBeforeEnter,\n to.route.beforeEnter,\n to,\n from,\n () => {\n router.allowPageChange = true;\n resolve();\n },\n () => {\n reject();\n },\n direction,\n );\n } else {\n resolve();\n }\n }\n function leaveCurrentRoute() {\n if (from && from.route && (router.params.routesBeforeLeave || from.route.beforeLeave)) {\n router.allowPageChange = false;\n processQueue(\n router,\n router.params.routesBeforeLeave,\n from.route.beforeLeave,\n to,\n from,\n () => {\n router.allowPageChange = true;\n enterNextRoute();\n },\n () => {\n reject();\n },\n direction,\n );\n } else {\n enterNextRoute();\n }\n }\n leaveCurrentRoute();\n}\n","export default function appRouterCheck(router, method) {\n if (!router.view) {\n throw new Error(\n `Framework7: it is not allowed to use router methods on global app router. Use router methods only on related View, e.g. app.views.main.router.${method}(...)`,\n );\n }\n}\n","export default function asyncComponent(router, component, resolve, reject) {\n function resolvePromise(componentPromise) {\n componentPromise\n .then((c) => {\n // eslint-disable-next-line\n resolve({ component: c.default || c._default || c });\n })\n .catch((err) => {\n reject();\n throw new Error(err);\n });\n }\n if (component instanceof Promise) {\n resolvePromise(component);\n return;\n }\n const asyncComponentResult = component.call(router);\n if (asyncComponentResult instanceof Promise) {\n resolvePromise(asyncComponentResult);\n } else {\n resolve({ component: asyncComponentResult });\n }\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, parseUrlQuery } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport redirect from './redirect.js';\nimport processRouteQueue from './process-route-queue.js';\nimport appRouterCheck from './app-router-check.js';\nimport asyncComponent from './async-component.js';\n\nfunction refreshPage() {\n const router = this;\n appRouterCheck(router, 'refreshPage');\n return router.navigate(router.currentRoute.url, {\n ignoreCache: true,\n reloadCurrent: true,\n });\n}\n\nfunction forward(router, el, forwardOptions = {}) {\n const document = getDocument();\n const $el = $(el);\n const app = router.app;\n const view = router.view;\n const options = extend(\n false,\n {\n animate: router.params.animate,\n browserHistory: true,\n replaceState: false,\n history: true,\n reloadCurrent: router.params.reloadPages,\n reloadPrevious: false,\n reloadAll: false,\n clearPreviousHistory: false,\n reloadDetail: router.params.reloadDetail,\n on: {},\n },\n forwardOptions,\n );\n\n const masterDetailEnabled = router.params.masterDetailBreakpoint > 0;\n const isMaster =\n masterDetailEnabled &&\n options.route &&\n options.route.route &&\n (options.route.route.master === true ||\n (typeof options.route.route.master === 'function' &&\n options.route.route.master(app, router)));\n\n let masterPageEl;\n let otherDetailPageEl;\n let detailsInBetweenRemoved = 0;\n\n let currentRouteIsModal = router.currentRoute.modal;\n let modalType;\n if (!currentRouteIsModal) {\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (\n router.currentRoute &&\n router.currentRoute.route &&\n router.currentRoute.route[modalLoadProp]\n ) {\n currentRouteIsModal = true;\n modalType = modalLoadProp;\n }\n });\n }\n\n if (currentRouteIsModal) {\n const modalToClose =\n router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get();\n const previousUrl = router.history[router.history.length - 2];\n let previousRoute = router.findMatchingRoute(previousUrl);\n if (!previousRoute && previousUrl) {\n previousRoute = {\n url: previousUrl,\n path: previousUrl.split('?')[0],\n query: parseUrlQuery(previousUrl),\n route: {\n path: previousUrl.split('?')[0],\n url: previousUrl,\n },\n };\n }\n\n router.modalRemove(modalToClose);\n }\n\n const dynamicNavbar = router.dynamicNavbar;\n\n const $viewEl = router.$el;\n const $newPage = $el;\n const reload = options.reloadPrevious || options.reloadCurrent || options.reloadAll;\n let $oldPage;\n\n let $navbarsEl;\n let $newNavbarEl;\n let $oldNavbarEl;\n\n router.allowPageChange = false;\n if ($newPage.length === 0) {\n router.allowPageChange = true;\n return router;\n }\n\n if ($newPage.length) {\n // Remove theme elements\n router.removeThemeElements($newPage);\n }\n\n if (dynamicNavbar) {\n $newNavbarEl = $newPage.children('.navbar');\n $navbarsEl = router.$navbarsEl;\n if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) {\n // Try from pageData\n $newNavbarEl = $newPage[0].f7Page.$navbarEl;\n }\n }\n\n // Save Keep Alive Cache\n if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !options.route.route.keepAliveData\n ) {\n options.route.route.keepAliveData = {\n pageEl: $el[0],\n };\n }\n\n // Pages In View\n const $pagesInView = $viewEl\n .children('.page:not(.stacked)')\n .filter((pageInView) => pageInView !== $newPage[0]);\n\n // Navbars In View\n let $navbarsInView;\n if (dynamicNavbar) {\n $navbarsInView = $navbarsEl\n .children('.navbar:not(.stacked)')\n .filter((navbarInView) => navbarInView !== $newNavbarEl[0]);\n }\n\n // Exit when reload previous and only 1 page in view so nothing ro reload\n if (options.reloadPrevious && $pagesInView.length < 2) {\n router.allowPageChange = true;\n return router;\n }\n\n // Find Detail' master page\n let isDetail;\n let reloadDetail;\n let isDetailRoot;\n if (masterDetailEnabled && !options.reloadAll) {\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) {\n masterPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n isDetail = !isMaster && masterPageEl;\n\n if (isDetail) {\n // Find Other Detail\n if (masterPageEl) {\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if ($pagesInView[i].classList.contains('page-master-detail')) {\n otherDetailPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n }\n }\n reloadDetail =\n isDetail &&\n options.reloadDetail &&\n app.width >= router.params.masterDetailBreakpoint &&\n masterPageEl;\n }\n if (isDetail) {\n isDetailRoot = !otherDetailPageEl || reloadDetail || options.reloadAll || options.reloadCurrent;\n }\n\n // New Page\n let newPagePosition = 'next';\n if (options.reloadCurrent || options.reloadAll || reloadDetail) {\n newPagePosition = 'current';\n } else if (options.reloadPrevious) {\n newPagePosition = 'previous';\n }\n $newPage\n .removeClass('page-previous page-current page-next')\n .addClass(\n `page-${newPagePosition}${isMaster ? ' page-master' : ''}${\n isDetail ? ' page-master-detail' : ''\n }${isDetailRoot ? ' page-master-detail-root' : ''}`,\n )\n .removeClass('stacked')\n .trigger('page:unstack')\n .trigger('page:position', { position: newPagePosition });\n router.emit('pageUnstack', $newPage[0]);\n router.emit('pagePosition', $newPage[0], newPagePosition);\n\n if (isMaster || isDetail) {\n $newPage.trigger('page:role', { role: isMaster ? 'master' : 'detail', root: !!isDetailRoot });\n router.emit('pageRole', $newPage[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n\n if (dynamicNavbar && $newNavbarEl.length) {\n $newNavbarEl\n .removeClass('navbar-previous navbar-current navbar-next')\n .addClass(\n `navbar-${newPagePosition}${isMaster ? ' navbar-master' : ''}${\n isDetail ? ' navbar-master-detail' : ''\n }${isDetailRoot ? ' navbar-master-detail-root' : ''}`,\n )\n .removeClass('stacked');\n $newNavbarEl.trigger('navbar:position', { position: newPagePosition });\n router.emit('navbarPosition', $newNavbarEl[0], newPagePosition);\n if (isMaster || isDetail) {\n router.emit('navbarRole', $newNavbarEl[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n }\n\n // Find Old Page\n if (options.reloadCurrent || reloadDetail) {\n if (reloadDetail) {\n $oldPage = $pagesInView.filter((pageEl) => !pageEl.classList.contains('page-master'));\n if (dynamicNavbar) {\n $oldNavbarEl = $($oldPage.map((pageEl) => app.navbar.getElByPage(pageEl)));\n }\n if ($oldPage.length > 1 && masterPageEl) {\n detailsInBetweenRemoved = $oldPage.length - 1;\n $(masterPageEl).removeClass('page-master-stacked').trigger('page:masterunstack');\n router.emit('pageMasterUnstack', masterPageEl);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage(masterPageEl)).removeClass('navbar-master-stacked');\n router.emit('navbarMasterUnstack', app.navbar.getElByPage(masterPageEl));\n }\n }\n } else {\n $oldPage = $pagesInView.eq($pagesInView.length - 1);\n if (dynamicNavbar) {\n $oldNavbarEl = $(app.navbar.getElByPage($oldPage));\n }\n }\n } else if (options.reloadPrevious) {\n $oldPage = $pagesInView.eq($pagesInView.length - 2);\n if (dynamicNavbar) {\n // $oldNavbarEl = $navbarsInView.eq($pagesInView.length - 2);\n $oldNavbarEl = $(app.navbar.getElByPage($oldPage));\n }\n } else if (options.reloadAll) {\n $oldPage = $pagesInView.filter((pageEl) => pageEl !== $newPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl = $navbarsInView.filter((navbarEl) => navbarEl !== $newNavbarEl[0]);\n }\n } else {\n let removedPageEls = [];\n let removedNavbarEls = [];\n if ($pagesInView.length > 1) {\n let i = 0;\n for (i = 0; i < $pagesInView.length - 1; i += 1) {\n if (masterPageEl && $pagesInView[i] === masterPageEl) {\n $pagesInView.eq(i).addClass('page-master-stacked');\n $pagesInView.eq(i).trigger('page:masterstack');\n router.emit('pageMasterStack', $pagesInView[i]);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage(masterPageEl)).addClass('navbar-master-stacked');\n router.emit('navbarMasterStack', app.navbar.getElByPage(masterPageEl));\n }\n continue; // eslint-disable-line\n }\n const oldNavbarEl = app.navbar.getElByPage($pagesInView.eq(i));\n if (router.params.stackPages) {\n $pagesInView.eq(i).addClass('stacked');\n $pagesInView.eq(i).trigger('page:stack');\n router.emit('pageStack', $pagesInView[i]);\n if (dynamicNavbar) {\n $(oldNavbarEl).addClass('stacked');\n }\n } else {\n // Page remove event\n removedPageEls.push($pagesInView[i]);\n router.pageCallback(\n 'beforeRemove',\n $pagesInView[i],\n $navbarsInView && $navbarsInView[i],\n 'previous',\n undefined,\n options,\n );\n router.removePage($pagesInView[i]);\n if (dynamicNavbar && oldNavbarEl) {\n removedNavbarEls.push(oldNavbarEl);\n router.removeNavbar(oldNavbarEl);\n }\n }\n }\n }\n $oldPage = $viewEl\n .children('.page:not(.stacked)')\n .filter((pageEl) => pageEl !== $newPage[0] && removedPageEls.indexOf(pageEl) < 0);\n if (dynamicNavbar) {\n $oldNavbarEl = $navbarsEl\n .children('.navbar:not(.stacked)')\n .filter(\n (navbarEl) =>\n navbarEl !== $newNavbarEl[0] && removedNavbarEls.indexOf(removedNavbarEls) < 0,\n );\n }\n removedPageEls = [];\n removedNavbarEls = [];\n }\n\n if (isDetail && !options.reloadAll) {\n if ($oldPage.length > 1 || reloadDetail) {\n $oldPage = $oldPage.filter((pageEl) => !pageEl.classList.contains('page-master'));\n }\n if ($oldNavbarEl && ($oldNavbarEl.length > 1 || reloadDetail)) {\n $oldNavbarEl = $oldNavbarEl.filter(\n (navbarEl) => !navbarEl.classList.contains('navbar-master'),\n );\n }\n }\n\n // Push State\n if (\n router.params.browserHistory &&\n (options.browserHistory || options.replaceState) &&\n !options.reloadPrevious\n ) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History[\n options.reloadCurrent ||\n (reloadDetail && otherDetailPageEl) ||\n options.reloadAll ||\n options.replaceState\n ? 'replace'\n : 'push'\n ](\n view.id,\n {\n url: options.route.url,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + options.route.url,\n );\n }\n\n if (!options.reloadPrevious) {\n // Current Page & Navbar\n router.currentPageEl = $newPage[0];\n if (dynamicNavbar && $newNavbarEl.length) {\n router.currentNavbarEl = $newNavbarEl[0];\n } else {\n delete router.currentNavbarEl;\n }\n\n // Current Route\n router.currentRoute = options.route;\n }\n\n // Update router history\n const url = options.route.url;\n\n if (options.history) {\n if (\n ((options.reloadCurrent || (reloadDetail && otherDetailPageEl)) && router.history.length) >\n 0 ||\n options.replaceState\n ) {\n if (reloadDetail && detailsInBetweenRemoved > 0) {\n router.history = router.history.slice(0, router.history.length - detailsInBetweenRemoved);\n }\n router.history[router.history.length - (options.reloadPrevious ? 2 : 1)] = url;\n } else if (options.reloadPrevious) {\n router.history[router.history.length - 2] = url;\n } else if (options.reloadAll) {\n router.history = [url];\n } else {\n router.history.push(url);\n }\n }\n router.saveHistory();\n\n // Insert new page and navbar\n const newPageInDom = $newPage.parents(document).length > 0;\n const f7Component = $newPage[0].f7Component;\n if (options.reloadPrevious) {\n if (f7Component && !newPageInDom) {\n f7Component.mount((componentEl) => {\n $(componentEl).insertBefore($oldPage);\n });\n } else {\n $newPage.insertBefore($oldPage);\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n if ($oldNavbarEl.length) {\n $newNavbarEl.insertBefore($oldNavbarEl);\n } else {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl);\n }\n }\n } else {\n if ($oldPage.next('.page')[0] !== $newPage[0]) {\n if (f7Component && !newPageInDom) {\n f7Component.mount((componentEl) => {\n $viewEl.append(componentEl);\n });\n } else {\n $viewEl.append($newPage[0]);\n }\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl[0]);\n }\n }\n if (!newPageInDom) {\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n newPagePosition,\n reload ? newPagePosition : 'current',\n options,\n $oldPage,\n );\n } else if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !$newPage[0].f7PageMounted\n ) {\n $newPage[0].f7PageMounted = true;\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n newPagePosition,\n reload ? newPagePosition : 'current',\n options,\n $oldPage,\n );\n }\n\n // Remove old page\n if ((options.reloadCurrent || reloadDetail) && $oldPage.length > 0) {\n if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n // Page remove event\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n } else if (options.reloadAll) {\n $oldPage.each((pageEl, index) => {\n const $oldPageEl = $(pageEl);\n const $oldNavbarElEl = $(app.navbar.getElByPage($oldPageEl));\n if (router.params.stackPages && router.initialPages.indexOf($oldPageEl[0]) >= 0) {\n $oldPageEl.addClass('stacked');\n $oldPageEl.trigger('page:stack');\n router.emit('pageStack', $oldPageEl[0]);\n if (dynamicNavbar) {\n $oldNavbarElEl.addClass('stacked');\n }\n } else {\n // Page remove event\n if ($oldPageEl.hasClass('page-current')) {\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n }\n router.pageCallback(\n 'beforeRemove',\n $oldPageEl,\n $oldNavbarEl && $oldNavbarEl.eq(index),\n 'previous',\n undefined,\n options,\n );\n router.removePage($oldPageEl);\n if (dynamicNavbar && $oldNavbarElEl.length) {\n router.removeNavbar($oldNavbarElEl);\n }\n }\n });\n } else if (options.reloadPrevious) {\n if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n // Page remove event\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n }\n\n // Load Tab\n if (options.route.route.tab) {\n router.tabLoad(\n options.route.route.tab,\n extend({}, options, {\n history: false,\n browserHistory: false,\n }),\n );\n }\n\n // Check master detail\n if (masterDetailEnabled) {\n view.checkMasterDetailBreakpoint();\n }\n\n // Page init and before init events\n router.pageCallback(\n 'init',\n $newPage,\n $newNavbarEl,\n newPagePosition,\n reload ? newPagePosition : 'current',\n options,\n $oldPage,\n );\n\n if (options.reloadCurrent || options.reloadAll || reloadDetail) {\n router.allowPageChange = true;\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, newPagePosition, 'current', options);\n $newPage.removeAttr('aria-hidden');\n if (dynamicNavbar && $newNavbarEl) {\n $newNavbarEl.removeAttr('aria-hidden');\n }\n router.pageCallback('afterIn', $newPage, $newNavbarEl, newPagePosition, 'current', options);\n if (options.reloadCurrent && options.clearPreviousHistory) router.clearPreviousHistory();\n if (reloadDetail) {\n router.setPagePosition($(masterPageEl), 'previous');\n if (masterPageEl.f7Page && masterPageEl.f7Page.navbarEl) {\n router.setNavbarPosition($(masterPageEl.f7Page.navbarEl), 'previous');\n }\n }\n return router;\n }\n if (options.reloadPrevious) {\n router.allowPageChange = true;\n return router;\n }\n\n // Before animation event\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'previous', options);\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'next', 'current', options);\n\n // Animation\n function afterAnimation() {\n router.setPagePosition($newPage, 'current', false);\n router.setPagePosition($oldPage, 'previous', !$oldPage.hasClass('page-master'));\n if (dynamicNavbar) {\n router.setNavbarPosition($newNavbarEl, 'current', false);\n router.setNavbarPosition($oldNavbarEl, 'previous', !$oldNavbarEl.hasClass('navbar-master'));\n }\n // After animation event\n router.allowPageChange = true;\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'previous', options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'next', 'current', options);\n\n let keepOldPage =\n (router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`]) && !isMaster;\n if (!keepOldPage) {\n if (\n $newPage.hasClass('smart-select-page') ||\n $newPage.hasClass('photo-browser-page') ||\n $newPage.hasClass('autocomplete-page') ||\n $newPage.hasClass('color-picker-page')\n ) {\n keepOldPage = true;\n }\n }\n if (!keepOldPage) {\n if (router.params.stackPages) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else if (\n !($newPage.attr('data-name') && $newPage.attr('data-name') === 'smart-select-page')\n ) {\n // Remove event\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n }\n if (options.clearPreviousHistory) router.clearPreviousHistory();\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n if (router.params.browserHistory) {\n History.clearRouterQueue();\n }\n }\n function setPositionClasses() {\n router.setPagePosition($oldPage, 'current', false);\n router.setPagePosition($newPage, 'next', false);\n if (dynamicNavbar) {\n router.setNavbarPosition($oldNavbarEl, 'current', false);\n router.setNavbarPosition($newNavbarEl, 'next', false);\n }\n }\n if (options.animate && !(isMaster && app.width >= router.params.masterDetailBreakpoint)) {\n const delay = router.params[`${router.app.theme}PageLoadDelay`];\n let transition = router.params.transition;\n if (options.transition) transition = options.transition;\n if (!transition && router.currentRoute && router.currentRoute.route) {\n transition = router.currentRoute.route.transition;\n }\n if (!transition && router.currentRoute && router.currentRoute.route.options) {\n transition = router.currentRoute.route.options.transition;\n }\n if (transition) {\n $newPage[0].f7PageTransition = transition;\n }\n\n if (delay) {\n setTimeout(() => {\n setPositionClasses();\n router.animate(\n $oldPage,\n $newPage,\n $oldNavbarEl,\n $newNavbarEl,\n 'forward',\n transition,\n () => {\n afterAnimation();\n },\n );\n }, delay);\n } else {\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'forward', transition, () => {\n afterAnimation();\n });\n }\n } else {\n afterAnimation();\n }\n return router;\n}\nfunction load(router, loadParams = {}, loadOptions = {}, ignorePageChange) {\n if (!router.allowPageChange && !ignorePageChange) return router;\n const params = loadParams;\n const options = loadOptions;\n const { url, content, el, pageName, component, componentUrl } = params;\n\n if (\n !options.reloadCurrent &&\n options.route &&\n options.route.route &&\n options.route.route.parentPath &&\n router.currentRoute.route &&\n router.currentRoute.route.parentPath === options.route.route.parentPath\n ) {\n // Do something nested\n if (options.route.url === router.url) {\n router.allowPageChange = true;\n return false;\n }\n // Check for same params\n let sameParams =\n Object.keys(options.route.params).length === Object.keys(router.currentRoute.params).length;\n if (sameParams) {\n // Check for equal params name\n Object.keys(options.route.params).forEach((paramName) => {\n if (\n !(paramName in router.currentRoute.params) ||\n router.currentRoute.params[paramName] !== options.route.params[paramName]\n ) {\n sameParams = false;\n }\n });\n }\n if (sameParams) {\n if (options.route.route.tab) {\n return router.tabLoad(options.route.route.tab, options);\n }\n return false;\n }\n if (\n !sameParams &&\n options.route.route.tab &&\n router.currentRoute.route.tab &&\n router.currentRoute.parentPath === options.route.parentPath\n ) {\n return router.tabLoad(options.route.route.tab, options);\n }\n }\n\n if (\n options.route &&\n options.route.url &&\n router.url === options.route.url &&\n !(options.reloadCurrent || options.reloadPrevious) &&\n !router.params.allowDuplicateUrls\n ) {\n router.allowPageChange = true;\n return false;\n }\n\n if (!options.route && url) {\n options.route = router.parseRouteUrl(url);\n extend(options.route, { route: { url, path: url } });\n }\n\n // Component Callbacks\n function resolve(pageEl, newOptions) {\n return forward(router, pageEl, extend(options, newOptions));\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (url || componentUrl || component) {\n router.allowPageChange = false;\n }\n\n // Proceed\n if (content) {\n forward(router, router.getPageEl(content), options);\n } else if (el) {\n // Load page from specified HTMLElement or by page name in pages container\n forward(router, router.getPageEl(el), options);\n } else if (pageName) {\n // Load page by page name in pages container\n forward(router, router.$el.children(`.page[data-name=\"${pageName}\"]`).eq(0), options);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.pageComponentLoader({\n routerEl: router.el,\n component,\n componentUrl,\n options,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, options)\n .then((pageContent) => {\n forward(router, router.getPageEl(pageContent), options);\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n }\n return router;\n}\n\nfunction navigate(navigateParams, navigateOptions = {}) {\n const router = this;\n\n if (router.swipeBackActive) return router;\n let url;\n let createRoute;\n let name;\n let path;\n let query;\n let params;\n let route;\n if (typeof navigateParams === 'string') {\n url = navigateParams;\n } else {\n url = navigateParams.url;\n createRoute = navigateParams.route;\n name = navigateParams.name;\n path = navigateParams.path;\n query = navigateParams.query;\n params = navigateParams.params;\n }\n if (name || path) {\n url = router.generateUrl({ path, name, params, query });\n if (url) {\n return router.navigate(url, navigateOptions);\n }\n return router;\n }\n const app = router.app;\n appRouterCheck(router, 'navigate');\n if (url === '#' || url === '') {\n return router;\n }\n\n let navigateUrl = url.replace('./', '');\n if (navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) {\n const currentPath = router.currentRoute.parentPath || router.currentRoute.path;\n navigateUrl = ((currentPath ? `${currentPath}/` : '/') + navigateUrl)\n .replace('///', '/')\n .replace('//', '/');\n }\n if (createRoute) {\n route = extend(router.parseRouteUrl(navigateUrl), {\n route: extend({}, createRoute),\n });\n } else {\n route = router.findMatchingRoute(navigateUrl);\n }\n\n if (!route) {\n return router;\n }\n if (route.route && route.route.viewName) {\n const anotherViewName = route.route.viewName;\n const anotherView = app.views[anotherViewName];\n if (!anotherView) {\n throw new Error(\n `Framework7: There is no View with \"${anotherViewName}\" name that was specified in this route`,\n );\n }\n if (anotherView !== router.view) {\n return anotherView.router.navigate(navigateParams, navigateOptions);\n }\n }\n\n if (route.route.redirect) {\n return redirect.call(router, 'forward', route, navigateOptions);\n }\n\n const options = {};\n if (route.route.options) {\n extend(options, route.route.options, navigateOptions);\n } else {\n extend(options, navigateOptions);\n }\n\n if (\n options.openIn &&\n (!router.params.ignoreOpenIn || (router.params.ignoreOpenIn && router.history.length > 0))\n ) {\n return router.openIn(router, navigateUrl, options);\n }\n\n options.route = route;\n\n function resolve() {\n let routerLoaded = false;\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (route.route[modalLoadProp] && !routerLoaded) {\n routerLoaded = true;\n router.modalLoad(modalLoadProp, route, options, 'forward');\n }\n });\n if (route.route.keepAlive && route.route.keepAliveData) {\n load(router, { el: route.route.keepAliveData.pageEl }, options, false);\n routerLoaded = true;\n }\n 'url content component pageName el componentUrl'.split(' ').forEach((pageLoadProp) => {\n if (route.route[pageLoadProp] && !routerLoaded) {\n routerLoaded = true;\n load(router, { [pageLoadProp]: route.route[pageLoadProp] }, options, false);\n }\n });\n if (routerLoaded) return;\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n router.allowPageChange = false;\n let resolvedAsModal = false;\n\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (resolveParams[modalLoadProp]) {\n resolvedAsModal = true;\n const modalRoute = extend({}, route, { route: resolveParams });\n router.allowPageChange = true;\n router.modalLoad(modalLoadProp, modalRoute, extend(options, resolveOptions), 'forward');\n }\n });\n if (resolvedAsModal) return;\n load(router, resolveParams, extend(options, resolveOptions), true);\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (route.route.async) {\n router.allowPageChange = false;\n route.route.async.call(router, {\n router,\n to: options.route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction: 'forward',\n app,\n });\n }\n if (route.route.asyncComponent) {\n asyncComponent(router, route.route.asyncComponent, asyncResolve, asyncReject);\n }\n }\n function reject() {\n router.allowPageChange = true;\n }\n\n if (router.params.masterDetailBreakpoint > 0 && route.route.masterRoute) {\n // load detail route\n let preloadMaster = true;\n let masterLoaded = false;\n if (router.currentRoute && router.currentRoute.route) {\n if (\n (router.currentRoute.route.master === true ||\n (typeof router.currentRoute.route.master === 'function' &&\n router.currentRoute.route.master(app, router))) &&\n (router.currentRoute.route === route.route.masterRoute ||\n router.currentRoute.route.path === route.route.masterRoute.path)\n ) {\n preloadMaster = false;\n }\n if (\n router.currentRoute.route.masterRoute &&\n (router.currentRoute.route.masterRoute === route.route.masterRoute ||\n router.currentRoute.route.masterRoute.path === route.route.masterRoute.path)\n ) {\n preloadMaster = false;\n masterLoaded = true;\n }\n }\n if (preloadMaster || (masterLoaded && navigateOptions.reloadAll)) {\n router.navigate(\n { path: route.route.masterRoute.path, params: route.params || {} },\n {\n animate: false,\n reloadAll: navigateOptions.reloadAll,\n reloadCurrent: navigateOptions.reloadCurrent,\n reloadPrevious: navigateOptions.reloadPrevious,\n browserHistory: !navigateOptions.initial,\n history: !navigateOptions.initial,\n once: {\n pageAfterIn() {\n router.navigate(\n navigateParams,\n extend({}, navigateOptions, {\n animate: false,\n reloadAll: false,\n reloadCurrent: false,\n reloadPrevious: false,\n history: !navigateOptions.initial,\n browserHistory: !navigateOptions.initial,\n }),\n );\n },\n },\n },\n );\n return router;\n }\n }\n\n processRouteQueue.call(\n router,\n route,\n router.currentRoute,\n () => {\n if (route.route.modules) {\n app\n .loadModules(\n Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules],\n )\n .then(() => {\n resolve();\n })\n .catch(() => {\n reject();\n });\n } else {\n resolve();\n }\n },\n () => {\n reject();\n },\n 'forward',\n );\n\n // Return Router\n return router;\n}\nexport { refreshPage, navigate };\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, parseUrlQuery } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport History from '../../shared/history.js';\nimport redirect from './redirect.js';\nimport processRouteQueue from './process-route-queue.js';\nimport appRouterCheck from './app-router-check.js';\nimport asyncComponent from './async-component.js';\n\nfunction backward(router, el, backwardOptions) {\n const device = getDevice();\n const document = getDocument();\n const $el = $(el);\n const app = router.app;\n const view = router.view;\n\n const options = extend(\n false,\n {\n animate: router.params.animate,\n browserHistory: true,\n replaceState: false,\n },\n backwardOptions,\n );\n\n const masterDetailEnabled = router.params.masterDetailBreakpoint > 0;\n const isMaster =\n masterDetailEnabled &&\n options.route &&\n options.route.route &&\n (options.route.route.master === true ||\n (typeof options.route.route.master === 'function' &&\n options.route.route.master(app, router)));\n let masterPageEl;\n let masterPageRemoved;\n\n const dynamicNavbar = router.dynamicNavbar;\n\n const $newPage = $el;\n const $oldPage = router.$el.children('.page-current');\n const initialPreload = $oldPage.length === 0 && options.preload;\n const currentIsMaster = masterDetailEnabled && $oldPage.hasClass('page-master');\n\n if ($newPage.length) {\n // Remove theme elements\n router.removeThemeElements($newPage);\n }\n\n let $navbarsEl;\n let $newNavbarEl;\n let $oldNavbarEl;\n\n if (dynamicNavbar) {\n $newNavbarEl = $newPage.children('.navbar');\n $navbarsEl = router.$navbarsEl;\n if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) {\n // Try from pageData\n $newNavbarEl = $newPage[0].f7Page.$navbarEl;\n }\n $oldNavbarEl = $navbarsEl.find('.navbar-current');\n }\n\n router.allowPageChange = false;\n if ($newPage.length === 0 || ($oldPage.length === 0 && !options.preload)) {\n router.allowPageChange = true;\n return router;\n }\n\n // Remove theme elements\n router.removeThemeElements($newPage);\n\n // Save Keep Alive Cache\n if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !options.route.route.keepAliveData\n ) {\n options.route.route.keepAliveData = {\n pageEl: $el[0],\n };\n }\n\n // Pages In View\n let isDetail;\n let isDetailRoot;\n if (masterDetailEnabled) {\n const $pagesInView = router.$el\n .children('.page:not(.stacked)')\n .filter((pageInView) => pageInView !== $newPage[0]);\n\n // Find Detail' master page\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) {\n masterPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n\n isDetail =\n !isMaster &&\n masterPageEl &&\n router.history.indexOf(options.route.url) >\n router.history.indexOf(masterPageEl.f7Page.route.url);\n\n if (\n !isDetail &&\n !isMaster &&\n masterPageEl &&\n masterPageEl.f7Page &&\n options.route.route.masterRoute\n ) {\n isDetail = options.route.route.masterRoute.path === masterPageEl.f7Page.route.route.path;\n }\n }\n if (isDetail && masterPageEl && masterPageEl.f7Page) {\n isDetailRoot =\n router.history.indexOf(options.route.url) -\n router.history.indexOf(masterPageEl.f7Page.route.url) ===\n 1;\n }\n\n // New Page\n $newPage\n .addClass(\n `page-${initialPreload ? 'current' : 'previous'}${isMaster ? ' page-master' : ''}${\n isDetail ? ' page-master-detail' : ''\n }${isDetailRoot ? ' page-master-detail-root' : ''}`,\n )\n .removeClass('stacked')\n .removeAttr('aria-hidden')\n .trigger('page:unstack')\n .trigger('page:position', { position: initialPreload ? 'current' : 'previous' });\n router.emit('pageUnstack', $newPage[0]);\n router.emit('pagePosition', $newPage[0], initialPreload ? 'current' : 'previous');\n if (isMaster || isDetail) {\n $newPage.trigger('page:role', { role: isMaster ? 'master' : 'detail', root: !!isDetailRoot });\n router.emit('pageRole', $newPage[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n\n if (dynamicNavbar && $newNavbarEl.length > 0) {\n $newNavbarEl\n .addClass(\n `navbar-${initialPreload ? 'current' : 'previous'}${isMaster ? ' navbar-master' : ''}${\n isDetail ? ' navbar-master-detail' : ''\n }${isDetailRoot ? ' navbar-master-detail-root' : ''}`,\n )\n .removeClass('stacked')\n .removeAttr('aria-hidden');\n $newNavbarEl.trigger('navbar:position', { position: initialPreload ? 'current' : 'previous' });\n router.emit('navbarPosition', $newNavbarEl[0], initialPreload ? 'current' : 'previous');\n if (isMaster || isDetailRoot) {\n router.emit('navbarRole', $newNavbarEl[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n }\n\n // Remove previous page in case of \"forced\"\n let backIndex;\n if (options.force) {\n if (\n $oldPage.prev('.page-previous:not(.stacked)').length > 0 ||\n $oldPage.prev('.page-previous').length === 0\n ) {\n if (router.history.indexOf(options.route.url) >= 0) {\n backIndex = router.history.length - router.history.indexOf(options.route.url) - 1;\n router.history = router.history.slice(0, router.history.indexOf(options.route.url) + 2);\n view.history = router.history;\n } else if (router.history[[router.history.length - 2]]) {\n router.history[router.history.length - 2] = options.route.url;\n } else {\n router.history.unshift(router.url);\n }\n\n if (backIndex && router.params.stackPages) {\n $oldPage.prevAll('.page-previous').each((pageToRemove) => {\n const $pageToRemove = $(pageToRemove);\n let $navbarToRemove;\n if (dynamicNavbar) {\n // $navbarToRemove = $oldNavbarEl.prevAll('.navbar-previous').eq(index);\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if ($pageToRemove[0] !== $newPage[0] && $pageToRemove.index() > $newPage.index()) {\n if (router.initialPages.indexOf($pageToRemove[0]) >= 0) {\n $pageToRemove.addClass('stacked');\n $pageToRemove.trigger('page:stack');\n router.emit('pageStack', $pageToRemove[0]);\n if (dynamicNavbar) {\n $navbarToRemove.addClass('stacked');\n }\n } else {\n router.pageCallback(\n 'beforeRemove',\n $pageToRemove,\n $navbarToRemove,\n 'previous',\n undefined,\n options,\n );\n if ($pageToRemove[0] === masterPageEl) {\n masterPageRemoved = true;\n }\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length > 0) {\n router.removeNavbar($navbarToRemove);\n }\n }\n }\n });\n } else {\n const $pageToRemove = $oldPage.prev('.page-previous:not(.stacked)');\n let $navbarToRemove;\n if (dynamicNavbar) {\n // $navbarToRemove = $oldNavbarEl.prev('.navbar-inner:not(.stacked)');\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if (router.params.stackPages && router.initialPages.indexOf($pageToRemove[0]) >= 0) {\n $pageToRemove.addClass('stacked');\n $pageToRemove.trigger('page:stack');\n router.emit('pageStack', $pageToRemove[0]);\n $navbarToRemove.addClass('stacked');\n } else if ($pageToRemove.length > 0) {\n router.pageCallback(\n 'beforeRemove',\n $pageToRemove,\n $navbarToRemove,\n 'previous',\n undefined,\n options,\n );\n if ($pageToRemove[0] === masterPageEl) {\n masterPageRemoved = true;\n }\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length) {\n router.removeNavbar($navbarToRemove);\n }\n }\n }\n }\n }\n\n // Insert new page\n const newPageInDom = $newPage.parents(document).length > 0;\n const f7Component = $newPage[0].f7Component;\n\n function insertPage() {\n if (initialPreload) {\n if (!newPageInDom && f7Component) {\n f7Component.mount((componentEl) => {\n router.$el.append(componentEl);\n });\n } else {\n router.$el.append($newPage);\n }\n }\n if ($newPage.next($oldPage).length === 0) {\n if (!newPageInDom && f7Component) {\n f7Component.mount((componentEl) => {\n $(componentEl).insertBefore($oldPage);\n });\n } else {\n $newPage.insertBefore($oldPage);\n }\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n $newNavbarEl.insertBefore($oldNavbarEl);\n if ($oldNavbarEl.length > 0) {\n $newNavbarEl.insertBefore($oldNavbarEl);\n } else {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl);\n }\n }\n if (!newPageInDom) {\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n 'previous',\n 'current',\n options,\n $oldPage,\n );\n } else if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !$newPage[0].f7PageMounted\n ) {\n $newPage[0].f7PageMounted = true;\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n 'previous',\n 'current',\n options,\n $oldPage,\n );\n }\n }\n\n if (options.preload) {\n // Insert Page\n insertPage();\n // Tab route\n if (options.route.route.tab) {\n router.tabLoad(\n options.route.route.tab,\n extend({}, options, {\n history: false,\n browserHistory: false,\n preload: true,\n }),\n );\n }\n if (isMaster) {\n $newPage.removeClass('page-master-stacked').trigger('page:masterunstack');\n router.emit('pageMasterUnstack', $newPage[0]);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage($newPage)).removeClass('navbar-master-stacked');\n router.emit('navbarMasterUnstack', app.navbar.getElByPage($newPage));\n }\n }\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n if (initialPreload) {\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'current', undefined, options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'current', undefined, options);\n }\n const $previousPages = $newPage.prevAll('.page-previous:not(.stacked):not(.page-master)');\n if ($previousPages.length > 0) {\n $previousPages.each((pageToRemove) => {\n const $pageToRemove = $(pageToRemove);\n let $navbarToRemove;\n if (dynamicNavbar) {\n // $navbarToRemove = $newNavbarEl.prevAll('.navbar-previous:not(.stacked)').eq(index);\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if (router.params.stackPages && router.initialPages.indexOf(pageToRemove) >= 0) {\n $pageToRemove.addClass('stacked');\n $pageToRemove.trigger('page:stack');\n router.emit('pageStack', $pageToRemove[0]);\n if (dynamicNavbar) {\n $navbarToRemove.addClass('stacked');\n }\n } else {\n router.pageCallback(\n 'beforeRemove',\n $pageToRemove,\n $navbarToRemove,\n 'previous',\n undefined,\n );\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length) {\n router.removeNavbar($navbarToRemove);\n }\n }\n });\n }\n router.allowPageChange = true;\n return router;\n }\n\n // History State\n if (!(device.ie || device.edge || (device.firefox && !device.ios))) {\n if (router.params.browserHistory && options.browserHistory) {\n if (options.replaceState) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(\n view.id,\n {\n url: options.route.url,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + options.route.url,\n );\n } else if (backIndex) {\n History.go(-backIndex);\n } else {\n History.back();\n }\n }\n }\n\n // Update History\n if (options.replaceState) {\n router.history[router.history.length - 1] = options.route.url;\n } else {\n if (router.history.length === 1) {\n router.history.unshift(router.url);\n }\n router.history.pop();\n }\n router.saveHistory();\n\n // Current Page & Navbar\n router.currentPageEl = $newPage[0];\n if (dynamicNavbar && $newNavbarEl.length) {\n router.currentNavbarEl = $newNavbarEl[0];\n } else {\n delete router.currentNavbarEl;\n }\n\n // Current Route\n router.currentRoute = options.route;\n\n // History State\n if (device.ie || device.edge || (device.firefox && !device.ios)) {\n if (router.params.browserHistory && options.browserHistory) {\n if (options.replaceState) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(\n view.id,\n {\n url: options.route.url,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + options.route.url,\n );\n } else if (backIndex) {\n History.go(-backIndex);\n } else {\n History.back();\n }\n }\n }\n\n // Insert Page\n insertPage();\n\n // Load Tab\n if (options.route.route.tab) {\n router.tabLoad(\n options.route.route.tab,\n extend({}, options, {\n history: false,\n browserHistory: false,\n }),\n );\n }\n\n // Check master detail\n\n if (masterDetailEnabled && (currentIsMaster || masterPageRemoved)) {\n view.checkMasterDetailBreakpoint(false);\n }\n\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n\n // Before animation callback\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'next', options);\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'previous', 'current', options);\n\n // Animation\n function afterAnimation() {\n // Set classes\n router.setPagePosition($newPage, 'current', false);\n router.setPagePosition($oldPage, 'next', true);\n if (dynamicNavbar) {\n router.setNavbarPosition($newNavbarEl, 'current', false);\n router.setNavbarPosition($oldNavbarEl, 'next', true);\n }\n\n // After animation event\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'next', options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'previous', 'current', options);\n\n // Remove Old Page\n if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'next', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n\n router.allowPageChange = true;\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n // Preload previous page\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history[router.history.length - 2] && !isMaster) {\n router.back(router.history[router.history.length - 2], { preload: true });\n }\n if (router.params.browserHistory) {\n History.clearRouterQueue();\n }\n }\n\n function setPositionClasses() {\n router.setPagePosition($oldPage, 'current');\n router.setPagePosition($newPage, 'previous', false);\n if (dynamicNavbar) {\n router.setNavbarPosition($oldNavbarEl, 'current');\n router.setNavbarPosition($newNavbarEl, 'previous', false);\n }\n }\n\n if (options.animate && !(currentIsMaster && app.width >= router.params.masterDetailBreakpoint)) {\n let transition = router.params.transition;\n if ($oldPage[0] && $oldPage[0].f7PageTransition) {\n transition = $oldPage[0].f7PageTransition;\n delete $oldPage[0].f7PageTransition;\n }\n if (options.transition) transition = options.transition;\n if (!transition && router.previousRoute && router.previousRoute.route) {\n transition = router.previousRoute.route.transition;\n }\n if (\n !transition &&\n router.previousRoute &&\n router.previousRoute.route &&\n router.previousRoute.route.options\n ) {\n transition = router.previousRoute.route.options.transition;\n }\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'backward', transition, () => {\n afterAnimation();\n });\n } else {\n afterAnimation();\n }\n\n return router;\n}\nfunction loadBack(router, backParams, backOptions, ignorePageChange) {\n if (!router.allowPageChange && !ignorePageChange) return router;\n const params = backParams;\n const options = backOptions;\n const { url, content, el, pageName, component, componentUrl } = params;\n\n if (\n options.route.url &&\n router.url === options.route.url &&\n !(options.reloadCurrent || options.reloadPrevious) &&\n !router.params.allowDuplicateUrls\n ) {\n return false;\n }\n\n if (!options.route && url) {\n options.route = router.parseRouteUrl(url);\n }\n\n // Component Callbacks\n function resolve(pageEl, newOptions) {\n return backward(router, pageEl, extend(options, newOptions));\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (url || componentUrl || component) {\n router.allowPageChange = false;\n }\n\n // Proceed\n if (content) {\n backward(router, router.getPageEl(content), options);\n } else if (el) {\n // Load page from specified HTMLElement or by page name in pages container\n backward(router, router.getPageEl(el), options);\n } else if (pageName) {\n // Load page by page name in pages container\n backward(router, router.$el.children(`.page[data-name=\"${pageName}\"]`).eq(0), options);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.pageComponentLoader({\n routerEl: router.el,\n component,\n componentUrl,\n options,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, options)\n .then((pageContent) => {\n backward(router, router.getPageEl(pageContent), options);\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n }\n return router;\n}\nfunction back(...args) {\n const router = this;\n const device = getDevice();\n if (router.swipeBackActive) return router;\n let navigateUrl;\n let navigateOptions;\n let route;\n if (typeof args[0] === 'object') {\n navigateOptions = args[0] || {};\n } else {\n navigateUrl = args[0];\n navigateOptions = args[1] || {};\n }\n\n const { name, params, query } = navigateOptions;\n if (name) {\n navigateUrl = router.generateUrl({ name, params, query });\n if (navigateUrl) {\n return router.back(\n navigateUrl,\n extend({}, navigateOptions, {\n name: null,\n params: null,\n query: null,\n }),\n );\n }\n return router;\n }\n\n const app = router.app;\n appRouterCheck(router, 'back');\n\n let currentRouteIsModal = router.currentRoute.modal;\n let modalType;\n if (!currentRouteIsModal) {\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (router.currentRoute.route[modalLoadProp]) {\n currentRouteIsModal = true;\n modalType = modalLoadProp;\n }\n });\n }\n if (currentRouteIsModal && !navigateOptions.preload) {\n const modalToClose =\n router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get();\n const previousUrl = router.history[router.history.length - 2];\n let previousRoute;\n // check if previous route is modal too\n if (modalToClose && modalToClose.$el) {\n const prevOpenedModals = modalToClose.$el.prevAll('.modal-in');\n if (prevOpenedModals.length && prevOpenedModals[0].f7Modal) {\n const modalEl = prevOpenedModals[0];\n // check if current router not inside of the modalEl\n if (!router.$el.parents(modalEl).length) {\n previousRoute = modalEl.f7Modal.route;\n }\n }\n }\n if (!previousRoute) {\n previousRoute = router.findMatchingRoute(previousUrl);\n }\n\n if (!previousRoute && previousUrl) {\n previousRoute = {\n url: previousUrl,\n path: previousUrl.split('?')[0],\n query: parseUrlQuery(previousUrl),\n route: {\n path: previousUrl.split('?')[0],\n url: previousUrl,\n },\n };\n }\n if (!navigateUrl || navigateUrl.replace(/[# ]/g, '').trim().length === 0) {\n if (!previousRoute || !modalToClose) {\n return router;\n }\n }\n const forceOtherUrl = navigateOptions.force && previousRoute && navigateUrl;\n if (previousRoute && modalToClose) {\n const isBrokenBrowserHistory = device.ie || device.edge || (device.firefox && !device.ios);\n const needHistoryBack =\n router.params.browserHistory && navigateOptions.browserHistory !== false;\n const currentRouteWithoutBrowserHistory =\n router.currentRoute &&\n router.currentRoute.route &&\n router.currentRoute.route.options &&\n router.currentRoute.route.options.browserHistory === false;\n if (needHistoryBack && !isBrokenBrowserHistory && !currentRouteWithoutBrowserHistory) {\n History.back();\n }\n router.currentRoute = previousRoute;\n router.history.pop();\n router.saveHistory();\n\n if (needHistoryBack && isBrokenBrowserHistory && !currentRouteWithoutBrowserHistory) {\n History.back();\n }\n\n router.modalRemove(modalToClose);\n if (forceOtherUrl) {\n router.navigate(navigateUrl, { reloadCurrent: true });\n }\n } else if (modalToClose) {\n router.modalRemove(modalToClose);\n if (navigateUrl) {\n router.navigate(navigateUrl, { reloadCurrent: true });\n }\n }\n return router;\n }\n let $previousPage = router.$el\n .children('.page-current')\n .prevAll('.page-previous:not(.page-master)')\n .eq(0);\n\n let skipMaster;\n if (router.params.masterDetailBreakpoint > 0) {\n const classes = [];\n router.$el.children('.page').each((pageEl) => {\n classes.push(pageEl.className);\n });\n\n const $previousMaster = router.$el.children('.page-current').prevAll('.page-master').eq(0);\n if ($previousMaster.length) {\n const expectedPreviousPageUrl = router.history[router.history.length - 2];\n const expectedPreviousPageRoute = router.findMatchingRoute(expectedPreviousPageUrl);\n if (\n expectedPreviousPageRoute &&\n $previousMaster[0].f7Page &&\n expectedPreviousPageRoute.route === $previousMaster[0].f7Page.route.route\n ) {\n $previousPage = $previousMaster;\n if (!navigateOptions.preload) {\n skipMaster = app.width >= router.params.masterDetailBreakpoint;\n }\n }\n }\n }\n\n if (!navigateOptions.force && $previousPage.length && !skipMaster) {\n if (\n router.params.browserHistory &&\n $previousPage[0].f7Page &&\n router.history[router.history.length - 2] !== $previousPage[0].f7Page.route.url\n ) {\n router.back(\n router.history[router.history.length - 2],\n extend(navigateOptions, { force: true }),\n );\n return router;\n }\n const previousPageRoute = $previousPage[0].f7Page.route;\n if (navigateOptions.preload && $previousPage.hasClass('stacked')) {\n loadBack(\n router,\n { el: $previousPage },\n extend(navigateOptions, {\n route: previousPageRoute,\n }),\n );\n return router;\n }\n processRouteQueue.call(\n router,\n previousPageRoute,\n router.currentRoute,\n () => {\n loadBack(\n router,\n { el: $previousPage },\n extend(navigateOptions, {\n route: previousPageRoute,\n }),\n );\n },\n () => {},\n 'backward',\n );\n\n return router;\n }\n\n // Navigate URL\n if (navigateUrl === '#') {\n navigateUrl = undefined;\n }\n if (navigateUrl && navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) {\n navigateUrl = ((router.path || '/') + navigateUrl).replace('//', '/');\n }\n if (!navigateUrl && router.history.length > 1) {\n navigateUrl = router.history[router.history.length - 2];\n }\n if (skipMaster && !navigateOptions.force && router.history[router.history.length - 3]) {\n return router.back(\n router.history[router.history.length - 3],\n extend({}, navigateOptions || {}, {\n force: true,\n animate: false,\n }),\n );\n }\n if (skipMaster && !navigateOptions.force) {\n return router;\n }\n\n // Find route to load\n route = router.findMatchingRoute(navigateUrl);\n if (!route) {\n if (navigateUrl) {\n route = {\n url: navigateUrl,\n path: navigateUrl.split('?')[0],\n query: parseUrlQuery(navigateUrl),\n route: {\n path: navigateUrl.split('?')[0],\n url: navigateUrl,\n },\n };\n }\n }\n if (!route) {\n return router;\n }\n\n if (route.route.redirect) {\n return redirect.call(router, 'backward', route, navigateOptions);\n }\n\n const options = {};\n if (route.route.options) {\n extend(options, route.route.options, navigateOptions);\n } else {\n extend(options, navigateOptions);\n }\n options.route = route;\n\n let backForceLoaded;\n if (options.force && router.params.stackPages) {\n router.$el.children('.page-previous.stacked').each((pageEl) => {\n if (pageEl.f7Page && pageEl.f7Page.route && pageEl.f7Page.route.url === route.url) {\n backForceLoaded = true;\n loadBack(router, { el: pageEl }, options);\n }\n });\n if (backForceLoaded) {\n return router;\n }\n }\n function resolve() {\n let routerLoaded = false;\n if (route.route.keepAlive && route.route.keepAliveData) {\n loadBack(router, { el: route.route.keepAliveData.pageEl }, options);\n routerLoaded = true;\n }\n 'url content component pageName el componentUrl'.split(' ').forEach((pageLoadProp) => {\n if (route.route[pageLoadProp] && !routerLoaded) {\n routerLoaded = true;\n loadBack(router, { [pageLoadProp]: route.route[pageLoadProp] }, options);\n }\n });\n if (routerLoaded) return;\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n router.allowPageChange = false;\n loadBack(router, resolveParams, extend(options, resolveOptions), true);\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (route.route.async) {\n router.allowPageChange = false;\n route.route.async.call(router, {\n router,\n to: route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction: 'backward',\n app,\n });\n }\n if (route.route.asyncComponent) {\n asyncComponent(router, route.route.asyncComponent, asyncResolve, asyncReject);\n }\n }\n function reject() {\n router.allowPageChange = true;\n }\n\n if (options.preload) {\n resolve();\n } else {\n processRouteQueue.call(\n router,\n route,\n router.currentRoute,\n () => {\n if (route.route.modules) {\n app\n .loadModules(\n Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules],\n )\n .then(() => {\n resolve();\n })\n .catch(() => {\n reject();\n });\n } else {\n resolve();\n }\n },\n () => {\n reject();\n },\n 'backward',\n );\n }\n\n // Return Router\n return router;\n}\nexport { back };\n","import { getWindow, getDocument } from 'ssr-window';\nimport { pathToRegexp, compile } from 'path-to-regexp';\nimport $ from '../../shared/dom7.js';\nimport Framework7Class from '../../shared/class.js';\nimport {\n extend,\n nextFrame,\n parseUrlQuery,\n serializeObject,\n now,\n eventNameToColonCase,\n} from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport SwipeBack from './swipe-back.js';\n\nimport { refreshPage, navigate } from './navigate.js';\nimport { tabLoad, tabRemove } from './tab.js';\nimport { modalLoad, modalRemove } from './modal.js';\nimport { back } from './back.js';\nimport { clearPreviousHistory } from './clear-previous-history.js';\nimport appRouterCheck from './app-router-check.js';\n\nclass Router extends Framework7Class {\n constructor(app, view) {\n super({}, [typeof view === 'undefined' ? app : view]);\n const router = this;\n\n // Is App Router\n router.isAppRouter = typeof view === 'undefined';\n\n if (router.isAppRouter) {\n // App Router\n extend(false, router, {\n app,\n params: app.params.view,\n routes: app.routes || [],\n cache: app.cache,\n });\n } else {\n // View Router\n extend(false, router, {\n app,\n view,\n viewId: view.id,\n id: view.params.routerId,\n params: view.params,\n routes: view.routes,\n history: view.history,\n scrollHistory: view.scrollHistory,\n cache: app.cache,\n dynamicNavbar: app.theme === 'ios' && view.params.iosDynamicNavbar,\n initialPages: [],\n initialNavbars: [],\n });\n }\n\n // Install Modules\n router.useModules();\n\n // AllowPageChage\n router.allowPageChange = true;\n\n // Current Route\n let currentRoute = {};\n let previousRoute = {};\n Object.defineProperty(router, 'currentRoute', {\n enumerable: true,\n configurable: true,\n set(newRoute = {}) {\n previousRoute = extend({}, currentRoute);\n currentRoute = newRoute;\n if (!currentRoute) return;\n router.url = currentRoute.url;\n router.emit('routeChange', newRoute, previousRoute, router);\n },\n get() {\n return currentRoute;\n },\n });\n Object.defineProperty(router, 'previousRoute', {\n enumerable: true,\n configurable: true,\n get() {\n return previousRoute;\n },\n set(newRoute) {\n previousRoute = newRoute;\n },\n });\n\n return router;\n }\n\n mount() {\n const router = this;\n const view = router.view;\n const document = getDocument();\n\n extend(false, router, {\n tempDom: document.createElement('div'),\n $el: view.$el,\n el: view.el,\n $navbarsEl: view.$navbarsEl,\n navbarsEl: view.navbarsEl,\n });\n\n router.emit('local::mount routerMount', router);\n }\n\n animatableNavElements($newNavbarEl, $oldNavbarEl, toLarge, fromLarge, direction) {\n const router = this;\n const dynamicNavbar = router.dynamicNavbar;\n const animateIcon = router.params.iosAnimateNavbarBackIcon;\n\n let newNavEls;\n let oldNavEls;\n function animatableNavEl($el, $navbarInner) {\n const isSliding = $el.hasClass('sliding') || $navbarInner.hasClass('sliding');\n const isSubnavbar = $el.hasClass('subnavbar');\n const needsOpacityTransition = isSliding ? !isSubnavbar : true;\n const $iconEl = $el.find('.back .icon');\n let isIconLabel;\n if (\n isSliding &&\n animateIcon &&\n $el.hasClass('left') &&\n $iconEl.length > 0 &&\n $iconEl.next('span').length\n ) {\n $el = $iconEl.next('span'); // eslint-disable-line\n isIconLabel = true;\n }\n return {\n $el,\n isIconLabel,\n leftOffset: $el[0].f7NavbarLeftOffset,\n rightOffset: $el[0].f7NavbarRightOffset,\n isSliding,\n isSubnavbar,\n needsOpacityTransition,\n };\n }\n if (dynamicNavbar) {\n newNavEls = [];\n oldNavEls = [];\n $newNavbarEl\n .children('.navbar-inner')\n .children('.left, .right, .title, .subnavbar')\n .each((navEl) => {\n const $navEl = $(navEl);\n if ($navEl.hasClass('left') && fromLarge && direction === 'forward') return;\n if ($navEl.hasClass('title') && toLarge) return;\n newNavEls.push(animatableNavEl($navEl, $newNavbarEl.children('.navbar-inner')));\n });\n if (\n !(\n $oldNavbarEl.hasClass('navbar-master') &&\n router.params.masterDetailBreakpoint > 0 &&\n router.app.width >= router.params.masterDetailBreakpoint\n )\n ) {\n $oldNavbarEl\n .children('.navbar-inner')\n .children('.left, .right, .title, .subnavbar')\n .each((navEl) => {\n const $navEl = $(navEl);\n if ($navEl.hasClass('left') && toLarge && !fromLarge && direction === 'forward') return;\n if ($navEl.hasClass('left') && toLarge && direction === 'backward') return;\n if ($navEl.hasClass('title') && fromLarge) {\n return;\n }\n oldNavEls.push(animatableNavEl($navEl, $oldNavbarEl.children('.navbar-inner')));\n });\n }\n [oldNavEls, newNavEls].forEach((navEls) => {\n navEls.forEach((navEl) => {\n const n = navEl;\n const { isSliding, $el } = navEl;\n const otherEls = navEls === oldNavEls ? newNavEls : oldNavEls;\n if (!(isSliding && $el.hasClass('title') && otherEls)) return;\n otherEls.forEach((otherNavEl) => {\n if (otherNavEl.isIconLabel) {\n const iconTextEl = otherNavEl.$el[0];\n n.leftOffset += iconTextEl ? iconTextEl.offsetLeft || 0 : 0;\n }\n });\n });\n });\n }\n\n return { newNavEls, oldNavEls };\n }\n\n animate($oldPageEl, $newPageEl, $oldNavbarEl, $newNavbarEl, direction, transition, callback) {\n const router = this;\n if (router.params.animateCustom) {\n router.params.animateCustom.apply(router, [\n $oldPageEl,\n $newPageEl,\n $oldNavbarEl,\n $newNavbarEl,\n direction,\n callback,\n ]);\n return;\n }\n const dynamicNavbar = router.dynamicNavbar;\n const ios = router.app.theme === 'ios';\n if (transition) {\n const routerCustomTransitionClass = `router-transition-custom router-transition-${transition}-${direction}`;\n // Animate\n const onCustomTransitionDone = () => {\n router.$el.removeClass(routerCustomTransitionClass);\n if (dynamicNavbar && router.$navbarsEl.length) {\n if ($newNavbarEl) {\n router.$navbarsEl.prepend($newNavbarEl);\n }\n if ($oldNavbarEl) {\n router.$navbarsEl.prepend($oldNavbarEl);\n }\n }\n if (callback) callback();\n };\n\n (direction === 'forward' ? $newPageEl : $oldPageEl).animationEnd(onCustomTransitionDone);\n if (dynamicNavbar) {\n if ($newNavbarEl && $newPageEl) {\n router.setNavbarPosition($newNavbarEl, '');\n $newNavbarEl.removeClass('navbar-next navbar-previous navbar-current');\n $newPageEl.prepend($newNavbarEl);\n }\n if ($oldNavbarEl && $oldPageEl) {\n router.setNavbarPosition($oldNavbarEl, '');\n $oldNavbarEl.removeClass('navbar-next navbar-previous navbar-current');\n $oldPageEl.prepend($oldNavbarEl);\n }\n }\n\n router.$el.addClass(routerCustomTransitionClass);\n return;\n }\n\n // Router Animation class\n const routerTransitionClass = `router-transition-${direction} router-transition`;\n\n let newNavEls;\n let oldNavEls;\n\n let fromLarge;\n let toLarge;\n let toDifferent;\n\n let oldIsLarge;\n let newIsLarge;\n\n if (ios && dynamicNavbar) {\n const betweenMasterAndDetail =\n router.params.masterDetailBreakpoint > 0 &&\n router.app.width >= router.params.masterDetailBreakpoint &&\n (($oldNavbarEl.hasClass('navbar-master') &&\n $newNavbarEl.hasClass('navbar-master-detail')) ||\n ($oldNavbarEl.hasClass('navbar-master-detail') &&\n $newNavbarEl.hasClass('navbar-master')));\n if (!betweenMasterAndDetail) {\n oldIsLarge = $oldNavbarEl && $oldNavbarEl.hasClass('navbar-large');\n newIsLarge = $newNavbarEl && $newNavbarEl.hasClass('navbar-large');\n fromLarge = oldIsLarge && !$oldNavbarEl.hasClass('navbar-large-collapsed');\n toLarge = newIsLarge && !$newNavbarEl.hasClass('navbar-large-collapsed');\n toDifferent = (fromLarge && !toLarge) || (toLarge && !fromLarge);\n }\n const navEls = router.animatableNavElements(\n $newNavbarEl,\n $oldNavbarEl,\n toLarge,\n fromLarge,\n direction,\n );\n newNavEls = navEls.newNavEls;\n oldNavEls = navEls.oldNavEls;\n }\n\n function animateNavbars(progress) {\n if (!(ios && dynamicNavbar)) return;\n if (progress === 1) {\n if (toLarge) {\n $newNavbarEl.addClass('router-navbar-transition-to-large');\n $oldNavbarEl.addClass('router-navbar-transition-to-large');\n }\n if (fromLarge) {\n $newNavbarEl.addClass('router-navbar-transition-from-large');\n $oldNavbarEl.addClass('router-navbar-transition-from-large');\n }\n }\n newNavEls.forEach((navEl) => {\n const $el = navEl.$el;\n const offset = direction === 'forward' ? navEl.rightOffset : navEl.leftOffset;\n if (navEl.isSliding) {\n if (navEl.isSubnavbar && newIsLarge) {\n // prettier-ignore\n $el[0].style.setProperty(\n 'transform',\n `translate3d(${offset * (1 - progress)}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`,\n 'important',\n );\n } else {\n $el.transform(`translate3d(${offset * (1 - progress)}px,0,0)`);\n }\n }\n });\n oldNavEls.forEach((navEl) => {\n const $el = navEl.$el;\n const offset = direction === 'forward' ? navEl.leftOffset : navEl.rightOffset;\n if (navEl.isSliding) {\n if (navEl.isSubnavbar && oldIsLarge) {\n $el.transform(\n `translate3d(${\n offset * progress\n }px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`,\n );\n } else {\n $el.transform(`translate3d(${offset * progress}px,0,0)`);\n }\n }\n });\n }\n\n // AnimationEnd Callback\n function onDone() {\n if (router.dynamicNavbar) {\n if ($newNavbarEl) {\n $newNavbarEl.removeClass(\n 'router-navbar-transition-to-large router-navbar-transition-from-large',\n );\n $newNavbarEl.addClass('navbar-no-title-large-transition');\n nextFrame(() => {\n $newNavbarEl.removeClass('navbar-no-title-large-transition');\n });\n }\n if ($oldNavbarEl) {\n $oldNavbarEl.removeClass(\n 'router-navbar-transition-to-large router-navbar-transition-from-large',\n );\n }\n if (\n $newNavbarEl.hasClass('sliding') ||\n $newNavbarEl.children('.navbar-inner.sliding').length\n ) {\n $newNavbarEl.find('.title, .left, .right, .left .icon, .subnavbar').transform('');\n } else {\n $newNavbarEl.find('.sliding').transform('');\n }\n if (\n $oldNavbarEl.hasClass('sliding') ||\n $oldNavbarEl.children('.navbar-inner.sliding').length\n ) {\n $oldNavbarEl.find('.title, .left, .right, .left .icon, .subnavbar').transform('');\n } else {\n $oldNavbarEl.find('.sliding').transform('');\n }\n }\n router.$el.removeClass(routerTransitionClass);\n if (callback) callback();\n }\n\n (direction === 'forward' ? $newPageEl : $oldPageEl).animationEnd(() => {\n onDone();\n });\n\n // Animate\n if (dynamicNavbar) {\n // Prepare Navbars\n animateNavbars(0);\n nextFrame(() => {\n // Add class, start animation\n router.$el.addClass(routerTransitionClass);\n if (toDifferent) {\n // eslint-disable-next-line\n router.el._clientLeft = router.el.clientLeft;\n }\n animateNavbars(1);\n });\n } else {\n // Add class, start animation\n router.$el.addClass(routerTransitionClass);\n }\n }\n\n removeModal(modalEl) {\n const router = this;\n router.removeEl(modalEl);\n }\n // eslint-disable-next-line\n removeTabContent(tabEl) {\n const $tabEl = $(tabEl);\n $tabEl.html('');\n }\n\n removeNavbar(el) {\n const router = this;\n router.removeEl(el);\n }\n\n removePage(el) {\n const $el = $(el);\n const f7Page = $el && $el[0] && $el[0].f7Page;\n const router = this;\n if (f7Page && f7Page.route && f7Page.route.route && f7Page.route.route.keepAlive) {\n $el.remove();\n return;\n }\n router.removeEl(el);\n }\n\n removeEl(el) {\n if (!el) return;\n const router = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.find('.tab').each((tabEl) => {\n $(tabEl)\n .children()\n .each((tabChild) => {\n if (tabChild.f7Component) {\n $(tabChild).trigger('tab:beforeremove');\n tabChild.f7Component.destroy();\n }\n });\n });\n if ($el[0].f7Component && $el[0].f7Component.destroy) {\n $el[0].f7Component.destroy();\n }\n if (!router.params.removeElements) {\n return;\n }\n if (router.params.removeElementsWithTimeout) {\n setTimeout(() => {\n $el.remove();\n }, router.params.removeElementsTimeout);\n } else {\n $el.remove();\n }\n }\n\n getPageEl(content) {\n const router = this;\n if (typeof content === 'string') {\n router.tempDom.innerHTML = content;\n } else {\n if ($(content).hasClass('page')) {\n return content;\n }\n router.tempDom.innerHTML = '';\n $(router.tempDom).append(content);\n }\n\n return router.findElement('.page', router.tempDom);\n }\n\n findElement(stringSelector, container, notStacked) {\n const router = this;\n const view = router.view;\n const app = router.app;\n\n // Modals Selector\n const modalsSelector =\n '.popup, .dialog, .popover, .actions-modal, .sheet-modal, .login-screen, .page';\n\n const $container = $(container);\n let selector = stringSelector;\n if (notStacked) selector += ':not(.stacked)';\n\n let found = $container\n .find(selector)\n .filter((el) => $(el).parents(modalsSelector).length === 0);\n\n if (found.length > 1) {\n if (typeof view.selector === 'string') {\n // Search in related view\n found = $container.find(`${view.selector} ${selector}`);\n }\n if (found.length > 1) {\n // Search in main view\n found = $container.find(`.${app.params.viewMainClass} ${selector}`);\n }\n }\n if (found.length === 1) return found;\n\n // Try to find not stacked\n if (!notStacked) found = router.findElement(selector, $container, true);\n if (found && found.length === 1) return found;\n if (found && found.length > 1) return $(found[0]);\n return undefined;\n }\n\n flattenRoutes(routes = this.routes) {\n const router = this;\n let flattenedRoutes = [];\n routes.forEach((route) => {\n let hasTabRoutes = false;\n if ('tabs' in route && route.tabs) {\n const mergedPathsRoutes = route.tabs.map((tabRoute) => {\n const tRoute = extend({}, route, {\n path: `${route.path}/${tabRoute.path}`.replace('///', '/').replace('//', '/'),\n parentPath: route.path,\n tab: tabRoute,\n });\n delete tRoute.tabs;\n delete tRoute.routes;\n return tRoute;\n });\n hasTabRoutes = true;\n flattenedRoutes = flattenedRoutes.concat(router.flattenRoutes(mergedPathsRoutes));\n }\n if ('detailRoutes' in route) {\n const mergedPathsRoutes = route.detailRoutes.map((detailRoute) => {\n const dRoute = extend({}, detailRoute);\n dRoute.masterRoute = route;\n dRoute.masterRoutePath = route.path;\n return dRoute;\n });\n flattenedRoutes = flattenedRoutes.concat(route, router.flattenRoutes(mergedPathsRoutes));\n }\n if ('routes' in route) {\n const mergedPathsRoutes = route.routes.map((childRoute) => {\n const cRoute = extend({}, childRoute);\n cRoute.path = `${route.path}/${cRoute.path}`.replace('///', '/').replace('//', '/');\n return cRoute;\n });\n if (hasTabRoutes) {\n flattenedRoutes = flattenedRoutes.concat(router.flattenRoutes(mergedPathsRoutes));\n } else {\n flattenedRoutes = flattenedRoutes.concat(route, router.flattenRoutes(mergedPathsRoutes));\n }\n }\n if (!('routes' in route) && !('tabs' in route && route.tabs) && !('detailRoutes' in route)) {\n flattenedRoutes.push(route);\n }\n });\n return flattenedRoutes;\n }\n\n // eslint-disable-next-line\n parseRouteUrl(url) {\n if (!url) return {};\n const query = parseUrlQuery(url);\n const hash = url.split('#')[1];\n const params = {};\n const path = url.split('#')[0].split('?')[0];\n return {\n query,\n hash,\n params,\n url,\n path,\n };\n }\n\n generateUrl(parameters = {}) {\n if (typeof parameters === 'string') {\n return parameters;\n }\n const { name, path, params, query } = parameters;\n if (!name && !path) {\n throw new Error('Framework7: \"name\" or \"path\" parameter is required');\n }\n const router = this;\n const route = name ? router.findRouteByKey('name', name) : router.findRouteByKey('path', path);\n\n if (!route) {\n if (name) {\n throw new Error(`Framework7: route with name \"${name}\" not found`);\n } else {\n throw new Error(`Framework7: route with path \"${path}\" not found`);\n }\n }\n const url = router.constructRouteUrl(route, { params, query });\n if (!url) {\n throw new Error(`Framework7: can't construct URL for route with name \"${name}\"`);\n }\n return url;\n }\n\n // eslint-disable-next-line\n constructRouteUrl(route, { params, query } = {}) {\n const { path } = route;\n const toUrl = compile(path);\n let url;\n try {\n url = toUrl(params || {});\n } catch (error) {\n throw new Error(\n `Framework7: error constructing route URL from passed params:\\nRoute: ${path}\\n${error.toString()}`,\n );\n }\n\n if (query) {\n if (typeof query === 'string') url += `?${query}`;\n else if (Object.keys(query).length) url += `?${serializeObject(query)}`;\n }\n\n return url;\n }\n\n findTabRouteUrl(tabEl) {\n const router = this;\n const $tabEl = $(tabEl);\n const parentPath = router.currentRoute.route.parentPath;\n const tabId = $tabEl.attr('id');\n const flattenedRoutes = router.flattenRoutes(router.routes);\n let foundTabRouteUrl;\n flattenedRoutes.forEach((route) => {\n if (route.parentPath === parentPath && route.tab && route.tab.id === tabId) {\n if (router.currentRoute.params && Object.keys(router.currentRoute.params).length > 0) {\n foundTabRouteUrl = router.constructRouteUrl(route, {\n params: router.currentRoute.params,\n query: router.currentRoute.query,\n });\n } else {\n foundTabRouteUrl = route.path;\n }\n }\n });\n return foundTabRouteUrl;\n }\n\n findRouteByKey(key, value) {\n const router = this;\n const routes = router.routes;\n const flattenedRoutes = router.flattenRoutes(routes);\n let matchingRoute;\n\n flattenedRoutes.forEach((route) => {\n if (matchingRoute) return;\n if (route[key] === value) {\n matchingRoute = route;\n }\n });\n return matchingRoute;\n }\n\n findMatchingRoute(url) {\n if (!url) return undefined;\n const router = this;\n const routes = router.routes;\n const flattenedRoutes = router.flattenRoutes(routes);\n const { path, query, hash, params } = router.parseRouteUrl(url);\n let matchingRoute;\n flattenedRoutes.forEach((route) => {\n if (matchingRoute) return;\n const keys = [];\n\n const pathsToMatch = [route.path];\n if (route.alias) {\n if (typeof route.alias === 'string') pathsToMatch.push(route.alias);\n else if (Array.isArray(route.alias)) {\n route.alias.forEach((aliasPath) => {\n pathsToMatch.push(aliasPath);\n });\n }\n }\n\n let matched;\n pathsToMatch.forEach((pathToMatch) => {\n if (matched) return;\n matched = pathToRegexp(pathToMatch, keys).exec(path);\n });\n\n if (matched) {\n keys.forEach((keyObj, index) => {\n if (typeof keyObj.name === 'number') return;\n const paramValue = matched[index + 1];\n if (typeof paramValue === 'undefined' || paramValue === null) {\n params[keyObj.name] = paramValue;\n } else {\n params[keyObj.name] = decodeURIComponent(paramValue);\n }\n });\n\n let parentPath;\n if (route.parentPath) {\n parentPath = path\n .split('/')\n .slice(0, route.parentPath.split('/').length - 1)\n .join('/');\n }\n\n matchingRoute = {\n query,\n hash,\n params,\n url,\n path,\n parentPath,\n route,\n name: route.name,\n };\n }\n });\n return matchingRoute;\n }\n\n // eslint-disable-next-line\n replaceRequestUrlParams(url = '', options = {}) {\n let compiledUrl = url;\n if (\n typeof compiledUrl === 'string' &&\n compiledUrl.indexOf('{{') >= 0 &&\n options &&\n options.route &&\n options.route.params &&\n Object.keys(options.route.params).length\n ) {\n Object.keys(options.route.params).forEach((paramName) => {\n const regExp = new RegExp(`{{${paramName}}}`, 'g');\n compiledUrl = compiledUrl.replace(regExp, options.route.params[paramName] || '');\n });\n }\n return compiledUrl;\n }\n\n removeFromXhrCache(url) {\n const router = this;\n const xhrCache = router.cache.xhr;\n let index = false;\n for (let i = 0; i < xhrCache.length; i += 1) {\n if (xhrCache[i].url === url) index = i;\n }\n if (index !== false) xhrCache.splice(index, 1);\n }\n\n xhrRequest(requestUrl, options) {\n const router = this;\n const params = router.params;\n const { ignoreCache } = options;\n let url = requestUrl;\n\n let hasQuery = url.indexOf('?') >= 0;\n if (\n params.passRouteQueryToRequest &&\n options &&\n options.route &&\n options.route.query &&\n Object.keys(options.route.query).length\n ) {\n url += `${hasQuery ? '&' : '?'}${serializeObject(options.route.query)}`;\n hasQuery = true;\n }\n\n if (\n params.passRouteParamsToRequest &&\n options &&\n options.route &&\n options.route.params &&\n Object.keys(options.route.params).length\n ) {\n url += `${hasQuery ? '&' : '?'}${serializeObject(options.route.params)}`;\n hasQuery = true;\n }\n\n if (url.indexOf('{{') >= 0) {\n url = router.replaceRequestUrlParams(url, options);\n }\n // should we ignore get params or not\n if (params.xhrCacheIgnoreGetParameters && url.indexOf('?') >= 0) {\n url = url.split('?')[0];\n }\n return new Promise((resolve, reject) => {\n if (\n params.xhrCache &&\n !ignoreCache &&\n url.indexOf('nocache') < 0 &&\n params.xhrCacheIgnore.indexOf(url) < 0\n ) {\n for (let i = 0; i < router.cache.xhr.length; i += 1) {\n const cachedUrl = router.cache.xhr[i];\n if (cachedUrl.url === url) {\n // Check expiration\n if (now() - cachedUrl.time < params.xhrCacheDuration) {\n // Load from cache\n resolve(cachedUrl.content);\n return;\n }\n }\n }\n }\n router.xhrAbortController = router.app.request.abortController();\n router.app.request({\n abortController: router.xhrAbortController,\n url,\n method: 'GET',\n beforeSend(xhr) {\n router.emit('routerAjaxStart', xhr, options);\n },\n complete(xhr, status) {\n router.emit('routerAjaxComplete', xhr);\n if (\n (status !== 'error' && status !== 'timeout' && xhr.status >= 200 && xhr.status < 300) ||\n xhr.status === 0\n ) {\n if (params.xhrCache && xhr.responseText !== '') {\n router.removeFromXhrCache(url);\n router.cache.xhr.push({\n url,\n time: now(),\n content: xhr.responseText,\n });\n }\n router.emit('routerAjaxSuccess', xhr, options);\n resolve(xhr.responseText);\n } else {\n router.emit('routerAjaxError', xhr, options);\n reject(xhr);\n }\n },\n error(xhr) {\n router.emit('routerAjaxError', xhr, options);\n reject(xhr);\n },\n });\n });\n }\n\n setNavbarPosition($el, position, ariaHidden) {\n const router = this;\n $el.removeClass('navbar-previous navbar-current navbar-next');\n if (position) {\n $el.addClass(`navbar-${position}`);\n }\n\n if (ariaHidden === false) {\n $el.removeAttr('aria-hidden');\n } else if (ariaHidden === true) {\n $el.attr('aria-hidden', 'true');\n }\n $el.trigger('navbar:position', { position });\n router.emit('navbarPosition', $el[0], position);\n }\n\n setPagePosition($el, position, ariaHidden) {\n const router = this;\n $el.removeClass('page-previous page-current page-next');\n $el.addClass(`page-${position}`);\n if (ariaHidden === false) {\n $el.removeAttr('aria-hidden');\n } else if (ariaHidden === true) {\n $el.attr('aria-hidden', 'true');\n }\n $el.trigger('page:position', { position });\n router.emit('pagePosition', $el[0], position);\n }\n\n // Remove theme elements\n removeThemeElements(el) {\n const router = this;\n const theme = router.app.theme;\n let toRemove;\n if (theme === 'ios') {\n toRemove = '.md-only, .aurora-only, .if-md, .if-aurora, .if-not-ios, .not-ios';\n } else if (theme === 'md') {\n toRemove = '.ios-only, .aurora-only, .if-ios, .if-aurora, .if-not-md, .not-md';\n } else if (theme === 'aurora') {\n toRemove = '.ios-only, .md-only, .if-ios, .if-md, .if-not-aurora, .not-aurora';\n }\n $(el).find(toRemove).remove();\n }\n\n getPageData(pageEl, navbarEl, from, to, route = {}, pageFromEl) {\n const router = this;\n const $pageEl = $(pageEl).eq(0);\n const $navbarEl = $(navbarEl).eq(0);\n const currentPage = $pageEl[0].f7Page || {};\n let direction;\n let pageFrom;\n if ((from === 'next' && to === 'current') || (from === 'current' && to === 'previous'))\n direction = 'forward';\n if ((from === 'current' && to === 'next') || (from === 'previous' && to === 'current'))\n direction = 'backward';\n if (currentPage && !currentPage.fromPage) {\n const $pageFromEl = $(pageFromEl);\n if ($pageFromEl.length) {\n pageFrom = $pageFromEl[0].f7Page;\n }\n }\n pageFrom = currentPage.pageFrom || pageFrom;\n if (pageFrom && pageFrom.pageFrom) {\n pageFrom.pageFrom = null;\n }\n const page = {\n app: router.app,\n view: router.view,\n router,\n $el: $pageEl,\n el: $pageEl[0],\n $pageEl,\n pageEl: $pageEl[0],\n $navbarEl,\n navbarEl: $navbarEl[0],\n name: $pageEl.attr('data-name'),\n position: from,\n from,\n to,\n direction,\n route: currentPage.route ? currentPage.route : route,\n pageFrom,\n };\n\n $pageEl[0].f7Page = page;\n return page;\n }\n\n // Callbacks\n pageCallback(callback, pageEl, navbarEl, from, to, options = {}, pageFromEl) {\n if (!pageEl) return;\n const router = this;\n const $pageEl = $(pageEl);\n if (!$pageEl.length) return;\n const $navbarEl = $(navbarEl);\n const { route } = options;\n const restoreScrollTopOnBack =\n router.params.restoreScrollTopOnBack &&\n !(\n router.params.masterDetailBreakpoint > 0 &&\n $pageEl.hasClass('page-master') &&\n router.app.width >= router.params.masterDetailBreakpoint\n );\n const keepAlive =\n $pageEl[0].f7Page &&\n $pageEl[0].f7Page.route &&\n $pageEl[0].f7Page.route.route &&\n $pageEl[0].f7Page.route.route.keepAlive;\n\n if (callback === 'beforeRemove' && keepAlive) {\n callback = 'beforeUnmount'; // eslint-disable-line\n }\n\n const camelName = `page${callback[0].toUpperCase() + callback.slice(1, callback.length)}`;\n const colonName = `page:${callback.toLowerCase()}`;\n\n let page = {};\n if (callback === 'beforeRemove' && $pageEl[0].f7Page) {\n page = extend($pageEl[0].f7Page, { from, to, position: from });\n } else {\n page = router.getPageData($pageEl[0], $navbarEl[0], from, to, route, pageFromEl);\n }\n page.swipeBack = !!options.swipeBack;\n\n const { on = {}, once = {} } = options.route ? options.route.route : {};\n if (options.on) {\n extend(on, options.on);\n }\n if (options.once) {\n extend(once, options.once);\n }\n\n function attachEvents() {\n if ($pageEl[0].f7RouteEventsAttached) return;\n $pageEl[0].f7RouteEventsAttached = true;\n if (on && Object.keys(on).length > 0) {\n $pageEl[0].f7RouteEventsOn = on;\n Object.keys(on).forEach((eventName) => {\n on[eventName] = on[eventName].bind(router);\n $pageEl.on(eventNameToColonCase(eventName), on[eventName]);\n });\n }\n if (once && Object.keys(once).length > 0) {\n $pageEl[0].f7RouteEventsOnce = once;\n Object.keys(once).forEach((eventName) => {\n once[eventName] = once[eventName].bind(router);\n $pageEl.once(eventNameToColonCase(eventName), once[eventName]);\n });\n }\n }\n\n function detachEvents() {\n if (!$pageEl[0].f7RouteEventsAttached) return;\n if ($pageEl[0].f7RouteEventsOn) {\n Object.keys($pageEl[0].f7RouteEventsOn).forEach((eventName) => {\n $pageEl.off(eventNameToColonCase(eventName), $pageEl[0].f7RouteEventsOn[eventName]);\n });\n }\n if ($pageEl[0].f7RouteEventsOnce) {\n Object.keys($pageEl[0].f7RouteEventsOnce).forEach((eventName) => {\n $pageEl.off(eventNameToColonCase(eventName), $pageEl[0].f7RouteEventsOnce[eventName]);\n });\n }\n $pageEl[0].f7RouteEventsAttached = null;\n $pageEl[0].f7RouteEventsOn = null;\n $pageEl[0].f7RouteEventsOnce = null;\n delete $pageEl[0].f7RouteEventsAttached;\n delete $pageEl[0].f7RouteEventsOn;\n delete $pageEl[0].f7RouteEventsOnce;\n }\n\n if (callback === 'mounted') {\n attachEvents();\n }\n if (callback === 'init') {\n if (\n restoreScrollTopOnBack &&\n (from === 'previous' || !from) &&\n to === 'current' &&\n router.scrollHistory[page.route.url] &&\n !$pageEl.hasClass('no-restore-scroll')\n ) {\n let $pageContent = $pageEl.find('.page-content');\n if ($pageContent.length > 0) {\n // eslint-disable-next-line\n $pageContent = $pageContent.filter((pageContentEl) => {\n return (\n $(pageContentEl).parents('.tab:not(.tab-active)').length === 0 &&\n !$(pageContentEl).is('.tab:not(.tab-active)')\n );\n });\n }\n $pageContent.scrollTop(router.scrollHistory[page.route.url]);\n }\n attachEvents();\n if ($pageEl[0].f7PageInitialized) {\n $pageEl.trigger('page:reinit', page);\n router.emit('pageReinit', page);\n return;\n }\n $pageEl[0].f7PageInitialized = true;\n }\n if (\n restoreScrollTopOnBack &&\n callback === 'beforeOut' &&\n from === 'current' &&\n to === 'previous'\n ) {\n // Save scroll position\n let $pageContent = $pageEl.find('.page-content');\n if ($pageContent.length > 0) {\n // eslint-disable-next-line\n $pageContent = $pageContent.filter((pageContentEl) => {\n return (\n $(pageContentEl).parents('.tab:not(.tab-active)').length === 0 &&\n !$(pageContentEl).is('.tab:not(.tab-active)')\n );\n });\n }\n router.scrollHistory[page.route.url] = $pageContent.scrollTop();\n }\n if (restoreScrollTopOnBack && callback === 'beforeOut' && from === 'current' && to === 'next') {\n // Delete scroll position\n delete router.scrollHistory[page.route.url];\n }\n\n $pageEl.trigger(colonName, page);\n router.emit(camelName, page);\n\n if (callback === 'beforeRemove' || callback === 'beforeUnmount') {\n detachEvents();\n if (!keepAlive) {\n if ($pageEl[0].f7Page && $pageEl[0].f7Page.navbarEl) {\n delete $pageEl[0].f7Page.navbarEl.f7Page;\n }\n $pageEl[0].f7Page = null;\n }\n }\n }\n\n saveHistory() {\n const router = this;\n const window = getWindow();\n router.view.history = router.history;\n if (\n router.params.browserHistory &&\n router.params.browserHistoryStoreHistory &&\n window.localStorage\n ) {\n window.localStorage[`f7router-${router.view.id}-history`] = JSON.stringify(router.history);\n }\n }\n\n restoreHistory() {\n const router = this;\n const window = getWindow();\n if (\n router.params.browserHistory &&\n router.params.browserHistoryStoreHistory &&\n window.localStorage &&\n window.localStorage[`f7router-${router.view.id}-history`]\n ) {\n router.history = JSON.parse(window.localStorage[`f7router-${router.view.id}-history`]);\n router.view.history = router.history;\n }\n }\n\n clearHistory() {\n const router = this;\n router.history = [];\n if (router.view) router.view.history = [];\n router.saveHistory();\n }\n\n updateCurrentUrl(newUrl) {\n const router = this;\n appRouterCheck(router, 'updateCurrentUrl');\n // Update history\n if (router.history.length) {\n router.history[router.history.length - 1] = newUrl;\n } else {\n router.history.push(newUrl);\n }\n\n // Update current route params\n const { query, hash, params, url, path } = router.parseRouteUrl(newUrl);\n if (router.currentRoute) {\n extend(router.currentRoute, {\n query,\n hash,\n params,\n url,\n path,\n });\n }\n\n if (router.params.browserHistory) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(\n router.view.id,\n {\n url: newUrl,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + newUrl,\n );\n }\n\n // Save History\n router.saveHistory();\n\n router.emit('routeUrlUpdate', router.currentRoute, router);\n }\n\n getInitialUrl() {\n const router = this;\n if (router.initialUrl) {\n return {\n initialUrl: router.initialUrl,\n historyRestored: router.historyRestored,\n };\n }\n const { app, view } = router;\n const document = getDocument();\n const window = getWindow();\n\n const location =\n app.params.url && typeof app.params.url === 'string' && typeof URL !== 'undefined'\n ? new URL(app.params.url)\n : document.location;\n\n let initialUrl = router.params.url;\n let documentUrl = location.href.split(location.origin)[1];\n let historyRestored;\n const { browserHistory, browserHistoryOnLoad, browserHistorySeparator } = router.params;\n let { browserHistoryRoot } = router.params;\n if (\n (window.cordova || (window.Capacitor && window.Capacitor.isNative)) &&\n browserHistory &&\n !browserHistorySeparator &&\n !browserHistoryRoot &&\n location.pathname.indexOf('index.html')\n ) {\n // eslint-disable-next-line\n console.warn(\n 'Framework7: wrong or not complete browserHistory configuration, trying to guess browserHistoryRoot',\n );\n browserHistoryRoot = location.pathname.split('index.html')[0];\n }\n if (!browserHistory || !browserHistoryOnLoad) {\n if (!initialUrl) {\n initialUrl = documentUrl;\n }\n if (location.search && initialUrl.indexOf('?') < 0) {\n initialUrl += location.search;\n }\n if (location.hash && initialUrl.indexOf('#') < 0) {\n initialUrl += location.hash;\n }\n } else {\n if (browserHistoryRoot && documentUrl.indexOf(browserHistoryRoot) >= 0) {\n documentUrl = documentUrl.split(browserHistoryRoot)[1];\n if (documentUrl === '') documentUrl = '/';\n }\n if (browserHistorySeparator.length > 0 && documentUrl.indexOf(browserHistorySeparator) >= 0) {\n initialUrl = documentUrl.split(browserHistorySeparator)[1];\n } else {\n initialUrl = documentUrl;\n }\n router.restoreHistory();\n if (router.history.indexOf(initialUrl) >= 0) {\n router.history = router.history.slice(0, router.history.indexOf(initialUrl) + 1);\n } else if (router.params.url === initialUrl) {\n router.history = [initialUrl];\n } else if (\n History.state &&\n History.state[view.id] &&\n History.state[view.id].url === router.history[router.history.length - 1]\n ) {\n initialUrl = router.history[router.history.length - 1];\n } else {\n router.history = [documentUrl.split(browserHistorySeparator)[0] || '/', initialUrl];\n }\n if (router.history.length > 1) {\n historyRestored = true;\n } else {\n router.history = [];\n }\n router.saveHistory();\n }\n\n router.initialUrl = initialUrl;\n router.historyRestored = historyRestored;\n\n return { initialUrl, historyRestored };\n }\n\n init() {\n const router = this;\n const { app, view } = router;\n const document = getDocument();\n\n router.mount();\n\n const { initialUrl, historyRestored } = router.getInitialUrl();\n\n // Init Swipeback\n if (\n (view && router.params.iosSwipeBack && app.theme === 'ios') ||\n (view && router.params.mdSwipeBack && app.theme === 'md') ||\n (view && router.params.auroraSwipeBack && app.theme === 'aurora')\n ) {\n SwipeBack(router);\n }\n\n const {\n browserHistory,\n browserHistoryOnLoad,\n browserHistoryAnimateOnLoad,\n browserHistoryInitialMatch,\n } = router.params;\n\n let currentRoute;\n if (router.history.length > 1) {\n // Will load page\n const initUrl = browserHistoryInitialMatch ? initialUrl : router.history[0];\n currentRoute = router.findMatchingRoute(initUrl);\n if (!currentRoute) {\n currentRoute = extend(router.parseRouteUrl(initUrl), {\n route: {\n url: initUrl,\n path: initUrl.split('?')[0],\n },\n });\n }\n } else {\n // Don't load page\n currentRoute = router.findMatchingRoute(initialUrl);\n if (!currentRoute) {\n currentRoute = extend(router.parseRouteUrl(initialUrl), {\n route: {\n url: initialUrl,\n path: initialUrl.split('?')[0],\n },\n });\n }\n }\n\n if (router.params.stackPages) {\n router.$el.children('.page').each((pageEl) => {\n const $pageEl = $(pageEl);\n router.initialPages.push($pageEl[0]);\n if (router.dynamicNavbar && $pageEl.children('.navbar').length > 0) {\n router.initialNavbars.push($pageEl.children('.navbar')[0]);\n }\n });\n }\n\n if (\n router.$el.children('.page:not(.stacked)').length === 0 &&\n initialUrl &&\n router.params.loadInitialPage\n ) {\n // No pages presented in DOM, reload new page\n router.navigate(initialUrl, {\n initial: true,\n reloadCurrent: true,\n browserHistory: false,\n animate: false,\n once: {\n modalOpen() {\n if (!historyRestored) return;\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({ preload: true });\n }\n },\n pageAfterIn() {\n if (!historyRestored) return;\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({ preload: true });\n }\n },\n },\n });\n } else if (router.$el.children('.page:not(.stacked)').length) {\n // Init current DOM page\n let hasTabRoute;\n router.currentRoute = currentRoute;\n router.$el.children('.page:not(.stacked)').each((pageEl) => {\n const $pageEl = $(pageEl);\n let $navbarEl;\n router.setPagePosition($pageEl, 'current');\n if (router.dynamicNavbar) {\n $navbarEl = $pageEl.children('.navbar');\n if ($navbarEl.length > 0) {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n router.setNavbarPosition($navbarEl, 'current');\n router.$navbarsEl.append($navbarEl);\n if ($navbarEl.children('.title-large').length) {\n $navbarEl.addClass('navbar-large');\n }\n $pageEl.children('.navbar').remove();\n } else {\n router.$navbarsEl.addClass('navbar-hidden');\n if ($navbarEl.children('.title-large').length) {\n router.$navbarsEl.addClass('navbar-hidden navbar-large-hidden');\n }\n }\n }\n if (\n router.currentRoute &&\n router.currentRoute.route &&\n (router.currentRoute.route.master === true ||\n (typeof router.currentRoute.route.master === 'function' &&\n router.currentRoute.route.master(app, router))) &&\n router.params.masterDetailBreakpoint > 0\n ) {\n $pageEl.addClass('page-master');\n $pageEl.trigger('page:role', { role: 'master' });\n if ($navbarEl && $navbarEl.length) {\n $navbarEl.addClass('navbar-master');\n }\n view.checkMasterDetailBreakpoint();\n }\n const initOptions = {\n route: router.currentRoute,\n };\n if (router.currentRoute && router.currentRoute.route && router.currentRoute.route.options) {\n extend(initOptions, router.currentRoute.route.options);\n }\n router.currentPageEl = $pageEl[0];\n if (router.dynamicNavbar && $navbarEl.length) {\n router.currentNavbarEl = $navbarEl[0];\n }\n router.removeThemeElements($pageEl);\n if (router.dynamicNavbar && $navbarEl.length) {\n router.removeThemeElements($navbarEl);\n }\n if (initOptions.route.route.tab) {\n hasTabRoute = true;\n router.tabLoad(initOptions.route.route.tab, extend({}, initOptions));\n }\n router.pageCallback('init', $pageEl, $navbarEl, 'current', undefined, initOptions);\n router.pageCallback('beforeIn', $pageEl, $navbarEl, 'current', undefined, initOptions);\n router.pageCallback('afterIn', $pageEl, $navbarEl, 'current', undefined, initOptions);\n });\n if (historyRestored) {\n if (browserHistoryInitialMatch) {\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({ preload: true });\n }\n } else {\n router.navigate(initialUrl, {\n initial: true,\n browserHistory: false,\n history: false,\n animate: browserHistoryAnimateOnLoad,\n once: {\n pageAfterIn() {\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 2) {\n router.back({ preload: true });\n }\n },\n },\n });\n }\n }\n if (!historyRestored && !hasTabRoute) {\n router.history.push(initialUrl);\n router.saveHistory();\n }\n }\n if (\n initialUrl &&\n browserHistory &&\n browserHistoryOnLoad &&\n (!History.state || !History.state[view.id])\n ) {\n History.initViewState(view.id, {\n url: initialUrl,\n });\n }\n router.emit('local::init routerInit', router);\n }\n\n destroy() {\n let router = this;\n\n router.emit('local::destroy routerDestroy', router);\n\n // Delete props & methods\n Object.keys(router).forEach((routerProp) => {\n router[routerProp] = null;\n delete router[routerProp];\n });\n\n router = null;\n }\n}\n\n// Load\nRouter.prototype.navigate = navigate;\nRouter.prototype.refreshPage = refreshPage;\n// Tab\nRouter.prototype.tabLoad = tabLoad;\nRouter.prototype.tabRemove = tabRemove;\n// Modal\nRouter.prototype.modalLoad = modalLoad;\nRouter.prototype.modalRemove = modalRemove;\n// Back\nRouter.prototype.back = back;\n// Clear history\nRouter.prototype.clearPreviousHistory = clearPreviousHistory;\n\nexport default Router;\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport asyncComponent from './async-component.js';\n\nfunction tabLoad(tabRoute, loadOptions = {}) {\n const router = this;\n const options = extend(\n {\n animate: router.params.animate,\n browserHistory: true,\n history: true,\n parentPageEl: null,\n preload: false,\n on: {},\n },\n loadOptions,\n );\n\n let currentRoute;\n let previousRoute;\n if (options.route) {\n // Set Route\n if (!options.preload && options.route !== router.currentRoute) {\n previousRoute = router.previousRoute;\n router.currentRoute = options.route;\n }\n if (options.preload) {\n currentRoute = options.route;\n previousRoute = router.currentRoute;\n } else {\n currentRoute = router.currentRoute;\n if (!previousRoute) previousRoute = router.previousRoute;\n }\n\n // Update Browser History\n if (router.params.browserHistory && options.browserHistory && !options.reloadPrevious) {\n History[router.params.browserHistoryTabs](\n router.view.id,\n {\n url: options.route.url,\n },\n (router.params.browserHistoryRoot || '') +\n router.params.browserHistorySeparator +\n options.route.url,\n );\n }\n\n // Update Router History\n if (options.history) {\n router.history[Math.max(router.history.length - 1, 0)] = options.route.url;\n router.saveHistory();\n }\n }\n\n // Show Tab\n const $parentPageEl = $(options.parentPageEl || router.currentPageEl);\n let tabEl;\n if ($parentPageEl.length && $parentPageEl.find(`#${tabRoute.id}`).length) {\n tabEl = $parentPageEl.find(`#${tabRoute.id}`).eq(0);\n } else if (router.view.selector) {\n tabEl = `${router.view.selector} #${tabRoute.id}`;\n } else {\n tabEl = `#${tabRoute.id}`;\n }\n const tabShowResult = router.app.tab.show({\n tabEl,\n animate: options.animate,\n tabRoute: options.route,\n });\n\n const { $newTabEl, $oldTabEl, animated, onTabsChanged } = tabShowResult;\n\n if ($newTabEl && $newTabEl.parents('.page').length > 0 && options.route) {\n const tabParentPageData = $newTabEl.parents('.page')[0].f7Page;\n if (tabParentPageData && options.route) {\n tabParentPageData.route = options.route;\n }\n }\n\n // Tab Content Loaded\n function onTabLoaded(contentEl) {\n // Remove theme elements\n router.removeThemeElements($newTabEl);\n\n let tabEventTarget = $newTabEl;\n if (typeof contentEl !== 'string') tabEventTarget = $(contentEl);\n\n tabEventTarget.trigger('tab:init tab:mounted', tabRoute);\n router.emit('tabInit tabMounted', $newTabEl[0], tabRoute);\n\n if ($oldTabEl && $oldTabEl.length) {\n if (animated) {\n onTabsChanged(() => {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.unloadTabContent) {\n router.tabRemove($oldTabEl, $newTabEl, tabRoute);\n }\n });\n } else {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.unloadTabContent) {\n router.tabRemove($oldTabEl, $newTabEl, tabRoute);\n }\n }\n }\n }\n\n if ($newTabEl[0].f7RouterTabLoaded) {\n if (!$oldTabEl || !$oldTabEl.length) return router;\n if (animated) {\n onTabsChanged(() => {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n });\n } else {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n }\n return router;\n }\n\n // Load Tab Content\n function loadTab(loadTabParams, loadTabOptions) {\n // Load Tab Props\n const { url, content, el, component, componentUrl } = loadTabParams;\n // Component/Template Callbacks\n function resolve(contentEl) {\n router.allowPageChange = true;\n if (!contentEl) return;\n if (typeof contentEl === 'string') {\n $newTabEl.html(contentEl);\n } else {\n $newTabEl.html('');\n if (contentEl.f7Component) {\n contentEl.f7Component.mount((componentEl) => {\n $newTabEl.append(componentEl);\n });\n } else {\n $newTabEl.append(contentEl);\n }\n }\n $newTabEl[0].f7RouterTabLoaded = true;\n onTabLoaded(contentEl);\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (content) {\n resolve(content);\n } else if (el) {\n resolve(el);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.tabComponentLoader({\n tabEl: $newTabEl[0],\n component,\n componentUrl,\n options: loadTabOptions,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, loadTabOptions)\n .then((tabContent) => {\n resolve(tabContent);\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n }\n }\n\n let hasContentLoadProp;\n 'url content component el componentUrl'.split(' ').forEach((tabLoadProp) => {\n if (tabRoute[tabLoadProp]) {\n hasContentLoadProp = true;\n loadTab({ [tabLoadProp]: tabRoute[tabLoadProp] }, options);\n }\n });\n\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n loadTab(resolveParams, extend(options, resolveOptions));\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (tabRoute.async) {\n tabRoute.async.call(router, {\n router,\n to: currentRoute,\n from: previousRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n app: router.app,\n });\n } else if (tabRoute.asyncComponent) {\n asyncComponent(router, tabRoute.asyncComponent, asyncResolve, asyncReject);\n } else if (!hasContentLoadProp) {\n router.allowPageChange = true;\n }\n\n return router;\n}\nfunction tabRemove($oldTabEl, $newTabEl, tabRoute) {\n const router = this;\n\n let hasTabComponentChild;\n if ($oldTabEl[0]) {\n $oldTabEl[0].f7RouterTabLoaded = false;\n delete $oldTabEl[0].f7RouterTabLoaded;\n }\n $oldTabEl.children().each((tabChild) => {\n if (tabChild.f7Component) {\n hasTabComponentChild = true;\n $(tabChild).trigger('tab:beforeremove', tabRoute);\n tabChild.f7Component.destroy();\n }\n });\n if (!hasTabComponentChild) {\n $oldTabEl.trigger('tab:beforeremove', tabRoute);\n }\n router.emit('tabBeforeRemove', $oldTabEl[0], $newTabEl[0], tabRoute);\n router.removeTabContent($oldTabEl[0], tabRoute);\n}\n\nexport { tabLoad, tabRemove };\n","import { extend, nextTick } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport asyncComponent from './async-component.js';\n\nfunction modalLoad(modalType, route, loadOptions = {}, direction) {\n const router = this;\n const app = router.app;\n const isPanel = modalType === 'panel';\n const modalOrPanel = isPanel ? 'panel' : 'modal';\n\n const options = extend(\n {\n animate: router.params.animate,\n browserHistory: true,\n history: true,\n on: {},\n once: {},\n },\n loadOptions,\n );\n\n const modalParams = extend({}, route.route[modalType]);\n const modalRoute = route.route;\n\n const routeCallback = (modal, name) => {\n const { on, once } = options;\n let callback;\n if (name === 'open') {\n callback = on.modalOpen || once.modalOpen || on.panelOpen || once.panelOpen;\n }\n if (name === 'close') {\n callback = on.modalClose || once.modalClose || on.panelClose || once.panelClose;\n }\n if (name === 'closed') {\n callback = on.modalClosed || once.modalClosed || on.panelClosed || once.panelClosed;\n }\n if (callback) callback(modal);\n };\n\n function onModalLoaded() {\n // Create Modal\n const modal = app[modalType].create(modalParams);\n modalRoute.modalInstance = modal;\n\n const hasEl = modal.el;\n\n function closeOnSwipeBack() {\n modal.close();\n }\n modal.on(`${modalOrPanel}Open`, () => {\n if (!hasEl) {\n // Remove theme elements\n router.removeThemeElements(modal.el);\n\n // Emit events\n modal.$el.trigger(\n `${modalType.toLowerCase()}:init ${modalType.toLowerCase()}:mounted`,\n route,\n modal,\n );\n router.emit(\n `${!isPanel ? 'modalInit' : ''} ${modalType}Init ${modalType}Mounted`,\n modal.el,\n route,\n modal,\n );\n }\n router.once('swipeBackMove', closeOnSwipeBack);\n routeCallback(modal, 'open');\n });\n modal.on(`${modalOrPanel}Close`, () => {\n router.off('swipeBackMove', closeOnSwipeBack);\n if (!modal.closeByRouter) {\n router.back();\n }\n routeCallback(modal, 'close');\n });\n\n modal.on(`${modalOrPanel}Closed`, () => {\n modal.$el.trigger(`${modalType.toLowerCase()}:beforeremove`, route, modal);\n modal.emit(\n `${!isPanel ? 'modalBeforeRemove ' : ''}${modalType}BeforeRemove`,\n modal.el,\n route,\n modal,\n );\n const modalComponent = modal.el.f7Component;\n routeCallback(modal, 'closed');\n if (modalComponent) {\n modalComponent.destroy();\n }\n nextTick(() => {\n if (modalComponent || modalParams.component || modalParams.asyncComponent) {\n router.removeModal(modal.el);\n }\n modal.destroy();\n delete modal.route;\n delete modalRoute.modalInstance;\n });\n });\n\n if (options.route) {\n // Update Browser History\n if (router.params.browserHistory && options.browserHistory) {\n History.push(\n router.view.id,\n {\n url: options.route.url,\n modal: modalType,\n },\n (router.params.browserHistoryRoot || '') +\n router.params.browserHistorySeparator +\n options.route.url,\n );\n }\n\n // Set Route\n if (options.route !== router.currentRoute) {\n modal.route = extend(options.route, { modal });\n router.currentRoute = modal.route;\n }\n\n // Update Router History\n if (options.history && !options.reloadCurrent) {\n router.history.push(options.route.url);\n router.saveHistory();\n }\n }\n\n if (hasEl) {\n // Remove theme elements\n router.removeThemeElements(modal.el);\n\n // Emit events\n modal.$el.trigger(\n `${modalType.toLowerCase()}:init ${modalType.toLowerCase()}:mounted`,\n route,\n modal,\n );\n router.emit(\n `${modalOrPanel}Init ${modalType}Init ${modalType}Mounted`,\n modal.el,\n route,\n modal,\n );\n }\n\n // Open\n modal.open(options.animate === false || options.animate === true ? options.animate : undefined);\n }\n\n // Load Modal Content\n function loadModal(loadModalParams, loadModalOptions) {\n // Load Modal Props\n const { url, content, component, componentUrl } = loadModalParams;\n\n // Component/Template Callbacks\n function resolve(contentEl) {\n if (contentEl) {\n if (typeof contentEl === 'string') {\n modalParams.content = contentEl;\n } else if (contentEl.f7Component) {\n contentEl.f7Component.mount((componentEl) => {\n modalParams.el = componentEl;\n app.$el.append(componentEl);\n });\n } else {\n modalParams.el = contentEl;\n }\n onModalLoaded();\n }\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (content) {\n resolve(content);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.modalComponentLoader({\n rootEl: app.el,\n component,\n componentUrl,\n options: loadModalOptions,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, loadModalOptions)\n .then((modalContent) => {\n modalParams.content = modalContent;\n onModalLoaded();\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n } else {\n onModalLoaded();\n }\n }\n\n let foundLoadProp;\n 'url content component el componentUrl template'.split(' ').forEach((modalLoadProp) => {\n if (modalParams[modalLoadProp] && !foundLoadProp) {\n foundLoadProp = true;\n loadModal({ [modalLoadProp]: modalParams[modalLoadProp] }, options);\n }\n });\n if (!foundLoadProp && modalType === 'actions') {\n onModalLoaded();\n }\n\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n loadModal(resolveParams, extend(options, resolveOptions));\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (modalParams.async) {\n modalParams.async.call(router, {\n router,\n to: options.route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction,\n app,\n });\n }\n if (modalParams.asyncComponent) {\n asyncComponent(router, modalParams.asyncComponent, asyncResolve, asyncReject);\n }\n return router;\n}\nfunction modalRemove(modal) {\n extend(modal, { closeByRouter: true });\n modal.close();\n}\n\nexport { modalLoad, modalRemove };\n","import $ from '../../shared/dom7.js';\nimport appRouterCheck from './app-router-check.js';\n\nfunction clearPreviousPages(router) {\n appRouterCheck(router, 'clearPreviousPages');\n const app = router.app;\n const dynamicNavbar = router.dynamicNavbar;\n\n const $pagesToRemove = router.$el.children('.page').filter((pageInView) => {\n if (router.currentRoute && (router.currentRoute.modal || router.currentRoute.panel))\n return true;\n return pageInView !== router.currentPageEl;\n });\n\n $pagesToRemove.each((pageEl) => {\n const $oldPageEl = $(pageEl);\n const $oldNavbarEl = $(app.navbar.getElByPage($oldPageEl));\n if (router.params.stackPages && router.initialPages.indexOf($oldPageEl[0]) >= 0) {\n $oldPageEl.addClass('stacked');\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n // Page remove event\n router.pageCallback('beforeRemove', $oldPageEl, $oldNavbarEl, 'previous', undefined, {});\n router.removePage($oldPageEl);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n });\n}\n\nfunction clearPreviousHistory() {\n const router = this;\n appRouterCheck(router, 'clearPreviousHistory');\n const url = router.history[router.history.length - 1];\n\n clearPreviousPages(router);\n\n router.history = [url];\n router.view.history = [url];\n router.saveHistory();\n}\n\nexport { clearPreviousHistory }; // eslint-disable-line\n","import Router from './router-class.js';\n\nexport default {\n name: 'router',\n static: {\n Router,\n },\n instance: {\n cache: {\n xhr: [],\n templates: [],\n components: [],\n },\n },\n create() {\n const instance = this;\n if (instance.app) {\n // View Router\n if (instance.params.router) {\n instance.router = new Router(instance.app, instance);\n }\n } else {\n // App Router\n instance.router = new Router(instance);\n }\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\n\nfunction resizableView(view) {\n const app = view.app;\n const support = getSupport();\n if (view.resizableInitialized) return;\n extend(view, {\n resizable: true,\n resizableWidth: null,\n resizableInitialized: true,\n });\n const $htmlEl = $('html');\n const { $el } = view;\n if (!$el) return;\n\n let $resizeHandlerEl;\n\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let touchesDiff;\n let width;\n\n let minWidth;\n let maxWidth;\n\n function transformCSSWidth(v) {\n if (!v) return null;\n if (v.indexOf('%') >= 0 || v.indexOf('vw') >= 0) {\n return (parseInt(v, 10) / 100) * app.width;\n }\n const newV = parseInt(v, 10);\n if (Number.isNaN(newV)) return null;\n return newV;\n }\n\n function isResizable() {\n return view.resizable && $el.hasClass('view-resizable') && $el.hasClass('view-master-detail');\n }\n\n function handleTouchStart(e) {\n if (!isResizable()) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isMoved = false;\n isTouched = true;\n const $pageMasterEl = $el.children('.page-master');\n minWidth = transformCSSWidth($pageMasterEl.css('min-width'));\n maxWidth = transformCSSWidth($pageMasterEl.css('max-width'));\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n e.f7PreventSwipePanel = true;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n\n if (!isMoved) {\n width = $resizeHandlerEl[0].offsetLeft + $resizeHandlerEl[0].offsetWidth;\n $el.addClass('view-resizing');\n $htmlEl.css('cursor', 'col-resize');\n }\n\n isMoved = true;\n\n e.preventDefault();\n\n touchesDiff = pageX - touchesStart.x;\n\n let newWidth = width + touchesDiff;\n if (minWidth && !Number.isNaN(minWidth)) {\n newWidth = Math.max(newWidth, minWidth);\n }\n if (maxWidth && !Number.isNaN(maxWidth)) {\n newWidth = Math.min(newWidth, maxWidth);\n }\n newWidth = Math.min(Math.max(newWidth, 0), app.width);\n\n view.resizableWidth = newWidth;\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${newWidth}px`);\n\n $el.trigger('view:resize', newWidth);\n view.emit('local::resize viewResize', view, newWidth);\n }\n function handleTouchEnd() {\n $('html').css('cursor', '');\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${view.resizableWidth}px`);\n $el.removeClass('view-resizing');\n }\n\n function handleResize() {\n if (!view.resizableWidth) return;\n minWidth = transformCSSWidth($resizeHandlerEl.css('min-width'));\n maxWidth = transformCSSWidth($resizeHandlerEl.css('max-width'));\n\n if (minWidth && !Number.isNaN(minWidth) && view.resizableWidth < minWidth) {\n view.resizableWidth = Math.max(view.resizableWidth, minWidth);\n }\n if (maxWidth && !Number.isNaN(maxWidth) && view.resizableWidth > maxWidth) {\n view.resizableWidth = Math.min(view.resizableWidth, maxWidth);\n }\n view.resizableWidth = Math.min(Math.max(view.resizableWidth, 0), app.width);\n\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${view.resizableWidth}px`);\n }\n\n $resizeHandlerEl = view.$el.children('.view-resize-handler');\n if (!$resizeHandlerEl.length) {\n view.$el.append('<div class=\"view-resize-handler\"></div>');\n $resizeHandlerEl = view.$el.children('.view-resize-handler');\n }\n view.$resizeHandlerEl = $resizeHandlerEl;\n\n $el.addClass('view-resizable');\n\n // Add Events\n const passive = support.passiveListener ? { passive: true } : false;\n\n view.$el.on(app.touchEvents.start, '.view-resize-handler', handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n view.on('beforeOpen', handleResize);\n\n view.once('viewDestroy', () => {\n $el.removeClass('view-resizable');\n view.$resizeHandlerEl.remove();\n view.$el.off(app.touchEvents.start, '.view-resize-handler', handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n view.off('beforeOpen', handleResize);\n });\n}\n\nexport default resizableView;\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Router from '../../modules/router/router.js';\nimport Framework7Class from '../../shared/class.js';\nimport resizableView from './resizable-view.js';\n\nclass View extends Framework7Class {\n constructor(app, el, viewParams = {}) {\n super(viewParams, [app]);\n\n const view = this;\n\n const ssr = view.params.routerId;\n\n const defaults = {\n routes: [],\n routesAdd: [],\n };\n\n if (!ssr) {\n const $el = $(el);\n if (!$el.length) {\n let message = \"Framework7: can't create a View instance because \";\n message +=\n typeof el === 'string'\n ? `the selector \"${el}\" didn't match any element`\n : 'el must be an HTMLElement or Dom7 object';\n\n throw new Error(message);\n }\n }\n\n // Default View params\n view.params = extend({ el }, defaults, app.params.view, viewParams);\n\n // Routes\n if (view.params.routes.length > 0) {\n view.routes = view.params.routes;\n } else {\n view.routes = [].concat(app.routes, view.params.routesAdd);\n }\n\n // View Props\n extend(false, view, {\n app,\n name: view.params.name,\n main: view.params.main,\n history: [],\n scrollHistory: {},\n });\n\n // Install Modules\n view.useModules();\n\n // Add to app\n app.views.push(view);\n if (view.main) {\n app.views.main = view;\n }\n if (view.name) {\n app.views[view.name] = view;\n }\n\n // Index\n view.index = app.views.indexOf(view);\n\n // View ID\n let viewId;\n if (view.name) {\n viewId = `view_${view.name}`;\n } else if (view.main) {\n viewId = 'view_main';\n } else {\n viewId = `view_${view.index}`;\n }\n view.id = viewId;\n\n if (!view.params.init) {\n return view;\n }\n // Init View\n if (app.initialized) {\n view.init();\n } else {\n app.on('init', () => {\n view.init();\n });\n }\n\n return view;\n }\n\n destroy() {\n let view = this;\n const app = view.app;\n\n view.$el.trigger('view:beforedestroy');\n view.emit('local::beforeDestroy viewBeforeDestroy', view);\n\n app.off('resize', view.checkMasterDetailBreakpoint);\n\n if (view.main) {\n app.views.main = null;\n delete app.views.main;\n } else if (view.name) {\n app.views[view.name] = null;\n delete app.views[view.name];\n }\n view.$el[0].f7View = null;\n delete view.$el[0].f7View;\n\n app.views.splice(app.views.indexOf(view), 1);\n\n // Destroy Router\n if (view.params.router && view.router) {\n view.router.destroy();\n }\n\n view.emit('local::destroy viewDestroy', view);\n\n // Delete props & methods\n Object.keys(view).forEach((viewProp) => {\n view[viewProp] = null;\n delete view[viewProp];\n });\n\n view = null;\n }\n\n checkMasterDetailBreakpoint(force) {\n const view = this;\n const app = view.app;\n const wasMasterDetail = view.$el.hasClass('view-master-detail');\n const isMasterDetail =\n app.width >= view.params.masterDetailBreakpoint && view.$el.children('.page-master').length;\n if ((typeof force === 'undefined' && isMasterDetail) || force === true) {\n view.$el.addClass('view-master-detail');\n if (!wasMasterDetail) {\n view.emit('local::masterDetailBreakpoint viewMasterDetailBreakpoint', view);\n view.$el.trigger('view:masterDetailBreakpoint');\n }\n } else {\n view.$el.removeClass('view-master-detail');\n if (wasMasterDetail) {\n view.emit('local::masterDetailBreakpoint viewMasterDetailBreakpoint', view);\n view.$el.trigger('view:masterDetailBreakpoint');\n }\n }\n }\n\n initMasterDetail() {\n const view = this;\n const app = view.app;\n view.checkMasterDetailBreakpoint = view.checkMasterDetailBreakpoint.bind(view);\n view.checkMasterDetailBreakpoint();\n if (view.params.masterDetailResizable) {\n resizableView(view);\n }\n app.on('resize', view.checkMasterDetailBreakpoint);\n }\n\n mount(viewEl) {\n const view = this;\n const app = view.app;\n const el = view.params.el || viewEl;\n const $el = $(el);\n\n // Selector\n let selector;\n if (typeof el === 'string') selector = el;\n else {\n // Supposed to be HTMLElement or Dom7\n selector =\n ($el.attr('id') ? `#${$el.attr('id')}` : '') +\n ($el.attr('class')\n ? `.${$el.attr('class').replace(/ /g, '.').replace('.active', '')}`\n : '');\n }\n\n // DynamicNavbar\n let $navbarsEl;\n if (app.theme === 'ios' && view.params.iosDynamicNavbar) {\n $navbarsEl = $el.children('.navbars').eq(0);\n if ($navbarsEl.length === 0) {\n $navbarsEl = $('<div class=\"navbars\"></div>');\n }\n }\n\n extend(view, {\n $el,\n el: $el[0],\n main: view.main || $el.hasClass('view-main'),\n $navbarsEl,\n navbarsEl: $navbarsEl ? $navbarsEl[0] : undefined,\n selector,\n });\n\n if (view.main) {\n app.views.main = view;\n }\n\n // Save in DOM\n if ($el && $el[0]) {\n $el[0].f7View = view;\n }\n\n view.emit('local::mount viewMount', view);\n }\n\n init(viewEl) {\n const view = this;\n view.mount(viewEl);\n if (view.params.router) {\n if (view.params.masterDetailBreakpoint > 0) {\n view.initMasterDetail();\n }\n view.router.init();\n view.$el.trigger('view:init');\n view.emit('local::init viewInit', view);\n }\n }\n}\n\n// Use Router\nView.use(Router);\n\nexport default View;\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport ViewClass from '../../components/view/view-class.js';\n\nfunction initClicks(app) {\n function handleClicks(e) {\n const window = getWindow();\n const $clickedEl = $(e.target);\n const $clickedLinkEl = $clickedEl.closest('a');\n const isLink = $clickedLinkEl.length > 0;\n const url = isLink && $clickedLinkEl.attr('href');\n\n // Check if link is external\n if (isLink) {\n if (\n $clickedLinkEl.is(app.params.clicks.externalLinks) ||\n // eslint-disable-next-line\n (url && url.indexOf('javascript:') >= 0)\n ) {\n const target = $clickedLinkEl.attr('target');\n if (\n url &&\n window.cordova &&\n window.cordova.InAppBrowser &&\n (target === '_system' || target === '_blank')\n ) {\n e.preventDefault();\n window.cordova.InAppBrowser.open(url, target);\n } else if (\n url &&\n window.Capacitor &&\n window.Capacitor.Plugins &&\n window.Capacitor.Plugins.Browser &&\n (target === '_system' || target === '_blank')\n ) {\n e.preventDefault();\n window.Capacitor.Plugins.Browser.open({ url });\n }\n return;\n }\n }\n\n // Modules Clicks\n Object.keys(app.modules).forEach((moduleName) => {\n const moduleClicks = app.modules[moduleName].clicks;\n if (!moduleClicks) return;\n if (e.preventF7Router) return;\n Object.keys(moduleClicks).forEach((clickSelector) => {\n const matchingClickedElement = $clickedEl.closest(clickSelector).eq(0);\n if (matchingClickedElement.length > 0) {\n moduleClicks[clickSelector].call(\n app,\n matchingClickedElement,\n matchingClickedElement.dataset(),\n e,\n );\n }\n });\n });\n\n // Load Page\n let clickedLinkData = {};\n if (isLink) {\n e.preventDefault();\n clickedLinkData = $clickedLinkEl.dataset();\n }\n clickedLinkData.clickedEl = $clickedLinkEl[0];\n\n // Prevent Router\n if (e.preventF7Router) return;\n if ($clickedLinkEl.hasClass('prevent-router') || $clickedLinkEl.hasClass('router-prevent'))\n return;\n\n const validUrl = url && url.length > 0 && url[0] !== '#';\n if (validUrl || $clickedLinkEl.hasClass('back')) {\n let view;\n if (clickedLinkData.view && clickedLinkData.view === 'current') {\n view = app.views.current;\n } else if (clickedLinkData.view) {\n view = $(clickedLinkData.view)[0].f7View;\n } else {\n view = $clickedEl.parents('.view')[0] && $clickedEl.parents('.view')[0].f7View;\n if (!$clickedLinkEl.hasClass('back') && view && view.params.linksView) {\n if (typeof view.params.linksView === 'string') view = $(view.params.linksView)[0].f7View;\n else if (view.params.linksView instanceof ViewClass) view = view.params.linksView;\n }\n }\n if (!view) {\n if (app.views.main) view = app.views.main;\n }\n if (!view || !view.router) return;\n if ($clickedLinkEl[0].f7RouteProps) {\n clickedLinkData.props = $clickedLinkEl[0].f7RouteProps;\n }\n if ($clickedLinkEl.hasClass('back')) view.router.back(url, clickedLinkData);\n else view.router.navigate(url, clickedLinkData);\n }\n }\n\n app.on('click', handleClicks);\n}\nexport default {\n name: 'clicks',\n params: {\n clicks: {\n // External Links\n externalLinks: '.external',\n },\n },\n on: {\n init() {\n const app = this;\n initClicks(app);\n },\n },\n};\n","import { merge } from '../../shared/utils.js';\n\nexport default {\n name: 'routerComponentLoader',\n proto: {\n openIn(router, url, options) {\n const navigateOptions = {\n url,\n route: {\n path: url,\n options: {\n ...options,\n openIn: undefined,\n },\n },\n };\n const params = {\n ...options,\n };\n if (options.openIn === 'popup') {\n params.content = `<div class=\"popup popup-router-open-in\" data-url=\"${url}\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div>`;\n navigateOptions.route.popup = params;\n }\n if (options.openIn === 'loginScreen') {\n params.content = `<div class=\"login-screen login-screen-router-open-in\" data-url=\"${url}\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div>`;\n navigateOptions.route.loginScreen = params;\n }\n if (options.openIn === 'sheet') {\n params.content = `<div class=\"sheet-modal sheet-modal-router-open-in\" data-url=\"${url}\"><div class=\"sheet-modal-inner\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div></div>`;\n navigateOptions.route.sheet = params;\n }\n if (options.openIn === 'popover') {\n params.targetEl = options.clickedEl || options.targetEl;\n params.content = `<div class=\"popover popover-router-open-in\" data-url=\"${url}\"><div class=\"popover-inner\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div></div>`;\n navigateOptions.route.popover = params;\n }\n if (options.openIn.indexOf('panel') >= 0) {\n const parts = options.openIn.split(':');\n const side = parts[1] || 'left';\n const effect = parts[2] || 'cover';\n params.targetEl = options.clickedEl || options.targetEl;\n params.content = `<div class=\"panel panel-router-open-in panel-${side} panel-${effect}\" data-url=\"${url}\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div>`;\n navigateOptions.route.panel = params;\n }\n return router.navigate(navigateOptions);\n },\n componentLoader(component, componentUrl, options = {}, resolve, reject) {\n const router = this;\n const { app } = router;\n const url = typeof component === 'string' ? component : componentUrl;\n const compiledUrl = router.replaceRequestUrlParams(url, options);\n function compile(componentFunction) {\n let context = options.context || {};\n if (typeof context === 'function') context = context.call(router);\n else if (typeof context === 'string') {\n try {\n context = JSON.parse(context);\n } catch (err) {\n reject(err);\n throw err;\n }\n }\n const componentContext = merge({}, context, {\n f7route: options.route,\n f7router: router,\n });\n const componentProps = merge(\n options.route ? options.route.params || {} : {},\n options.props || {},\n options.routeProps || {},\n );\n let componentEl;\n let componentRoot;\n if (options.componentOptions && options.componentOptions.el) {\n componentEl = options.componentOptions.el;\n }\n if (options.componentOptions && options.componentOptions.root) {\n componentRoot = options.componentOptions.root;\n }\n app.component\n .create(componentFunction, componentProps, {\n context: componentContext,\n el: componentEl,\n root: componentRoot,\n })\n .then((createdComponent) => {\n resolve(createdComponent.el);\n })\n .catch((err) => {\n reject(err);\n throw new Error(err);\n });\n }\n let cachedComponent;\n if (compiledUrl && router.params.componentCache) {\n router.cache.components.forEach((cached) => {\n if (cached.url === compiledUrl) cachedComponent = cached.component;\n });\n }\n if (compiledUrl && cachedComponent) {\n compile(cachedComponent);\n } else if (compiledUrl && !cachedComponent) {\n // Load via XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, options)\n .then((loadedComponent) => {\n const parsedComponent = app.component.parse(loadedComponent);\n if (router.params.componentCache) {\n router.cache.components.push({\n url: compiledUrl,\n component: parsedComponent,\n });\n }\n compile(parsedComponent);\n })\n .catch((err) => {\n reject();\n throw err;\n });\n } else {\n compile(component);\n }\n },\n\n modalComponentLoader({ component, componentUrl, options, resolve, reject } = {}) {\n const router = this;\n router.componentLoader(\n component,\n componentUrl,\n options,\n (el) => {\n resolve(el);\n },\n reject,\n );\n },\n\n tabComponentLoader({ component, componentUrl, options, resolve, reject } = {}) {\n const router = this;\n router.componentLoader(\n component,\n componentUrl,\n options,\n (el) => {\n resolve(el);\n },\n reject,\n );\n },\n\n pageComponentLoader({ component, componentUrl, options, resolve, reject } = {}) {\n const router = this;\n router.componentLoader(\n component,\n componentUrl,\n options,\n (el, newOptions = {}) => {\n resolve(el, newOptions);\n },\n reject,\n );\n },\n },\n};\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import htm from 'htm';\nimport { flattenArray } from '../../shared/utils.js';\n\nconst ignoreChildren = [false, null, '', undefined];\n\nconst h = (type, props, ...children) => {\n return {\n type,\n props: props || {},\n children: flattenArray(children.filter((child) => ignoreChildren.indexOf(child) < 0)),\n };\n};\n\nconst $h = htm.bind(h);\n\nexport default $h;\n","export function vnode(sel, data, children, text, elm) {\n var key = data === undefined ? undefined : data.key;\n return { sel: sel, data: data, children: children,\n text: text, elm: elm, key: key };\n}\nexport default vnode;\n//# sourceMappingURL=vnode.js.map","export var array = Array.isArray;\nexport function primitive(s) {\n return typeof s === 'string' || typeof s === 'number';\n}\n//# sourceMappingURL=is.js.map","import { vnode } from './vnode.js';\nimport * as is from './is';\nfunction addNS(data, children, sel) {\n data.ns = 'http://www.w3.org/2000/svg';\n if (sel !== 'foreignObject' && children !== undefined) {\n for (var i = 0; i < children.length; ++i) {\n var childData = children[i].data;\n if (childData !== undefined) {\n addNS(childData, children[i].children, children[i].sel);\n }\n }\n }\n}\nexport function h(sel, b, c) {\n var data = {}, children, text, i;\n if (c !== undefined) {\n data = b;\n if (is.array(c)) {\n children = c;\n }\n else if (is.primitive(c)) {\n text = c;\n }\n else if (c && c.sel) {\n children = [c];\n }\n }\n else if (b !== undefined) {\n if (is.array(b)) {\n children = b;\n }\n else if (is.primitive(b)) {\n text = b;\n }\n else if (b && b.sel) {\n children = [b];\n }\n else {\n data = b;\n }\n }\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n if (is.primitive(children[i]))\n children[i] = vnode(undefined, undefined, undefined, children[i], undefined);\n }\n }\n if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g' &&\n (sel.length === 3 || sel[3] === '.' || sel[3] === '#')) {\n addNS(data, children, sel);\n }\n return vnode(sel, data, children, text, undefined);\n}\n;\nexport default h;\n//# sourceMappingURL=h.js.map\n","export default {};\n","/* eslint no-use-before-define: \"off\" */\n/* eslint import/no-named-as-default: \"off\" */\nimport h from './snabbdom/h.js';\nimport customComponents from './custom-components.js';\nimport { isObject, eventNameToColonCase } from '../../shared/utils.js';\n\nconst SELF_CLOSING =\n 'area base br col command embed hr img input keygen link menuitem meta param source track wbr'.split(\n ' ',\n );\nconst PROPS_ATTRS =\n 'hidden checked disabled readonly selected autofocus autoplay required multiple value indeterminate routeProps innerHTML'.split(\n ' ',\n );\nconst BOOLEAN_PROPS =\n 'hidden checked disabled readonly selected autofocus autoplay required multiple readOnly indeterminate'.split(\n ' ',\n );\n\nconst getTagName = (treeNode) => {\n return typeof treeNode.type === 'function'\n ? treeNode.type.name || 'CustomComponent'\n : treeNode.type;\n};\n\nconst toCamelCase = (name) => {\n return name\n .split('-')\n .map((word, index) => {\n if (index === 0) return word.toLowerCase();\n return word[0].toUpperCase() + word.substr(1);\n })\n .join('');\n};\nconst propsFromAttrs = (...args) => {\n const context = {};\n args.forEach((obj = {}) => {\n Object.keys(obj).forEach((key) => {\n context[toCamelCase(key)] = obj[key];\n });\n });\n\n return context;\n};\n\nconst createCustomComponent = ({ f7, treeNode, vnode, data }) => {\n const component =\n typeof treeNode.type === 'function' ? treeNode.type : customComponents[treeNode.type];\n f7.component\n .create(component, propsFromAttrs(data.attrs || {}, data.props || {}), {\n el: vnode.elm,\n children: treeNode.children,\n })\n .then((c) => {\n if (vnode.data && vnode.data.on && c && c.$el) {\n Object.keys(vnode.data.on).forEach((eventName) => {\n c.$el.on(eventName, vnode.data.on[eventName]);\n });\n }\n // eslint-disable-next-line\n vnode.elm.__component__ = c;\n });\n};\nconst updateCustomComponent = (vnode) => {\n // eslint-disable-next-line\n const component = vnode && vnode.elm && vnode.elm.__component__;\n if (!component) return;\n const newProps = propsFromAttrs(vnode.data.attrs || {}, vnode.data.props || {});\n component.children = vnode.data.treeNode.children;\n Object.assign(component.props, newProps);\n component.update();\n};\nconst destroyCustomComponent = (vnode) => {\n // eslint-disable-next-line\n const component = vnode && vnode.elm && vnode.elm.__component__;\n\n if (component) {\n const { el, $el } = component;\n if (vnode.data && vnode.data.on && $el) {\n Object.keys(vnode.data.on).forEach((eventName) => {\n $el.off(eventName, vnode.data.on[eventName]);\n });\n }\n if (component.destroy) component.destroy();\n if (el && el.parentNode) el.parentNode.removeChild(el);\n delete vnode.elm.__component__; // eslint-disable-line\n }\n};\n\nconst isCustomComponent = (treeNodeType) => {\n return (\n typeof treeNodeType === 'function' ||\n (treeNodeType && treeNodeType.indexOf('-') > 0 && customComponents[treeNodeType])\n );\n};\n\nfunction getHooks(treeNode, data, f7, initial, isRoot) {\n const hooks = {};\n const insert = [];\n const destroy = [];\n const update = [];\n const postpatch = [];\n let isFakeElement = false;\n let tagName = getTagName(treeNode);\n if (data && data.attrs && data.attrs.component) {\n tagName = data.attrs.component;\n delete data.attrs.component;\n isFakeElement = true;\n }\n\n const isCustom = isCustomComponent(treeNode.type);\n\n if (isCustom) {\n insert.push((vnode) => {\n if (vnode.sel !== tagName && !isFakeElement) return;\n createCustomComponent({ f7, treeNode, vnode, data });\n });\n destroy.push((vnode) => {\n destroyCustomComponent(vnode);\n });\n update.push((oldVnode, vnode) => {\n updateCustomComponent(vnode);\n });\n }\n\n if (!isCustom) {\n if (!data || !data.attrs || !data.attrs.class) return hooks;\n\n const classNames = data.attrs.class;\n classNames.split(' ').forEach((className) => {\n if (!initial) {\n insert.push(...f7.getVnodeHooks('insert', className));\n }\n destroy.push(...f7.getVnodeHooks('destroy', className));\n update.push(...f7.getVnodeHooks('update', className));\n postpatch.push(...f7.getVnodeHooks('postpatch', className));\n });\n }\n\n if (isRoot && !initial) {\n postpatch.push((oldVnode, vnode) => {\n const vn = vnode || oldVnode;\n if (!vn) return;\n if (vn.data && vn.data.component) {\n vn.data.component.hook('onUpdated');\n }\n });\n }\n if (\n insert.length === 0 &&\n destroy.length === 0 &&\n update.length === 0 &&\n postpatch.length === 0\n ) {\n return hooks;\n }\n\n if (insert.length) {\n hooks.insert = (vnode) => {\n insert.forEach((f) => f(vnode));\n };\n }\n if (destroy.length) {\n hooks.destroy = (vnode) => {\n destroy.forEach((f) => f(vnode));\n };\n }\n if (update.length) {\n hooks.update = (oldVnode, vnode) => {\n update.forEach((f) => f(oldVnode, vnode));\n };\n }\n if (postpatch.length) {\n hooks.postpatch = (oldVnode, vnode) => {\n postpatch.forEach((f) => f(oldVnode, vnode));\n };\n }\n\n return hooks;\n}\nconst getEventHandler = (eventHandler, { stop, prevent, once } = {}) => {\n let fired = false;\n\n function handler(...args) {\n const e = args[0];\n if (once && fired) return;\n if (stop) e.stopPropagation();\n if (prevent) e.preventDefault();\n fired = true;\n\n eventHandler(...args);\n }\n\n return handler;\n};\n\nconst getData = (treeNode, component, f7, initial, isRoot) => {\n const data = { component, treeNode };\n const tagName = getTagName(treeNode);\n Object.keys(treeNode.props).forEach((attrName) => {\n const attrValue = treeNode.props[attrName];\n if (typeof attrValue === 'undefined') return;\n if (PROPS_ATTRS.indexOf(attrName) >= 0) {\n // Props\n if (!data.props) data.props = {};\n if (attrName === 'readonly') {\n // eslint-disable-next-line\n attrName = 'readOnly';\n }\n if (attrName === 'routeProps') {\n // eslint-disable-next-line\n attrName = 'f7RouteProps';\n }\n if (tagName === 'option' && attrName === 'value') {\n if (!data.attrs) data.attrs = {};\n data.attrs.value = attrValue;\n }\n if (BOOLEAN_PROPS.indexOf(attrName) >= 0) {\n // eslint-disable-next-line\n data.props[attrName] = attrValue === false ? false : true;\n } else {\n data.props[attrName] = attrValue;\n }\n } else if (attrName === 'key') {\n // Key\n data.key = attrValue;\n } else if (\n attrName.indexOf('@') === 0 ||\n (attrName.indexOf('on') === 0 && attrName.length > 2)\n ) {\n // Events\n if (!data.on) data.on = {};\n let eventName =\n attrName.indexOf('@') === 0 ? attrName.substr(1) : eventNameToColonCase(attrName.substr(2));\n let stop = false;\n let prevent = false;\n let once = false;\n if (eventName.indexOf('.') >= 0) {\n eventName.split('.').forEach((eventNamePart, eventNameIndex) => {\n if (eventNameIndex === 0) eventName = eventNamePart;\n else {\n if (eventNamePart === 'stop') stop = true;\n if (eventNamePart === 'prevent') prevent = true;\n if (eventNamePart === 'once') once = true;\n }\n });\n }\n data.on[eventName] = getEventHandler(attrValue, { stop, prevent, once });\n } else if (attrName === 'style') {\n // Style\n if (typeof attrValue !== 'string') {\n data.style = attrValue;\n } else {\n if (!data.attrs) data.attrs = {};\n data.attrs.style = attrValue;\n }\n } else {\n // Rest of attribures\n if (!data.attrs) data.attrs = {};\n data.attrs[attrName] = attrValue;\n\n // ID -> Key\n if (attrName === 'id' && !data.key && !isRoot) {\n data.key = attrValue;\n }\n }\n });\n\n const hooks = getHooks(treeNode, data, f7, initial, isRoot);\n\n hooks.prepatch = (oldVnode, vnode) => {\n if (!oldVnode || !vnode) return;\n if (oldVnode && oldVnode.data && oldVnode.data.props) {\n Object.keys(oldVnode.data.props).forEach((key) => {\n if (BOOLEAN_PROPS.indexOf(key) < 0) return;\n if (!vnode.data) vnode.data = {};\n if (!vnode.data.props) vnode.data.props = {};\n if (oldVnode.data.props[key] === true && !(key in vnode.data.props)) {\n vnode.data.props[key] = false;\n }\n });\n }\n };\n\n data.hook = hooks;\n\n return data;\n};\n\nconst getChildren = (treeNode, component, f7, initial) => {\n if (treeNode && treeNode.type && SELF_CLOSING.indexOf(treeNode.type) >= 0) {\n return [];\n }\n const children = [];\n const nodes = treeNode.children;\n for (let i = 0; i < nodes.length; i += 1) {\n const childNode = nodes[i];\n const child = treeNodeToVNode(childNode, component, f7, initial, false);\n if (Array.isArray(child)) {\n children.push(...child);\n } else if (child) {\n children.push(child);\n }\n }\n return children;\n};\n\nconst getSlots = (treeNode, component, f7, initial) => {\n const slotName = treeNode.props.name || 'default';\n const slotNodes = (component.children || []).filter((childTreeNode) => {\n let childSlotName = 'default';\n if (childTreeNode.props) {\n childSlotName = childTreeNode.props.slot || 'default';\n }\n return childSlotName === slotName;\n });\n if (slotNodes.length === 0) {\n return getChildren(treeNode, component, f7, initial);\n }\n return slotNodes.map((subTreeNode) => treeNodeToVNode(subTreeNode, component, f7, initial));\n};\n\nconst isTreeNode = (treeNode) => {\n return isObject(treeNode) && 'props' in treeNode && 'type' in treeNode && 'children' in treeNode;\n};\n\nconst treeNodeToVNode = (treeNode, component, f7, initial, isRoot) => {\n if (!isTreeNode(treeNode)) {\n return String(treeNode);\n }\n if (treeNode.type === 'slot') {\n return getSlots(treeNode, component, f7, initial);\n }\n const data = getData(treeNode, component, f7, initial, isRoot);\n const children = isCustomComponent(treeNode.type)\n ? []\n : getChildren(treeNode, component, f7, initial);\n\n return h(getTagName(treeNode), data, children);\n};\n\nexport default function vdom(tree = {}, component, initial) {\n return treeNodeToVNode(tree, component, component.f7, initial, true);\n}\n","function createElement(tagName) {\n return document.createElement(tagName);\n}\nfunction createElementNS(namespaceURI, qualifiedName) {\n return document.createElementNS(namespaceURI, qualifiedName);\n}\nfunction createTextNode(text) {\n return document.createTextNode(text);\n}\nfunction createComment(text) {\n return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n if (referenceNode && referenceNode.parentNode !== parentNode) {\n if (referenceNode.__component__) referenceNode = referenceNode.__component__.el;\n }\n parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n if (!node) return;\n node.removeChild(child);\n}\nfunction appendChild(node, child) {\n node.appendChild(child);\n}\nfunction parentNode(node) {\n return node.parentNode;\n}\nfunction nextSibling(node) {\n return node.nextSibling;\n}\nfunction tagName(elm) {\n return elm.tagName;\n}\nfunction setTextContent(node, text) {\n node.textContent = text;\n}\nfunction getTextContent(node) {\n return node.textContent;\n}\nfunction isElement(node) {\n return node.nodeType === 1;\n}\nfunction isText(node) {\n return node.nodeType === 3;\n}\nfunction isComment(node) {\n return node.nodeType === 8;\n}\nexport var htmlDomApi = {\n createElement: createElement,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n getTextContent: getTextContent,\n isElement: isElement,\n isText: isText,\n isComment: isComment,\n};\nexport default htmlDomApi;\n//# sourceMappingURL=htmldomapi.js.map\n","import vnode from './vnode.js';\nimport * as is from './is.js';\nimport htmlDomApi from './htmldomapi.js';\nfunction isUndef(s) { return s === undefined; }\nfunction isDef(s) { return s !== undefined; }\nvar emptyNode = vnode('', {}, [], undefined, undefined);\nfunction sameVnode(vnode1, vnode2) {\n return vnode1.key === vnode2.key && vnode1.sel === vnode2.sel;\n}\nfunction isVnode(vnode) {\n return vnode.sel !== undefined;\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var i, map = {}, key, ch;\n for (i = beginIdx; i <= endIdx; ++i) {\n ch = children[i];\n if (ch != null) {\n key = ch.key;\n if (key !== undefined)\n map[key] = i;\n }\n }\n return map;\n}\nvar hooks = ['create', 'update', 'remove', 'destroy', 'pre', 'post'];\nexport { h } from './h';\nexport { thunk } from './thunk';\nexport function init(modules, domApi) {\n var i, j, cbs = {};\n var api = domApi !== undefined ? domApi : htmlDomApi;\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n var hook = modules[j][hooks[i]];\n if (hook !== undefined) {\n cbs[hooks[i]].push(hook);\n }\n }\n }\n function emptyNodeAt(elm) {\n var id = elm.id ? '#' + elm.id : '';\n var c = elm.className ? '.' + elm.className.split(' ').join('.') : '';\n return vnode(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm);\n }\n function createRmCb(childElm, listeners) {\n return function rmCb() {\n if (--listeners === 0) {\n var parent_1 = api.parentNode(childElm);\n api.removeChild(parent_1, childElm);\n }\n };\n }\n function createElm(vnode, insertedVnodeQueue) {\n var i, data = vnode.data;\n if (data !== undefined) {\n if (isDef(i = data.hook) && isDef(i = i.init)) {\n i(vnode);\n data = vnode.data;\n }\n }\n var children = vnode.children, sel = vnode.sel;\n if (sel === '!') {\n if (isUndef(vnode.text)) {\n vnode.text = '';\n }\n vnode.elm = api.createComment(vnode.text);\n }\n else if (sel !== undefined) {\n // Parse selector\n var hashIdx = sel.indexOf('#');\n var dotIdx = sel.indexOf('.', hashIdx);\n var hash = hashIdx > 0 ? hashIdx : sel.length;\n var dot = dotIdx > 0 ? dotIdx : sel.length;\n var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel;\n var elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag)\n : api.createElement(tag);\n if (hash < dot)\n elm.setAttribute('id', sel.slice(hash + 1, dot));\n if (dotIdx > 0)\n elm.setAttribute('class', sel.slice(dot + 1).replace(/\\./g, ' '));\n for (i = 0; i < cbs.create.length; ++i)\n cbs.create[i](emptyNode, vnode);\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n var ch = children[i];\n if (ch != null) {\n api.appendChild(elm, createElm(ch, insertedVnodeQueue));\n }\n }\n }\n else if (is.primitive(vnode.text)) {\n api.appendChild(elm, api.createTextNode(vnode.text));\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (i.create)\n i.create(emptyNode, vnode);\n if (i.insert)\n insertedVnodeQueue.push(vnode);\n }\n }\n else {\n vnode.elm = api.createTextNode(vnode.text);\n }\n return vnode.elm;\n }\n function addVnodes(parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (ch != null) {\n api.insertBefore(parentElm, createElm(ch, insertedVnodeQueue), before);\n }\n }\n }\n function invokeDestroyHook(vnode) {\n var i, j, data = vnode.data;\n if (data !== undefined) {\n if (isDef(i = data.hook) && isDef(i = i.destroy))\n i(vnode);\n for (i = 0; i < cbs.destroy.length; ++i)\n cbs.destroy[i](vnode);\n if (vnode.children !== undefined) {\n for (j = 0; j < vnode.children.length; ++j) {\n i = vnode.children[j];\n if (i != null && typeof i !== \"string\") {\n invokeDestroyHook(i);\n }\n }\n }\n }\n }\n function removeVnodes(parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var i_1 = void 0, listeners = void 0, rm = void 0, ch = vnodes[startIdx];\n if (ch != null) {\n if (isDef(ch.sel)) {\n invokeDestroyHook(ch);\n listeners = cbs.remove.length + 1;\n rm = createRmCb(ch.elm, listeners);\n for (i_1 = 0; i_1 < cbs.remove.length; ++i_1)\n cbs.remove[i_1](ch, rm);\n if (isDef(i_1 = ch.data) && isDef(i_1 = i_1.hook) && isDef(i_1 = i_1.remove)) {\n i_1(ch, rm);\n }\n else {\n rm();\n }\n }\n else {\n api.removeChild(parentElm, ch.elm);\n }\n }\n }\n }\n function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue) {\n var oldStartIdx = 0, newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx;\n var idxInOld;\n var elmToMove;\n var before;\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left\n }\n else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n }\n else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n }\n else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newEndVnode)) {\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldEndVnode, newStartVnode)) {\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n if (oldKeyToIdx === undefined) {\n oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n }\n idxInOld = oldKeyToIdx[newStartVnode.key];\n if (isUndef(idxInOld)) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n elmToMove = oldCh[idxInOld];\n if (elmToMove.sel !== newStartVnode.sel) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n }\n else {\n patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm);\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n }\n if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) {\n if (oldStartIdx > oldEndIdx) {\n before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n }\n else {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n }\n function patchVnode(oldVnode, vnode, insertedVnodeQueue) {\n var i, hook;\n if (isDef(i = vnode.data) && isDef(hook = i.hook) && isDef(i = hook.prepatch)) {\n i(oldVnode, vnode);\n }\n var elm = vnode.elm = oldVnode.elm;\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (oldVnode === vnode)\n return;\n if (vnode.data !== undefined) {\n for (i = 0; i < cbs.update.length; ++i)\n cbs.update[i](oldVnode, vnode);\n i = vnode.data.hook;\n if (isDef(i) && isDef(i = i.update))\n i(oldVnode, vnode);\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch)\n updateChildren(elm, oldCh, ch, insertedVnodeQueue);\n }\n else if (isDef(ch)) {\n if (isDef(oldVnode.text))\n api.setTextContent(elm, '');\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n }\n else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n }\n else if (isDef(oldVnode.text)) {\n api.setTextContent(elm, '');\n }\n }\n else if (oldVnode.text !== vnode.text) {\n api.setTextContent(elm, vnode.text);\n }\n if (isDef(hook) && isDef(i = hook.postpatch)) {\n i(oldVnode, vnode);\n }\n }\n return function patch(oldVnode, vnode) {\n var i, elm, parent;\n var insertedVnodeQueue = [];\n for (i = 0; i < cbs.pre.length; ++i)\n cbs.pre[i]();\n if (!isVnode(oldVnode)) {\n oldVnode = emptyNodeAt(oldVnode);\n }\n if (sameVnode(oldVnode, vnode)) {\n patchVnode(oldVnode, vnode, insertedVnodeQueue);\n }\n else {\n elm = oldVnode.elm;\n parent = api.parentNode(elm);\n createElm(vnode, insertedVnodeQueue);\n if (parent !== null) {\n api.insertBefore(parent, vnode.elm, api.nextSibling(elm));\n removeVnodes(parent, [oldVnode], 0, 0);\n }\n }\n for (i = 0; i < insertedVnodeQueue.length; ++i) {\n insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]);\n }\n for (i = 0; i < cbs.post.length; ++i)\n cbs.post[i]();\n return vnode;\n };\n}\n//# sourceMappingURL=snabbdom.js.map\n","var xlinkNS = 'http://www.w3.org/1999/xlink';\nvar xmlNS = 'http://www.w3.org/XML/1998/namespace';\nvar colonChar = 58;\nvar xChar = 120;\nfunction updateAttrs(oldVnode, vnode) {\n var key, elm = vnode.elm, oldAttrs = oldVnode.data.attrs, attrs = vnode.data.attrs;\n if (!oldAttrs && !attrs)\n return;\n if (oldAttrs === attrs)\n return;\n oldAttrs = oldAttrs || {};\n attrs = attrs || {};\n // update modified attributes, add new attributes\n for (key in attrs) {\n var cur = attrs[key];\n var old = oldAttrs[key];\n if (old !== cur) {\n if (cur === true) {\n elm.setAttribute(key, \"\");\n }\n else if (cur === false) {\n elm.removeAttribute(key);\n }\n else {\n if (key.charCodeAt(0) !== xChar) {\n elm.setAttribute(key, cur);\n }\n else if (key.charCodeAt(3) === colonChar) {\n // Assume xml namespace\n elm.setAttributeNS(xmlNS, key, cur);\n }\n else if (key.charCodeAt(5) === colonChar) {\n // Assume xlink namespace\n elm.setAttributeNS(xlinkNS, key, cur);\n }\n else {\n elm.setAttribute(key, cur);\n }\n }\n }\n }\n // remove removed attributes\n // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value)\n // the other option is to remove all attributes with value == undefined\n for (key in oldAttrs) {\n if (!(key in attrs)) {\n elm.removeAttribute(key);\n }\n }\n}\nexport var attributesModule = { create: updateAttrs, update: updateAttrs };\nexport default attributesModule;\n//# sourceMappingURL=attributes.js.map","function updateProps(oldVnode, vnode) {\n var key, cur, old, elm = vnode.elm, oldProps = oldVnode.data.props, props = vnode.data.props;\n if (!oldProps && !props)\n return;\n if (oldProps === props)\n return;\n oldProps = oldProps || {};\n props = props || {};\n for (key in oldProps) {\n if (!props[key]) {\n delete elm[key];\n }\n }\n for (key in props) {\n cur = props[key];\n old = oldProps[key];\n if (old !== cur && (key !== 'value' || elm[key] !== cur)) {\n elm[key] = cur;\n }\n }\n}\nexport var propsModule = { create: updateProps, update: updateProps };\nexport default propsModule;\n//# sourceMappingURL=props.js.map","var raf = (typeof window !== 'undefined' && window.requestAnimationFrame) || setTimeout;\nvar nextFrame = function (fn) { raf(function () { raf(fn); }); };\nfunction setNextFrame(obj, prop, val) {\n nextFrame(function () { obj[prop] = val; });\n}\nfunction updateStyle(oldVnode, vnode) {\n var cur, name, elm = vnode.elm, oldStyle = oldVnode.data.style, style = vnode.data.style;\n if (!oldStyle && !style)\n return;\n if (oldStyle === style)\n return;\n oldStyle = oldStyle || {};\n style = style || {};\n var oldHasDel = 'delayed' in oldStyle;\n for (name in oldStyle) {\n if (!style[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.removeProperty(name);\n }\n else {\n elm.style[name] = '';\n }\n }\n }\n for (name in style) {\n cur = style[name];\n if (name === 'delayed' && style.delayed) {\n for (var name2 in style.delayed) {\n cur = style.delayed[name2];\n if (!oldHasDel || cur !== oldStyle.delayed[name2]) {\n setNextFrame(elm.style, name2, cur);\n }\n }\n }\n else if (name !== 'remove' && cur !== oldStyle[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.setProperty(name, cur);\n }\n else {\n elm.style[name] = cur;\n }\n }\n }\n}\nfunction applyDestroyStyle(vnode) {\n var style, name, elm = vnode.elm, s = vnode.data.style;\n if (!s || !(style = s.destroy))\n return;\n for (name in style) {\n elm.style[name] = style[name];\n }\n}\nfunction applyRemoveStyle(vnode, rm) {\n var s = vnode.data.style;\n if (!s || !s.remove) {\n rm();\n return;\n }\n var name, elm = vnode.elm, i = 0, compStyle, style = s.remove, amount = 0, applied = [];\n for (name in style) {\n applied.push(name);\n elm.style[name] = style[name];\n }\n compStyle = getComputedStyle(elm);\n var props = compStyle['transition-property'].split(', ');\n for (; i < props.length; ++i) {\n if (applied.indexOf(props[i]) !== -1)\n amount++;\n }\n elm.addEventListener('transitionend', function (ev) {\n if (ev.target === elm)\n --amount;\n if (amount === 0)\n rm();\n });\n}\nexport var styleModule = {\n create: updateStyle,\n update: updateStyle,\n destroy: applyDestroyStyle,\n remove: applyRemoveStyle\n};\nexport default styleModule;\n//# sourceMappingURL=style.js.map","import $ from '../../shared/dom7.js';\n\nfunction invokeHandler(handler, event, args) {\n if (typeof handler === 'function') {\n // call function handler\n handler(event, ...args);\n }\n}\nfunction handleEvent(event, args, vnode) {\n const name = event.type;\n const on = vnode.data.on;\n // call event handler(s) if exists\n if (on && on[name]) {\n invokeHandler(on[name], event, args, vnode);\n }\n}\nfunction createListener() {\n return function handler(event, ...args) {\n handleEvent(event, args, handler.vnode);\n };\n}\nfunction updateEvents(oldVnode, vnode) {\n const oldOn = oldVnode.data.on;\n const oldListener = oldVnode.listener;\n const oldElm = oldVnode.elm;\n const on = vnode && vnode.data.on;\n const elm = vnode && vnode.elm;\n // optimization for reused immutable handlers\n if (oldOn === on) {\n return;\n }\n // remove existing listeners which no longer used\n if (oldOn && oldListener) {\n // if element changed or deleted we remove all existing listeners unconditionally\n if (!on) {\n Object.keys(oldOn).forEach((name) => {\n $(oldElm).off(name, oldListener);\n });\n } else {\n Object.keys(oldOn).forEach((name) => {\n if (!on[name]) {\n $(oldElm).off(name, oldListener);\n }\n });\n }\n }\n // add new listeners which has not already attached\n if (on) {\n // reuse existing listener or create new\n const listener = oldVnode.listener || createListener();\n vnode.listener = listener;\n // update vnode for listener\n listener.vnode = vnode;\n // if element changed or added we add all needed listeners unconditionally\n if (!oldOn) {\n Object.keys(on).forEach((name) => {\n $(elm).on(name, listener);\n });\n } else {\n Object.keys(on).forEach((name) => {\n if (!oldOn[name]) {\n $(elm).on(name, listener);\n }\n });\n }\n }\n}\n\nexport default {\n create: updateEvents,\n update: updateEvents,\n destroy: updateEvents,\n};\n","/* eslint import/no-named-as-default: off */\nimport { init } from './snabbdom/snabbdom.js';\nimport attributesModule from './snabbdom/modules/attributes.js';\nimport propsModule from './snabbdom/modules/props.js';\nimport styleModule from './snabbdom/modules/style.js';\nimport eventListenersModule from './eventslisteners.js';\n\nconst patch = init([attributesModule, propsModule, styleModule, eventListenersModule]);\n\nexport default patch;\n","/* eslint no-underscore-dangle: \"off\" */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport $h from './$h.js';\nimport { id as generateId, merge, eventNameToColonCase, deleteProps } from '../../shared/utils.js';\nimport vdom from './vdom.js';\nimport patch from './patch.js';\n\nclass Component {\n constructor(app, component, props = {}, { el, context, children } = {}) {\n const document = getDocument();\n merge(this, {\n f7: app,\n props: props || {},\n context: context || {},\n id: component.id || generateId(),\n children: children || [],\n theme: {\n ios: app.theme === 'ios',\n md: app.theme === 'md',\n aurora: app.theme === 'aurora',\n },\n style: component.style,\n __updateQueue: [],\n __eventHandlers: [],\n __onceEventHandlers: [],\n __onBeforeMount: [],\n __onMounted: [],\n __onBeforeUpdate: [],\n __onUpdated: [],\n __onBeforeUnmount: [],\n __onUnmounted: [],\n });\n\n const createComponent = () => {\n return component(this.props, this.getComponentContext(true));\n };\n\n const getRenderFuncion = (componentResult) =>\n new Promise((resolve, reject) => {\n if (typeof componentResult === 'function') {\n resolve(componentResult);\n } else if (componentResult instanceof Promise) {\n componentResult\n .then((render) => {\n resolve(render);\n })\n .catch((err) => {\n reject(err);\n });\n } else {\n reject(\n new Error(\n 'Framework7: Component render function is not a \"function\" type. Didn\\'t you forget to \"return $render\"?',\n ),\n );\n }\n });\n\n return new Promise((resolve, reject) => {\n const componentResult = createComponent();\n getRenderFuncion(componentResult)\n .then((render) => {\n this.renderFunction = render;\n\n const tree = this.render();\n\n if (el) {\n this.vnode = vdom(tree, this, true);\n if (this.style) {\n this.styleEl = document.createElement('style');\n this.styleEl.innerHTML = this.style;\n }\n this.el = el;\n patch(this.el, this.vnode);\n this.el = this.vnode.elm;\n this.$el = $(this.el);\n\n this.attachEvents();\n this.el.f7Component = this;\n this.mount();\n resolve(this);\n return;\n }\n // Make Dom\n if (tree) {\n this.vnode = vdom(tree, this, true);\n this.el = document.createElement(this.vnode.sel || 'div');\n patch(this.el, this.vnode);\n this.$el = $(this.el);\n }\n if (this.style) {\n this.styleEl = document.createElement('style');\n this.styleEl.innerHTML = this.style;\n }\n\n this.attachEvents();\n\n if (this.el) {\n this.el.f7Component = this;\n }\n\n resolve(this);\n })\n .catch((err) => {\n reject(err);\n });\n });\n }\n\n on(eventName, handler) {\n if (!this.__eventHandlers) return;\n this.__eventHandlers.push({ eventName, handler });\n }\n\n once(eventName, handler) {\n if (!this.__eventHandlers) return;\n this.__onceEventHandlers.push({ eventName, handler });\n }\n\n getComponentRef() {\n const self = this;\n return (initialValue) => {\n let value = initialValue;\n const obj = {};\n Object.defineProperty(obj, 'value', {\n get() {\n return value;\n },\n set(v) {\n value = v;\n self.update();\n },\n });\n return obj;\n };\n }\n\n getComponentStore() {\n const { state, _gettersPlain, dispatch } = this.f7.store;\n const $store = {\n state,\n dispatch,\n };\n $store.getters = new Proxy(_gettersPlain, {\n get: (target, prop) => {\n const obj = target[prop];\n const callback = (v) => {\n obj.value = v;\n this.update();\n };\n obj.onUpdated(callback);\n return obj;\n },\n });\n\n return $store;\n }\n\n getComponentContext(includeHooks) {\n const ctx = {\n $f7route: this.context.f7route,\n $f7router: this.context.f7router,\n $h,\n $,\n $id: this.id,\n $f7: this.f7,\n $f7ready: this.f7ready.bind(this),\n $theme: this.theme,\n $tick: this.tick.bind(this),\n $update: this.update.bind(this),\n $emit: this.emit.bind(this),\n $store: this.getComponentStore(),\n $ref: this.getComponentRef(),\n $el: {},\n };\n Object.defineProperty(ctx.$el, 'value', {\n get: () => {\n return this.$el;\n },\n });\n if (includeHooks)\n Object.assign(ctx, {\n $on: this.on.bind(this),\n $once: this.once.bind(this),\n $onBeforeMount: (handler) => this.__onBeforeMount.push(handler),\n $onMounted: (handler) => this.__onMounted.push(handler),\n $onBeforeUpdate: (handler) => this.__onBeforeUpdate.push(handler),\n $onUpdated: (handler) => this.__onUpdated.push(handler),\n $onBeforeUnmount: (handler) => this.__onBeforeUnmount.push(handler),\n $onUnmounted: (handler) => this.__onUnmounted.push(handler),\n });\n\n return ctx;\n }\n\n render() {\n return this.renderFunction(this.getComponentContext());\n }\n\n emit(name, data) {\n if (!this.el) return;\n this.$el.trigger(name, data);\n }\n\n attachEvents() {\n const { $el } = this;\n if (!this.__eventHandlers) return;\n this.__eventHandlers.forEach(({ eventName, handler }) => {\n $el.on(eventNameToColonCase(eventName), handler);\n });\n this.__onceEventHandlers.forEach(({ eventName, handler }) => {\n $el.once(eventNameToColonCase(eventName), handler);\n });\n }\n\n detachEvents() {\n const { $el } = this;\n if (!this.__eventHandlers) return;\n this.__eventHandlers.forEach(({ eventName, handler }) => {\n $el.on(eventNameToColonCase(eventName), handler);\n });\n this.__onceEventHandlers.forEach(({ eventName, handler }) => {\n $el.once(eventNameToColonCase(eventName), handler);\n });\n }\n\n startUpdateQueue() {\n const window = getWindow();\n if (this.__requestAnimationFrameId) return;\n const update = () => {\n this.hook('onBeforeUpdate');\n const tree = this.render();\n\n // Make Dom\n if (tree) {\n const newVNode = vdom(tree, this, false);\n this.vnode = patch(this.vnode, newVNode);\n }\n };\n this.__requestAnimationFrameId = window.requestAnimationFrame(() => {\n if (this.__updateIsPending) update();\n let resolvers = [...this.__updateQueue];\n this.__updateQueue = [];\n this.__updateIsPending = false;\n window.cancelAnimationFrame(this.__requestAnimationFrameId);\n delete this.__requestAnimationFrameId;\n delete this.__updateIsPending;\n resolvers.forEach((resolver) => resolver());\n resolvers = [];\n });\n }\n\n tick(callback) {\n return new Promise((resolve) => {\n function resolver() {\n resolve();\n if (callback) callback();\n }\n this.__updateQueue.push(resolver);\n this.startUpdateQueue();\n });\n }\n\n update(callback) {\n if (this.__destroyed) return new Promise(() => {});\n return new Promise((resolve) => {\n const resolver = () => {\n resolve();\n if (callback) callback();\n };\n this.__updateIsPending = true;\n this.__updateQueue.push(resolver);\n this.startUpdateQueue();\n });\n }\n\n setState(callback) {\n return this.update(callback);\n }\n\n f7ready(callback) {\n if (this.f7.initialized) {\n callback(this.f7);\n return;\n }\n this.f7.once('init', () => {\n callback(this.f7);\n });\n }\n\n mount(mountMethod) {\n this.hook('onBeforeMount', this.$el);\n if (this.styleEl) $('head').append(this.styleEl);\n if (mountMethod) mountMethod(this.el);\n this.hook('onMounted', this.$el);\n }\n\n destroy() {\n if (this.__destroyed) return;\n const window = getWindow();\n this.hook('onBeforeUnmount');\n\n if (this.styleEl) $(this.styleEl).remove();\n\n this.detachEvents();\n this.hook('onUnmounted');\n // Delete component instance\n if (this.el && this.el.f7Component) {\n this.el.f7Component = null;\n delete this.el.f7Component;\n }\n // Patch with empty node\n if (this.vnode) {\n this.vnode = patch(this.vnode, { sel: this.vnode.sel, data: {} });\n }\n // Clear update queue\n window.cancelAnimationFrame(this.__requestAnimationFrameId);\n this.__updateQueue = [];\n this.__eventHandlers = [];\n this.__onceEventHandlers = [];\n this.__onBeforeMount = [];\n this.__onMounted = [];\n this.__onBeforeUpdate = [];\n this.__onUpdated = [];\n this.__onBeforeUnmount = [];\n this.__onUnmounted = [];\n // Delete all props\n deleteProps(this);\n this.__destroyed = true;\n }\n\n hook(name, ...args) {\n if (this.__destroyed) return;\n this[`__${name}`].forEach((handler) => {\n handler(...args);\n });\n }\n}\n\nexport default Component;\n","import Component from './component-class.js';\nimport parseComponent from './parse-component.js';\nimport customComponents from './custom-components.js';\nimport $jsx from './$jsx.js';\n\nfunction registerComponent(tagName, component) {\n customComponents[tagName] = component;\n}\n\nfunction unregisterComponent(tagName) {\n delete customComponents[tagName];\n}\n\nexport { Component, $jsx };\nexport default {\n name: 'component',\n static: {\n Component,\n registerComponent,\n unregisterComponent,\n },\n create() {\n const app = this;\n app.component = {\n registerComponent,\n unregisterComponent,\n parse(componentString) {\n return parseComponent(componentString);\n },\n create(component, props, { root, el, context, children }) {\n return new Component(app, component, props, { root, el, context, children });\n },\n };\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { id } from '../../shared/utils.js';\n\nfunction parseComponent(componentString) {\n const window = getWindow();\n const document = getDocument();\n const componentId = id();\n const callbackCreateName = `f7_component_create_callback_${componentId}`;\n\n // Template\n let template;\n const hasTemplate = componentString.match(/<template([ ]?)([a-z0-9-]*)>/);\n if (hasTemplate) {\n template = componentString\n .split(/<template[ ]?[a-z0-9-]*>/)\n .filter((item, index) => index > 0)\n .join('<template>')\n .split('</template>')\n .filter((item, index, arr) => index < arr.length - 1)\n .join('</template>')\n .replace(/{{#raw}}([ \\n]*)<template/g, '{{#raw}}<template')\n .replace(/\\/template>([ \\n]*){{\\/raw}}/g, '/template>{{/raw}}')\n .replace(/([ \\n])<template/g, '$1{{#raw}}<template')\n .replace(/\\/template>([ \\n])/g, '/template>{{/raw}}$1');\n }\n\n // Parse Styles\n let style = null;\n\n if (componentString.indexOf('<style>') >= 0) {\n style = componentString.split('<style>')[1].split('</style>')[0];\n }\n if (componentString.indexOf('<style scoped>') >= 0) {\n style = componentString.split('<style scoped>')[1].split('</style>')[0];\n }\n\n // Parse Script\n let scriptContent;\n if (componentString.indexOf('<script>') >= 0) {\n const scripts = componentString.split('<script>');\n scriptContent = scripts[scripts.length - 1].split('</script>')[0].trim();\n } else {\n scriptContent = 'return () => {return $render}';\n }\n if (!scriptContent || !scriptContent.trim()) scriptContent = 'return () => {return $render}';\n\n // Parse Template\n if (template) {\n scriptContent = scriptContent\n .replace(\n '$render',\n `function ($$ctx) {\n var $ = $$ctx.$$;\n var $h = $$ctx.$h;\n var $root = $$ctx.$root;\n var $f7 = $$ctx.$f7;\n var $f7route = $$ctx.$f7route;\n var $f7router = $$ctx.$f7router;\n var $theme = $$ctx.$theme;\n var $update = $$ctx.$update;\n var $store = $$ctx.$store;\n var $ref = $$ctx.$ref;\n\n return $h\\`${template}\\`\n }\n `,\n )\n .replace(/export default/g, 'return');\n }\n\n // Execute Script\n scriptContent = `window.${callbackCreateName} = function () {${scriptContent}}`;\n\n // Insert Script El\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = scriptContent;\n $('head').append(scriptEl);\n\n const component = window[callbackCreateName]();\n\n // Remove Script El\n $(scriptEl).remove();\n window[callbackCreateName] = null;\n delete window[callbackCreateName];\n\n // Assign Style\n if (style) {\n component.style = style;\n }\n\n // Component ID\n component.id = componentId;\n return component;\n}\n\nexport default parseComponent;\n","import History from '../../shared/history.js';\n\nexport default {\n name: 'history',\n static: {\n history: History,\n },\n on: {\n init() {\n History.init(this);\n },\n },\n};\n","import { getWindow } from 'ssr-window';\nimport { extend } from '../../shared/utils.js';\n\nconst SW = {\n registrations: [],\n register(path, scope) {\n const app = this;\n const window = getWindow();\n\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n return new Promise((resolve, reject) => {\n app.serviceWorker.container\n .register(path, scope ? { scope } : {})\n .then((reg) => {\n SW.registrations.push(reg);\n app.emit('serviceWorkerRegisterSuccess', reg);\n resolve(reg);\n })\n .catch((error) => {\n app.emit('serviceWorkerRegisterError', error);\n reject(error);\n });\n });\n },\n unregister(registration) {\n const app = this;\n const window = getWindow();\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n let registrations;\n if (!registration) registrations = SW.registrations;\n else if (Array.isArray(registration)) registrations = registration;\n else registrations = [registration];\n return Promise.all(\n registrations.map(\n (reg) =>\n new Promise((resolve, reject) => {\n reg\n .unregister()\n .then(() => {\n if (SW.registrations.indexOf(reg) >= 0) {\n SW.registrations.splice(SW.registrations.indexOf(reg), 1);\n }\n app.emit('serviceWorkerUnregisterSuccess', reg);\n resolve();\n })\n .catch((error) => {\n app.emit('serviceWorkerUnregisterError', reg, error);\n reject(error);\n });\n }),\n ),\n );\n },\n};\n\nexport default {\n name: 'sw',\n params: {\n serviceWorker: {\n path: undefined,\n scope: undefined,\n },\n },\n create() {\n const app = this;\n const window = getWindow();\n extend(app, {\n serviceWorker: {\n container: 'serviceWorker' in window.navigator ? window.navigator.serviceWorker : undefined,\n registrations: SW.registrations,\n register: SW.register.bind(app),\n unregister: SW.unregister.bind(app),\n },\n });\n },\n on: {\n init() {\n const window = getWindow();\n if (!('serviceWorker' in window.navigator)) return;\n const app = this;\n if (app.device.cordova || (window.Capacitor && window.Capacitor.isNative)) return;\n if (!app.serviceWorker.container) return;\n const paths = app.params.serviceWorker.path;\n const scope = app.params.serviceWorker.scope;\n if (!paths || (Array.isArray(paths) && !paths.length)) return;\n const toRegister = Array.isArray(paths) ? paths : [paths];\n toRegister.forEach((path) => {\n app.serviceWorker.register(path, scope);\n });\n },\n },\n};\n","/* eslint-disable no-underscore-dangle */\nimport { extend } from '../../shared/utils.js';\n\nfunction createStore(storeParams = {}) {\n const store = {\n __store: true,\n };\n const originalState = { ...(storeParams.state || {}) };\n const actions = { ...(storeParams.actions || {}) };\n const getters = { ...(storeParams.getters || {}) };\n const state = extend({}, originalState);\n\n let propsQueue = [];\n const gettersDependencies = {};\n const gettersCallbacks = {};\n\n Object.keys(getters).forEach((getterKey) => {\n gettersDependencies[getterKey] = [];\n gettersCallbacks[getterKey] = [];\n });\n\n const getGetterValue = (getterKey) => {\n return getters[getterKey]({ state: store.state });\n };\n\n const addGetterDependencies = (getterKey, deps) => {\n if (!gettersDependencies[getterKey]) gettersDependencies[getterKey] = [];\n deps.forEach((dep) => {\n if (gettersDependencies[getterKey].indexOf(dep) < 0) {\n gettersDependencies[getterKey].push(dep);\n }\n });\n };\n\n const addGetterCallback = (getterKey, callback) => {\n if (!gettersCallbacks[getterKey]) gettersCallbacks[getterKey] = [];\n gettersCallbacks[getterKey].push(callback);\n };\n\n const runGetterCallbacks = (stateKey) => {\n const keys = Object.keys(gettersDependencies).filter((getterKey) => {\n return gettersDependencies[getterKey].indexOf(stateKey) >= 0;\n });\n keys.forEach((getterKey) => {\n if (!gettersCallbacks[getterKey] || !gettersCallbacks[getterKey].length) return;\n gettersCallbacks[getterKey].forEach((callback) => {\n callback(getGetterValue(getterKey));\n });\n });\n };\n\n const removeGetterCallback = (callback) => {\n Object.keys(gettersCallbacks).forEach((stateKey) => {\n const callbacks = gettersCallbacks[stateKey];\n\n if (callbacks.indexOf(callback) >= 0) {\n callbacks.splice(callbacks.indexOf(callback), 1);\n }\n });\n };\n\n // eslint-disable-next-line\n store.__removeCallback = (callback) => {\n removeGetterCallback(callback);\n };\n\n const getterValue = (getterKey, addCallback = true) => {\n if (getterKey === 'constructor') return undefined;\n propsQueue = [];\n const value = getGetterValue(getterKey);\n addGetterDependencies(getterKey, propsQueue);\n const onUpdated = (callback) => {\n addGetterCallback(getterKey, callback);\n };\n\n const obj = {\n value,\n onUpdated,\n };\n\n if (!addCallback) {\n return obj;\n }\n\n const callback = (v) => {\n obj.value = v;\n };\n\n obj.__callback = callback;\n addGetterCallback(getterKey, callback);\n // eslint-disable-next-line\n return obj;\n };\n\n store.state = new Proxy(state, {\n set: (target, prop, value) => {\n target[prop] = value;\n runGetterCallbacks(prop);\n return true;\n },\n get: (target, prop) => {\n propsQueue.push(prop);\n return target[prop];\n },\n });\n\n store.getters = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, true);\n },\n });\n\n store._gettersPlain = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, false);\n },\n });\n\n store.dispatch = (actionName, data) => {\n return new Promise((resolve, reject) => {\n if (!actions[actionName]) {\n reject();\n throw new Error(`Framework7: Store action \"${actionName}\" is not found`);\n }\n const result = actions[actionName]({ state: store.state, dispatch: store.dispatch }, data);\n resolve(result);\n });\n };\n\n return store;\n}\n\nexport default createStore;\n","import createStore from './create-store.js';\n\nexport { createStore };\nexport default {\n name: 'store',\n static: { createStore },\n proto: { createStore },\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\n\nconst isCapacitor = () => {\n const window = getWindow();\n return (\n window.Capacitor &&\n window.Capacitor.isNative &&\n window.Capacitor.Plugins &&\n window.Capacitor.Plugins.StatusBar\n );\n};\n\nconst Statusbar = {\n hide() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.hide();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.hide();\n }\n },\n show() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.show();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.show();\n }\n },\n onClick() {\n const app = this;\n let pageContent;\n if ($('.popup.modal-in').length > 0) {\n // Check for opened popup\n pageContent = $('.popup.modal-in')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else if ($('.panel.panel-in').length > 0) {\n // Check for opened panel\n pageContent = $('.panel.panel-in')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else if ($('.views > .view.tab-active').length > 0) {\n // View in tab bar app layout\n pageContent = $('.views > .view.tab-active')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else if ($('.views').length > 0) {\n pageContent = $('.views')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else {\n pageContent = app.$el\n .children('.view')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n }\n\n if (pageContent && pageContent.length > 0) {\n // Check for tab\n if (pageContent.hasClass('tab')) {\n pageContent = pageContent.parent('.tabs').children('.page-content.tab-active');\n }\n if (pageContent.length > 0) pageContent.scrollTop(0, 300);\n }\n },\n setTextColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n if (color === 'white') {\n window.StatusBar.styleLightContent();\n } else {\n window.StatusBar.styleDefault();\n }\n }\n if (isCapacitor()) {\n if (color === 'white') {\n window.Capacitor.Plugins.StatusBar.setStyle({ style: 'DARK' });\n } else {\n window.Capacitor.Plugins.StatusBar.setStyle({ style: 'LIGHT' });\n }\n }\n },\n setBackgroundColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.backgroundColorByHexString(color);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setBackgroundColor({ color });\n }\n },\n isVisible() {\n const window = getWindow();\n const device = getDevice();\n return new Promise((resolve) => {\n if (device.cordova && window.StatusBar) {\n resolve(window.StatusBar.isVisible);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.getInfo().then((info) => {\n resolve(info.visible);\n });\n }\n resolve(false);\n });\n },\n overlaysWebView(overlays = true) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.overlaysWebView(overlays);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setOverlaysWebView({ overlay: overlays });\n }\n },\n init() {\n const app = this;\n const window = getWindow();\n const device = getDevice();\n const params = app.params.statusbar;\n if (!params.enabled) return;\n const isCordova = device.cordova && window.StatusBar;\n const isCap = isCapacitor();\n\n if (isCordova || isCap) {\n if (params.scrollTopOnClick) {\n $(window).on('statusTap', Statusbar.onClick.bind(app));\n }\n if (device.ios) {\n if (params.iosOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.iosTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n if (device.android) {\n if (params.androidOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.androidTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n }\n if (params.iosBackgroundColor && device.ios) {\n Statusbar.setBackgroundColor(params.iosBackgroundColor);\n }\n if (params.androidBackgroundColor && device.android) {\n Statusbar.setBackgroundColor(params.androidBackgroundColor);\n }\n },\n};\n\nexport default {\n name: 'statusbar',\n params: {\n statusbar: {\n enabled: true,\n\n scrollTopOnClick: true,\n\n iosOverlaysWebView: true,\n iosTextColor: 'black',\n iosBackgroundColor: null,\n\n androidOverlaysWebView: false,\n androidTextColor: 'black',\n androidBackgroundColor: null,\n },\n },\n create() {\n const app = this;\n bindMethods(app, {\n statusbar: Statusbar,\n });\n },\n on: {\n init() {\n const app = this;\n Statusbar.init.call(app);\n },\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport View from './view-class.js';\n\nfunction getCurrentView(app) {\n const $popoverView = $('.popover.modal-in .view');\n const $popupView = $('.popup.modal-in .view');\n const $panelView = $('.panel.panel-in .view');\n let $viewsEl = $('.views');\n if ($viewsEl.length === 0) $viewsEl = app.$el;\n // Find active view as tab\n let $viewEl = $viewsEl.children('.view');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view');\n }\n // Propably in tabs or split view\n if ($viewEl.length > 1) {\n if ($viewEl.hasClass('tab')) {\n // Tabs\n $viewEl = $viewsEl.children('.view.tab-active');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view.tab-active');\n }\n } else {\n // Split View, leave appView intact\n }\n }\n if ($popoverView.length > 0 && $popoverView[0].f7View) return $popoverView[0].f7View;\n if ($popupView.length > 0 && $popupView[0].f7View) return $popupView[0].f7View;\n if ($panelView.length > 0 && $panelView[0].f7View) return $panelView[0].f7View;\n if ($viewEl.length > 0) {\n if ($viewEl.length === 1 && $viewEl[0].f7View) return $viewEl[0].f7View;\n if ($viewEl.length > 1) {\n return app.views.main;\n }\n }\n return undefined;\n}\n\nexport default {\n name: 'view',\n params: {\n view: {\n init: true,\n name: undefined,\n main: false,\n router: true,\n linksView: null,\n stackPages: false,\n xhrCache: true,\n xhrCacheIgnore: [],\n xhrCacheIgnoreGetParameters: false,\n xhrCacheDuration: 1000 * 60 * 10, // Ten minutes\n componentCache: true,\n preloadPreviousPage: true,\n allowDuplicateUrls: false,\n reloadPages: false,\n reloadDetail: false,\n masterDetailBreakpoint: 0,\n masterDetailResizable: false,\n removeElements: true,\n removeElementsWithTimeout: false,\n removeElementsTimeout: 0,\n restoreScrollTopOnBack: true,\n unloadTabContent: true,\n passRouteQueryToRequest: true,\n passRouteParamsToRequest: false,\n loadInitialPage: true,\n // Swipe Back\n iosSwipeBack: true,\n iosSwipeBackAnimateShadow: true,\n iosSwipeBackAnimateOpacity: true,\n iosSwipeBackActiveArea: 30,\n iosSwipeBackThreshold: 0,\n mdSwipeBack: false,\n mdSwipeBackAnimateShadow: true,\n mdSwipeBackAnimateOpacity: false,\n mdSwipeBackActiveArea: 30,\n mdSwipeBackThreshold: 0,\n auroraSwipeBack: false,\n auroraSwipeBackAnimateShadow: false,\n auroraSwipeBackAnimateOpacity: true,\n auroraSwipeBackActiveArea: 30,\n auroraSwipeBackThreshold: 0,\n // Push State\n browserHistory: false,\n browserHistoryRoot: undefined,\n browserHistoryAnimate: true,\n browserHistoryAnimateOnLoad: false,\n browserHistorySeparator: '#!',\n browserHistoryOnLoad: true,\n browserHistoryInitialMatch: false,\n browserHistoryStoreHistory: true,\n browserHistoryTabs: 'replace',\n // Animate Pages\n animate: true,\n // iOS Dynamic Navbar\n iosDynamicNavbar: true,\n // Animate iOS Navbar Back Icon\n iosAnimateNavbarBackIcon: true,\n // Delays\n iosPageLoadDelay: 0,\n mdPageLoadDelay: 0,\n auroraPageLoadDelay: 0,\n // Routes hooks\n routesBeforeEnter: null,\n routesBeforeLeave: null,\n },\n },\n static: {\n View,\n },\n create() {\n const app = this;\n extend(app, {\n views: extend([], {\n create(el, params) {\n return new View(app, el, params);\n },\n get(viewEl) {\n const $viewEl = $(viewEl);\n if ($viewEl.length && $viewEl[0].f7View) return $viewEl[0].f7View;\n return undefined;\n },\n }),\n });\n Object.defineProperty(app.views, 'current', {\n enumerable: true,\n configurable: true,\n get() {\n return getCurrentView(app);\n },\n });\n // Alias\n app.view = app.views;\n },\n on: {\n init() {\n const app = this;\n $('.view-init').each((viewEl) => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalOpen panelOpen': function onOpen(instance) {\n const app = this;\n instance.$el.find('.view-init').each((viewEl) => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalBeforeDestroy panelBeforeDestroy': function onClose(instance) {\n if (!instance || !instance.$el) return;\n instance.$el.find('.view-init').each((viewEl) => {\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n });\n },\n },\n vnode: {\n 'view-init': {\n insert(vnode) {\n const app = this;\n const viewEl = vnode.elm;\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n },\n destroy(vnode) {\n const viewEl = vnode.elm;\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n },\n },\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\n\nconst Navbar = {\n size(el) {\n const app = this;\n\n let $el = $(el);\n\n if ($el.hasClass('navbars')) {\n $el = $el.children('.navbar').each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n return;\n }\n\n const $innerEl = $el.children('.navbar-inner');\n if (!$innerEl.length) return;\n\n const needCenterTitle =\n $innerEl.hasClass('navbar-inner-centered-title') ||\n app.params.navbar[`${app.theme}CenterTitle`];\n const needLeftTitle = app.theme === 'ios' && !app.params.navbar[`${app.theme}CenterTitle`];\n\n if (!needCenterTitle && !needLeftTitle) return;\n\n if (\n $el.hasClass('stacked') ||\n $el.parents('.stacked').length > 0 ||\n $el.parents('.tab:not(.tab-active)').length > 0 ||\n $el.parents('.popup:not(.modal-in)').length > 0\n ) {\n return;\n }\n\n if (app.theme !== 'ios' && app.params.navbar[`${app.theme}CenterTitle`]) {\n $innerEl.addClass('navbar-inner-centered-title');\n }\n if (app.theme === 'ios' && !app.params.navbar.iosCenterTitle) {\n $innerEl.addClass('navbar-inner-left-title');\n }\n\n const $viewEl = $el.parents('.view').eq(0);\n const left = app.rtl ? $innerEl.children('.right') : $innerEl.children('.left');\n const right = app.rtl ? $innerEl.children('.left') : $innerEl.children('.right');\n const title = $innerEl.children('.title');\n const subnavbar = $innerEl.children('.subnavbar');\n const noLeft = left.length === 0;\n const noRight = right.length === 0;\n const leftWidth = noLeft ? 0 : left.outerWidth(true);\n const rightWidth = noRight ? 0 : right.outerWidth(true);\n const titleWidth = title.outerWidth(true);\n const navbarStyles = $innerEl.styles();\n const navbarWidth = $innerEl[0].offsetWidth;\n const navbarInnerWidth =\n navbarWidth -\n parseInt(navbarStyles.paddingLeft, 10) -\n parseInt(navbarStyles.paddingRight, 10);\n const isPrevious = $el.hasClass('navbar-previous');\n const sliding = $innerEl.hasClass('sliding');\n\n let router;\n let dynamicNavbar;\n\n if ($viewEl.length > 0 && $viewEl[0].f7View) {\n router = $viewEl[0].f7View.router;\n dynamicNavbar = router && router.dynamicNavbar;\n }\n\n let currLeft;\n let diff;\n if (noRight) {\n currLeft = navbarInnerWidth - titleWidth;\n }\n if (noLeft) {\n currLeft = 0;\n }\n if (!noLeft && !noRight) {\n currLeft = (navbarInnerWidth - rightWidth - titleWidth + leftWidth) / 2;\n }\n let requiredLeft = (navbarInnerWidth - titleWidth) / 2;\n if (navbarInnerWidth - leftWidth - rightWidth > titleWidth) {\n if (requiredLeft < leftWidth) {\n requiredLeft = leftWidth;\n }\n if (requiredLeft + titleWidth > navbarInnerWidth - rightWidth) {\n requiredLeft = navbarInnerWidth - rightWidth - titleWidth;\n }\n diff = requiredLeft - currLeft;\n } else {\n diff = 0;\n }\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n\n if (dynamicNavbar && app.theme === 'ios') {\n if (title.hasClass('sliding') || (title.length > 0 && sliding)) {\n let titleLeftOffset = -(currLeft + diff) * inverter;\n const titleRightOffset = (navbarInnerWidth - currLeft - diff - titleWidth) * inverter;\n\n if (isPrevious) {\n if (router && router.params.iosAnimateNavbarBackIcon) {\n const activeNavbarBackLink = $el\n .parent()\n .find('.navbar-current')\n .children('.left.sliding')\n .find('.back .icon ~ span');\n if (activeNavbarBackLink.length > 0) {\n titleLeftOffset += activeNavbarBackLink[0].offsetLeft;\n }\n }\n }\n title[0].f7NavbarLeftOffset = titleLeftOffset;\n title[0].f7NavbarRightOffset = titleRightOffset;\n }\n if (!noLeft && (left.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n left[0].f7NavbarLeftOffset = (-(navbarInnerWidth - left[0].offsetWidth) / 2) * inverter;\n left[0].f7NavbarRightOffset = leftWidth * inverter;\n } else {\n left[0].f7NavbarLeftOffset = -leftWidth;\n left[0].f7NavbarRightOffset = (navbarInnerWidth - left[0].offsetWidth) / 2;\n if (\n router &&\n router.params.iosAnimateNavbarBackIcon &&\n left.find('.back .icon').length > 0\n ) {\n if (left.find('.back .icon ~ span').length) {\n const leftOffset = left[0].f7NavbarLeftOffset;\n const rightOffset = left[0].f7NavbarRightOffset;\n left[0].f7NavbarLeftOffset = 0;\n left[0].f7NavbarRightOffset = 0;\n left.find('.back .icon ~ span')[0].f7NavbarLeftOffset = leftOffset;\n left.find('.back .icon ~ span')[0].f7NavbarRightOffset =\n rightOffset - left.find('.back .icon')[0].offsetWidth;\n }\n }\n }\n }\n if (!noRight && (right.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n right[0].f7NavbarLeftOffset = -rightWidth * inverter;\n right[0].f7NavbarRightOffset = ((navbarInnerWidth - right[0].offsetWidth) / 2) * inverter;\n } else {\n right[0].f7NavbarLeftOffset = -(navbarInnerWidth - right[0].offsetWidth) / 2;\n right[0].f7NavbarRightOffset = rightWidth;\n }\n }\n if (subnavbar.length && (subnavbar.hasClass('sliding') || sliding)) {\n subnavbar[0].f7NavbarLeftOffset = app.rtl\n ? subnavbar[0].offsetWidth\n : -subnavbar[0].offsetWidth;\n subnavbar[0].f7NavbarRightOffset = -subnavbar[0].f7NavbarLeftOffset;\n }\n }\n\n // Center title\n if (needCenterTitle) {\n let titleLeft = diff;\n if (app.rtl && noLeft && noRight && title.length > 0) titleLeft = -titleLeft;\n title.css({ left: `${titleLeft}px` });\n }\n },\n hide(el, animate = true, hideStatusbar = false, hideOnlyCurrent = false) {\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if ($el.hasClass('navbar-hidden')) return;\n let className = `navbar-hidden${animate ? ' navbar-transitioning' : ''}`;\n const currentIsLarge = isDynamic\n ? $el.find('.navbar-current .title-large').length\n : $el.find('.title-large').length;\n if (currentIsLarge) {\n className += ' navbar-large-hidden';\n }\n if (hideStatusbar) {\n className += ' navbar-hidden-statusbar';\n }\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n $el.addClass(className);\n if (isDynamic) {\n $el.children('.navbar').each((subEl) => {\n $(subEl).trigger('navbar:hide');\n app.emit('navbarHide', subEl);\n });\n } else {\n $el.trigger('navbar:hide');\n app.emit('navbarHide', $el[0]);\n }\n },\n show(el = '.navbar-hidden', animate = true, hideOnlyCurrent = false) {\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if (!$el.hasClass('navbar-hidden')) return;\n if (animate) {\n $el.addClass('navbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n }\n $el.removeClass('navbar-hidden navbar-large-hidden navbar-hidden-statusbar');\n if (isDynamic) {\n $el.children('.navbar').each((subEl) => {\n $(subEl).trigger('navbar:show');\n app.emit('navbarShow', subEl);\n });\n } else {\n $el.trigger('navbar:show');\n app.emit('navbarShow', $el[0]);\n }\n },\n getElByPage(page) {\n let $pageEl;\n let $navbarEl;\n let pageData;\n if (page.$navbarEl || page.$el) {\n pageData = page;\n $pageEl = page.$el;\n } else {\n $pageEl = $(page);\n if ($pageEl.length > 0) pageData = $pageEl[0].f7Page;\n }\n if (pageData && pageData.$navbarEl && pageData.$navbarEl.length > 0) {\n $navbarEl = pageData.$navbarEl;\n } else if ($pageEl) {\n $navbarEl = $pageEl.children('.navbar');\n }\n if (!$navbarEl || ($navbarEl && $navbarEl.length === 0)) return undefined;\n return $navbarEl[0];\n },\n getPageByEl(navbarEl) {\n const $navbarEl = $(navbarEl);\n if ($navbarEl.parents('.page').length) {\n return $navbarEl.parents('.page')[0];\n }\n let pageEl;\n $navbarEl\n .parents('.view')\n .find('.page')\n .each((el) => {\n if (el && el.f7Page && el.f7Page.navbarEl && $navbarEl[0] === el.f7Page.navbarEl) {\n pageEl = el;\n }\n });\n return pageEl;\n },\n\n collapseLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.addClass('navbar-large-collapsed');\n $pageEl.eq(0).addClass('page-with-navbar-large-collapsed').trigger('page:navbarlargecollapsed');\n app.emit('pageNavbarLargeCollapsed', $pageEl[0]);\n $navbarEl.trigger('navbar:collapse');\n app.emit('navbarCollapse', $navbarEl[0]);\n },\n expandLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.removeClass('navbar-large-collapsed');\n $pageEl\n .eq(0)\n .removeClass('page-with-navbar-large-collapsed')\n .trigger('page:navbarlargeexpanded');\n app.emit('pageNavbarLargeExpanded', $pageEl[0]);\n $navbarEl.trigger('navbar:expand');\n app.emit('navbarExpand', $navbarEl[0]);\n },\n toggleLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n if ($navbarEl.hasClass('navbar-large-collapsed')) {\n app.navbar.expandLargeTitle($navbarEl);\n } else {\n app.navbar.collapseLargeTitle($navbarEl);\n }\n },\n initNavbarOnScroll(pageEl, navbarEl, needHide, needCollapse, needTransparent) {\n const app = this;\n const support = getSupport();\n const $pageEl = $(pageEl);\n const $navbarEl = $(navbarEl);\n const $titleLargeEl = $navbarEl.find('.title-large');\n const isLarge = $titleLargeEl.length || $navbarEl.hasClass('.navbar-large');\n let navbarHideHeight = 44;\n const snapPageScrollToLargeTitle = app.params.navbar.snapPageScrollToLargeTitle;\n const snapPageScrollToTransparentNavbar = app.params.navbar.snapPageScrollToTransparentNavbar;\n\n let previousScrollTop;\n let currentScrollTop;\n\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let navbarHidden;\n\n let navbarCollapsed;\n let navbarTitleLargeHeight;\n\n let navbarOffsetHeight;\n\n if (needCollapse || (needHide && isLarge)) {\n navbarTitleLargeHeight = $navbarEl.css('--f7-navbar-large-title-height');\n\n if (navbarTitleLargeHeight && navbarTitleLargeHeight.indexOf('px') >= 0) {\n navbarTitleLargeHeight = parseInt(navbarTitleLargeHeight, 10);\n if (Number.isNaN(navbarTitleLargeHeight) && $titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else if (Number.isNaN(navbarTitleLargeHeight)) {\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;\n else if (app.theme === 'md') navbarTitleLargeHeight = 48;\n else if (app.theme === 'aurora') navbarTitleLargeHeight = 38;\n }\n } else if ($titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else {\n // eslint-disable-next-line\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;\n else if (app.theme === 'md') navbarTitleLargeHeight = 48;\n else if (app.theme === 'aurora') navbarTitleLargeHeight = 38;\n }\n }\n\n if (needHide && isLarge) {\n navbarHideHeight += navbarTitleLargeHeight;\n }\n\n let scrollChanged;\n let scrollContent;\n let scrollTimeoutId;\n let touchEndTimeoutId;\n const touchSnapTimeout = 70;\n const desktopSnapTimeout = 300;\n\n function calcScrollableDistance() {\n $pageEl.find('.page-content').each((pageContentEl) => {\n pageContentEl.f7ScrollableDistance =\n pageContentEl.scrollHeight - pageContentEl.offsetHeight;\n });\n }\n\n function snapLargeNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (\n currentScrollTop >= navbarTitleLargeHeight / 2 &&\n currentScrollTop < navbarTitleLargeHeight\n ) {\n $(scrollContent).scrollTop(navbarTitleLargeHeight, 100);\n } else if (currentScrollTop < navbarTitleLargeHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n\n function snapTransparentNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (currentScrollTop >= navbarOffsetHeight / 2 && currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(navbarOffsetHeight, 100);\n } else if (currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n\n function handleNavbarTransparent() {\n const isHidden =\n $navbarEl.hasClass('navbar-hidden') ||\n $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded || isHidden) return;\n if (!navbarOffsetHeight) {\n navbarOffsetHeight = navbarEl.offsetHeight;\n }\n let opacity = currentScrollTop / navbarOffsetHeight;\n const notTransparent = $navbarEl.hasClass('navbar-transparent-visible');\n opacity = Math.max(Math.min(opacity, 1), 0);\n\n if ((notTransparent && opacity === 1) || (!notTransparent && opacity === 0)) {\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (notTransparent && opacity === 0) {\n $navbarEl.trigger('navbar:transparenthide');\n app.emit('navbarTransparentHide', $navbarEl[0]);\n $navbarEl.removeClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (!notTransparent && opacity === 1) {\n $navbarEl.trigger('navbar:transparentshow');\n app.emit('navbarTransparentShow', $navbarEl[0]);\n $navbarEl.addClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n\n $navbarEl.find('.navbar-bg, .title').css('opacity', opacity);\n\n if (snapPageScrollToTransparentNavbar) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n\n let previousCollapseProgress = null;\n let collapseProgress = null;\n function handleLargeNavbarCollapse(pageContentEl) {\n const isHidden =\n $navbarEl.hasClass('navbar-hidden') ||\n $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (isHidden) return;\n const isLargeTransparent =\n $navbarEl.hasClass('navbar-large-transparent') ||\n ($navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-transparent'));\n previousCollapseProgress = collapseProgress;\n const scrollableDistance = Math.min(\n navbarTitleLargeHeight,\n pageContentEl.f7ScrollableDistance || navbarTitleLargeHeight,\n );\n collapseProgress = Math.min(Math.max(currentScrollTop / scrollableDistance, 0), 1);\n const previousCollapseWasInMiddle =\n previousCollapseProgress > 0 && previousCollapseProgress < 1;\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n navbarCollapsed = $navbarEl.hasClass('navbar-large-collapsed');\n if (collapseProgress === 0 && navbarCollapsed) {\n app.navbar.expandLargeTitle($navbarEl[0]);\n } else if (collapseProgress === 1 && !navbarCollapsed) {\n app.navbar.collapseLargeTitle($navbarEl[0]);\n }\n if (\n (collapseProgress === 0 && navbarCollapsed) ||\n (collapseProgress === 0 && previousCollapseWasInMiddle) ||\n (collapseProgress === 1 && !navbarCollapsed) ||\n (collapseProgress === 1 && previousCollapseWasInMiddle)\n ) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', '');\n }\n $navbarEl.find('.title').css('opacity', '');\n $navbarEl.find('.title-large-text, .subnavbar').css('transform', '');\n if (isLargeTransparent) {\n $navbarEl.find('.navbar-bg').css('opacity', '');\n } else {\n $navbarEl.find('.navbar-bg').css('transform', '');\n }\n } else if (collapseProgress > 0 && collapseProgress < 1) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', 'visible');\n }\n $navbarEl.find('.title').css('opacity', collapseProgress);\n $navbarEl\n .find('.title-large-text, .subnavbar')\n .css(\n 'transform',\n `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`,\n );\n if (isLargeTransparent) {\n $navbarEl.find('.navbar-bg').css('opacity', collapseProgress);\n } else {\n $navbarEl\n .find('.navbar-bg')\n .css(\n 'transform',\n `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`,\n );\n }\n }\n\n if (snapPageScrollToLargeTitle) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n\n function handleTitleHideShow() {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n navbarHidden =\n $navbarEl.hasClass('navbar-hidden') ||\n $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (reachEnd) {\n if (app.params.navbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.navbar.showOnPageScrollTop || currentScrollTop <= navbarHideHeight) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > navbarHideHeight) {\n action = 'hide';\n } else {\n action = 'show';\n }\n\n if (action === 'show' && navbarHidden) {\n app.navbar.show($navbarEl, true, true);\n navbarHidden = false;\n } else if (action === 'hide' && !navbarHidden) {\n app.navbar.hide($navbarEl, true, false, true);\n navbarHidden = true;\n }\n previousScrollTop = currentScrollTop;\n }\n\n function handleScroll(e) {\n scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollChanged = currentScrollTop;\n if (needCollapse) {\n handleLargeNavbarCollapse(scrollContent);\n } else if (needTransparent) {\n handleNavbarTransparent();\n }\n if ($pageEl.hasClass('page-previous')) return;\n if (needHide) {\n handleTitleHideShow();\n }\n }\n function handeTouchStart() {\n scrollChanged = false;\n }\n function handleTouchEnd() {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n if (scrollChanged !== false) {\n if (needTransparent && !needCollapse) {\n snapTransparentNavbar();\n } else {\n snapLargeNavbar();\n }\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }\n }, touchSnapTimeout);\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n\n if (\n support.touch &&\n ((needCollapse && snapPageScrollToLargeTitle) ||\n (needTransparent && snapPageScrollToTransparentNavbar))\n ) {\n app.on('touchstart:passive', handeTouchStart);\n app.on('touchend:passive', handleTouchEnd);\n }\n calcScrollableDistance();\n if (needCollapse || needTransparent) {\n $pageEl.find('.page-content').each((pageContentEl) => {\n if (pageContentEl.scrollTop > 0) handleScroll.call(pageContentEl);\n });\n }\n app.on('resize', calcScrollableDistance);\n $pageEl[0].f7DetachNavbarScrollHandlers = function f7DetachNavbarScrollHandlers() {\n app.off('resize', calcScrollableDistance);\n delete $pageEl[0].f7DetachNavbarScrollHandlers;\n $pageEl.off('scroll', '.page-content', handleScroll, true);\n if (\n support.touch &&\n ((needCollapse && snapPageScrollToLargeTitle) ||\n (needTransparent && snapPageScrollToTransparentNavbar))\n ) {\n app.off('touchstart:passive', handeTouchStart);\n app.off('touchend:passive', handleTouchEnd);\n }\n };\n },\n};\nexport default {\n name: 'navbar',\n create() {\n const app = this;\n bindMethods(app, {\n navbar: Navbar,\n });\n },\n params: {\n navbar: {\n scrollTopOnTitleClick: true,\n iosCenterTitle: true,\n mdCenterTitle: false,\n auroraCenterTitle: true,\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true,\n collapseLargeTitleOnScroll: true,\n snapPageScrollToLargeTitle: true,\n snapPageScrollToTransparentNavbar: true,\n },\n },\n on: {\n 'panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint':\n function onPanelResize() {\n const app = this;\n $('.navbar').each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n },\n pageBeforeRemove(page) {\n if (page.$el[0].f7DetachNavbarScrollHandlers) {\n page.$el[0].f7DetachNavbarScrollHandlers();\n }\n },\n pageBeforeIn(page) {\n const app = this;\n if (app.theme !== 'ios') return;\n let $navbarsEl;\n const view = page.$el.parents('.view')[0].f7View;\n const navbarEl = app.navbar.getElByPage(page);\n if (!navbarEl) {\n $navbarsEl = page.$el.parents('.view').children('.navbars');\n } else {\n $navbarsEl = $(navbarEl).parents('.navbars');\n }\n if (page.$el.hasClass('no-navbar') || (view.router.dynamicNavbar && !navbarEl)) {\n const animate = !!(page.pageFrom && page.router.history.length > 0);\n app.navbar.hide($navbarsEl, animate);\n } else {\n app.navbar.show($navbarsEl);\n }\n },\n pageReinit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n app.navbar.size($navbarEl);\n },\n pageInit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n\n // Size\n app.navbar.size($navbarEl);\n\n // Need Collapse On Scroll\n let needCollapseOnScrollHandler;\n if ($navbarEl.find('.title-large').length > 0) {\n $navbarEl.addClass('navbar-large');\n }\n if ($navbarEl.hasClass('navbar-large')) {\n if (app.params.navbar.collapseLargeTitleOnScroll) needCollapseOnScrollHandler = true;\n page.$el.addClass('page-with-navbar-large');\n }\n\n // Need transparent on scroll\n let needTransparentOnScroll;\n if (!needCollapseOnScrollHandler && $navbarEl.hasClass('navbar-transparent')) {\n needTransparentOnScroll = true;\n }\n\n // Need Hide On Scroll\n let needHideOnScrollHandler;\n if (\n app.params.navbar.hideOnPageScroll ||\n page.$el.find('.hide-navbar-on-scroll').length ||\n page.$el.hasClass('hide-navbar-on-scroll') ||\n page.$el.find('.hide-bars-on-scroll').length ||\n page.$el.hasClass('hide-bars-on-scroll')\n ) {\n if (\n page.$el.find('.keep-navbar-on-scroll').length ||\n page.$el.hasClass('keep-navbar-on-scroll') ||\n page.$el.find('.keep-bars-on-scroll').length ||\n page.$el.hasClass('keep-bars-on-scroll')\n ) {\n needHideOnScrollHandler = false;\n } else {\n needHideOnScrollHandler = true;\n }\n }\n\n if (needCollapseOnScrollHandler || needHideOnScrollHandler || needTransparentOnScroll) {\n app.navbar.initNavbarOnScroll(\n page.el,\n $navbarEl[0],\n needHideOnScrollHandler,\n needCollapseOnScrollHandler,\n needTransparentOnScroll,\n );\n }\n },\n 'panelOpen panelSwipeOpen modalOpen': function onPanelModalOpen(instance) {\n const app = this;\n instance.$el.find('.navbar:not(.navbar-previous):not(.stacked)').each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n },\n tabShow(tabEl) {\n const app = this;\n $(tabEl)\n .find('.navbar:not(.navbar-previous):not(.stacked)')\n .each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n },\n },\n clicks: {\n '.navbar .title': function onTitleClick($clickedEl, clickedData, e) {\n const app = this;\n if (!app.params.navbar.scrollTopOnTitleClick) return;\n if ($(e.target).closest('a, button').length > 0) {\n return;\n }\n let $pageContentEl;\n\n // Find active page\n const $navbarEl = $clickedEl.parents('.navbar');\n const $navbarsEl = $navbarEl.parents('.navbars');\n\n // Static Layout\n $pageContentEl = $navbarEl.parents('.page-content');\n\n if ($pageContentEl.length === 0) {\n // Fixed Layout\n if ($navbarEl.parents('.page').length > 0) {\n $pageContentEl = $navbarEl.parents('.page').find('.page-content');\n }\n // Through Layout iOS\n if ($pageContentEl.length === 0 && $navbarsEl.length) {\n if ($navbarsEl.nextAll('.page-current:not(.stacked)').length > 0) {\n $pageContentEl = $navbarsEl\n .nextAll('.page-current:not(.stacked)')\n .find('.page-content');\n }\n }\n // Through Layout\n if ($pageContentEl.length === 0) {\n if ($navbarEl.nextAll('.page-current:not(.stacked)').length > 0) {\n $pageContentEl = $navbarEl.nextAll('.page-current:not(.stacked)').find('.page-content');\n }\n }\n }\n if ($pageContentEl && $pageContentEl.length > 0) {\n // Check for tab\n if ($pageContentEl.hasClass('tab')) {\n $pageContentEl = $pageContentEl.parent('.tabs').children('.page-content.tab-active');\n }\n if ($pageContentEl.length > 0) $pageContentEl.scrollTop(0, 300);\n }\n },\n },\n vnode: {\n navbar: {\n postpatch(vnode) {\n const app = this;\n app.navbar.size(vnode.elm);\n },\n },\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\n\nconst Toolbar = {\n setHighlight(tabbarEl) {\n const app = this;\n const $tabbarEl = $(tabbarEl);\n if (app.theme === 'ios' && !$tabbarEl.hasClass('tabbar-highlight')) return;\n\n if (\n $tabbarEl.length === 0 ||\n !($tabbarEl.hasClass('tabbar') || $tabbarEl.hasClass('tabbar-labels'))\n )\n return;\n\n let $highlightEl = $tabbarEl.find('.tab-link-highlight');\n const tabLinksCount = $tabbarEl.find('.tab-link').length;\n if (tabLinksCount === 0) {\n $highlightEl.remove();\n return;\n }\n\n if ($highlightEl.length === 0) {\n $tabbarEl.children('.toolbar-inner').append('<span class=\"tab-link-highlight\"></span>');\n $highlightEl = $tabbarEl.find('.tab-link-highlight');\n } else if ($highlightEl.next().length) {\n $tabbarEl.children('.toolbar-inner').append($highlightEl);\n }\n\n const $activeLink = $tabbarEl.find('.tab-link-active');\n let highlightWidth;\n let highlightTranslate;\n\n if ($tabbarEl.hasClass('tabbar-scrollable') && $activeLink && $activeLink[0]) {\n highlightWidth = `${$activeLink[0].offsetWidth}px`;\n highlightTranslate = `${$activeLink[0].offsetLeft}px`;\n } else {\n const activeIndex = $activeLink.index();\n highlightWidth = `${100 / tabLinksCount}%`;\n highlightTranslate = `${(app.rtl ? -activeIndex : activeIndex) * 100}%`;\n }\n\n nextFrame(() => {\n $highlightEl.css('width', highlightWidth).transform(`translate3d(${highlightTranslate},0,0)`);\n });\n },\n init(tabbarEl) {\n const app = this;\n app.toolbar.setHighlight(tabbarEl);\n },\n hide(el, animate = true) {\n const app = this;\n const $el = $(el);\n if ($el.hasClass('toolbar-hidden')) return;\n const className = `toolbar-hidden${animate ? ' toolbar-transitioning' : ''}`;\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n $el.addClass(className);\n $el.trigger('toolbar:hide');\n app.emit('toolbarHide', $el[0]);\n },\n show(el, animate = true) {\n const app = this;\n const $el = $(el);\n if (!$el.hasClass('toolbar-hidden')) return;\n if (animate) {\n $el.addClass('toolbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n }\n $el.removeClass('toolbar-hidden');\n $el.trigger('toolbar:show');\n app.emit('toolbarShow', $el[0]);\n },\n initToolbarOnScroll(pageEl) {\n const app = this;\n const $pageEl = $(pageEl);\n let $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.parents('.views').children('.tabbar, .tabbar-labels');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n\n let previousScrollTop;\n let currentScrollTop;\n\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let toolbarHidden;\n function handleScroll(e) {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n if ($pageEl.hasClass('page-previous')) return;\n const scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n toolbarHidden = $toolbarEl.hasClass('toolbar-hidden');\n\n if (reachEnd) {\n if (app.params.toolbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.toolbar.showOnPageScrollTop || currentScrollTop <= 44) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > 44) {\n action = 'hide';\n } else {\n action = 'show';\n }\n\n if (action === 'show' && toolbarHidden) {\n app.toolbar.show($toolbarEl);\n toolbarHidden = false;\n } else if (action === 'hide' && !toolbarHidden) {\n app.toolbar.hide($toolbarEl);\n toolbarHidden = true;\n }\n\n previousScrollTop = currentScrollTop;\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n $pageEl[0].f7ScrollToolbarHandler = handleScroll;\n },\n};\nexport default {\n name: 'toolbar',\n create() {\n const app = this;\n bindMethods(app, {\n toolbar: Toolbar,\n });\n },\n params: {\n toolbar: {\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true,\n },\n },\n on: {\n pageBeforeRemove(page) {\n if (page.$el[0].f7ScrollToolbarHandler) {\n page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarHandler, true);\n }\n },\n pageBeforeIn(page) {\n const app = this;\n let $toolbarEl = page.$el.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.parents('.views').children('.tabbar, .tabbar-labels');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n if (page.$el.hasClass('no-toolbar')) {\n app.toolbar.hide($toolbarEl);\n } else {\n app.toolbar.show($toolbarEl);\n }\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.tabbar, .tabbar-labels').each((tabbarEl) => {\n app.toolbar.init(tabbarEl);\n });\n if (\n app.params.toolbar.hideOnPageScroll ||\n page.$el.find('.hide-toolbar-on-scroll').length ||\n page.$el.hasClass('hide-toolbar-on-scroll') ||\n page.$el.find('.hide-bars-on-scroll').length ||\n page.$el.hasClass('hide-bars-on-scroll')\n ) {\n if (\n page.$el.find('.keep-toolbar-on-scroll').length ||\n page.$el.hasClass('keep-toolbar-on-scroll') ||\n page.$el.find('.keep-bars-on-scroll').length ||\n page.$el.hasClass('keep-bars-on-scroll')\n ) {\n return;\n }\n app.toolbar.initToolbarOnScroll(page.el);\n }\n },\n init() {\n const app = this;\n app.$el.find('.tabbar, .tabbar-labels').each((tabbarEl) => {\n app.toolbar.init(tabbarEl);\n });\n },\n },\n vnode: {\n tabbar: {\n insert(vnode) {\n const app = this;\n app.toolbar.init(vnode.elm);\n },\n },\n },\n};\n","import $ from '../../shared/dom7.js';\n\nexport default {\n name: 'subnavbar',\n on: {\n pageInit(page) {\n if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {\n page.$el.addClass('page-with-subnavbar');\n }\n const $innerSubnavbars = page.$el.find('.subnavbar').filter((subnavbarEl) => {\n return $(subnavbarEl).parents('.page')[0] === page.$el[0];\n });\n if ($innerSubnavbars.length) {\n page.$el.addClass('page-with-subnavbar');\n }\n },\n },\n};\n","import $ from '../../shared/dom7.js';\n\nexport default class TouchRipple {\n constructor(app, $el, x, y) {\n const ripple = this;\n\n if (!$el) return undefined;\n\n const { left, top, width, height } = $el[0].getBoundingClientRect();\n const center = {\n x: x - left,\n y: y - top,\n };\n let diameter = Math.max((height ** 2 + width ** 2) ** 0.5, 48);\n\n let isInset = false;\n const insetElements = app.params.touch.touchRippleInsetElements || '';\n if (insetElements && $el.is(insetElements)) {\n isInset = true;\n }\n if (isInset) {\n diameter = Math.max(Math.min(width, height), 48);\n }\n\n if (!isInset && $el.css('overflow') === 'hidden') {\n const distanceFromCenter =\n ((center.x - width / 2) ** 2 + (center.y - height / 2) ** 2) ** 0.5;\n const scale = (diameter / 2 + distanceFromCenter) / (diameter / 2);\n ripple.rippleTransform = `translate3d(0px, 0px, 0) scale(${scale})`;\n } else {\n // prettier-ignore\n ripple.rippleTransform = `translate3d(${-center.x + width / 2}px, ${-center.y + height / 2}px, 0) scale(1)`;\n }\n if (isInset) {\n $el.addClass('ripple-inset');\n }\n\n ripple.$rippleWaveEl = $(\n `<div class=\"ripple-wave\" style=\"width: ${diameter}px; height: ${diameter}px; margin-top:-${\n diameter / 2\n }px; margin-left:-${diameter / 2}px; left:${center.x}px; top:${\n center.y\n }px; --f7-ripple-transform: ${ripple.rippleTransform}\"></div>`,\n );\n\n $el.prepend(ripple.$rippleWaveEl);\n\n ripple.$rippleWaveEl.animationEnd(() => {\n if (!ripple.$rippleWaveEl) return;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-out')) return;\n ripple.$rippleWaveEl.addClass('ripple-wave-in');\n if (ripple.shouldBeRemoved) {\n ripple.out();\n }\n });\n\n return ripple;\n }\n\n destroy() {\n let ripple = this;\n if (ripple.$rippleWaveEl) {\n ripple.$rippleWaveEl.remove();\n }\n Object.keys(ripple).forEach((key) => {\n ripple[key] = null;\n delete ripple[key];\n });\n ripple = null;\n }\n\n out() {\n const ripple = this;\n const { $rippleWaveEl } = this;\n clearTimeout(ripple.removeTimeout);\n $rippleWaveEl.addClass('ripple-wave-out');\n\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 300);\n\n $rippleWaveEl.animationEnd(() => {\n clearTimeout(ripple.removeTimeout);\n ripple.destroy();\n });\n }\n\n remove() {\n const ripple = this;\n if (ripple.shouldBeRemoved) return;\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 400);\n ripple.shouldBeRemoved = true;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-in')) {\n ripple.out();\n }\n }\n}\n","import TouchRipple from './touch-ripple-class.js';\n\nexport default {\n name: 'touch-ripple',\n static: {\n TouchRipple,\n },\n create() {\n const app = this;\n app.touchRipple = {\n create(...args) {\n return new TouchRipple(...args);\n },\n };\n },\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n\nconst openedModals = [];\nconst dialogsQueue = [];\nfunction clearDialogsQueue() {\n if (dialogsQueue.length === 0) return;\n const dialog = dialogsQueue.shift();\n dialog.open();\n}\nclass Modal extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n\n const modal = this;\n\n const defaults = {};\n\n // Extend defaults with modules params\n modal.useModulesParams(defaults);\n\n modal.params = extend(defaults, params);\n modal.opened = false;\n\n let $containerEl = modal.params.containerEl ? $(modal.params.containerEl).eq(0) : app.$el;\n if (!$containerEl.length) $containerEl = app.$el;\n\n modal.$containerEl = $containerEl;\n modal.containerEl = $containerEl[0];\n\n // Install Modules\n modal.useModules();\n\n return this;\n }\n\n onOpen() {\n const modal = this;\n modal.opened = true;\n openedModals.push(modal);\n $('html').addClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:open ${modal.type.toLowerCase()}:open`);\n modal.emit(`local::open modalOpen ${modal.type}Open`, modal);\n }\n\n onOpened() {\n const modal = this;\n modal.$el.trigger(`modal:opened ${modal.type.toLowerCase()}:opened`);\n modal.emit(`local::opened modalOpened ${modal.type}Opened`, modal);\n }\n\n onClose() {\n const modal = this;\n modal.opened = false;\n if (!modal.type || !modal.$el) return;\n openedModals.splice(openedModals.indexOf(modal), 1);\n $('html').removeClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:close ${modal.type.toLowerCase()}:close`);\n modal.emit(`local::close modalClose ${modal.type}Close`, modal);\n }\n\n onClosed() {\n const modal = this;\n if (!modal.type || !modal.$el) return;\n modal.$el.removeClass('modal-out');\n modal.$el.hide();\n if (\n modal.params.backdrop &&\n (modal.params.backdropUnique || modal.forceBackdropUnique) &&\n modal.$backdropEl\n ) {\n modal.$backdropEl.remove();\n }\n modal.$el.trigger(`modal:closed ${modal.type.toLowerCase()}:closed`);\n modal.emit(`local::closed modalClosed ${modal.type}Closed`, modal);\n }\n\n open(animateModal) {\n const modal = this;\n const document = getDocument();\n const app = modal.app;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n const type = modal.type;\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;\n else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n\n if (!$el || $el.hasClass('modal-in')) {\n if (animateModal === false && $el[0] && type !== 'dialog') {\n $el[0].style.display = 'block';\n }\n return modal;\n }\n\n if (type === 'dialog' && app.params.modal.queueDialogs) {\n let pushToQueue;\n if ($('.dialog.modal-in').length > 0) {\n pushToQueue = true;\n } else if (openedModals.length > 0) {\n openedModals.forEach((openedModal) => {\n if (openedModal.type === 'dialog') pushToQueue = true;\n });\n }\n if (pushToQueue) {\n dialogsQueue.push(modal);\n return modal;\n }\n }\n\n const $modalParentEl = $el.parent();\n const wasInDom = $el.parents(document).length > 0;\n if (!$modalParentEl.is(modal.$containerEl)) {\n modal.$containerEl.append($el);\n modal.once(`${type}Closed`, () => {\n if (wasInDom) {\n $modalParentEl.append($el);\n } else {\n $el.remove();\n }\n });\n }\n // Show Modal\n $el.show();\n\n if (\n modal.params.backdrop &&\n (modal.params.backdropUnique || modal.forceBackdropUnique) &&\n modal.$backdropEl\n ) {\n modal.$backdropEl.insertBefore($el);\n }\n\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n modal._clientLeft = $el[0].clientLeft;\n\n // Modal\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n if ($backdropEl) {\n $backdropEl.removeClass('not-animated');\n $backdropEl.addClass('backdrop-in');\n }\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-out not-animated').addClass('modal-in');\n modal.onOpen();\n } else {\n if ($backdropEl) {\n $backdropEl.addClass('backdrop-in not-animated');\n }\n $el.removeClass('modal-out').addClass('modal-in not-animated');\n modal.onOpen();\n modal.onOpened();\n }\n\n return modal;\n }\n\n close(animateModal) {\n const modal = this;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;\n else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n\n if (!$el || !$el.hasClass('modal-in')) {\n if (dialogsQueue.indexOf(modal) >= 0) {\n dialogsQueue.splice(dialogsQueue.indexOf(modal), 1);\n }\n return modal;\n }\n\n // backdrop\n if ($backdropEl) {\n let needToHideBackdrop = true;\n if (modal.type === 'popup') {\n modal.$el\n .prevAll('.popup.modal-in')\n .add(modal.$el.nextAll('.popup.modal-in'))\n .each((popupEl) => {\n const popupInstance = popupEl.f7Modal;\n if (!popupInstance) return;\n if (\n popupInstance.params.closeByBackdropClick &&\n popupInstance.params.backdrop &&\n popupInstance.backdropEl === modal.backdropEl\n ) {\n needToHideBackdrop = false;\n }\n });\n }\n if (needToHideBackdrop) {\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n $backdropEl.removeClass('backdrop-in');\n }\n }\n\n // Modal\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n } else {\n $el.addClass('not-animated').removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n modal.onClosed();\n }\n\n if (modal.type === 'dialog') {\n clearDialogsQueue();\n }\n\n return modal;\n }\n\n destroy() {\n const modal = this;\n if (modal.destroyed) return;\n modal.emit(`local::beforeDestroy modalBeforeDestroy ${modal.type}BeforeDestroy`, modal);\n if (modal.$el) {\n modal.$el.trigger(`modal:beforedestroy ${modal.type.toLowerCase()}:beforedestroy`);\n if (modal.$el.length && modal.$el[0].f7Modal) {\n delete modal.$el[0].f7Modal;\n }\n }\n deleteProps(modal);\n modal.destroyed = true;\n }\n}\n\nexport default Modal;\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Modal from './modal-class.js';\n\nclass CustomModal extends Modal {\n constructor(app, params) {\n const extendedParams = extend(\n {\n backdrop: true,\n closeByBackdropClick: true,\n on: {},\n },\n params,\n );\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n\n const customModal = this;\n\n customModal.params = extendedParams;\n\n // Find Element\n let $el;\n if (!customModal.params.el) {\n $el = $(customModal.params.content);\n } else {\n $el = $(customModal.params.el);\n }\n\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n\n if ($el.length === 0) {\n return customModal.destroy();\n }\n let $backdropEl;\n if (customModal.params.backdrop) {\n $backdropEl = app.$el.children('.custom-modal-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('<div class=\"custom-modal-backdrop\"></div>');\n app.$el.append($backdropEl);\n }\n }\n\n function handleClick(e) {\n if (!customModal || customModal.destroyed) return;\n if ($backdropEl && e.target === $backdropEl[0]) {\n customModal.close();\n }\n }\n\n customModal.on('customModalOpened', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.on('click', handleClick);\n }\n });\n customModal.on('customModalClose', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.off('click', handleClick);\n }\n });\n\n extend(customModal, {\n app,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'customModal',\n });\n\n $el[0].f7Modal = customModal;\n\n return customModal;\n }\n}\nexport default CustomModal;\n","import Modal from './modal-class.js';\nimport CustomModal from './custom-modal-class.js';\n\nexport default {\n name: 'modal',\n static: {\n Modal,\n CustomModal,\n },\n create() {\n const app = this;\n app.customModal = {\n create(params) {\n return new CustomModal(app, params);\n },\n };\n },\n params: {\n modal: {\n queueDialogs: true,\n },\n },\n};\n","import $ from './shared/dom7.js';\n\nimport Framework7 from './components/app/app-class.js';\n\n//IMPORT_HELPERS\n\nimport DeviceModule from './modules/device/device.js';\nimport SupportModule from './modules/support/support.js';\nimport UtilsModule from './modules/utils/utils.js';\nimport ResizeModule from './modules/resize/resize.js';\nimport RequestModule from './modules/request/request.js';\nimport TouchModule from './modules/touch/touch.js';\nimport ClicksModule from './modules/clicks/clicks.js';\nimport RouterModule from './modules/router/router.js';\nimport RouterComponentLoaderModule from './modules/router/component-loader.js';\nimport ComponentModule, { Component, $jsx } from './modules/component/component.js';\nimport HistoryModule from './modules/history/history.js';\nimport ServiceWorkerModule from './modules/service-worker/service-worker.js';\nimport StoreModule, { createStore } from './modules/store/store.js';\n\nimport Statusbar from './components/statusbar/statusbar.js';\nimport View from './components/view/view.js';\nimport Navbar from './components/navbar/navbar.js';\nimport Toolbar from './components/toolbar/toolbar.js';\nimport Subnavbar from './components/subnavbar/subnavbar.js';\nimport TouchRipple from './components/touch-ripple/touch-ripple.js';\nimport Modal from './components/modal/modal.js';\nimport Router from './modules/router/router-class.js';\n\n//IMPORT_COMPONENTS\n\n// UMD_ONLY_START\nif (typeof window !== 'undefined') {\n // Dom7\n if (!window.Dom7) window.Dom7 = $;\n}\n// UMD_ONLY_END\n\nRouter.use([RouterComponentLoaderModule]);\n\nFramework7.use([\n DeviceModule,\n SupportModule,\n UtilsModule,\n ResizeModule,\n RequestModule,\n TouchModule,\n ClicksModule,\n RouterModule,\n HistoryModule,\n ComponentModule,\n ServiceWorkerModule,\n StoreModule,\n Statusbar,\n View,\n Navbar,\n Toolbar,\n Subnavbar,\n TouchRipple,\n Modal,\n //INSTALL_COMPONENTS\n]);\n\n//NAMED_EXPORT\nexport default Framework7;\n"]}
1
+ {"version":3,"sources":["../../node_modules/ssr-window/ssr-window.esm.js","../../node_modules/dom7/dom7.esm.js","../../src/core/shared/dom7.js","../../src/core/shared/utils.js","../../src/core/shared/get-support.js","../../src/core/shared/get-device.js","../../src/core/shared/events-class.js","../../src/core/shared/class.js","../../src/core/shared/constructor-methods.js","../../src/core/components/app/load-module.js","../../src/core/components/app/app-class.js","../../src/core/shared/modal-methods.js","../../src/core/modules/device/device.js","../../src/core/modules/support/support.js","../../src/core/modules/utils/utils.js","../../src/core/modules/resize/resize.js","../../src/core/shared/request.js","../../src/core/modules/request/request.js","../../src/core/modules/touch/touch.js","../../node_modules/path-to-regexp/dist.es2015/index.js","../../src/core/shared/history.js","../../src/core/modules/router/swipe-back.js","../../src/core/modules/router/redirect.js","../../src/core/modules/router/process-route-queue.js","../../src/core/modules/router/app-router-check.js","../../src/core/modules/router/async-component.js","../../src/core/modules/router/navigate.js","../../src/core/modules/router/back.js","../../src/core/modules/router/router-class.js","../../src/core/modules/router/tab.js","../../src/core/modules/router/modal.js","../../src/core/modules/router/clear-previous-history.js","../../src/core/modules/router/router.js","../../src/core/components/view/resizable-view.js","../../src/core/components/view/view-class.js","../../src/core/modules/clicks/clicks.js","../../src/core/modules/router/component-loader.js","../../node_modules/htm/dist/htm.mjs","../../src/core/modules/component/$h.js","../../src/core/modules/component/snabbdom/vnode.js","../../src/core/modules/component/snabbdom/is.js","../../src/core/modules/component/snabbdom/h.js","../../src/core/modules/component/custom-components.js","../../src/core/modules/component/vdom.js","../../src/core/modules/component/snabbdom/htmldomapi.js","../../src/core/modules/component/snabbdom/snabbdom.js","../../src/core/modules/component/snabbdom/modules/attributes.js","../../src/core/modules/component/snabbdom/modules/props.js","../../src/core/modules/component/snabbdom/modules/style.js","../../src/core/modules/component/eventslisteners.js","../../src/core/modules/component/patch.js","../../src/core/modules/component/component-class.js","../../src/core/modules/component/component.js","../../src/core/modules/component/parse-component.js","../../src/core/modules/history/history.js","../../src/core/modules/service-worker/service-worker.js","../../src/core/modules/store/create-store.js","../../src/core/modules/store/store.js","../../src/core/components/statusbar/statusbar.js","../../src/core/components/view/view.js","../../src/core/components/navbar/navbar.js","../../src/core/components/toolbar/toolbar.js","../../src/core/components/subnavbar/subnavbar.js","../../src/core/components/touch-ripple/touch-ripple-class.js","../../src/core/components/touch-ripple/touch-ripple.js","../../src/core/components/modal/modal-class.js","../../src/core/components/modal/custom-modal-class.js","../../src/core/components/modal/modal.js","../../src/core/framework7.js"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","Dom7","Array","items","super","proto","__proto__","defineProperty","get","set","value","makeReactive","arrayFlat","arr","res","el","isArray","push","arrayFilter","prototype","filter","call","$","selector","context","html","trim","indexOf","toCreate","tempParent","innerHTML","i","a","qsa","nodeType","uniqueArray","arrayUnique","fn","noTrigger","split","shortcut","name","args","trigger","on","click","focus","focusin","focusout","keyup","keydown","keypress","submit","change","mousedown","mousemove","mouseup","mouseenter","mouseleave","mouseout","mouseover","touchstart","touchend","touchmove","resize","scroll","els","dom","j","toAdd","classes","classNames","map","c","classList","add","initialProps","initialParams","props","assign","params","duration","easing","elements","animating","que","easingProgress","progress","Math","cos","PI","stop","frameId","each","dom7AnimateInstance","done","complete","shift","animate","index","initialFullValue","initialValue","unit","finalValue","finalFullValue","container","prop","replace","parseFloat","currentValue","time","startTime","elementsDone","propsDone","began","render","easeProgress","getTime","begin","max","min","element","animateInstance","fireCallBack","e","off","newChild","k","tempDiv","firstChild","appendChild","parent","append","attrs","arguments","getAttribute","attrName","is","closest","parents","eq","dom7ElementDataStorage","dataKey","dataset","attributes","attr","string","toLowerCase","match","group","toUpperCase","remove","apply","parentNode","removeChild","textContent","returnIndex","foundElements","found","className","contains","innerHeight","css","display","child","previousSibling","after","insertBefore","nextSibling","cloneNode","before","compareWith","matches","webkitMatchesSelector","msMatchesSelector","nextElementSibling","nextEls","next","eventType","targetSelector","listener","capture","undefined","events","event","handlers","dom7Listeners","dom7LiveListeners","handler","dom7proxy","proxyListener","splice","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","handleLiveEvent","eventData","dom7EventData","unshift","handleEvent","eventName","onceHandler","eventArgs","includeMargins","styles","offsetHeight","offsetWidth","prepend","previousElementSibling","prevEls","prev","propName","removeAttribute","scrollTo","currentTop","currentLeft","maxTop","maxLeft","newTop","newLeft","animateTop","animateLeft","scrollHeight","scrollWidth","nextAll","prevAll","text","toggle","transform","transitionDuration","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","multiple","values","selectedOptions","options","selected","val","innerWidth","methods","methodName","uniqueNum","mask","floor","random","mdPreloaderContent","iosPreloaderContent","join","eventNameToColonCase","hasColon","char","deleteProps","object","nextTick","delay","nextFrame","now","parseUrlQuery","url","query","param","urlToParse","paramsPart","decodeURIComponent","slice","serializeObject","resultArray","newParents","varName","parentParts","encodeURIComponent","varValue","toPush","String","o","merge","to","from","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","deep","colorHexToRgb","hex","h","m","r","g","b","result","exec","n","parseInt","colorRgbToHex","toString","colorRgbToHsl","d","l","abs","colorHslToRgb","s","hp","x","rgb1","Number","isNaN","round","bindMethods","instance","subKey","bind","flattenArray","arg","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","HSL","HSB","t","rgb","hsl","hslShade","hslTint","shade","tint","--f7-theme-color","--f7-theme-color-rgb","--f7-theme-color-shade","--f7-theme-color-tint","support","deviceCalculated","getSupport","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","passiveListener","supportsPassive","opts","intersectionObserver","calcSupport","getDevice","overrides","reset","platform","ua","device","ios","android","androidChrome","desktop","iphone","ipod","ipad","edge","ie","firefox","macos","windows","cordova","electron","capacitor","Capacitor","nwjs","screenWidth","width","screenHeight","height","nw","process","versions","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","prefersColorScheme","theme","calcDevice","EventsClass","eventsParents","eventsListeners","priority","self","method","once","f7proxy","eventHandler","emit","local","eventsArray","localEvents","parentEvents","eventsParent","Framework7Class","useModuleParams","module","instanceParams","originalParams","paramKey","useModulesParams","modules","moduleName","useModule","moduleParams","modulePropName","moduleProp","moduleEventName","vnode","vnodeHooks","vnodeId","hookName","create","useModules","modulesParams","components","use","[object Object]","Class","static","install","installModule","ConstructorMethods","parameters","defaultSelector","Constructor","domProp","app","addMethods","$el","destroy","fetchedModules","Framework7","Error","passedParams","w","defaults","version","language","routes","lazyModulesPath","initOnDeviceReady","init","autoDarkMode","iosTranslucentBars","iosTranslucentModals","component","componentUrl","online","onLine","store","f7","initStore","mount","rootEl","$rootEl","rtl","DARK","LIGHT","mq","dark","light","colorSchemeListener","media","darkMode","__store","createStore","enableAutoDarkMode","addListener","disableAutoDarkMode","removeListener","initAppComponent","router","componentLoader","componentOptions","$elComponent","f7Component","initialized","addClass","removeClass","loadModule","loadModules","getVnodeHooks","hook","Events","ModalMethods","open","targetEl","$targetPage","modalEl","$modalEl","f7Modal","close","$parentEl","$targetEl","moduleToLoad","Promise","resolve","reject","modulePath","moduleObj","moduleFunc","matchNamePattern","scriptLoad","resolveScript","rejectScript","request","scriptContent","callbackLoadName","scriptEl","xhr","status","styleLoad","resolveStyle","styleContent","styleEl","all","then","catch","err","DeviceModule","metaStatusbar","content","SupportModule","UtilsModule","utils","ResizeModule","getSize","offset","orientationchange","globals","jsonpRequests","RequestResponse","RequestError","requestOptions","globalsNoCallbacks","callbackName","async","cache","user","password","headers","xhrFields","statusCode","processData","dataType","contentType","timeout","proceedRequest","abortController","canceled","message","fireCallback","globalCallbackValue","optionCallbackValue","type","paramsPrefix","stringData","abortTimeout","callbackSplit","requestUrl","addVars","script","onerror","XMLHttpRequest","aborted","onAbort","abort","requestParameters","postData","ArrayBuffer","Blob","Document","FormData","boundary","setRequestHeader","newData","JSON","stringify","Accept","headerName","crossDomain","test","RegExp","$2","onload","responseData","parseError","parse","responseText","responseType","response","statusText","ontimeout","send","requestShortcut","success","error","post","json","getJSON","postJSON","contoller","setup","RequestModule","TouchModule","touchClicksDistanceThreshold","disableContextMenu","tapHold","tapHoldDelay","tapHoldPreventClicks","activeState","activeStateElements","activeStateOnMouseMove","mdTouchRipple","iosTouchRipple","auroraTouchRipple","touchRippleElements","touchRippleInsetElements","touchEvents","start","move","end","useRipple","touchStartX","touchStartY","targetElement","isMoved","tapHoldFired","tapHoldTimeout","preventClick","activableElement","activeTimeout","rippleWave","rippleTarget","rippleTimeout","isScrolling","findActivableElement","activable","newActivable","preventPropagation","hasClass","isInsideScrollableView","addActive","removeActive","createRipple","y","touchRipple","removeRipple","rippleTouchStart","rippleElements","rippleParent","findRippleElement","rippleTouchMove","rippleTouchEnd","handleMouseUp","isSegmentedStrong","segmentedStrongEl","touchMoveActivableIos","isTouchMoveActivable","touchmoveActivableEl","emitAppTouchEvent","appTouchStartActive","appTouchMoveActive","appTouchEndActive","appTouchStartPassive","appTouchMovePassive","appTouchEndPassive","passive","passiveListenerCapture","activeListener","activeListenerCapture","isOverswipe","isSegmented","localPreventClick","stopImmediatePropagation","stopPropagation","preventDefault","targetTouches","touches","pageX","pageY","distance","shouldRemoveActive","touchCurrentX","touchCurrentY","buttonEl","elementFromPoint","clientX","clientY","$activableEl","which","isNative","str","tokens","count","pattern","TypeError","code","charCodeAt","lexer","_a","prefixes","defaultPattern","escapeString","delimiter","path","tryConsume","mustConsume","nextType","consumeText","prefix","suffix","modifier","name_1","pattern_1","compile","reFlags","flags","encode","_b","validate","token","optional","repeat","segment","typeOfMessage","tokensToFunction","sensitive","stringToRegexp","strict","_c","_d","endsWith","route","_i","tokens_1","mod","endToken","isEndDelimited","tokensToRegexp","pathToRegexp","groupsRegex","execResult","source","regexpToRegexp","paths","parts","arrayToRegexp","History","queue","clearQueue","currentQueue","routerQueue","clearRouterQueue","pop","stateUrl","action","browserHistoryAnimate","browserHistory","navigate","handle","blockPopstate","state","previousState","allowChange","views","view","viewState","allowPageChange","initViewState","viewId","newState","substr","readyState","SwipeBack","$navbarsEl","isTouched","touchesStart","viewContainerWidth","touchesDiff","touchStartTime","dynamicNavbar","$pageShadowEl","$pageOpacityEl","animatableNavEls","$currentPageEl","$previousPageEl","allowViewTouchMove","$currentNavbarEl","$previousNavbarEl","paramsSwipeBackAnimateShadow","paramsSwipeBackAnimateOpacity","paramsSwipeBackActiveArea","paramsSwipeBackThreshold","transformOrigin","transformOriginTitleLarge","setAnimatableNavElements","transition","reflow","_clientLeft","classNameSet","styleProp","handleTouchStart","swipeBackEnabled","swipeout","masterDetailBreakpoint","handleTouchMove","f7PreventSwipeBack","preventSwipeBack","cancel","find","notFromBorder","inverter","currentNavIsTransparent","currentNavIsLarge","currentNavIsCollapsed","currentNavIsLargeTransparent","previousNavIsTransparent","previousNavIsLarge","previousNavIsCollapsed","previousNavIsLargeTransparent","fromLarge","toLarge","$currentNavElements","$previousNavElements","activeNavBackIconText","previousNavBackIconText","iosAnimateNavbarBackIcon","f7NavbarLeftOffset","navEl","$navEl","isSubnavbar","isLeft","isTitle","isBg","overflow","subNavEl","opacity","transform-origin","isSliding","transformTarget","textEl","activeNavTranslate","f7NavbarRightOffset","previousNavTranslate","animatableNavElements","sheet","f7PreventSwipePanel","preventSwipePanelBySwipeBack","percentage","callbackData","currentPageEl","previousPageEl","currentNavbarEl","previousNavbarEl","currentPageTranslate","previousPageTranslate","swipeBackActive","handleTouchEnd","$pages","timeDiff","pageChanged","removeAttr","setNavbarPosition","currentRoute","f7Page","currentPage","pageCallback","swipeBack","transitionEnd","saveHistory","stackPages","initialPages","removePage","removeNavbar","previousRoute","preloadPreviousPage","preload","attachEvents","redirect","direction","initial","redirectUrl","redirectOptions","processQueue","routeQueue","processRouteQueue","enterNextRoute","routesBeforeEnter","beforeEnter","routesBeforeLeave","beforeLeave","appRouterCheck","asyncComponent","resolvePromise","componentPromise","default","_default","asyncComponentResult","forward","forwardOptions","reloadCurrent","reloadPages","reloadPrevious","reloadAll","clearPreviousHistory","reloadDetail","masterDetailEnabled","isMaster","master","masterPageEl","otherDetailPageEl","modalType","detailsInBetweenRemoved","currentRouteIsModal","modal","modalLoadProp","modalToClose","modalInstance","previousUrl","findMatchingRoute","modalRemove","$viewEl","$newPage","reload","$oldPage","$newNavbarEl","$oldNavbarEl","removeThemeElements","$navbarEl","keepAlive","keepAliveData","pageEl","$pagesInView","pageInView","$navbarsInView","isDetail","isDetailRoot","navbarInView","newPagePosition","position","role","root","detailRoot","navbar","getElByPage","navbarEl","removedPageEls","removedNavbarEls","oldNavbarEl","browserHistoryRoot","browserHistorySeparator","newPageInDom","componentEl","f7PageMounted","$oldPageEl","$oldNavbarElEl","tab","tabLoad","checkMasterDetailBreakpoint","setPagePosition","afterAnimation","keepOldPage","setPositionClasses","f7PageTransition","load","loadParams","loadOptions","ignorePageChange","pageName","parentPath","sameParams","paramName","allowDuplicateUrls","parseRouteUrl","getPageEl","pageComponentLoader","routerEl","newOptions","xhrAbortController","xhrRequest","pageContent","backward","backwardOptions","masterPageRemoved","initialPreload","currentIsMaster","backIndex","masterRoute","force","pageToRemove","$pageToRemove","$navbarToRemove","insertPage","$previousPages","loadBack","backParams","backOptions","Router","isAppRouter","routerId","scrollHistory","iosDynamicNavbar","initialNavbars","configurable","newRoute","tempDom","navbarsEl","animateIcon","newNavEls","oldNavEls","animatableNavEl","$navbarInner","needsOpacityTransition","$iconEl","isIconLabel","leftOffset","rightOffset","navEls","otherEls","otherNavEl","iconTextEl","offsetLeft","$newPageEl","animateCustom","routerCustomTransitionClass","onCustomTransitionDone","animationEnd","routerTransitionClass","toDifferent","oldIsLarge","newIsLarge","animateNavbars","setProperty","removeModal","removeEl","removeTabContent","tabEl","tabChild","removeElements","removeElementsWithTimeout","removeElementsTimeout","findElement","stringSelector","notStacked","$container","viewMainClass","flattenRoutes","flattenedRoutes","hasTabRoutes","tabs","mergedPathsRoutes","tabRoute","tRoute","concat","detailRoutes","detailRoute","dRoute","masterRoutePath","childRoute","cRoute","generateUrl","findRouteByKey","constructRouteUrl","toUrl","findTabRouteUrl","$tabEl","tabId","foundTabRouteUrl","matchingRoute","pathsToMatch","matched","alias","aliasPath","pathToMatch","keyObj","paramValue","replaceRequestUrlParams","compiledUrl","regExp","removeFromXhrCache","xhrCache","ignoreCache","hasQuery","passRouteQueryToRequest","passRouteParamsToRequest","xhrCacheIgnoreGetParameters","xhrCacheIgnore","cachedUrl","xhrCacheDuration","beforeSend","ariaHidden","toRemove","getPageData","pageFromEl","$pageEl","pageFrom","fromPage","$pageFromEl","page","restoreScrollTopOnBack","camelName","colonName","f7RouteEventsAttached","f7RouteEventsOn","f7RouteEventsOnce","$pageContent","pageContentEl","f7PageInitialized","browserHistoryStoreHistory","localStorage","restoreHistory","clearHistory","updateCurrentUrl","newUrl","getInitialUrl","initialUrl","historyRestored","URL","documentUrl","browserHistoryOnLoad","console","warn","iosSwipeBack","mdSwipeBack","auroraSwipeBack","browserHistoryAnimateOnLoad","browserHistoryInitialMatch","initUrl","loadInitialPage","modalOpen","pageAfterIn","hasTabRoute","initOptions","routerProp","navigateParams","navigateOptions","createRoute","navigateUrl","currentPath","viewName","anotherViewName","anotherView","openIn","ignoreOpenIn","routerLoaded","asyncResolve","resolveParams","resolveOptions","resolvedAsModal","modalRoute","modalLoad","asyncReject","pageLoadProp","preloadMaster","masterLoaded","refreshPage","parentPageEl","browserHistoryTabs","$parentPageEl","tabShowResult","show","$newTabEl","$oldTabEl","animated","onTabsChanged","tabParentPageData","f7RouterTabLoaded","loadTab","loadTabParams","loadTabOptions","contentEl","tabEventTarget","unloadTabContent","tabRemove","onTabLoaded","tabComponentLoader","tabContent","hasContentLoadProp","tabLoadProp","hasTabComponentChild","isPanel","modalOrPanel","modalParams","routeCallback","panelOpen","modalClose","panelClose","modalClosed","panelClosed","onModalLoaded","hasEl","closeOnSwipeBack","closeByRouter","modalComponent","loadModal","loadModalParams","loadModalOptions","modalComponentLoader","modalContent","foundLoadProp","prevOpenedModals","forceOtherUrl","isBrokenBrowserHistory","needHistoryBack","currentRouteWithoutBrowserHistory","skipMaster","$previousPage","$previousMaster","expectedPreviousPageUrl","expectedPreviousPageRoute","previousPageRoute","backForceLoaded","panel","clearPreviousPages","RouterModule","templates","resizableView","resizableInitialized","resizable","resizableWidth","$htmlEl","$resizeHandlerEl","minWidth","maxWidth","transformCSSWidth","v","newV","$pageMasterEl","newWidth","handleResize","View","viewParams","routesAdd","main","f7View","viewProp","wasMasterDetail","isMasterDetail","initMasterDetail","masterDetailResizable","viewEl","ClicksModule","clicks","externalLinks","$clickedEl","$clickedLinkEl","isLink","InAppBrowser","Plugins","Browser","moduleClicks","preventF7Router","clickSelector","matchingClickedElement","clickedLinkData","clickedEl","current","linksView","ViewClass","f7RouteProps","initClicks","RouterComponentLoaderModule","popup","loginScreen","popover","side","effect","componentFunction","componentContext","f7route","f7router","componentProps","routeProps","componentRoot","createdComponent","cachedComponent","componentCache","cached","loadedComponent","parsedComponent","u","p","Map","ignoreChildren","$h","sel","elm","array","primitive","addNS","ns","childData","is.array","is.primitive","customComponents","SELF_CLOSING","PROPS_ATTRS","BOOLEAN_PROPS","getTagName","treeNode","propsFromAttrs","word","isCustomComponent","treeNodeType","getHooks","isRoot","hooks","insert","update","postpatch","isFakeElement","tagName","isCustom","__component__","createCustomComponent","destroyCustomComponent","oldVnode","newProps","updateCustomComponent","class","vn","f","getChildren","nodes","childNode","treeNodeToVNode","isTreeNode","slotName","slotNodes","childTreeNode","childSlotName","slot","subTreeNode","getSlots","attrValue","prevent","eventNamePart","eventNameIndex","fired","getEventHandler","prepatch","getData","vdom","tree","htmlDomApi","namespaceURI","qualifiedName","createTextNode","createComment","newNode","referenceNode","node","setTextContent","getTextContent","isElement","isUndef","isDef","emptyNode","sameVnode","vnode1","vnode2","createKeyToOldIdx","beginIdx","endIdx","ch","updateAttrs","oldAttrs","cur","setAttributeNS","attributesModule","updateProps","oldProps","propsModule","raf","setNextFrame","updateStyle","oldStyle","oldHasDel","removeProperty","delayed","name2","updateEvents","oldOn","oldListener","oldElm","invokeHandler","patch","domApi","cbs","api","emptyNodeAt","createRmCb","childElm","listeners","parent_1","createElm","insertedVnodeQueue","hashIdx","dotIdx","dot","tag","addVnodes","parentElm","vnodes","startIdx","invokeDestroyHook","removeVnodes","i_1","rm","patchVnode","oldCh","newCh","oldKeyToIdx","idxInOld","elmToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","updateChildren","pre","isVnode","amount","applied","ev","Component","generateId","md","aurora","__updateQueue","__eventHandlers","__onceEventHandlers","__onBeforeMount","__onMounted","__onBeforeUpdate","__onUpdated","__onBeforeUnmount","__onUnmounted","createComponent","getComponentContext","componentResult","getRenderFuncion","renderFunction","getComponentRef","getComponentStore","_gettersPlain","dispatch","$store","getters","Proxy","onUpdated","includeHooks","ctx","$f7route","$f7router","$id","$f7","$f7ready","f7ready","$theme","$tick","tick","$update","$emit","$ref","$on","$once","$onBeforeMount","$onMounted","$onBeforeUpdate","$onUpdated","$onBeforeUnmount","$onUnmounted","detachEvents","startUpdateQueue","__requestAnimationFrameId","newVNode","__updateIsPending","resolvers","resolver","__destroyed","setState","mountMethod","registerComponent","unregisterComponent","ComponentModule","componentString","componentId","callbackCreateName","template","item","scripts","parseComponent","HistoryModule","SW","registrations","register","scope","serviceWorker","reg","unregister","registration","ServiceWorkerModule","storeParams","originalState","actions","propsQueue","gettersDependencies","gettersCallbacks","getterKey","getGetterValue","addGetterCallback","__removeCallback","stateKey","callbacks","removeGetterCallback","getterValue","addCallback","deps","dep","addGetterDependencies","__callback","actionName","StoreModule","isCapacitor","StatusBar","Statusbar","hide","onClick","setTextColor","color","styleLightContent","styleDefault","setStyle","setBackgroundColor","backgroundColorByHexString","isVisible","getInfo","info","visible","overlaysWebView","overlays","setOverlaysWebView","overlay","statusbar","enabled","isCordova","isCap","scrollTopOnClick","iosOverlaysWebView","iosTextColor","androidOverlaysWebView","androidTextColor","iosBackgroundColor","androidBackgroundColor","Statusbar$1","iosSwipeBackAnimateShadow","iosSwipeBackAnimateOpacity","iosSwipeBackActiveArea","iosSwipeBackThreshold","mdSwipeBackAnimateShadow","mdSwipeBackAnimateOpacity","mdSwipeBackActiveArea","mdSwipeBackThreshold","auroraSwipeBackAnimateShadow","auroraSwipeBackAnimateOpacity","auroraSwipeBackActiveArea","auroraSwipeBackThreshold","iosPageLoadDelay","mdPageLoadDelay","auroraPageLoadDelay","$popoverView","$popupView","$panelView","$viewsEl","getCurrentView","modalOpen panelOpen","modalBeforeDestroy panelBeforeDestroy","view-init","Navbar","size","$innerEl","needCenterTitle","needLeftTitle","iosCenterTitle","right","title","subnavbar","noLeft","noRight","leftWidth","outerWidth","rightWidth","titleWidth","navbarStyles","navbarInnerWidth","paddingLeft","paddingRight","isPrevious","sliding","currLeft","diff","requiredLeft","titleLeftOffset","titleRightOffset","activeNavbarBackLink","titleLeft","hideStatusbar","hideOnlyCurrent","isDynamic","subEl","pageData","getPageByEl","collapseLargeTitle","expandLargeTitle","toggleLargeTitle","initNavbarOnScroll","needHide","needCollapse","needTransparent","$titleLargeEl","isLarge","navbarHideHeight","snapPageScrollToLargeTitle","snapPageScrollToTransparentNavbar","previousScrollTop","currentScrollTop","reachEnd","navbarHidden","navbarCollapsed","navbarTitleLargeHeight","navbarOffsetHeight","scrollChanged","scrollContent","scrollTimeoutId","touchEndTimeoutId","calcScrollableDistance","f7ScrollableDistance","snapLargeNavbar","snapTransparentNavbar","previousCollapseProgress","collapseProgress","handleScroll","isLargeTransparent","scrollableDistance","previousCollapseWasInMiddle","handleLargeNavbarCollapse","isHidden","notTransparent","handleNavbarTransparent","showOnPageScrollEnd","showOnPageScrollTop","handeTouchStart","f7DetachNavbarScrollHandlers","Navbar$1","scrollTopOnTitleClick","mdCenterTitle","auroraCenterTitle","hideOnPageScroll","collapseLargeTitleOnScroll","panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint","pageBeforeRemove","pageBeforeIn","pageReinit","pageInit","needCollapseOnScrollHandler","needTransparentOnScroll","needHideOnScrollHandler","panelOpen panelSwipeOpen modalOpen","tabShow",".navbar .title","clickedData","$pageContentEl","Toolbar","setHighlight","tabbarEl","$tabbarEl","$highlightEl","tabLinksCount","$activeLink","highlightWidth","highlightTranslate","activeIndex","toolbar","initToolbarOnScroll","toolbarHidden","$toolbarEl","f7ScrollToolbarHandler","Toolbar$1","tabbar","Subnavbar","subnavbarEl","TouchRipple","ripple","center","diameter","isInset","insetElements","rippleTransform","scale","$rippleWaveEl","shouldBeRemoved","out","removeTimeout","openedModals","dialogsQueue","Modal","opened","$containerEl","containerEl","onOpen","onOpened","onClose","onClosed","backdrop","backdropUnique","forceBackdropUnique","$backdropEl","animateModal","queueDialogs","pushToQueue","openedModal","$modalParentEl","wasInDom","needToHideBackdrop","popupEl","popupInstance","closeByBackdropClick","backdropEl","clearDialogsQueue","destroyed","CustomModal","extendedParams","customModal","handleClick"],"mappings":"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","file":"framework7.min.js","sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","// eslint-disable-next-line\nimport * as methods from 'dom7';\n\nObject.keys(methods).forEach((methodName) => {\n if (methodName === '$') return;\n methods.$.fn[methodName] = methods[methodName];\n});\n\nexport default methods.$;\n","import { getWindow } from 'ssr-window';\n\nlet uniqueNum = 0;\nexport function uniqueNumber() {\n uniqueNum += 1;\n return uniqueNum;\n}\nexport function id(mask = 'xxxxxxxxxx', map = '0123456789abcdef') {\n const length = map.length;\n return mask.replace(/x/g, () => map[Math.floor(Math.random() * length)]);\n}\nexport const mdPreloaderContent = `\n <span class=\"preloader-inner\">\n <svg viewBox=\"0 0 36 36\">\n <circle cx=\"18\" cy=\"18\" r=\"16\"></circle>\n </svg>\n </span>\n`.trim();\n\nexport const iosPreloaderContent = `\n <span class=\"preloader-inner\">\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(() => '<span class=\"preloader-inner-line\"></span>').join('')}\n </span>\n`.trim();\n\nexport const auroraPreloaderContent = `\n <span class=\"preloader-inner\">\n <span class=\"preloader-inner-circle\"></span>\n </span>\n`;\nexport function eventNameToColonCase(eventName) {\n let hasColon;\n return eventName\n .split('')\n .map((char, index) => {\n if (char.match(/[A-Z]/) && index !== 0 && !hasColon) {\n hasColon = true;\n return `:${char.toLowerCase()}`;\n }\n return char.toLowerCase();\n })\n .join('');\n}\nexport function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no setter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nexport function requestAnimationFrame(callback) {\n const window = getWindow();\n return window.requestAnimationFrame(callback);\n}\nexport function cancelAnimationFrame(frameId) {\n const window = getWindow();\n return window.cancelAnimationFrame(frameId);\n}\nexport function nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nexport function nextFrame(callback) {\n return requestAnimationFrame(() => {\n requestAnimationFrame(callback);\n });\n}\nexport function now() {\n return Date.now();\n}\n\nexport function parseUrlQuery(url) {\n const window = getWindow();\n const query = {};\n let urlToParse = url || window.location.href;\n let i;\n let params;\n let param;\n let length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] =\n typeof param[1] === 'undefined'\n ? undefined\n : decodeURIComponent(param.slice(1).join('=')) || '';\n }\n }\n return query;\n}\nexport function getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = window.getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform\n .split(', ')\n .map((a) => a.replace(',', '.'))\n .join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix =\n curStyle.MozTransform ||\n curStyle.OTransform ||\n curStyle.MsTransform ||\n curStyle.msTransform ||\n curStyle.transform ||\n curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nexport function serializeObject(obj, parents = []) {\n if (typeof obj === 'string') return obj;\n const resultArray = [];\n const separator = '&';\n let newParents;\n function varName(name) {\n if (parents.length > 0) {\n let parentParts = '';\n for (let j = 0; j < parents.length; j += 1) {\n if (j === 0) parentParts += parents[j];\n else parentParts += `[${encodeURIComponent(parents[j])}]`;\n }\n return `${parentParts}[${encodeURIComponent(name)}]`;\n }\n return encodeURIComponent(name);\n }\n function varValue(value) {\n return encodeURIComponent(value);\n }\n Object.keys(obj).forEach((prop) => {\n let toPush;\n if (Array.isArray(obj[prop])) {\n toPush = [];\n for (let i = 0; i < obj[prop].length; i += 1) {\n if (!Array.isArray(obj[prop][i]) && typeof obj[prop][i] === 'object') {\n newParents = parents.slice();\n newParents.push(prop);\n newParents.push(String(i));\n toPush.push(serializeObject(obj[prop][i], newParents));\n } else {\n toPush.push(`${varName(prop)}[]=${varValue(obj[prop][i])}`);\n }\n }\n if (toPush.length > 0) resultArray.push(toPush.join(separator));\n } else if (obj[prop] === null || obj[prop] === '') {\n resultArray.push(`${varName(prop)}=`);\n } else if (typeof obj[prop] === 'object') {\n // Object, convert to named array\n newParents = parents.slice();\n newParents.push(prop);\n toPush = serializeObject(obj[prop], newParents);\n if (toPush !== '') resultArray.push(toPush);\n } else if (typeof obj[prop] !== 'undefined' && obj[prop] !== '') {\n // Should be string or plain value\n resultArray.push(`${varName(prop)}=${varValue(obj[prop])}`);\n } else if (obj[prop] === '') resultArray.push(varName(prop));\n });\n return resultArray.join(separator);\n}\nexport function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\nexport function merge(...args) {\n const to = args[0];\n args.splice(0, 1);\n const from = args;\n\n for (let i = 0; i < from.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\nexport function extend(...args) {\n let deep = true;\n let to;\n let from;\n if (typeof args[0] === 'boolean') {\n deep = args[0];\n to = args[1];\n args.splice(0, 2);\n from = args;\n } else {\n to = args[0];\n args.splice(0, 1);\n from = args;\n }\n for (let i = 0; i < from.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (!deep) {\n to[nextKey] = nextSource[nextKey];\n } else if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n extend(to[nextKey], nextSource[nextKey]);\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nexport function colorHexToRgb(hex) {\n const h = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => r + r + g + g + b + b);\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(h);\n return result ? result.slice(1).map((n) => parseInt(n, 16)) : null;\n}\nexport function colorRgbToHex(r, g, b) {\n const result = [r, g, b]\n .map((n) => {\n const hex = n.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n })\n .join('');\n return `#${result}`;\n}\nexport function colorRgbToHsl(r, g, b) {\n r /= 255; // eslint-disable-line\n g /= 255; // eslint-disable-line\n b /= 255; // eslint-disable-line\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n let h;\n if (d === 0) h = 0;\n else if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else if (max === b) h = (r - g) / d + 4;\n const l = (min + max) / 2;\n const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));\n if (h < 0) h = 360 / 60 + h;\n return [h * 60, s, l];\n}\nexport function colorHslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hp = h / 60;\n const x = c * (1 - Math.abs((hp % 2) - 1));\n let rgb1;\n if (Number.isNaN(h) || typeof h === 'undefined') {\n rgb1 = [0, 0, 0];\n } else if (hp <= 1) rgb1 = [c, x, 0];\n else if (hp <= 2) rgb1 = [x, c, 0];\n else if (hp <= 3) rgb1 = [0, c, x];\n else if (hp <= 4) rgb1 = [0, x, c];\n else if (hp <= 5) rgb1 = [x, 0, c];\n else if (hp <= 6) rgb1 = [c, 0, x];\n const m = l - c / 2;\n return rgb1.map((n) => Math.max(0, Math.min(255, Math.round(255 * (n + m)))));\n}\nexport function colorHsbToHsl(h, s, b) {\n const HSL = {\n h,\n s: 0,\n l: 0,\n };\n const HSB = { h, s, b };\n\n HSL.l = ((2 - HSB.s) * HSB.b) / 2;\n HSL.s = HSL.l && HSL.l < 1 ? (HSB.s * HSB.b) / (HSL.l < 0.5 ? HSL.l * 2 : 2 - HSL.l * 2) : HSL.s;\n\n return [HSL.h, HSL.s, HSL.l];\n}\nexport function colorHslToHsb(h, s, l) {\n const HSB = {\n h,\n s: 0,\n b: 0,\n };\n const HSL = { h, s, l };\n\n const t = HSL.s * (HSL.l < 0.5 ? HSL.l : 1 - HSL.l);\n HSB.b = HSL.l + t;\n HSB.s = HSL.l > 0 ? (2 * t) / HSB.b : HSB.s;\n\n return [HSB.h, HSB.s, HSB.b];\n}\nexport function colorThemeCSSProperties(...args) {\n let hex;\n let rgb;\n if (args.length === 1) {\n hex = args[0];\n rgb = colorHexToRgb(hex);\n } else if (args.length === 3) {\n rgb = args;\n hex = colorRgbToHex(...rgb);\n }\n if (!rgb) return {};\n const hsl = colorRgbToHsl(...rgb);\n const hslShade = [hsl[0], hsl[1], Math.max(0, hsl[2] - 0.08)];\n const hslTint = [hsl[0], hsl[1], Math.max(0, hsl[2] + 0.08)];\n const shade = colorRgbToHex(...colorHslToRgb(...hslShade));\n const tint = colorRgbToHex(...colorHslToRgb(...hslTint));\n return {\n '--f7-theme-color': hex,\n '--f7-theme-color-rgb': rgb.join(', '),\n '--f7-theme-color-shade': shade,\n '--f7-theme-color-tint': tint,\n };\n}\n\nexport function bindMethods(instance, obj) {\n Object.keys(obj).forEach((key) => {\n if (isObject(obj[key])) {\n Object.keys(obj[key]).forEach((subKey) => {\n if (typeof obj[key][subKey] === 'function') {\n obj[key][subKey] = obj[key][subKey].bind(instance);\n }\n });\n }\n instance[key] = obj[key];\n });\n}\n\nexport function flattenArray(...args) {\n const arr = [];\n args.forEach((arg) => {\n if (Array.isArray(arg)) arr.push(...flattenArray(...arg));\n else arr.push(arg);\n });\n return arr;\n}\n","import { getWindow, getDocument } from 'ssr-window';\n\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n\n return {\n touch: !!(\n 'ontouchstart' in window ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)\n ),\n\n pointerEvents:\n !!window.PointerEvent &&\n 'maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints >= 0,\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n })(),\n\n intersectionObserver: (function checkObserver() {\n return 'IntersectionObserver' in window;\n })(),\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nexport { getSupport };\n","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\n\nlet deviceCalculated;\n\nfunction calcDevice({ userAgent } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n iphone: false,\n ipod: false,\n ipad: false,\n edge: false,\n ie: false,\n firefox: false,\n macos: false,\n windows: false,\n cordova: !!window.cordova,\n electron: false,\n capacitor: !!window.Capacitor,\n nwjs: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS|iPhone;\\sCPU\\sOS)\\s([\\d_]+)/);\n const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n const edge = ua.indexOf('Edge/') >= 0;\n const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n const windows = platform === 'Win32';\n const electron = ua.toLowerCase().indexOf('electron') >= 0;\n const nwjs =\n typeof nw !== 'undefined' &&\n typeof process !== 'undefined' &&\n typeof process.versions !== 'undefined' &&\n typeof process.versions.nw !== 'undefined';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810',\n ];\n if (\n !ipad &&\n macos &&\n support.touch &&\n iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n device.ie = ie;\n device.edge = edge;\n device.firefox = firefox;\n\n // Android\n if (android) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.ipod = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Webview\n device.webView =\n !!(\n (iphone || ipad || ipod) &&\n (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone)\n ) ||\n (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n device.webview = device.webView;\n device.standalone = device.webView;\n\n // Desktop\n device.desktop = !(device.ios || device.android) || electron || nwjs;\n if (device.desktop) {\n device.electron = electron;\n device.nwjs = nwjs;\n device.macos = macos;\n device.windows = windows;\n if (device.macos) {\n device.os = 'macos';\n }\n if (device.windows) {\n device.os = 'windows';\n }\n }\n\n // Pixel Ratio\n device.pixelRatio = window.devicePixelRatio || 1;\n\n // Color Scheme\n const DARK = '(prefers-color-scheme: dark)';\n const LIGHT = '(prefers-color-scheme: light)';\n device.prefersColorScheme = function prefersColorTheme() {\n let theme;\n if (window.matchMedia && window.matchMedia(LIGHT).matches) {\n theme = 'light';\n }\n if (window.matchMedia && window.matchMedia(DARK).matches) {\n theme = 'dark';\n }\n return theme;\n };\n\n // Export object\n return device;\n}\n\nfunction getDevice(overrides = {}, reset) {\n if (!deviceCalculated || reset) {\n deviceCalculated = calcDevice(overrides);\n }\n return deviceCalculated;\n}\n\nexport { getDevice };\n","class EventsClass {\n constructor(parents = []) {\n const self = this;\n self.eventsParents = parents;\n self.eventsListeners = {};\n }\n\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n }\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n handler.apply(self, args);\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n }\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (\n eventHandler === handler ||\n (eventHandler.f7proxy && eventHandler.f7proxy === handler)\n ) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n }\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n let eventsParents;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n eventsParents = self.eventsParents;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n eventsParents = args[0].local ? [] : args[0].parents || self.eventsParents;\n }\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n const localEvents = eventsArray.map((eventName) => eventName.replace('local::', ''));\n const parentEvents = eventsArray.filter((eventName) => eventName.indexOf('local::') < 0);\n\n localEvents.forEach((event) => {\n if (self.eventsListeners && self.eventsListeners[event]) {\n const handlers = [];\n self.eventsListeners[event].forEach((eventHandler) => {\n handlers.push(eventHandler);\n });\n handlers.forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n if (eventsParents && eventsParents.length > 0) {\n eventsParents.forEach((eventsParent) => {\n eventsParent.emit(parentEvents, ...data);\n });\n }\n return self;\n }\n}\n\nexport default EventsClass;\n","import { extend, now } from './utils.js';\nimport EventsClass from './events-class.js';\n\nclass Framework7Class extends EventsClass {\n constructor(params = {}, parents = []) {\n super(parents);\n const self = this;\n self.params = params;\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach((eventName) => {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n }\n\n // eslint-disable-next-line\n useModuleParams(module, instanceParams) {\n if (module.params) {\n const originalParams = {};\n Object.keys(module.params).forEach((paramKey) => {\n if (typeof instanceParams[paramKey] === 'undefined') return;\n originalParams[paramKey] = extend({}, instanceParams[paramKey]);\n });\n extend(instanceParams, module.params);\n Object.keys(originalParams).forEach((paramKey) => {\n extend(instanceParams[paramKey], originalParams[paramKey]);\n });\n }\n }\n\n useModulesParams(instanceParams) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n extend(instanceParams, module.params);\n }\n });\n }\n\n useModule(moduleName = '', moduleParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n const module = typeof moduleName === 'string' ? instance.modules[moduleName] : moduleName;\n if (!module) return;\n\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach((modulePropName) => {\n const moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach((moduleEventName) => {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n // Add vnode hooks\n if (module.vnode) {\n if (!instance.vnodeHooks) instance.vnodeHooks = {};\n Object.keys(module.vnode).forEach((vnodeId) => {\n Object.keys(module.vnode[vnodeId]).forEach((hookName) => {\n const handler = module.vnode[vnodeId][hookName];\n if (!instance.vnodeHooks[hookName]) instance.vnodeHooks[hookName] = {};\n if (!instance.vnodeHooks[hookName][vnodeId]) instance.vnodeHooks[hookName][vnodeId] = [];\n instance.vnodeHooks[hookName][vnodeId].push(handler.bind(instance));\n });\n });\n }\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n }\n\n useModules(modulesParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const moduleParams = modulesParams[moduleName] || {};\n instance.useModule(moduleName, moduleParams);\n });\n }\n\n static set components(components) {\n const Class = this;\n if (!Class.use) return;\n Class.use(components);\n }\n\n static installModule(module, ...params) {\n const Class = this;\n if (!Class.prototype.modules) Class.prototype.modules = {};\n const name = module.name || `${Object.keys(Class.prototype.modules).length}_${now()}`;\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach((key) => {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach((key) => {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n }\n\n static use(module, ...params) {\n const Class = this;\n if (Array.isArray(module)) {\n module.forEach((m) => Class.installModule(m));\n return Class;\n }\n return Class.installModule(module, ...params);\n }\n}\n\nexport default Framework7Class;\n","import $ from './dom7.js';\n\nexport default function ConstructorMethods(parameters = {}) {\n const { defaultSelector, constructor: Constructor, domProp, app, addMethods } = parameters;\n const methods = {\n create(...args) {\n if (app) return new Constructor(app, ...args);\n return new Constructor(...args);\n },\n get(el = defaultSelector) {\n if (el instanceof Constructor) return el;\n const $el = $(el);\n if ($el.length === 0) return undefined;\n return $el[0][domProp];\n },\n destroy(el) {\n const instance = methods.get(el);\n if (instance && instance.destroy) return instance.destroy();\n return undefined;\n },\n };\n if (addMethods && Array.isArray(addMethods)) {\n addMethods.forEach((methodName) => {\n methods[methodName] = (el = defaultSelector, ...args) => {\n const instance = methods.get(el);\n if (instance && instance[methodName]) return instance[methodName](...args);\n return undefined;\n };\n });\n }\n return methods;\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport { id } from '../../shared/utils.js';\nimport $ from '../../shared/dom7.js';\n\nconst fetchedModules = [];\nfunction loadModule(moduleToLoad) {\n const Framework7 = this;\n const window = getWindow();\n const document = getDocument();\n return new Promise((resolve, reject) => {\n const app = Framework7.instance;\n let modulePath;\n let moduleObj;\n let moduleFunc;\n if (!moduleToLoad) {\n reject(new Error('Framework7: Lazy module must be specified'));\n return;\n }\n\n function install(module) {\n Framework7.use(module);\n\n if (app) {\n app.useModuleParams(module, app.params);\n app.useModule(module);\n }\n }\n\n if (typeof moduleToLoad === 'string') {\n const matchNamePattern = moduleToLoad.match(/([a-z0-9-]*)/i);\n if (\n moduleToLoad.indexOf('.') < 0 &&\n matchNamePattern &&\n matchNamePattern[0].length === moduleToLoad.length\n ) {\n if (!app || (app && !app.params.lazyModulesPath)) {\n reject(\n new Error(\n 'Framework7: \"lazyModulesPath\" app parameter must be specified to fetch module by name',\n ),\n );\n return;\n }\n modulePath = `${app.params.lazyModulesPath}/${moduleToLoad}/${moduleToLoad}.lazy.js`;\n } else {\n modulePath = moduleToLoad;\n }\n } else if (typeof moduleToLoad === 'function') {\n moduleFunc = moduleToLoad;\n } else {\n // considering F7-Plugin object\n moduleObj = moduleToLoad;\n }\n\n if (moduleFunc) {\n const module = moduleFunc(Framework7, false);\n if (!module) {\n reject(\n new Error(\"Framework7: Can't find Framework7 component in specified component function\"),\n );\n return;\n }\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolve();\n return;\n }\n // Install It\n install(module);\n\n resolve();\n }\n if (moduleObj) {\n const module = moduleObj;\n if (!module) {\n reject(new Error(\"Framework7: Can't find Framework7 component in specified component\"));\n return;\n }\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolve();\n return;\n }\n // Install It\n install(module);\n\n resolve();\n }\n if (modulePath) {\n if (fetchedModules.indexOf(modulePath) >= 0) {\n resolve();\n return;\n }\n fetchedModules.push(modulePath);\n const scriptLoad = new Promise((resolveScript, rejectScript) => {\n Framework7.request.get(\n modulePath,\n (scriptContent) => {\n const callbackId = id();\n const callbackLoadName = `f7_component_loader_callback_${callbackId}`;\n\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = `window.${callbackLoadName} = function (Framework7, Framework7AutoInstallComponent) {return ${scriptContent.trim()}}`;\n $('head').append(scriptEl);\n\n const componentLoader = window[callbackLoadName];\n delete window[callbackLoadName];\n $(scriptEl).remove();\n\n const module = componentLoader(Framework7, false);\n\n if (!module) {\n rejectScript(\n new Error(`Framework7: Can't find Framework7 component in ${modulePath} file`),\n );\n return;\n }\n\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolveScript();\n return;\n }\n\n // Install It\n install(module);\n\n resolveScript();\n },\n (xhr, status) => {\n rejectScript(xhr, status);\n },\n );\n });\n const styleLoad = new Promise((resolveStyle) => {\n Framework7.request.get(\n modulePath\n .replace('.lazy.js', app.rtl ? '.rtl.css' : '.css')\n .replace('.js', app.rtl ? '.rtl.css' : '.css'),\n (styleContent) => {\n const styleEl = document.createElement('style');\n styleEl.innerHTML = styleContent;\n $('head').append(styleEl);\n\n resolveStyle();\n },\n () => {\n resolveStyle();\n },\n );\n });\n\n Promise.all([scriptLoad, styleLoad])\n .then(() => {\n resolve();\n })\n .catch((err) => {\n reject(err);\n });\n }\n });\n}\n\nexport default loadModule;\n","/* eslint-disable no-underscore-dangle */\n\nimport { getWindow, getDocument } from 'ssr-window';\nimport { extend, nextFrame } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport Framework7Class from '../../shared/class.js';\nimport EventsClass from '../../shared/events-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nimport $ from '../../shared/dom7.js';\nimport loadModule from './load-module.js';\n\nclass Framework7 extends Framework7Class {\n constructor(params = {}) {\n super(params);\n // eslint-disable-next-line\n if (Framework7.instance && typeof window !== 'undefined') {\n throw new Error(\"Framework7 is already initialized and can't be initialized more than once\");\n }\n const device = getDevice({ userAgent: params.userAgent || undefined });\n const support = getSupport();\n\n const passedParams = extend({}, params);\n\n // App Instance\n const app = this;\n\n app.device = device;\n app.support = support;\n\n const w = getWindow();\n const d = getDocument();\n\n Framework7.instance = app;\n\n // Default\n const defaults = {\n version: '1.0.0',\n id: 'io.framework7.myapp',\n el: 'body',\n theme: 'auto',\n language: w.navigator.language,\n routes: [],\n name: 'Framework7',\n lazyModulesPath: null,\n initOnDeviceReady: true,\n init: true,\n autoDarkMode: false,\n iosTranslucentBars: true,\n iosTranslucentModals: true,\n component: undefined,\n componentUrl: undefined,\n userAgent: null,\n url: null,\n };\n\n // Extend defaults with modules params\n app.useModulesParams(defaults);\n\n // Extend defaults with passed params\n app.params = extend(defaults, params);\n\n extend(app, {\n // App Id\n id: app.params.id,\n // App Name\n name: app.params.name,\n // App version\n version: app.params.version,\n // Routes\n routes: app.params.routes,\n // Lang\n language: app.params.language,\n\n // Theme\n theme: (function getTheme() {\n if (app.params.theme === 'auto') {\n if (device.ios) return 'ios';\n if (device.desktop && device.electron) return 'aurora';\n return 'md';\n }\n return app.params.theme;\n })(),\n\n // Initially passed parameters\n passedParams,\n online: w.navigator.onLine,\n });\n\n if (params.store) app.params.store = params.store;\n\n // Save Root\n if (app.$el && app.$el[0]) {\n app.$el[0].f7 = app;\n }\n\n // Install Modules\n app.useModules();\n\n // Init Store\n app.initStore();\n\n // Init\n if (app.params.init) {\n if (device.cordova && app.params.initOnDeviceReady) {\n $(d).on('deviceready', () => {\n app.init();\n });\n } else {\n app.init();\n }\n }\n\n // Return app instance\n return app;\n }\n\n mount(rootEl) {\n const app = this;\n const window = getWindow();\n const document = getDocument();\n const $rootEl = $(rootEl || app.params.el).eq(0);\n app.$el = $rootEl;\n if (app.$el && app.$el[0]) {\n app.el = app.$el[0];\n app.el.f7 = app;\n app.rtl = $rootEl.css('direction') === 'rtl';\n }\n\n // Auto Dark Mode\n const DARK = '(prefers-color-scheme: dark)';\n const LIGHT = '(prefers-color-scheme: light)';\n app.mq = {};\n if (window.matchMedia) {\n app.mq.dark = window.matchMedia(DARK);\n app.mq.light = window.matchMedia(LIGHT);\n }\n app.colorSchemeListener = function colorSchemeListener({ matches, media }) {\n if (!matches) {\n return;\n }\n const html = document.querySelector('html');\n if (media === DARK) {\n html.classList.add('dark');\n app.darkMode = true;\n app.emit('darkModeChange', true);\n } else if (media === LIGHT) {\n html.classList.remove('dark');\n app.darkMode = false;\n app.emit('darkModeChange', false);\n }\n };\n app.emit('mount');\n }\n\n initStore() {\n const app = this;\n if (typeof app.params.store !== 'undefined' && app.params.store.__store) {\n app.store = app.params.store;\n } else {\n app.store = app.createStore(app.params.store);\n }\n }\n\n enableAutoDarkMode() {\n const window = getWindow();\n const document = getDocument();\n if (!window.matchMedia) return;\n const app = this;\n const html = document.querySelector('html');\n if (app.mq.dark && app.mq.light) {\n app.mq.dark.addListener(app.colorSchemeListener);\n app.mq.light.addListener(app.colorSchemeListener);\n }\n if (app.mq.dark && app.mq.dark.matches) {\n html.classList.add('dark');\n app.darkMode = true;\n app.emit('darkModeChange', true);\n } else if (app.mq.light && app.mq.light.matches) {\n html.classList.remove('dark');\n app.darkMode = false;\n app.emit('darkModeChange', false);\n }\n }\n\n disableAutoDarkMode() {\n const window = getWindow();\n if (!window.matchMedia) return;\n const app = this;\n if (app.mq.dark) app.mq.dark.removeListener(app.colorSchemeListener);\n if (app.mq.light) app.mq.light.removeListener(app.colorSchemeListener);\n }\n\n initAppComponent(callback) {\n const app = this;\n app.router.componentLoader(\n app.params.component,\n app.params.componentUrl,\n { componentOptions: { el: app.$el[0] } },\n (el) => {\n app.$el = $(el);\n app.$el[0].f7 = app;\n app.$elComponent = el.f7Component;\n app.el = app.$el[0];\n if (callback) callback();\n },\n () => {},\n );\n }\n\n init(rootEl) {\n const app = this;\n\n app.mount(rootEl);\n\n const init = () => {\n if (app.initialized) return;\n\n app.$el.addClass('framework7-initializing');\n\n // RTL attr\n if (app.rtl) {\n $('html').attr('dir', 'rtl');\n }\n\n // Auto Dark Mode\n if (app.params.autoDarkMode) {\n app.enableAutoDarkMode();\n }\n\n // Watch for online/offline state\n const window = getWindow();\n window.addEventListener('offline', () => {\n app.online = false;\n app.emit('offline');\n app.emit('connection', false);\n });\n window.addEventListener('online', () => {\n app.online = true;\n app.emit('online');\n app.emit('connection', true);\n });\n\n // Root class\n app.$el.addClass('framework7-root');\n\n // Theme class\n $('html').removeClass('ios md aurora').addClass(app.theme);\n\n // iOS Translucent\n const device = app.device;\n if (app.params.iosTranslucentBars && app.theme === 'ios' && device.ios) {\n $('html').addClass('ios-translucent-bars');\n }\n if (app.params.iosTranslucentModals && app.theme === 'ios' && device.ios) {\n $('html').addClass('ios-translucent-modals');\n }\n\n // Init class\n nextFrame(() => {\n app.$el.removeClass('framework7-initializing');\n });\n // Emit, init other modules\n app.initialized = true;\n app.emit('init');\n };\n if (app.params.component || app.params.componentUrl) {\n app.initAppComponent(() => {\n init();\n });\n } else {\n init();\n }\n return app;\n }\n\n // eslint-disable-next-line\n loadModule(...args) {\n return Framework7.loadModule(...args);\n }\n\n // eslint-disable-next-line\n loadModules(...args) {\n return Framework7.loadModules(...args);\n }\n\n getVnodeHooks(hook, id) {\n const app = this;\n if (!app.vnodeHooks || !app.vnodeHooks[hook]) return [];\n return app.vnodeHooks[hook][id] || [];\n }\n\n // eslint-disable-next-line\n get $() {\n return $;\n }\n\n static get Dom7() {\n return $;\n }\n\n static get $() {\n return $;\n }\n\n static get device() {\n return getDevice();\n }\n\n static get support() {\n return getSupport();\n }\n\n static get Class() {\n return Framework7Class;\n }\n\n static get Events() {\n return EventsClass;\n }\n}\n\nFramework7.ModalMethods = ModalMethods;\nFramework7.ConstructorMethods = ConstructorMethods;\n\nFramework7.loadModule = loadModule;\nFramework7.loadModules = function loadModules(modules) {\n return Promise.all(modules.map((module) => Framework7.loadModule(module)));\n};\n\nexport default Framework7;\n","import $ from './dom7.js';\nimport { extend } from './utils.js';\nimport ConstructorMethods from './constructor-methods.js';\n\nexport default function ModalMethods(parameters = {}) {\n const { defaultSelector, constructor: Constructor, app } = parameters;\n const methods = extend(\n ConstructorMethods({\n defaultSelector,\n constructor: Constructor,\n app,\n domProp: 'f7Modal',\n }),\n {\n open(el, animate, targetEl) {\n let $el = $(el);\n if ($el.length > 1 && targetEl) {\n // check if same modal in other page\n const $targetPage = $(targetEl).parents('.page');\n if ($targetPage.length) {\n $el.each((modalEl) => {\n const $modalEl = $(modalEl);\n if ($modalEl.parents($targetPage)[0] === $targetPage[0]) {\n $el = $modalEl;\n }\n });\n }\n }\n if ($el.length > 1) {\n $el = $el.eq($el.length - 1);\n }\n if (!$el.length) return undefined;\n let instance = $el[0].f7Modal;\n if (!instance) {\n const params = $el.dataset();\n instance = new Constructor(app, { el: $el, ...params });\n }\n return instance.open(animate);\n },\n close(el = defaultSelector, animate, targetEl) {\n let $el = $(el);\n if (!$el.length) return undefined;\n if ($el.length > 1) {\n // check if close link (targetEl) in this modal\n let $parentEl;\n if (targetEl) {\n const $targetEl = $(targetEl);\n if ($targetEl.length) {\n $parentEl = $targetEl.parents($el);\n }\n }\n if ($parentEl && $parentEl.length > 0) {\n $el = $parentEl;\n } else {\n $el = $el.eq($el.length - 1);\n }\n }\n let instance = $el[0].f7Modal;\n if (!instance) {\n const params = $el.dataset();\n instance = new Constructor(app, { el: $el, ...params });\n }\n return instance.close(animate);\n },\n },\n );\n return methods;\n}\n","import { getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\n\nexport default {\n name: 'device',\n static: {\n getDevice,\n },\n on: {\n init() {\n const document = getDocument();\n const device = getDevice();\n const classNames = [];\n const html = document.querySelector('html');\n const metaStatusbar = document.querySelector(\n 'meta[name=\"apple-mobile-web-app-status-bar-style\"]',\n );\n if (!html) return;\n if (\n device.standalone &&\n device.ios &&\n metaStatusbar &&\n metaStatusbar.content === 'black-translucent'\n ) {\n classNames.push('device-full-viewport');\n }\n\n // Pixel Ratio\n classNames.push(`device-pixel-ratio-${Math.floor(device.pixelRatio)}`);\n // OS classes\n if (device.os && !device.desktop) {\n classNames.push(`device-${device.os}`);\n } else if (device.desktop) {\n classNames.push('device-desktop');\n if (device.os) {\n classNames.push(`device-${device.os}`);\n }\n }\n if (device.cordova) {\n classNames.push('device-cordova');\n }\n if (device.capacitor) {\n classNames.push('device-capacitor');\n }\n\n // Add html classes\n classNames.forEach((className) => {\n html.classList.add(className);\n });\n },\n },\n};\n","import { getSupport } from '../../shared/get-support.js';\n\nexport default {\n name: 'support',\n static: {\n getSupport,\n },\n};\n","import * as utils from '../../shared/utils.js';\n\nexport default {\n name: 'utils',\n proto: {\n utils,\n },\n static: {\n utils,\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\n\nexport default {\n name: 'resize',\n create() {\n const app = this;\n app.getSize = () => {\n if (!app.el) return { width: 0, height: 0, left: 0, top: 0 };\n const offset = app.$el.offset();\n const [width, height, left, top] = [\n app.el.offsetWidth,\n app.el.offsetHeight,\n offset.left,\n offset.top,\n ];\n app.width = width;\n app.height = height;\n app.left = left;\n app.top = top;\n return { width, height, left, top };\n };\n },\n on: {\n init() {\n const app = this;\n const window = getWindow();\n\n // Get Size\n app.getSize();\n\n // Emit resize\n window.addEventListener(\n 'resize',\n () => {\n app.emit('resize');\n },\n false,\n );\n\n // Emit orientationchange\n window.addEventListener('orientationchange', () => {\n app.emit('orientationchange');\n });\n },\n orientationchange() {\n const document = getDocument();\n const device = getDevice();\n // Fix iPad weird body scroll\n if (device.ipad) {\n document.body.scrollLeft = 0;\n setTimeout(() => {\n document.body.scrollLeft = 0;\n }, 0);\n }\n },\n resize() {\n const app = this;\n app.getSize();\n },\n },\n};\n","/* eslint-disable max-classes-per-file */\nimport { getWindow, getDocument } from 'ssr-window';\nimport { extend, serializeObject } from './utils.js';\n\nconst globals = {};\nlet jsonpRequests = 0;\n\nclass RequestResponse {\n constructor(obj) {\n Object.assign(this, obj);\n }\n}\n\nclass RequestError extends Error {\n constructor(obj) {\n super();\n Object.assign(this, obj);\n }\n}\n\nconst request = (requestOptions) =>\n new Promise((resolve, reject) => {\n const window = getWindow();\n const document = getDocument();\n const globalsNoCallbacks = extend({}, globals);\n 'beforeCreate beforeOpen beforeSend error complete success statusCode'\n .split(' ')\n .forEach((callbackName) => {\n delete globalsNoCallbacks[callbackName];\n });\n const defaults = extend(\n {\n url: window.location.toString(),\n method: 'GET',\n data: false,\n async: true,\n cache: true,\n user: '',\n password: '',\n headers: {},\n xhrFields: {},\n statusCode: {},\n processData: true,\n dataType: 'text',\n contentType: 'application/x-www-form-urlencoded',\n timeout: 0,\n },\n globalsNoCallbacks,\n );\n\n let proceedRequest;\n\n const options = extend({}, defaults, requestOptions);\n if (requestOptions.abortController) {\n options.abortController = requestOptions.abortController;\n }\n\n if (options.abortController && options.abortController.canceled) {\n reject(new RequestError({ options, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // Function to run XHR callbacks and events\n function fireCallback(callbackName, ...data) {\n /*\n Callbacks:\n beforeCreate (options),\n beforeOpen (xhr, options),\n beforeSend (xhr, options),\n error (xhr, status, message),\n complete (xhr, status),\n success (response, status, xhr),\n statusCode ()\n */\n let globalCallbackValue;\n let optionCallbackValue;\n if (globals[callbackName]) {\n globalCallbackValue = globals[callbackName](...data);\n }\n if (options[callbackName]) {\n optionCallbackValue = options[callbackName](...data);\n }\n if (typeof globalCallbackValue !== 'boolean') globalCallbackValue = true;\n if (typeof optionCallbackValue !== 'boolean') optionCallbackValue = true;\n if (\n options.abortController &&\n options.abortController.canceled &&\n (callbackName === 'beforeCreate' ||\n callbackName === 'beforeOpen' ||\n callbackName === 'beforeSend')\n ) {\n return false;\n }\n return globalCallbackValue && optionCallbackValue;\n }\n\n // Before create callback\n proceedRequest = fireCallback('beforeCreate', options);\n if (proceedRequest === false) {\n reject(new RequestError({ options, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // For jQuery guys\n if (options.type) options.method = options.type;\n\n // Parameters Prefix\n let paramsPrefix = options.url.indexOf('?') >= 0 ? '&' : '?';\n\n // UC method\n const method = options.method.toUpperCase();\n\n // Data to modify GET URL\n if (\n (method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') &&\n options.data\n ) {\n let stringData;\n if (typeof options.data === 'string') {\n // Should be key=value string\n if (options.data.indexOf('?') >= 0) stringData = options.data.split('?')[1];\n else stringData = options.data;\n } else {\n // Should be key=value object\n stringData = serializeObject(options.data);\n }\n if (stringData.length) {\n options.url += paramsPrefix + stringData;\n if (paramsPrefix === '?') paramsPrefix = '&';\n }\n }\n\n // JSONP\n if (options.dataType === 'json' && options.url.indexOf('callback=') >= 0) {\n const callbackName = `f7jsonp_${Date.now() + (jsonpRequests += 1)}`;\n let abortTimeout;\n const callbackSplit = options.url.split('callback=');\n let requestUrl = `${callbackSplit[0]}callback=${callbackName}`;\n if (callbackSplit[1].indexOf('&') >= 0) {\n const addVars = callbackSplit[1]\n .split('&')\n .filter((el) => el.indexOf('=') > 0)\n .join('&');\n if (addVars.length > 0) requestUrl += `&${addVars}`;\n }\n\n // Create script\n let script = document.createElement('script');\n script.type = 'text/javascript';\n script.onerror = function onerror() {\n clearTimeout(abortTimeout);\n fireCallback('error', null, 'scripterror', 'scripterror');\n reject(new RequestError({ options, status: 'scripterror', message: 'scripterror' }));\n fireCallback('complete', null, 'scripterror');\n };\n script.src = requestUrl;\n\n // Handler\n window[callbackName] = function jsonpCallback(data) {\n clearTimeout(abortTimeout);\n fireCallback('success', data);\n script.parentNode.removeChild(script);\n script = null;\n delete window[callbackName];\n resolve(new RequestResponse({ options, data }));\n };\n document.querySelector('head').appendChild(script);\n\n if (options.timeout > 0) {\n abortTimeout = setTimeout(() => {\n script.parentNode.removeChild(script);\n script = null;\n fireCallback('error', null, 'timeout', 'timeout');\n reject(new RequestError({ options, status: 'timeout', message: 'timeout' }));\n }, options.timeout);\n }\n\n return;\n }\n\n // Cache for GET/HEAD requests\n if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') {\n if (options.cache === false) {\n options.url += `${paramsPrefix}_nocache${Date.now()}`;\n }\n }\n\n // Create XHR\n const xhr = new XMLHttpRequest();\n\n if (options.abortController) {\n let aborted = false;\n options.abortController.onAbort = () => {\n if (aborted) return;\n aborted = true;\n xhr.abort();\n reject(new RequestError({ options, xhr, status: 'canceled', message: 'canceled' }));\n };\n }\n\n // Save Request URL\n xhr.requestUrl = options.url;\n xhr.requestParameters = options;\n\n // Before open callback\n proceedRequest = fireCallback('beforeOpen', xhr, options);\n if (proceedRequest === false) {\n reject(new RequestError({ options, xhr, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // Open XHR\n xhr.open(method, options.url, options.async, options.user, options.password);\n\n // Create POST Data\n let postData = null;\n\n if ((method === 'POST' || method === 'PUT' || method === 'PATCH') && options.data) {\n if (options.processData) {\n const postDataInstances = [ArrayBuffer, Blob, Document, FormData];\n // Post Data\n if (postDataInstances.indexOf(options.data.constructor) >= 0) {\n postData = options.data;\n } else {\n // POST Headers\n const boundary = `---------------------------${Date.now().toString(16)}`;\n\n if (options.contentType === 'multipart/form-data') {\n xhr.setRequestHeader('Content-Type', `multipart/form-data; boundary=${boundary}`);\n } else {\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n postData = '';\n let data = serializeObject(options.data);\n if (options.contentType === 'multipart/form-data') {\n data = data.split('&');\n const newData = [];\n for (let i = 0; i < data.length; i += 1) {\n newData.push(\n `Content-Disposition: form-data; name=\"${data[i].split('=')[0]}\"\\r\\n\\r\\n${\n data[i].split('=')[1]\n }\\r\\n`,\n );\n }\n postData = `--${boundary}\\r\\n${newData.join(`--${boundary}\\r\\n`)}--${boundary}--\\r\\n`;\n } else if (options.contentType === 'application/json') {\n postData = JSON.stringify(options.data);\n } else {\n postData = data;\n }\n }\n } else {\n postData = options.data;\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n }\n if (options.dataType === 'json' && (!options.headers || !options.headers.Accept)) {\n xhr.setRequestHeader('Accept', 'application/json');\n }\n\n // Additional headers\n if (options.headers) {\n Object.keys(options.headers).forEach((headerName) => {\n if (typeof options.headers[headerName] === 'undefined') return;\n xhr.setRequestHeader(headerName, options.headers[headerName]);\n });\n }\n\n // Check for crossDomain\n if (typeof options.crossDomain === 'undefined') {\n options.crossDomain =\n // eslint-disable-next-line\n /^([\\w-]+:)?\\/\\/([^\\/]+)/.test(options.url) && RegExp.$2 !== window.location.host;\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (options.xhrFields) {\n extend(xhr, options.xhrFields);\n }\n\n // Handle XHR\n xhr.onload = function onload() {\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) {\n let responseData;\n if (options.dataType === 'json') {\n let parseError;\n try {\n responseData = JSON.parse(xhr.responseText);\n } catch (err) {\n parseError = true;\n }\n if (!parseError) {\n fireCallback('success', responseData, xhr.status, xhr);\n resolve(new RequestResponse({ options, data: responseData, status: xhr.status, xhr }));\n } else {\n fireCallback('error', xhr, 'parseerror', 'parseerror');\n reject(new RequestError({ options, xhr, status: 'parseerror', message: 'parseerror' }));\n }\n } else {\n responseData =\n xhr.responseType === 'text' || xhr.responseType === ''\n ? xhr.responseText\n : xhr.response;\n fireCallback('success', responseData, xhr.status, xhr);\n resolve(new RequestResponse({ options, data: responseData, status: xhr.status, xhr }));\n }\n } else {\n fireCallback('error', xhr, xhr.status, xhr.statusText);\n reject(new RequestError({ options, xhr, status: xhr.status, message: xhr.statusText }));\n }\n if (options.statusCode) {\n if (globals.statusCode && globals.statusCode[xhr.status])\n globals.statusCode[xhr.status](xhr);\n if (options.statusCode[xhr.status]) options.statusCode[xhr.status](xhr);\n }\n fireCallback('complete', xhr, xhr.status);\n };\n\n xhr.onerror = function onerror() {\n fireCallback('error', xhr, xhr.status, xhr.status);\n reject(new RequestError({ options, xhr, status: xhr.status, message: xhr.statusText }));\n fireCallback('complete', xhr, 'error');\n };\n\n // Timeout\n if (options.timeout > 0) {\n xhr.timeout = options.timeout;\n xhr.ontimeout = () => {\n fireCallback('error', xhr, 'timeout', 'timeout');\n reject(new RequestError({ options, xhr, status: 'timeout', message: 'timeout' }));\n fireCallback('complete', xhr, 'timeout');\n };\n }\n\n // Ajax start callback\n proceedRequest = fireCallback('beforeSend', xhr, options);\n if (proceedRequest === false) {\n reject(new RequestError({ options, xhr, status: 'canceled', message: 'canceled' }));\n return;\n }\n\n // Send XHR\n xhr.send(postData);\n });\n\nfunction requestShortcut(method, ...args) {\n let [url, data, success, error, dataType] = [];\n if (typeof args[1] === 'function') {\n [url, success, error, dataType] = args;\n } else {\n [url, data, success, error, dataType] = args;\n }\n [success, error].forEach((callback) => {\n if (typeof callback === 'string') {\n dataType = callback;\n if (callback === success) success = undefined;\n else error = undefined;\n }\n });\n dataType = dataType || (method === 'json' || method === 'postJSON' ? 'json' : undefined);\n const requestOptions = {\n url,\n method: method === 'post' || method === 'postJSON' ? 'POST' : 'GET',\n data,\n success,\n error,\n dataType,\n };\n if (method === 'postJSON') {\n extend(requestOptions, {\n contentType: 'application/json',\n processData: false,\n crossDomain: true,\n data: typeof data === 'string' ? data : JSON.stringify(data),\n });\n }\n return request(requestOptions);\n}\n\nObject.assign(request, {\n get: (...args) => requestShortcut('get', ...args),\n post: (...args) => requestShortcut('post', ...args),\n json: (...args) => requestShortcut('json', ...args),\n getJSON: (...args) => requestShortcut('json', ...args),\n postJSON: (...args) => requestShortcut('postJSON', ...args),\n});\n\nrequest.abortController = () => {\n const contoller = {\n canceled: false,\n onAbort: null,\n abort() {\n contoller.canceled = true;\n if (contoller.onAbort) contoller.onAbort();\n },\n };\n return contoller;\n};\n\nrequest.setup = function setup(options) {\n if (options.type && !options.method) {\n extend(options, { method: options.type });\n }\n extend(globals, options);\n};\n\nexport default request;\n","/* eslint no-param-reassign: \"off\" */\nimport request from '../../shared/request.js';\n\nexport default {\n name: 'request',\n proto: {\n request,\n },\n static: {\n request,\n },\n};\n","/* eslint-disable no-nested-ternary */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { extend } from '../../shared/utils.js';\n\nfunction initTouch() {\n const app = this;\n const device = getDevice();\n const support = getSupport();\n const window = getWindow();\n const document = getDocument();\n const params = app.params.touch;\n const useRipple = params[`${app.theme}TouchRipple`];\n\n if (device.ios && device.webView) {\n // Strange hack required for iOS 8 webview to work on inputs\n window.addEventListener('touchstart', () => {});\n }\n\n let touchStartX;\n let touchStartY;\n let targetElement;\n let isMoved;\n let tapHoldFired;\n let tapHoldTimeout;\n let preventClick;\n\n let activableElement;\n let activeTimeout;\n\n let rippleWave;\n let rippleTarget;\n let rippleTimeout;\n\n function findActivableElement(el) {\n const target = $(el);\n const parents = target.parents(params.activeStateElements);\n if (target.closest('.no-active-state').length) {\n return null;\n }\n let activable;\n if (target.is(params.activeStateElements)) {\n activable = target;\n }\n if (parents.length > 0) {\n activable = activable ? activable.add(parents) : parents;\n }\n if (activable && activable.length > 1) {\n const newActivable = [];\n let preventPropagation;\n for (let i = 0; i < activable.length; i += 1) {\n if (!preventPropagation) {\n newActivable.push(activable[i]);\n if (\n activable.eq(i).hasClass('prevent-active-state-propagation') ||\n activable.eq(i).hasClass('no-active-state-propagation')\n ) {\n preventPropagation = true;\n }\n }\n }\n activable = $(newActivable);\n }\n return activable || target;\n }\n\n function isInsideScrollableView(el) {\n const pageContent = el.parents('.page-content');\n return pageContent.length > 0;\n }\n\n function addActive() {\n if (!activableElement) return;\n activableElement.addClass('active-state');\n }\n function removeActive() {\n if (!activableElement) return;\n activableElement.removeClass('active-state');\n activableElement = null;\n }\n\n // Ripple handlers\n function findRippleElement(el) {\n const rippleElements = params.touchRippleElements;\n const $el = $(el);\n if ($el.is(rippleElements)) {\n if ($el.hasClass('no-ripple')) {\n return false;\n }\n return $el;\n }\n if ($el.parents(rippleElements).length > 0) {\n const rippleParent = $el.parents(rippleElements).eq(0);\n if (rippleParent.hasClass('no-ripple')) {\n return false;\n }\n return rippleParent;\n }\n return false;\n }\n function createRipple($el, x, y) {\n if (!$el) return;\n rippleWave = app.touchRipple.create(app, $el, x, y);\n }\n\n function removeRipple() {\n if (!rippleWave) return;\n rippleWave.remove();\n rippleWave = undefined;\n rippleTarget = undefined;\n }\n function rippleTouchStart(el) {\n rippleTarget = findRippleElement(el);\n if (!rippleTarget || rippleTarget.length === 0) {\n rippleTarget = undefined;\n return;\n }\n const inScrollable = isInsideScrollableView(rippleTarget);\n\n if (!inScrollable) {\n removeRipple();\n createRipple(rippleTarget, touchStartX, touchStartY);\n } else {\n clearTimeout(rippleTimeout);\n rippleTimeout = setTimeout(() => {\n removeRipple();\n createRipple(rippleTarget, touchStartX, touchStartY);\n }, 80);\n }\n }\n function rippleTouchMove() {\n clearTimeout(rippleTimeout);\n removeRipple();\n }\n function rippleTouchEnd() {\n if (!rippleWave && rippleTarget && !isMoved) {\n clearTimeout(rippleTimeout);\n createRipple(rippleTarget, touchStartX, touchStartY);\n setTimeout(removeRipple, 0);\n } else {\n removeRipple();\n }\n }\n\n // Mouse Handlers\n function handleMouseDown(e) {\n const $activableEl = findActivableElement(e.target);\n if ($activableEl) {\n $activableEl.addClass('active-state');\n if ('which' in e && e.which === 3) {\n setTimeout(() => {\n $('.active-state').removeClass('active-state');\n }, 0);\n }\n }\n\n if (useRipple) {\n touchStartX = e.pageX;\n touchStartY = e.pageY;\n rippleTouchStart(e.target, e.pageX, e.pageY);\n }\n }\n function handleMouseMove() {\n if (!params.activeStateOnMouseMove) {\n $('.active-state').removeClass('active-state');\n }\n if (useRipple) {\n rippleTouchMove();\n }\n }\n function handleMouseUp() {\n $('.active-state').removeClass('active-state');\n if (useRipple) {\n rippleTouchEnd();\n }\n }\n\n function handleTouchCancel() {\n targetElement = null;\n\n // Remove Active State\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (params.activeState) {\n removeActive();\n }\n\n // Remove Ripple\n if (useRipple) {\n rippleTouchEnd();\n }\n }\n\n let isScrolling;\n let isSegmentedStrong = false;\n let segmentedStrongEl = null;\n\n const touchMoveActivableIos = '.dialog-button, .actions-button';\n let isTouchMoveActivable = false;\n let touchmoveActivableEl = null;\n\n function handleTouchStart(e) {\n isMoved = false;\n tapHoldFired = false;\n preventClick = false;\n isScrolling = undefined;\n if (e.targetTouches.length > 1) {\n if (activableElement) removeActive();\n return true;\n }\n if (e.touches.length > 1 && activableElement) {\n removeActive();\n }\n if (params.tapHold) {\n if (tapHoldTimeout) clearTimeout(tapHoldTimeout);\n tapHoldTimeout = setTimeout(() => {\n if (e && e.touches && e.touches.length > 1) return;\n tapHoldFired = true;\n e.preventDefault();\n preventClick = true;\n $(e.target).trigger('taphold', e);\n app.emit('taphold', e);\n }, params.tapHoldDelay);\n }\n targetElement = e.target;\n touchStartX = e.targetTouches[0].pageX;\n touchStartY = e.targetTouches[0].pageY;\n isSegmentedStrong = e.target.closest(\n '.segmented-strong .button-active, .segmented-strong .tab-link-active',\n );\n isTouchMoveActivable = app.theme === 'ios' && e.target.closest(touchMoveActivableIos);\n if (isSegmentedStrong) {\n segmentedStrongEl = isSegmentedStrong.closest('.segmented-strong');\n }\n\n if (params.activeState) {\n activableElement = findActivableElement(targetElement);\n if (activableElement && !isInsideScrollableView(activableElement)) {\n addActive();\n } else if (activableElement) {\n activeTimeout = setTimeout(addActive, 80);\n }\n }\n if (useRipple) {\n rippleTouchStart(targetElement, touchStartX, touchStartY);\n }\n return true;\n }\n function handleTouchMove(e) {\n let touch;\n let distance;\n let shouldRemoveActive = true;\n\n if (e.type === 'touchmove') {\n touch = e.targetTouches[0];\n distance = params.touchClicksDistanceThreshold;\n }\n\n const touchCurrentX = e.targetTouches[0].pageX;\n const touchCurrentY = e.targetTouches[0].pageY;\n\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(\n isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX)\n );\n }\n\n if (isTouchMoveActivable || (!isScrolling && isSegmentedStrong && segmentedStrongEl)) {\n if (e.cancelable) e.preventDefault();\n }\n\n if (!isScrolling && isSegmentedStrong && segmentedStrongEl) {\n const elementFromPoint = document.elementFromPoint(\n e.targetTouches[0].clientX,\n e.targetTouches[0].clientY,\n );\n const buttonEl = elementFromPoint.closest(\n '.segmented-strong .button:not(.button-active):not(.tab-link-active)',\n );\n if (buttonEl && segmentedStrongEl.contains(buttonEl)) {\n $(buttonEl).trigger('click', 'f7Segmented');\n targetElement = buttonEl;\n }\n }\n\n if (distance && touch) {\n const pageX = touch.pageX;\n const pageY = touch.pageY;\n if (Math.abs(pageX - touchStartX) > distance || Math.abs(pageY - touchStartY) > distance) {\n isMoved = true;\n }\n } else {\n isMoved = true;\n }\n if (isMoved) {\n preventClick = true;\n // Keep active state on touchMove (for dialog and actions buttons)\n if (isTouchMoveActivable) {\n const elementFromPoint = document.elementFromPoint(\n e.targetTouches[0].clientX,\n e.targetTouches[0].clientY,\n );\n touchmoveActivableEl = elementFromPoint.closest(touchMoveActivableIos);\n if (\n touchmoveActivableEl &&\n activableElement &&\n activableElement[0] === touchmoveActivableEl\n ) {\n shouldRemoveActive = false;\n } else if (touchmoveActivableEl) {\n setTimeout(() => {\n activableElement = findActivableElement(touchmoveActivableEl);\n addActive();\n });\n }\n }\n if (params.tapHold) {\n clearTimeout(tapHoldTimeout);\n }\n if (params.activeState && shouldRemoveActive) {\n clearTimeout(activeTimeout);\n removeActive();\n }\n if (useRipple) {\n rippleTouchMove();\n }\n }\n }\n function handleTouchEnd(e) {\n isScrolling = undefined;\n isSegmentedStrong = false;\n segmentedStrongEl = null;\n isTouchMoveActivable = false;\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (touchmoveActivableEl) {\n $(touchmoveActivableEl).trigger('click', 'f7TouchMoveActivable');\n touchmoveActivableEl = null;\n }\n if (document.activeElement === e.target) {\n if (params.activeState) removeActive();\n if (useRipple) {\n rippleTouchEnd();\n }\n return true;\n }\n if (params.activeState) {\n addActive();\n setTimeout(removeActive, 0);\n }\n if (useRipple) {\n rippleTouchEnd();\n }\n if ((params.tapHoldPreventClicks && tapHoldFired) || preventClick) {\n if (e.cancelable) e.preventDefault();\n preventClick = true;\n return false;\n }\n return true;\n }\n function handleClick(e) {\n const isOverswipe = e && e.detail && e.detail === 'f7Overswipe';\n const isSegmented = e && e.detail && e.detail === 'f7Segmented';\n // eslint-disable-next-line\n const isTouchMoveActivable = e && e.detail && e.detail === 'f7TouchMoveActivable';\n let localPreventClick = preventClick;\n if (targetElement && e.target !== targetElement) {\n if (isOverswipe || isSegmented || isTouchMoveActivable) {\n localPreventClick = false;\n } else {\n localPreventClick = true;\n }\n } else if (isTouchMoveActivable) {\n localPreventClick = false;\n }\n if (params.tapHold && params.tapHoldPreventClicks && tapHoldFired) {\n localPreventClick = true;\n }\n if (localPreventClick) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n }\n\n if (params.tapHold) {\n tapHoldTimeout = setTimeout(\n () => {\n tapHoldFired = false;\n },\n device.ios || device.androidChrome ? 100 : 400,\n );\n }\n preventClick = false;\n targetElement = null;\n\n return !localPreventClick;\n }\n\n function emitAppTouchEvent(name, e) {\n app.emit({\n events: name,\n data: [e],\n });\n }\n function appClick(e) {\n emitAppTouchEvent('click', e);\n }\n function appTouchStartActive(e) {\n emitAppTouchEvent('touchstart touchstart:active', e);\n }\n function appTouchMoveActive(e) {\n emitAppTouchEvent('touchmove touchmove:active', e);\n }\n function appTouchEndActive(e) {\n emitAppTouchEvent('touchend touchend:active', e);\n }\n function appTouchStartPassive(e) {\n emitAppTouchEvent('touchstart:passive', e);\n }\n function appTouchMovePassive(e) {\n emitAppTouchEvent('touchmove:passive', e);\n }\n function appTouchEndPassive(e) {\n emitAppTouchEvent('touchend:passive', e);\n }\n\n const passiveListener = support.passiveListener ? { passive: true } : false;\n const passiveListenerCapture = support.passiveListener ? { passive: true, capture: true } : true;\n const activeListener = support.passiveListener ? { passive: false } : false;\n const activeListenerCapture = support.passiveListener ? { passive: false, capture: true } : true;\n\n document.addEventListener('click', appClick, true);\n\n if (support.passiveListener) {\n document.addEventListener(app.touchEvents.start, appTouchStartActive, activeListenerCapture);\n document.addEventListener(app.touchEvents.move, appTouchMoveActive, activeListener);\n document.addEventListener(app.touchEvents.end, appTouchEndActive, activeListener);\n\n document.addEventListener(app.touchEvents.start, appTouchStartPassive, passiveListenerCapture);\n document.addEventListener(app.touchEvents.move, appTouchMovePassive, passiveListener);\n document.addEventListener(app.touchEvents.end, appTouchEndPassive, passiveListener);\n } else {\n document.addEventListener(\n app.touchEvents.start,\n (e) => {\n appTouchStartActive(e);\n appTouchStartPassive(e);\n },\n true,\n );\n document.addEventListener(\n app.touchEvents.move,\n (e) => {\n appTouchMoveActive(e);\n appTouchMovePassive(e);\n },\n false,\n );\n document.addEventListener(\n app.touchEvents.end,\n (e) => {\n appTouchEndActive(e);\n appTouchEndPassive(e);\n },\n false,\n );\n }\n\n if (support.touch) {\n app.on('click', handleClick);\n app.on('touchstart', handleTouchStart);\n app.on('touchmove', handleTouchMove);\n app.on('touchend', handleTouchEnd);\n document.addEventListener('touchcancel', handleTouchCancel, { passive: true });\n } else if (params.activeState) {\n app.on('touchstart', handleMouseDown);\n app.on('touchmove', handleMouseMove);\n app.on('touchend', handleMouseUp);\n document.addEventListener('pointercancel', handleMouseUp, { passive: true });\n }\n document.addEventListener('contextmenu', (e) => {\n if (\n params.disableContextMenu &&\n (device.ios ||\n device.android ||\n device.cordova ||\n (window.Capacitor && window.Capacitor.isNative))\n ) {\n e.preventDefault();\n }\n if (useRipple) {\n if (activableElement) removeActive();\n rippleTouchEnd();\n }\n });\n}\n\nexport default {\n name: 'touch',\n params: {\n touch: {\n // Clicks\n touchClicksDistanceThreshold: 5,\n // ContextMenu\n disableContextMenu: false,\n // Tap Hold\n tapHold: false,\n tapHoldDelay: 750,\n tapHoldPreventClicks: true,\n // Active State\n activeState: true,\n activeStateElements:\n 'a, button, label, span, .actions-button, .stepper-button, .stepper-button-plus, .stepper-button-minus, .card-expandable, .menu-item, .link, .item-link, .accordion-item-toggle',\n activeStateOnMouseMove: false,\n mdTouchRipple: true,\n iosTouchRipple: false,\n auroraTouchRipple: false,\n touchRippleElements:\n '.ripple, .link, .item-link, .list-button, .links-list a, .button, button, .input-clear-button, .dialog-button, .tab-link, .item-radio, .item-checkbox, .actions-button, .searchbar-disable-button, .fab a, .checkbox, .radio, .data-table .sortable-cell:not(.input-cell), .notification-close-button, .stepper-button, .stepper-button-minus, .stepper-button-plus, .menu-item-content, .list.accordion-list .accordion-item-toggle',\n touchRippleInsetElements:\n '.ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back',\n },\n },\n create() {\n const app = this;\n const support = getSupport();\n extend(app, {\n touchEvents: {\n start: support.touch ? 'touchstart' : support.pointerEvents ? 'pointerdown' : 'mousedown',\n move: support.touch ? 'touchmove' : support.pointerEvents ? 'pointermove' : 'mousemove',\n end: support.touch ? 'touchend' : support.pointerEvents ? 'pointerup' : 'mouseup',\n },\n });\n },\n on: {\n init: initTouch,\n },\n};\n","/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n while (i < str.length) {\n var char = str[i];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n if (char === \":\") {\n var name = \"\";\n var j = i + 1;\n while (j < str.length) {\n var code = str.charCodeAt(j);\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n break;\n }\n if (!name)\n throw new TypeError(\"Missing parameter name at \" + i);\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n if (char === \"(\") {\n var count = 1;\n var pattern = \"\";\n var j = i + 1;\n if (str[j] === \"?\") {\n throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \" + j);\n }\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n }\n else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(\"Capturing groups are not allowed at \" + j);\n }\n }\n pattern += str[j++];\n }\n if (count)\n throw new TypeError(\"Unbalanced pattern at \" + i);\n if (!pattern)\n throw new TypeError(\"Missing pattern at \" + i);\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n tokens.push({ type: \"END\", index: i, value: \"\" });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str, options) {\n if (options === void 0) { options = {}; }\n var tokens = lexer(str);\n var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n var defaultPattern = \"[^\" + escapeString(options.delimiter || \"/#?\") + \"]+?\";\n var result = [];\n var key = 0;\n var i = 0;\n var path = \"\";\n var tryConsume = function (type) {\n if (i < tokens.length && tokens[i].type === type)\n return tokens[i++].value;\n };\n var mustConsume = function (type) {\n var value = tryConsume(type);\n if (value !== undefined)\n return value;\n var _a = tokens[i], nextType = _a.type, index = _a.index;\n throw new TypeError(\"Unexpected \" + nextType + \" at \" + index + \", expected \" + type);\n };\n var consumeText = function () {\n var result = \"\";\n var value;\n // tslint:disable-next-line\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n while (i < tokens.length) {\n var char = tryConsume(\"CHAR\");\n var name = tryConsume(\"NAME\");\n var pattern = tryConsume(\"PATTERN\");\n if (name || pattern) {\n var prefix = char || \"\";\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n var value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n var open = tryConsume(\"OPEN\");\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume(\"NAME\") || \"\";\n var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n var suffix = consumeText();\n mustConsume(\"CLOSE\");\n result.push({\n name: name_1 || (pattern_1 ? key++ : \"\"),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n mustConsume(\"END\");\n }\n return result;\n}\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction(tokens, options) {\n if (options === void 0) { options = {}; }\n var reFlags = flags(options);\n var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n // Compile all the tokens into regexps.\n var matches = tokens.map(function (token) {\n if (typeof token === \"object\") {\n return new RegExp(\"^(?:\" + token.pattern + \")$\", reFlags);\n }\n });\n return function (data) {\n var path = \"\";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === \"?\" || token.modifier === \"*\";\n var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not repeat, but got an array\");\n }\n if (value.length === 0) {\n if (optional)\n continue;\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not be empty\");\n }\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected all \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n }\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n var segment = encode(String(value), token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n continue;\n }\n if (optional)\n continue;\n var typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to be \" + typeOfMessage);\n }\n return path;\n };\n}\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction(re, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m)\n return false;\n var path = m[0], index = m.index;\n var params = Object.create(null);\n var _loop_1 = function (i) {\n // tslint:disable-next-line\n if (m[i] === undefined)\n return \"continue\";\n var key = keys[i - 1];\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n }\n else {\n params[key.name] = decode(m[i], key);\n }\n };\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n return { path: path, index: index, params: params };\n };\n}\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n if (!keys)\n return path;\n var groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n var index = 0;\n var execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n });\n execResult = groupsRegex.exec(path.source);\n }\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n return new RegExp(\"(?:\" + parts.join(\"|\") + \")\", flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(tokens, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d;\n var endsWith = \"[\" + escapeString(options.endsWith || \"\") + \"]|$\";\n var delimiter = \"[\" + escapeString(options.delimiter || \"/#?\") + \"]\";\n var route = start ? \"^\" : \"\";\n // Iterate over the tokens and create our regexp string.\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n }\n else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n if (token.pattern) {\n if (keys)\n keys.push(token);\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n var mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += \"(?:\" + prefix + \"((?:\" + token.pattern + \")(?:\" + suffix + prefix + \"(?:\" + token.pattern + \"))*)\" + suffix + \")\" + mod;\n }\n else {\n route += \"(?:\" + prefix + \"(\" + token.pattern + \")\" + suffix + \")\" + token.modifier;\n }\n }\n else {\n route += \"(\" + token.pattern + \")\" + token.modifier;\n }\n }\n else {\n route += \"(?:\" + prefix + suffix + \")\" + token.modifier;\n }\n }\n }\n if (end) {\n if (!strict)\n route += delimiter + \"?\";\n route += !options.endsWith ? \"$\" : \"(?=\" + endsWith + \")\";\n }\n else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === \"string\"\n ? delimiter.indexOf(endToken[endToken.length - 1]) > -1\n : // tslint:disable-next-line\n endToken === undefined;\n if (!strict) {\n route += \"(?:\" + delimiter + \"(?=\" + endsWith + \"))?\";\n }\n if (!isEndDelimited) {\n route += \"(?=\" + delimiter + \"|\" + endsWith + \")\";\n }\n }\n return new RegExp(route, flags(options));\n}\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(path, keys, options) {\n if (path instanceof RegExp)\n return regexpToRegexp(path, keys);\n if (Array.isArray(path))\n return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n//# sourceMappingURL=index.js.map","import { getWindow, getDocument } from 'ssr-window';\nimport $ from './dom7.js';\nimport { extend } from './utils.js';\n\nconst History = {\n queue: [],\n clearQueue() {\n if (History.queue.length === 0) return;\n const currentQueue = History.queue.shift();\n currentQueue();\n },\n routerQueue: [],\n clearRouterQueue() {\n if (History.routerQueue.length === 0) return;\n const currentQueue = History.routerQueue.pop();\n const { router, stateUrl, action } = currentQueue;\n\n let animate = router.params.animate;\n if (router.params.browserHistoryAnimate === false) animate = false;\n\n if (action === 'back') {\n router.back({ animate, browserHistory: false });\n }\n if (action === 'load') {\n router.navigate(stateUrl, { animate, browserHistory: false });\n }\n },\n handle(e) {\n if (History.blockPopstate) return;\n const app = this;\n // const mainView = app.views.main;\n let state = e.state;\n History.previousState = History.state;\n History.state = state;\n\n History.allowChange = true;\n History.clearQueue();\n\n state = History.state;\n if (!state) state = {};\n\n app.views.forEach((view) => {\n const router = view.router;\n let viewState = state[view.id];\n if (!viewState && view.params.browserHistory) {\n viewState = {\n url: view.router.history[0],\n };\n }\n if (!viewState) return;\n const stateUrl = viewState.url || undefined;\n\n let animate = router.params.animate;\n if (router.params.browserHistoryAnimate === false) animate = false;\n\n if (stateUrl !== router.url) {\n if (router.history.indexOf(stateUrl) >= 0) {\n // Go Back\n if (router.allowPageChange) {\n router.back({ animate, browserHistory: false });\n } else {\n History.routerQueue.push({\n action: 'back',\n router,\n });\n }\n } else if (router.allowPageChange) {\n // Load page\n router.navigate(stateUrl, { animate, browserHistory: false });\n } else {\n History.routerQueue.unshift({\n action: 'load',\n stateUrl,\n router,\n });\n }\n }\n });\n },\n initViewState(viewId, viewState) {\n const window = getWindow();\n const newState = extend({}, History.state || {}, {\n [viewId]: viewState,\n });\n History.state = newState;\n window.history.replaceState(newState, '');\n },\n push(viewId, viewState, url) {\n const window = getWindow();\n if (url.substr(-3) === '#!/') {\n // eslint-disable-next-line\n url = url.replace('#!/', '');\n }\n if (!History.allowChange) {\n History.queue.push(() => {\n History.push(viewId, viewState, url);\n });\n return;\n }\n History.previousState = History.state;\n const newState = extend({}, History.previousState || {}, {\n [viewId]: viewState,\n });\n History.state = newState;\n window.history.pushState(newState, '', url);\n },\n replace(viewId, viewState, url) {\n const window = getWindow();\n if (url.substr(-3) === '#!/') {\n // eslint-disable-next-line\n url = url.replace('#!/', '');\n }\n if (!History.allowChange) {\n History.queue.push(() => {\n History.replace(viewId, viewState, url);\n });\n return;\n }\n History.previousState = History.state;\n const newState = extend({}, History.previousState || {}, {\n [viewId]: viewState,\n });\n History.state = newState;\n window.history.replaceState(newState, '', url);\n },\n go(index) {\n const window = getWindow();\n History.allowChange = false;\n window.history.go(index);\n },\n back() {\n const window = getWindow();\n History.allowChange = false;\n window.history.back();\n },\n allowChange: true,\n previousState: {},\n state: {},\n blockPopstate: true,\n init(app) {\n const window = getWindow();\n const document = getDocument();\n History.state = window.history.state;\n $(window).on('load', () => {\n setTimeout(() => {\n History.blockPopstate = false;\n }, 0);\n });\n\n if (document.readyState && document.readyState === 'complete') {\n History.blockPopstate = false;\n }\n\n $(window).on('popstate', History.handle.bind(app));\n },\n};\n\nexport default History;\n","import $ from '../../shared/dom7.js';\nimport History from '../../shared/history.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { now } from '../../shared/utils.js';\n\nfunction SwipeBack(r) {\n const router = r;\n const { $el, $navbarsEl, app, params } = router;\n const support = getSupport();\n const device = getDevice();\n let isTouched = false;\n let isMoved = false;\n const touchesStart = {};\n let isScrolling;\n let $currentPageEl = [];\n let $previousPageEl = [];\n let viewContainerWidth;\n let touchesDiff;\n let allowViewTouchMove = true;\n let touchStartTime;\n let $currentNavbarEl = [];\n let $previousNavbarEl = [];\n let dynamicNavbar;\n let $pageShadowEl;\n let $pageOpacityEl;\n\n let animatableNavEls;\n\n const paramsSwipeBackAnimateShadow = params[`${app.theme}SwipeBackAnimateShadow`];\n const paramsSwipeBackAnimateOpacity = params[`${app.theme}SwipeBackAnimateOpacity`];\n const paramsSwipeBackActiveArea = params[`${app.theme}SwipeBackActiveArea`];\n const paramsSwipeBackThreshold = params[`${app.theme}SwipeBackThreshold`];\n\n const transformOrigin = app.rtl ? 'right center' : 'left center';\n const transformOriginTitleLarge = app.rtl\n ? 'calc(100% - var(--f7-navbar-large-title-padding-left) - var(--f7-safe-area-left)) center'\n : 'calc(var(--f7-navbar-large-title-padding-left) + var(--f7-safe-area-left)) center';\n\n function animatableNavElements() {\n const els = [];\n const inverter = app.rtl ? -1 : 1;\n const currentNavIsTransparent =\n $currentNavbarEl.hasClass('navbar-transparent') &&\n !$currentNavbarEl.hasClass('navbar-large') &&\n !$currentNavbarEl.hasClass('navbar-transparent-visible');\n const currentNavIsLarge = $currentNavbarEl.hasClass('navbar-large');\n const currentNavIsCollapsed = $currentNavbarEl.hasClass('navbar-large-collapsed');\n const currentNavIsLargeTransparent =\n $currentNavbarEl.hasClass('navbar-large-transparent') ||\n ($currentNavbarEl.hasClass('navbar-large') &&\n $currentNavbarEl.hasClass('navbar-transparent'));\n const previousNavIsTransparent =\n $previousNavbarEl.hasClass('navbar-transparent') &&\n !$previousNavbarEl.hasClass('navbar-large') &&\n !$previousNavbarEl.hasClass('navbar-transparent-visible');\n const previousNavIsLarge = $previousNavbarEl.hasClass('navbar-large');\n const previousNavIsCollapsed = $previousNavbarEl.hasClass('navbar-large-collapsed');\n const previousNavIsLargeTransparent =\n $previousNavbarEl.hasClass('navbar-large-transparent') ||\n ($previousNavbarEl.hasClass('navbar-large') &&\n $previousNavbarEl.hasClass('navbar-transparent'));\n const fromLarge = currentNavIsLarge && !currentNavIsCollapsed;\n const toLarge = previousNavIsLarge && !previousNavIsCollapsed;\n const $currentNavElements = $currentNavbarEl.find(\n '.left, .title, .right, .subnavbar, .fading, .title-large, .navbar-bg',\n );\n const $previousNavElements = $previousNavbarEl.find(\n '.left, .title, .right, .subnavbar, .fading, .title-large, .navbar-bg',\n );\n let activeNavBackIconText;\n let previousNavBackIconText;\n\n if (params.iosAnimateNavbarBackIcon) {\n if (\n $currentNavbarEl.hasClass('sliding') ||\n $currentNavbarEl.find('.navbar-inner.sliding').length\n ) {\n activeNavBackIconText = $currentNavbarEl.find('.left').find('.back .icon + span').eq(0);\n } else {\n activeNavBackIconText = $currentNavbarEl\n .find('.left.sliding')\n .find('.back .icon + span')\n .eq(0);\n }\n if (\n $previousNavbarEl.hasClass('sliding') ||\n $previousNavbarEl.find('.navbar-inner.sliding').length\n ) {\n previousNavBackIconText = $previousNavbarEl.find('.left').find('.back .icon + span').eq(0);\n } else {\n previousNavBackIconText = $previousNavbarEl\n .find('.left.sliding')\n .find('.back .icon + span')\n .eq(0);\n }\n if (activeNavBackIconText.length) {\n $previousNavElements.each((el) => {\n if (!$(el).hasClass('title')) return;\n el.f7NavbarLeftOffset += activeNavBackIconText.prev('.icon')[0].offsetWidth;\n });\n }\n }\n $currentNavElements.each((navEl) => {\n const $navEl = $(navEl);\n const isSubnavbar = $navEl.hasClass('subnavbar');\n const isLeft = $navEl.hasClass('left');\n const isTitle = $navEl.hasClass('title');\n const isBg = $navEl.hasClass('navbar-bg');\n if ((isTitle || isBg) && currentNavIsTransparent) return;\n if (!fromLarge && $navEl.hasClass('.title-large')) return;\n const el = {\n el: navEl,\n };\n if (fromLarge) {\n if (isTitle) return;\n if ($navEl.hasClass('title-large')) {\n if (els.indexOf(el) < 0) els.push(el);\n el.overflow = 'visible';\n $navEl.find('.title-large-text').each((subNavEl) => {\n els.push({\n el: subNavEl,\n transform: (progress) => `translateX(${progress * 100 * inverter}%)`,\n });\n });\n return;\n }\n }\n if (toLarge) {\n if (!fromLarge) {\n if ($navEl.hasClass('title-large')) {\n if (els.indexOf(el) < 0) els.push(el);\n el.opacity = 0;\n }\n }\n if (isLeft) {\n if (els.indexOf(el) < 0) els.push(el);\n el.opacity = (progress) => 1 - progress ** 0.33;\n $navEl.find('.back span').each((subNavEl) => {\n els.push({\n el: subNavEl,\n 'transform-origin': transformOrigin,\n transform: (progress) =>\n `translateX(calc(${progress} * (var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset)))) translateY(calc(${progress} * (var(--f7-navbar-large-title-height) - var(--f7-navbar-large-title-padding-vertical) / 2))) scale(${\n 1 + 1 * progress\n })`,\n });\n });\n return;\n }\n }\n if (isBg) {\n if (els.indexOf(el) < 0) els.push(el);\n if (!fromLarge && !toLarge) {\n if (currentNavIsCollapsed) {\n if (currentNavIsLargeTransparent) {\n el.className = 'ios-swipeback-navbar-bg-large';\n }\n el.transform = (progress) =>\n `translateX(${\n 100 * progress * inverter\n }%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))`;\n } else {\n el.transform = (progress) => `translateX(${100 * progress * inverter}%)`;\n }\n }\n if (!fromLarge && toLarge) {\n el.className = 'ios-swipeback-navbar-bg-large';\n el.transform = (progress) =>\n `translateX(${100 * progress * inverter}%) translateY(calc(-1 * ${\n 1 - progress\n } * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && toLarge) {\n el.transform = (progress) => `translateX(${100 * progress * inverter}%)`;\n }\n if (fromLarge && !toLarge) {\n el.transform = (progress) =>\n `translateX(${\n 100 * progress * inverter\n }%) translateY(calc(-${progress} * var(--f7-navbar-large-title-height)))`;\n }\n return;\n }\n if ($navEl.hasClass('title-large')) return;\n const isSliding =\n $navEl.hasClass('sliding') || $navEl.parents('.navbar-inner.sliding').length;\n if (els.indexOf(el) < 0) els.push(el);\n if (!isSubnavbar || (isSubnavbar && !isSliding)) {\n el.opacity = (progress) => 1 - progress ** 0.33;\n }\n if (isSliding) {\n let transformTarget = el;\n if (isLeft && activeNavBackIconText.length && params.iosAnimateNavbarBackIcon) {\n const textEl = { el: activeNavBackIconText[0] };\n transformTarget = textEl;\n els.push(textEl);\n }\n transformTarget.transform = (progress) => {\n let activeNavTranslate = progress * transformTarget.el.f7NavbarRightOffset;\n if (device.pixelRatio === 1) activeNavTranslate = Math.round(activeNavTranslate);\n if (isSubnavbar && currentNavIsLarge) {\n return `translate3d(${activeNavTranslate}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`;\n }\n return `translate3d(${activeNavTranslate}px,0,0)`;\n };\n }\n });\n $previousNavElements.each((navEl) => {\n const $navEl = $(navEl);\n const isSubnavbar = $navEl.hasClass('subnavbar');\n const isLeft = $navEl.hasClass('left');\n const isTitle = $navEl.hasClass('title');\n const isBg = $navEl.hasClass('navbar-bg');\n if ((isTitle || isBg) && previousNavIsTransparent) return;\n const el = {\n el: navEl,\n };\n if (toLarge) {\n if (isTitle) return;\n if (els.indexOf(el) < 0) els.push(el);\n\n if ($navEl.hasClass('title-large')) {\n el.opacity = 1;\n el.overflow = 'visible';\n $navEl.find('.title-large-text').each((subNavEl) => {\n els.push({\n el: subNavEl,\n 'transform-origin': transformOriginTitleLarge,\n opacity: (progress) => progress ** 3,\n transform: (progress) =>\n `translateX(calc(${\n 1 - progress\n } * (var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset)))) translateY(calc(${\n progress - 1\n } * var(--f7-navbar-large-title-height) + ${\n 1 - progress\n } * var(--f7-navbar-large-title-padding-vertical))) scale(${0.5 + progress * 0.5})`,\n });\n });\n return;\n }\n }\n if (isBg) {\n if (els.indexOf(el) < 0) els.push(el);\n if (!fromLarge && !toLarge) {\n if (previousNavIsCollapsed) {\n if (previousNavIsLargeTransparent) {\n el.className = 'ios-swipeback-navbar-bg-large';\n }\n el.transform = (progress) =>\n `translateX(${\n (-100 + 100 * progress) * inverter\n }%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))`;\n } else {\n el.transform = (progress) => `translateX(${(-100 + 100 * progress) * inverter}%)`;\n }\n }\n if (!fromLarge && toLarge) {\n el.transform = (progress) =>\n `translateX(${(-100 + 100 * progress) * inverter}%) translateY(calc(-1 * ${\n 1 - progress\n } * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && !toLarge) {\n el.className = 'ios-swipeback-navbar-bg-large';\n el.transform = (progress) =>\n `translateX(${\n (-100 + 100 * progress) * inverter\n }%) translateY(calc(-${progress} * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && toLarge) {\n el.transform = (progress) => `translateX(${(-100 + 100 * progress) * inverter}%)`;\n }\n\n return;\n }\n if ($navEl.hasClass('title-large')) return;\n const isSliding =\n $navEl.hasClass('sliding') || $previousNavbarEl.children('.navbar-inner.sliding').length;\n if (els.indexOf(el) < 0) els.push(el);\n if (!isSubnavbar || (isSubnavbar && !isSliding)) {\n el.opacity = (progress) => progress ** 3;\n }\n if (isSliding) {\n let transformTarget = el;\n if (isLeft && previousNavBackIconText.length && params.iosAnimateNavbarBackIcon) {\n const textEl = { el: previousNavBackIconText[0] };\n transformTarget = textEl;\n els.push(textEl);\n }\n transformTarget.transform = (progress) => {\n let previousNavTranslate = transformTarget.el.f7NavbarLeftOffset * (1 - progress);\n if (device.pixelRatio === 1) previousNavTranslate = Math.round(previousNavTranslate);\n if (isSubnavbar && previousNavIsLarge) {\n return `translate3d(${previousNavTranslate}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`;\n }\n return `translate3d(${previousNavTranslate}px,0,0)`;\n };\n }\n });\n return els;\n }\n\n function setAnimatableNavElements({ progress, reset, transition, reflow } = {}) {\n const styles = ['overflow', 'transform', 'transform-origin', 'opacity'];\n if (transition === true || transition === false) {\n for (let i = 0; i < animatableNavEls.length; i += 1) {\n const el = animatableNavEls[i];\n if (el && el.el) {\n if (transition === true) el.el.classList.add('navbar-page-transitioning');\n if (transition === false) el.el.classList.remove('navbar-page-transitioning');\n }\n }\n }\n if (reflow && animatableNavEls.length && animatableNavEls[0] && animatableNavEls[0].el) {\n // eslint-disable-next-line\n animatableNavEls[0].el._clientLeft = animatableNavEls[0].el.clientLeft;\n }\n for (let i = 0; i < animatableNavEls.length; i += 1) {\n const el = animatableNavEls[i];\n if (el && el.el) {\n if (el.className && !el.classNameSet && !reset) {\n el.el.classList.add(el.className);\n el.classNameSet = true;\n }\n if (el.className && reset) {\n el.el.classList.remove(el.className);\n }\n for (let j = 0; j < styles.length; j += 1) {\n const styleProp = styles[j];\n if (el[styleProp]) {\n if (reset) {\n el.el.style[styleProp] = '';\n } else if (typeof el[styleProp] === 'function') {\n el.el.style[styleProp] = el[styleProp](progress);\n } else {\n el.el.style[styleProp] = el[styleProp];\n }\n }\n }\n }\n }\n }\n\n function handleTouchStart(e) {\n const swipeBackEnabled = params[`${app.theme}SwipeBack`];\n if (\n !allowViewTouchMove ||\n !swipeBackEnabled ||\n isTouched ||\n (app.swipeout && app.swipeout.el) ||\n !router.allowPageChange\n )\n return;\n if ($(e.target).closest('.range-slider, .calendar-months').length > 0) return;\n if (\n $(e.target).closest('.page-master, .page-master-detail').length > 0 &&\n params.masterDetailBreakpoint > 0 &&\n app.width >= params.masterDetailBreakpoint\n )\n return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = now();\n dynamicNavbar = router.dynamicNavbar;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling =\n !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x)) ||\n (pageX < touchesStart.x && !app.rtl) ||\n (pageX > touchesStart.x && app.rtl);\n }\n if (isScrolling || e.f7PreventSwipeBack || app.preventSwipeBack) {\n isTouched = false;\n return;\n }\n if (!isMoved) {\n // Calc values during first move fired\n let cancel = false;\n const target = $(e.target);\n\n const swipeout = target.closest('.swipeout');\n if (swipeout.length > 0) {\n if (!app.rtl && swipeout.find('.swipeout-actions-left').length > 0) cancel = true;\n if (app.rtl && swipeout.find('.swipeout-actions-right').length > 0) cancel = true;\n }\n\n $currentPageEl = target.closest('.page');\n if (\n $currentPageEl.hasClass('no-swipeback') ||\n target.closest('.no-swipeback, .card-opened').length > 0\n )\n cancel = true;\n $previousPageEl = $el.find('.page-previous:not(.stacked)');\n if ($previousPageEl.length > 1) {\n $previousPageEl = $previousPageEl.eq($previousPageEl.length - 1);\n }\n let notFromBorder = touchesStart.x - $el.offset().left > paramsSwipeBackActiveArea;\n viewContainerWidth = $el.width();\n if (app.rtl) {\n notFromBorder =\n touchesStart.x <\n $el.offset().left - $el[0].scrollLeft + (viewContainerWidth - paramsSwipeBackActiveArea);\n } else {\n notFromBorder = touchesStart.x - $el.offset().left > paramsSwipeBackActiveArea;\n }\n if (notFromBorder) cancel = true;\n if ($previousPageEl.length === 0 || $currentPageEl.length === 0) cancel = true;\n if (cancel) {\n isTouched = false;\n return;\n }\n\n if (paramsSwipeBackAnimateShadow) {\n $pageShadowEl = $currentPageEl.find('.page-shadow-effect');\n if ($pageShadowEl.length === 0) {\n $pageShadowEl = $('<div class=\"page-shadow-effect\"></div>');\n $currentPageEl.append($pageShadowEl);\n }\n }\n if (paramsSwipeBackAnimateOpacity) {\n $pageOpacityEl = $previousPageEl.find('.page-opacity-effect');\n if ($pageOpacityEl.length === 0) {\n $pageOpacityEl = $('<div class=\"page-opacity-effect\"></div>');\n $previousPageEl.append($pageOpacityEl);\n }\n }\n\n if (dynamicNavbar) {\n $currentNavbarEl = $navbarsEl.find('.navbar-current:not(.stacked)');\n $previousNavbarEl = $navbarsEl.find('.navbar-previous:not(.stacked)');\n if ($previousNavbarEl.length > 1) {\n $previousNavbarEl = $previousNavbarEl.eq($previousNavbarEl.length - 1);\n }\n\n animatableNavEls = animatableNavElements($previousNavbarEl, $currentNavbarEl);\n }\n\n // Close/Hide Any Picker\n if ($('.sheet.modal-in').length > 0 && app.sheet) {\n app.sheet.close($('.sheet.modal-in'));\n }\n }\n e.f7PreventSwipePanel = true;\n isMoved = true;\n app.preventSwipePanelBySwipeBack = true;\n e.preventDefault();\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n\n // Touches diff\n touchesDiff = (pageX - touchesStart.x - paramsSwipeBackThreshold) * inverter;\n if (touchesDiff < 0) touchesDiff = 0;\n const percentage = Math.min(Math.max(touchesDiff / viewContainerWidth, 0), 1);\n\n // Swipe Back Callback\n const callbackData = {\n percentage,\n progress: percentage,\n currentPageEl: $currentPageEl[0],\n previousPageEl: $previousPageEl[0],\n currentNavbarEl: $currentNavbarEl[0],\n previousNavbarEl: $previousNavbarEl[0],\n };\n $el.trigger('swipeback:move', callbackData);\n router.emit('swipebackMove', callbackData);\n\n // Transform pages\n let currentPageTranslate = touchesDiff * inverter;\n let previousPageTranslate = (touchesDiff / 5 - viewContainerWidth / 5) * inverter;\n if (!app.rtl) {\n currentPageTranslate = Math.min(currentPageTranslate, viewContainerWidth);\n previousPageTranslate = Math.min(previousPageTranslate, 0);\n } else {\n currentPageTranslate = Math.max(currentPageTranslate, -viewContainerWidth);\n previousPageTranslate = Math.max(previousPageTranslate, 0);\n }\n if (device.pixelRatio === 1) {\n currentPageTranslate = Math.round(currentPageTranslate);\n previousPageTranslate = Math.round(previousPageTranslate);\n }\n\n router.swipeBackActive = true;\n $([$currentPageEl[0], $previousPageEl[0]]).addClass('page-swipeback-active');\n\n $currentPageEl.transform(`translate3d(${currentPageTranslate}px,0,0)`);\n if (paramsSwipeBackAnimateShadow) $pageShadowEl[0].style.opacity = 1 - 1 * percentage;\n\n if (app.theme === 'ios') {\n $previousPageEl.transform(`translate3d(${previousPageTranslate}px,0,0)`);\n }\n if (paramsSwipeBackAnimateOpacity) $pageOpacityEl[0].style.opacity = 1 - 1 * percentage;\n\n // Dynamic Navbars Animation\n if (!dynamicNavbar) return;\n\n setAnimatableNavElements({ progress: percentage });\n }\n function handleTouchEnd() {\n app.preventSwipePanelBySwipeBack = false;\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n router.swipeBackActive = false;\n const $pages = $([$currentPageEl[0], $previousPageEl[0]]);\n $pages.removeClass('page-swipeback-active');\n if (touchesDiff === 0) {\n $pages.transform('');\n if ($pageShadowEl && $pageShadowEl.length > 0) $pageShadowEl.remove();\n if ($pageOpacityEl && $pageOpacityEl.length > 0) $pageOpacityEl.remove();\n if (dynamicNavbar) {\n setAnimatableNavElements({ reset: true });\n }\n return;\n }\n const timeDiff = now() - touchStartTime;\n let pageChanged = false;\n // Swipe back to previous page\n if (\n (timeDiff < 300 && touchesDiff > 10) ||\n (timeDiff >= 300 && touchesDiff > viewContainerWidth / 2)\n ) {\n $currentPageEl\n .removeClass('page-current')\n .addClass(`page-next${app.theme !== 'ios' ? ' page-next-on-right' : ''}`);\n $previousPageEl\n .removeClass('page-previous')\n .addClass('page-current')\n .removeAttr('aria-hidden');\n if ($pageShadowEl) $pageShadowEl[0].style.opacity = '';\n if ($pageOpacityEl) $pageOpacityEl[0].style.opacity = '';\n if (dynamicNavbar) {\n router.setNavbarPosition($currentNavbarEl, 'next');\n router.setNavbarPosition($previousNavbarEl, 'current', false);\n }\n pageChanged = true;\n }\n // Reset custom styles\n // Add transitioning class for transition-duration\n $pages.addClass('page-transitioning page-transitioning-swipeback');\n if (device.ios) {\n // eslint-disable-next-line\n $currentPageEl[0]._clientLeft = $currentPageEl[0].clientLeft;\n }\n $pages.transform('');\n\n if (dynamicNavbar) {\n setAnimatableNavElements({\n progress: pageChanged ? 1 : 0,\n transition: true,\n reflow: !!device.ios,\n });\n }\n allowViewTouchMove = false;\n router.allowPageChange = false;\n\n // Swipe Back Callback\n const callbackData = {\n currentPageEl: $currentPageEl[0],\n previousPageEl: $previousPageEl[0],\n currentNavbarEl: $currentNavbarEl[0],\n previousNavbarEl: $previousNavbarEl[0],\n };\n\n if (pageChanged) {\n // Update Route\n router.currentRoute = $previousPageEl[0].f7Page.route;\n router.currentPage = $previousPageEl[0];\n\n // Page before animation callback\n router.pageCallback('beforeOut', $currentPageEl, $currentNavbarEl, 'current', 'next', {\n route: $currentPageEl[0].f7Page.route,\n swipeBack: true,\n });\n router.pageCallback(\n 'beforeIn',\n $previousPageEl,\n $previousNavbarEl,\n 'previous',\n 'current',\n { route: $previousPageEl[0].f7Page.route, swipeBack: true },\n $currentPageEl[0],\n );\n\n $el.trigger('swipeback:beforechange', callbackData);\n router.emit('swipebackBeforeChange', callbackData);\n } else {\n $el.trigger('swipeback:beforereset', callbackData);\n router.emit('swipebackBeforeReset', callbackData);\n }\n\n $currentPageEl.transitionEnd(() => {\n $pages.removeClass('page-transitioning page-transitioning-swipeback');\n if (dynamicNavbar) {\n setAnimatableNavElements({ reset: true, transition: false });\n }\n allowViewTouchMove = true;\n router.allowPageChange = true;\n if (pageChanged) {\n // Update History\n if (router.history.length === 1) {\n router.history.unshift(router.url);\n }\n router.history.pop();\n router.saveHistory();\n\n // Update push state\n if (params.browserHistory) {\n History.back();\n }\n\n // Page after animation callback\n router.pageCallback('afterOut', $currentPageEl, $currentNavbarEl, 'current', 'next', {\n route: $currentPageEl[0].f7Page.route,\n swipeBack: true,\n });\n router.pageCallback('afterIn', $previousPageEl, $previousNavbarEl, 'previous', 'current', {\n route: $previousPageEl[0].f7Page.route,\n swipeBack: true,\n });\n\n // Remove Old Page\n if (params.stackPages && router.initialPages.indexOf($currentPageEl[0]) >= 0) {\n $currentPageEl.addClass('stacked');\n if (dynamicNavbar) {\n $currentNavbarEl.addClass('stacked');\n }\n } else {\n router.pageCallback('beforeRemove', $currentPageEl, $currentNavbarEl, 'next', {\n swipeBack: true,\n });\n router.removePage($currentPageEl);\n if (dynamicNavbar) {\n router.removeNavbar($currentNavbarEl);\n }\n }\n\n $el.trigger('swipeback:afterchange', callbackData);\n router.emit('swipebackAfterChange', callbackData);\n\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n if (params.preloadPreviousPage) {\n router.back(router.history[router.history.length - 2], { preload: true });\n }\n } else {\n $el.trigger('swipeback:afterreset', callbackData);\n router.emit('swipebackAfterReset', callbackData);\n }\n if ($pageShadowEl && $pageShadowEl.length > 0) $pageShadowEl.remove();\n if ($pageOpacityEl && $pageOpacityEl.length > 0) $pageOpacityEl.remove();\n });\n }\n\n function attachEvents() {\n const passiveListener =\n app.touchEvents.start === 'touchstart' && support.passiveListener\n ? { passive: true, capture: false }\n : false;\n $el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n function detachEvents() {\n const passiveListener =\n app.touchEvents.start === 'touchstart' && support.passiveListener\n ? { passive: true, capture: false }\n : false;\n $el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n\n attachEvents();\n\n router.on('routerDestroy', detachEvents);\n}\n\nexport default SwipeBack;\n","import { extend } from '../../shared/utils.js';\n\nexport default function redirect(direction, route, options) {\n const router = this;\n const r = route.route.redirect;\n const method = direction === 'forward' ? 'navigate' : 'back';\n if (options.initial && router.params.browserHistory) {\n options.replaceState = true; // eslint-disable-line\n options.history = true; // eslint-disable-line\n }\n function redirectResolve(redirectUrl, redirectOptions = {}) {\n router.allowPageChange = true;\n router[method](redirectUrl, extend({}, options, redirectOptions));\n }\n function redirectReject() {\n router.allowPageChange = true;\n }\n if (typeof r === 'function') {\n router.allowPageChange = false;\n const redirectUrl = r.call(router, {\n router,\n to: route,\n resolve: redirectResolve,\n reject: redirectReject,\n direction,\n app: router.app,\n });\n if (redirectUrl && typeof redirectUrl === 'string') {\n router.allowPageChange = true;\n return router[method](redirectUrl, options);\n }\n return router;\n }\n return router[method](r, options);\n}\n","function processQueue(router, routerQueue, routeQueue, to, from, resolve, reject, direction) {\n const queue = [];\n\n if (Array.isArray(routeQueue)) {\n queue.push(...routeQueue);\n } else if (routeQueue && typeof routeQueue === 'function') {\n queue.push(routeQueue);\n }\n if (routerQueue) {\n if (Array.isArray(routerQueue)) {\n queue.push(...routerQueue);\n } else {\n queue.push(routerQueue);\n }\n }\n\n function next() {\n if (queue.length === 0) {\n resolve();\n return;\n }\n const queueItem = queue.shift();\n\n queueItem.call(router, {\n router,\n to,\n from,\n resolve() {\n next();\n },\n reject() {\n reject();\n },\n direction,\n app: router.app,\n });\n }\n next();\n}\n\nexport default function processRouteQueue(to, from, resolve, reject, direction) {\n const router = this;\n function enterNextRoute() {\n if (to && to.route && (router.params.routesBeforeEnter || to.route.beforeEnter)) {\n router.allowPageChange = false;\n processQueue(\n router,\n router.params.routesBeforeEnter,\n to.route.beforeEnter,\n to,\n from,\n () => {\n router.allowPageChange = true;\n resolve();\n },\n () => {\n reject();\n },\n direction,\n );\n } else {\n resolve();\n }\n }\n function leaveCurrentRoute() {\n if (from && from.route && (router.params.routesBeforeLeave || from.route.beforeLeave)) {\n router.allowPageChange = false;\n processQueue(\n router,\n router.params.routesBeforeLeave,\n from.route.beforeLeave,\n to,\n from,\n () => {\n router.allowPageChange = true;\n enterNextRoute();\n },\n () => {\n reject();\n },\n direction,\n );\n } else {\n enterNextRoute();\n }\n }\n leaveCurrentRoute();\n}\n","export default function appRouterCheck(router, method) {\n if (!router.view) {\n throw new Error(\n `Framework7: it is not allowed to use router methods on global app router. Use router methods only on related View, e.g. app.views.main.router.${method}(...)`,\n );\n }\n}\n","export default function asyncComponent(router, component, resolve, reject) {\n function resolvePromise(componentPromise) {\n componentPromise\n .then((c) => {\n // eslint-disable-next-line\n resolve({ component: c.default || c._default || c });\n })\n .catch((err) => {\n reject();\n throw new Error(err);\n });\n }\n if (component instanceof Promise) {\n resolvePromise(component);\n return;\n }\n const asyncComponentResult = component.call(router);\n if (asyncComponentResult instanceof Promise) {\n resolvePromise(asyncComponentResult);\n } else {\n resolve({ component: asyncComponentResult });\n }\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, parseUrlQuery } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport redirect from './redirect.js';\nimport processRouteQueue from './process-route-queue.js';\nimport appRouterCheck from './app-router-check.js';\nimport asyncComponent from './async-component.js';\n\nfunction refreshPage() {\n const router = this;\n appRouterCheck(router, 'refreshPage');\n return router.navigate(router.currentRoute.url, {\n ignoreCache: true,\n reloadCurrent: true,\n });\n}\n\nfunction forward(router, el, forwardOptions = {}) {\n const document = getDocument();\n const $el = $(el);\n const app = router.app;\n const view = router.view;\n const options = extend(\n false,\n {\n animate: router.params.animate,\n browserHistory: true,\n replaceState: false,\n history: true,\n reloadCurrent: router.params.reloadPages,\n reloadPrevious: false,\n reloadAll: false,\n clearPreviousHistory: false,\n reloadDetail: router.params.reloadDetail,\n on: {},\n },\n forwardOptions,\n );\n\n const masterDetailEnabled = router.params.masterDetailBreakpoint > 0;\n const isMaster =\n masterDetailEnabled &&\n options.route &&\n options.route.route &&\n (options.route.route.master === true ||\n (typeof options.route.route.master === 'function' &&\n options.route.route.master(app, router)));\n\n let masterPageEl;\n let otherDetailPageEl;\n let detailsInBetweenRemoved = 0;\n\n let currentRouteIsModal = router.currentRoute.modal;\n let modalType;\n if (!currentRouteIsModal) {\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (\n router.currentRoute &&\n router.currentRoute.route &&\n router.currentRoute.route[modalLoadProp]\n ) {\n currentRouteIsModal = true;\n modalType = modalLoadProp;\n }\n });\n }\n\n if (currentRouteIsModal) {\n const modalToClose =\n router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get();\n const previousUrl = router.history[router.history.length - 2];\n let previousRoute = router.findMatchingRoute(previousUrl);\n if (!previousRoute && previousUrl) {\n previousRoute = {\n url: previousUrl,\n path: previousUrl.split('?')[0],\n query: parseUrlQuery(previousUrl),\n route: {\n path: previousUrl.split('?')[0],\n url: previousUrl,\n },\n };\n }\n\n router.modalRemove(modalToClose);\n }\n\n const dynamicNavbar = router.dynamicNavbar;\n\n const $viewEl = router.$el;\n const $newPage = $el;\n const reload = options.reloadPrevious || options.reloadCurrent || options.reloadAll;\n let $oldPage;\n\n let $navbarsEl;\n let $newNavbarEl;\n let $oldNavbarEl;\n\n router.allowPageChange = false;\n if ($newPage.length === 0) {\n router.allowPageChange = true;\n return router;\n }\n\n if ($newPage.length) {\n // Remove theme elements\n router.removeThemeElements($newPage);\n }\n\n if (dynamicNavbar) {\n $newNavbarEl = $newPage.children('.navbar');\n $navbarsEl = router.$navbarsEl;\n if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) {\n // Try from pageData\n $newNavbarEl = $newPage[0].f7Page.$navbarEl;\n }\n }\n\n // Save Keep Alive Cache\n if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !options.route.route.keepAliveData\n ) {\n options.route.route.keepAliveData = {\n pageEl: $el[0],\n };\n }\n\n // Pages In View\n const $pagesInView = $viewEl\n .children('.page:not(.stacked)')\n .filter((pageInView) => pageInView !== $newPage[0]);\n\n // Navbars In View\n let $navbarsInView;\n if (dynamicNavbar) {\n $navbarsInView = $navbarsEl\n .children('.navbar:not(.stacked)')\n .filter((navbarInView) => navbarInView !== $newNavbarEl[0]);\n }\n\n // Exit when reload previous and only 1 page in view so nothing ro reload\n if (options.reloadPrevious && $pagesInView.length < 2) {\n router.allowPageChange = true;\n return router;\n }\n\n // Find Detail' master page\n let isDetail;\n let reloadDetail;\n let isDetailRoot;\n if (masterDetailEnabled && !options.reloadAll) {\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) {\n masterPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n isDetail = !isMaster && masterPageEl;\n\n if (isDetail) {\n // Find Other Detail\n if (masterPageEl) {\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if ($pagesInView[i].classList.contains('page-master-detail')) {\n otherDetailPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n }\n }\n reloadDetail =\n isDetail &&\n options.reloadDetail &&\n app.width >= router.params.masterDetailBreakpoint &&\n masterPageEl;\n }\n if (isDetail) {\n isDetailRoot = !otherDetailPageEl || reloadDetail || options.reloadAll || options.reloadCurrent;\n }\n\n // New Page\n let newPagePosition = 'next';\n if (options.reloadCurrent || options.reloadAll || reloadDetail) {\n newPagePosition = 'current';\n } else if (options.reloadPrevious) {\n newPagePosition = 'previous';\n }\n $newPage\n .removeClass('page-previous page-current page-next')\n .addClass(\n `page-${newPagePosition}${isMaster ? ' page-master' : ''}${\n isDetail ? ' page-master-detail' : ''\n }${isDetailRoot ? ' page-master-detail-root' : ''}`,\n )\n .removeClass('stacked')\n .trigger('page:unstack')\n .trigger('page:position', { position: newPagePosition });\n router.emit('pageUnstack', $newPage[0]);\n router.emit('pagePosition', $newPage[0], newPagePosition);\n\n if (isMaster || isDetail) {\n $newPage.trigger('page:role', { role: isMaster ? 'master' : 'detail', root: !!isDetailRoot });\n router.emit('pageRole', $newPage[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n\n if (dynamicNavbar && $newNavbarEl.length) {\n $newNavbarEl\n .removeClass('navbar-previous navbar-current navbar-next')\n .addClass(\n `navbar-${newPagePosition}${isMaster ? ' navbar-master' : ''}${\n isDetail ? ' navbar-master-detail' : ''\n }${isDetailRoot ? ' navbar-master-detail-root' : ''}`,\n )\n .removeClass('stacked');\n $newNavbarEl.trigger('navbar:position', { position: newPagePosition });\n router.emit('navbarPosition', $newNavbarEl[0], newPagePosition);\n if (isMaster || isDetail) {\n router.emit('navbarRole', $newNavbarEl[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n }\n\n // Find Old Page\n if (options.reloadCurrent || reloadDetail) {\n if (reloadDetail) {\n $oldPage = $pagesInView.filter((pageEl) => !pageEl.classList.contains('page-master'));\n if (dynamicNavbar) {\n $oldNavbarEl = $($oldPage.map((pageEl) => app.navbar.getElByPage(pageEl)));\n }\n if ($oldPage.length > 1 && masterPageEl) {\n detailsInBetweenRemoved = $oldPage.length - 1;\n $(masterPageEl).removeClass('page-master-stacked').trigger('page:masterunstack');\n router.emit('pageMasterUnstack', masterPageEl);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage(masterPageEl)).removeClass('navbar-master-stacked');\n router.emit('navbarMasterUnstack', app.navbar.getElByPage(masterPageEl));\n }\n }\n } else {\n $oldPage = $pagesInView.eq($pagesInView.length - 1);\n if (dynamicNavbar) {\n $oldNavbarEl = $(app.navbar.getElByPage($oldPage));\n }\n }\n } else if (options.reloadPrevious) {\n $oldPage = $pagesInView.eq($pagesInView.length - 2);\n if (dynamicNavbar) {\n // $oldNavbarEl = $navbarsInView.eq($pagesInView.length - 2);\n $oldNavbarEl = $(app.navbar.getElByPage($oldPage));\n }\n } else if (options.reloadAll) {\n $oldPage = $pagesInView.filter((pageEl) => pageEl !== $newPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl = $navbarsInView.filter((navbarEl) => navbarEl !== $newNavbarEl[0]);\n }\n } else {\n let removedPageEls = [];\n let removedNavbarEls = [];\n if ($pagesInView.length > 1) {\n let i = 0;\n for (i = 0; i < $pagesInView.length - 1; i += 1) {\n if (masterPageEl && $pagesInView[i] === masterPageEl) {\n $pagesInView.eq(i).addClass('page-master-stacked');\n $pagesInView.eq(i).trigger('page:masterstack');\n router.emit('pageMasterStack', $pagesInView[i]);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage(masterPageEl)).addClass('navbar-master-stacked');\n router.emit('navbarMasterStack', app.navbar.getElByPage(masterPageEl));\n }\n continue; // eslint-disable-line\n }\n const oldNavbarEl = app.navbar.getElByPage($pagesInView.eq(i));\n if (router.params.stackPages) {\n $pagesInView.eq(i).addClass('stacked');\n $pagesInView.eq(i).trigger('page:stack');\n router.emit('pageStack', $pagesInView[i]);\n if (dynamicNavbar) {\n $(oldNavbarEl).addClass('stacked');\n }\n } else {\n // Page remove event\n removedPageEls.push($pagesInView[i]);\n router.pageCallback(\n 'beforeRemove',\n $pagesInView[i],\n $navbarsInView && $navbarsInView[i],\n 'previous',\n undefined,\n options,\n );\n router.removePage($pagesInView[i]);\n if (dynamicNavbar && oldNavbarEl) {\n removedNavbarEls.push(oldNavbarEl);\n router.removeNavbar(oldNavbarEl);\n }\n }\n }\n }\n $oldPage = $viewEl\n .children('.page:not(.stacked)')\n .filter((pageEl) => pageEl !== $newPage[0] && removedPageEls.indexOf(pageEl) < 0);\n if (dynamicNavbar) {\n $oldNavbarEl = $navbarsEl\n .children('.navbar:not(.stacked)')\n .filter(\n (navbarEl) =>\n navbarEl !== $newNavbarEl[0] && removedNavbarEls.indexOf(removedNavbarEls) < 0,\n );\n }\n removedPageEls = [];\n removedNavbarEls = [];\n }\n\n if (isDetail && !options.reloadAll) {\n if ($oldPage.length > 1 || reloadDetail) {\n $oldPage = $oldPage.filter((pageEl) => !pageEl.classList.contains('page-master'));\n }\n if ($oldNavbarEl && ($oldNavbarEl.length > 1 || reloadDetail)) {\n $oldNavbarEl = $oldNavbarEl.filter(\n (navbarEl) => !navbarEl.classList.contains('navbar-master'),\n );\n }\n }\n\n // Push State\n if (\n router.params.browserHistory &&\n (options.browserHistory || options.replaceState) &&\n !options.reloadPrevious\n ) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History[\n options.reloadCurrent ||\n (reloadDetail && otherDetailPageEl) ||\n options.reloadAll ||\n options.replaceState\n ? 'replace'\n : 'push'\n ](\n view.id,\n {\n url: options.route.url,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + options.route.url,\n );\n }\n\n if (!options.reloadPrevious) {\n // Current Page & Navbar\n router.currentPageEl = $newPage[0];\n if (dynamicNavbar && $newNavbarEl.length) {\n router.currentNavbarEl = $newNavbarEl[0];\n } else {\n delete router.currentNavbarEl;\n }\n\n // Current Route\n router.currentRoute = options.route;\n }\n\n // Update router history\n const url = options.route.url;\n\n if (options.history) {\n if (\n ((options.reloadCurrent || (reloadDetail && otherDetailPageEl)) && router.history.length) >\n 0 ||\n options.replaceState\n ) {\n if (reloadDetail && detailsInBetweenRemoved > 0) {\n router.history = router.history.slice(0, router.history.length - detailsInBetweenRemoved);\n }\n router.history[router.history.length - (options.reloadPrevious ? 2 : 1)] = url;\n } else if (options.reloadPrevious) {\n router.history[router.history.length - 2] = url;\n } else if (options.reloadAll) {\n router.history = [url];\n } else {\n router.history.push(url);\n }\n }\n router.saveHistory();\n\n // Insert new page and navbar\n const newPageInDom = $newPage.parents(document).length > 0;\n const f7Component = $newPage[0].f7Component;\n if (options.reloadPrevious) {\n if (f7Component && !newPageInDom) {\n f7Component.mount((componentEl) => {\n $(componentEl).insertBefore($oldPage);\n });\n } else {\n $newPage.insertBefore($oldPage);\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n if ($oldNavbarEl.length) {\n $newNavbarEl.insertBefore($oldNavbarEl);\n } else {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl);\n }\n }\n } else {\n if ($oldPage.next('.page')[0] !== $newPage[0]) {\n if (f7Component && !newPageInDom) {\n f7Component.mount((componentEl) => {\n $viewEl.append(componentEl);\n });\n } else {\n $viewEl.append($newPage[0]);\n }\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl[0]);\n }\n }\n if (!newPageInDom) {\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n newPagePosition,\n reload ? newPagePosition : 'current',\n options,\n $oldPage,\n );\n } else if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !$newPage[0].f7PageMounted\n ) {\n $newPage[0].f7PageMounted = true;\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n newPagePosition,\n reload ? newPagePosition : 'current',\n options,\n $oldPage,\n );\n }\n\n // Remove old page\n if ((options.reloadCurrent || reloadDetail) && $oldPage.length > 0) {\n if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n // Page remove event\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n } else if (options.reloadAll) {\n $oldPage.each((pageEl, index) => {\n const $oldPageEl = $(pageEl);\n const $oldNavbarElEl = $(app.navbar.getElByPage($oldPageEl));\n if (router.params.stackPages && router.initialPages.indexOf($oldPageEl[0]) >= 0) {\n $oldPageEl.addClass('stacked');\n $oldPageEl.trigger('page:stack');\n router.emit('pageStack', $oldPageEl[0]);\n if (dynamicNavbar) {\n $oldNavbarElEl.addClass('stacked');\n }\n } else {\n // Page remove event\n if ($oldPageEl.hasClass('page-current')) {\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n }\n router.pageCallback(\n 'beforeRemove',\n $oldPageEl,\n $oldNavbarEl && $oldNavbarEl.eq(index),\n 'previous',\n undefined,\n options,\n );\n router.removePage($oldPageEl);\n if (dynamicNavbar && $oldNavbarElEl.length) {\n router.removeNavbar($oldNavbarElEl);\n }\n }\n });\n } else if (options.reloadPrevious) {\n if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n // Page remove event\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n }\n\n // Load Tab\n if (options.route.route.tab) {\n router.tabLoad(\n options.route.route.tab,\n extend({}, options, {\n history: false,\n browserHistory: false,\n }),\n );\n }\n\n // Check master detail\n if (masterDetailEnabled) {\n view.checkMasterDetailBreakpoint();\n }\n\n // Page init and before init events\n router.pageCallback(\n 'init',\n $newPage,\n $newNavbarEl,\n newPagePosition,\n reload ? newPagePosition : 'current',\n options,\n $oldPage,\n );\n\n if (options.reloadCurrent || options.reloadAll || reloadDetail) {\n router.allowPageChange = true;\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, newPagePosition, 'current', options);\n $newPage.removeAttr('aria-hidden');\n if (dynamicNavbar && $newNavbarEl) {\n $newNavbarEl.removeAttr('aria-hidden');\n }\n router.pageCallback('afterIn', $newPage, $newNavbarEl, newPagePosition, 'current', options);\n if (options.reloadCurrent && options.clearPreviousHistory) router.clearPreviousHistory();\n if (reloadDetail) {\n router.setPagePosition($(masterPageEl), 'previous');\n if (masterPageEl.f7Page && masterPageEl.f7Page.navbarEl) {\n router.setNavbarPosition($(masterPageEl.f7Page.navbarEl), 'previous');\n }\n }\n return router;\n }\n if (options.reloadPrevious) {\n router.allowPageChange = true;\n return router;\n }\n\n // Before animation event\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'previous', options);\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'next', 'current', options);\n\n // Animation\n function afterAnimation() {\n router.setPagePosition($newPage, 'current', false);\n router.setPagePosition($oldPage, 'previous', !$oldPage.hasClass('page-master'));\n if (dynamicNavbar) {\n router.setNavbarPosition($newNavbarEl, 'current', false);\n router.setNavbarPosition($oldNavbarEl, 'previous', !$oldNavbarEl.hasClass('navbar-master'));\n }\n // After animation event\n router.allowPageChange = true;\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'previous', options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'next', 'current', options);\n\n let keepOldPage =\n (router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`]) && !isMaster;\n if (!keepOldPage) {\n if (\n $newPage.hasClass('smart-select-page') ||\n $newPage.hasClass('photo-browser-page') ||\n $newPage.hasClass('autocomplete-page') ||\n $newPage.hasClass('color-picker-page')\n ) {\n keepOldPage = true;\n }\n }\n if (!keepOldPage) {\n if (router.params.stackPages) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else if (\n !($newPage.attr('data-name') && $newPage.attr('data-name') === 'smart-select-page')\n ) {\n // Remove event\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n }\n if (options.clearPreviousHistory) router.clearPreviousHistory();\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n if (router.params.browserHistory) {\n History.clearRouterQueue();\n }\n }\n function setPositionClasses() {\n router.setPagePosition($oldPage, 'current', false);\n router.setPagePosition($newPage, 'next', false);\n if (dynamicNavbar) {\n router.setNavbarPosition($oldNavbarEl, 'current', false);\n router.setNavbarPosition($newNavbarEl, 'next', false);\n }\n }\n if (options.animate && !(isMaster && app.width >= router.params.masterDetailBreakpoint)) {\n const delay = router.params[`${router.app.theme}PageLoadDelay`];\n let transition = router.params.transition;\n if (options.transition) transition = options.transition;\n if (!transition && router.currentRoute && router.currentRoute.route) {\n transition = router.currentRoute.route.transition;\n }\n if (!transition && router.currentRoute && router.currentRoute.route.options) {\n transition = router.currentRoute.route.options.transition;\n }\n if (transition) {\n $newPage[0].f7PageTransition = transition;\n }\n\n if (delay) {\n setTimeout(() => {\n setPositionClasses();\n router.animate(\n $oldPage,\n $newPage,\n $oldNavbarEl,\n $newNavbarEl,\n 'forward',\n transition,\n () => {\n afterAnimation();\n },\n );\n }, delay);\n } else {\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'forward', transition, () => {\n afterAnimation();\n });\n }\n } else {\n afterAnimation();\n }\n return router;\n}\nfunction load(router, loadParams = {}, loadOptions = {}, ignorePageChange) {\n if (!router.allowPageChange && !ignorePageChange) return router;\n const params = loadParams;\n const options = loadOptions;\n const { url, content, el, pageName, component, componentUrl } = params;\n\n if (\n !options.reloadCurrent &&\n options.route &&\n options.route.route &&\n options.route.route.parentPath &&\n router.currentRoute.route &&\n router.currentRoute.route.parentPath === options.route.route.parentPath\n ) {\n // Do something nested\n if (options.route.url === router.url) {\n router.allowPageChange = true;\n return false;\n }\n // Check for same params\n let sameParams =\n Object.keys(options.route.params).length === Object.keys(router.currentRoute.params).length;\n if (sameParams) {\n // Check for equal params name\n Object.keys(options.route.params).forEach((paramName) => {\n if (\n !(paramName in router.currentRoute.params) ||\n router.currentRoute.params[paramName] !== options.route.params[paramName]\n ) {\n sameParams = false;\n }\n });\n }\n if (sameParams) {\n if (options.route.route.tab) {\n return router.tabLoad(options.route.route.tab, options);\n }\n return false;\n }\n if (\n !sameParams &&\n options.route.route.tab &&\n router.currentRoute.route.tab &&\n router.currentRoute.parentPath === options.route.parentPath\n ) {\n return router.tabLoad(options.route.route.tab, options);\n }\n }\n\n if (\n options.route &&\n options.route.url &&\n router.url === options.route.url &&\n !(options.reloadCurrent || options.reloadPrevious) &&\n !router.params.allowDuplicateUrls\n ) {\n router.allowPageChange = true;\n return false;\n }\n\n if (!options.route && url) {\n options.route = router.parseRouteUrl(url);\n extend(options.route, { route: { url, path: url } });\n }\n\n // Component Callbacks\n function resolve(pageEl, newOptions) {\n return forward(router, pageEl, extend(options, newOptions));\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (url || componentUrl || component) {\n router.allowPageChange = false;\n }\n\n // Proceed\n if (content) {\n forward(router, router.getPageEl(content), options);\n } else if (el) {\n // Load page from specified HTMLElement or by page name in pages container\n forward(router, router.getPageEl(el), options);\n } else if (pageName) {\n // Load page by page name in pages container\n forward(router, router.$el.children(`.page[data-name=\"${pageName}\"]`).eq(0), options);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.pageComponentLoader({\n routerEl: router.el,\n component,\n componentUrl,\n options,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, options)\n .then((pageContent) => {\n forward(router, router.getPageEl(pageContent), options);\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n }\n return router;\n}\n\nfunction navigate(navigateParams, navigateOptions = {}) {\n const router = this;\n\n if (router.swipeBackActive) return router;\n let url;\n let createRoute;\n let name;\n let path;\n let query;\n let params;\n let route;\n if (typeof navigateParams === 'string') {\n url = navigateParams;\n } else {\n url = navigateParams.url;\n createRoute = navigateParams.route;\n name = navigateParams.name;\n path = navigateParams.path;\n query = navigateParams.query;\n params = navigateParams.params;\n }\n if (name || path) {\n url = router.generateUrl({ path, name, params, query });\n if (url) {\n return router.navigate(url, navigateOptions);\n }\n return router;\n }\n const app = router.app;\n appRouterCheck(router, 'navigate');\n if (url === '#' || url === '') {\n return router;\n }\n\n let navigateUrl = url.replace('./', '');\n if (navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) {\n const currentPath = router.currentRoute.parentPath || router.currentRoute.path;\n navigateUrl = ((currentPath ? `${currentPath}/` : '/') + navigateUrl)\n .replace('///', '/')\n .replace('//', '/');\n }\n if (createRoute) {\n route = extend(router.parseRouteUrl(navigateUrl), {\n route: extend({}, createRoute),\n });\n } else {\n route = router.findMatchingRoute(navigateUrl);\n }\n\n if (!route) {\n return router;\n }\n if (route.route && route.route.viewName) {\n const anotherViewName = route.route.viewName;\n const anotherView = app.views[anotherViewName];\n if (!anotherView) {\n throw new Error(\n `Framework7: There is no View with \"${anotherViewName}\" name that was specified in this route`,\n );\n }\n if (anotherView !== router.view) {\n return anotherView.router.navigate(navigateParams, navigateOptions);\n }\n }\n\n if (route.route.redirect) {\n return redirect.call(router, 'forward', route, navigateOptions);\n }\n\n const options = {};\n if (route.route.options) {\n extend(options, route.route.options, navigateOptions);\n } else {\n extend(options, navigateOptions);\n }\n\n if (\n options.openIn &&\n (!router.params.ignoreOpenIn || (router.params.ignoreOpenIn && router.history.length > 0))\n ) {\n return router.openIn(router, navigateUrl, options);\n }\n\n options.route = route;\n\n function resolve() {\n let routerLoaded = false;\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (route.route[modalLoadProp] && !routerLoaded) {\n routerLoaded = true;\n router.modalLoad(modalLoadProp, route, options, 'forward');\n }\n });\n if (route.route.keepAlive && route.route.keepAliveData) {\n load(router, { el: route.route.keepAliveData.pageEl }, options, false);\n routerLoaded = true;\n }\n 'url content component pageName el componentUrl'.split(' ').forEach((pageLoadProp) => {\n if (route.route[pageLoadProp] && !routerLoaded) {\n routerLoaded = true;\n load(router, { [pageLoadProp]: route.route[pageLoadProp] }, options, false);\n }\n });\n if (routerLoaded) return;\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n router.allowPageChange = false;\n let resolvedAsModal = false;\n\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (resolveParams[modalLoadProp]) {\n resolvedAsModal = true;\n const modalRoute = extend({}, route, { route: resolveParams });\n router.allowPageChange = true;\n router.modalLoad(modalLoadProp, modalRoute, extend(options, resolveOptions), 'forward');\n }\n });\n if (resolvedAsModal) return;\n load(router, resolveParams, extend(options, resolveOptions), true);\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (route.route.async) {\n router.allowPageChange = false;\n route.route.async.call(router, {\n router,\n to: options.route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction: 'forward',\n app,\n });\n }\n if (route.route.asyncComponent) {\n asyncComponent(router, route.route.asyncComponent, asyncResolve, asyncReject);\n }\n }\n function reject() {\n router.allowPageChange = true;\n }\n\n if (router.params.masterDetailBreakpoint > 0 && route.route.masterRoute) {\n // load detail route\n let preloadMaster = true;\n let masterLoaded = false;\n if (router.currentRoute && router.currentRoute.route) {\n if (\n (router.currentRoute.route.master === true ||\n (typeof router.currentRoute.route.master === 'function' &&\n router.currentRoute.route.master(app, router))) &&\n (router.currentRoute.route === route.route.masterRoute ||\n router.currentRoute.route.path === route.route.masterRoute.path)\n ) {\n preloadMaster = false;\n }\n if (\n router.currentRoute.route.masterRoute &&\n (router.currentRoute.route.masterRoute === route.route.masterRoute ||\n router.currentRoute.route.masterRoute.path === route.route.masterRoute.path)\n ) {\n preloadMaster = false;\n masterLoaded = true;\n }\n }\n if (preloadMaster || (masterLoaded && navigateOptions.reloadAll)) {\n router.navigate(\n { path: route.route.masterRoute.path, params: route.params || {} },\n {\n animate: false,\n reloadAll: navigateOptions.reloadAll,\n reloadCurrent: navigateOptions.reloadCurrent,\n reloadPrevious: navigateOptions.reloadPrevious,\n browserHistory: !navigateOptions.initial,\n history: !navigateOptions.initial,\n once: {\n pageAfterIn() {\n router.navigate(\n navigateParams,\n extend({}, navigateOptions, {\n animate: false,\n reloadAll: false,\n reloadCurrent: false,\n reloadPrevious: false,\n history: !navigateOptions.initial,\n browserHistory: !navigateOptions.initial,\n }),\n );\n },\n },\n },\n );\n return router;\n }\n }\n\n processRouteQueue.call(\n router,\n route,\n router.currentRoute,\n () => {\n if (route.route.modules) {\n app\n .loadModules(\n Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules],\n )\n .then(() => {\n resolve();\n })\n .catch(() => {\n reject();\n });\n } else {\n resolve();\n }\n },\n () => {\n reject();\n },\n 'forward',\n );\n\n // Return Router\n return router;\n}\nexport { refreshPage, navigate };\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, parseUrlQuery } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport History from '../../shared/history.js';\nimport redirect from './redirect.js';\nimport processRouteQueue from './process-route-queue.js';\nimport appRouterCheck from './app-router-check.js';\nimport asyncComponent from './async-component.js';\n\nfunction backward(router, el, backwardOptions) {\n const device = getDevice();\n const document = getDocument();\n const $el = $(el);\n const app = router.app;\n const view = router.view;\n\n const options = extend(\n false,\n {\n animate: router.params.animate,\n browserHistory: true,\n replaceState: false,\n },\n backwardOptions,\n );\n\n const masterDetailEnabled = router.params.masterDetailBreakpoint > 0;\n const isMaster =\n masterDetailEnabled &&\n options.route &&\n options.route.route &&\n (options.route.route.master === true ||\n (typeof options.route.route.master === 'function' &&\n options.route.route.master(app, router)));\n let masterPageEl;\n let masterPageRemoved;\n\n const dynamicNavbar = router.dynamicNavbar;\n\n const $newPage = $el;\n const $oldPage = router.$el.children('.page-current');\n const initialPreload = $oldPage.length === 0 && options.preload;\n const currentIsMaster = masterDetailEnabled && $oldPage.hasClass('page-master');\n\n if ($newPage.length) {\n // Remove theme elements\n router.removeThemeElements($newPage);\n }\n\n let $navbarsEl;\n let $newNavbarEl;\n let $oldNavbarEl;\n\n if (dynamicNavbar) {\n $newNavbarEl = $newPage.children('.navbar');\n $navbarsEl = router.$navbarsEl;\n if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) {\n // Try from pageData\n $newNavbarEl = $newPage[0].f7Page.$navbarEl;\n }\n $oldNavbarEl = $navbarsEl.find('.navbar-current');\n }\n\n router.allowPageChange = false;\n if ($newPage.length === 0 || ($oldPage.length === 0 && !options.preload)) {\n router.allowPageChange = true;\n return router;\n }\n\n // Remove theme elements\n router.removeThemeElements($newPage);\n\n // Save Keep Alive Cache\n if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !options.route.route.keepAliveData\n ) {\n options.route.route.keepAliveData = {\n pageEl: $el[0],\n };\n }\n\n // Pages In View\n let isDetail;\n let isDetailRoot;\n if (masterDetailEnabled) {\n const $pagesInView = router.$el\n .children('.page:not(.stacked)')\n .filter((pageInView) => pageInView !== $newPage[0]);\n\n // Find Detail' master page\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) {\n masterPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n\n isDetail =\n !isMaster &&\n masterPageEl &&\n router.history.indexOf(options.route.url) >\n router.history.indexOf(masterPageEl.f7Page.route.url);\n\n if (\n !isDetail &&\n !isMaster &&\n masterPageEl &&\n masterPageEl.f7Page &&\n options.route.route.masterRoute\n ) {\n isDetail = options.route.route.masterRoute.path === masterPageEl.f7Page.route.route.path;\n }\n }\n if (isDetail && masterPageEl && masterPageEl.f7Page) {\n isDetailRoot =\n router.history.indexOf(options.route.url) -\n router.history.indexOf(masterPageEl.f7Page.route.url) ===\n 1;\n }\n\n // New Page\n $newPage\n .addClass(\n `page-${initialPreload ? 'current' : 'previous'}${isMaster ? ' page-master' : ''}${\n isDetail ? ' page-master-detail' : ''\n }${isDetailRoot ? ' page-master-detail-root' : ''}`,\n )\n .removeClass('stacked')\n .removeAttr('aria-hidden')\n .trigger('page:unstack')\n .trigger('page:position', { position: initialPreload ? 'current' : 'previous' });\n router.emit('pageUnstack', $newPage[0]);\n router.emit('pagePosition', $newPage[0], initialPreload ? 'current' : 'previous');\n if (isMaster || isDetail) {\n $newPage.trigger('page:role', { role: isMaster ? 'master' : 'detail', root: !!isDetailRoot });\n router.emit('pageRole', $newPage[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n\n if (dynamicNavbar && $newNavbarEl.length > 0) {\n $newNavbarEl\n .addClass(\n `navbar-${initialPreload ? 'current' : 'previous'}${isMaster ? ' navbar-master' : ''}${\n isDetail ? ' navbar-master-detail' : ''\n }${isDetailRoot ? ' navbar-master-detail-root' : ''}`,\n )\n .removeClass('stacked')\n .removeAttr('aria-hidden');\n $newNavbarEl.trigger('navbar:position', { position: initialPreload ? 'current' : 'previous' });\n router.emit('navbarPosition', $newNavbarEl[0], initialPreload ? 'current' : 'previous');\n if (isMaster || isDetailRoot) {\n router.emit('navbarRole', $newNavbarEl[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot,\n });\n }\n }\n\n // Remove previous page in case of \"forced\"\n let backIndex;\n if (options.force) {\n if (\n $oldPage.prev('.page-previous:not(.stacked)').length > 0 ||\n $oldPage.prev('.page-previous').length === 0\n ) {\n if (router.history.indexOf(options.route.url) >= 0) {\n backIndex = router.history.length - router.history.indexOf(options.route.url) - 1;\n router.history = router.history.slice(0, router.history.indexOf(options.route.url) + 2);\n view.history = router.history;\n } else if (router.history[[router.history.length - 2]]) {\n router.history[router.history.length - 2] = options.route.url;\n } else {\n router.history.unshift(router.url);\n }\n\n if (backIndex && router.params.stackPages) {\n $oldPage.prevAll('.page-previous').each((pageToRemove) => {\n const $pageToRemove = $(pageToRemove);\n let $navbarToRemove;\n if (dynamicNavbar) {\n // $navbarToRemove = $oldNavbarEl.prevAll('.navbar-previous').eq(index);\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if ($pageToRemove[0] !== $newPage[0] && $pageToRemove.index() > $newPage.index()) {\n if (router.initialPages.indexOf($pageToRemove[0]) >= 0) {\n $pageToRemove.addClass('stacked');\n $pageToRemove.trigger('page:stack');\n router.emit('pageStack', $pageToRemove[0]);\n if (dynamicNavbar) {\n $navbarToRemove.addClass('stacked');\n }\n } else {\n router.pageCallback(\n 'beforeRemove',\n $pageToRemove,\n $navbarToRemove,\n 'previous',\n undefined,\n options,\n );\n if ($pageToRemove[0] === masterPageEl) {\n masterPageRemoved = true;\n }\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length > 0) {\n router.removeNavbar($navbarToRemove);\n }\n }\n }\n });\n } else {\n const $pageToRemove = $oldPage.prev('.page-previous:not(.stacked)');\n let $navbarToRemove;\n if (dynamicNavbar) {\n // $navbarToRemove = $oldNavbarEl.prev('.navbar-inner:not(.stacked)');\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if (router.params.stackPages && router.initialPages.indexOf($pageToRemove[0]) >= 0) {\n $pageToRemove.addClass('stacked');\n $pageToRemove.trigger('page:stack');\n router.emit('pageStack', $pageToRemove[0]);\n $navbarToRemove.addClass('stacked');\n } else if ($pageToRemove.length > 0) {\n router.pageCallback(\n 'beforeRemove',\n $pageToRemove,\n $navbarToRemove,\n 'previous',\n undefined,\n options,\n );\n if ($pageToRemove[0] === masterPageEl) {\n masterPageRemoved = true;\n }\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length) {\n router.removeNavbar($navbarToRemove);\n }\n }\n }\n }\n }\n\n // Insert new page\n const newPageInDom = $newPage.parents(document).length > 0;\n const f7Component = $newPage[0].f7Component;\n\n function insertPage() {\n if (initialPreload) {\n if (!newPageInDom && f7Component) {\n f7Component.mount((componentEl) => {\n router.$el.append(componentEl);\n });\n } else {\n router.$el.append($newPage);\n }\n }\n if ($newPage.next($oldPage).length === 0) {\n if (!newPageInDom && f7Component) {\n f7Component.mount((componentEl) => {\n $(componentEl).insertBefore($oldPage);\n });\n } else {\n $newPage.insertBefore($oldPage);\n }\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n $newNavbarEl.insertBefore($oldNavbarEl);\n if ($oldNavbarEl.length > 0) {\n $newNavbarEl.insertBefore($oldNavbarEl);\n } else {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl);\n }\n }\n if (!newPageInDom) {\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n 'previous',\n 'current',\n options,\n $oldPage,\n );\n } else if (\n options.route &&\n options.route.route &&\n options.route.route.keepAlive &&\n !$newPage[0].f7PageMounted\n ) {\n $newPage[0].f7PageMounted = true;\n router.pageCallback(\n 'mounted',\n $newPage,\n $newNavbarEl,\n 'previous',\n 'current',\n options,\n $oldPage,\n );\n }\n }\n\n if (options.preload) {\n // Insert Page\n insertPage();\n // Tab route\n if (options.route.route.tab) {\n router.tabLoad(\n options.route.route.tab,\n extend({}, options, {\n history: false,\n browserHistory: false,\n preload: true,\n }),\n );\n }\n if (isMaster) {\n $newPage.removeClass('page-master-stacked').trigger('page:masterunstack');\n router.emit('pageMasterUnstack', $newPage[0]);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage($newPage)).removeClass('navbar-master-stacked');\n router.emit('navbarMasterUnstack', app.navbar.getElByPage($newPage));\n }\n }\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n if (initialPreload) {\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'current', undefined, options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'current', undefined, options);\n }\n const $previousPages = $newPage.prevAll('.page-previous:not(.stacked):not(.page-master)');\n if ($previousPages.length > 0) {\n $previousPages.each((pageToRemove) => {\n const $pageToRemove = $(pageToRemove);\n let $navbarToRemove;\n if (dynamicNavbar) {\n // $navbarToRemove = $newNavbarEl.prevAll('.navbar-previous:not(.stacked)').eq(index);\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if (router.params.stackPages && router.initialPages.indexOf(pageToRemove) >= 0) {\n $pageToRemove.addClass('stacked');\n $pageToRemove.trigger('page:stack');\n router.emit('pageStack', $pageToRemove[0]);\n if (dynamicNavbar) {\n $navbarToRemove.addClass('stacked');\n }\n } else {\n router.pageCallback(\n 'beforeRemove',\n $pageToRemove,\n $navbarToRemove,\n 'previous',\n undefined,\n );\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length) {\n router.removeNavbar($navbarToRemove);\n }\n }\n });\n }\n router.allowPageChange = true;\n return router;\n }\n\n // History State\n if (!(device.ie || device.edge || (device.firefox && !device.ios))) {\n if (router.params.browserHistory && options.browserHistory) {\n if (options.replaceState) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(\n view.id,\n {\n url: options.route.url,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + options.route.url,\n );\n } else if (backIndex) {\n History.go(-backIndex);\n } else {\n History.back();\n }\n }\n }\n\n // Update History\n if (options.replaceState) {\n router.history[router.history.length - 1] = options.route.url;\n } else {\n if (router.history.length === 1) {\n router.history.unshift(router.url);\n }\n router.history.pop();\n }\n router.saveHistory();\n\n // Current Page & Navbar\n router.currentPageEl = $newPage[0];\n if (dynamicNavbar && $newNavbarEl.length) {\n router.currentNavbarEl = $newNavbarEl[0];\n } else {\n delete router.currentNavbarEl;\n }\n\n // Current Route\n router.currentRoute = options.route;\n\n // History State\n if (device.ie || device.edge || (device.firefox && !device.ios)) {\n if (router.params.browserHistory && options.browserHistory) {\n if (options.replaceState) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(\n view.id,\n {\n url: options.route.url,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + options.route.url,\n );\n } else if (backIndex) {\n History.go(-backIndex);\n } else {\n History.back();\n }\n }\n }\n\n // Insert Page\n insertPage();\n\n // Load Tab\n if (options.route.route.tab) {\n router.tabLoad(\n options.route.route.tab,\n extend({}, options, {\n history: false,\n browserHistory: false,\n }),\n );\n }\n\n // Check master detail\n\n if (masterDetailEnabled && (currentIsMaster || masterPageRemoved)) {\n view.checkMasterDetailBreakpoint(false);\n }\n\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n\n // Before animation callback\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'next', options);\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'previous', 'current', options);\n\n // Animation\n function afterAnimation() {\n // Set classes\n router.setPagePosition($newPage, 'current', false);\n router.setPagePosition($oldPage, 'next', true);\n if (dynamicNavbar) {\n router.setNavbarPosition($newNavbarEl, 'current', false);\n router.setNavbarPosition($oldNavbarEl, 'next', true);\n }\n\n // After animation event\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'next', options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'previous', 'current', options);\n\n // Remove Old Page\n if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) {\n $oldPage.addClass('stacked');\n $oldPage.trigger('page:stack');\n router.emit('pageStack', $oldPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'next', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n\n router.allowPageChange = true;\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n // Preload previous page\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history[router.history.length - 2] && !isMaster) {\n router.back(router.history[router.history.length - 2], { preload: true });\n }\n if (router.params.browserHistory) {\n History.clearRouterQueue();\n }\n }\n\n function setPositionClasses() {\n router.setPagePosition($oldPage, 'current');\n router.setPagePosition($newPage, 'previous', false);\n if (dynamicNavbar) {\n router.setNavbarPosition($oldNavbarEl, 'current');\n router.setNavbarPosition($newNavbarEl, 'previous', false);\n }\n }\n\n if (options.animate && !(currentIsMaster && app.width >= router.params.masterDetailBreakpoint)) {\n let transition = router.params.transition;\n if ($oldPage[0] && $oldPage[0].f7PageTransition) {\n transition = $oldPage[0].f7PageTransition;\n delete $oldPage[0].f7PageTransition;\n }\n if (options.transition) transition = options.transition;\n if (!transition && router.previousRoute && router.previousRoute.route) {\n transition = router.previousRoute.route.transition;\n }\n if (\n !transition &&\n router.previousRoute &&\n router.previousRoute.route &&\n router.previousRoute.route.options\n ) {\n transition = router.previousRoute.route.options.transition;\n }\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'backward', transition, () => {\n afterAnimation();\n });\n } else {\n afterAnimation();\n }\n\n return router;\n}\nfunction loadBack(router, backParams, backOptions, ignorePageChange) {\n if (!router.allowPageChange && !ignorePageChange) return router;\n const params = backParams;\n const options = backOptions;\n const { url, content, el, pageName, component, componentUrl } = params;\n\n if (\n options.route.url &&\n router.url === options.route.url &&\n !(options.reloadCurrent || options.reloadPrevious) &&\n !router.params.allowDuplicateUrls\n ) {\n return false;\n }\n\n if (!options.route && url) {\n options.route = router.parseRouteUrl(url);\n }\n\n // Component Callbacks\n function resolve(pageEl, newOptions) {\n return backward(router, pageEl, extend(options, newOptions));\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (url || componentUrl || component) {\n router.allowPageChange = false;\n }\n\n // Proceed\n if (content) {\n backward(router, router.getPageEl(content), options);\n } else if (el) {\n // Load page from specified HTMLElement or by page name in pages container\n backward(router, router.getPageEl(el), options);\n } else if (pageName) {\n // Load page by page name in pages container\n backward(router, router.$el.children(`.page[data-name=\"${pageName}\"]`).eq(0), options);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.pageComponentLoader({\n routerEl: router.el,\n component,\n componentUrl,\n options,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, options)\n .then((pageContent) => {\n backward(router, router.getPageEl(pageContent), options);\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n }\n return router;\n}\nfunction back(...args) {\n const router = this;\n const device = getDevice();\n if (router.swipeBackActive) return router;\n let navigateUrl;\n let navigateOptions;\n let route;\n if (typeof args[0] === 'object') {\n navigateOptions = args[0] || {};\n } else {\n navigateUrl = args[0];\n navigateOptions = args[1] || {};\n }\n\n const { name, params, query } = navigateOptions;\n if (name) {\n navigateUrl = router.generateUrl({ name, params, query });\n if (navigateUrl) {\n return router.back(\n navigateUrl,\n extend({}, navigateOptions, {\n name: null,\n params: null,\n query: null,\n }),\n );\n }\n return router;\n }\n\n const app = router.app;\n appRouterCheck(router, 'back');\n\n let currentRouteIsModal = router.currentRoute.modal;\n let modalType;\n if (!currentRouteIsModal) {\n 'popup popover sheet loginScreen actions customModal panel'\n .split(' ')\n .forEach((modalLoadProp) => {\n if (router.currentRoute.route[modalLoadProp]) {\n currentRouteIsModal = true;\n modalType = modalLoadProp;\n }\n });\n }\n if (currentRouteIsModal && !navigateOptions.preload) {\n const modalToClose =\n router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get();\n const previousUrl = router.history[router.history.length - 2];\n let previousRoute;\n // check if previous route is modal too\n if (modalToClose && modalToClose.$el) {\n const prevOpenedModals = modalToClose.$el.prevAll('.modal-in');\n if (prevOpenedModals.length && prevOpenedModals[0].f7Modal) {\n const modalEl = prevOpenedModals[0];\n // check if current router not inside of the modalEl\n if (!router.$el.parents(modalEl).length) {\n previousRoute = modalEl.f7Modal.route;\n }\n }\n }\n if (!previousRoute) {\n previousRoute = router.findMatchingRoute(previousUrl);\n }\n\n if (!previousRoute && previousUrl) {\n previousRoute = {\n url: previousUrl,\n path: previousUrl.split('?')[0],\n query: parseUrlQuery(previousUrl),\n route: {\n path: previousUrl.split('?')[0],\n url: previousUrl,\n },\n };\n }\n if (!navigateUrl || navigateUrl.replace(/[# ]/g, '').trim().length === 0) {\n if (!previousRoute || !modalToClose) {\n return router;\n }\n }\n const forceOtherUrl = navigateOptions.force && previousRoute && navigateUrl;\n if (previousRoute && modalToClose) {\n const isBrokenBrowserHistory = device.ie || device.edge || (device.firefox && !device.ios);\n const needHistoryBack =\n router.params.browserHistory && navigateOptions.browserHistory !== false;\n const currentRouteWithoutBrowserHistory =\n router.currentRoute &&\n router.currentRoute.route &&\n router.currentRoute.route.options &&\n router.currentRoute.route.options.browserHistory === false;\n if (needHistoryBack && !isBrokenBrowserHistory && !currentRouteWithoutBrowserHistory) {\n History.back();\n }\n router.currentRoute = previousRoute;\n router.history.pop();\n router.saveHistory();\n\n if (needHistoryBack && isBrokenBrowserHistory && !currentRouteWithoutBrowserHistory) {\n History.back();\n }\n\n router.modalRemove(modalToClose);\n if (forceOtherUrl) {\n router.navigate(navigateUrl, { reloadCurrent: true });\n }\n } else if (modalToClose) {\n router.modalRemove(modalToClose);\n if (navigateUrl) {\n router.navigate(navigateUrl, { reloadCurrent: true });\n }\n }\n return router;\n }\n let $previousPage = router.$el\n .children('.page-current')\n .prevAll('.page-previous:not(.page-master)')\n .eq(0);\n\n let skipMaster;\n if (router.params.masterDetailBreakpoint > 0) {\n const classes = [];\n router.$el.children('.page').each((pageEl) => {\n classes.push(pageEl.className);\n });\n\n const $previousMaster = router.$el.children('.page-current').prevAll('.page-master').eq(0);\n if ($previousMaster.length) {\n const expectedPreviousPageUrl = router.history[router.history.length - 2];\n const expectedPreviousPageRoute = router.findMatchingRoute(expectedPreviousPageUrl);\n if (\n expectedPreviousPageRoute &&\n $previousMaster[0].f7Page &&\n expectedPreviousPageRoute.route === $previousMaster[0].f7Page.route.route\n ) {\n $previousPage = $previousMaster;\n if (!navigateOptions.preload) {\n skipMaster = app.width >= router.params.masterDetailBreakpoint;\n }\n }\n }\n }\n\n if (!navigateOptions.force && $previousPage.length && !skipMaster) {\n if (\n router.params.browserHistory &&\n $previousPage[0].f7Page &&\n router.history[router.history.length - 2] !== $previousPage[0].f7Page.route.url\n ) {\n router.back(\n router.history[router.history.length - 2],\n extend(navigateOptions, { force: true }),\n );\n return router;\n }\n const previousPageRoute = $previousPage[0].f7Page.route;\n if (navigateOptions.preload && $previousPage.hasClass('stacked')) {\n loadBack(\n router,\n { el: $previousPage },\n extend(navigateOptions, {\n route: previousPageRoute,\n }),\n );\n return router;\n }\n processRouteQueue.call(\n router,\n previousPageRoute,\n router.currentRoute,\n () => {\n loadBack(\n router,\n { el: $previousPage },\n extend(navigateOptions, {\n route: previousPageRoute,\n }),\n );\n },\n () => {},\n 'backward',\n );\n\n return router;\n }\n\n // Navigate URL\n if (navigateUrl === '#') {\n navigateUrl = undefined;\n }\n if (navigateUrl && navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) {\n navigateUrl = ((router.path || '/') + navigateUrl).replace('//', '/');\n }\n if (!navigateUrl && router.history.length > 1) {\n navigateUrl = router.history[router.history.length - 2];\n }\n if (skipMaster && !navigateOptions.force && router.history[router.history.length - 3]) {\n return router.back(\n router.history[router.history.length - 3],\n extend({}, navigateOptions || {}, {\n force: true,\n animate: false,\n }),\n );\n }\n if (skipMaster && !navigateOptions.force) {\n return router;\n }\n\n // Find route to load\n route = router.findMatchingRoute(navigateUrl);\n if (!route) {\n if (navigateUrl) {\n route = {\n url: navigateUrl,\n path: navigateUrl.split('?')[0],\n query: parseUrlQuery(navigateUrl),\n route: {\n path: navigateUrl.split('?')[0],\n url: navigateUrl,\n },\n };\n }\n }\n if (!route) {\n return router;\n }\n\n if (route.route.redirect) {\n return redirect.call(router, 'backward', route, navigateOptions);\n }\n\n const options = {};\n if (route.route.options) {\n extend(options, route.route.options, navigateOptions);\n } else {\n extend(options, navigateOptions);\n }\n options.route = route;\n\n let backForceLoaded;\n if (options.force && router.params.stackPages) {\n router.$el.children('.page-previous.stacked').each((pageEl) => {\n if (pageEl.f7Page && pageEl.f7Page.route && pageEl.f7Page.route.url === route.url) {\n backForceLoaded = true;\n loadBack(router, { el: pageEl }, options);\n }\n });\n if (backForceLoaded) {\n return router;\n }\n }\n function resolve() {\n let routerLoaded = false;\n if (route.route.keepAlive && route.route.keepAliveData) {\n loadBack(router, { el: route.route.keepAliveData.pageEl }, options);\n routerLoaded = true;\n }\n 'url content component pageName el componentUrl'.split(' ').forEach((pageLoadProp) => {\n if (route.route[pageLoadProp] && !routerLoaded) {\n routerLoaded = true;\n loadBack(router, { [pageLoadProp]: route.route[pageLoadProp] }, options);\n }\n });\n if (routerLoaded) return;\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n router.allowPageChange = false;\n loadBack(router, resolveParams, extend(options, resolveOptions), true);\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (route.route.async) {\n router.allowPageChange = false;\n route.route.async.call(router, {\n router,\n to: route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction: 'backward',\n app,\n });\n }\n if (route.route.asyncComponent) {\n asyncComponent(router, route.route.asyncComponent, asyncResolve, asyncReject);\n }\n }\n function reject() {\n router.allowPageChange = true;\n }\n\n if (options.preload) {\n resolve();\n } else {\n processRouteQueue.call(\n router,\n route,\n router.currentRoute,\n () => {\n if (route.route.modules) {\n app\n .loadModules(\n Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules],\n )\n .then(() => {\n resolve();\n })\n .catch(() => {\n reject();\n });\n } else {\n resolve();\n }\n },\n () => {\n reject();\n },\n 'backward',\n );\n }\n\n // Return Router\n return router;\n}\nexport { back };\n","import { getWindow, getDocument } from 'ssr-window';\nimport { pathToRegexp, compile } from 'path-to-regexp';\nimport $ from '../../shared/dom7.js';\nimport Framework7Class from '../../shared/class.js';\nimport {\n extend,\n nextFrame,\n parseUrlQuery,\n serializeObject,\n now,\n eventNameToColonCase,\n} from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport SwipeBack from './swipe-back.js';\n\nimport { refreshPage, navigate } from './navigate.js';\nimport { tabLoad, tabRemove } from './tab.js';\nimport { modalLoad, modalRemove } from './modal.js';\nimport { back } from './back.js';\nimport { clearPreviousHistory } from './clear-previous-history.js';\nimport appRouterCheck from './app-router-check.js';\n\nclass Router extends Framework7Class {\n constructor(app, view) {\n super({}, [typeof view === 'undefined' ? app : view]);\n const router = this;\n\n // Is App Router\n router.isAppRouter = typeof view === 'undefined';\n\n if (router.isAppRouter) {\n // App Router\n extend(false, router, {\n app,\n params: app.params.view,\n routes: app.routes || [],\n cache: app.cache,\n });\n } else {\n // View Router\n extend(false, router, {\n app,\n view,\n viewId: view.id,\n id: view.params.routerId,\n params: view.params,\n routes: view.routes,\n history: view.history,\n scrollHistory: view.scrollHistory,\n cache: app.cache,\n dynamicNavbar: app.theme === 'ios' && view.params.iosDynamicNavbar,\n initialPages: [],\n initialNavbars: [],\n });\n }\n\n // Install Modules\n router.useModules();\n\n // AllowPageChage\n router.allowPageChange = true;\n\n // Current Route\n let currentRoute = {};\n let previousRoute = {};\n Object.defineProperty(router, 'currentRoute', {\n enumerable: true,\n configurable: true,\n set(newRoute = {}) {\n previousRoute = extend({}, currentRoute);\n currentRoute = newRoute;\n if (!currentRoute) return;\n router.url = currentRoute.url;\n router.emit('routeChange', newRoute, previousRoute, router);\n },\n get() {\n return currentRoute;\n },\n });\n Object.defineProperty(router, 'previousRoute', {\n enumerable: true,\n configurable: true,\n get() {\n return previousRoute;\n },\n set(newRoute) {\n previousRoute = newRoute;\n },\n });\n\n return router;\n }\n\n mount() {\n const router = this;\n const view = router.view;\n const document = getDocument();\n\n extend(false, router, {\n tempDom: document.createElement('div'),\n $el: view.$el,\n el: view.el,\n $navbarsEl: view.$navbarsEl,\n navbarsEl: view.navbarsEl,\n });\n\n router.emit('local::mount routerMount', router);\n }\n\n animatableNavElements($newNavbarEl, $oldNavbarEl, toLarge, fromLarge, direction) {\n const router = this;\n const dynamicNavbar = router.dynamicNavbar;\n const animateIcon = router.params.iosAnimateNavbarBackIcon;\n\n let newNavEls;\n let oldNavEls;\n function animatableNavEl($el, $navbarInner) {\n const isSliding = $el.hasClass('sliding') || $navbarInner.hasClass('sliding');\n const isSubnavbar = $el.hasClass('subnavbar');\n const needsOpacityTransition = isSliding ? !isSubnavbar : true;\n const $iconEl = $el.find('.back .icon');\n let isIconLabel;\n if (\n isSliding &&\n animateIcon &&\n $el.hasClass('left') &&\n $iconEl.length > 0 &&\n $iconEl.next('span').length\n ) {\n $el = $iconEl.next('span'); // eslint-disable-line\n isIconLabel = true;\n }\n return {\n $el,\n isIconLabel,\n leftOffset: $el[0].f7NavbarLeftOffset,\n rightOffset: $el[0].f7NavbarRightOffset,\n isSliding,\n isSubnavbar,\n needsOpacityTransition,\n };\n }\n if (dynamicNavbar) {\n newNavEls = [];\n oldNavEls = [];\n $newNavbarEl\n .children('.navbar-inner')\n .children('.left, .right, .title, .subnavbar')\n .each((navEl) => {\n const $navEl = $(navEl);\n if ($navEl.hasClass('left') && fromLarge && direction === 'forward') return;\n if ($navEl.hasClass('title') && toLarge) return;\n newNavEls.push(animatableNavEl($navEl, $newNavbarEl.children('.navbar-inner')));\n });\n if (\n !(\n $oldNavbarEl.hasClass('navbar-master') &&\n router.params.masterDetailBreakpoint > 0 &&\n router.app.width >= router.params.masterDetailBreakpoint\n )\n ) {\n $oldNavbarEl\n .children('.navbar-inner')\n .children('.left, .right, .title, .subnavbar')\n .each((navEl) => {\n const $navEl = $(navEl);\n if ($navEl.hasClass('left') && toLarge && !fromLarge && direction === 'forward') return;\n if ($navEl.hasClass('left') && toLarge && direction === 'backward') return;\n if ($navEl.hasClass('title') && fromLarge) {\n return;\n }\n oldNavEls.push(animatableNavEl($navEl, $oldNavbarEl.children('.navbar-inner')));\n });\n }\n [oldNavEls, newNavEls].forEach((navEls) => {\n navEls.forEach((navEl) => {\n const n = navEl;\n const { isSliding, $el } = navEl;\n const otherEls = navEls === oldNavEls ? newNavEls : oldNavEls;\n if (!(isSliding && $el.hasClass('title') && otherEls)) return;\n otherEls.forEach((otherNavEl) => {\n if (otherNavEl.isIconLabel) {\n const iconTextEl = otherNavEl.$el[0];\n n.leftOffset += iconTextEl ? iconTextEl.offsetLeft || 0 : 0;\n }\n });\n });\n });\n }\n\n return { newNavEls, oldNavEls };\n }\n\n animate($oldPageEl, $newPageEl, $oldNavbarEl, $newNavbarEl, direction, transition, callback) {\n const router = this;\n if (router.params.animateCustom) {\n router.params.animateCustom.apply(router, [\n $oldPageEl,\n $newPageEl,\n $oldNavbarEl,\n $newNavbarEl,\n direction,\n callback,\n ]);\n return;\n }\n const dynamicNavbar = router.dynamicNavbar;\n const ios = router.app.theme === 'ios';\n if (transition) {\n const routerCustomTransitionClass = `router-transition-custom router-transition-${transition}-${direction}`;\n // Animate\n const onCustomTransitionDone = () => {\n router.$el.removeClass(routerCustomTransitionClass);\n if (dynamicNavbar && router.$navbarsEl.length) {\n if ($newNavbarEl) {\n router.$navbarsEl.prepend($newNavbarEl);\n }\n if ($oldNavbarEl) {\n router.$navbarsEl.prepend($oldNavbarEl);\n }\n }\n if (callback) callback();\n };\n\n (direction === 'forward' ? $newPageEl : $oldPageEl).animationEnd(onCustomTransitionDone);\n if (dynamicNavbar) {\n if ($newNavbarEl && $newPageEl) {\n router.setNavbarPosition($newNavbarEl, '');\n $newNavbarEl.removeClass('navbar-next navbar-previous navbar-current');\n $newPageEl.prepend($newNavbarEl);\n }\n if ($oldNavbarEl && $oldPageEl) {\n router.setNavbarPosition($oldNavbarEl, '');\n $oldNavbarEl.removeClass('navbar-next navbar-previous navbar-current');\n $oldPageEl.prepend($oldNavbarEl);\n }\n }\n\n router.$el.addClass(routerCustomTransitionClass);\n return;\n }\n\n // Router Animation class\n const routerTransitionClass = `router-transition-${direction} router-transition`;\n\n let newNavEls;\n let oldNavEls;\n\n let fromLarge;\n let toLarge;\n let toDifferent;\n\n let oldIsLarge;\n let newIsLarge;\n\n if (ios && dynamicNavbar) {\n const betweenMasterAndDetail =\n router.params.masterDetailBreakpoint > 0 &&\n router.app.width >= router.params.masterDetailBreakpoint &&\n (($oldNavbarEl.hasClass('navbar-master') &&\n $newNavbarEl.hasClass('navbar-master-detail')) ||\n ($oldNavbarEl.hasClass('navbar-master-detail') &&\n $newNavbarEl.hasClass('navbar-master')));\n if (!betweenMasterAndDetail) {\n oldIsLarge = $oldNavbarEl && $oldNavbarEl.hasClass('navbar-large');\n newIsLarge = $newNavbarEl && $newNavbarEl.hasClass('navbar-large');\n fromLarge = oldIsLarge && !$oldNavbarEl.hasClass('navbar-large-collapsed');\n toLarge = newIsLarge && !$newNavbarEl.hasClass('navbar-large-collapsed');\n toDifferent = (fromLarge && !toLarge) || (toLarge && !fromLarge);\n }\n const navEls = router.animatableNavElements(\n $newNavbarEl,\n $oldNavbarEl,\n toLarge,\n fromLarge,\n direction,\n );\n newNavEls = navEls.newNavEls;\n oldNavEls = navEls.oldNavEls;\n }\n\n function animateNavbars(progress) {\n if (!(ios && dynamicNavbar)) return;\n if (progress === 1) {\n if (toLarge) {\n $newNavbarEl.addClass('router-navbar-transition-to-large');\n $oldNavbarEl.addClass('router-navbar-transition-to-large');\n }\n if (fromLarge) {\n $newNavbarEl.addClass('router-navbar-transition-from-large');\n $oldNavbarEl.addClass('router-navbar-transition-from-large');\n }\n }\n newNavEls.forEach((navEl) => {\n const $el = navEl.$el;\n const offset = direction === 'forward' ? navEl.rightOffset : navEl.leftOffset;\n if (navEl.isSliding) {\n if (navEl.isSubnavbar && newIsLarge) {\n // prettier-ignore\n $el[0].style.setProperty(\n 'transform',\n `translate3d(${offset * (1 - progress)}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`,\n 'important',\n );\n } else {\n $el.transform(`translate3d(${offset * (1 - progress)}px,0,0)`);\n }\n }\n });\n oldNavEls.forEach((navEl) => {\n const $el = navEl.$el;\n const offset = direction === 'forward' ? navEl.leftOffset : navEl.rightOffset;\n if (navEl.isSliding) {\n if (navEl.isSubnavbar && oldIsLarge) {\n $el.transform(\n `translate3d(${\n offset * progress\n }px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`,\n );\n } else {\n $el.transform(`translate3d(${offset * progress}px,0,0)`);\n }\n }\n });\n }\n\n // AnimationEnd Callback\n function onDone() {\n if (router.dynamicNavbar) {\n if ($newNavbarEl) {\n $newNavbarEl.removeClass(\n 'router-navbar-transition-to-large router-navbar-transition-from-large',\n );\n $newNavbarEl.addClass('navbar-no-title-large-transition');\n nextFrame(() => {\n $newNavbarEl.removeClass('navbar-no-title-large-transition');\n });\n }\n if ($oldNavbarEl) {\n $oldNavbarEl.removeClass(\n 'router-navbar-transition-to-large router-navbar-transition-from-large',\n );\n }\n if (\n $newNavbarEl.hasClass('sliding') ||\n $newNavbarEl.children('.navbar-inner.sliding').length\n ) {\n $newNavbarEl.find('.title, .left, .right, .left .icon, .subnavbar').transform('');\n } else {\n $newNavbarEl.find('.sliding').transform('');\n }\n if (\n $oldNavbarEl.hasClass('sliding') ||\n $oldNavbarEl.children('.navbar-inner.sliding').length\n ) {\n $oldNavbarEl.find('.title, .left, .right, .left .icon, .subnavbar').transform('');\n } else {\n $oldNavbarEl.find('.sliding').transform('');\n }\n }\n router.$el.removeClass(routerTransitionClass);\n if (callback) callback();\n }\n\n (direction === 'forward' ? $newPageEl : $oldPageEl).animationEnd(() => {\n onDone();\n });\n\n // Animate\n if (dynamicNavbar) {\n // Prepare Navbars\n animateNavbars(0);\n nextFrame(() => {\n // Add class, start animation\n router.$el.addClass(routerTransitionClass);\n if (toDifferent) {\n // eslint-disable-next-line\n router.el._clientLeft = router.el.clientLeft;\n }\n animateNavbars(1);\n });\n } else {\n // Add class, start animation\n router.$el.addClass(routerTransitionClass);\n }\n }\n\n removeModal(modalEl) {\n const router = this;\n router.removeEl(modalEl);\n }\n // eslint-disable-next-line\n removeTabContent(tabEl) {\n const $tabEl = $(tabEl);\n $tabEl.html('');\n }\n\n removeNavbar(el) {\n const router = this;\n router.removeEl(el);\n }\n\n removePage(el) {\n const $el = $(el);\n const f7Page = $el && $el[0] && $el[0].f7Page;\n const router = this;\n if (f7Page && f7Page.route && f7Page.route.route && f7Page.route.route.keepAlive) {\n $el.remove();\n return;\n }\n router.removeEl(el);\n }\n\n removeEl(el) {\n if (!el) return;\n const router = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.find('.tab').each((tabEl) => {\n $(tabEl)\n .children()\n .each((tabChild) => {\n if (tabChild.f7Component) {\n $(tabChild).trigger('tab:beforeremove');\n tabChild.f7Component.destroy();\n }\n });\n });\n if ($el[0].f7Component && $el[0].f7Component.destroy) {\n $el[0].f7Component.destroy();\n }\n if (!router.params.removeElements) {\n return;\n }\n if (router.params.removeElementsWithTimeout) {\n setTimeout(() => {\n $el.remove();\n }, router.params.removeElementsTimeout);\n } else {\n $el.remove();\n }\n }\n\n getPageEl(content) {\n const router = this;\n if (typeof content === 'string') {\n router.tempDom.innerHTML = content;\n } else {\n if ($(content).hasClass('page')) {\n return content;\n }\n router.tempDom.innerHTML = '';\n $(router.tempDom).append(content);\n }\n\n return router.findElement('.page', router.tempDom);\n }\n\n findElement(stringSelector, container, notStacked) {\n const router = this;\n const view = router.view;\n const app = router.app;\n\n // Modals Selector\n const modalsSelector =\n '.popup, .dialog, .popover, .actions-modal, .sheet-modal, .login-screen, .page';\n\n const $container = $(container);\n let selector = stringSelector;\n if (notStacked) selector += ':not(.stacked)';\n\n let found = $container\n .find(selector)\n .filter((el) => $(el).parents(modalsSelector).length === 0);\n\n if (found.length > 1) {\n if (typeof view.selector === 'string') {\n // Search in related view\n found = $container.find(`${view.selector} ${selector}`);\n }\n if (found.length > 1) {\n // Search in main view\n found = $container.find(`.${app.params.viewMainClass} ${selector}`);\n }\n }\n if (found.length === 1) return found;\n\n // Try to find not stacked\n if (!notStacked) found = router.findElement(selector, $container, true);\n if (found && found.length === 1) return found;\n if (found && found.length > 1) return $(found[0]);\n return undefined;\n }\n\n flattenRoutes(routes = this.routes) {\n const router = this;\n let flattenedRoutes = [];\n routes.forEach((route) => {\n let hasTabRoutes = false;\n if ('tabs' in route && route.tabs) {\n const mergedPathsRoutes = route.tabs.map((tabRoute) => {\n const tRoute = extend({}, route, {\n path: `${route.path}/${tabRoute.path}`.replace('///', '/').replace('//', '/'),\n parentPath: route.path,\n tab: tabRoute,\n });\n delete tRoute.tabs;\n delete tRoute.routes;\n return tRoute;\n });\n hasTabRoutes = true;\n flattenedRoutes = flattenedRoutes.concat(router.flattenRoutes(mergedPathsRoutes));\n }\n if ('detailRoutes' in route) {\n const mergedPathsRoutes = route.detailRoutes.map((detailRoute) => {\n const dRoute = extend({}, detailRoute);\n dRoute.masterRoute = route;\n dRoute.masterRoutePath = route.path;\n return dRoute;\n });\n flattenedRoutes = flattenedRoutes.concat(route, router.flattenRoutes(mergedPathsRoutes));\n }\n if ('routes' in route) {\n const mergedPathsRoutes = route.routes.map((childRoute) => {\n const cRoute = extend({}, childRoute);\n cRoute.path = `${route.path}/${cRoute.path}`.replace('///', '/').replace('//', '/');\n return cRoute;\n });\n if (hasTabRoutes) {\n flattenedRoutes = flattenedRoutes.concat(router.flattenRoutes(mergedPathsRoutes));\n } else {\n flattenedRoutes = flattenedRoutes.concat(route, router.flattenRoutes(mergedPathsRoutes));\n }\n }\n if (!('routes' in route) && !('tabs' in route && route.tabs) && !('detailRoutes' in route)) {\n flattenedRoutes.push(route);\n }\n });\n return flattenedRoutes;\n }\n\n // eslint-disable-next-line\n parseRouteUrl(url) {\n if (!url) return {};\n const query = parseUrlQuery(url);\n const hash = url.split('#')[1];\n const params = {};\n const path = url.split('#')[0].split('?')[0];\n return {\n query,\n hash,\n params,\n url,\n path,\n };\n }\n\n generateUrl(parameters = {}) {\n if (typeof parameters === 'string') {\n return parameters;\n }\n const { name, path, params, query } = parameters;\n if (!name && !path) {\n throw new Error('Framework7: \"name\" or \"path\" parameter is required');\n }\n const router = this;\n const route = name ? router.findRouteByKey('name', name) : router.findRouteByKey('path', path);\n\n if (!route) {\n if (name) {\n throw new Error(`Framework7: route with name \"${name}\" not found`);\n } else {\n throw new Error(`Framework7: route with path \"${path}\" not found`);\n }\n }\n const url = router.constructRouteUrl(route, { params, query });\n if (!url) {\n throw new Error(`Framework7: can't construct URL for route with name \"${name}\"`);\n }\n return url;\n }\n\n // eslint-disable-next-line\n constructRouteUrl(route, { params, query } = {}) {\n const { path } = route;\n const toUrl = compile(path);\n let url;\n try {\n url = toUrl(params || {});\n } catch (error) {\n throw new Error(\n `Framework7: error constructing route URL from passed params:\\nRoute: ${path}\\n${error.toString()}`,\n );\n }\n\n if (query) {\n if (typeof query === 'string') url += `?${query}`;\n else if (Object.keys(query).length) url += `?${serializeObject(query)}`;\n }\n\n return url;\n }\n\n findTabRouteUrl(tabEl) {\n const router = this;\n const $tabEl = $(tabEl);\n const parentPath = router.currentRoute.route.parentPath;\n const tabId = $tabEl.attr('id');\n const flattenedRoutes = router.flattenRoutes(router.routes);\n let foundTabRouteUrl;\n flattenedRoutes.forEach((route) => {\n if (route.parentPath === parentPath && route.tab && route.tab.id === tabId) {\n if (router.currentRoute.params && Object.keys(router.currentRoute.params).length > 0) {\n foundTabRouteUrl = router.constructRouteUrl(route, {\n params: router.currentRoute.params,\n query: router.currentRoute.query,\n });\n } else {\n foundTabRouteUrl = route.path;\n }\n }\n });\n return foundTabRouteUrl;\n }\n\n findRouteByKey(key, value) {\n const router = this;\n const routes = router.routes;\n const flattenedRoutes = router.flattenRoutes(routes);\n let matchingRoute;\n\n flattenedRoutes.forEach((route) => {\n if (matchingRoute) return;\n if (route[key] === value) {\n matchingRoute = route;\n }\n });\n return matchingRoute;\n }\n\n findMatchingRoute(url) {\n if (!url) return undefined;\n const router = this;\n const routes = router.routes;\n const flattenedRoutes = router.flattenRoutes(routes);\n const { path, query, hash, params } = router.parseRouteUrl(url);\n let matchingRoute;\n flattenedRoutes.forEach((route) => {\n if (matchingRoute) return;\n const keys = [];\n\n const pathsToMatch = [route.path];\n if (route.alias) {\n if (typeof route.alias === 'string') pathsToMatch.push(route.alias);\n else if (Array.isArray(route.alias)) {\n route.alias.forEach((aliasPath) => {\n pathsToMatch.push(aliasPath);\n });\n }\n }\n\n let matched;\n pathsToMatch.forEach((pathToMatch) => {\n if (matched) return;\n matched = pathToRegexp(pathToMatch, keys).exec(path);\n });\n\n if (matched) {\n keys.forEach((keyObj, index) => {\n if (typeof keyObj.name === 'number') return;\n const paramValue = matched[index + 1];\n if (typeof paramValue === 'undefined' || paramValue === null) {\n params[keyObj.name] = paramValue;\n } else {\n params[keyObj.name] = decodeURIComponent(paramValue);\n }\n });\n\n let parentPath;\n if (route.parentPath) {\n parentPath = path\n .split('/')\n .slice(0, route.parentPath.split('/').length - 1)\n .join('/');\n }\n\n matchingRoute = {\n query,\n hash,\n params,\n url,\n path,\n parentPath,\n route,\n name: route.name,\n };\n }\n });\n return matchingRoute;\n }\n\n // eslint-disable-next-line\n replaceRequestUrlParams(url = '', options = {}) {\n let compiledUrl = url;\n if (\n typeof compiledUrl === 'string' &&\n compiledUrl.indexOf('{{') >= 0 &&\n options &&\n options.route &&\n options.route.params &&\n Object.keys(options.route.params).length\n ) {\n Object.keys(options.route.params).forEach((paramName) => {\n const regExp = new RegExp(`{{${paramName}}}`, 'g');\n compiledUrl = compiledUrl.replace(regExp, options.route.params[paramName] || '');\n });\n }\n return compiledUrl;\n }\n\n removeFromXhrCache(url) {\n const router = this;\n const xhrCache = router.cache.xhr;\n let index = false;\n for (let i = 0; i < xhrCache.length; i += 1) {\n if (xhrCache[i].url === url) index = i;\n }\n if (index !== false) xhrCache.splice(index, 1);\n }\n\n xhrRequest(requestUrl, options) {\n const router = this;\n const params = router.params;\n const { ignoreCache } = options;\n let url = requestUrl;\n\n let hasQuery = url.indexOf('?') >= 0;\n if (\n params.passRouteQueryToRequest &&\n options &&\n options.route &&\n options.route.query &&\n Object.keys(options.route.query).length\n ) {\n url += `${hasQuery ? '&' : '?'}${serializeObject(options.route.query)}`;\n hasQuery = true;\n }\n\n if (\n params.passRouteParamsToRequest &&\n options &&\n options.route &&\n options.route.params &&\n Object.keys(options.route.params).length\n ) {\n url += `${hasQuery ? '&' : '?'}${serializeObject(options.route.params)}`;\n hasQuery = true;\n }\n\n if (url.indexOf('{{') >= 0) {\n url = router.replaceRequestUrlParams(url, options);\n }\n // should we ignore get params or not\n if (params.xhrCacheIgnoreGetParameters && url.indexOf('?') >= 0) {\n url = url.split('?')[0];\n }\n return new Promise((resolve, reject) => {\n if (\n params.xhrCache &&\n !ignoreCache &&\n url.indexOf('nocache') < 0 &&\n params.xhrCacheIgnore.indexOf(url) < 0\n ) {\n for (let i = 0; i < router.cache.xhr.length; i += 1) {\n const cachedUrl = router.cache.xhr[i];\n if (cachedUrl.url === url) {\n // Check expiration\n if (now() - cachedUrl.time < params.xhrCacheDuration) {\n // Load from cache\n resolve(cachedUrl.content);\n return;\n }\n }\n }\n }\n router.xhrAbortController = router.app.request.abortController();\n router.app.request({\n abortController: router.xhrAbortController,\n url,\n method: 'GET',\n beforeSend(xhr) {\n router.emit('routerAjaxStart', xhr, options);\n },\n complete(xhr, status) {\n router.emit('routerAjaxComplete', xhr);\n if (\n (status !== 'error' && status !== 'timeout' && xhr.status >= 200 && xhr.status < 300) ||\n xhr.status === 0\n ) {\n if (params.xhrCache && xhr.responseText !== '') {\n router.removeFromXhrCache(url);\n router.cache.xhr.push({\n url,\n time: now(),\n content: xhr.responseText,\n });\n }\n router.emit('routerAjaxSuccess', xhr, options);\n resolve(xhr.responseText);\n } else {\n router.emit('routerAjaxError', xhr, options);\n reject(xhr);\n }\n },\n error(xhr) {\n router.emit('routerAjaxError', xhr, options);\n reject(xhr);\n },\n });\n });\n }\n\n setNavbarPosition($el, position, ariaHidden) {\n const router = this;\n $el.removeClass('navbar-previous navbar-current navbar-next');\n if (position) {\n $el.addClass(`navbar-${position}`);\n }\n\n if (ariaHidden === false) {\n $el.removeAttr('aria-hidden');\n } else if (ariaHidden === true) {\n $el.attr('aria-hidden', 'true');\n }\n $el.trigger('navbar:position', { position });\n router.emit('navbarPosition', $el[0], position);\n }\n\n setPagePosition($el, position, ariaHidden) {\n const router = this;\n $el.removeClass('page-previous page-current page-next');\n $el.addClass(`page-${position}`);\n if (ariaHidden === false) {\n $el.removeAttr('aria-hidden');\n } else if (ariaHidden === true) {\n $el.attr('aria-hidden', 'true');\n }\n $el.trigger('page:position', { position });\n router.emit('pagePosition', $el[0], position);\n }\n\n // Remove theme elements\n removeThemeElements(el) {\n const router = this;\n const theme = router.app.theme;\n let toRemove;\n if (theme === 'ios') {\n toRemove = '.md-only, .aurora-only, .if-md, .if-aurora, .if-not-ios, .not-ios';\n } else if (theme === 'md') {\n toRemove = '.ios-only, .aurora-only, .if-ios, .if-aurora, .if-not-md, .not-md';\n } else if (theme === 'aurora') {\n toRemove = '.ios-only, .md-only, .if-ios, .if-md, .if-not-aurora, .not-aurora';\n }\n $(el).find(toRemove).remove();\n }\n\n getPageData(pageEl, navbarEl, from, to, route = {}, pageFromEl) {\n const router = this;\n const $pageEl = $(pageEl).eq(0);\n const $navbarEl = $(navbarEl).eq(0);\n const currentPage = $pageEl[0].f7Page || {};\n let direction;\n let pageFrom;\n if ((from === 'next' && to === 'current') || (from === 'current' && to === 'previous'))\n direction = 'forward';\n if ((from === 'current' && to === 'next') || (from === 'previous' && to === 'current'))\n direction = 'backward';\n if (currentPage && !currentPage.fromPage) {\n const $pageFromEl = $(pageFromEl);\n if ($pageFromEl.length) {\n pageFrom = $pageFromEl[0].f7Page;\n }\n }\n pageFrom = currentPage.pageFrom || pageFrom;\n if (pageFrom && pageFrom.pageFrom) {\n pageFrom.pageFrom = null;\n }\n const page = {\n app: router.app,\n view: router.view,\n router,\n $el: $pageEl,\n el: $pageEl[0],\n $pageEl,\n pageEl: $pageEl[0],\n $navbarEl,\n navbarEl: $navbarEl[0],\n name: $pageEl.attr('data-name'),\n position: from,\n from,\n to,\n direction,\n route: currentPage.route ? currentPage.route : route,\n pageFrom,\n };\n\n $pageEl[0].f7Page = page;\n return page;\n }\n\n // Callbacks\n pageCallback(callback, pageEl, navbarEl, from, to, options = {}, pageFromEl) {\n if (!pageEl) return;\n const router = this;\n const $pageEl = $(pageEl);\n if (!$pageEl.length) return;\n const $navbarEl = $(navbarEl);\n const { route } = options;\n const restoreScrollTopOnBack =\n router.params.restoreScrollTopOnBack &&\n !(\n router.params.masterDetailBreakpoint > 0 &&\n $pageEl.hasClass('page-master') &&\n router.app.width >= router.params.masterDetailBreakpoint\n );\n const keepAlive =\n $pageEl[0].f7Page &&\n $pageEl[0].f7Page.route &&\n $pageEl[0].f7Page.route.route &&\n $pageEl[0].f7Page.route.route.keepAlive;\n\n if (callback === 'beforeRemove' && keepAlive) {\n callback = 'beforeUnmount'; // eslint-disable-line\n }\n\n const camelName = `page${callback[0].toUpperCase() + callback.slice(1, callback.length)}`;\n const colonName = `page:${callback.toLowerCase()}`;\n\n let page = {};\n if (callback === 'beforeRemove' && $pageEl[0].f7Page) {\n page = extend($pageEl[0].f7Page, { from, to, position: from });\n } else {\n page = router.getPageData($pageEl[0], $navbarEl[0], from, to, route, pageFromEl);\n }\n page.swipeBack = !!options.swipeBack;\n\n const { on = {}, once = {} } = options.route ? options.route.route : {};\n if (options.on) {\n extend(on, options.on);\n }\n if (options.once) {\n extend(once, options.once);\n }\n\n function attachEvents() {\n if ($pageEl[0].f7RouteEventsAttached) return;\n $pageEl[0].f7RouteEventsAttached = true;\n if (on && Object.keys(on).length > 0) {\n $pageEl[0].f7RouteEventsOn = on;\n Object.keys(on).forEach((eventName) => {\n on[eventName] = on[eventName].bind(router);\n $pageEl.on(eventNameToColonCase(eventName), on[eventName]);\n });\n }\n if (once && Object.keys(once).length > 0) {\n $pageEl[0].f7RouteEventsOnce = once;\n Object.keys(once).forEach((eventName) => {\n once[eventName] = once[eventName].bind(router);\n $pageEl.once(eventNameToColonCase(eventName), once[eventName]);\n });\n }\n }\n\n function detachEvents() {\n if (!$pageEl[0].f7RouteEventsAttached) return;\n if ($pageEl[0].f7RouteEventsOn) {\n Object.keys($pageEl[0].f7RouteEventsOn).forEach((eventName) => {\n $pageEl.off(eventNameToColonCase(eventName), $pageEl[0].f7RouteEventsOn[eventName]);\n });\n }\n if ($pageEl[0].f7RouteEventsOnce) {\n Object.keys($pageEl[0].f7RouteEventsOnce).forEach((eventName) => {\n $pageEl.off(eventNameToColonCase(eventName), $pageEl[0].f7RouteEventsOnce[eventName]);\n });\n }\n $pageEl[0].f7RouteEventsAttached = null;\n $pageEl[0].f7RouteEventsOn = null;\n $pageEl[0].f7RouteEventsOnce = null;\n delete $pageEl[0].f7RouteEventsAttached;\n delete $pageEl[0].f7RouteEventsOn;\n delete $pageEl[0].f7RouteEventsOnce;\n }\n\n if (callback === 'mounted') {\n attachEvents();\n }\n if (callback === 'init') {\n if (\n restoreScrollTopOnBack &&\n (from === 'previous' || !from) &&\n to === 'current' &&\n router.scrollHistory[page.route.url] &&\n !$pageEl.hasClass('no-restore-scroll')\n ) {\n let $pageContent = $pageEl.find('.page-content');\n if ($pageContent.length > 0) {\n // eslint-disable-next-line\n $pageContent = $pageContent.filter((pageContentEl) => {\n return (\n $(pageContentEl).parents('.tab:not(.tab-active)').length === 0 &&\n !$(pageContentEl).is('.tab:not(.tab-active)')\n );\n });\n }\n $pageContent.scrollTop(router.scrollHistory[page.route.url]);\n }\n attachEvents();\n if ($pageEl[0].f7PageInitialized) {\n $pageEl.trigger('page:reinit', page);\n router.emit('pageReinit', page);\n return;\n }\n $pageEl[0].f7PageInitialized = true;\n }\n if (\n restoreScrollTopOnBack &&\n callback === 'beforeOut' &&\n from === 'current' &&\n to === 'previous'\n ) {\n // Save scroll position\n let $pageContent = $pageEl.find('.page-content');\n if ($pageContent.length > 0) {\n // eslint-disable-next-line\n $pageContent = $pageContent.filter((pageContentEl) => {\n return (\n $(pageContentEl).parents('.tab:not(.tab-active)').length === 0 &&\n !$(pageContentEl).is('.tab:not(.tab-active)')\n );\n });\n }\n router.scrollHistory[page.route.url] = $pageContent.scrollTop();\n }\n if (restoreScrollTopOnBack && callback === 'beforeOut' && from === 'current' && to === 'next') {\n // Delete scroll position\n delete router.scrollHistory[page.route.url];\n }\n\n $pageEl.trigger(colonName, page);\n router.emit(camelName, page);\n\n if (callback === 'beforeRemove' || callback === 'beforeUnmount') {\n detachEvents();\n if (!keepAlive) {\n if ($pageEl[0].f7Page && $pageEl[0].f7Page.navbarEl) {\n delete $pageEl[0].f7Page.navbarEl.f7Page;\n }\n $pageEl[0].f7Page = null;\n }\n }\n }\n\n saveHistory() {\n const router = this;\n const window = getWindow();\n router.view.history = router.history;\n if (\n router.params.browserHistory &&\n router.params.browserHistoryStoreHistory &&\n window.localStorage\n ) {\n window.localStorage[`f7router-${router.view.id}-history`] = JSON.stringify(router.history);\n }\n }\n\n restoreHistory() {\n const router = this;\n const window = getWindow();\n if (\n router.params.browserHistory &&\n router.params.browserHistoryStoreHistory &&\n window.localStorage &&\n window.localStorage[`f7router-${router.view.id}-history`]\n ) {\n router.history = JSON.parse(window.localStorage[`f7router-${router.view.id}-history`]);\n router.view.history = router.history;\n }\n }\n\n clearHistory() {\n const router = this;\n router.history = [];\n if (router.view) router.view.history = [];\n router.saveHistory();\n }\n\n updateCurrentUrl(newUrl) {\n const router = this;\n appRouterCheck(router, 'updateCurrentUrl');\n // Update history\n if (router.history.length) {\n router.history[router.history.length - 1] = newUrl;\n } else {\n router.history.push(newUrl);\n }\n\n // Update current route params\n const { query, hash, params, url, path } = router.parseRouteUrl(newUrl);\n if (router.currentRoute) {\n extend(router.currentRoute, {\n query,\n hash,\n params,\n url,\n path,\n });\n }\n\n if (router.params.browserHistory) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(\n router.view.id,\n {\n url: newUrl,\n },\n browserHistoryRoot + router.params.browserHistorySeparator + newUrl,\n );\n }\n\n // Save History\n router.saveHistory();\n\n router.emit('routeUrlUpdate', router.currentRoute, router);\n }\n\n getInitialUrl() {\n const router = this;\n if (router.initialUrl) {\n return {\n initialUrl: router.initialUrl,\n historyRestored: router.historyRestored,\n };\n }\n const { app, view } = router;\n const document = getDocument();\n const window = getWindow();\n\n const location =\n app.params.url && typeof app.params.url === 'string' && typeof URL !== 'undefined'\n ? new URL(app.params.url)\n : document.location;\n\n let initialUrl = router.params.url;\n let documentUrl = location.href.split(location.origin)[1];\n let historyRestored;\n const { browserHistory, browserHistoryOnLoad, browserHistorySeparator } = router.params;\n let { browserHistoryRoot } = router.params;\n if (\n (window.cordova || (window.Capacitor && window.Capacitor.isNative)) &&\n browserHistory &&\n !browserHistorySeparator &&\n !browserHistoryRoot &&\n location.pathname.indexOf('index.html')\n ) {\n // eslint-disable-next-line\n console.warn(\n 'Framework7: wrong or not complete browserHistory configuration, trying to guess browserHistoryRoot',\n );\n browserHistoryRoot = location.pathname.split('index.html')[0];\n }\n if (!browserHistory || !browserHistoryOnLoad) {\n if (!initialUrl) {\n initialUrl = documentUrl;\n }\n if (location.search && initialUrl.indexOf('?') < 0) {\n initialUrl += location.search;\n }\n if (location.hash && initialUrl.indexOf('#') < 0) {\n initialUrl += location.hash;\n }\n } else {\n if (browserHistoryRoot && documentUrl.indexOf(browserHistoryRoot) >= 0) {\n documentUrl = documentUrl.split(browserHistoryRoot)[1];\n if (documentUrl === '') documentUrl = '/';\n }\n if (browserHistorySeparator.length > 0 && documentUrl.indexOf(browserHistorySeparator) >= 0) {\n initialUrl = documentUrl.split(browserHistorySeparator)[1];\n } else {\n initialUrl = documentUrl;\n }\n router.restoreHistory();\n if (router.history.indexOf(initialUrl) >= 0) {\n router.history = router.history.slice(0, router.history.indexOf(initialUrl) + 1);\n } else if (router.params.url === initialUrl) {\n router.history = [initialUrl];\n } else if (\n History.state &&\n History.state[view.id] &&\n History.state[view.id].url === router.history[router.history.length - 1]\n ) {\n initialUrl = router.history[router.history.length - 1];\n } else {\n router.history = [documentUrl.split(browserHistorySeparator)[0] || '/', initialUrl];\n }\n if (router.history.length > 1) {\n historyRestored = true;\n } else {\n router.history = [];\n }\n router.saveHistory();\n }\n\n router.initialUrl = initialUrl;\n router.historyRestored = historyRestored;\n\n return { initialUrl, historyRestored };\n }\n\n init() {\n const router = this;\n const { app, view } = router;\n const document = getDocument();\n\n router.mount();\n\n const { initialUrl, historyRestored } = router.getInitialUrl();\n\n // Init Swipeback\n if (\n (view && router.params.iosSwipeBack && app.theme === 'ios') ||\n (view && router.params.mdSwipeBack && app.theme === 'md') ||\n (view && router.params.auroraSwipeBack && app.theme === 'aurora')\n ) {\n SwipeBack(router);\n }\n\n const {\n browserHistory,\n browserHistoryOnLoad,\n browserHistoryAnimateOnLoad,\n browserHistoryInitialMatch,\n } = router.params;\n\n let currentRoute;\n if (router.history.length > 1) {\n // Will load page\n const initUrl = browserHistoryInitialMatch ? initialUrl : router.history[0];\n currentRoute = router.findMatchingRoute(initUrl);\n if (!currentRoute) {\n currentRoute = extend(router.parseRouteUrl(initUrl), {\n route: {\n url: initUrl,\n path: initUrl.split('?')[0],\n },\n });\n }\n } else {\n // Don't load page\n currentRoute = router.findMatchingRoute(initialUrl);\n if (!currentRoute) {\n currentRoute = extend(router.parseRouteUrl(initialUrl), {\n route: {\n url: initialUrl,\n path: initialUrl.split('?')[0],\n },\n });\n }\n }\n\n if (router.params.stackPages) {\n router.$el.children('.page').each((pageEl) => {\n const $pageEl = $(pageEl);\n router.initialPages.push($pageEl[0]);\n if (router.dynamicNavbar && $pageEl.children('.navbar').length > 0) {\n router.initialNavbars.push($pageEl.children('.navbar')[0]);\n }\n });\n }\n\n if (\n router.$el.children('.page:not(.stacked)').length === 0 &&\n initialUrl &&\n router.params.loadInitialPage\n ) {\n // No pages presented in DOM, reload new page\n router.navigate(initialUrl, {\n initial: true,\n reloadCurrent: true,\n browserHistory: false,\n animate: false,\n once: {\n modalOpen() {\n if (!historyRestored) return;\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({ preload: true });\n }\n },\n pageAfterIn() {\n if (!historyRestored) return;\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({ preload: true });\n }\n },\n },\n });\n } else if (router.$el.children('.page:not(.stacked)').length) {\n // Init current DOM page\n let hasTabRoute;\n router.currentRoute = currentRoute;\n router.$el.children('.page:not(.stacked)').each((pageEl) => {\n const $pageEl = $(pageEl);\n let $navbarEl;\n router.setPagePosition($pageEl, 'current');\n if (router.dynamicNavbar) {\n $navbarEl = $pageEl.children('.navbar');\n if ($navbarEl.length > 0) {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n router.setNavbarPosition($navbarEl, 'current');\n router.$navbarsEl.append($navbarEl);\n if ($navbarEl.children('.title-large').length) {\n $navbarEl.addClass('navbar-large');\n }\n $pageEl.children('.navbar').remove();\n } else {\n router.$navbarsEl.addClass('navbar-hidden');\n if ($navbarEl.children('.title-large').length) {\n router.$navbarsEl.addClass('navbar-hidden navbar-large-hidden');\n }\n }\n }\n if (\n router.currentRoute &&\n router.currentRoute.route &&\n (router.currentRoute.route.master === true ||\n (typeof router.currentRoute.route.master === 'function' &&\n router.currentRoute.route.master(app, router))) &&\n router.params.masterDetailBreakpoint > 0\n ) {\n $pageEl.addClass('page-master');\n $pageEl.trigger('page:role', { role: 'master' });\n if ($navbarEl && $navbarEl.length) {\n $navbarEl.addClass('navbar-master');\n }\n view.checkMasterDetailBreakpoint();\n }\n const initOptions = {\n route: router.currentRoute,\n };\n if (router.currentRoute && router.currentRoute.route && router.currentRoute.route.options) {\n extend(initOptions, router.currentRoute.route.options);\n }\n router.currentPageEl = $pageEl[0];\n if (router.dynamicNavbar && $navbarEl.length) {\n router.currentNavbarEl = $navbarEl[0];\n }\n router.removeThemeElements($pageEl);\n if (router.dynamicNavbar && $navbarEl.length) {\n router.removeThemeElements($navbarEl);\n }\n if (initOptions.route.route.tab) {\n hasTabRoute = true;\n router.tabLoad(initOptions.route.route.tab, extend({}, initOptions));\n }\n router.pageCallback('init', $pageEl, $navbarEl, 'current', undefined, initOptions);\n router.pageCallback('beforeIn', $pageEl, $navbarEl, 'current', undefined, initOptions);\n router.pageCallback('afterIn', $pageEl, $navbarEl, 'current', undefined, initOptions);\n });\n if (historyRestored) {\n if (browserHistoryInitialMatch) {\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({ preload: true });\n }\n } else {\n router.navigate(initialUrl, {\n initial: true,\n browserHistory: false,\n history: false,\n animate: browserHistoryAnimateOnLoad,\n once: {\n pageAfterIn() {\n const preloadPreviousPage =\n router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 2) {\n router.back({ preload: true });\n }\n },\n },\n });\n }\n }\n if (!historyRestored && !hasTabRoute) {\n router.history.push(initialUrl);\n router.saveHistory();\n }\n }\n if (\n initialUrl &&\n browserHistory &&\n browserHistoryOnLoad &&\n (!History.state || !History.state[view.id])\n ) {\n History.initViewState(view.id, {\n url: initialUrl,\n });\n }\n router.emit('local::init routerInit', router);\n }\n\n destroy() {\n let router = this;\n\n router.emit('local::destroy routerDestroy', router);\n\n // Delete props & methods\n Object.keys(router).forEach((routerProp) => {\n router[routerProp] = null;\n delete router[routerProp];\n });\n\n router = null;\n }\n}\n\n// Load\nRouter.prototype.navigate = navigate;\nRouter.prototype.refreshPage = refreshPage;\n// Tab\nRouter.prototype.tabLoad = tabLoad;\nRouter.prototype.tabRemove = tabRemove;\n// Modal\nRouter.prototype.modalLoad = modalLoad;\nRouter.prototype.modalRemove = modalRemove;\n// Back\nRouter.prototype.back = back;\n// Clear history\nRouter.prototype.clearPreviousHistory = clearPreviousHistory;\n\nexport default Router;\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport asyncComponent from './async-component.js';\n\nfunction tabLoad(tabRoute, loadOptions = {}) {\n const router = this;\n const options = extend(\n {\n animate: router.params.animate,\n browserHistory: true,\n history: true,\n parentPageEl: null,\n preload: false,\n on: {},\n },\n loadOptions,\n );\n\n let currentRoute;\n let previousRoute;\n if (options.route) {\n // Set Route\n if (!options.preload && options.route !== router.currentRoute) {\n previousRoute = router.previousRoute;\n router.currentRoute = options.route;\n }\n if (options.preload) {\n currentRoute = options.route;\n previousRoute = router.currentRoute;\n } else {\n currentRoute = router.currentRoute;\n if (!previousRoute) previousRoute = router.previousRoute;\n }\n\n // Update Browser History\n if (router.params.browserHistory && options.browserHistory && !options.reloadPrevious) {\n History[router.params.browserHistoryTabs](\n router.view.id,\n {\n url: options.route.url,\n },\n (router.params.browserHistoryRoot || '') +\n router.params.browserHistorySeparator +\n options.route.url,\n );\n }\n\n // Update Router History\n if (options.history) {\n router.history[Math.max(router.history.length - 1, 0)] = options.route.url;\n router.saveHistory();\n }\n }\n\n // Show Tab\n const $parentPageEl = $(options.parentPageEl || router.currentPageEl);\n let tabEl;\n if ($parentPageEl.length && $parentPageEl.find(`#${tabRoute.id}`).length) {\n tabEl = $parentPageEl.find(`#${tabRoute.id}`).eq(0);\n } else if (router.view.selector) {\n tabEl = `${router.view.selector} #${tabRoute.id}`;\n } else {\n tabEl = `#${tabRoute.id}`;\n }\n const tabShowResult = router.app.tab.show({\n tabEl,\n animate: options.animate,\n tabRoute: options.route,\n });\n\n const { $newTabEl, $oldTabEl, animated, onTabsChanged } = tabShowResult;\n\n if ($newTabEl && $newTabEl.parents('.page').length > 0 && options.route) {\n const tabParentPageData = $newTabEl.parents('.page')[0].f7Page;\n if (tabParentPageData && options.route) {\n tabParentPageData.route = options.route;\n }\n }\n\n // Tab Content Loaded\n function onTabLoaded(contentEl) {\n // Remove theme elements\n router.removeThemeElements($newTabEl);\n\n let tabEventTarget = $newTabEl;\n if (typeof contentEl !== 'string') tabEventTarget = $(contentEl);\n\n tabEventTarget.trigger('tab:init tab:mounted', tabRoute);\n router.emit('tabInit tabMounted', $newTabEl[0], tabRoute);\n\n if ($oldTabEl && $oldTabEl.length) {\n if (animated) {\n onTabsChanged(() => {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.unloadTabContent) {\n router.tabRemove($oldTabEl, $newTabEl, tabRoute);\n }\n });\n } else {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.unloadTabContent) {\n router.tabRemove($oldTabEl, $newTabEl, tabRoute);\n }\n }\n }\n }\n\n if ($newTabEl[0].f7RouterTabLoaded) {\n if (!$oldTabEl || !$oldTabEl.length) return router;\n if (animated) {\n onTabsChanged(() => {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n });\n } else {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n }\n return router;\n }\n\n // Load Tab Content\n function loadTab(loadTabParams, loadTabOptions) {\n // Load Tab Props\n const { url, content, el, component, componentUrl } = loadTabParams;\n // Component/Template Callbacks\n function resolve(contentEl) {\n router.allowPageChange = true;\n if (!contentEl) return;\n if (typeof contentEl === 'string') {\n $newTabEl.html(contentEl);\n } else {\n $newTabEl.html('');\n if (contentEl.f7Component) {\n contentEl.f7Component.mount((componentEl) => {\n $newTabEl.append(componentEl);\n });\n } else {\n $newTabEl.append(contentEl);\n }\n }\n $newTabEl[0].f7RouterTabLoaded = true;\n onTabLoaded(contentEl);\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (content) {\n resolve(content);\n } else if (el) {\n resolve(el);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.tabComponentLoader({\n tabEl: $newTabEl[0],\n component,\n componentUrl,\n options: loadTabOptions,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, loadTabOptions)\n .then((tabContent) => {\n resolve(tabContent);\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n }\n }\n\n let hasContentLoadProp;\n 'url content component el componentUrl'.split(' ').forEach((tabLoadProp) => {\n if (tabRoute[tabLoadProp]) {\n hasContentLoadProp = true;\n loadTab({ [tabLoadProp]: tabRoute[tabLoadProp] }, options);\n }\n });\n\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n loadTab(resolveParams, extend(options, resolveOptions));\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (tabRoute.async) {\n tabRoute.async.call(router, {\n router,\n to: currentRoute,\n from: previousRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n app: router.app,\n });\n } else if (tabRoute.asyncComponent) {\n asyncComponent(router, tabRoute.asyncComponent, asyncResolve, asyncReject);\n } else if (!hasContentLoadProp) {\n router.allowPageChange = true;\n }\n\n return router;\n}\nfunction tabRemove($oldTabEl, $newTabEl, tabRoute) {\n const router = this;\n\n let hasTabComponentChild;\n if ($oldTabEl[0]) {\n $oldTabEl[0].f7RouterTabLoaded = false;\n delete $oldTabEl[0].f7RouterTabLoaded;\n }\n $oldTabEl.children().each((tabChild) => {\n if (tabChild.f7Component) {\n hasTabComponentChild = true;\n $(tabChild).trigger('tab:beforeremove', tabRoute);\n tabChild.f7Component.destroy();\n }\n });\n if (!hasTabComponentChild) {\n $oldTabEl.trigger('tab:beforeremove', tabRoute);\n }\n router.emit('tabBeforeRemove', $oldTabEl[0], $newTabEl[0], tabRoute);\n router.removeTabContent($oldTabEl[0], tabRoute);\n}\n\nexport { tabLoad, tabRemove };\n","import { extend, nextTick } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport asyncComponent from './async-component.js';\n\nfunction modalLoad(modalType, route, loadOptions = {}, direction) {\n const router = this;\n const app = router.app;\n const isPanel = modalType === 'panel';\n const modalOrPanel = isPanel ? 'panel' : 'modal';\n\n const options = extend(\n {\n animate: router.params.animate,\n browserHistory: true,\n history: true,\n on: {},\n once: {},\n },\n loadOptions,\n );\n\n const modalParams = extend({}, route.route[modalType]);\n const modalRoute = route.route;\n\n const routeCallback = (modal, name) => {\n const { on, once } = options;\n let callback;\n if (name === 'open') {\n callback = on.modalOpen || once.modalOpen || on.panelOpen || once.panelOpen;\n }\n if (name === 'close') {\n callback = on.modalClose || once.modalClose || on.panelClose || once.panelClose;\n }\n if (name === 'closed') {\n callback = on.modalClosed || once.modalClosed || on.panelClosed || once.panelClosed;\n }\n if (callback) callback(modal);\n };\n\n function onModalLoaded() {\n // Create Modal\n const modal = app[modalType].create(modalParams);\n modalRoute.modalInstance = modal;\n\n const hasEl = modal.el;\n\n function closeOnSwipeBack() {\n modal.close();\n }\n modal.on(`${modalOrPanel}Open`, () => {\n if (!hasEl) {\n // Remove theme elements\n router.removeThemeElements(modal.el);\n\n // Emit events\n modal.$el.trigger(\n `${modalType.toLowerCase()}:init ${modalType.toLowerCase()}:mounted`,\n route,\n modal,\n );\n router.emit(\n `${!isPanel ? 'modalInit' : ''} ${modalType}Init ${modalType}Mounted`,\n modal.el,\n route,\n modal,\n );\n }\n router.once('swipeBackMove', closeOnSwipeBack);\n routeCallback(modal, 'open');\n });\n modal.on(`${modalOrPanel}Close`, () => {\n router.off('swipeBackMove', closeOnSwipeBack);\n if (!modal.closeByRouter) {\n router.back();\n }\n routeCallback(modal, 'close');\n });\n\n modal.on(`${modalOrPanel}Closed`, () => {\n modal.$el.trigger(`${modalType.toLowerCase()}:beforeremove`, route, modal);\n modal.emit(\n `${!isPanel ? 'modalBeforeRemove ' : ''}${modalType}BeforeRemove`,\n modal.el,\n route,\n modal,\n );\n const modalComponent = modal.el.f7Component;\n routeCallback(modal, 'closed');\n if (modalComponent) {\n modalComponent.destroy();\n }\n nextTick(() => {\n if (modalComponent || modalParams.component || modalParams.asyncComponent) {\n router.removeModal(modal.el);\n }\n modal.destroy();\n delete modal.route;\n delete modalRoute.modalInstance;\n });\n });\n\n if (options.route) {\n // Update Browser History\n if (router.params.browserHistory && options.browserHistory) {\n History.push(\n router.view.id,\n {\n url: options.route.url,\n modal: modalType,\n },\n (router.params.browserHistoryRoot || '') +\n router.params.browserHistorySeparator +\n options.route.url,\n );\n }\n\n // Set Route\n if (options.route !== router.currentRoute) {\n modal.route = extend(options.route, { modal });\n router.currentRoute = modal.route;\n }\n\n // Update Router History\n if (options.history && !options.reloadCurrent) {\n router.history.push(options.route.url);\n router.saveHistory();\n }\n }\n\n if (hasEl) {\n // Remove theme elements\n router.removeThemeElements(modal.el);\n\n // Emit events\n modal.$el.trigger(\n `${modalType.toLowerCase()}:init ${modalType.toLowerCase()}:mounted`,\n route,\n modal,\n );\n router.emit(\n `${modalOrPanel}Init ${modalType}Init ${modalType}Mounted`,\n modal.el,\n route,\n modal,\n );\n }\n\n // Open\n modal.open(options.animate === false || options.animate === true ? options.animate : undefined);\n }\n\n // Load Modal Content\n function loadModal(loadModalParams, loadModalOptions) {\n // Load Modal Props\n const { url, content, component, componentUrl } = loadModalParams;\n\n // Component/Template Callbacks\n function resolve(contentEl) {\n if (contentEl) {\n if (typeof contentEl === 'string') {\n modalParams.content = contentEl;\n } else if (contentEl.f7Component) {\n contentEl.f7Component.mount((componentEl) => {\n modalParams.el = componentEl;\n app.$el.append(componentEl);\n });\n } else {\n modalParams.el = contentEl;\n }\n onModalLoaded();\n }\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n\n if (content) {\n resolve(content);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.modalComponentLoader({\n rootEl: app.el,\n component,\n componentUrl,\n options: loadModalOptions,\n resolve,\n reject,\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, loadModalOptions)\n .then((modalContent) => {\n modalParams.content = modalContent;\n onModalLoaded();\n })\n .catch(() => {\n router.allowPageChange = true;\n });\n } else {\n onModalLoaded();\n }\n }\n\n let foundLoadProp;\n 'url content component el componentUrl template'.split(' ').forEach((modalLoadProp) => {\n if (modalParams[modalLoadProp] && !foundLoadProp) {\n foundLoadProp = true;\n loadModal({ [modalLoadProp]: modalParams[modalLoadProp] }, options);\n }\n });\n if (!foundLoadProp && modalType === 'actions') {\n onModalLoaded();\n }\n\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n loadModal(resolveParams, extend(options, resolveOptions));\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (modalParams.async) {\n modalParams.async.call(router, {\n router,\n to: options.route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction,\n app,\n });\n }\n if (modalParams.asyncComponent) {\n asyncComponent(router, modalParams.asyncComponent, asyncResolve, asyncReject);\n }\n return router;\n}\nfunction modalRemove(modal) {\n extend(modal, { closeByRouter: true });\n modal.close();\n}\n\nexport { modalLoad, modalRemove };\n","import $ from '../../shared/dom7.js';\nimport appRouterCheck from './app-router-check.js';\n\nfunction clearPreviousPages(router) {\n appRouterCheck(router, 'clearPreviousPages');\n const app = router.app;\n const dynamicNavbar = router.dynamicNavbar;\n\n const $pagesToRemove = router.$el.children('.page').filter((pageInView) => {\n if (router.currentRoute && (router.currentRoute.modal || router.currentRoute.panel))\n return true;\n return pageInView !== router.currentPageEl;\n });\n\n $pagesToRemove.each((pageEl) => {\n const $oldPageEl = $(pageEl);\n const $oldNavbarEl = $(app.navbar.getElByPage($oldPageEl));\n if (router.params.stackPages && router.initialPages.indexOf($oldPageEl[0]) >= 0) {\n $oldPageEl.addClass('stacked');\n if (dynamicNavbar) {\n $oldNavbarEl.addClass('stacked');\n }\n } else {\n // Page remove event\n router.pageCallback('beforeRemove', $oldPageEl, $oldNavbarEl, 'previous', undefined, {});\n router.removePage($oldPageEl);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n });\n}\n\nfunction clearPreviousHistory() {\n const router = this;\n appRouterCheck(router, 'clearPreviousHistory');\n const url = router.history[router.history.length - 1];\n\n clearPreviousPages(router);\n\n router.history = [url];\n router.view.history = [url];\n router.saveHistory();\n}\n\nexport { clearPreviousHistory }; // eslint-disable-line\n","import Router from './router-class.js';\n\nexport default {\n name: 'router',\n static: {\n Router,\n },\n instance: {\n cache: {\n xhr: [],\n templates: [],\n components: [],\n },\n },\n create() {\n const instance = this;\n if (instance.app) {\n // View Router\n if (instance.params.router) {\n instance.router = new Router(instance.app, instance);\n }\n } else {\n // App Router\n instance.router = new Router(instance);\n }\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\n\nfunction resizableView(view) {\n const app = view.app;\n const support = getSupport();\n if (view.resizableInitialized) return;\n extend(view, {\n resizable: true,\n resizableWidth: null,\n resizableInitialized: true,\n });\n const $htmlEl = $('html');\n const { $el } = view;\n if (!$el) return;\n\n let $resizeHandlerEl;\n\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let touchesDiff;\n let width;\n\n let minWidth;\n let maxWidth;\n\n function transformCSSWidth(v) {\n if (!v) return null;\n if (v.indexOf('%') >= 0 || v.indexOf('vw') >= 0) {\n return (parseInt(v, 10) / 100) * app.width;\n }\n const newV = parseInt(v, 10);\n if (Number.isNaN(newV)) return null;\n return newV;\n }\n\n function isResizable() {\n return view.resizable && $el.hasClass('view-resizable') && $el.hasClass('view-master-detail');\n }\n\n function handleTouchStart(e) {\n if (!isResizable()) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isMoved = false;\n isTouched = true;\n const $pageMasterEl = $el.children('.page-master');\n minWidth = transformCSSWidth($pageMasterEl.css('min-width'));\n maxWidth = transformCSSWidth($pageMasterEl.css('max-width'));\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n e.f7PreventSwipePanel = true;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n\n if (!isMoved) {\n width = $resizeHandlerEl[0].offsetLeft + $resizeHandlerEl[0].offsetWidth;\n $el.addClass('view-resizing');\n $htmlEl.css('cursor', 'col-resize');\n }\n\n isMoved = true;\n\n e.preventDefault();\n\n touchesDiff = pageX - touchesStart.x;\n\n let newWidth = width + touchesDiff;\n if (minWidth && !Number.isNaN(minWidth)) {\n newWidth = Math.max(newWidth, minWidth);\n }\n if (maxWidth && !Number.isNaN(maxWidth)) {\n newWidth = Math.min(newWidth, maxWidth);\n }\n newWidth = Math.min(Math.max(newWidth, 0), app.width);\n\n view.resizableWidth = newWidth;\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${newWidth}px`);\n\n $el.trigger('view:resize', newWidth);\n view.emit('local::resize viewResize', view, newWidth);\n }\n function handleTouchEnd() {\n $('html').css('cursor', '');\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${view.resizableWidth}px`);\n $el.removeClass('view-resizing');\n }\n\n function handleResize() {\n if (!view.resizableWidth) return;\n minWidth = transformCSSWidth($resizeHandlerEl.css('min-width'));\n maxWidth = transformCSSWidth($resizeHandlerEl.css('max-width'));\n\n if (minWidth && !Number.isNaN(minWidth) && view.resizableWidth < minWidth) {\n view.resizableWidth = Math.max(view.resizableWidth, minWidth);\n }\n if (maxWidth && !Number.isNaN(maxWidth) && view.resizableWidth > maxWidth) {\n view.resizableWidth = Math.min(view.resizableWidth, maxWidth);\n }\n view.resizableWidth = Math.min(Math.max(view.resizableWidth, 0), app.width);\n\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${view.resizableWidth}px`);\n }\n\n $resizeHandlerEl = view.$el.children('.view-resize-handler');\n if (!$resizeHandlerEl.length) {\n view.$el.append('<div class=\"view-resize-handler\"></div>');\n $resizeHandlerEl = view.$el.children('.view-resize-handler');\n }\n view.$resizeHandlerEl = $resizeHandlerEl;\n\n $el.addClass('view-resizable');\n\n // Add Events\n const passive = support.passiveListener ? { passive: true } : false;\n\n view.$el.on(app.touchEvents.start, '.view-resize-handler', handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n view.on('beforeOpen', handleResize);\n\n view.once('viewDestroy', () => {\n $el.removeClass('view-resizable');\n view.$resizeHandlerEl.remove();\n view.$el.off(app.touchEvents.start, '.view-resize-handler', handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n view.off('beforeOpen', handleResize);\n });\n}\n\nexport default resizableView;\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Router from '../../modules/router/router.js';\nimport Framework7Class from '../../shared/class.js';\nimport resizableView from './resizable-view.js';\n\nclass View extends Framework7Class {\n constructor(app, el, viewParams = {}) {\n super(viewParams, [app]);\n\n const view = this;\n\n const ssr = view.params.routerId;\n\n const defaults = {\n routes: [],\n routesAdd: [],\n };\n\n if (!ssr) {\n const $el = $(el);\n if (!$el.length) {\n let message = \"Framework7: can't create a View instance because \";\n message +=\n typeof el === 'string'\n ? `the selector \"${el}\" didn't match any element`\n : 'el must be an HTMLElement or Dom7 object';\n\n throw new Error(message);\n }\n }\n\n // Default View params\n view.params = extend({ el }, defaults, app.params.view, viewParams);\n\n // Routes\n if (view.params.routes.length > 0) {\n view.routes = view.params.routes;\n } else {\n view.routes = [].concat(app.routes, view.params.routesAdd);\n }\n\n // View Props\n extend(false, view, {\n app,\n name: view.params.name,\n main: view.params.main,\n history: [],\n scrollHistory: {},\n });\n\n // Install Modules\n view.useModules();\n\n // Add to app\n app.views.push(view);\n if (view.main) {\n app.views.main = view;\n }\n if (view.name) {\n app.views[view.name] = view;\n }\n\n // Index\n view.index = app.views.indexOf(view);\n\n // View ID\n let viewId;\n if (view.name) {\n viewId = `view_${view.name}`;\n } else if (view.main) {\n viewId = 'view_main';\n } else {\n viewId = `view_${view.index}`;\n }\n view.id = viewId;\n\n if (!view.params.init) {\n return view;\n }\n // Init View\n if (app.initialized) {\n view.init();\n } else {\n app.on('init', () => {\n view.init();\n });\n }\n\n return view;\n }\n\n destroy() {\n let view = this;\n const app = view.app;\n\n view.$el.trigger('view:beforedestroy');\n view.emit('local::beforeDestroy viewBeforeDestroy', view);\n\n app.off('resize', view.checkMasterDetailBreakpoint);\n\n if (view.main) {\n app.views.main = null;\n delete app.views.main;\n } else if (view.name) {\n app.views[view.name] = null;\n delete app.views[view.name];\n }\n view.$el[0].f7View = null;\n delete view.$el[0].f7View;\n\n app.views.splice(app.views.indexOf(view), 1);\n\n // Destroy Router\n if (view.params.router && view.router) {\n view.router.destroy();\n }\n\n view.emit('local::destroy viewDestroy', view);\n\n // Delete props & methods\n Object.keys(view).forEach((viewProp) => {\n view[viewProp] = null;\n delete view[viewProp];\n });\n\n view = null;\n }\n\n checkMasterDetailBreakpoint(force) {\n const view = this;\n const app = view.app;\n const wasMasterDetail = view.$el.hasClass('view-master-detail');\n const isMasterDetail =\n app.width >= view.params.masterDetailBreakpoint && view.$el.children('.page-master').length;\n if ((typeof force === 'undefined' && isMasterDetail) || force === true) {\n view.$el.addClass('view-master-detail');\n if (!wasMasterDetail) {\n view.emit('local::masterDetailBreakpoint viewMasterDetailBreakpoint', view);\n view.$el.trigger('view:masterDetailBreakpoint');\n }\n } else {\n view.$el.removeClass('view-master-detail');\n if (wasMasterDetail) {\n view.emit('local::masterDetailBreakpoint viewMasterDetailBreakpoint', view);\n view.$el.trigger('view:masterDetailBreakpoint');\n }\n }\n }\n\n initMasterDetail() {\n const view = this;\n const app = view.app;\n view.checkMasterDetailBreakpoint = view.checkMasterDetailBreakpoint.bind(view);\n view.checkMasterDetailBreakpoint();\n if (view.params.masterDetailResizable) {\n resizableView(view);\n }\n app.on('resize', view.checkMasterDetailBreakpoint);\n }\n\n mount(viewEl) {\n const view = this;\n const app = view.app;\n const el = view.params.el || viewEl;\n const $el = $(el);\n\n // Selector\n let selector;\n if (typeof el === 'string') selector = el;\n else {\n // Supposed to be HTMLElement or Dom7\n selector =\n ($el.attr('id') ? `#${$el.attr('id')}` : '') +\n ($el.attr('class')\n ? `.${$el.attr('class').replace(/ /g, '.').replace('.active', '')}`\n : '');\n }\n\n // DynamicNavbar\n let $navbarsEl;\n if (app.theme === 'ios' && view.params.iosDynamicNavbar) {\n $navbarsEl = $el.children('.navbars').eq(0);\n if ($navbarsEl.length === 0) {\n $navbarsEl = $('<div class=\"navbars\"></div>');\n }\n }\n\n extend(view, {\n $el,\n el: $el[0],\n main: view.main || $el.hasClass('view-main'),\n $navbarsEl,\n navbarsEl: $navbarsEl ? $navbarsEl[0] : undefined,\n selector,\n });\n\n if (view.main) {\n app.views.main = view;\n }\n\n // Save in DOM\n if ($el && $el[0]) {\n $el[0].f7View = view;\n }\n\n view.emit('local::mount viewMount', view);\n }\n\n init(viewEl) {\n const view = this;\n view.mount(viewEl);\n if (view.params.router) {\n if (view.params.masterDetailBreakpoint > 0) {\n view.initMasterDetail();\n }\n view.router.init();\n view.$el.trigger('view:init');\n view.emit('local::init viewInit', view);\n }\n }\n}\n\n// Use Router\nView.use(Router);\n\nexport default View;\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport ViewClass from '../../components/view/view-class.js';\n\nfunction initClicks(app) {\n function handleClicks(e) {\n const window = getWindow();\n const $clickedEl = $(e.target);\n const $clickedLinkEl = $clickedEl.closest('a');\n const isLink = $clickedLinkEl.length > 0;\n const url = isLink && $clickedLinkEl.attr('href');\n\n // Check if link is external\n if (isLink) {\n if (\n $clickedLinkEl.is(app.params.clicks.externalLinks) ||\n // eslint-disable-next-line\n (url && url.indexOf('javascript:') >= 0)\n ) {\n const target = $clickedLinkEl.attr('target');\n if (\n url &&\n window.cordova &&\n window.cordova.InAppBrowser &&\n (target === '_system' || target === '_blank')\n ) {\n e.preventDefault();\n window.cordova.InAppBrowser.open(url, target);\n } else if (\n url &&\n window.Capacitor &&\n window.Capacitor.Plugins &&\n window.Capacitor.Plugins.Browser &&\n (target === '_system' || target === '_blank')\n ) {\n e.preventDefault();\n window.Capacitor.Plugins.Browser.open({ url });\n }\n return;\n }\n }\n\n // Modules Clicks\n Object.keys(app.modules).forEach((moduleName) => {\n const moduleClicks = app.modules[moduleName].clicks;\n if (!moduleClicks) return;\n if (e.preventF7Router) return;\n Object.keys(moduleClicks).forEach((clickSelector) => {\n const matchingClickedElement = $clickedEl.closest(clickSelector).eq(0);\n if (matchingClickedElement.length > 0) {\n moduleClicks[clickSelector].call(\n app,\n matchingClickedElement,\n matchingClickedElement.dataset(),\n e,\n );\n }\n });\n });\n\n // Load Page\n let clickedLinkData = {};\n if (isLink) {\n e.preventDefault();\n clickedLinkData = $clickedLinkEl.dataset();\n }\n clickedLinkData.clickedEl = $clickedLinkEl[0];\n\n // Prevent Router\n if (e.preventF7Router) return;\n if ($clickedLinkEl.hasClass('prevent-router') || $clickedLinkEl.hasClass('router-prevent'))\n return;\n\n const validUrl = url && url.length > 0 && url[0] !== '#';\n if (validUrl || $clickedLinkEl.hasClass('back')) {\n let view;\n if (clickedLinkData.view && clickedLinkData.view === 'current') {\n view = app.views.current;\n } else if (clickedLinkData.view) {\n view = $(clickedLinkData.view)[0].f7View;\n } else {\n view = $clickedEl.parents('.view')[0] && $clickedEl.parents('.view')[0].f7View;\n if (!$clickedLinkEl.hasClass('back') && view && view.params.linksView) {\n if (typeof view.params.linksView === 'string') view = $(view.params.linksView)[0].f7View;\n else if (view.params.linksView instanceof ViewClass) view = view.params.linksView;\n }\n }\n if (!view) {\n if (app.views.main) view = app.views.main;\n }\n if (!view || !view.router) return;\n if ($clickedLinkEl[0].f7RouteProps) {\n clickedLinkData.props = $clickedLinkEl[0].f7RouteProps;\n }\n if ($clickedLinkEl.hasClass('back')) view.router.back(url, clickedLinkData);\n else view.router.navigate(url, clickedLinkData);\n }\n }\n\n app.on('click', handleClicks);\n}\nexport default {\n name: 'clicks',\n params: {\n clicks: {\n // External Links\n externalLinks: '.external',\n },\n },\n on: {\n init() {\n const app = this;\n initClicks(app);\n },\n },\n};\n","import { merge } from '../../shared/utils.js';\n\nexport default {\n name: 'routerComponentLoader',\n proto: {\n openIn(router, url, options) {\n const navigateOptions = {\n url,\n route: {\n path: url,\n options: {\n ...options,\n openIn: undefined,\n },\n },\n };\n const params = {\n ...options,\n };\n if (options.openIn === 'popup') {\n params.content = `<div class=\"popup popup-router-open-in\" data-url=\"${url}\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div>`;\n navigateOptions.route.popup = params;\n }\n if (options.openIn === 'loginScreen') {\n params.content = `<div class=\"login-screen login-screen-router-open-in\" data-url=\"${url}\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div>`;\n navigateOptions.route.loginScreen = params;\n }\n if (options.openIn === 'sheet') {\n params.content = `<div class=\"sheet-modal sheet-modal-router-open-in\" data-url=\"${url}\"><div class=\"sheet-modal-inner\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div></div>`;\n navigateOptions.route.sheet = params;\n }\n if (options.openIn === 'popover') {\n params.targetEl = options.clickedEl || options.targetEl;\n params.content = `<div class=\"popover popover-router-open-in\" data-url=\"${url}\"><div class=\"popover-inner\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div></div>`;\n navigateOptions.route.popover = params;\n }\n if (options.openIn.indexOf('panel') >= 0) {\n const parts = options.openIn.split(':');\n const side = parts[1] || 'left';\n const effect = parts[2] || 'cover';\n params.targetEl = options.clickedEl || options.targetEl;\n params.content = `<div class=\"panel panel-router-open-in panel-${side} panel-${effect}\" data-url=\"${url}\"><div class=\"view view-init\" data-links-view=\"${router.view.selector}\" data-url=\"${url}\" data-ignore-open-in=\"true\"></div></div>`;\n navigateOptions.route.panel = params;\n }\n return router.navigate(navigateOptions);\n },\n componentLoader(component, componentUrl, options = {}, resolve, reject) {\n const router = this;\n const { app } = router;\n const url = typeof component === 'string' ? component : componentUrl;\n const compiledUrl = router.replaceRequestUrlParams(url, options);\n function compile(componentFunction) {\n let context = options.context || {};\n if (typeof context === 'function') context = context.call(router);\n else if (typeof context === 'string') {\n try {\n context = JSON.parse(context);\n } catch (err) {\n reject(err);\n throw err;\n }\n }\n const componentContext = merge({}, context, {\n f7route: options.route,\n f7router: router,\n });\n const componentProps = merge(\n options.route ? options.route.params || {} : {},\n options.props || {},\n options.routeProps || {},\n );\n let componentEl;\n let componentRoot;\n if (options.componentOptions && options.componentOptions.el) {\n componentEl = options.componentOptions.el;\n }\n if (options.componentOptions && options.componentOptions.root) {\n componentRoot = options.componentOptions.root;\n }\n app.component\n .create(componentFunction, componentProps, {\n context: componentContext,\n el: componentEl,\n root: componentRoot,\n })\n .then((createdComponent) => {\n resolve(createdComponent.el);\n })\n .catch((err) => {\n reject(err);\n throw new Error(err);\n });\n }\n let cachedComponent;\n if (compiledUrl && router.params.componentCache) {\n router.cache.components.forEach((cached) => {\n if (cached.url === compiledUrl) cachedComponent = cached.component;\n });\n }\n if (compiledUrl && cachedComponent) {\n compile(cachedComponent);\n } else if (compiledUrl && !cachedComponent) {\n // Load via XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router\n .xhrRequest(url, options)\n .then((loadedComponent) => {\n const parsedComponent = app.component.parse(loadedComponent);\n if (router.params.componentCache) {\n router.cache.components.push({\n url: compiledUrl,\n component: parsedComponent,\n });\n }\n compile(parsedComponent);\n })\n .catch((err) => {\n reject();\n throw err;\n });\n } else {\n compile(component);\n }\n },\n\n modalComponentLoader({ component, componentUrl, options, resolve, reject } = {}) {\n const router = this;\n router.componentLoader(\n component,\n componentUrl,\n options,\n (el) => {\n resolve(el);\n },\n reject,\n );\n },\n\n tabComponentLoader({ component, componentUrl, options, resolve, reject } = {}) {\n const router = this;\n router.componentLoader(\n component,\n componentUrl,\n options,\n (el) => {\n resolve(el);\n },\n reject,\n );\n },\n\n pageComponentLoader({ component, componentUrl, options, resolve, reject } = {}) {\n const router = this;\n router.componentLoader(\n component,\n componentUrl,\n options,\n (el, newOptions = {}) => {\n resolve(el, newOptions);\n },\n reject,\n );\n },\n },\n};\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import htm from 'htm';\nimport { flattenArray } from '../../shared/utils.js';\n\nconst ignoreChildren = [false, null, '', undefined];\n\nconst h = (type, props, ...children) => {\n return {\n type,\n props: props || {},\n children: flattenArray(children.filter((child) => ignoreChildren.indexOf(child) < 0)),\n };\n};\n\nconst $h = htm.bind(h);\n\nexport default $h;\n","export function vnode(sel, data, children, text, elm) {\n var key = data === undefined ? undefined : data.key;\n return { sel: sel, data: data, children: children,\n text: text, elm: elm, key: key };\n}\nexport default vnode;\n//# sourceMappingURL=vnode.js.map","export var array = Array.isArray;\nexport function primitive(s) {\n return typeof s === 'string' || typeof s === 'number';\n}\n//# sourceMappingURL=is.js.map","import { vnode } from './vnode.js';\nimport * as is from './is';\nfunction addNS(data, children, sel) {\n data.ns = 'http://www.w3.org/2000/svg';\n if (sel !== 'foreignObject' && children !== undefined) {\n for (var i = 0; i < children.length; ++i) {\n var childData = children[i].data;\n if (childData !== undefined) {\n addNS(childData, children[i].children, children[i].sel);\n }\n }\n }\n}\nexport function h(sel, b, c) {\n var data = {}, children, text, i;\n if (c !== undefined) {\n data = b;\n if (is.array(c)) {\n children = c;\n }\n else if (is.primitive(c)) {\n text = c;\n }\n else if (c && c.sel) {\n children = [c];\n }\n }\n else if (b !== undefined) {\n if (is.array(b)) {\n children = b;\n }\n else if (is.primitive(b)) {\n text = b;\n }\n else if (b && b.sel) {\n children = [b];\n }\n else {\n data = b;\n }\n }\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n if (is.primitive(children[i]))\n children[i] = vnode(undefined, undefined, undefined, children[i], undefined);\n }\n }\n if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g' &&\n (sel.length === 3 || sel[3] === '.' || sel[3] === '#')) {\n addNS(data, children, sel);\n }\n return vnode(sel, data, children, text, undefined);\n}\n;\nexport default h;\n//# sourceMappingURL=h.js.map\n","export default {};\n","/* eslint no-use-before-define: \"off\" */\n/* eslint import/no-named-as-default: \"off\" */\nimport h from './snabbdom/h.js';\nimport customComponents from './custom-components.js';\nimport { isObject, eventNameToColonCase } from '../../shared/utils.js';\n\nconst SELF_CLOSING =\n 'area base br col command embed hr img input keygen link menuitem meta param source track wbr'.split(\n ' ',\n );\nconst PROPS_ATTRS =\n 'hidden checked disabled readonly selected autofocus autoplay required multiple value indeterminate routeProps innerHTML'.split(\n ' ',\n );\nconst BOOLEAN_PROPS =\n 'hidden checked disabled readonly selected autofocus autoplay required multiple readOnly indeterminate'.split(\n ' ',\n );\n\nconst getTagName = (treeNode) => {\n return typeof treeNode.type === 'function'\n ? treeNode.type.name || 'CustomComponent'\n : treeNode.type;\n};\n\nconst toCamelCase = (name) => {\n return name\n .split('-')\n .map((word, index) => {\n if (index === 0) return word.toLowerCase();\n return word[0].toUpperCase() + word.substr(1);\n })\n .join('');\n};\nconst propsFromAttrs = (...args) => {\n const context = {};\n args.forEach((obj = {}) => {\n Object.keys(obj).forEach((key) => {\n context[toCamelCase(key)] = obj[key];\n });\n });\n\n return context;\n};\n\nconst createCustomComponent = ({ f7, treeNode, vnode, data }) => {\n const component =\n typeof treeNode.type === 'function' ? treeNode.type : customComponents[treeNode.type];\n f7.component\n .create(component, propsFromAttrs(data.attrs || {}, data.props || {}), {\n el: vnode.elm,\n children: treeNode.children,\n })\n .then((c) => {\n if (vnode.data && vnode.data.on && c && c.$el) {\n Object.keys(vnode.data.on).forEach((eventName) => {\n c.$el.on(eventName, vnode.data.on[eventName]);\n });\n }\n // eslint-disable-next-line\n vnode.elm.__component__ = c;\n });\n};\nconst updateCustomComponent = (vnode) => {\n // eslint-disable-next-line\n const component = vnode && vnode.elm && vnode.elm.__component__;\n if (!component) return;\n const newProps = propsFromAttrs(vnode.data.attrs || {}, vnode.data.props || {});\n component.children = vnode.data.treeNode.children;\n Object.assign(component.props, newProps);\n component.update();\n};\nconst destroyCustomComponent = (vnode) => {\n // eslint-disable-next-line\n const component = vnode && vnode.elm && vnode.elm.__component__;\n\n if (component) {\n const { el, $el } = component;\n if (vnode.data && vnode.data.on && $el) {\n Object.keys(vnode.data.on).forEach((eventName) => {\n $el.off(eventName, vnode.data.on[eventName]);\n });\n }\n if (component.destroy) component.destroy();\n if (el && el.parentNode) el.parentNode.removeChild(el);\n delete vnode.elm.__component__; // eslint-disable-line\n }\n};\n\nconst isCustomComponent = (treeNodeType) => {\n return (\n typeof treeNodeType === 'function' ||\n (treeNodeType && treeNodeType.indexOf('-') > 0 && customComponents[treeNodeType])\n );\n};\n\nfunction getHooks(treeNode, data, f7, initial, isRoot) {\n const hooks = {};\n const insert = [];\n const destroy = [];\n const update = [];\n const postpatch = [];\n let isFakeElement = false;\n let tagName = getTagName(treeNode);\n if (data && data.attrs && data.attrs.component) {\n tagName = data.attrs.component;\n delete data.attrs.component;\n isFakeElement = true;\n }\n\n const isCustom = isCustomComponent(treeNode.type);\n\n if (isCustom) {\n insert.push((vnode) => {\n if (vnode.sel !== tagName && !isFakeElement) return;\n createCustomComponent({ f7, treeNode, vnode, data });\n });\n destroy.push((vnode) => {\n destroyCustomComponent(vnode);\n });\n update.push((oldVnode, vnode) => {\n updateCustomComponent(vnode);\n });\n }\n\n if (!isCustom) {\n if (!data || !data.attrs || !data.attrs.class) return hooks;\n\n const classNames = data.attrs.class;\n classNames.split(' ').forEach((className) => {\n if (!initial) {\n insert.push(...f7.getVnodeHooks('insert', className));\n }\n destroy.push(...f7.getVnodeHooks('destroy', className));\n update.push(...f7.getVnodeHooks('update', className));\n postpatch.push(...f7.getVnodeHooks('postpatch', className));\n });\n }\n\n if (isRoot && !initial) {\n postpatch.push((oldVnode, vnode) => {\n const vn = vnode || oldVnode;\n if (!vn) return;\n if (vn.data && vn.data.component) {\n vn.data.component.hook('onUpdated');\n }\n });\n }\n if (\n insert.length === 0 &&\n destroy.length === 0 &&\n update.length === 0 &&\n postpatch.length === 0\n ) {\n return hooks;\n }\n\n if (insert.length) {\n hooks.insert = (vnode) => {\n insert.forEach((f) => f(vnode));\n };\n }\n if (destroy.length) {\n hooks.destroy = (vnode) => {\n destroy.forEach((f) => f(vnode));\n };\n }\n if (update.length) {\n hooks.update = (oldVnode, vnode) => {\n update.forEach((f) => f(oldVnode, vnode));\n };\n }\n if (postpatch.length) {\n hooks.postpatch = (oldVnode, vnode) => {\n postpatch.forEach((f) => f(oldVnode, vnode));\n };\n }\n\n return hooks;\n}\nconst getEventHandler = (eventHandler, { stop, prevent, once } = {}) => {\n let fired = false;\n\n function handler(...args) {\n const e = args[0];\n if (once && fired) return;\n if (stop) e.stopPropagation();\n if (prevent) e.preventDefault();\n fired = true;\n\n eventHandler(...args);\n }\n\n return handler;\n};\n\nconst getData = (treeNode, component, f7, initial, isRoot) => {\n const data = { component, treeNode };\n const tagName = getTagName(treeNode);\n Object.keys(treeNode.props).forEach((attrName) => {\n const attrValue = treeNode.props[attrName];\n if (typeof attrValue === 'undefined') return;\n if (PROPS_ATTRS.indexOf(attrName) >= 0) {\n // Props\n if (!data.props) data.props = {};\n if (attrName === 'readonly') {\n // eslint-disable-next-line\n attrName = 'readOnly';\n }\n if (attrName === 'routeProps') {\n // eslint-disable-next-line\n attrName = 'f7RouteProps';\n }\n if (tagName === 'option' && attrName === 'value') {\n if (!data.attrs) data.attrs = {};\n data.attrs.value = attrValue;\n }\n if (BOOLEAN_PROPS.indexOf(attrName) >= 0) {\n // eslint-disable-next-line\n data.props[attrName] = attrValue === false ? false : true;\n } else {\n data.props[attrName] = attrValue;\n }\n } else if (attrName === 'key') {\n // Key\n data.key = attrValue;\n } else if (\n attrName.indexOf('@') === 0 ||\n (attrName.indexOf('on') === 0 && attrName.length > 2)\n ) {\n // Events\n if (!data.on) data.on = {};\n let eventName =\n attrName.indexOf('@') === 0 ? attrName.substr(1) : eventNameToColonCase(attrName.substr(2));\n let stop = false;\n let prevent = false;\n let once = false;\n if (eventName.indexOf('.') >= 0) {\n eventName.split('.').forEach((eventNamePart, eventNameIndex) => {\n if (eventNameIndex === 0) eventName = eventNamePart;\n else {\n if (eventNamePart === 'stop') stop = true;\n if (eventNamePart === 'prevent') prevent = true;\n if (eventNamePart === 'once') once = true;\n }\n });\n }\n data.on[eventName] = getEventHandler(attrValue, { stop, prevent, once });\n } else if (attrName === 'style') {\n // Style\n if (typeof attrValue !== 'string') {\n data.style = attrValue;\n } else {\n if (!data.attrs) data.attrs = {};\n data.attrs.style = attrValue;\n }\n } else {\n // Rest of attribures\n if (!data.attrs) data.attrs = {};\n data.attrs[attrName] = attrValue;\n\n // ID -> Key\n if (attrName === 'id' && !data.key && !isRoot) {\n data.key = attrValue;\n }\n }\n });\n\n const hooks = getHooks(treeNode, data, f7, initial, isRoot);\n\n hooks.prepatch = (oldVnode, vnode) => {\n if (!oldVnode || !vnode) return;\n if (oldVnode && oldVnode.data && oldVnode.data.props) {\n Object.keys(oldVnode.data.props).forEach((key) => {\n if (BOOLEAN_PROPS.indexOf(key) < 0) return;\n if (!vnode.data) vnode.data = {};\n if (!vnode.data.props) vnode.data.props = {};\n if (oldVnode.data.props[key] === true && !(key in vnode.data.props)) {\n vnode.data.props[key] = false;\n }\n });\n }\n };\n\n data.hook = hooks;\n\n return data;\n};\n\nconst getChildren = (treeNode, component, f7, initial) => {\n if (treeNode && treeNode.type && SELF_CLOSING.indexOf(treeNode.type) >= 0) {\n return [];\n }\n const children = [];\n const nodes = treeNode.children;\n for (let i = 0; i < nodes.length; i += 1) {\n const childNode = nodes[i];\n const child = treeNodeToVNode(childNode, component, f7, initial, false);\n if (Array.isArray(child)) {\n children.push(...child);\n } else if (child) {\n children.push(child);\n }\n }\n return children;\n};\n\nconst getSlots = (treeNode, component, f7, initial) => {\n const slotName = treeNode.props.name || 'default';\n const slotNodes = (component.children || []).filter((childTreeNode) => {\n let childSlotName = 'default';\n if (childTreeNode.props) {\n childSlotName = childTreeNode.props.slot || 'default';\n }\n return childSlotName === slotName;\n });\n if (slotNodes.length === 0) {\n return getChildren(treeNode, component, f7, initial);\n }\n return slotNodes.map((subTreeNode) => treeNodeToVNode(subTreeNode, component, f7, initial));\n};\n\nconst isTreeNode = (treeNode) => {\n return isObject(treeNode) && 'props' in treeNode && 'type' in treeNode && 'children' in treeNode;\n};\n\nconst treeNodeToVNode = (treeNode, component, f7, initial, isRoot) => {\n if (!isTreeNode(treeNode)) {\n return String(treeNode);\n }\n if (treeNode.type === 'slot') {\n return getSlots(treeNode, component, f7, initial);\n }\n const data = getData(treeNode, component, f7, initial, isRoot);\n const children = isCustomComponent(treeNode.type)\n ? []\n : getChildren(treeNode, component, f7, initial);\n\n return h(getTagName(treeNode), data, children);\n};\n\nexport default function vdom(tree = {}, component, initial) {\n return treeNodeToVNode(tree, component, component.f7, initial, true);\n}\n","function createElement(tagName) {\n return document.createElement(tagName);\n}\nfunction createElementNS(namespaceURI, qualifiedName) {\n return document.createElementNS(namespaceURI, qualifiedName);\n}\nfunction createTextNode(text) {\n return document.createTextNode(text);\n}\nfunction createComment(text) {\n return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n if (referenceNode && referenceNode.parentNode !== parentNode) {\n if (referenceNode.__component__) referenceNode = referenceNode.__component__.el;\n }\n parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n if (!node) return;\n node.removeChild(child);\n}\nfunction appendChild(node, child) {\n node.appendChild(child);\n}\nfunction parentNode(node) {\n return node.parentNode;\n}\nfunction nextSibling(node) {\n return node.nextSibling;\n}\nfunction tagName(elm) {\n return elm.tagName;\n}\nfunction setTextContent(node, text) {\n node.textContent = text;\n}\nfunction getTextContent(node) {\n return node.textContent;\n}\nfunction isElement(node) {\n return node.nodeType === 1;\n}\nfunction isText(node) {\n return node.nodeType === 3;\n}\nfunction isComment(node) {\n return node.nodeType === 8;\n}\nexport var htmlDomApi = {\n createElement: createElement,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n getTextContent: getTextContent,\n isElement: isElement,\n isText: isText,\n isComment: isComment,\n};\nexport default htmlDomApi;\n//# sourceMappingURL=htmldomapi.js.map\n","import vnode from './vnode.js';\nimport * as is from './is.js';\nimport htmlDomApi from './htmldomapi.js';\nfunction isUndef(s) { return s === undefined; }\nfunction isDef(s) { return s !== undefined; }\nvar emptyNode = vnode('', {}, [], undefined, undefined);\nfunction sameVnode(vnode1, vnode2) {\n return vnode1.key === vnode2.key && vnode1.sel === vnode2.sel;\n}\nfunction isVnode(vnode) {\n return vnode.sel !== undefined;\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var i, map = {}, key, ch;\n for (i = beginIdx; i <= endIdx; ++i) {\n ch = children[i];\n if (ch != null) {\n key = ch.key;\n if (key !== undefined)\n map[key] = i;\n }\n }\n return map;\n}\nvar hooks = ['create', 'update', 'remove', 'destroy', 'pre', 'post'];\nexport { h } from './h';\nexport { thunk } from './thunk';\nexport function init(modules, domApi) {\n var i, j, cbs = {};\n var api = domApi !== undefined ? domApi : htmlDomApi;\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n var hook = modules[j][hooks[i]];\n if (hook !== undefined) {\n cbs[hooks[i]].push(hook);\n }\n }\n }\n function emptyNodeAt(elm) {\n var id = elm.id ? '#' + elm.id : '';\n var c = elm.className ? '.' + elm.className.split(' ').join('.') : '';\n return vnode(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm);\n }\n function createRmCb(childElm, listeners) {\n return function rmCb() {\n if (--listeners === 0) {\n var parent_1 = api.parentNode(childElm);\n api.removeChild(parent_1, childElm);\n }\n };\n }\n function createElm(vnode, insertedVnodeQueue) {\n var i, data = vnode.data;\n if (data !== undefined) {\n if (isDef(i = data.hook) && isDef(i = i.init)) {\n i(vnode);\n data = vnode.data;\n }\n }\n var children = vnode.children, sel = vnode.sel;\n if (sel === '!') {\n if (isUndef(vnode.text)) {\n vnode.text = '';\n }\n vnode.elm = api.createComment(vnode.text);\n }\n else if (sel !== undefined) {\n // Parse selector\n var hashIdx = sel.indexOf('#');\n var dotIdx = sel.indexOf('.', hashIdx);\n var hash = hashIdx > 0 ? hashIdx : sel.length;\n var dot = dotIdx > 0 ? dotIdx : sel.length;\n var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel;\n var elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag)\n : api.createElement(tag);\n if (hash < dot)\n elm.setAttribute('id', sel.slice(hash + 1, dot));\n if (dotIdx > 0)\n elm.setAttribute('class', sel.slice(dot + 1).replace(/\\./g, ' '));\n for (i = 0; i < cbs.create.length; ++i)\n cbs.create[i](emptyNode, vnode);\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n var ch = children[i];\n if (ch != null) {\n api.appendChild(elm, createElm(ch, insertedVnodeQueue));\n }\n }\n }\n else if (is.primitive(vnode.text)) {\n api.appendChild(elm, api.createTextNode(vnode.text));\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (i.create)\n i.create(emptyNode, vnode);\n if (i.insert)\n insertedVnodeQueue.push(vnode);\n }\n }\n else {\n vnode.elm = api.createTextNode(vnode.text);\n }\n return vnode.elm;\n }\n function addVnodes(parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (ch != null) {\n api.insertBefore(parentElm, createElm(ch, insertedVnodeQueue), before);\n }\n }\n }\n function invokeDestroyHook(vnode) {\n var i, j, data = vnode.data;\n if (data !== undefined) {\n if (isDef(i = data.hook) && isDef(i = i.destroy))\n i(vnode);\n for (i = 0; i < cbs.destroy.length; ++i)\n cbs.destroy[i](vnode);\n if (vnode.children !== undefined) {\n for (j = 0; j < vnode.children.length; ++j) {\n i = vnode.children[j];\n if (i != null && typeof i !== \"string\") {\n invokeDestroyHook(i);\n }\n }\n }\n }\n }\n function removeVnodes(parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var i_1 = void 0, listeners = void 0, rm = void 0, ch = vnodes[startIdx];\n if (ch != null) {\n if (isDef(ch.sel)) {\n invokeDestroyHook(ch);\n listeners = cbs.remove.length + 1;\n rm = createRmCb(ch.elm, listeners);\n for (i_1 = 0; i_1 < cbs.remove.length; ++i_1)\n cbs.remove[i_1](ch, rm);\n if (isDef(i_1 = ch.data) && isDef(i_1 = i_1.hook) && isDef(i_1 = i_1.remove)) {\n i_1(ch, rm);\n }\n else {\n rm();\n }\n }\n else {\n api.removeChild(parentElm, ch.elm);\n }\n }\n }\n }\n function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue) {\n var oldStartIdx = 0, newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx;\n var idxInOld;\n var elmToMove;\n var before;\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left\n }\n else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n }\n else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n }\n else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newEndVnode)) {\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldEndVnode, newStartVnode)) {\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n if (oldKeyToIdx === undefined) {\n oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n }\n idxInOld = oldKeyToIdx[newStartVnode.key];\n if (isUndef(idxInOld)) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n elmToMove = oldCh[idxInOld];\n if (elmToMove.sel !== newStartVnode.sel) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n }\n else {\n patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm);\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n }\n if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) {\n if (oldStartIdx > oldEndIdx) {\n before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n }\n else {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n }\n function patchVnode(oldVnode, vnode, insertedVnodeQueue) {\n var i, hook;\n if (isDef(i = vnode.data) && isDef(hook = i.hook) && isDef(i = hook.prepatch)) {\n i(oldVnode, vnode);\n }\n var elm = vnode.elm = oldVnode.elm;\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (oldVnode === vnode)\n return;\n if (vnode.data !== undefined) {\n for (i = 0; i < cbs.update.length; ++i)\n cbs.update[i](oldVnode, vnode);\n i = vnode.data.hook;\n if (isDef(i) && isDef(i = i.update))\n i(oldVnode, vnode);\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch)\n updateChildren(elm, oldCh, ch, insertedVnodeQueue);\n }\n else if (isDef(ch)) {\n if (isDef(oldVnode.text))\n api.setTextContent(elm, '');\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n }\n else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n }\n else if (isDef(oldVnode.text)) {\n api.setTextContent(elm, '');\n }\n }\n else if (oldVnode.text !== vnode.text) {\n api.setTextContent(elm, vnode.text);\n }\n if (isDef(hook) && isDef(i = hook.postpatch)) {\n i(oldVnode, vnode);\n }\n }\n return function patch(oldVnode, vnode) {\n var i, elm, parent;\n var insertedVnodeQueue = [];\n for (i = 0; i < cbs.pre.length; ++i)\n cbs.pre[i]();\n if (!isVnode(oldVnode)) {\n oldVnode = emptyNodeAt(oldVnode);\n }\n if (sameVnode(oldVnode, vnode)) {\n patchVnode(oldVnode, vnode, insertedVnodeQueue);\n }\n else {\n elm = oldVnode.elm;\n parent = api.parentNode(elm);\n createElm(vnode, insertedVnodeQueue);\n if (parent !== null) {\n api.insertBefore(parent, vnode.elm, api.nextSibling(elm));\n removeVnodes(parent, [oldVnode], 0, 0);\n }\n }\n for (i = 0; i < insertedVnodeQueue.length; ++i) {\n insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]);\n }\n for (i = 0; i < cbs.post.length; ++i)\n cbs.post[i]();\n return vnode;\n };\n}\n//# sourceMappingURL=snabbdom.js.map\n","var xlinkNS = 'http://www.w3.org/1999/xlink';\nvar xmlNS = 'http://www.w3.org/XML/1998/namespace';\nvar colonChar = 58;\nvar xChar = 120;\nfunction updateAttrs(oldVnode, vnode) {\n var key, elm = vnode.elm, oldAttrs = oldVnode.data.attrs, attrs = vnode.data.attrs;\n if (!oldAttrs && !attrs)\n return;\n if (oldAttrs === attrs)\n return;\n oldAttrs = oldAttrs || {};\n attrs = attrs || {};\n // update modified attributes, add new attributes\n for (key in attrs) {\n var cur = attrs[key];\n var old = oldAttrs[key];\n if (old !== cur) {\n if (cur === true) {\n elm.setAttribute(key, \"\");\n }\n else if (cur === false) {\n elm.removeAttribute(key);\n }\n else {\n if (key.charCodeAt(0) !== xChar) {\n elm.setAttribute(key, cur);\n }\n else if (key.charCodeAt(3) === colonChar) {\n // Assume xml namespace\n elm.setAttributeNS(xmlNS, key, cur);\n }\n else if (key.charCodeAt(5) === colonChar) {\n // Assume xlink namespace\n elm.setAttributeNS(xlinkNS, key, cur);\n }\n else {\n elm.setAttribute(key, cur);\n }\n }\n }\n }\n // remove removed attributes\n // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value)\n // the other option is to remove all attributes with value == undefined\n for (key in oldAttrs) {\n if (!(key in attrs)) {\n elm.removeAttribute(key);\n }\n }\n}\nexport var attributesModule = { create: updateAttrs, update: updateAttrs };\nexport default attributesModule;\n//# sourceMappingURL=attributes.js.map","function updateProps(oldVnode, vnode) {\n var key, cur, old, elm = vnode.elm, oldProps = oldVnode.data.props, props = vnode.data.props;\n if (!oldProps && !props)\n return;\n if (oldProps === props)\n return;\n oldProps = oldProps || {};\n props = props || {};\n for (key in oldProps) {\n if (!props[key]) {\n delete elm[key];\n }\n }\n for (key in props) {\n cur = props[key];\n old = oldProps[key];\n if (old !== cur && (key !== 'value' || elm[key] !== cur)) {\n elm[key] = cur;\n }\n }\n}\nexport var propsModule = { create: updateProps, update: updateProps };\nexport default propsModule;\n//# sourceMappingURL=props.js.map","var raf = (typeof window !== 'undefined' && window.requestAnimationFrame) || setTimeout;\nvar nextFrame = function (fn) { raf(function () { raf(fn); }); };\nfunction setNextFrame(obj, prop, val) {\n nextFrame(function () { obj[prop] = val; });\n}\nfunction updateStyle(oldVnode, vnode) {\n var cur, name, elm = vnode.elm, oldStyle = oldVnode.data.style, style = vnode.data.style;\n if (!oldStyle && !style)\n return;\n if (oldStyle === style)\n return;\n oldStyle = oldStyle || {};\n style = style || {};\n var oldHasDel = 'delayed' in oldStyle;\n for (name in oldStyle) {\n if (!style[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.removeProperty(name);\n }\n else {\n elm.style[name] = '';\n }\n }\n }\n for (name in style) {\n cur = style[name];\n if (name === 'delayed' && style.delayed) {\n for (var name2 in style.delayed) {\n cur = style.delayed[name2];\n if (!oldHasDel || cur !== oldStyle.delayed[name2]) {\n setNextFrame(elm.style, name2, cur);\n }\n }\n }\n else if (name !== 'remove' && cur !== oldStyle[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.setProperty(name, cur);\n }\n else {\n elm.style[name] = cur;\n }\n }\n }\n}\nfunction applyDestroyStyle(vnode) {\n var style, name, elm = vnode.elm, s = vnode.data.style;\n if (!s || !(style = s.destroy))\n return;\n for (name in style) {\n elm.style[name] = style[name];\n }\n}\nfunction applyRemoveStyle(vnode, rm) {\n var s = vnode.data.style;\n if (!s || !s.remove) {\n rm();\n return;\n }\n var name, elm = vnode.elm, i = 0, compStyle, style = s.remove, amount = 0, applied = [];\n for (name in style) {\n applied.push(name);\n elm.style[name] = style[name];\n }\n compStyle = getComputedStyle(elm);\n var props = compStyle['transition-property'].split(', ');\n for (; i < props.length; ++i) {\n if (applied.indexOf(props[i]) !== -1)\n amount++;\n }\n elm.addEventListener('transitionend', function (ev) {\n if (ev.target === elm)\n --amount;\n if (amount === 0)\n rm();\n });\n}\nexport var styleModule = {\n create: updateStyle,\n update: updateStyle,\n destroy: applyDestroyStyle,\n remove: applyRemoveStyle\n};\nexport default styleModule;\n//# sourceMappingURL=style.js.map","import $ from '../../shared/dom7.js';\n\nfunction invokeHandler(handler, event, args) {\n if (typeof handler === 'function') {\n // call function handler\n handler(event, ...args);\n }\n}\nfunction handleEvent(event, args, vnode) {\n const name = event.type;\n const on = vnode.data.on;\n // call event handler(s) if exists\n if (on && on[name]) {\n invokeHandler(on[name], event, args, vnode);\n }\n}\nfunction createListener() {\n return function handler(event, ...args) {\n handleEvent(event, args, handler.vnode);\n };\n}\nfunction updateEvents(oldVnode, vnode) {\n const oldOn = oldVnode.data.on;\n const oldListener = oldVnode.listener;\n const oldElm = oldVnode.elm;\n const on = vnode && vnode.data.on;\n const elm = vnode && vnode.elm;\n // optimization for reused immutable handlers\n if (oldOn === on) {\n return;\n }\n // remove existing listeners which no longer used\n if (oldOn && oldListener) {\n // if element changed or deleted we remove all existing listeners unconditionally\n if (!on) {\n Object.keys(oldOn).forEach((name) => {\n $(oldElm).off(name, oldListener);\n });\n } else {\n Object.keys(oldOn).forEach((name) => {\n if (!on[name]) {\n $(oldElm).off(name, oldListener);\n }\n });\n }\n }\n // add new listeners which has not already attached\n if (on) {\n // reuse existing listener or create new\n const listener = oldVnode.listener || createListener();\n vnode.listener = listener;\n // update vnode for listener\n listener.vnode = vnode;\n // if element changed or added we add all needed listeners unconditionally\n if (!oldOn) {\n Object.keys(on).forEach((name) => {\n $(elm).on(name, listener);\n });\n } else {\n Object.keys(on).forEach((name) => {\n if (!oldOn[name]) {\n $(elm).on(name, listener);\n }\n });\n }\n }\n}\n\nexport default {\n create: updateEvents,\n update: updateEvents,\n destroy: updateEvents,\n};\n","/* eslint import/no-named-as-default: off */\nimport { init } from './snabbdom/snabbdom.js';\nimport attributesModule from './snabbdom/modules/attributes.js';\nimport propsModule from './snabbdom/modules/props.js';\nimport styleModule from './snabbdom/modules/style.js';\nimport eventListenersModule from './eventslisteners.js';\n\nconst patch = init([attributesModule, propsModule, styleModule, eventListenersModule]);\n\nexport default patch;\n","/* eslint no-underscore-dangle: \"off\" */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport $h from './$h.js';\nimport { id as generateId, merge, eventNameToColonCase, deleteProps } from '../../shared/utils.js';\nimport vdom from './vdom.js';\nimport patch from './patch.js';\n\nclass Component {\n constructor(app, component, props = {}, { el, context, children } = {}) {\n const document = getDocument();\n merge(this, {\n f7: app,\n props: props || {},\n context: context || {},\n id: component.id || generateId(),\n children: children || [],\n theme: {\n ios: app.theme === 'ios',\n md: app.theme === 'md',\n aurora: app.theme === 'aurora',\n },\n style: component.style,\n __updateQueue: [],\n __eventHandlers: [],\n __onceEventHandlers: [],\n __onBeforeMount: [],\n __onMounted: [],\n __onBeforeUpdate: [],\n __onUpdated: [],\n __onBeforeUnmount: [],\n __onUnmounted: [],\n });\n\n const createComponent = () => {\n return component(this.props, this.getComponentContext(true));\n };\n\n const getRenderFuncion = (componentResult) =>\n new Promise((resolve, reject) => {\n if (typeof componentResult === 'function') {\n resolve(componentResult);\n } else if (componentResult instanceof Promise) {\n componentResult\n .then((render) => {\n resolve(render);\n })\n .catch((err) => {\n reject(err);\n });\n } else {\n reject(\n new Error(\n 'Framework7: Component render function is not a \"function\" type. Didn\\'t you forget to \"return $render\"?',\n ),\n );\n }\n });\n\n return new Promise((resolve, reject) => {\n const componentResult = createComponent();\n getRenderFuncion(componentResult)\n .then((render) => {\n this.renderFunction = render;\n\n const tree = this.render();\n\n if (el) {\n this.vnode = vdom(tree, this, true);\n if (this.style) {\n this.styleEl = document.createElement('style');\n this.styleEl.innerHTML = this.style;\n }\n this.el = el;\n patch(this.el, this.vnode);\n this.el = this.vnode.elm;\n this.$el = $(this.el);\n\n this.attachEvents();\n this.el.f7Component = this;\n this.mount();\n resolve(this);\n return;\n }\n // Make Dom\n if (tree) {\n this.vnode = vdom(tree, this, true);\n this.el = document.createElement(this.vnode.sel || 'div');\n patch(this.el, this.vnode);\n this.$el = $(this.el);\n }\n if (this.style) {\n this.styleEl = document.createElement('style');\n this.styleEl.innerHTML = this.style;\n }\n\n this.attachEvents();\n\n if (this.el) {\n this.el.f7Component = this;\n }\n\n resolve(this);\n })\n .catch((err) => {\n reject(err);\n });\n });\n }\n\n on(eventName, handler) {\n if (!this.__eventHandlers) return;\n this.__eventHandlers.push({ eventName, handler });\n }\n\n once(eventName, handler) {\n if (!this.__eventHandlers) return;\n this.__onceEventHandlers.push({ eventName, handler });\n }\n\n getComponentRef() {\n const self = this;\n return (initialValue) => {\n let value = initialValue;\n const obj = {};\n Object.defineProperty(obj, 'value', {\n get() {\n return value;\n },\n set(v) {\n value = v;\n self.update();\n },\n });\n return obj;\n };\n }\n\n getComponentStore() {\n const { state, _gettersPlain, dispatch } = this.f7.store;\n const $store = {\n state,\n dispatch,\n };\n $store.getters = new Proxy(_gettersPlain, {\n get: (target, prop) => {\n const obj = target[prop];\n const callback = (v) => {\n obj.value = v;\n this.update();\n };\n obj.onUpdated(callback);\n return obj;\n },\n });\n\n return $store;\n }\n\n getComponentContext(includeHooks) {\n const ctx = {\n $f7route: this.context.f7route,\n $f7router: this.context.f7router,\n $h,\n $,\n $id: this.id,\n $f7: this.f7,\n $f7ready: this.f7ready.bind(this),\n $theme: this.theme,\n $tick: this.tick.bind(this),\n $update: this.update.bind(this),\n $emit: this.emit.bind(this),\n $store: this.getComponentStore(),\n $ref: this.getComponentRef(),\n $el: {},\n };\n Object.defineProperty(ctx.$el, 'value', {\n get: () => {\n return this.$el;\n },\n });\n if (includeHooks)\n Object.assign(ctx, {\n $on: this.on.bind(this),\n $once: this.once.bind(this),\n $onBeforeMount: (handler) => this.__onBeforeMount.push(handler),\n $onMounted: (handler) => this.__onMounted.push(handler),\n $onBeforeUpdate: (handler) => this.__onBeforeUpdate.push(handler),\n $onUpdated: (handler) => this.__onUpdated.push(handler),\n $onBeforeUnmount: (handler) => this.__onBeforeUnmount.push(handler),\n $onUnmounted: (handler) => this.__onUnmounted.push(handler),\n });\n\n return ctx;\n }\n\n render() {\n return this.renderFunction(this.getComponentContext());\n }\n\n emit(name, data) {\n if (!this.el) return;\n this.$el.trigger(name, data);\n }\n\n attachEvents() {\n const { $el } = this;\n if (!this.__eventHandlers) return;\n this.__eventHandlers.forEach(({ eventName, handler }) => {\n $el.on(eventNameToColonCase(eventName), handler);\n });\n this.__onceEventHandlers.forEach(({ eventName, handler }) => {\n $el.once(eventNameToColonCase(eventName), handler);\n });\n }\n\n detachEvents() {\n const { $el } = this;\n if (!this.__eventHandlers) return;\n this.__eventHandlers.forEach(({ eventName, handler }) => {\n $el.on(eventNameToColonCase(eventName), handler);\n });\n this.__onceEventHandlers.forEach(({ eventName, handler }) => {\n $el.once(eventNameToColonCase(eventName), handler);\n });\n }\n\n startUpdateQueue() {\n const window = getWindow();\n if (this.__requestAnimationFrameId) return;\n const update = () => {\n this.hook('onBeforeUpdate');\n const tree = this.render();\n\n // Make Dom\n if (tree) {\n const newVNode = vdom(tree, this, false);\n this.vnode = patch(this.vnode, newVNode);\n }\n };\n this.__requestAnimationFrameId = window.requestAnimationFrame(() => {\n if (this.__updateIsPending) update();\n let resolvers = [...this.__updateQueue];\n this.__updateQueue = [];\n this.__updateIsPending = false;\n window.cancelAnimationFrame(this.__requestAnimationFrameId);\n delete this.__requestAnimationFrameId;\n delete this.__updateIsPending;\n resolvers.forEach((resolver) => resolver());\n resolvers = [];\n });\n }\n\n tick(callback) {\n return new Promise((resolve) => {\n function resolver() {\n resolve();\n if (callback) callback();\n }\n this.__updateQueue.push(resolver);\n this.startUpdateQueue();\n });\n }\n\n update(callback) {\n if (this.__destroyed) return new Promise(() => {});\n return new Promise((resolve) => {\n const resolver = () => {\n resolve();\n if (callback) callback();\n };\n this.__updateIsPending = true;\n this.__updateQueue.push(resolver);\n this.startUpdateQueue();\n });\n }\n\n setState(callback) {\n return this.update(callback);\n }\n\n f7ready(callback) {\n if (this.f7.initialized) {\n callback(this.f7);\n return;\n }\n this.f7.once('init', () => {\n callback(this.f7);\n });\n }\n\n mount(mountMethod) {\n this.hook('onBeforeMount', this.$el);\n if (this.styleEl) $('head').append(this.styleEl);\n if (mountMethod) mountMethod(this.el);\n this.hook('onMounted', this.$el);\n }\n\n destroy() {\n if (this.__destroyed) return;\n const window = getWindow();\n this.hook('onBeforeUnmount');\n\n if (this.styleEl) $(this.styleEl).remove();\n\n this.detachEvents();\n this.hook('onUnmounted');\n // Delete component instance\n if (this.el && this.el.f7Component) {\n this.el.f7Component = null;\n delete this.el.f7Component;\n }\n // Patch with empty node\n if (this.vnode) {\n this.vnode = patch(this.vnode, { sel: this.vnode.sel, data: {} });\n }\n // Clear update queue\n window.cancelAnimationFrame(this.__requestAnimationFrameId);\n this.__updateQueue = [];\n this.__eventHandlers = [];\n this.__onceEventHandlers = [];\n this.__onBeforeMount = [];\n this.__onMounted = [];\n this.__onBeforeUpdate = [];\n this.__onUpdated = [];\n this.__onBeforeUnmount = [];\n this.__onUnmounted = [];\n // Delete all props\n deleteProps(this);\n this.__destroyed = true;\n }\n\n hook(name, ...args) {\n if (this.__destroyed) return;\n this[`__${name}`].forEach((handler) => {\n handler(...args);\n });\n }\n}\n\nexport default Component;\n","import Component from './component-class.js';\nimport parseComponent from './parse-component.js';\nimport customComponents from './custom-components.js';\nimport $jsx from './$jsx.js';\n\nfunction registerComponent(tagName, component) {\n customComponents[tagName] = component;\n}\n\nfunction unregisterComponent(tagName) {\n delete customComponents[tagName];\n}\n\nexport { Component, $jsx };\nexport default {\n name: 'component',\n static: {\n Component,\n registerComponent,\n unregisterComponent,\n },\n create() {\n const app = this;\n app.component = {\n registerComponent,\n unregisterComponent,\n parse(componentString) {\n return parseComponent(componentString);\n },\n create(component, props, { root, el, context, children }) {\n return new Component(app, component, props, { root, el, context, children });\n },\n };\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { id } from '../../shared/utils.js';\n\nfunction parseComponent(componentString) {\n const window = getWindow();\n const document = getDocument();\n const componentId = id();\n const callbackCreateName = `f7_component_create_callback_${componentId}`;\n\n // Template\n let template;\n const hasTemplate = componentString.match(/<template([ ]?)([a-z0-9-]*)>/);\n if (hasTemplate) {\n template = componentString\n .split(/<template[ ]?[a-z0-9-]*>/)\n .filter((item, index) => index > 0)\n .join('<template>')\n .split('</template>')\n .filter((item, index, arr) => index < arr.length - 1)\n .join('</template>')\n .replace(/{{#raw}}([ \\n]*)<template/g, '{{#raw}}<template')\n .replace(/\\/template>([ \\n]*){{\\/raw}}/g, '/template>{{/raw}}')\n .replace(/([ \\n])<template/g, '$1{{#raw}}<template')\n .replace(/\\/template>([ \\n])/g, '/template>{{/raw}}$1');\n }\n\n // Parse Styles\n let style = null;\n\n if (componentString.indexOf('<style>') >= 0) {\n style = componentString.split('<style>')[1].split('</style>')[0];\n }\n if (componentString.indexOf('<style scoped>') >= 0) {\n style = componentString.split('<style scoped>')[1].split('</style>')[0];\n }\n\n // Parse Script\n let scriptContent;\n if (componentString.indexOf('<script>') >= 0) {\n const scripts = componentString.split('<script>');\n scriptContent = scripts[scripts.length - 1].split('</script>')[0].trim();\n } else {\n scriptContent = 'return () => {return $render}';\n }\n if (!scriptContent || !scriptContent.trim()) scriptContent = 'return () => {return $render}';\n\n // Parse Template\n if (template) {\n scriptContent = scriptContent\n .replace(\n '$render',\n `function ($$ctx) {\n var $ = $$ctx.$$;\n var $h = $$ctx.$h;\n var $root = $$ctx.$root;\n var $f7 = $$ctx.$f7;\n var $f7route = $$ctx.$f7route;\n var $f7router = $$ctx.$f7router;\n var $theme = $$ctx.$theme;\n var $update = $$ctx.$update;\n var $store = $$ctx.$store;\n var $ref = $$ctx.$ref;\n\n return $h\\`${template}\\`\n }\n `,\n )\n .replace(/export default/g, 'return');\n }\n\n // Execute Script\n scriptContent = `window.${callbackCreateName} = function () {${scriptContent}}`;\n\n // Insert Script El\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = scriptContent;\n $('head').append(scriptEl);\n\n const component = window[callbackCreateName]();\n\n // Remove Script El\n $(scriptEl).remove();\n window[callbackCreateName] = null;\n delete window[callbackCreateName];\n\n // Assign Style\n if (style) {\n component.style = style;\n }\n\n // Component ID\n component.id = componentId;\n return component;\n}\n\nexport default parseComponent;\n","import History from '../../shared/history.js';\n\nexport default {\n name: 'history',\n static: {\n history: History,\n },\n on: {\n init() {\n History.init(this);\n },\n },\n};\n","import { getWindow } from 'ssr-window';\nimport { extend } from '../../shared/utils.js';\n\nconst SW = {\n registrations: [],\n register(path, scope) {\n const app = this;\n const window = getWindow();\n\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n return new Promise((resolve, reject) => {\n app.serviceWorker.container\n .register(path, scope ? { scope } : {})\n .then((reg) => {\n SW.registrations.push(reg);\n app.emit('serviceWorkerRegisterSuccess', reg);\n resolve(reg);\n })\n .catch((error) => {\n app.emit('serviceWorkerRegisterError', error);\n reject(error);\n });\n });\n },\n unregister(registration) {\n const app = this;\n const window = getWindow();\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n let registrations;\n if (!registration) registrations = SW.registrations;\n else if (Array.isArray(registration)) registrations = registration;\n else registrations = [registration];\n return Promise.all(\n registrations.map(\n (reg) =>\n new Promise((resolve, reject) => {\n reg\n .unregister()\n .then(() => {\n if (SW.registrations.indexOf(reg) >= 0) {\n SW.registrations.splice(SW.registrations.indexOf(reg), 1);\n }\n app.emit('serviceWorkerUnregisterSuccess', reg);\n resolve();\n })\n .catch((error) => {\n app.emit('serviceWorkerUnregisterError', reg, error);\n reject(error);\n });\n }),\n ),\n );\n },\n};\n\nexport default {\n name: 'sw',\n params: {\n serviceWorker: {\n path: undefined,\n scope: undefined,\n },\n },\n create() {\n const app = this;\n const window = getWindow();\n extend(app, {\n serviceWorker: {\n container: 'serviceWorker' in window.navigator ? window.navigator.serviceWorker : undefined,\n registrations: SW.registrations,\n register: SW.register.bind(app),\n unregister: SW.unregister.bind(app),\n },\n });\n },\n on: {\n init() {\n const window = getWindow();\n if (!('serviceWorker' in window.navigator)) return;\n const app = this;\n if (app.device.cordova || (window.Capacitor && window.Capacitor.isNative)) return;\n if (!app.serviceWorker.container) return;\n const paths = app.params.serviceWorker.path;\n const scope = app.params.serviceWorker.scope;\n if (!paths || (Array.isArray(paths) && !paths.length)) return;\n const toRegister = Array.isArray(paths) ? paths : [paths];\n toRegister.forEach((path) => {\n app.serviceWorker.register(path, scope);\n });\n },\n },\n};\n","/* eslint-disable no-underscore-dangle */\nimport { extend } from '../../shared/utils.js';\n\nfunction createStore(storeParams = {}) {\n const store = {\n __store: true,\n };\n const originalState = { ...(storeParams.state || {}) };\n const actions = { ...(storeParams.actions || {}) };\n const getters = { ...(storeParams.getters || {}) };\n const state = extend({}, originalState);\n\n let propsQueue = [];\n const gettersDependencies = {};\n const gettersCallbacks = {};\n\n Object.keys(getters).forEach((getterKey) => {\n gettersDependencies[getterKey] = [];\n gettersCallbacks[getterKey] = [];\n });\n\n const getGetterValue = (getterKey) => {\n return getters[getterKey]({ state: store.state });\n };\n\n const addGetterDependencies = (getterKey, deps) => {\n if (!gettersDependencies[getterKey]) gettersDependencies[getterKey] = [];\n deps.forEach((dep) => {\n if (gettersDependencies[getterKey].indexOf(dep) < 0) {\n gettersDependencies[getterKey].push(dep);\n }\n });\n };\n\n const addGetterCallback = (getterKey, callback) => {\n if (!gettersCallbacks[getterKey]) gettersCallbacks[getterKey] = [];\n gettersCallbacks[getterKey].push(callback);\n };\n\n const runGetterCallbacks = (stateKey) => {\n const keys = Object.keys(gettersDependencies).filter((getterKey) => {\n return gettersDependencies[getterKey].indexOf(stateKey) >= 0;\n });\n keys.forEach((getterKey) => {\n if (!gettersCallbacks[getterKey] || !gettersCallbacks[getterKey].length) return;\n gettersCallbacks[getterKey].forEach((callback) => {\n callback(getGetterValue(getterKey));\n });\n });\n };\n\n const removeGetterCallback = (callback) => {\n Object.keys(gettersCallbacks).forEach((stateKey) => {\n const callbacks = gettersCallbacks[stateKey];\n\n if (callbacks.indexOf(callback) >= 0) {\n callbacks.splice(callbacks.indexOf(callback), 1);\n }\n });\n };\n\n // eslint-disable-next-line\n store.__removeCallback = (callback) => {\n removeGetterCallback(callback);\n };\n\n const getterValue = (getterKey, addCallback = true) => {\n if (getterKey === 'constructor') return undefined;\n propsQueue = [];\n const value = getGetterValue(getterKey);\n addGetterDependencies(getterKey, propsQueue);\n const onUpdated = (callback) => {\n addGetterCallback(getterKey, callback);\n };\n\n const obj = {\n value,\n onUpdated,\n };\n\n if (!addCallback) {\n return obj;\n }\n\n const callback = (v) => {\n obj.value = v;\n };\n\n obj.__callback = callback;\n addGetterCallback(getterKey, callback);\n // eslint-disable-next-line\n return obj;\n };\n\n store.state = new Proxy(state, {\n set: (target, prop, value) => {\n target[prop] = value;\n runGetterCallbacks(prop);\n return true;\n },\n get: (target, prop) => {\n propsQueue.push(prop);\n return target[prop];\n },\n });\n\n store.getters = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, true);\n },\n });\n\n store._gettersPlain = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, false);\n },\n });\n\n store.dispatch = (actionName, data) => {\n return new Promise((resolve, reject) => {\n if (!actions[actionName]) {\n reject();\n throw new Error(`Framework7: Store action \"${actionName}\" is not found`);\n }\n const result = actions[actionName]({ state: store.state, dispatch: store.dispatch }, data);\n resolve(result);\n });\n };\n\n return store;\n}\n\nexport default createStore;\n","import createStore from './create-store.js';\n\nexport { createStore };\nexport default {\n name: 'store',\n static: { createStore },\n proto: { createStore },\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\n\nconst isCapacitor = () => {\n const window = getWindow();\n return (\n window.Capacitor &&\n window.Capacitor.isNative &&\n window.Capacitor.Plugins &&\n window.Capacitor.Plugins.StatusBar\n );\n};\n\nconst Statusbar = {\n hide() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.hide();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.hide();\n }\n },\n show() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.show();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.show();\n }\n },\n onClick() {\n const app = this;\n let pageContent;\n if ($('.popup.modal-in').length > 0) {\n // Check for opened popup\n pageContent = $('.popup.modal-in')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else if ($('.panel.panel-in').length > 0) {\n // Check for opened panel\n pageContent = $('.panel.panel-in')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else if ($('.views > .view.tab-active').length > 0) {\n // View in tab bar app layout\n pageContent = $('.views > .view.tab-active')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else if ($('.views').length > 0) {\n pageContent = $('.views')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n } else {\n pageContent = app.$el\n .children('.view')\n .find('.page:not(.page-previous):not(.page-next):not(.cached)')\n .find('.page-content');\n }\n\n if (pageContent && pageContent.length > 0) {\n // Check for tab\n if (pageContent.hasClass('tab')) {\n pageContent = pageContent.parent('.tabs').children('.page-content.tab-active');\n }\n if (pageContent.length > 0) pageContent.scrollTop(0, 300);\n }\n },\n setTextColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n if (color === 'white') {\n window.StatusBar.styleLightContent();\n } else {\n window.StatusBar.styleDefault();\n }\n }\n if (isCapacitor()) {\n if (color === 'white') {\n window.Capacitor.Plugins.StatusBar.setStyle({ style: 'DARK' });\n } else {\n window.Capacitor.Plugins.StatusBar.setStyle({ style: 'LIGHT' });\n }\n }\n },\n setBackgroundColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.backgroundColorByHexString(color);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setBackgroundColor({ color });\n }\n },\n isVisible() {\n const window = getWindow();\n const device = getDevice();\n return new Promise((resolve) => {\n if (device.cordova && window.StatusBar) {\n resolve(window.StatusBar.isVisible);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.getInfo().then((info) => {\n resolve(info.visible);\n });\n }\n resolve(false);\n });\n },\n overlaysWebView(overlays = true) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.overlaysWebView(overlays);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setOverlaysWebView({ overlay: overlays });\n }\n },\n init() {\n const app = this;\n const window = getWindow();\n const device = getDevice();\n const params = app.params.statusbar;\n if (!params.enabled) return;\n const isCordova = device.cordova && window.StatusBar;\n const isCap = isCapacitor();\n\n if (isCordova || isCap) {\n if (params.scrollTopOnClick) {\n $(window).on('statusTap', Statusbar.onClick.bind(app));\n }\n if (device.ios) {\n if (params.iosOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.iosTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n if (device.android) {\n if (params.androidOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.androidTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n }\n if (params.iosBackgroundColor && device.ios) {\n Statusbar.setBackgroundColor(params.iosBackgroundColor);\n }\n if (params.androidBackgroundColor && device.android) {\n Statusbar.setBackgroundColor(params.androidBackgroundColor);\n }\n },\n};\n\nexport default {\n name: 'statusbar',\n params: {\n statusbar: {\n enabled: true,\n\n scrollTopOnClick: true,\n\n iosOverlaysWebView: true,\n iosTextColor: 'black',\n iosBackgroundColor: null,\n\n androidOverlaysWebView: false,\n androidTextColor: 'black',\n androidBackgroundColor: null,\n },\n },\n create() {\n const app = this;\n bindMethods(app, {\n statusbar: Statusbar,\n });\n },\n on: {\n init() {\n const app = this;\n Statusbar.init.call(app);\n },\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport View from './view-class.js';\n\nfunction getCurrentView(app) {\n const $popoverView = $('.popover.modal-in .view');\n const $popupView = $('.popup.modal-in .view');\n const $panelView = $('.panel.panel-in .view');\n let $viewsEl = $('.views');\n if ($viewsEl.length === 0) $viewsEl = app.$el;\n // Find active view as tab\n let $viewEl = $viewsEl.children('.view');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view');\n }\n // Propably in tabs or split view\n if ($viewEl.length > 1) {\n if ($viewEl.hasClass('tab')) {\n // Tabs\n $viewEl = $viewsEl.children('.view.tab-active');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view.tab-active');\n }\n } else {\n // Split View, leave appView intact\n }\n }\n if ($popoverView.length > 0 && $popoverView[0].f7View) return $popoverView[0].f7View;\n if ($popupView.length > 0 && $popupView[0].f7View) return $popupView[0].f7View;\n if ($panelView.length > 0 && $panelView[0].f7View) return $panelView[0].f7View;\n if ($viewEl.length > 0) {\n if ($viewEl.length === 1 && $viewEl[0].f7View) return $viewEl[0].f7View;\n if ($viewEl.length > 1) {\n return app.views.main;\n }\n }\n return undefined;\n}\n\nexport default {\n name: 'view',\n params: {\n view: {\n init: true,\n name: undefined,\n main: false,\n router: true,\n linksView: null,\n stackPages: false,\n xhrCache: true,\n xhrCacheIgnore: [],\n xhrCacheIgnoreGetParameters: false,\n xhrCacheDuration: 1000 * 60 * 10, // Ten minutes\n componentCache: true,\n preloadPreviousPage: true,\n allowDuplicateUrls: false,\n reloadPages: false,\n reloadDetail: false,\n masterDetailBreakpoint: 0,\n masterDetailResizable: false,\n removeElements: true,\n removeElementsWithTimeout: false,\n removeElementsTimeout: 0,\n restoreScrollTopOnBack: true,\n unloadTabContent: true,\n passRouteQueryToRequest: true,\n passRouteParamsToRequest: false,\n loadInitialPage: true,\n // Swipe Back\n iosSwipeBack: true,\n iosSwipeBackAnimateShadow: true,\n iosSwipeBackAnimateOpacity: true,\n iosSwipeBackActiveArea: 30,\n iosSwipeBackThreshold: 0,\n mdSwipeBack: false,\n mdSwipeBackAnimateShadow: true,\n mdSwipeBackAnimateOpacity: false,\n mdSwipeBackActiveArea: 30,\n mdSwipeBackThreshold: 0,\n auroraSwipeBack: false,\n auroraSwipeBackAnimateShadow: false,\n auroraSwipeBackAnimateOpacity: true,\n auroraSwipeBackActiveArea: 30,\n auroraSwipeBackThreshold: 0,\n // Push State\n browserHistory: false,\n browserHistoryRoot: undefined,\n browserHistoryAnimate: true,\n browserHistoryAnimateOnLoad: false,\n browserHistorySeparator: '#!',\n browserHistoryOnLoad: true,\n browserHistoryInitialMatch: false,\n browserHistoryStoreHistory: true,\n browserHistoryTabs: 'replace',\n // Animate Pages\n animate: true,\n // iOS Dynamic Navbar\n iosDynamicNavbar: true,\n // Animate iOS Navbar Back Icon\n iosAnimateNavbarBackIcon: true,\n // Delays\n iosPageLoadDelay: 0,\n mdPageLoadDelay: 0,\n auroraPageLoadDelay: 0,\n // Routes hooks\n routesBeforeEnter: null,\n routesBeforeLeave: null,\n },\n },\n static: {\n View,\n },\n create() {\n const app = this;\n extend(app, {\n views: extend([], {\n create(el, params) {\n return new View(app, el, params);\n },\n get(viewEl) {\n const $viewEl = $(viewEl);\n if ($viewEl.length && $viewEl[0].f7View) return $viewEl[0].f7View;\n return undefined;\n },\n }),\n });\n Object.defineProperty(app.views, 'current', {\n enumerable: true,\n configurable: true,\n get() {\n return getCurrentView(app);\n },\n });\n // Alias\n app.view = app.views;\n },\n on: {\n init() {\n const app = this;\n $('.view-init').each((viewEl) => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalOpen panelOpen': function onOpen(instance) {\n const app = this;\n instance.$el.find('.view-init').each((viewEl) => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalBeforeDestroy panelBeforeDestroy': function onClose(instance) {\n if (!instance || !instance.$el) return;\n instance.$el.find('.view-init').each((viewEl) => {\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n });\n },\n },\n vnode: {\n 'view-init': {\n insert(vnode) {\n const app = this;\n const viewEl = vnode.elm;\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n },\n destroy(vnode) {\n const viewEl = vnode.elm;\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n },\n },\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\n\nconst Navbar = {\n size(el) {\n const app = this;\n\n let $el = $(el);\n\n if ($el.hasClass('navbars')) {\n $el = $el.children('.navbar').each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n return;\n }\n\n const $innerEl = $el.children('.navbar-inner');\n if (!$innerEl.length) return;\n\n const needCenterTitle =\n $innerEl.hasClass('navbar-inner-centered-title') ||\n app.params.navbar[`${app.theme}CenterTitle`];\n const needLeftTitle = app.theme === 'ios' && !app.params.navbar[`${app.theme}CenterTitle`];\n\n if (!needCenterTitle && !needLeftTitle) return;\n\n if (\n $el.hasClass('stacked') ||\n $el.parents('.stacked').length > 0 ||\n $el.parents('.tab:not(.tab-active)').length > 0 ||\n $el.parents('.popup:not(.modal-in)').length > 0\n ) {\n return;\n }\n\n if (app.theme !== 'ios' && app.params.navbar[`${app.theme}CenterTitle`]) {\n $innerEl.addClass('navbar-inner-centered-title');\n }\n if (app.theme === 'ios' && !app.params.navbar.iosCenterTitle) {\n $innerEl.addClass('navbar-inner-left-title');\n }\n\n const $viewEl = $el.parents('.view').eq(0);\n const left = app.rtl ? $innerEl.children('.right') : $innerEl.children('.left');\n const right = app.rtl ? $innerEl.children('.left') : $innerEl.children('.right');\n const title = $innerEl.children('.title');\n const subnavbar = $innerEl.children('.subnavbar');\n const noLeft = left.length === 0;\n const noRight = right.length === 0;\n const leftWidth = noLeft ? 0 : left.outerWidth(true);\n const rightWidth = noRight ? 0 : right.outerWidth(true);\n const titleWidth = title.outerWidth(true);\n const navbarStyles = $innerEl.styles();\n const navbarWidth = $innerEl[0].offsetWidth;\n const navbarInnerWidth =\n navbarWidth -\n parseInt(navbarStyles.paddingLeft, 10) -\n parseInt(navbarStyles.paddingRight, 10);\n const isPrevious = $el.hasClass('navbar-previous');\n const sliding = $innerEl.hasClass('sliding');\n\n let router;\n let dynamicNavbar;\n\n if ($viewEl.length > 0 && $viewEl[0].f7View) {\n router = $viewEl[0].f7View.router;\n dynamicNavbar = router && router.dynamicNavbar;\n }\n\n let currLeft;\n let diff;\n if (noRight) {\n currLeft = navbarInnerWidth - titleWidth;\n }\n if (noLeft) {\n currLeft = 0;\n }\n if (!noLeft && !noRight) {\n currLeft = (navbarInnerWidth - rightWidth - titleWidth + leftWidth) / 2;\n }\n let requiredLeft = (navbarInnerWidth - titleWidth) / 2;\n if (navbarInnerWidth - leftWidth - rightWidth > titleWidth) {\n if (requiredLeft < leftWidth) {\n requiredLeft = leftWidth;\n }\n if (requiredLeft + titleWidth > navbarInnerWidth - rightWidth) {\n requiredLeft = navbarInnerWidth - rightWidth - titleWidth;\n }\n diff = requiredLeft - currLeft;\n } else {\n diff = 0;\n }\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n\n if (dynamicNavbar && app.theme === 'ios') {\n if (title.hasClass('sliding') || (title.length > 0 && sliding)) {\n let titleLeftOffset = -(currLeft + diff) * inverter;\n const titleRightOffset = (navbarInnerWidth - currLeft - diff - titleWidth) * inverter;\n\n if (isPrevious) {\n if (router && router.params.iosAnimateNavbarBackIcon) {\n const activeNavbarBackLink = $el\n .parent()\n .find('.navbar-current')\n .children('.left.sliding')\n .find('.back .icon ~ span');\n if (activeNavbarBackLink.length > 0) {\n titleLeftOffset += activeNavbarBackLink[0].offsetLeft;\n }\n }\n }\n title[0].f7NavbarLeftOffset = titleLeftOffset;\n title[0].f7NavbarRightOffset = titleRightOffset;\n }\n if (!noLeft && (left.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n left[0].f7NavbarLeftOffset = (-(navbarInnerWidth - left[0].offsetWidth) / 2) * inverter;\n left[0].f7NavbarRightOffset = leftWidth * inverter;\n } else {\n left[0].f7NavbarLeftOffset = -leftWidth;\n left[0].f7NavbarRightOffset = (navbarInnerWidth - left[0].offsetWidth) / 2;\n if (\n router &&\n router.params.iosAnimateNavbarBackIcon &&\n left.find('.back .icon').length > 0\n ) {\n if (left.find('.back .icon ~ span').length) {\n const leftOffset = left[0].f7NavbarLeftOffset;\n const rightOffset = left[0].f7NavbarRightOffset;\n left[0].f7NavbarLeftOffset = 0;\n left[0].f7NavbarRightOffset = 0;\n left.find('.back .icon ~ span')[0].f7NavbarLeftOffset = leftOffset;\n left.find('.back .icon ~ span')[0].f7NavbarRightOffset =\n rightOffset - left.find('.back .icon')[0].offsetWidth;\n }\n }\n }\n }\n if (!noRight && (right.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n right[0].f7NavbarLeftOffset = -rightWidth * inverter;\n right[0].f7NavbarRightOffset = ((navbarInnerWidth - right[0].offsetWidth) / 2) * inverter;\n } else {\n right[0].f7NavbarLeftOffset = -(navbarInnerWidth - right[0].offsetWidth) / 2;\n right[0].f7NavbarRightOffset = rightWidth;\n }\n }\n if (subnavbar.length && (subnavbar.hasClass('sliding') || sliding)) {\n subnavbar[0].f7NavbarLeftOffset = app.rtl\n ? subnavbar[0].offsetWidth\n : -subnavbar[0].offsetWidth;\n subnavbar[0].f7NavbarRightOffset = -subnavbar[0].f7NavbarLeftOffset;\n }\n }\n\n // Center title\n if (needCenterTitle) {\n let titleLeft = diff;\n if (app.rtl && noLeft && noRight && title.length > 0) titleLeft = -titleLeft;\n title.css({ left: `${titleLeft}px` });\n }\n },\n hide(el, animate = true, hideStatusbar = false, hideOnlyCurrent = false) {\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if ($el.hasClass('navbar-hidden')) return;\n let className = `navbar-hidden${animate ? ' navbar-transitioning' : ''}`;\n const currentIsLarge = isDynamic\n ? $el.find('.navbar-current .title-large').length\n : $el.find('.title-large').length;\n if (currentIsLarge) {\n className += ' navbar-large-hidden';\n }\n if (hideStatusbar) {\n className += ' navbar-hidden-statusbar';\n }\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n $el.addClass(className);\n if (isDynamic) {\n $el.children('.navbar').each((subEl) => {\n $(subEl).trigger('navbar:hide');\n app.emit('navbarHide', subEl);\n });\n } else {\n $el.trigger('navbar:hide');\n app.emit('navbarHide', $el[0]);\n }\n },\n show(el = '.navbar-hidden', animate = true, hideOnlyCurrent = false) {\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if (!$el.hasClass('navbar-hidden')) return;\n if (animate) {\n $el.addClass('navbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n }\n $el.removeClass('navbar-hidden navbar-large-hidden navbar-hidden-statusbar');\n if (isDynamic) {\n $el.children('.navbar').each((subEl) => {\n $(subEl).trigger('navbar:show');\n app.emit('navbarShow', subEl);\n });\n } else {\n $el.trigger('navbar:show');\n app.emit('navbarShow', $el[0]);\n }\n },\n getElByPage(page) {\n let $pageEl;\n let $navbarEl;\n let pageData;\n if (page.$navbarEl || page.$el) {\n pageData = page;\n $pageEl = page.$el;\n } else {\n $pageEl = $(page);\n if ($pageEl.length > 0) pageData = $pageEl[0].f7Page;\n }\n if (pageData && pageData.$navbarEl && pageData.$navbarEl.length > 0) {\n $navbarEl = pageData.$navbarEl;\n } else if ($pageEl) {\n $navbarEl = $pageEl.children('.navbar');\n }\n if (!$navbarEl || ($navbarEl && $navbarEl.length === 0)) return undefined;\n return $navbarEl[0];\n },\n getPageByEl(navbarEl) {\n const $navbarEl = $(navbarEl);\n if ($navbarEl.parents('.page').length) {\n return $navbarEl.parents('.page')[0];\n }\n let pageEl;\n $navbarEl\n .parents('.view')\n .find('.page')\n .each((el) => {\n if (el && el.f7Page && el.f7Page.navbarEl && $navbarEl[0] === el.f7Page.navbarEl) {\n pageEl = el;\n }\n });\n return pageEl;\n },\n\n collapseLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.addClass('navbar-large-collapsed');\n $pageEl.eq(0).addClass('page-with-navbar-large-collapsed').trigger('page:navbarlargecollapsed');\n app.emit('pageNavbarLargeCollapsed', $pageEl[0]);\n $navbarEl.trigger('navbar:collapse');\n app.emit('navbarCollapse', $navbarEl[0]);\n },\n expandLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.removeClass('navbar-large-collapsed');\n $pageEl\n .eq(0)\n .removeClass('page-with-navbar-large-collapsed')\n .trigger('page:navbarlargeexpanded');\n app.emit('pageNavbarLargeExpanded', $pageEl[0]);\n $navbarEl.trigger('navbar:expand');\n app.emit('navbarExpand', $navbarEl[0]);\n },\n toggleLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n if ($navbarEl.hasClass('navbar-large-collapsed')) {\n app.navbar.expandLargeTitle($navbarEl);\n } else {\n app.navbar.collapseLargeTitle($navbarEl);\n }\n },\n initNavbarOnScroll(pageEl, navbarEl, needHide, needCollapse, needTransparent) {\n const app = this;\n const support = getSupport();\n const $pageEl = $(pageEl);\n const $navbarEl = $(navbarEl);\n const $titleLargeEl = $navbarEl.find('.title-large');\n const isLarge = $titleLargeEl.length || $navbarEl.hasClass('.navbar-large');\n let navbarHideHeight = 44;\n const snapPageScrollToLargeTitle = app.params.navbar.snapPageScrollToLargeTitle;\n const snapPageScrollToTransparentNavbar = app.params.navbar.snapPageScrollToTransparentNavbar;\n\n let previousScrollTop;\n let currentScrollTop;\n\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let navbarHidden;\n\n let navbarCollapsed;\n let navbarTitleLargeHeight;\n\n let navbarOffsetHeight;\n\n if (needCollapse || (needHide && isLarge)) {\n navbarTitleLargeHeight = $navbarEl.css('--f7-navbar-large-title-height');\n\n if (navbarTitleLargeHeight && navbarTitleLargeHeight.indexOf('px') >= 0) {\n navbarTitleLargeHeight = parseInt(navbarTitleLargeHeight, 10);\n if (Number.isNaN(navbarTitleLargeHeight) && $titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else if (Number.isNaN(navbarTitleLargeHeight)) {\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;\n else if (app.theme === 'md') navbarTitleLargeHeight = 48;\n else if (app.theme === 'aurora') navbarTitleLargeHeight = 38;\n }\n } else if ($titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else {\n // eslint-disable-next-line\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;\n else if (app.theme === 'md') navbarTitleLargeHeight = 48;\n else if (app.theme === 'aurora') navbarTitleLargeHeight = 38;\n }\n }\n\n if (needHide && isLarge) {\n navbarHideHeight += navbarTitleLargeHeight;\n }\n\n let scrollChanged;\n let scrollContent;\n let scrollTimeoutId;\n let touchEndTimeoutId;\n const touchSnapTimeout = 70;\n const desktopSnapTimeout = 300;\n\n function calcScrollableDistance() {\n $pageEl.find('.page-content').each((pageContentEl) => {\n pageContentEl.f7ScrollableDistance =\n pageContentEl.scrollHeight - pageContentEl.offsetHeight;\n });\n }\n\n function snapLargeNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (\n currentScrollTop >= navbarTitleLargeHeight / 2 &&\n currentScrollTop < navbarTitleLargeHeight\n ) {\n $(scrollContent).scrollTop(navbarTitleLargeHeight, 100);\n } else if (currentScrollTop < navbarTitleLargeHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n\n function snapTransparentNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (currentScrollTop >= navbarOffsetHeight / 2 && currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(navbarOffsetHeight, 100);\n } else if (currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n\n function handleNavbarTransparent() {\n const isHidden =\n $navbarEl.hasClass('navbar-hidden') ||\n $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded || isHidden) return;\n if (!navbarOffsetHeight) {\n navbarOffsetHeight = navbarEl.offsetHeight;\n }\n let opacity = currentScrollTop / navbarOffsetHeight;\n const notTransparent = $navbarEl.hasClass('navbar-transparent-visible');\n opacity = Math.max(Math.min(opacity, 1), 0);\n\n if ((notTransparent && opacity === 1) || (!notTransparent && opacity === 0)) {\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (notTransparent && opacity === 0) {\n $navbarEl.trigger('navbar:transparenthide');\n app.emit('navbarTransparentHide', $navbarEl[0]);\n $navbarEl.removeClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (!notTransparent && opacity === 1) {\n $navbarEl.trigger('navbar:transparentshow');\n app.emit('navbarTransparentShow', $navbarEl[0]);\n $navbarEl.addClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n\n $navbarEl.find('.navbar-bg, .title').css('opacity', opacity);\n\n if (snapPageScrollToTransparentNavbar) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n\n let previousCollapseProgress = null;\n let collapseProgress = null;\n function handleLargeNavbarCollapse(pageContentEl) {\n const isHidden =\n $navbarEl.hasClass('navbar-hidden') ||\n $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (isHidden) return;\n const isLargeTransparent =\n $navbarEl.hasClass('navbar-large-transparent') ||\n ($navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-transparent'));\n previousCollapseProgress = collapseProgress;\n const scrollableDistance = Math.min(\n navbarTitleLargeHeight,\n pageContentEl.f7ScrollableDistance || navbarTitleLargeHeight,\n );\n collapseProgress = Math.min(Math.max(currentScrollTop / scrollableDistance, 0), 1);\n const previousCollapseWasInMiddle =\n previousCollapseProgress > 0 && previousCollapseProgress < 1;\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n navbarCollapsed = $navbarEl.hasClass('navbar-large-collapsed');\n if (collapseProgress === 0 && navbarCollapsed) {\n app.navbar.expandLargeTitle($navbarEl[0]);\n } else if (collapseProgress === 1 && !navbarCollapsed) {\n app.navbar.collapseLargeTitle($navbarEl[0]);\n }\n if (\n (collapseProgress === 0 && navbarCollapsed) ||\n (collapseProgress === 0 && previousCollapseWasInMiddle) ||\n (collapseProgress === 1 && !navbarCollapsed) ||\n (collapseProgress === 1 && previousCollapseWasInMiddle)\n ) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', '');\n }\n $navbarEl.find('.title').css('opacity', '');\n $navbarEl.find('.title-large-text, .subnavbar').css('transform', '');\n if (isLargeTransparent) {\n $navbarEl.find('.navbar-bg').css('opacity', '');\n } else {\n $navbarEl.find('.navbar-bg').css('transform', '');\n }\n } else if (collapseProgress > 0 && collapseProgress < 1) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', 'visible');\n }\n $navbarEl.find('.title').css('opacity', collapseProgress);\n $navbarEl\n .find('.title-large-text, .subnavbar')\n .css(\n 'transform',\n `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`,\n );\n if (isLargeTransparent) {\n $navbarEl.find('.navbar-bg').css('opacity', collapseProgress);\n } else {\n $navbarEl\n .find('.navbar-bg')\n .css(\n 'transform',\n `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`,\n );\n }\n }\n\n if (snapPageScrollToLargeTitle) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n\n function handleTitleHideShow() {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n navbarHidden =\n $navbarEl.hasClass('navbar-hidden') ||\n $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (reachEnd) {\n if (app.params.navbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.navbar.showOnPageScrollTop || currentScrollTop <= navbarHideHeight) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > navbarHideHeight) {\n action = 'hide';\n } else {\n action = 'show';\n }\n\n if (action === 'show' && navbarHidden) {\n app.navbar.show($navbarEl, true, true);\n navbarHidden = false;\n } else if (action === 'hide' && !navbarHidden) {\n app.navbar.hide($navbarEl, true, false, true);\n navbarHidden = true;\n }\n previousScrollTop = currentScrollTop;\n }\n\n function handleScroll(e) {\n scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollChanged = currentScrollTop;\n if (needCollapse) {\n handleLargeNavbarCollapse(scrollContent);\n } else if (needTransparent) {\n handleNavbarTransparent();\n }\n if ($pageEl.hasClass('page-previous')) return;\n if (needHide) {\n handleTitleHideShow();\n }\n }\n function handeTouchStart() {\n scrollChanged = false;\n }\n function handleTouchEnd() {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n if (scrollChanged !== false) {\n if (needTransparent && !needCollapse) {\n snapTransparentNavbar();\n } else {\n snapLargeNavbar();\n }\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }\n }, touchSnapTimeout);\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n\n if (\n support.touch &&\n ((needCollapse && snapPageScrollToLargeTitle) ||\n (needTransparent && snapPageScrollToTransparentNavbar))\n ) {\n app.on('touchstart:passive', handeTouchStart);\n app.on('touchend:passive', handleTouchEnd);\n }\n calcScrollableDistance();\n if (needCollapse || needTransparent) {\n $pageEl.find('.page-content').each((pageContentEl) => {\n if (pageContentEl.scrollTop > 0) handleScroll.call(pageContentEl);\n });\n }\n app.on('resize', calcScrollableDistance);\n $pageEl[0].f7DetachNavbarScrollHandlers = function f7DetachNavbarScrollHandlers() {\n app.off('resize', calcScrollableDistance);\n delete $pageEl[0].f7DetachNavbarScrollHandlers;\n $pageEl.off('scroll', '.page-content', handleScroll, true);\n if (\n support.touch &&\n ((needCollapse && snapPageScrollToLargeTitle) ||\n (needTransparent && snapPageScrollToTransparentNavbar))\n ) {\n app.off('touchstart:passive', handeTouchStart);\n app.off('touchend:passive', handleTouchEnd);\n }\n };\n },\n};\nexport default {\n name: 'navbar',\n create() {\n const app = this;\n bindMethods(app, {\n navbar: Navbar,\n });\n },\n params: {\n navbar: {\n scrollTopOnTitleClick: true,\n iosCenterTitle: true,\n mdCenterTitle: false,\n auroraCenterTitle: true,\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true,\n collapseLargeTitleOnScroll: true,\n snapPageScrollToLargeTitle: true,\n snapPageScrollToTransparentNavbar: true,\n },\n },\n on: {\n 'panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint':\n function onPanelResize() {\n const app = this;\n $('.navbar').each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n },\n pageBeforeRemove(page) {\n if (page.$el[0].f7DetachNavbarScrollHandlers) {\n page.$el[0].f7DetachNavbarScrollHandlers();\n }\n },\n pageBeforeIn(page) {\n const app = this;\n if (app.theme !== 'ios') return;\n let $navbarsEl;\n const view = page.$el.parents('.view')[0].f7View;\n const navbarEl = app.navbar.getElByPage(page);\n if (!navbarEl) {\n $navbarsEl = page.$el.parents('.view').children('.navbars');\n } else {\n $navbarsEl = $(navbarEl).parents('.navbars');\n }\n if (page.$el.hasClass('no-navbar') || (view.router.dynamicNavbar && !navbarEl)) {\n const animate = !!(page.pageFrom && page.router.history.length > 0);\n app.navbar.hide($navbarsEl, animate);\n } else {\n app.navbar.show($navbarsEl);\n }\n },\n pageReinit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n app.navbar.size($navbarEl);\n },\n pageInit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n\n // Size\n app.navbar.size($navbarEl);\n\n // Need Collapse On Scroll\n let needCollapseOnScrollHandler;\n if ($navbarEl.find('.title-large').length > 0) {\n $navbarEl.addClass('navbar-large');\n }\n if ($navbarEl.hasClass('navbar-large')) {\n if (app.params.navbar.collapseLargeTitleOnScroll) needCollapseOnScrollHandler = true;\n page.$el.addClass('page-with-navbar-large');\n }\n\n // Need transparent on scroll\n let needTransparentOnScroll;\n if (!needCollapseOnScrollHandler && $navbarEl.hasClass('navbar-transparent')) {\n needTransparentOnScroll = true;\n }\n\n // Need Hide On Scroll\n let needHideOnScrollHandler;\n if (\n app.params.navbar.hideOnPageScroll ||\n page.$el.find('.hide-navbar-on-scroll').length ||\n page.$el.hasClass('hide-navbar-on-scroll') ||\n page.$el.find('.hide-bars-on-scroll').length ||\n page.$el.hasClass('hide-bars-on-scroll')\n ) {\n if (\n page.$el.find('.keep-navbar-on-scroll').length ||\n page.$el.hasClass('keep-navbar-on-scroll') ||\n page.$el.find('.keep-bars-on-scroll').length ||\n page.$el.hasClass('keep-bars-on-scroll')\n ) {\n needHideOnScrollHandler = false;\n } else {\n needHideOnScrollHandler = true;\n }\n }\n\n if (needCollapseOnScrollHandler || needHideOnScrollHandler || needTransparentOnScroll) {\n app.navbar.initNavbarOnScroll(\n page.el,\n $navbarEl[0],\n needHideOnScrollHandler,\n needCollapseOnScrollHandler,\n needTransparentOnScroll,\n );\n }\n },\n 'panelOpen panelSwipeOpen modalOpen': function onPanelModalOpen(instance) {\n const app = this;\n instance.$el.find('.navbar:not(.navbar-previous):not(.stacked)').each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n },\n tabShow(tabEl) {\n const app = this;\n $(tabEl)\n .find('.navbar:not(.navbar-previous):not(.stacked)')\n .each((navbarEl) => {\n app.navbar.size(navbarEl);\n });\n },\n },\n clicks: {\n '.navbar .title': function onTitleClick($clickedEl, clickedData, e) {\n const app = this;\n if (!app.params.navbar.scrollTopOnTitleClick) return;\n if ($(e.target).closest('a, button').length > 0) {\n return;\n }\n let $pageContentEl;\n\n // Find active page\n const $navbarEl = $clickedEl.parents('.navbar');\n const $navbarsEl = $navbarEl.parents('.navbars');\n\n // Static Layout\n $pageContentEl = $navbarEl.parents('.page-content');\n\n if ($pageContentEl.length === 0) {\n // Fixed Layout\n if ($navbarEl.parents('.page').length > 0) {\n $pageContentEl = $navbarEl.parents('.page').find('.page-content');\n }\n // Through Layout iOS\n if ($pageContentEl.length === 0 && $navbarsEl.length) {\n if ($navbarsEl.nextAll('.page-current:not(.stacked)').length > 0) {\n $pageContentEl = $navbarsEl\n .nextAll('.page-current:not(.stacked)')\n .find('.page-content');\n }\n }\n // Through Layout\n if ($pageContentEl.length === 0) {\n if ($navbarEl.nextAll('.page-current:not(.stacked)').length > 0) {\n $pageContentEl = $navbarEl.nextAll('.page-current:not(.stacked)').find('.page-content');\n }\n }\n }\n if ($pageContentEl && $pageContentEl.length > 0) {\n // Check for tab\n if ($pageContentEl.hasClass('tab')) {\n $pageContentEl = $pageContentEl.parent('.tabs').children('.page-content.tab-active');\n }\n if ($pageContentEl.length > 0) $pageContentEl.scrollTop(0, 300);\n }\n },\n },\n vnode: {\n navbar: {\n postpatch(vnode) {\n const app = this;\n app.navbar.size(vnode.elm);\n },\n },\n },\n};\n","import $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\n\nconst Toolbar = {\n setHighlight(tabbarEl) {\n const app = this;\n const $tabbarEl = $(tabbarEl);\n if (app.theme === 'ios' && !$tabbarEl.hasClass('tabbar-highlight')) return;\n\n if (\n $tabbarEl.length === 0 ||\n !($tabbarEl.hasClass('tabbar') || $tabbarEl.hasClass('tabbar-labels'))\n )\n return;\n\n let $highlightEl = $tabbarEl.find('.tab-link-highlight');\n const tabLinksCount = $tabbarEl.find('.tab-link').length;\n if (tabLinksCount === 0) {\n $highlightEl.remove();\n return;\n }\n\n if ($highlightEl.length === 0) {\n $tabbarEl.children('.toolbar-inner').append('<span class=\"tab-link-highlight\"></span>');\n $highlightEl = $tabbarEl.find('.tab-link-highlight');\n } else if ($highlightEl.next().length) {\n $tabbarEl.children('.toolbar-inner').append($highlightEl);\n }\n\n const $activeLink = $tabbarEl.find('.tab-link-active');\n let highlightWidth;\n let highlightTranslate;\n\n if ($tabbarEl.hasClass('tabbar-scrollable') && $activeLink && $activeLink[0]) {\n highlightWidth = `${$activeLink[0].offsetWidth}px`;\n highlightTranslate = `${$activeLink[0].offsetLeft}px`;\n } else {\n const activeIndex = $activeLink.index();\n highlightWidth = `${100 / tabLinksCount}%`;\n highlightTranslate = `${(app.rtl ? -activeIndex : activeIndex) * 100}%`;\n }\n\n nextFrame(() => {\n $highlightEl.css('width', highlightWidth).transform(`translate3d(${highlightTranslate},0,0)`);\n });\n },\n init(tabbarEl) {\n const app = this;\n app.toolbar.setHighlight(tabbarEl);\n },\n hide(el, animate = true) {\n const app = this;\n const $el = $(el);\n if ($el.hasClass('toolbar-hidden')) return;\n const className = `toolbar-hidden${animate ? ' toolbar-transitioning' : ''}`;\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n $el.addClass(className);\n $el.trigger('toolbar:hide');\n app.emit('toolbarHide', $el[0]);\n },\n show(el, animate = true) {\n const app = this;\n const $el = $(el);\n if (!$el.hasClass('toolbar-hidden')) return;\n if (animate) {\n $el.addClass('toolbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n }\n $el.removeClass('toolbar-hidden');\n $el.trigger('toolbar:show');\n app.emit('toolbarShow', $el[0]);\n },\n initToolbarOnScroll(pageEl) {\n const app = this;\n const $pageEl = $(pageEl);\n let $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.parents('.views').children('.tabbar, .tabbar-labels');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n\n let previousScrollTop;\n let currentScrollTop;\n\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let toolbarHidden;\n function handleScroll(e) {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n if ($pageEl.hasClass('page-previous')) return;\n const scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n toolbarHidden = $toolbarEl.hasClass('toolbar-hidden');\n\n if (reachEnd) {\n if (app.params.toolbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.toolbar.showOnPageScrollTop || currentScrollTop <= 44) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > 44) {\n action = 'hide';\n } else {\n action = 'show';\n }\n\n if (action === 'show' && toolbarHidden) {\n app.toolbar.show($toolbarEl);\n toolbarHidden = false;\n } else if (action === 'hide' && !toolbarHidden) {\n app.toolbar.hide($toolbarEl);\n toolbarHidden = true;\n }\n\n previousScrollTop = currentScrollTop;\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n $pageEl[0].f7ScrollToolbarHandler = handleScroll;\n },\n};\nexport default {\n name: 'toolbar',\n create() {\n const app = this;\n bindMethods(app, {\n toolbar: Toolbar,\n });\n },\n params: {\n toolbar: {\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true,\n },\n },\n on: {\n pageBeforeRemove(page) {\n if (page.$el[0].f7ScrollToolbarHandler) {\n page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarHandler, true);\n }\n },\n pageBeforeIn(page) {\n const app = this;\n let $toolbarEl = page.$el.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.parents('.views').children('.tabbar, .tabbar-labels');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n if (page.$el.hasClass('no-toolbar')) {\n app.toolbar.hide($toolbarEl);\n } else {\n app.toolbar.show($toolbarEl);\n }\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.tabbar, .tabbar-labels').each((tabbarEl) => {\n app.toolbar.init(tabbarEl);\n });\n if (\n app.params.toolbar.hideOnPageScroll ||\n page.$el.find('.hide-toolbar-on-scroll').length ||\n page.$el.hasClass('hide-toolbar-on-scroll') ||\n page.$el.find('.hide-bars-on-scroll').length ||\n page.$el.hasClass('hide-bars-on-scroll')\n ) {\n if (\n page.$el.find('.keep-toolbar-on-scroll').length ||\n page.$el.hasClass('keep-toolbar-on-scroll') ||\n page.$el.find('.keep-bars-on-scroll').length ||\n page.$el.hasClass('keep-bars-on-scroll')\n ) {\n return;\n }\n app.toolbar.initToolbarOnScroll(page.el);\n }\n },\n init() {\n const app = this;\n app.$el.find('.tabbar, .tabbar-labels').each((tabbarEl) => {\n app.toolbar.init(tabbarEl);\n });\n },\n },\n vnode: {\n tabbar: {\n insert(vnode) {\n const app = this;\n app.toolbar.init(vnode.elm);\n },\n },\n },\n};\n","import $ from '../../shared/dom7.js';\n\nexport default {\n name: 'subnavbar',\n on: {\n pageInit(page) {\n if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {\n page.$el.addClass('page-with-subnavbar');\n }\n const $innerSubnavbars = page.$el.find('.subnavbar').filter((subnavbarEl) => {\n return $(subnavbarEl).parents('.page')[0] === page.$el[0];\n });\n if ($innerSubnavbars.length) {\n page.$el.addClass('page-with-subnavbar');\n }\n },\n },\n};\n","import $ from '../../shared/dom7.js';\n\nexport default class TouchRipple {\n constructor(app, $el, x, y) {\n const ripple = this;\n\n if (!$el) return undefined;\n\n const { left, top, width, height } = $el[0].getBoundingClientRect();\n const center = {\n x: x - left,\n y: y - top,\n };\n let diameter = Math.max((height ** 2 + width ** 2) ** 0.5, 48);\n\n let isInset = false;\n const insetElements = app.params.touch.touchRippleInsetElements || '';\n if (insetElements && $el.is(insetElements)) {\n isInset = true;\n }\n if (isInset) {\n diameter = Math.max(Math.min(width, height), 48);\n }\n\n if (!isInset && $el.css('overflow') === 'hidden') {\n const distanceFromCenter =\n ((center.x - width / 2) ** 2 + (center.y - height / 2) ** 2) ** 0.5;\n const scale = (diameter / 2 + distanceFromCenter) / (diameter / 2);\n ripple.rippleTransform = `translate3d(0px, 0px, 0) scale(${scale})`;\n } else {\n // prettier-ignore\n ripple.rippleTransform = `translate3d(${-center.x + width / 2}px, ${-center.y + height / 2}px, 0) scale(1)`;\n }\n if (isInset) {\n $el.addClass('ripple-inset');\n }\n\n ripple.$rippleWaveEl = $(\n `<div class=\"ripple-wave\" style=\"width: ${diameter}px; height: ${diameter}px; margin-top:-${\n diameter / 2\n }px; margin-left:-${diameter / 2}px; left:${center.x}px; top:${\n center.y\n }px; --f7-ripple-transform: ${ripple.rippleTransform}\"></div>`,\n );\n\n $el.prepend(ripple.$rippleWaveEl);\n\n ripple.$rippleWaveEl.animationEnd(() => {\n if (!ripple.$rippleWaveEl) return;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-out')) return;\n ripple.$rippleWaveEl.addClass('ripple-wave-in');\n if (ripple.shouldBeRemoved) {\n ripple.out();\n }\n });\n\n return ripple;\n }\n\n destroy() {\n let ripple = this;\n if (ripple.$rippleWaveEl) {\n ripple.$rippleWaveEl.remove();\n }\n Object.keys(ripple).forEach((key) => {\n ripple[key] = null;\n delete ripple[key];\n });\n ripple = null;\n }\n\n out() {\n const ripple = this;\n const { $rippleWaveEl } = this;\n clearTimeout(ripple.removeTimeout);\n $rippleWaveEl.addClass('ripple-wave-out');\n\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 300);\n\n $rippleWaveEl.animationEnd(() => {\n clearTimeout(ripple.removeTimeout);\n ripple.destroy();\n });\n }\n\n remove() {\n const ripple = this;\n if (ripple.shouldBeRemoved) return;\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 400);\n ripple.shouldBeRemoved = true;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-in')) {\n ripple.out();\n }\n }\n}\n","import TouchRipple from './touch-ripple-class.js';\n\nexport default {\n name: 'touch-ripple',\n static: {\n TouchRipple,\n },\n create() {\n const app = this;\n app.touchRipple = {\n create(...args) {\n return new TouchRipple(...args);\n },\n };\n },\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n\nconst openedModals = [];\nconst dialogsQueue = [];\nfunction clearDialogsQueue() {\n if (dialogsQueue.length === 0) return;\n const dialog = dialogsQueue.shift();\n dialog.open();\n}\nclass Modal extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n\n const modal = this;\n\n const defaults = {};\n\n // Extend defaults with modules params\n modal.useModulesParams(defaults);\n\n modal.params = extend(defaults, params);\n modal.opened = false;\n\n let $containerEl = modal.params.containerEl ? $(modal.params.containerEl).eq(0) : app.$el;\n if (!$containerEl.length) $containerEl = app.$el;\n\n modal.$containerEl = $containerEl;\n modal.containerEl = $containerEl[0];\n\n // Install Modules\n modal.useModules();\n\n return this;\n }\n\n onOpen() {\n const modal = this;\n modal.opened = true;\n openedModals.push(modal);\n $('html').addClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:open ${modal.type.toLowerCase()}:open`);\n modal.emit(`local::open modalOpen ${modal.type}Open`, modal);\n }\n\n onOpened() {\n const modal = this;\n modal.$el.trigger(`modal:opened ${modal.type.toLowerCase()}:opened`);\n modal.emit(`local::opened modalOpened ${modal.type}Opened`, modal);\n }\n\n onClose() {\n const modal = this;\n modal.opened = false;\n if (!modal.type || !modal.$el) return;\n openedModals.splice(openedModals.indexOf(modal), 1);\n $('html').removeClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:close ${modal.type.toLowerCase()}:close`);\n modal.emit(`local::close modalClose ${modal.type}Close`, modal);\n }\n\n onClosed() {\n const modal = this;\n if (!modal.type || !modal.$el) return;\n modal.$el.removeClass('modal-out');\n modal.$el.hide();\n if (\n modal.params.backdrop &&\n (modal.params.backdropUnique || modal.forceBackdropUnique) &&\n modal.$backdropEl\n ) {\n modal.$backdropEl.remove();\n }\n modal.$el.trigger(`modal:closed ${modal.type.toLowerCase()}:closed`);\n modal.emit(`local::closed modalClosed ${modal.type}Closed`, modal);\n }\n\n open(animateModal) {\n const modal = this;\n const document = getDocument();\n const app = modal.app;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n const type = modal.type;\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;\n else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n\n if (!$el || $el.hasClass('modal-in')) {\n if (animateModal === false && $el[0] && type !== 'dialog') {\n $el[0].style.display = 'block';\n }\n return modal;\n }\n\n if (type === 'dialog' && app.params.modal.queueDialogs) {\n let pushToQueue;\n if ($('.dialog.modal-in').length > 0) {\n pushToQueue = true;\n } else if (openedModals.length > 0) {\n openedModals.forEach((openedModal) => {\n if (openedModal.type === 'dialog') pushToQueue = true;\n });\n }\n if (pushToQueue) {\n dialogsQueue.push(modal);\n return modal;\n }\n }\n\n const $modalParentEl = $el.parent();\n const wasInDom = $el.parents(document).length > 0;\n if (!$modalParentEl.is(modal.$containerEl)) {\n modal.$containerEl.append($el);\n modal.once(`${type}Closed`, () => {\n if (wasInDom) {\n $modalParentEl.append($el);\n } else {\n $el.remove();\n }\n });\n }\n // Show Modal\n $el.show();\n\n if (\n modal.params.backdrop &&\n (modal.params.backdropUnique || modal.forceBackdropUnique) &&\n modal.$backdropEl\n ) {\n modal.$backdropEl.insertBefore($el);\n }\n\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n modal._clientLeft = $el[0].clientLeft;\n\n // Modal\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n if ($backdropEl) {\n $backdropEl.removeClass('not-animated');\n $backdropEl.addClass('backdrop-in');\n }\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-out not-animated').addClass('modal-in');\n modal.onOpen();\n } else {\n if ($backdropEl) {\n $backdropEl.addClass('backdrop-in not-animated');\n }\n $el.removeClass('modal-out').addClass('modal-in not-animated');\n modal.onOpen();\n modal.onOpened();\n }\n\n return modal;\n }\n\n close(animateModal) {\n const modal = this;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;\n else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n\n if (!$el || !$el.hasClass('modal-in')) {\n if (dialogsQueue.indexOf(modal) >= 0) {\n dialogsQueue.splice(dialogsQueue.indexOf(modal), 1);\n }\n return modal;\n }\n\n // backdrop\n if ($backdropEl) {\n let needToHideBackdrop = true;\n if (modal.type === 'popup') {\n modal.$el\n .prevAll('.popup.modal-in')\n .add(modal.$el.nextAll('.popup.modal-in'))\n .each((popupEl) => {\n const popupInstance = popupEl.f7Modal;\n if (!popupInstance) return;\n if (\n popupInstance.params.closeByBackdropClick &&\n popupInstance.params.backdrop &&\n popupInstance.backdropEl === modal.backdropEl\n ) {\n needToHideBackdrop = false;\n }\n });\n }\n if (needToHideBackdrop) {\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n $backdropEl.removeClass('backdrop-in');\n }\n }\n\n // Modal\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n } else {\n $el.addClass('not-animated').removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n modal.onClosed();\n }\n\n if (modal.type === 'dialog') {\n clearDialogsQueue();\n }\n\n return modal;\n }\n\n destroy() {\n const modal = this;\n if (modal.destroyed) return;\n modal.emit(`local::beforeDestroy modalBeforeDestroy ${modal.type}BeforeDestroy`, modal);\n if (modal.$el) {\n modal.$el.trigger(`modal:beforedestroy ${modal.type.toLowerCase()}:beforedestroy`);\n if (modal.$el.length && modal.$el[0].f7Modal) {\n delete modal.$el[0].f7Modal;\n }\n }\n deleteProps(modal);\n modal.destroyed = true;\n }\n}\n\nexport default Modal;\n","import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Modal from './modal-class.js';\n\nclass CustomModal extends Modal {\n constructor(app, params) {\n const extendedParams = extend(\n {\n backdrop: true,\n closeByBackdropClick: true,\n on: {},\n },\n params,\n );\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n\n const customModal = this;\n\n customModal.params = extendedParams;\n\n // Find Element\n let $el;\n if (!customModal.params.el) {\n $el = $(customModal.params.content);\n } else {\n $el = $(customModal.params.el);\n }\n\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n\n if ($el.length === 0) {\n return customModal.destroy();\n }\n let $backdropEl;\n if (customModal.params.backdrop) {\n $backdropEl = app.$el.children('.custom-modal-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('<div class=\"custom-modal-backdrop\"></div>');\n app.$el.append($backdropEl);\n }\n }\n\n function handleClick(e) {\n if (!customModal || customModal.destroyed) return;\n if ($backdropEl && e.target === $backdropEl[0]) {\n customModal.close();\n }\n }\n\n customModal.on('customModalOpened', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.on('click', handleClick);\n }\n });\n customModal.on('customModalClose', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.off('click', handleClick);\n }\n });\n\n extend(customModal, {\n app,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'customModal',\n });\n\n $el[0].f7Modal = customModal;\n\n return customModal;\n }\n}\nexport default CustomModal;\n","import Modal from './modal-class.js';\nimport CustomModal from './custom-modal-class.js';\n\nexport default {\n name: 'modal',\n static: {\n Modal,\n CustomModal,\n },\n create() {\n const app = this;\n app.customModal = {\n create(params) {\n return new CustomModal(app, params);\n },\n };\n },\n params: {\n modal: {\n queueDialogs: true,\n },\n },\n};\n","import $ from './shared/dom7.js';\n\nimport Framework7 from './components/app/app-class.js';\n\n//IMPORT_HELPERS\n\nimport DeviceModule from './modules/device/device.js';\nimport SupportModule from './modules/support/support.js';\nimport UtilsModule from './modules/utils/utils.js';\nimport ResizeModule from './modules/resize/resize.js';\nimport RequestModule from './modules/request/request.js';\nimport TouchModule from './modules/touch/touch.js';\nimport ClicksModule from './modules/clicks/clicks.js';\nimport RouterModule from './modules/router/router.js';\nimport RouterComponentLoaderModule from './modules/router/component-loader.js';\nimport ComponentModule, { Component, $jsx } from './modules/component/component.js';\nimport HistoryModule from './modules/history/history.js';\nimport ServiceWorkerModule from './modules/service-worker/service-worker.js';\nimport StoreModule, { createStore } from './modules/store/store.js';\n\nimport Statusbar from './components/statusbar/statusbar.js';\nimport View from './components/view/view.js';\nimport Navbar from './components/navbar/navbar.js';\nimport Toolbar from './components/toolbar/toolbar.js';\nimport Subnavbar from './components/subnavbar/subnavbar.js';\nimport TouchRipple from './components/touch-ripple/touch-ripple.js';\nimport Modal from './components/modal/modal.js';\nimport Router from './modules/router/router-class.js';\n\n//IMPORT_COMPONENTS\n\n// UMD_ONLY_START\nif (typeof window !== 'undefined') {\n // Dom7\n if (!window.Dom7) window.Dom7 = $;\n}\n// UMD_ONLY_END\n\nRouter.use([RouterComponentLoaderModule]);\n\nFramework7.use([\n DeviceModule,\n SupportModule,\n UtilsModule,\n ResizeModule,\n RequestModule,\n TouchModule,\n ClicksModule,\n RouterModule,\n HistoryModule,\n ComponentModule,\n ServiceWorkerModule,\n StoreModule,\n Statusbar,\n View,\n Navbar,\n Toolbar,\n Subnavbar,\n TouchRipple,\n Modal,\n //INSTALL_COMPONENTS\n]);\n\n//NAMED_EXPORT\nexport default Framework7;\n"]}