@simonbackx/vue-app-navigation 1.24.3 → 1.26.0

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.
package/dist/main.css CHANGED
@@ -1,7 +1,7 @@
1
- .navigation-controller{overflow:visible;position:relative}.navigation-controller>.modal-push-enter,.navigation-controller>.modal-push-enter-active{position:relative;z-index:100}.navigation-controller>.modal-push-enter>div,.navigation-controller>.modal-push-enter-active>div{min-height:100vh;min-height:calc(var(--vh, 1vh) * 100);background:#fff;background:var(--color-white, white);will-change:transform;transition:transform .3s cubic-bezier(0, 0, 0.2, 1);transform:translateY(100vh)}.navigation-controller>.modal-push-leave,.navigation-controller>.modal-push-leave-active{position:absolute;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px;contain:strict;transition:filter .3s}.navigation-controller>.modal-push-leave>div,.navigation-controller>.modal-push-leave-active>div{width:100%;height:100%}.navigation-controller>.modal-push-enter-to>div{transform:translateY(0)}.navigation-controller>.modal-push-leave-to{filter:brightness(80%)}.navigation-controller>.modal-pop-leave-active>div{transition:transform .25s cubic-bezier(0.4, 0, 1, 1)}.navigation-controller>.modal-pop-leave,.navigation-controller>.modal-pop-leave-active{position:absolute;z-index:10000;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px}.navigation-controller>.modal-pop-leave>div,.navigation-controller>.modal-pop-leave-active>div{background:#fff;background:var(--color-white, white);width:100%;height:100%}.navigation-controller>.modal-pop-enter,.navigation-controller>.modal-pop-enter-active{position:relative}.navigation-controller>.modal-pop-leave-to>div{transform:translateY(100vh)}.navigation-controller>.push-enter-active{user-select:none}.navigation-controller>.push-enter-active>div{transition:transform .3s}.navigation-controller>.push-leave-active{user-select:none;transition:filter .3s}.navigation-controller>.push-leave-active>div{transition:transform .3s}.navigation-controller>.push-enter,.navigation-controller>.push-enter-active{position:relative;z-index:1000}.navigation-controller>.push-leave,.navigation-controller>.push-leave-active{position:absolute;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px}.navigation-controller>.push-leave>div,.navigation-controller>.push-leave-active>div{width:100%;height:100%}.navigation-controller>.push-leave-to{filter:brightness(80%)}.navigation-controller>.push-enter>div{transform:translateX(100%);transform:translateX(calc(100% * var(--direction-scale-x, 1)))}.navigation-controller>.push-leave-to>div{transform:translateX(-40%);transform:translateX(calc(-40% * var(--direction-scale-x, 1)))}.navigation-controller>.pop-enter-active{user-select:none;transition:filter .25s}.navigation-controller>.pop-enter-active>div{transition:transform .25s}.navigation-controller>.pop-leave-active{user-select:none}.navigation-controller>.pop-leave-active>div{transition:transform .25s}.navigation-controller>.pop-enter,.navigation-controller>.pop-enter-active{position:relative}.navigation-controller>.pop-leave,.navigation-controller>.pop-leave-active{position:absolute;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px;z-index:1000}.navigation-controller>.pop-leave>div,.navigation-controller>.pop-leave-active>div{width:100%;height:100%}.navigation-controller>.pop-enter{filter:brightness(80%)}.navigation-controller>.pop-enter>div{transform:translateX(-40%);transform:translateX(calc(-40% * var(--direction-scale-x, 1)))}.navigation-controller>.pop-leave-to>div{transform:translateX(100%);transform:translateX(calc(100% * var(--direction-scale-x, 1)))}
2
- .popup{position:fixed;left:0;top:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;z-index:10000;contain:size layout style paint}.popup:after{background:rgba(0,0,0,.7);content:"";position:absolute;left:0;top:0;bottom:0;right:0;opacity:1;contain:size layout style paint;will-change:opacity;transition:opacity .3s;z-index:0}.popup~.popup:after{display:none}.popup>div{max-width:800px;flex-basis:100%;background:#fff;background:var(--color-white, white);border-radius:5px;overflow:hidden;max-height:100vh;max-height:calc(var(--vh, 1vh) * 100);height:calc(var(--vh, 1vh) * 100 - 80px);-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;box-sizing:border-box;contain:size layout style paint;will-change:transform,opacity;--saved-vh: var(--vh, 1vh);transform:translate3d(0, 0, 0);transform-origin:50% 0%;visibility:visible;transition:transform .3s,opacity .3s,visibility step-start .3s;z-index:1;position:relative}.popup>div>.scrollable-container{overflow:hidden;overflow-y:auto;--vh: calc(var(--saved-vh, 1vh) - 0.8px);height:100%;will-change:scroll-position}.popup>div:after{background:rgba(0,0,0,.4);content:"";position:absolute;left:0;top:0;bottom:0;right:0;opacity:0;contain:size layout style paint;will-change:opacity,visibility;visibility:hidden;z-index:20000;transition:opacity .3s,visibility step-end .3s}.popup.push-down-full>div{transition:transform .3s,opacity .3s,visibility step-end .3s;visibility:hidden;opacity:0;transform:scale(0.9, 0.9) translate3d(0, -15px, 0)}.popup.push-down-full>div:after{opacity:1;visibility:visible;transition:opacity .3s,visibility step-start .3s}.popup.push-down>div{transform:scale(0.95, 0.95) translate3d(0, -10px, 0)}.popup.push-down>div:after{opacity:1;visibility:visible;transition:opacity .3s,visibility step-start .3s}.popup.fade-enter-active:after{transition:opacity .3s}.popup.fade-enter-active>div{transition:transform .3s cubic-bezier(0, 0, 0.2, 1),opacity .3s}.popup.fade-leave-active:after{transition:opacity .3s}.popup.fade-leave-active>div{transition:transform .3s cubic-bezier(0.4, 0, 1, 1),opacity .3s}.popup.fade-enter:after,.popup.fade-leave-to:after{opacity:0}.popup.fade-enter>div,.popup.fade-leave-to>div{transform:translate(0, 50vh);opacity:0}
3
- .sheet{position:fixed;left:0;top:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;z-index:10000;padding:20px;contain:size layout style paint}.sheet .navigation-controller{transition:height .25s cubic-bezier(0.4, 0, 0.2, 1);will-change:height}.sheet:after{background:rgba(0,0,0,.7);content:"";position:absolute;left:0;top:0;bottom:0;right:0;opacity:1;contain:size layout style paint;will-change:opacity;transition:opacity .3s;z-index:0}.sheet~.sheet:after{display:none}.sheet>div{max-width:800px;background:#fff;background:var(--color-white, white);border-radius:5px;overflow:hidden;max-height:100vh;max-height:calc(100vh - 80px);max-height:calc(var(--vh, 1vh) * 100 - 80px);overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;box-sizing:border-box;--saved-vh: var(--vh, 1vh);transform:translate3d(0, 0, 0);transform-origin:50% 50%;z-index:1;contain:layout style paint;will-change:transform,opacity,scroll-position;transition:transform .3s,opacity .3s}.sheet>div>*{--vh: calc(var(--saved-vh, 1vh) - 0.8px)}.sheet.fade-enter-active:after{transition:opacity .3s}.sheet.fade-enter-active>div{transition:transform .3s cubic-bezier(0, 0, 0.2, 1),opacity .3s}.sheet.fade-leave-active:after{transition:opacity .3s}.sheet.fade-leave-active>div{transition:transform .3s cubic-bezier(0.4, 0, 1, 1),opacity .3s}.sheet.fade-enter:after,.sheet.fade-leave-to:after{opacity:0}.sheet.fade-enter>div,.sheet.fade-leave-to>div{transform:translate(0, 30vh);opacity:0}
1
+ .navigation-controller{overflow:visible;position:relative}.navigation-controller>.modal-push-enter,.navigation-controller>.modal-push-enter-active{position:relative;z-index:100}.navigation-controller>.modal-push-enter>div,.navigation-controller>.modal-push-enter-active>div{min-height:100vh;min-height:calc(var(--vh, 1vh) * 100);background:#fff;background:var(--color-white, white);will-change:transform;transition:transform .3s cubic-bezier(0, 0, 0.2, 1);transform:translateY(100vh)}.navigation-controller>.modal-push-leave,.navigation-controller>.modal-push-leave-active{position:absolute;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px;contain:strict;transition:filter .3s}.navigation-controller>.modal-push-leave>div,.navigation-controller>.modal-push-leave-active>div{width:100%;height:100%}.navigation-controller>.modal-push-enter-to>div{transform:translateY(0)}.navigation-controller>.modal-push-leave-to{filter:brightness(80%)}.navigation-controller>.modal-pop-leave-active>div{transition:transform .25s cubic-bezier(0.4, 0, 1, 1)}.navigation-controller>.modal-pop-leave,.navigation-controller>.modal-pop-leave-active{position:absolute;z-index:10000;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px}.navigation-controller>.modal-pop-leave>div,.navigation-controller>.modal-pop-leave-active>div{background:#fff;background:var(--color-white, white);width:100%;height:100%}.navigation-controller>.modal-pop-enter,.navigation-controller>.modal-pop-enter-active{position:relative}.navigation-controller>.modal-pop-leave-to>div{transform:translateY(100vh)}.navigation-controller>.push-enter-active{user-select:none}.navigation-controller>.push-enter-active>div{transition:transform .3s}.navigation-controller>.push-leave-active{user-select:none;transition:filter .3s}.navigation-controller>.push-leave-active>div{transition:transform .3s}.navigation-controller>.push-enter,.navigation-controller>.push-enter-active{position:relative;z-index:1000}.navigation-controller>.push-enter>div,.navigation-controller>.push-enter-active>div{will-change:transform}.navigation-controller>.push-leave,.navigation-controller>.push-leave-active{position:absolute;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px;will-change:filter;contain:strict}.navigation-controller>.push-leave>div,.navigation-controller>.push-leave-active>div{width:100%;height:100%;contain:strict;will-change:transform}.navigation-controller>.push-leave-to{filter:brightness(80%)}.navigation-controller>.push-enter>div{transform:translateX(100%);transform:translateX(calc(100% * var(--direction-scale-x, 1)))}.navigation-controller>.push-leave-to>div{transform:translateX(-40%);transform:translateX(calc(-40% * var(--direction-scale-x, 1)))}.navigation-controller>.pop-enter-active{user-select:none;transition:filter .25s}.navigation-controller>.pop-enter-active>div{transition:transform .25s}.navigation-controller>.pop-leave-active{user-select:none}.navigation-controller>.pop-leave-active>div{transition:transform .25s}.navigation-controller>.pop-enter,.navigation-controller>.pop-enter-active{position:relative}.navigation-controller>.pop-enter>div,.navigation-controller>.pop-enter-active>div{will-change:transform}.navigation-controller>.pop-leave,.navigation-controller>.pop-leave-active{position:absolute;pointer-events:none;top:0px;left:0px;right:0px;bottom:0px;z-index:1000;contain:strict}.navigation-controller>.pop-leave>div,.navigation-controller>.pop-leave-active>div{width:100%;height:100%;will-change:transform;contain:strict}.navigation-controller>.pop-enter{filter:brightness(80%)}.navigation-controller>.pop-enter>div{transform:translateX(-40%);transform:translateX(calc(-40% * var(--direction-scale-x, 1)))}.navigation-controller>.pop-leave-to>div{transform:translateX(100%);transform:translateX(calc(100% * var(--direction-scale-x, 1)))}
2
+ .popup-old{position:fixed;left:0;top:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;z-index:10000;contain:size layout style paint}.popup-old:after{background:rgba(0,0,0,.7);content:"";position:absolute;left:0;top:0;bottom:0;right:0;opacity:1;contain:size layout style paint;will-change:opacity;transition:opacity .3s;z-index:0}.popup-old~.popup:after{display:none}.popup-old>div{max-width:800px;flex-basis:100%;background:#fff;background:var(--color-white, white);border-radius:5px;overflow:hidden;max-height:100vh;max-height:calc(var(--vh, 1vh) * 100);height:calc(var(--vh, 1vh) * 100 - 80px);-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;box-sizing:border-box;contain:size layout style paint;will-change:transform,opacity;--saved-vh: var(--vh, 1vh);transform:translate3d(0, 0, 0);transform-origin:50% 0%;visibility:visible;transition:transform .3s,opacity .3s,visibility step-start .3s;z-index:1;position:relative}.popup-old>div>.scrollable-container{overflow:hidden;overflow-y:auto;--vh: calc(var(--saved-vh, 1vh) - 0.8px);height:100%;will-change:scroll-position}.popup-old>div:after{background:rgba(0,0,0,.4);content:"";position:absolute;left:0;top:0;bottom:0;right:0;opacity:0;contain:size layout style paint;will-change:opacity,visibility;visibility:hidden;z-index:20000;transition:opacity .3s,visibility step-end .3s}.popup-old.push-down-full>div{transition:transform .3s,opacity .3s,visibility step-end .3s;visibility:hidden;opacity:0;transform:scale(0.9, 0.9) translate3d(0, -15px, 0)}.popup-old.push-down-full>div:after{opacity:1;visibility:visible;transition:opacity .3s,visibility step-start .3s}.popup-old.push-down>div{transform:scale(0.95, 0.95) translate3d(0, -10px, 0)}.popup-old.push-down>div:after{opacity:1;visibility:visible;transition:opacity .3s,visibility step-start .3s}.popup-old.fade-enter-active:after{transition:opacity .3s}.popup-old.fade-enter-active>div{transition:transform .3s cubic-bezier(0, 0, 0.2, 1),opacity .3s}.popup-old.fade-leave-active:after{transition:opacity .3s}.popup-old.fade-leave-active>div{transition:transform .3s cubic-bezier(0.4, 0, 1, 1),opacity .3s}.popup-old.fade-enter:after,.popup-old.fade-leave-to:after{opacity:0}.popup-old.fade-enter>div,.popup-old.fade-leave-to>div{transform:translate(0, 50vh);opacity:0}
4
3
  .side-view{background:rgba(0,0,0,.7);position:fixed;left:0;top:0;bottom:0;right:0;z-index:10000;visibility:visible;opacity:1;transition:background-color .3s,opacity .3s,visibility step-start .3s}.side-view~.side-view{background-color:rgba(0,0,0,.4)}.side-view>div{position:fixed;right:0;top:0;bottom:0;width:100%;max-width:800px;background:#fff;background:var(--color-white, white);border-radius:0px;overflow:hidden;height:100%;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;box-sizing:border-box;transform:translate3d(0, 0, 0);transition:transform .3s,border-radius .3s;transform-origin:0% 50%}.side-view.push-down-full{transition:background-color .3s,opacity .3s,visibility step-end .3s;visibility:hidden;opacity:0;background-color:rgba(0,0,0,.6)}.side-view.push-down-full>div{transform:scale(0.9, 0.9) translate3d(-15px, 0, 0);border-radius:5px}.side-view.push-down{background-color:rgba(0,0,0,.6)}.side-view.push-down>div{transform:scale(0.95, 0.95) translate3d(-10px, 0, 0);border-radius:5px}.side-view.fade-enter-active,.side-view.fade-leave-active,.side-view[data-extended-enter=true]{position:fixed}.side-view.fade-enter-active>div,.side-view.fade-leave-active>div,.side-view[data-extended-enter=true]>div{transition:transform .3s}.side-view.fade-enter,.side-view.fade-leave-to{background-color:rgba(0,0,0,0)}.side-view.fade-enter>div,.side-view.fade-leave-to>div{transform:translate(100%, 0)}.side-view.fade-enter-active,.side-view.fade-leave-active{z-index:10000}
4
+ .sheet-old{position:fixed;left:0;top:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;z-index:10000;padding:20px;contain:size layout style paint}.sheet-old .navigation-controller{transition:height .25s cubic-bezier(0.4, 0, 0.2, 1);will-change:height}.sheet-old:after{background:rgba(0,0,0,.7);content:"";position:absolute;left:0;top:0;bottom:0;right:0;opacity:1;contain:size layout style paint;will-change:opacity;transition:opacity .3s;z-index:0}.sheet-old~.sheet:after{display:none}.sheet-old>div{max-width:800px;background:#fff;background:var(--color-white, white);border-radius:5px;overflow:hidden;max-height:100vh;max-height:calc(100vh - 80px);max-height:calc(var(--vh, 1vh) * 100 - 80px);overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;box-sizing:border-box;--saved-vh: var(--vh, 1vh);transform:translate3d(0, 0, 0);transform-origin:50% 50%;z-index:1;contain:layout style paint;will-change:transform,opacity,scroll-position;transition:transform .3s,opacity .3s}.sheet-old>div>*{--vh: calc(var(--saved-vh, 1vh) - 0.8px)}.sheet-old.fade-enter-active:after{transition:opacity .3s}.sheet-old.fade-enter-active>div{transition:transform .3s cubic-bezier(0, 0, 0.2, 1),opacity .3s}.sheet-old.fade-leave-active:after{transition:opacity .3s}.sheet-old.fade-leave-active>div{transition:transform .3s cubic-bezier(0.4, 0, 1, 1),opacity .3s}.sheet-old.fade-enter:after,.sheet-old.fade-leave-to:after{opacity:0}.sheet-old.fade-enter>div,.sheet-old.fade-leave-to>div{transform:translate(0, 30vh);opacity:0}
5
5
  .split-view-controller{position:relative;width:100%;box-sizing:border-box;min-height:100vh;min-height:calc(var(--vh, 1vh) * 100)}.split-view-controller>.master{flex-shrink:0;flex-grow:0;position:sticky;left:0;top:0;height:100vh;height:calc(var(--vh, 1vh) * 100);overflow:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}.split-view-controller>.master:last-child{position:relative;overflow:visible;width:100%;height:auto}.split-view-controller[data-has-detail=true]{display:grid;grid-template-columns:320px 1fr;grid-template-columns:var(--split-view-width, 320px) 1fr}.split-view-controller[data-has-detail=true]>.master{min-width:0}.split-view-controller[data-has-detail=true]>.detail{min-width:0;min-height:100vh;min-height:calc(var(--vh, 1vh) * 100)}
6
6
 
7
7
  /*# sourceMappingURL=main.css.map*/
package/dist/main.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.css","mappings":"AA8nBA,uBAEI,iBACA,kBAIQ,yFAEI,kBACA,YAEA,iGACI,iBACA,sCACA,gBACA,qCAEA,sBAEA,oDACA,4BAIR,yFAEI,kBACA,oBAKA,QACA,SACA,UACA,WACA,eAGA,sBAEA,iGAEI,WACA,YAKJ,gDACI,wBAIR,4CACI,uBAMA,mDACI,qDAIR,uFAEI,kBACA,cACA,oBAKA,QACA,SACA,UACA,WAEA,+FAEI,gBACA,qCACA,WACA,YAIR,uFAEI,kBAIA,+CACI,4BAOZ,0CACI,iBAEA,8CACI,yBAIR,0CACI,iBAGA,sBAEA,8CACI,yBAIR,6EAEI,kBACA,aAGJ,6EAEI,kBACA,oBAKA,QACA,SACA,UACA,WAIA,qFAEI,WACA,YAIR,sCACI,uBAQA,uCACI,2BAGA,+DAKJ,0CACI,2BAGA,+DAMP,yCACG,iBAGA,uBAEA,6CACI,0BAIR,yCACI,iBAEA,6CACI,0BAIR,2EAEI,kBAGJ,2EAEI,kBACA,oBAEA,QACA,SACA,UACA,WACA,aAEA,mFAEI,WACA,YAIR,kCACI,uBAIA,sCACI,2BAGA,+DAKJ,yCACI,2BAGA,+D;AC5vBhB,OAGI,eACA,OACA,MACA,SACA,QACA,aACA,mBACA,uBACA,cACA,gCAEA,aACI,0BACA,WACA,kBACA,OACA,MACA,SACA,QACA,UACA,gCACA,oBACA,uBACA,UAGJ,oBACI,aAKJ,WACI,gBACA,gBACA,gBACA,qCACA,kBAGA,gBAEA,iBACA,sCACA,yCAEA,iCACA,8BAEA,sBAEA,gCACA,8BAEA,2BAGA,+BACA,wBAEA,mBACA,+DACA,UACA,kBAEA,iCACI,gBACA,gBAEA,yCACA,YACA,4BAGJ,iBACI,0BACA,WACA,kBACA,OACA,MACA,SACA,QACA,UACA,gCACA,+BACA,kBACA,cACA,+CAKJ,0BACI,6DACA,kBACA,UACA,mDAEA,gCACI,UACA,mBACA,iDAMR,qBACI,qDAEA,2BACI,UACA,mBACA,iDAMR,+BACI,uBAGJ,6BAEI,gEAKJ,+BACI,uBAGJ,6BAEI,gEAKJ,mDACI,UAGJ,+CACI,6BACA,U;ACnKZ,OAGI,eACA,OACA,MACA,SACA,QACA,aACA,mBACA,uBACA,cACA,aACA,gCAEA,8BACI,oDACA,mBAGJ,aACI,0BACA,WACA,kBACA,OACA,MACA,SACA,QACA,UACA,gCACA,oBACA,uBACA,UAGJ,oBACI,aAKJ,WACI,gBACA,gBACA,qCACA,kBAGA,gBAEA,iBACA,8BACA,6CAEA,gBACA,gBACA,iCACA,8BAEA,sBAEA,2BAGA,+BACA,yBACA,UACA,2BACA,8CACA,qCAEA,aACI,yCAKJ,+BACI,uBAGJ,6BAEI,gEAKJ,+BACI,uBAGJ,6BAEI,gEAKJ,mDACI,UAGJ,+CACI,6BACA,U;ACtFZ,WAEI,0BACA,eACA,OACA,MACA,SACA,QACA,cACA,mBACA,UACA,sEAEA,sBACI,gCAKJ,eACI,eACA,QACA,MACA,SACA,WACA,gBACA,gBACA,qCACA,kBAGA,gBAEA,YAEA,gBACA,gBACA,iCACA,8BAEA,sBAGA,+BAGA,2CACA,wBAGJ,0BACI,oEACA,kBACA,UACA,gCAEA,8BACI,mDACA,kBAIR,qBACI,gCAEA,yBACI,qDACA,kBAIR,+FAGI,eAEA,2GACI,yBAGR,+CACI,+BAEA,uDACI,6BAIR,0DAEI,c;ACIR,uBAEI,kBACA,WACA,sBAwCA,iBACA,sCAvCA,+BACI,cACA,YACA,gBACA,OACA,MACA,aACA,kCAEA,gBACA,kBACA,iCAIA,8BAEA,0CACI,kBACA,iBACA,WACA,YAoBR,6CACI,aACA,gCACA,yDAEA,qDACI,YAGJ,qDACI,YACA,iBACA,sC","sources":["webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue"],"sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.navigation-controller {\n // Scrolling should happen inside the children!\n overflow: visible;\n position: relative;\n\n > .modal {\n &-push {\n &-enter,\n &-enter-active {\n position: relative;\n z-index: 100;\n \n & > div {\n min-height: 100vh;\n min-height: calc(var(--vh, 1vh) * 100);\n background: white;\n background: var(--color-white, white);\n\n will-change: transform;\n\n transition: transform 0.30s cubic-bezier(0.0, 0.0, 0.2, 1);\n transform: translateY(100vh);\n }\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n pointer-events: none;\n\n // During leave animation, the div inside this container will transition to the left, causing scroll offsets\n // We'll need to ignore these\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n contain: strict;\n\n // Darkness in sync with enter animation\n transition: filter 0.30s;\n\n & > div {\n //overflow: hidden !important;\n width: 100%;\n height: 100%;\n }\n }\n\n &-enter-to {\n & > div {\n transform: translateY(0);\n }\n }\n\n &-leave-to {\n filter: brightness(80%);\n }\n }\n\n &-pop {\n &-leave-active {\n & > div {\n transition: transform 0.25s cubic-bezier(0.4, 0.0, 1, 1);\n }\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n z-index: 10000;\n pointer-events: none;\n\n // During leave animation, the div inside this container will transition to the left, causing scroll offsets\n // We'll need to ignore these\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n\n & > div {\n //overflow: hidden !important;\n background: white;\n background: var(--color-white, white);\n width: 100%;\n height: 100%;\n }\n }\n\n &-enter,\n &-enter-active {\n position: relative;\n }\n\n &-leave-to {\n & > div {\n transform: translateY(100vh);\n }\n }\n }\n }\n\n > .push {\n &-enter-active {\n user-select: none;\n\n & > div {\n transition: transform 0.30s;\n }\n }\n\n &-leave-active {\n user-select: none;\n\n // Darkness in sync with enter animation\n transition: filter 0.30s;\n\n & > div {\n transition: transform 0.30s;\n }\n }\n\n &-enter,\n &-enter-active {\n position: relative;\n z-index: 1000;\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n pointer-events: none;\n\n // During leave animation, the div inside this container will transition to the left, causing scroll offsets\n // We'll need to ignore these\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n\n // Top, left and bottom will get adjusted\n\n & > div {\n //overflow: hidden !important;\n width: 100%;\n height: 100%;\n }\n }\n\n &-leave-to /* .fade-leave-active below version 2.1.8 */ {\n filter: brightness(80%);\n }\n\n /*&-enter, &-leave-to {\n opacity: 0;\n }*/\n\n &-enter {\n & > div {\n transform: translateX(100%);\n\n // RTL support\n transform: translateX(calc(100% * var(--direction-scale-x, 1)));\n }\n }\n\n &-leave-to {\n & > div {\n transform: translateX(-40%);\n\n // RTL support\n transform: translateX(calc(-40% * var(--direction-scale-x, 1)));\n }\n }\n }\n\n > .pop {\n &-enter-active {\n user-select: none;\n\n // Opacity in sync with leave\n transition: filter 0.25s;\n\n & > div {\n transition: transform 0.25s;\n }\n }\n\n &-leave-active {\n user-select: none;\n\n & > div {\n transition: transform 0.25s;\n }\n }\n\n &-enter,\n &-enter-active {\n position: relative;\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n pointer-events: none;\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n z-index: 1000;\n\n & > div {\n //overflow: hidden !important;\n width: 100%;\n height: 100%;\n }\n }\n\n &-enter/*, &-leave-to *//* .fade-leave-active below version 2.1.8 */ {\n filter: brightness(80%);\n }\n\n &-enter {\n & > div {\n transform: translateX(-40%);\n\n // RTL support\n transform: translateX(calc(-40% * var(--direction-scale-x, 1)));\n }\n }\n\n &-leave-to {\n & > div {\n transform: translateX(100%);\n\n // RTL support\n transform: translateX(calc(100% * var(--direction-scale-x, 1)));\n }\n }\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.popup {\n // DO NOT ADD MAX HEIGHT HERE! Always add it to the children of the navigation controllers!\n //background: rgba(black, 0.7);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n contain: size layout style paint;\n\n &:after {\n background: rgba(black, 0.7);\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 1;\n contain: size layout style paint;\n will-change: opacity;\n transition: opacity 0.3s;\n z-index: 0;\n }\n\n ~.popup:after {\n display: none;\n }\n\n // Improve performance\n\n & > div {\n max-width: 800px;\n flex-basis: 100%;\n background: white;\n background: var(--color-white, white);\n border-radius: 5px;\n\n // Rounded corners need overflow hidden on scroll\n overflow: hidden;\n\n max-height: 100vh;\n max-height: calc(var(--vh, 1vh) * 100);\n height: calc(var(--vh, 1vh) * 100 - 80px);\n\n -webkit-overflow-scrolling: touch;\n overscroll-behavior-y: contain;\n\n box-sizing: border-box;\n\n contain: size layout style paint;\n will-change: transform, opacity;\n\n --saved-vh: var(--vh, 1vh);\n\n // Fix chrome bug that scrollbars are not visible anymore\n transform: translate3d(0, 0, 0);\n transform-origin: 50% 0%;\n\n visibility: visible;\n transition: transform 0.3s, opacity 0.3s, visibility step-start 0.3s;\n z-index: 1;\n position: relative;\n\n > .scrollable-container {\n overflow: hidden;\n overflow-y: auto;\n // Pass updated vh to children\n --vh: calc(var(--saved-vh, 1vh) - 0.8px);\n height: 100%;\n will-change: scroll-position;\n }\n\n &:after {\n background: rgba(black, 0.4);\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n contain: size layout style paint;\n will-change: opacity, visibility;\n visibility: hidden;\n z-index: 20000;\n transition: opacity 0.3s, visibility step-end 0.3s;\n }\n }\n\n &.push-down-full {\n & > div {\n transition: transform 0.3s, opacity 0.3s, visibility step-end 0.3s;\n visibility: hidden;\n opacity: 0;\n transform: scale(0.9, 0.9) translate3d(0, -15px, 0);\n\n &:after {\n opacity: 1;\n visibility: visible;\n transition: opacity 0.3s, visibility step-start 0.3s;\n }\n }\n }\n\n &.push-down {\n & > div {\n transform: scale(0.95, 0.95) translate3d(0, -10px, 0);\n\n &:after {\n opacity: 1;\n visibility: visible;\n transition: opacity 0.3s, visibility step-start 0.3s;\n }\n }\n }\n\n &.fade-enter-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Decelerated easing\n transition: transform 0.3s cubic-bezier(0.0, 0.0, 0.2, 1), opacity 0.3s;\n }\n }\n\n &.fade-leave-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Accelerated easing\n transition: transform 0.3s cubic-bezier(0.4, 0.0, 1, 1), opacity 0.3s;\n }\n }\n\n &.fade-enter, &.fade-leave-to {\n &:after {\n opacity: 0;\n }\n\n & > div {\n transform: translate(0, 50vh);\n opacity: 0;\n }\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.sheet {\n // DO NOT ADD MAX HEIGHT HERE! Always add it to the children of the navigation controllers!\n // background: rgba(black, 0.7);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n padding: 20px;\n contain: size layout style paint;\n\n .navigation-controller {\n transition: height 0.25s cubic-bezier(0.4, 0.0, 0.2, 1);\n will-change: height;\n }\n\n &:after {\n background: rgba(black, 0.7);\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 1;\n contain: size layout style paint;\n will-change: opacity;\n transition: opacity 0.3s;\n z-index: 0;\n }\n\n ~.sheet:after {\n display: none;\n }\n\n // Improve performance\n\n & > div {\n max-width: 800px;\n background: white;\n background: var(--color-white, white);\n border-radius: 5px;\n\n // Rounded corners need overflow hidden on scroll\n overflow: hidden;\n\n max-height: 100vh;\n max-height: calc(100vh - 80px);\n max-height: calc(var(--vh, 1vh) * 100 - 80px);\n\n overflow: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior-y: contain;\n\n box-sizing: border-box;\n\n --saved-vh: var(--vh, 1vh);\n\n // Fix chrome bug that scrollbars are not visible anymore\n transform: translate3d(0, 0, 0);\n transform-origin: 50% 50%;\n z-index: 1;\n contain: layout style paint;\n will-change: transform, opacity, scroll-position;\n transition: transform 0.3s, opacity 0.3s;\n\n > * {\n --vh: calc(var(--saved-vh, 1vh) - 0.8px);\n }\n }\n\n &.fade-enter-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Decelerated easing\n transition: transform 0.3s cubic-bezier(0.0, 0.0, 0.2, 1), opacity 0.3s;\n }\n }\n\n &.fade-leave-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Accelerated easing\n transition: transform 0.3s cubic-bezier(0.4, 0.0, 1, 1), opacity 0.3s;\n }\n }\n\n &.fade-enter, &.fade-leave-to {\n &:after {\n opacity: 0;\n }\n\n & > div {\n transform: translate(0, 30vh);\n opacity: 0;\n }\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.side-view {\n // DO NOT ADD MAX HEIGHT HERE! Always add it to the children of the navigation controllers!\n background: rgba(black, 0.7);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n z-index: 10000;\n visibility: visible;\n opacity: 1;\n transition: background-color 0.3s, opacity 0.3s, visibility step-start 0.3s;\n\n ~.side-view {\n background-color: rgba(black, 0.4);\n }\n\n // Improve performance\n\n & > div {\n position: fixed;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n max-width: 800px;\n background: white;\n background: var(--color-white, white);\n border-radius: 0px;\n\n // Rounded corners need overflow hidden on scroll\n overflow: hidden;\n\n height: 100%;\n\n overflow: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior-y: contain;\n\n box-sizing: border-box;\n\n // Fix chrome bug that scrollbars are not visible anymore\n transform: translate3d(0, 0, 0);\n\n // Push down\n transition: transform 0.3s, border-radius 0.3s;\n transform-origin: 0% 50%;\n }\n\n &.push-down-full {\n transition: background-color 0.3s, opacity 0.3s, visibility step-end 0.3s;\n visibility: hidden;\n opacity: 0;\n background-color: rgba(black, 0.6);\n\n & > div {\n transform: scale(0.9, 0.9) translate3d(-15px, 0, 0);\n border-radius: 5px;\n }\n }\n\n &.push-down {\n background-color: rgba(black, 0.6);\n\n & > div {\n transform: scale(0.95, 0.95) translate3d(-10px, 0, 0);\n border-radius: 5px;\n }\n }\n\n &.fade-enter-active,\n &.fade-leave-active,\n &[data-extended-enter=\"true\"] {\n position: fixed;\n\n & > div {\n transition: transform 0.3s;\n }\n }\n &.fade-enter, &.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n background-color: rgba(black, 0);\n\n & > div {\n transform: translate(100%, 0);\n }\n }\n\n &.fade-enter-active,\n &.fade-leave-active {\n z-index: 10000;\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.split-view-controller {\n //background: $color-white-shade;\n position: relative;\n width: 100%;\n box-sizing: border-box;\n\n & > .master {\n flex-shrink: 0;\n flex-grow: 0;\n position: sticky;\n left: 0;\n top: 0;\n height: 100vh;\n height: calc(var(--vh, 1vh) * 100);\n\n overflow: hidden;\n overflow-y: scroll;\n -webkit-overflow-scrolling: touch;\n\n // do not start scrolling parents if we reached the edge of this view\n // we'll need to add a polyfill for Safari in JS to disable overscroll (currently not available)\n overscroll-behavior-y: contain;\n\n &:last-child {\n position: relative;\n overflow: visible;\n width: 100%;\n height: auto;\n }\n }\n\n & > .detail {\n /*background: $color-white;\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;*/\n\n // Clip contents (during animations)\n // Sometimes not working on iOS (need to fix)\n // clip-path: inset(0px 0px);\n\n // @extend .style-side-view-shadow;\n }\n\n // Make sure our background color etc fills the whole view\n min-height: 100vh;\n min-height: calc(var(--vh, 1vh) * 100);\n\n &[data-has-detail=\"true\"] {\n display: grid;\n grid-template-columns: 320px 1fr;\n grid-template-columns: var(--split-view-width, 320px) 1fr;\n\n & > .master {\n min-width: 0;\n }\n\n & > .detail {\n min-width: 0;\n min-height: 100vh;\n min-height: calc(var(--vh, 1vh) * 100);\n }\n }\n}\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"main.css","mappings":"AAsoBA,uBAEI,iBACA,kBAIQ,yFAEI,kBACA,YAEA,iGACI,iBACA,sCACA,gBACA,qCAEA,sBAEA,oDACA,4BAIR,yFAEI,kBACA,oBAKA,QACA,SACA,UACA,WACA,eAGA,sBAEA,iGAEI,WACA,YAKJ,gDACI,wBAIR,4CACI,uBAMA,mDACI,qDAIR,uFAEI,kBACA,cACA,oBAKA,QACA,SACA,UACA,WAEA,+FAEI,gBACA,qCACA,WACA,YAIR,uFAEI,kBAIA,+CACI,4BAOZ,0CACI,iBAEA,8CACI,yBAIR,0CACI,iBAGA,sBAEA,8CACI,yBAIR,6EAEI,kBACA,aAEA,qFACI,sBAIR,6EAEI,kBACA,oBAKA,QACA,SACA,UACA,WACA,mBACA,eAIA,qFAEI,WACA,YACA,eACA,sBAIR,sCACI,uBAQA,uCACI,2BAGA,+DAKJ,0CACI,2BAGA,+DAMP,yCACG,iBAGA,uBAEA,6CACI,0BAIR,yCACI,iBAEA,6CACI,0BAIR,2EAEI,kBAEA,mFACI,sBAIR,2EAEI,kBACA,oBAEA,QACA,SACA,UACA,WACA,aAEA,eAEA,mFAEI,WACA,YACA,sBACA,eAIR,kCACI,uBAIA,sCACI,2BAGA,+DAKJ,yCACI,2BAGA,+D;AC3wBhB,WAGI,eACA,OACA,MACA,SACA,QACA,aACA,mBACA,uBACA,cACA,gCAEA,iBACI,0BACA,WACA,kBACA,OACA,MACA,SACA,QACA,UACA,gCACA,oBACA,uBACA,UAGJ,wBACI,aAKJ,eACI,gBACA,gBACA,gBACA,qCACA,kBAGA,gBAEA,iBACA,sCACA,yCAEA,iCACA,8BAEA,sBAEA,gCACA,8BAEA,2BAGA,+BACA,wBAEA,mBACA,+DACA,UACA,kBAEA,qCACI,gBACA,gBAEA,yCACA,YACA,4BAGJ,qBACI,0BACA,WACA,kBACA,OACA,MACA,SACA,QACA,UACA,gCACA,+BACA,kBACA,cACA,+CAKJ,8BACI,6DACA,kBACA,UACA,mDAEA,oCACI,UACA,mBACA,iDAMR,yBACI,qDAEA,+BACI,UACA,mBACA,iDAMR,mCACI,uBAGJ,iCAEI,gEAKJ,mCACI,uBAGJ,iCAEI,gEAKJ,2DACI,UAGJ,uDACI,6BACA,U;ACzJZ,WAEI,0BACA,eACA,OACA,MACA,SACA,QACA,cACA,mBACA,UACA,sEAEA,sBACI,gCAKJ,eACI,eACA,QACA,MACA,SACA,WACA,gBACA,gBACA,qCACA,kBAGA,gBAEA,YAEA,gBACA,gBACA,iCACA,8BAEA,sBAGA,+BAGA,2CACA,wBAGJ,0BACI,oEACA,kBACA,UACA,gCAEA,8BACI,mDACA,kBAIR,qBACI,gCAEA,yBACI,qDACA,kBAIR,+FAGI,eAEA,2GACI,yBAGR,+CACI,+BAEA,uDACI,6BAIR,0DAEI,c;AC7GR,WAGI,eACA,OACA,MACA,SACA,QACA,aACA,mBACA,uBACA,cACA,aACA,gCAEA,kCACI,oDACA,mBAGJ,iBACI,0BACA,WACA,kBACA,OACA,MACA,SACA,QACA,UACA,gCACA,oBACA,uBACA,UAGJ,wBACI,aAKJ,eACI,gBACA,gBACA,qCACA,kBAGA,gBAEA,iBACA,8BACA,6CAEA,gBACA,gBACA,iCACA,8BAEA,sBAEA,2BAGA,+BACA,yBACA,UACA,2BACA,8CACA,qCAEA,iBACI,yCAKJ,mCACI,uBAGJ,iCAEI,gEAKJ,mCACI,uBAGJ,iCAEI,gEAKJ,2DACI,UAGJ,uDACI,6BACA,U;ACQZ,uBAEI,kBACA,WACA,sBAwCA,iBACA,sCAvCA,+BACI,cACA,YACA,gBACA,OACA,MACA,aACA,kCAEA,gBACA,kBACA,iCAIA,8BAEA,0CACI,kBACA,iBACA,WACA,YAoBR,6CACI,aACA,gCACA,yDAEA,qDACI,YAGJ,qDACI,YACA,iBACA,sC","sources":["webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue"],"sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.navigation-controller {\n // Scrolling should happen inside the children!\n overflow: visible;\n position: relative;\n\n > .modal {\n &-push {\n &-enter,\n &-enter-active {\n position: relative;\n z-index: 100;\n \n & > div {\n min-height: 100vh;\n min-height: calc(var(--vh, 1vh) * 100);\n background: white;\n background: var(--color-white, white);\n\n will-change: transform;\n\n transition: transform 0.30s cubic-bezier(0.0, 0.0, 0.2, 1);\n transform: translateY(100vh);\n }\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n pointer-events: none;\n\n // During leave animation, the div inside this container will transition to the left, causing scroll offsets\n // We'll need to ignore these\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n contain: strict;\n\n // Darkness in sync with enter animation\n transition: filter 0.30s;\n\n & > div {\n //overflow: hidden !important;\n width: 100%;\n height: 100%;\n }\n }\n\n &-enter-to {\n & > div {\n transform: translateY(0);\n }\n }\n\n &-leave-to {\n filter: brightness(80%);\n }\n }\n\n &-pop {\n &-leave-active {\n & > div {\n transition: transform 0.25s cubic-bezier(0.4, 0.0, 1, 1);\n }\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n z-index: 10000;\n pointer-events: none;\n\n // During leave animation, the div inside this container will transition to the left, causing scroll offsets\n // We'll need to ignore these\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n\n & > div {\n //overflow: hidden !important;\n background: white;\n background: var(--color-white, white);\n width: 100%;\n height: 100%;\n }\n }\n\n &-enter,\n &-enter-active {\n position: relative;\n }\n\n &-leave-to {\n & > div {\n transform: translateY(100vh);\n }\n }\n }\n }\n\n > .push {\n &-enter-active {\n user-select: none;\n\n & > div {\n transition: transform 0.30s;\n }\n }\n\n &-leave-active {\n user-select: none;\n\n // Darkness in sync with enter animation\n transition: filter 0.30s;\n\n & > div {\n transition: transform 0.30s;\n }\n }\n\n &-enter,\n &-enter-active {\n position: relative;\n z-index: 1000;\n\n & > div {\n will-change: transform;\n }\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n pointer-events: none;\n\n // During leave animation, the div inside this container will transition to the left, causing scroll offsets\n // We'll need to ignore these\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n will-change: filter;\n contain: strict;\n\n // Top, left and bottom will get adjusted\n\n & > div {\n //overflow: hidden !important;\n width: 100%;\n height: 100%;\n contain: strict;\n will-change: transform;\n }\n }\n\n &-leave-to /* .fade-leave-active below version 2.1.8 */ {\n filter: brightness(80%);\n }\n\n /*&-enter, &-leave-to {\n opacity: 0;\n }*/\n\n &-enter {\n & > div {\n transform: translateX(100%);\n\n // RTL support\n transform: translateX(calc(100% * var(--direction-scale-x, 1)));\n }\n }\n\n &-leave-to {\n & > div {\n transform: translateX(-40%);\n\n // RTL support\n transform: translateX(calc(-40% * var(--direction-scale-x, 1)));\n }\n }\n }\n\n > .pop {\n &-enter-active {\n user-select: none;\n\n // Opacity in sync with leave\n transition: filter 0.25s;\n\n & > div {\n transition: transform 0.25s;\n }\n }\n\n &-leave-active {\n user-select: none;\n\n & > div {\n transition: transform 0.25s;\n }\n }\n\n &-enter,\n &-enter-active {\n position: relative;\n\n & > div {\n will-change: transform;\n }\n }\n\n &-leave,\n &-leave-active {\n position: absolute;\n pointer-events: none;\n //overflow: hidden !important;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n z-index: 1000;\n\n contain: strict;\n\n & > div {\n //overflow: hidden !important;\n width: 100%;\n height: 100%;\n will-change: transform;\n contain: strict;\n }\n }\n\n &-enter/*, &-leave-to *//* .fade-leave-active below version 2.1.8 */ {\n filter: brightness(80%);\n }\n\n &-enter {\n & > div {\n transform: translateX(-40%);\n\n // RTL support\n transform: translateX(calc(-40% * var(--direction-scale-x, 1)));\n }\n }\n\n &-leave-to {\n & > div {\n transform: translateX(100%);\n\n // RTL support\n transform: translateX(calc(100% * var(--direction-scale-x, 1)));\n }\n }\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.popup-old {\n // DO NOT ADD MAX HEIGHT HERE! Always add it to the children of the navigation controllers!\n //background: rgba(black, 0.7);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n contain: size layout style paint;\n\n &:after {\n background: rgba(black, 0.7);\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 1;\n contain: size layout style paint;\n will-change: opacity;\n transition: opacity 0.3s;\n z-index: 0;\n }\n\n ~.popup:after {\n display: none;\n }\n\n // Improve performance\n\n & > div {\n max-width: 800px;\n flex-basis: 100%;\n background: white;\n background: var(--color-white, white);\n border-radius: 5px;\n\n // Rounded corners need overflow hidden on scroll\n overflow: hidden;\n\n max-height: 100vh;\n max-height: calc(var(--vh, 1vh) * 100);\n height: calc(var(--vh, 1vh) * 100 - 80px);\n\n -webkit-overflow-scrolling: touch;\n overscroll-behavior-y: contain;\n\n box-sizing: border-box;\n\n contain: size layout style paint;\n will-change: transform, opacity;\n\n --saved-vh: var(--vh, 1vh);\n\n // Fix chrome bug that scrollbars are not visible anymore\n transform: translate3d(0, 0, 0);\n transform-origin: 50% 0%;\n\n visibility: visible;\n transition: transform 0.3s, opacity 0.3s, visibility step-start 0.3s;\n z-index: 1;\n position: relative;\n\n > .scrollable-container {\n overflow: hidden;\n overflow-y: auto;\n // Pass updated vh to children\n --vh: calc(var(--saved-vh, 1vh) - 0.8px);\n height: 100%;\n will-change: scroll-position;\n }\n\n &:after {\n background: rgba(black, 0.4);\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n contain: size layout style paint;\n will-change: opacity, visibility;\n visibility: hidden;\n z-index: 20000;\n transition: opacity 0.3s, visibility step-end 0.3s;\n }\n }\n\n &.push-down-full {\n & > div {\n transition: transform 0.3s, opacity 0.3s, visibility step-end 0.3s;\n visibility: hidden;\n opacity: 0;\n transform: scale(0.9, 0.9) translate3d(0, -15px, 0);\n\n &:after {\n opacity: 1;\n visibility: visible;\n transition: opacity 0.3s, visibility step-start 0.3s;\n }\n }\n }\n\n &.push-down {\n & > div {\n transform: scale(0.95, 0.95) translate3d(0, -10px, 0);\n\n &:after {\n opacity: 1;\n visibility: visible;\n transition: opacity 0.3s, visibility step-start 0.3s;\n }\n }\n }\n\n &.fade-enter-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Decelerated easing\n transition: transform 0.3s cubic-bezier(0.0, 0.0, 0.2, 1), opacity 0.3s;\n }\n }\n\n &.fade-leave-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Accelerated easing\n transition: transform 0.3s cubic-bezier(0.4, 0.0, 1, 1), opacity 0.3s;\n }\n }\n\n &.fade-enter, &.fade-leave-to {\n &:after {\n opacity: 0;\n }\n\n & > div {\n transform: translate(0, 50vh);\n opacity: 0;\n }\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.side-view {\n // DO NOT ADD MAX HEIGHT HERE! Always add it to the children of the navigation controllers!\n background: rgba(black, 0.7);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n z-index: 10000;\n visibility: visible;\n opacity: 1;\n transition: background-color 0.3s, opacity 0.3s, visibility step-start 0.3s;\n\n ~.side-view {\n background-color: rgba(black, 0.4);\n }\n\n // Improve performance\n\n & > div {\n position: fixed;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n max-width: 800px;\n background: white;\n background: var(--color-white, white);\n border-radius: 0px;\n\n // Rounded corners need overflow hidden on scroll\n overflow: hidden;\n\n height: 100%;\n\n overflow: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior-y: contain;\n\n box-sizing: border-box;\n\n // Fix chrome bug that scrollbars are not visible anymore\n transform: translate3d(0, 0, 0);\n\n // Push down\n transition: transform 0.3s, border-radius 0.3s;\n transform-origin: 0% 50%;\n }\n\n &.push-down-full {\n transition: background-color 0.3s, opacity 0.3s, visibility step-end 0.3s;\n visibility: hidden;\n opacity: 0;\n background-color: rgba(black, 0.6);\n\n & > div {\n transform: scale(0.9, 0.9) translate3d(-15px, 0, 0);\n border-radius: 5px;\n }\n }\n\n &.push-down {\n background-color: rgba(black, 0.6);\n\n & > div {\n transform: scale(0.95, 0.95) translate3d(-10px, 0, 0);\n border-radius: 5px;\n }\n }\n\n &.fade-enter-active,\n &.fade-leave-active,\n &[data-extended-enter=\"true\"] {\n position: fixed;\n\n & > div {\n transition: transform 0.3s;\n }\n }\n &.fade-enter, &.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n background-color: rgba(black, 0);\n\n & > div {\n transform: translate(100%, 0);\n }\n }\n\n &.fade-enter-active,\n &.fade-leave-active {\n z-index: 10000;\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.sheet-old {\n // DO NOT ADD MAX HEIGHT HERE! Always add it to the children of the navigation controllers!\n // background: rgba(black, 0.7);\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n padding: 20px;\n contain: size layout style paint;\n\n .navigation-controller {\n transition: height 0.25s cubic-bezier(0.4, 0.0, 0.2, 1);\n will-change: height;\n }\n\n &:after {\n background: rgba(black, 0.7);\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 1;\n contain: size layout style paint;\n will-change: opacity;\n transition: opacity 0.3s;\n z-index: 0;\n }\n\n ~.sheet:after {\n display: none;\n }\n\n // Improve performance\n\n & > div {\n max-width: 800px;\n background: white;\n background: var(--color-white, white);\n border-radius: 5px;\n\n // Rounded corners need overflow hidden on scroll\n overflow: hidden;\n\n max-height: 100vh;\n max-height: calc(100vh - 80px);\n max-height: calc(var(--vh, 1vh) * 100 - 80px);\n\n overflow: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior-y: contain;\n\n box-sizing: border-box;\n\n --saved-vh: var(--vh, 1vh);\n\n // Fix chrome bug that scrollbars are not visible anymore\n transform: translate3d(0, 0, 0);\n transform-origin: 50% 50%;\n z-index: 1;\n contain: layout style paint;\n will-change: transform, opacity, scroll-position;\n transition: transform 0.3s, opacity 0.3s;\n\n > * {\n --vh: calc(var(--saved-vh, 1vh) - 0.8px);\n }\n }\n\n &.fade-enter-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Decelerated easing\n transition: transform 0.3s cubic-bezier(0.0, 0.0, 0.2, 1), opacity 0.3s;\n }\n }\n\n &.fade-leave-active {\n &:after {\n transition: opacity 0.3s;\n }\n\n & > div {\n // Accelerated easing\n transition: transform 0.3s cubic-bezier(0.4, 0.0, 1, 1), opacity 0.3s;\n }\n }\n\n &.fade-enter, &.fade-leave-to {\n &:after {\n opacity: 0;\n }\n\n & > div {\n transform: translate(0, 30vh);\n opacity: 0;\n }\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.split-view-controller {\n //background: $color-white-shade;\n position: relative;\n width: 100%;\n box-sizing: border-box;\n\n & > .master {\n flex-shrink: 0;\n flex-grow: 0;\n position: sticky;\n left: 0;\n top: 0;\n height: 100vh;\n height: calc(var(--vh, 1vh) * 100);\n\n overflow: hidden;\n overflow-y: scroll;\n -webkit-overflow-scrolling: touch;\n\n // do not start scrolling parents if we reached the edge of this view\n // we'll need to add a polyfill for Safari in JS to disable overscroll (currently not available)\n overscroll-behavior-y: contain;\n\n &:last-child {\n position: relative;\n overflow: visible;\n width: 100%;\n height: auto;\n }\n }\n\n & > .detail {\n /*background: $color-white;\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;*/\n\n // Clip contents (during animations)\n // Sometimes not working on iOS (need to fix)\n // clip-path: inset(0px 0px);\n\n // @extend .style-side-view-shadow;\n }\n\n // Make sure our background color etc fills the whole view\n min-height: 100vh;\n min-height: calc(var(--vh, 1vh) * 100);\n\n &[data-has-detail=\"true\"] {\n display: grid;\n grid-template-columns: 320px 1fr;\n grid-template-columns: var(--split-view-width, 320px) 1fr;\n\n & > .master {\n min-width: 0;\n }\n\n & > .detail {\n min-width: 0;\n min-height: 100vh;\n min-height: calc(var(--vh, 1vh) * 100);\n }\n }\n}\n"],"names":[],"sourceRoot":""}
package/dist/main.js CHANGED
@@ -1,2 +1,2 @@
1
- import*as t from"vue";import*as e from"vue-class-component";var n={d:(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},o={};n.d(o,{T3:()=>ComponentWithProperties,mL:()=>a,qT:()=>y,EO:()=>i,_f:()=>Q,J4:()=>S,mU:()=>J,GI:()=>b,yo:()=>M,i_:()=>K,Vl:()=>G,aA:()=>_});const i=new class HistoryManagerStatic{constructor(){this.states=[],this.counter=0,this.active=!1,this.animateHistoryPop=!0,this.isAdjustingState=!1,this.manualStateAction=!1,this.historyQueue=[],this.isQueueRunning=!1}addToQueue(t){this.historyQueue.push(t),this.isQueueRunning||this.runQueue()}runQueue(){this.isQueueRunning=!0;const t=this.historyQueue.shift();t?t().finally((()=>this.runQueue())):this.isQueueRunning=!1}go(t){this.addToQueue((async()=>new Promise((e=>{let n;this.manualStateAction=!0,history.go(t);let o=()=>{clearTimeout(n),e(),window.removeEventListener("popstate",o)};window.addEventListener("popstate",o),n=setTimeout((()=>{console.warn("Timeout while waiting for history.go"),o()}),200)}))))}setUrl(t){if(!this.active)return;ComponentWithProperties.debug&&this.counter;const e=this.states[this.states.length-1].index;this.addToQueue((async()=>{ComponentWithProperties.debug,history.replaceState({counter:e},"",t)})),this.states[this.states.length-1].url=t}pushState(t,e,n){if(!this.active)return;this.counter++,this.states.push({url:t,index:this.counter,adjustHistory:n,undoAction:e});const o=this.counter;n?this.addToQueue((async()=>{ComponentWithProperties.debug,history.pushState({counter:o},"",t)})):this.addToQueue((async()=>{ComponentWithProperties.debug,history.replaceState({counter:o},"",t)})),ComponentWithProperties.debug&&this.states[this.states.length-1]}returnToHistoryIndex(t){if(ComponentWithProperties.debug&&this.counter,t<this.counter){this.counter=t;const e=this.states.splice(this.counter+1).filter((t=>t.adjustHistory)).length;e>0&&(ComponentWithProperties.debug,this.go(-e)),!this.states[this.counter].adjustHistory&&this.states[this.counter].url&&(ComponentWithProperties.debug&&this.states[this.counter].url,this.setUrl(this.states[this.counter].url))}return this.counter}activate(){window.addEventListener("popstate",(t=>{var e;if(ComponentWithProperties.debug,this.isAdjustingState)return void console.warn("Duplicate popstate");if(this.manualStateAction)return void(this.manualStateAction=!1);this.isAdjustingState=!0;const n=null===(e=t.state)||void 0===e?void 0:e.counter;if(void 0!==n)if(n>this.counter){const t=n-this.counter;this.go(-t),ComponentWithProperties.debug}else{const t=this.counter-n==1&&this.animateHistoryPop;this.counter=n;const e=this.states.splice(this.counter+1);for(const n of e.reverse())n.undoAction&&(ComponentWithProperties.debug,n.undoAction(t))}this.isAdjustingState=!1})),this.active=!0,history.replaceState({counter:this.counter},""),this.states.push({index:this.counter,adjustHistory:!1,url:"/"})}};class ComponentWithProperties{constructor(t,e={}){this.key=null,this.type=null,this.hide=!1,this.vnode=null,this.keepAlive=!1,this.isKeptAlive=!1,this.isMounted=!1,this.modalDisplayStyle="cover",this.animated=!0,this.historyIndex=null,this.isContainerView=!1,this.component=t,this.properties=e,this.key=ComponentWithProperties.keyCounter++}clone(){return new ComponentWithProperties(this.component,this.properties)}beforeMount(){ComponentWithProperties.debug&&this.component.name,this.vnode&&(this.isKeptAlive?(this.isKeptAlive=!1,ComponentWithProperties.keepAliveCounter--,ComponentWithProperties.debug&&ComponentWithProperties.keepAliveCounter):(ComponentWithProperties.debug&&console.warn("About to mount a component that was not destroyed properly "+this.component.name),this.destroy(this.vnode))),this.isContainerView?null===this.historyIndex&&(this.historyIndex=i.counter):"overlay"!=this.modalDisplayStyle&&this.assignHistoryIndex()}getHistoryIndex(){if(this.component)return this.historyIndex}mounted(){ComponentWithProperties.debug&&this.component.name,this.isMounted=!0,ComponentWithProperties.ignoreActivate=this}onMountedChildComponent(t){this.isContainerView=!0,ComponentWithProperties.debug&&(this.component.name,t.component.name)}onActivatedChildComponent(t){this.isContainerView=!0,ComponentWithProperties.debug&&(this.component.name,t.component.name)}assignHistoryIndex(){null==this.historyIndex?(ComponentWithProperties.debug&&(this.component.name,i.counter),this.historyIndex=i.counter):this.historyIndex=i.returnToHistoryIndex(this.historyIndex)}activated(){if(ComponentWithProperties.debug&&this.component.name,ComponentWithProperties.ignoreActivate===this)return ComponentWithProperties.debug&&this.component.name,void(ComponentWithProperties.ignoreActivate=null);ComponentWithProperties.ignoreActivate=null,this.isContainerView||"overlay"!=this.modalDisplayStyle&&null!==this.historyIndex&&(this.historyIndex=i.returnToHistoryIndex(this.historyIndex))}componentInstance(){var t;return null===(t=this.vnode)||void 0===t?void 0:t.componentInstance}async shouldNavigateAway(){const t=this.componentInstance();if(t&&t.shouldNavigateAway){const e=t.shouldNavigateAway();if("boolean"==typeof e){if(!e)return!1}else if(e.then&&e.catch){if(!await e)return!1}}return!0}destroy(t){var e;if(this.isMounted=!1,this.vnode){if(t!==this.vnode)return void console.warn("Received destroy event from old/different vnode",this.vnode,t);if(this.keepAlive)return this.keepAlive=!1,void(this.isKeptAlive||(this.isKeptAlive=!0,ComponentWithProperties.keepAliveCounter++,ComponentWithProperties.debug&&this.component.name,ComponentWithProperties.debug&&ComponentWithProperties.keepAliveCounter));this.isKeptAlive&&(this.isKeptAlive=!1,ComponentWithProperties.keepAliveCounter--,ComponentWithProperties.debug&&this.component.name,ComponentWithProperties.debug&&ComponentWithProperties.keepAliveCounter),ComponentWithProperties.debug&&(this.component.name,this.vnode),null===(e=this.vnode.componentInstance)||void 0===e||e.$destroy(),this.vnode=null}}setDisplayStyle(t){return this.modalDisplayStyle=t,this}setAnimated(t){return this.animated=t,this}}ComponentWithProperties.keepAliveCounter=0,ComponentWithProperties.keyCounter=0,ComponentWithProperties.debug=!1,ComponentWithProperties.ignoreActivate=null;const s=(t=>{var e={};return n.d(e,t),e})({default:()=>t.default}),r=s.default.extend({props:{component:ComponentWithProperties},watch:{component(t){throw new Error("Changing component during life is not yet supported")}},created(){this.destroy=!0},beforeMount(){this.component.beforeMount()},activated(){this.component.activated();let t=this.$parent;for(;t;)t instanceof r&&t.component.onActivatedChildComponent(this.component),t=t.$parent},mounted(){this.component.mounted();let t=this.$parent;for(;t;)t instanceof r&&t.component.onMountedChildComponent(this.component),t=t.$parent},destroyed(){var t;this.component.destroy(null===(t=this.$children[0])||void 0===t?void 0:t.$vnode)},render(t){var e,n;if(this.component.vnode)return this.component.component.name,this.component.vnode.componentInstance.$parent=this,this.$children=[this.component.vnode.componentInstance],this.component.vnode;let o={};if(null===(n=null===(e=this.component.component)||void 0===e?void 0:e.options)||void 0===n?void 0:n.props)for(const t in this.component.properties)Object.prototype.hasOwnProperty.call(this.component.properties,t)&&(Object.prototype.hasOwnProperty.call(this.component.component.options.props,t)||(o[t]=this.component.properties[t]));else o=this.component.properties;return this.component.component.options.inheritAttrs=!1,this.component.vnode=t(this.component.component,{props:this.component.properties,attrs:o,key:"component-instance-"+ComponentWithProperties.keyCounter++}),this.component.component.name,this.component.vnode,this.component.vnode.data.keepAlive=!0,this.component.vnode}}),a=r;var l=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("div",{ref:"scrollContainer"},[n("ComponentWithPropertiesInstance",{attrs:{component:t.root}})],1)])};l._withStripped=!0;function p(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}const h=(t=>{var e={};return n.d(e,t),e})({createDecorator:()=>e.createDecorator,default:()=>e.default});var c="undefined"!=typeof Reflect&&void 0!==Reflect.getMetadata;function d(t){return void 0===t&&(t={}),function(e,n){!function(t,e,n){if(c&&!Array.isArray(t)&&"function"!=typeof t&&!t.hasOwnProperty("type")&&void 0===t.type){var o=Reflect.getMetadata("design:type",e,n);o!==Object&&(t.type=o)}}(t,e,n),(0,h.createDecorator)((function(e,n){(e.props||(e.props={}))[n]=t}))(e,n)}}function u(t){return(0,h.createDecorator)((function(e,n){e.computed=e.computed||{},e.computed[n]={cache:!1,get:function(){return this.$refs[t||n]}}}))}let m=class FramedComponent extends s.default{pop(t){this.$emit("pop",t)}push(t){this.$emit("push",t)}};p([d()],m.prototype,"root",void 0),p([u()],m.prototype,"scrollContainer",void 0),m=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],m);function v(t,e,n,o,i,s,r,a){var l,p="function"==typeof t?t.options:t;if(e&&(p.render=e,p.staticRenderFns=n,p._compiled=!0),o&&(p.functional=!0),s&&(p._scopeId="data-v-"+s),r?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},p._ssrRegister=l):i&&(l=a?function(){i.call(this,(p.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(p.functional){p._injectStyles=l;var h=p.render;p.render=function(t,e){return l.call(e),h(t,e)}}else{var c=p.beforeCreate;p.beforeCreate=c?[].concat(c,l):[l]}return{exports:t,options:p}}var f=v(m,l,[],!1,null,null,null);f.options.__file="src/FramedComponent.vue";const y=f.exports;var g=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("NavigationController",{ref:"navigationController",attrs:{"animation-type":"modal",root:t.root},on:{present:t.present}}),t._v(" "),n("StackComponent",{ref:"stackComponent",on:{present:t.present}})],1)};g._withStripped=!0;var C=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"navigation-controller"},[t.mainComponent?n("transition",{attrs:{css:!1},on:{"before-enter":t.beforeEnter,"before-leave":t.beforeLeave,enter:t.enter,leave:t.leave,"after-leave":t.afterLeave,"after-enter":t.afterEnter,"enter-cancelled":t.enterCancelled}},[n("FramedComponent",{key:t.mainComponent.key,ref:"child",attrs:{root:t.mainComponent},on:{push:t.push,show:t.push,pop:t.pop}})],1):t._e()],1)};C._withStripped=!0;let w=class NavigationController extends s.default{constructor(){super(...arguments),this.components=[],this.mainComponent=null,this.transitionName="none",this.savedScrollPositions=[],this.nextScrollPosition=0,this.previousScrollPosition=0,this.nextInternalScrollPosition=0,this.savedInternalScrollPositions=[]}beforeMount(){this.initialComponents&&this.initialComponents.length>0?(this.mainComponent=this.initialComponents[this.initialComponents.length-1],this.components=this.initialComponents.slice(0),this.initialComponents.splice(0,this.initialComponents.length)):(this.mainComponent=this.root,this.components=[this.root])}freezeSize(){const t=this.$el;t.style.width=t.offsetWidth+"px",t.style.height=t.offsetHeight+"px"}growSize(t,e){const n=this.$el;n.style.height=e+"px",n.style.width=t+"px"}unfreezeSize(){const t=this.$el;t.style.width="",t.style.height=""}getInternalScrollElement(t=null){const e=(null!=t?t:this.$el).querySelector("main");return e?this.getScrollElement(e):null}getScrollElement(t=null){t||(t=this.$el);const e=window.getComputedStyle(t);return"scroll"==e.overflowY||"scroll"==e.overflow||"auto"==e.overflow||"auto"==e.overflowY||"overlay"==e.overflow||"overlay"==e.overflowY?t:t.parentElement?this.getScrollElement(t.parentElement):document.documentElement}shouldAnimate(){return this.$el.offsetWidth<=1600}async push(t){var e,n,o,s,r,a;if(0==t.components.length)return void console.error("Missing component when pushing");null===(e=document.activeElement)||void 0===e||e.blur();const l=t.components,p=l[l.length-1],h=null===(n=t.destroy)||void 0===n||n,c=null!==(o=t.force)&&void 0!==o&&o,d=!!this.shouldAnimate()&&(void 0===t.animated?p.animated:t.animated);let u=null!==(s=t.replace)&&void 0!==s?s:0;if(u>this.components.length&&(u=this.components.length),ComponentWithProperties.debug&&p.component.name,u>0&&h&&!c)for(let t=this.components.length-1;t>=this.components.length-u;t--){const e=this.components[t];if(!await e.shouldNavigateAway())return}this.transitionName=d?"modal"==this.animationType?"modal-push":t.reverse?"pop":"push":"none";const m=this.getInternalScrollElement(),v=this.getScrollElement(),f=window;let y=v.clientHeight;v===document.documentElement&&f.visualViewport&&(y=f.visualViewport.height);let g=null==m?void 0:m.clientHeight;if(this.previousScrollPosition=v.scrollTop,this.savedScrollPositions.push(this.previousScrollPosition+y),this.savedInternalScrollPositions.push((null!==(r=null==m?void 0:m.scrollTop)&&void 0!==r?r:0)+(null!=g?g:0)),this.nextScrollPosition=0,this.nextInternalScrollPosition=0,d&&this.freezeSize(),u>0){const t=this.components.splice(this.components.length-u,u,...l);if(!h)for(const e of t)e.keepAlive=!0}else this.components.push(...l);if(this.mainComponent&&(this.mainComponent.keepAlive=!u),this.mainComponent=p,this.$emit("didPush"),0==u&&this)for(let e=0;e<l.length;e++)i.pushState(null==t?void 0:t.url,(t=>{this.pop({animated:d&&t})}),null===(a=null==t?void 0:t.adjustHistory)||void 0===a||a),e<l.length-1&&l[e].assignHistoryIndex()}async shouldNavigateAway(){for(let t=this.components.length-1;t>=0;t--){const e=this.components[t];if(!await e.shouldNavigateAway())return!1}return!0}popToRoot(t={}){return t.count=this.components.length-1,this.pop(t)}getPoppableParent(){let t=this,e=this.$parent;for(;e;){if(t.$listeners.pop)return t;t=e,e=e.$parent}return null}async pop(t={}){var e,n,o,i,s,r,a;null===(e=document.activeElement)||void 0===e||e.blur();const l=!!this.shouldAnimate()&&(null===(n=t.animated)||void 0===n||n),p=null===(o=t.destroy)||void 0===o||o,h=null!==(i=t.count)&&void 0!==i?i:1,c=null!==(s=t.force)&&void 0!==s&&s;if(this.components.length<=h){const e=this.getPoppableParent();return t.count=1,e?void e.$emit("pop",t):(console.error("Tried to pop an empty navigation controller, but couldn't find a parent to pop"),void this.$emit("pop",t))}if(0===h)return;if(p&&!c)for(let t=this.components.length-1;t>=this.components.length-h;t--){const e=this.components[t];if(!await e.shouldNavigateAway())return}this.previousScrollPosition=this.getScrollElement().scrollTop,l?(this.transitionName="modal"==this.animationType?"modal-pop":"pop",this.freezeSize()):this.transitionName="none";const d=this.components.splice(this.components.length-h,h);if(!p)for(const t of d)t.keepAlive=!0;const u=this.getScrollElement(),m=window;let v=u.clientHeight;return u===document.documentElement&&m.visualViewport&&(v=m.visualViewport.height),this.nextScrollPosition=Math.max(0,(null!==(r=this.savedScrollPositions.pop())&&void 0!==r?r:0)-v),this.nextInternalScrollPosition=Math.max(0,null!==(a=this.savedInternalScrollPositions.pop())&&void 0!==a?a:0),this.mainComponent=this.components[this.components.length-1],this.$emit("didPop"),d}beforeEnter(t){"none"!=this.transitionName&&(t.className=this.transitionName+"-enter-active "+this.transitionName+"-enter")}beforeLeave(t){this.transitionName}beforeBeforeEnterAnimation(){if(this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.beforeBeforeEnterAnimation&&t.beforeBeforeEnterAnimation()}}finishedEnterAnimation(){if(this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.finishedEnterAnimation&&t.finishedEnterAnimation()}}enter(t,e){if("none"==this.transitionName){this.getScrollElement().scrollTop=this.nextScrollPosition;const n=this.getInternalScrollElement(t);return n&&(n.scrollTop=Math.max(0,this.nextInternalScrollPosition-n.clientHeight)),void e()}if(this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.beforeBeforeEnterAnimation&&t.beforeBeforeEnterAnimation()}const n=this.getScrollElement(),o=t.firstElementChild.firstElementChild.offsetWidth,i=t.firstElementChild.offsetHeight,s=this.getScrollOuterHeight(n);let r=this.nextScrollPosition;r>i-s&&(r=Math.max(0,i-s),this.nextScrollPosition=r);const a=this.getInternalScrollElement(t);let l=this.nextInternalScrollPosition;if(a){l=Math.max(0,this.nextInternalScrollPosition-a.clientHeight);const t=this.getScrollOuterHeight(a),e=a.scrollHeight;l>e-t&&(l=Math.max(0,e-t))}const p=t.firstElementChild;let h=300;"pop"!==this.transitionName&&"modal-pop"!=this.transitionName||(h=250),"push"!=this.transitionName&&"pop"!=this.transitionName&&"modal-push"!=this.transitionName||(p.style.willChange="transform"),n.scrollTop!==r&&(n.style.willChange="scroll-position"),a&&a.scrollTop!==l&&(a.style.willChange="scroll-position"),this.growSize(o,i),requestAnimationFrame((()=>{if(n.scrollTop=r,a&&(a.scrollTop=l),this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.beforeEnterAnimation&&t.beforeEnterAnimation()}requestAnimationFrame((()=>{if(t.className=this.transitionName+"-enter-active "+this.transitionName+"-enter-to",this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.beginEnterAnimation&&t.beginEnterAnimation()}setTimeout((()=>{if(t.style.willChange="",p.style.willChange="",n.style.willChange="",a&&(a.style.willChange=""),this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.finishedEnterAnimation&&t.finishedEnterAnimation()}e()}),h+25)}))}))}getScrollOuterHeight(t){let e=t.clientHeight;if(t===document.documentElement){const t=window;t.visualViewport&&(e=t.visualViewport.height)}return e}leave(t,e){if("none"==this.transitionName)return void e();const n=this.getScrollElement();let o=this.getScrollOuterHeight(n);const i=t.firstElementChild;i.style.willChange="scroll-position,transform";let s=300;"pop"!==this.transitionName&&"modal-pop"!=this.transitionName||(s=250),requestAnimationFrame((()=>{const n=this.previousScrollPosition,r=this.nextScrollPosition,a=o+"px";t.className=this.transitionName+"-leave-active "+this.transitionName+"-leave",t.style.top=r+"px",t.style.height=a,t.style.bottom="auto",t.style.overflow="hidden",i.style.overflow="hidden",i.style.height=o+"px",i.scrollTop=n,requestAnimationFrame((()=>{t.className=this.transitionName+"-leave-active "+this.transitionName+"-leave-to",setTimeout((()=>{t.style.overflow="",t.style.top="",t.style.height="",t.style.bottom="",i.style.overflow="",i.style.willChange="",e()}),s+25)}))}))}afterLeave(t){"none"!=this.transitionName&&(t.className="")}afterEnter(t){"none"!=this.transitionName&&(this.unfreezeSize(),t.className="")}enterCancelled(t){this.unfreezeSize()}destroyed(){for(const t of this.components)t.isKeptAlive&&t.destroy(t.vnode);this.components=[],this.mainComponent=null}};p([d()],w.prototype,"root",void 0),p([d({default:null})],w.prototype,"initialComponents",void 0),p([d({default:"default"})],w.prototype,"animationType",void 0),p([u()],w.prototype,"child",void 0),w=p([(0,h.default)({components:{FramedComponent:y}})],w);var P=v(w,C,[],!1,null,null,null);P.options.__file="src/NavigationController.vue";const S=P.exports;var A=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{appear:t.shouldAppear,name:"fade",duration:300}},[n("div",{staticClass:"popup",class:{"push-down":1==t.pushDown,"push-down-full":t.pushDown>1},on:{click:t.onClick}},[n("div",{ref:"mainContent"},[n("div",{staticClass:"scrollable-container"},[n("ComponentWithPropertiesInstance",{key:t.root.key,attrs:{component:t.root},on:{pop:t.dismiss}})],1)])])])};A._withStripped=!0;let k=class ModalMixin extends s.default{get modalStackComponent(){let t=this.$parent;for(;t;){if(t instanceof Q)return t;t=t.$parent}return null}pop(t={}){const e=this.getPoppableParent();e?e.$listeners.pop?e.$emit("pop",t):console.error("Couldn't pop. Failed"):console.warn("No navigation controller to pop")}getPoppableParent(){let t=this,e=this.$parent;for(;e;){if(t.$listeners.pop)return t;t=e,e=e.$parent}return null}};var x;k=p([h.default],k);let E=x=class Popup extends k{get shouldAppear(){return this.root.animated}get pushDown(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components.filter((t=>t.component===x)))&&void 0!==n?n:[];return o.length>0&&o[o.length-1].componentInstance()!==this?o.length>1&&o[o.length-2].componentInstance()===this?1:2:0}get isFocused(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components)&&void 0!==n?n:[];return!(o.length>0&&o[o.length-1].componentInstance()!==this)}onClick(t){const e=this.$refs.mainContent;e&&!e.contains(t.target)&&document.body.contains(t.target)&&(this.dismiss(),t.preventDefault())}activated(){document.addEventListener("keydown",this.onKey)}deactivated(){document.removeEventListener("keydown",this.onKey)}async dismiss(t){var e,n,o;if(!(null==t?void 0:t.force)){if(!await this.shouldNavigateAway())return!1}const s=null!==(o=null===(n=null===(e=this.modalStackComponent)||void 0===e?void 0:e.stackComponent)||void 0===n?void 0:n.components.filter((t=>"overlay"!==t.modalDisplayStyle)))&&void 0!==o?o:[];if(0===s.length||s[s.length-1].componentInstance()===this){const t=this.root.getHistoryIndex();null!=t&&i.returnToHistoryIndex(t-1)}this.pop(t)}onKey(t){if(t.defaultPrevented||t.repeat)return;if(!this.isFocused)return;const e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||(this.dismiss(),t.preventDefault())}shouldNavigateAway(){return this.root.shouldNavigateAway()}};p([d({required:!0})],E.prototype,"root",void 0),E=x=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],E);var I=v(E,A,[],!1,null,null,null);I.options.__file="src/Popup.vue";const b=I.exports;var $=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",t._l(t.components,(function(e,o){return n("ComponentWithPropertiesInstance",{key:e.key,ref:"children",refInFor:!0,attrs:{component:e},on:{pop:function(n){return t.removeAt(o,e.key)}}})})),1)};$._withStripped=!0;let W=class StackComponent extends s.default{constructor(){super(...arguments),this.components=[]}show(t){this.components.push(t)}removeAt(t,e){if(!this.components[t])for(const[n,o]of this.components.entries())if(o.key===e){console.warn("Corrected index from "+t+" to "+n),t=n;break}void 0!==this.components[t]&&this.components[t].key===e?this.components.splice(t,1):console.warn("Expected component with key "+e+" at index"+t)}beforeDestroy(){this.components=[]}};W=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],W);var N=v(W,$,[],!1,null,null,null);N.options.__file="src/StackComponent.vue";const _=N.exports;var D=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{appear:t.shouldAppear,name:"fade",duration:300}},[n("div",{staticClass:"sheet",on:{click:t.onClick}},[n("div",{ref:"mainContent"},[n("ComponentWithPropertiesInstance",{key:t.root.key,attrs:{component:t.root},on:{pop:t.dismiss}})],1)])])};D._withStripped=!0;let T=class Sheet extends k{get shouldAppear(){return this.root.animated}onClick(t){const e=this.$refs.mainContent;e&&!e.contains(t.target)&&document.body.contains(t.target)&&(this.dismiss(),t.preventDefault())}activated(){document.addEventListener("keydown",this.onKey)}deactivated(){document.removeEventListener("keydown",this.onKey)}get isFocused(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components)&&void 0!==n?n:[];return!(o.length>0&&o[o.length-1].componentInstance()!==this)}async dismiss(t){var e,n,o;if(!(null==t?void 0:t.force)){if(!await this.shouldNavigateAway())return!1}const s=null!==(o=null===(n=null===(e=this.modalStackComponent)||void 0===e?void 0:e.stackComponent)||void 0===n?void 0:n.components.filter((t=>"overlay"!==t.modalDisplayStyle)))&&void 0!==o?o:[];if(0===s.length||s[s.length-1].componentInstance()===this){const t=this.root.getHistoryIndex();null!=t&&i.returnToHistoryIndex(t-1)}this.pop(t)}onKey(t){if(t.defaultPrevented||t.repeat)return;if(!this.isFocused)return;const e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||(this.dismiss(),t.preventDefault())}shouldNavigateAway(){return this.root.shouldNavigateAway()}};p([d({required:!0})],T.prototype,"root",void 0),T=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],T);var H=v(T,D,[],!1,null,null,null);H.options.__file="src/Sheet.vue";const M=H.exports;var z,F=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{appear:t.shouldAppear,name:"fade"}},[n("div",{staticClass:"side-view",class:{"push-down":1==t.pushDown,"push-down-full":t.pushDown>1},on:{mousedown:t.dismiss,touchdown:t.dismiss}},[n("div",{on:{mousedown:function(t){t.stopPropagation()},touchdown:function(t){t.stopPropagation()}}},[n("ComponentWithPropertiesInstance",{key:t.root.key,attrs:{component:t.root},on:{pop:t.dismiss}})],1)])])};F._withStripped=!0;const O=window.visualViewport;let V=z=class SideView extends k{get shouldAppear(){return this.root.animated}get pushDown(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components.filter((t=>t.component===z)))&&void 0!==n?n:[];return o.length>0&&o[o.length-1].componentInstance()!==this?o.length>1&&o[o.length-2].componentInstance()===this?1:2:0}get isFocused(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components)&&void 0!==n?n:[];return!(o.length>0&&o[o.length-1].componentInstance()!==this)}activated(){document.addEventListener("keydown",this.onKey),this.resize(),O&&O.addEventListener("resize",this.resize)}deactivated(){document.removeEventListener("keydown",this.onKey),O&&O.removeEventListener("resize",this.resize)}async dismiss(t){var e,n,o;if(!(null==t?void 0:t.force)){if(!await this.shouldNavigateAway())return!1}const s=null!==(o=null===(n=null===(e=this.modalStackComponent)||void 0===e?void 0:e.stackComponent)||void 0===n?void 0:n.components.filter((t=>"overlay"!==t.modalDisplayStyle)))&&void 0!==o?o:[];if(0===s.length||s[s.length-1].componentInstance()===this){const t=this.root.getHistoryIndex();null!=t&&i.returnToHistoryIndex(t-1)}this.pop(t)}resize(){}onKey(t){if(t.defaultPrevented||t.repeat)return;if(!this.isFocused)return;const e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||(this.dismiss(),t.preventDefault())}shouldNavigateAway(){return this.root.shouldNavigateAway()}};p([d({required:!0})],V.prototype,"root",void 0),V=z=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],V);var j=v(V,F,[],!1,null,null,null);j.options.__file="src/SideView.vue";const K=j.exports;let L=class ModalStackComponent extends s.default{present(t){var e,n,o,s,r;const a=t.components[t.components.length-1];void 0!==t.animated&&(a.animated=t.animated);const l=null!==(n=null!==(e=t.modalDisplayStyle)&&void 0!==e?e:a.modalDisplayStyle)&&void 0!==n?n:"cover";if(a.setDisplayStyle(l),"popup"===l&&this.$el.offsetWidth>800){const e=new ComponentWithProperties(b,{root:a});return i.pushState(null==t?void 0:t.url,(t=>{var n;null===(n=e.componentInstance())||void 0===n||n.pop({animated:t})}),null===(o=null==t?void 0:t.adjustHistory)||void 0===o||o),void this.stackComponent.show(e)}if("sheet"===l&&this.$el.offsetWidth>700){const e=new ComponentWithProperties(M,{root:a});return i.pushState(null==t?void 0:t.url,(t=>{var n;null===(n=e.componentInstance())||void 0===n||n.pop({animated:t})}),null===(s=null==t?void 0:t.adjustHistory)||void 0===s||s),void this.stackComponent.show(e)}if("side-view"===l&&this.$el.offsetWidth>800){const e=new ComponentWithProperties(K,{root:a});return i.pushState(null==t?void 0:t.url,(t=>{var n;null===(n=e.componentInstance())||void 0===n||n.pop({animated:t})}),null===(r=null==t?void 0:t.adjustHistory)||void 0===r||r),void this.stackComponent.show(e)}"overlay"!==l?this.$refs.navigationController.push(t):this.stackComponent.show(a)}replace(t,e=!0){const n=this.$refs.navigationController;n.push({components:[t],animated:e,replace:n.components.length})}};p([d()],L.prototype,"root",void 0),p([u()],L.prototype,"stackComponent",void 0),L=p([(0,h.default)({components:{NavigationController:S,StackComponent:_}})],L);var R=v(L,g,[],!1,null,null,null);R.options.__file="src/ModalStackComponent.vue";const Q=R.exports;var q=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"split-view-controller",attrs:{"data-has-detail":t.detail?"true":"false"}},[n("div",{ref:"masterElement",staticClass:"master"},[n("NavigationController",{ref:"navigationController",attrs:{root:t.root},on:{showDetail:t.showDetail}})],1),t._v(" "),t.detail?n("div",{staticClass:"detail"},[n("FramedComponent",{key:t.detail.key,ref:"detailFrame",attrs:{root:t.detail}})],1):t._e()])};q._withStripped=!0;const U=(t,e)=>{let n,o;return function(){const i=this,s=arguments;o?(clearTimeout(n),n=setTimeout((function(){Date.now()-o>=e&&(t.apply(i,s),o=Date.now())}),e-(Date.now()-o))):(t.apply(i,s),o=Date.now())}};let B=class SplitViewController extends s.default{constructor(){super(...arguments),this.detail=null,this.detailKey=null}activated(){this.listener=U(this.onResize,100),window.addEventListener("resize",this.listener,{passive:!0}),this.onResize()}mounted(){this.detailWidth&&this.$el.style.setProperty("--split-view-width",this.detailWidth)}deactivated(){window.removeEventListener("resize",this.listener,{passive:!0})}beforeDestroy(){window.removeEventListener("resize",this.listener,{passive:!0})}onResize(){this.shouldCollapse()?this.detail&&this.collapse():this.lastIsDetail&&!this.detail&&this.expand()}get lastIsDetail(){var t,e;return null!=this.detailKey&&(null===(e=null===(t=this.$refs.navigationController)||void 0===t?void 0:t.mainComponent)||void 0===e?void 0:e.key)==this.detailKey}getScrollElement(t=null){t||(t=this.$el);const e=window.getComputedStyle(t);return"scroll"==e.overflowY||"scroll"==e.overflow||"auto"==e.overflow||"auto"==e.overflowY?t:t.parentElement?this.getScrollElement(t.parentElement):document.documentElement}async shouldNavigateAway(){if(this.detail){if(!await this.detail.shouldNavigateAway())return!1}return!this.navigationController||await this.navigationController.shouldNavigateAway()}async showDetail(t){const e=t.components[t.components.length-1];if(this.detailKey=e.key,this.shouldCollapse()){if(this.lastIsDetail||this.detail)return console.error("Pusing a detail when a detail is already presented is not allowed"),!1;this.navigationController.push(t)}else{if(this.detail){if(!await this.detail.shouldNavigateAway())return!1}this.getScrollElement().scrollTop=0,this.detail=e}return!0}shouldCollapse(){return this.$el.offsetWidth<850}collapse(){if(!this.navigationController)return void console.error("Cannot collapse without navigation controller");if(this.lastIsDetail)return void console.error("Cannot collapse when the detail is already collaped");if(!this.detail)return void console.error("Cannot collapse without detail");this.detail.keepAlive=!0;const t=this.detail;this.detail=null,this.navigationController.push({components:[t],animated:!1})}async expand(){if(!this.navigationController)return void console.error("Cannot expand without navigation controller");if(this.detail)return void console.error("Cannot expand when detail is already visible");if(!this.lastIsDetail)return void console.error("Cannot expand when there is no detail");const t=await this.navigationController.pop({animated:!1,destroy:!1});t&&0!=t.length&&this.$nextTick((()=>{this.detail=t[0]}))}};p([d()],B.prototype,"root",void 0),p([d()],B.prototype,"detailWidth",void 0),p([u()],B.prototype,"navigationController",void 0),p([u()],B.prototype,"masterElement",void 0),B=p([(0,h.default)({components:{NavigationController:S,FramedComponent:y}})],B);var Y=v(B,q,[],!1,null,null,null);Y.options.__file="src/SplitViewController.vue";const G=Y.exports;let J=class NavigationMixin extends s.default{constructor(){super(...arguments),this.canPop=!1,this.canDismiss=!1}emitParents(t,e){let n=this.$parent;for(;n;){if(n.$listeners[t])return void n.$emit(t,e);n=n.$parent}console.warn("No handlers found for event "+t)}show(t){t.components?this.emitParents("show",t):this.emitParents("show",{components:[t]})}present(t){t.components?this.emitParents("present",t):this.emitParents("present",{components:[t]})}showDetail(t){t.components?this.emitParents("showDetail",t):this.emitParents("showDetail",{components:[t]})}pop(t={}){const e=this.getPoppableParent();e?e.$listeners.pop?e.$emit("pop",t):console.error("Couldn't pop. Failed"):console.warn("No navigation controller to pop")}dismiss(t={}){const e=this.modalOrPopup;if(e){if(e instanceof M||e instanceof b||e instanceof K)return void e.dismiss(t);e.pop(t)}else console.warn("Tried to dismiss without being displayed as a modal. Use pop instead"),this.pop(t)}get navigationController(){let t=this.$parent;for(;t;){if(t instanceof S)return t;t=t.$parent}return null}get modalOrPopup(){let t=this.$parent;for(;t;){if(t instanceof S&&"modal"==t.animationType)return t;if(t instanceof M)return t;if(t instanceof b)return t;if(t instanceof K)return t;t=t.$parent}return null}get modalNavigationController(){let t=this.$parent;for(;t;){if(t instanceof S&&"modal"==t.animationType)return t;t=t.$parent}return null}get splitViewController(){let t=this.$parent;for(;t;){if(t instanceof G)return t;t=t.$parent}return null}getPoppableParent(){let t=this,e=this.$parent;for(;e;){if(t.$listeners.pop)return t;t=e,e=e.$parent}return null}activated(){s.default.set(this,"canPop",this.calculateCanPop()),s.default.set(this,"canDismiss",this.calculateCanDismiss())}beforeMount(){s.default.set(this,"canPop",this.calculateCanPop()),s.default.set(this,"canDismiss",this.calculateCanDismiss())}getPoppableNavigationController(){let t=this.$parent;for(;t;){if(t instanceof S){if("modal"==t.animationType)return null;if(t.components.length>1)return t}t=t.$parent}return null}isFocused(){const t=this.modalOrPopup;return!(t instanceof b||t instanceof M||t instanceof K)||!!t.isFocused}calculateCanPop(){return null!=this.getPoppableNavigationController()}calculateCanDismiss(){const t=this.modalOrPopup;return null!==t&&!(t instanceof S&&t.components.length<=1)}};J=p([h.default],J);var X=o.T3,Z=o.mL,tt=o.qT,et=o.EO,nt=o._f,ot=o.J4,it=o.mU,st=o.GI,rt=o.yo,at=o.i_,lt=o.Vl,pt=o.aA;export{X as ComponentWithProperties,Z as ComponentWithPropertiesInstance,tt as FramedComponent,et as HistoryManager,nt as ModalStackComponent,ot as NavigationController,it as NavigationMixin,st as Popup,rt as Sheet,at as SideView,lt as SplitViewController,pt as StackComponent};
1
+ import*as t from"vue";import*as e from"vue-class-component";var n={d:(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},o={};n.d(o,{T3:()=>ComponentWithProperties,mL:()=>a,qT:()=>y,EO:()=>i,_f:()=>K,J4:()=>S,mU:()=>X,GI:()=>I,yo:()=>Q,i_:()=>T,Vl:()=>J,aA:()=>F});const i=new class HistoryManagerStatic{constructor(){this.states=[],this.counter=0,this.active=!1,this.animateHistoryPop=!0,this.isAdjustingState=!1,this.manualStateAction=!1,this.historyQueue=[],this.isQueueRunning=!1}addToQueue(t){this.historyQueue.push(t),this.isQueueRunning||this.runQueue()}runQueue(){this.isQueueRunning=!0;const t=this.historyQueue.shift();t?t().finally((()=>this.runQueue())):this.isQueueRunning=!1}go(t){this.addToQueue((async()=>new Promise((e=>{let n;this.manualStateAction=!0,history.go(t);let o=()=>{clearTimeout(n),e(),window.removeEventListener("popstate",o)};window.addEventListener("popstate",o),n=setTimeout((()=>{console.warn("Timeout while waiting for history.go"),o()}),200)}))))}setUrl(t){if(!this.active)return;ComponentWithProperties.debug&&this.counter;const e=this.states[this.states.length-1].index;this.addToQueue((async()=>{ComponentWithProperties.debug,history.replaceState({counter:e},"",t)})),this.states[this.states.length-1].url=t}pushState(t,e,n){if(!this.active)return;this.counter++,this.states.push({url:t,index:this.counter,adjustHistory:n,undoAction:e});const o=this.counter;n?this.addToQueue((async()=>{ComponentWithProperties.debug,history.pushState({counter:o},"",t)})):this.addToQueue((async()=>{ComponentWithProperties.debug,history.replaceState({counter:o},"",t)})),ComponentWithProperties.debug&&this.states[this.states.length-1]}returnToHistoryIndex(t){if(ComponentWithProperties.debug&&this.counter,t<this.counter){this.counter=t;const e=this.states.splice(this.counter+1).filter((t=>t.adjustHistory)).length;e>0&&(ComponentWithProperties.debug,this.go(-e)),!this.states[this.counter].adjustHistory&&this.states[this.counter].url&&(ComponentWithProperties.debug&&this.states[this.counter].url,this.setUrl(this.states[this.counter].url))}return this.counter}activate(){window.addEventListener("popstate",(t=>{var e;if(ComponentWithProperties.debug,this.isAdjustingState)return void console.warn("Duplicate popstate");if(this.manualStateAction)return void(this.manualStateAction=!1);this.isAdjustingState=!0;const n=null===(e=t.state)||void 0===e?void 0:e.counter;if(void 0!==n)if(n>this.counter){const t=n-this.counter;this.go(-t),ComponentWithProperties.debug}else{const t=this.counter-n==1&&this.animateHistoryPop;this.counter=n;const e=this.states.splice(this.counter+1);for(const n of e.reverse())n.undoAction&&(ComponentWithProperties.debug,n.undoAction(t))}this.isAdjustingState=!1})),this.active=!0,history.replaceState({counter:this.counter},""),this.states.push({index:this.counter,adjustHistory:!1,url:"/"})}};class ComponentWithProperties{constructor(t,e={}){this.key=null,this.type=null,this.hide=!1,this.vnode=null,this.keepAlive=!1,this.isKeptAlive=!1,this.isMounted=!1,this.modalDisplayStyle="cover",this.animated=!0,this.historyIndex=null,this.isContainerView=!1,this.component=t,this.properties=e,this.key=ComponentWithProperties.keyCounter++}clone(){return new ComponentWithProperties(this.component,this.properties)}beforeMount(){ComponentWithProperties.debug&&this.component.name,this.vnode&&(this.isKeptAlive?(this.isKeptAlive=!1,ComponentWithProperties.keepAliveCounter--,ComponentWithProperties.debug&&ComponentWithProperties.keepAliveCounter):(ComponentWithProperties.debug&&console.warn("About to mount a component that was not destroyed properly "+this.component.name),this.destroy(this.vnode))),this.isContainerView?null===this.historyIndex&&(this.historyIndex=i.counter):"overlay"!=this.modalDisplayStyle&&this.assignHistoryIndex()}getHistoryIndex(){if(this.component)return this.historyIndex}mounted(){ComponentWithProperties.debug&&this.component.name,this.isMounted=!0,ComponentWithProperties.ignoreActivate=this}onMountedChildComponent(t){this.isContainerView=!0,ComponentWithProperties.debug&&(this.component.name,t.component.name)}onActivatedChildComponent(t){this.isContainerView=!0,ComponentWithProperties.debug&&(this.component.name,t.component.name)}assignHistoryIndex(){null==this.historyIndex?(ComponentWithProperties.debug&&(this.component.name,i.counter),this.historyIndex=i.counter):this.historyIndex=i.returnToHistoryIndex(this.historyIndex)}activated(){if(ComponentWithProperties.debug&&this.component.name,ComponentWithProperties.ignoreActivate===this)return ComponentWithProperties.debug&&this.component.name,void(ComponentWithProperties.ignoreActivate=null);ComponentWithProperties.ignoreActivate=null,this.isContainerView||"overlay"!=this.modalDisplayStyle&&null!==this.historyIndex&&(this.historyIndex=i.returnToHistoryIndex(this.historyIndex))}componentInstance(){var t;return null===(t=this.vnode)||void 0===t?void 0:t.componentInstance}async shouldNavigateAway(){const t=this.componentInstance();if(t&&t.shouldNavigateAway){const e=t.shouldNavigateAway();if("boolean"==typeof e){if(!e)return!1}else if(e.then&&e.catch){if(!await e)return!1}}return!0}destroy(t){var e;if(this.isMounted=!1,this.vnode){if(t!==this.vnode)return void console.warn("Received destroy event from old/different vnode",this.vnode,t);if(this.keepAlive)return this.keepAlive=!1,void(this.isKeptAlive||(this.isKeptAlive=!0,ComponentWithProperties.keepAliveCounter++,ComponentWithProperties.debug&&this.component.name,ComponentWithProperties.debug&&ComponentWithProperties.keepAliveCounter));this.isKeptAlive&&(this.isKeptAlive=!1,ComponentWithProperties.keepAliveCounter--,ComponentWithProperties.debug&&this.component.name,ComponentWithProperties.debug&&ComponentWithProperties.keepAliveCounter),ComponentWithProperties.debug&&(this.component.name,this.vnode),null===(e=this.vnode.componentInstance)||void 0===e||e.$destroy(),this.vnode=null}}setDisplayStyle(t){return this.modalDisplayStyle=t,this}setAnimated(t){return this.animated=t,this}}ComponentWithProperties.keepAliveCounter=0,ComponentWithProperties.keyCounter=0,ComponentWithProperties.debug=!1,ComponentWithProperties.ignoreActivate=null;const s=(t=>{var e={};return n.d(e,t),e})({default:()=>t.default}),r=s.default.extend({props:{component:ComponentWithProperties},watch:{component(t){throw new Error("Changing component during life is not yet supported")}},created(){this.destroy=!0},beforeMount(){this.component.beforeMount()},activated(){this.component.activated();let t=this.$parent;for(;t;)t instanceof r&&t.component.onActivatedChildComponent(this.component),t=t.$parent},mounted(){this.component.mounted();let t=this.$parent;for(;t;)t instanceof r&&t.component.onMountedChildComponent(this.component),t=t.$parent},destroyed(){var t;this.component.destroy(null===(t=this.$children[0])||void 0===t?void 0:t.$vnode)},render(t){var e,n;if(this.component.vnode)return this.component.component.name,this.component.vnode.componentInstance.$parent=this,this.$children=[this.component.vnode.componentInstance],this.component.vnode;let o={};if(null===(n=null===(e=this.component.component)||void 0===e?void 0:e.options)||void 0===n?void 0:n.props)for(const t in this.component.properties)Object.prototype.hasOwnProperty.call(this.component.properties,t)&&(Object.prototype.hasOwnProperty.call(this.component.component.options.props,t)||(o[t]=this.component.properties[t]));else o=this.component.properties;return this.component.component.options.inheritAttrs=!1,this.component.vnode=t(this.component.component,{props:this.component.properties,attrs:o,key:"component-instance-"+ComponentWithProperties.keyCounter++}),this.component.component.name,this.component.vnode,this.component.vnode.data.keepAlive=!0,this.component.vnode}}),a=r;var l=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("div",{ref:"scrollContainer"},[n("ComponentWithPropertiesInstance",{attrs:{component:t.root}})],1)])};l._withStripped=!0;function p(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}const h=(t=>{var e={};return n.d(e,t),e})({createDecorator:()=>e.createDecorator,default:()=>e.default});var c="undefined"!=typeof Reflect&&void 0!==Reflect.getMetadata;function d(t){return void 0===t&&(t={}),function(e,n){!function(t,e,n){if(c&&!Array.isArray(t)&&"function"!=typeof t&&!t.hasOwnProperty("type")&&void 0===t.type){var o=Reflect.getMetadata("design:type",e,n);o!==Object&&(t.type=o)}}(t,e,n),(0,h.createDecorator)((function(e,n){(e.props||(e.props={}))[n]=t}))(e,n)}}function u(t){return(0,h.createDecorator)((function(e,n){e.computed=e.computed||{},e.computed[n]={cache:!1,get:function(){return this.$refs[t||n]}}}))}let m=class FramedComponent extends s.default{pop(t){this.$emit("pop",t)}push(t){this.$emit("push",t)}};p([d()],m.prototype,"root",void 0),p([u()],m.prototype,"scrollContainer",void 0),m=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],m);function v(t,e,n,o,i,s,r,a){var l,p="function"==typeof t?t.options:t;if(e&&(p.render=e,p.staticRenderFns=n,p._compiled=!0),o&&(p.functional=!0),s&&(p._scopeId="data-v-"+s),r?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},p._ssrRegister=l):i&&(l=a?function(){i.call(this,(p.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(p.functional){p._injectStyles=l;var h=p.render;p.render=function(t,e){return l.call(e),h(t,e)}}else{var c=p.beforeCreate;p.beforeCreate=c?[].concat(c,l):[l]}return{exports:t,options:p}}var f=v(m,l,[],!1,null,null,null);f.options.__file="src/FramedComponent.vue";const y=f.exports;var g=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("NavigationController",{ref:"navigationController",attrs:{"animation-type":"modal",root:t.root,initialComponents:t.initialComponents},on:{present:t.present}}),t._v(" "),n("StackComponent",{ref:"stackComponent",on:{present:t.present}})],1)};g._withStripped=!0;var C=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"navigation-controller"},[t.mainComponent?n("transition",{attrs:{css:!1},on:{"before-enter":t.beforeEnter,"before-leave":t.beforeLeave,enter:t.enter,leave:t.leave,"after-leave":t.afterLeave,"after-enter":t.afterEnter,"enter-cancelled":t.enterCancelled}},[n("FramedComponent",{key:t.mainComponent.key,ref:"child",attrs:{root:t.mainComponent},on:{push:t.push,show:t.push,pop:t.pop}})],1):t._e()],1)};C._withStripped=!0;let w=class NavigationController extends s.default{constructor(){super(...arguments),this.components=[],this.mainComponent=null,this.transitionName="none",this.savedScrollPositions=[],this.nextScrollPosition=0,this.previousScrollPosition=0,this.nextInternalScrollPosition=0,this.savedInternalScrollPositions=[]}beforeMount(){this.initialComponents&&this.initialComponents.length>0?(this.mainComponent=this.initialComponents[this.initialComponents.length-1],this.components=this.initialComponents.slice(0),this.initialComponents.splice(0,this.initialComponents.length)):(this.mainComponent=this.root,this.components=[this.root])}freezeSize(){const t=this.$el,e=t.offsetWidth,n=t.offsetHeight;t.style.width=e+"px",t.style.height=n+"px"}growSize(t,e){const n=this.$el;n.style.height=e+"px",n.style.width=t+"px"}unfreezeSize(){const t=this.$el;t.style.width="",t.style.height=""}getInternalScrollElement(t=null){const e=(null!=t?t:this.$el).querySelector("main");return e||null}getScrollElement(t=null){return document.documentElement}shouldAnimate(){return this.$el.offsetWidth<=1e3&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches}async push(t){var e,n,o,s,r,a;if(0==t.components.length)return void console.error("Missing component when pushing");null===(e=document.activeElement)||void 0===e||e.blur();const l=t.components,p=l[l.length-1],h=null===(n=t.destroy)||void 0===n||n,c=null!==(o=t.force)&&void 0!==o&&o,d=!!this.shouldAnimate()&&(void 0===t.animated?p.animated:t.animated);let u=null!==(s=t.replace)&&void 0!==s?s:0;if(u>this.components.length&&(u=this.components.length),ComponentWithProperties.debug&&p.component.name,u>0&&h&&!c)for(let t=this.components.length-1;t>=this.components.length-u;t--){const e=this.components[t];if(!await e.shouldNavigateAway())return}this.transitionName=d?"modal"==this.animationType?"modal-push":t.reverse?"pop":"push":"none";const m=this.getInternalScrollElement(),v=this.getScrollElement(),f=window;let y=v.clientHeight;v===document.documentElement&&f.visualViewport&&(y=f.visualViewport.height);let g=null==m?void 0:m.clientHeight;if(this.previousScrollPosition=0,this.savedScrollPositions.push(this.previousScrollPosition+y),this.savedInternalScrollPositions.push((null!==(r=null==m?void 0:m.scrollTop)&&void 0!==r?r:0)+(null!=g?g:0)),this.nextScrollPosition=0,this.nextInternalScrollPosition=0,d&&this.freezeSize(),u>0){const t=this.components.splice(this.components.length-u,u,...l);if(!h)for(const e of t)e.keepAlive=!0}else this.components.push(...l);if(this.mainComponent&&(this.mainComponent.keepAlive=!u),this.mainComponent=p,this.$emit("didPush"),0==u&&this)for(let e=0;e<l.length;e++)i.pushState(null==t?void 0:t.url,(t=>{this.pop({animated:d&&t})}),null===(a=null==t?void 0:t.adjustHistory)||void 0===a||a),e<l.length-1&&l[e].assignHistoryIndex()}async shouldNavigateAway(){for(let t=this.components.length-1;t>=0;t--){const e=this.components[t];if(!await e.shouldNavigateAway())return!1}return!0}popToRoot(t={}){return t.count=this.components.length-1,this.pop(t)}getPoppableParent(){let t=this,e=this.$parent;for(;e;){if(t.$listeners.pop)return t;t=e,e=e.$parent}return null}async pop(t={}){var e,n,o,i,s,r;null===(e=document.activeElement)||void 0===e||e.blur();const a=!!this.shouldAnimate()&&(null===(n=t.animated)||void 0===n||n),l=null===(o=t.destroy)||void 0===o||o,p=null!==(i=t.count)&&void 0!==i?i:1,h=null!==(s=t.force)&&void 0!==s&&s;if(this.components.length<=p){const e=this.getPoppableParent();return t.count=1,e?void e.$emit("pop",t):(console.error("Tried to pop an empty navigation controller, but couldn't find a parent to pop"),void this.$emit("pop",t))}if(0===p)return;if(l&&!h)for(let t=this.components.length-1;t>=this.components.length-p;t--){const e=this.components[t];if(!await e.shouldNavigateAway())return}this.previousScrollPosition=0,a?(this.transitionName="modal"==this.animationType?"modal-pop":"pop",this.freezeSize()):this.transitionName="none";const c=this.components.splice(this.components.length-p,p);if(!l)for(const t of c)t.keepAlive=!0;return this.nextScrollPosition=0,this.nextInternalScrollPosition=Math.max(0,null!==(r=this.savedInternalScrollPositions.pop())&&void 0!==r?r:0),this.mainComponent=this.components[this.components.length-1],this.$emit("didPop"),c}beforeEnter(t){"none"!=this.transitionName&&(t.className=this.transitionName+"-enter-active "+this.transitionName+"-enter")}beforeLeave(t){this.transitionName}beforeBeforeEnterAnimation(){if(this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.beforeBeforeEnterAnimation&&t.beforeBeforeEnterAnimation()}}finishedEnterAnimation(){if(this.mainComponent){const t=this.mainComponent.componentInstance();t&&t.finishedEnterAnimation&&t.finishedEnterAnimation()}}enter(t,e){if("none"==this.transitionName){this.getScrollElement().scrollTop=this.nextScrollPosition;const n=this.getInternalScrollElement(t);return n&&(n.scrollTop=Math.max(0,this.nextInternalScrollPosition-n.clientHeight)),void e()}requestAnimationFrame((()=>{const n=t.firstElementChild.firstElementChild.offsetWidth,o=t.firstElementChild.offsetHeight,i=this.getInternalScrollElement(t);let s=this.nextInternalScrollPosition;if(i){s=Math.max(0,this.nextInternalScrollPosition-i.clientHeight);const t=this.getScrollOuterHeight(i),e=i.scrollHeight;s>e-t&&(s=Math.max(0,e-t))}const r=t.firstElementChild;let a=300;"pop"!==this.transitionName&&"modal-pop"!=this.transitionName||(a=250),"push"!=this.transitionName&&"pop"!=this.transitionName&&"modal-push"!=this.transitionName||(r.style.willChange="transform"),i&&(i.style.willChange="scroll-position"),this.growSize(n,o),requestAnimationFrame((()=>{i&&(i.scrollTop=s),t.className=this.transitionName+"-enter-active "+this.transitionName+"-enter-to",setTimeout((()=>{t.style.willChange="",r.style.willChange="",i&&(i.style.willChange=""),e()}),a+25)}))}))}getScrollOuterHeight(t){let e=t.clientHeight;if(t===document.documentElement){const t=window;t.visualViewport&&(e=t.visualViewport.height)}return e}leave(t,e){if("none"==this.transitionName)return void e();const n=t.firstElementChild;n.style.willChange="transform";let o=300;"pop"!==this.transitionName&&"modal-pop"!=this.transitionName||(o=250),requestAnimationFrame((()=>{const i=this.$el.offsetHeight+"px",s=this.$el.offsetWidth+"px";t.className=this.transitionName+"-leave-active "+this.transitionName+"-leave",t.style.top="0px",t.style.height=i,t.style.width=s,t.style.bottom="auto",t.style.overflow="hidden",n.style.overflow="hidden",n.style.height=i,n.style.width=s,requestAnimationFrame((()=>{t.className=this.transitionName+"-leave-active "+this.transitionName+"-leave-to",setTimeout((()=>{t.style.overflow="",t.style.top="",t.style.height="",t.style.bottom="",n.style.overflow="",n.style.willChange="",e()}),o+25)}))}))}afterLeave(t){"none"!=this.transitionName&&(t.className="")}afterEnter(t){"none"!=this.transitionName&&(this.unfreezeSize(),t.className="")}enterCancelled(t){this.unfreezeSize()}destroyed(){for(const t of this.components)t.isKeptAlive&&t.destroy(t.vnode);this.components=[],this.mainComponent=null}};p([d()],w.prototype,"root",void 0),p([d({default:null})],w.prototype,"initialComponents",void 0),p([d({default:"default"})],w.prototype,"animationType",void 0),p([u()],w.prototype,"child",void 0),w=p([(0,h.default)({components:{FramedComponent:y}})],w);var P=v(w,C,[],!1,null,null,null);P.options.__file="src/NavigationController.vue";const S=P.exports;var k=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{appear:t.shouldAppear,name:"fade",duration:300}},[n("div",{class:t.buildClass,on:{click:t.onClick}},[n("div",{ref:"mainContent"},[n("div",{staticClass:"scrollable-container"},[n("ComponentWithPropertiesInstance",{key:t.root.key,attrs:{component:t.root},on:{pop:t.dismiss}})],1)])])])};k._withStripped=!0;let A=class ModalMixin extends s.default{get modalStackComponent(){let t=this.$parent;for(;t;){if(t instanceof K)return t;t=t.$parent}return null}pop(t={}){const e=this.getPoppableParent();e?e.$listeners.pop?e.$emit("pop",t):console.error("Couldn't pop. Failed"):console.warn("No navigation controller to pop")}getPoppableParent(){let t=this,e=this.$parent;for(;e;){if(t.$listeners.pop)return t;t=e,e=e.$parent}return null}};var x;A=p([h.default],A);let b=x=class Popup extends A{get buildClass(){const t={"push-down":1==this.pushDown,"push-down-full":this.pushDown>1},e=Object.keys(t).filter((e=>!!t[e])).join(" ");return e+(e?" ":"")+(this.className?this.className:"popup")}get shouldAppear(){return this.root.animated}get pushDown(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components.filter((t=>{var e,n;return t.component===x&&(null!==(e=t.properties.className)&&void 0!==e?e:"popup")===(null!==(n=this.className)&&void 0!==n?n:"popup")})))&&void 0!==n?n:[];return o.length>0&&o[o.length-1].componentInstance()!==this?o.length>1&&o[o.length-2].componentInstance()===this?1:2:0}get isFocused(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components)&&void 0!==n?n:[];return!(o.length>0&&o[o.length-1].componentInstance()!==this)}onClick(t){const e=this.$refs.mainContent;e&&!e.contains(t.target)&&document.body.contains(t.target)&&(this.dismiss(),t.preventDefault())}activated(){document.addEventListener("keydown",this.onKey)}deactivated(){document.removeEventListener("keydown",this.onKey)}async dismiss(t){var e,n,o;if(!(null==t?void 0:t.force)){if(!await this.shouldNavigateAway())return!1}const s=null!==(o=null===(n=null===(e=this.modalStackComponent)||void 0===e?void 0:e.stackComponent)||void 0===n?void 0:n.components.filter((t=>"overlay"!==t.modalDisplayStyle)))&&void 0!==o?o:[];if(0===s.length||s[s.length-1].componentInstance()===this){const t=this.root.getHistoryIndex();null!=t&&i.returnToHistoryIndex(t-1)}this.pop(t)}onKey(t){if(t.defaultPrevented||t.repeat)return;if(!this.isFocused)return;const e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||(this.dismiss(),t.preventDefault())}shouldNavigateAway(){return this.root.shouldNavigateAway()}};p([d({required:!0})],b.prototype,"root",void 0),p([d({required:!1,default:"popup"})],b.prototype,"className",void 0),b=x=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],b);var $=v(b,k,[],!1,null,null,null);$.options.__file="src/Popup.vue";const I=$.exports;var N,E=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{appear:t.shouldAppear,name:"fade"}},[n("div",{staticClass:"side-view",class:{"push-down":1==t.pushDown,"push-down-full":t.pushDown>1},on:{mousedown:t.dismiss,touchdown:t.dismiss}},[n("div",{on:{mousedown:function(t){t.stopPropagation()},touchdown:function(t){t.stopPropagation()}}},[n("ComponentWithPropertiesInstance",{key:t.root.key,attrs:{component:t.root},on:{pop:t.dismiss}})],1)])])};E._withStripped=!0;const W=window.visualViewport;let _=N=class SideView extends A{get shouldAppear(){return this.root.animated}get pushDown(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components.filter((t=>t.component===N)))&&void 0!==n?n:[];return o.length>0&&o[o.length-1].componentInstance()!==this?o.length>1&&o[o.length-2].componentInstance()===this?1:2:0}get isFocused(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components)&&void 0!==n?n:[];return!(o.length>0&&o[o.length-1].componentInstance()!==this)}activated(){document.addEventListener("keydown",this.onKey),this.resize(),W&&W.addEventListener("resize",this.resize)}deactivated(){document.removeEventListener("keydown",this.onKey),W&&W.removeEventListener("resize",this.resize)}async dismiss(t){var e,n,o;if(!(null==t?void 0:t.force)){if(!await this.shouldNavigateAway())return!1}const s=null!==(o=null===(n=null===(e=this.modalStackComponent)||void 0===e?void 0:e.stackComponent)||void 0===n?void 0:n.components.filter((t=>"overlay"!==t.modalDisplayStyle)))&&void 0!==o?o:[];if(0===s.length||s[s.length-1].componentInstance()===this){const t=this.root.getHistoryIndex();null!=t&&i.returnToHistoryIndex(t-1)}this.pop(t)}resize(){}onKey(t){if(t.defaultPrevented||t.repeat)return;if(!this.isFocused)return;const e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||(this.dismiss(),t.preventDefault())}shouldNavigateAway(){return this.root.shouldNavigateAway()}};p([d({required:!0})],_.prototype,"root",void 0),_=N=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],_);var D=v(_,E,[],!1,null,null,null);D.options.__file="src/SideView.vue";const T=D.exports;var H=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",t._l(t.components,(function(e,o){return n("ComponentWithPropertiesInstance",{key:e.key,ref:"children",refInFor:!0,attrs:{component:e},on:{pop:function(n){return t.removeAt(o,e.key)}}})})),1)};H._withStripped=!0;let M=class StackComponent extends s.default{constructor(){super(...arguments),this.components=[]}show(t){this.components.push(t)}removeAt(t,e){if(!this.components[t])for(const[n,o]of this.components.entries())if(o.key===e){console.warn("Corrected index from "+t+" to "+n),t=n;break}void 0!==this.components[t]&&this.components[t].key===e?this.components.splice(t,1):console.warn("Expected component with key "+e+" at index"+t)}beforeDestroy(){this.components=[]}};M=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],M);var z=v(M,H,[],!1,null,null,null);z.options.__file="src/StackComponent.vue";const F=z.exports;let O=class ModalStackComponent extends s.default{present(t){var e,n,o,s,r;const a=t.components[t.components.length-1];void 0!==t.animated&&(a.animated=t.animated);const l=null!==(n=null!==(e=t.modalDisplayStyle)&&void 0!==e?e:a.modalDisplayStyle)&&void 0!==n?n:"cover";if(a.setDisplayStyle(l),("popup"===l||"sheet"===l)&&this.$el.offsetWidth>800||"sheet"===l&&this.$el.offsetWidth>700){const e=new ComponentWithProperties(I,{root:a,className:null!==(o=t.modalClass)&&void 0!==o?o:l});return i.pushState(null==t?void 0:t.url,(t=>{var n;null===(n=e.componentInstance())||void 0===n||n.pop({animated:t})}),null===(s=null==t?void 0:t.adjustHistory)||void 0===s||s),void this.stackComponent.show(e)}if("side-view"===l&&this.$el.offsetWidth>800){const e=new ComponentWithProperties(T,{root:a,className:t.modalClass});return i.pushState(null==t?void 0:t.url,(t=>{var n;null===(n=e.componentInstance())||void 0===n||n.pop({animated:t})}),null===(r=null==t?void 0:t.adjustHistory)||void 0===r||r),void this.stackComponent.show(e)}"overlay"!==l?this.$refs.navigationController.push(t):this.stackComponent.show(a)}replace(t,e=!0){const n=this.$refs.navigationController;n.push({components:[t],animated:e,replace:n.components.length})}};p([d()],O.prototype,"root",void 0),p([d({default:null})],O.prototype,"initialComponents",void 0),p([u()],O.prototype,"stackComponent",void 0),O=p([(0,h.default)({components:{NavigationController:S,StackComponent:F}})],O);var j=v(O,g,[],!1,null,null,null);j.options.__file="src/ModalStackComponent.vue";const K=j.exports;var V=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{appear:t.shouldAppear,name:"fade",duration:300}},[n("div",{staticClass:"sheet",on:{click:t.onClick}},[n("div",{ref:"mainContent"},[n("ComponentWithPropertiesInstance",{key:t.root.key,attrs:{component:t.root},on:{pop:t.dismiss}})],1)])])};V._withStripped=!0;let L=class Sheet extends A{get shouldAppear(){return this.root.animated}onClick(t){const e=this.$refs.mainContent;e&&!e.contains(t.target)&&document.body.contains(t.target)&&(this.dismiss(),t.preventDefault())}activated(){document.addEventListener("keydown",this.onKey)}deactivated(){document.removeEventListener("keydown",this.onKey)}get isFocused(){var t,e,n;const o=null!==(n=null===(e=null===(t=this.modalStackComponent)||void 0===t?void 0:t.stackComponent)||void 0===e?void 0:e.components)&&void 0!==n?n:[];return!(o.length>0&&o[o.length-1].componentInstance()!==this)}async dismiss(t){var e,n,o;if(!(null==t?void 0:t.force)){if(!await this.shouldNavigateAway())return!1}const s=null!==(o=null===(n=null===(e=this.modalStackComponent)||void 0===e?void 0:e.stackComponent)||void 0===n?void 0:n.components.filter((t=>"overlay"!==t.modalDisplayStyle)))&&void 0!==o?o:[];if(0===s.length||s[s.length-1].componentInstance()===this){const t=this.root.getHistoryIndex();null!=t&&i.returnToHistoryIndex(t-1)}this.pop(t)}onKey(t){if(t.defaultPrevented||t.repeat)return;if(!this.isFocused)return;const e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||(this.dismiss(),t.preventDefault())}shouldNavigateAway(){return this.root.shouldNavigateAway()}};p([d({required:!0})],L.prototype,"root",void 0),L=p([(0,h.default)({components:{ComponentWithPropertiesInstance:a}})],L);var R=v(L,V,[],!1,null,null,null);R.options.__file="src/Sheet.vue";const Q=R.exports;var q=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"split-view-controller",attrs:{"data-has-detail":t.detail?"true":"false"}},[n("div",{ref:"masterElement",staticClass:"master"},[n("NavigationController",{ref:"navigationController",attrs:{root:t.root},on:{showDetail:t.showDetail}})],1),t._v(" "),t.detail?n("div",{staticClass:"detail"},[n("FramedComponent",{key:t.detail.key,ref:"detailFrame",attrs:{root:t.detail}})],1):t._e()])};q._withStripped=!0;const U=(t,e)=>{let n,o;return function(){const i=this,s=arguments;o?(clearTimeout(n),n=setTimeout((function(){Date.now()-o>=e&&(t.apply(i,s),o=Date.now())}),e-(Date.now()-o))):(t.apply(i,s),o=Date.now())}};let B=class SplitViewController extends s.default{constructor(){super(...arguments),this.detail=null,this.detailKey=null}activated(){this.listener=U(this.onResize,100),window.addEventListener("resize",this.listener,{passive:!0}),this.onResize()}mounted(){this.detailWidth&&this.$el.style.setProperty("--split-view-width",this.detailWidth)}deactivated(){window.removeEventListener("resize",this.listener,{passive:!0})}beforeDestroy(){window.removeEventListener("resize",this.listener,{passive:!0})}onResize(){this.shouldCollapse()?this.detail&&this.collapse():this.lastIsDetail&&!this.detail&&this.expand()}get lastIsDetail(){var t,e;return null!=this.detailKey&&(null===(e=null===(t=this.$refs.navigationController)||void 0===t?void 0:t.mainComponent)||void 0===e?void 0:e.key)==this.detailKey}getScrollElement(t=null){t||(t=this.$el);const e=window.getComputedStyle(t);return"scroll"==e.overflowY||"scroll"==e.overflow||"auto"==e.overflow||"auto"==e.overflowY?t:t.parentElement?this.getScrollElement(t.parentElement):document.documentElement}async shouldNavigateAway(){if(this.detail){if(!await this.detail.shouldNavigateAway())return!1}return!this.navigationController||await this.navigationController.shouldNavigateAway()}async showDetail(t){const e=t.components[t.components.length-1];if(this.detailKey=e.key,this.shouldCollapse()){if(this.lastIsDetail||this.detail)return console.error("Pusing a detail when a detail is already presented is not allowed"),!1;this.navigationController.push(t)}else{if(this.detail){if(!await this.detail.shouldNavigateAway())return!1}this.getScrollElement().scrollTop=0,this.detail=e}return!0}shouldCollapse(){return this.$el.offsetWidth<850}collapse(){if(!this.navigationController)return void console.error("Cannot collapse without navigation controller");if(this.lastIsDetail)return void console.error("Cannot collapse when the detail is already collaped");if(!this.detail)return void console.error("Cannot collapse without detail");this.detail.keepAlive=!0;const t=this.detail;this.detail=null,this.navigationController.push({components:[t],animated:!1})}async expand(){if(!this.navigationController)return void console.error("Cannot expand without navigation controller");if(this.detail)return void console.error("Cannot expand when detail is already visible");if(!this.lastIsDetail)return void console.error("Cannot expand when there is no detail");const t=await this.navigationController.pop({animated:!1,destroy:!1});t&&0!=t.length&&this.$nextTick((()=>{this.detail=t[0]}))}};p([d()],B.prototype,"root",void 0),p([d()],B.prototype,"detailWidth",void 0),p([u()],B.prototype,"navigationController",void 0),p([u()],B.prototype,"masterElement",void 0),B=p([(0,h.default)({components:{NavigationController:S,FramedComponent:y}})],B);var G=v(B,q,[],!1,null,null,null);G.options.__file="src/SplitViewController.vue";const J=G.exports;let X=class NavigationMixin extends s.default{constructor(){super(...arguments),this.canPop=!1,this.canDismiss=!1}emitParents(t,e){let n=this.$parent;for(;n;){if(n.$listeners[t])return void n.$emit(t,e);n=n.$parent}console.warn("No handlers found for event "+t)}show(t){t.components?this.emitParents("show",t):this.emitParents("show",{components:[t]})}present(t){t.components?this.emitParents("present",t):this.emitParents("present",{components:[t]})}showDetail(t){t.components?this.emitParents("showDetail",t):this.emitParents("showDetail",{components:[t]})}pop(t={}){const e=this.getPoppableParent();e?e.$listeners.pop?e.$emit("pop",t):console.error("Couldn't pop. Failed"):console.warn("No navigation controller to pop")}dismiss(t={}){const e=this.modalOrPopup;if(e){if(e instanceof Q||e instanceof I||e instanceof T)return void e.dismiss(t);e.pop(t)}else console.warn("Tried to dismiss without being displayed as a modal. Use pop instead"),this.pop(t)}get navigationController(){let t=this.$parent;for(;t;){if(t instanceof S)return t;t=t.$parent}return null}get modalOrPopup(){let t=this.$parent;for(;t;){if(t instanceof S&&"modal"==t.animationType)return t;if(t instanceof Q)return t;if(t instanceof I)return t;if(t instanceof T)return t;t=t.$parent}return null}get modalNavigationController(){let t=this.$parent;for(;t;){if(t instanceof S&&"modal"==t.animationType)return t;t=t.$parent}return null}get splitViewController(){let t=this.$parent;for(;t;){if(t instanceof J)return t;t=t.$parent}return null}getPoppableParent(){let t=this,e=this.$parent;for(;e;){if(t.$listeners.pop)return t;t=e,e=e.$parent}return null}activated(){s.default.set(this,"canPop",this.calculateCanPop()),s.default.set(this,"canDismiss",this.calculateCanDismiss())}beforeMount(){s.default.set(this,"canPop",this.calculateCanPop()),s.default.set(this,"canDismiss",this.calculateCanDismiss())}getPoppableNavigationController(){let t=this.$parent;for(;t;){if(t instanceof S){if("modal"==t.animationType)return null;if(t.components.length>1)return t}t=t.$parent}return null}isFocused(){const t=this.modalOrPopup;return!(t instanceof I||t instanceof Q||t instanceof T)||!!t.isFocused}calculateCanPop(){return null!=this.getPoppableNavigationController()}calculateCanDismiss(){const t=this.modalOrPopup;return null!==t&&!(t instanceof S&&t.components.length<=1)}};X=p([h.default],X);var Y=o.T3,Z=o.mL,tt=o.qT,et=o.EO,nt=o._f,ot=o.J4,it=o.mU,st=o.GI,rt=o.yo,at=o.i_,lt=o.Vl,pt=o.aA;export{Y as ComponentWithProperties,Z as ComponentWithPropertiesInstance,tt as FramedComponent,et as HistoryManager,nt as ModalStackComponent,ot as NavigationController,it as NavigationMixin,st as Popup,rt as Sheet,at as SideView,lt as SplitViewController,pt as StackComponent};
2
2
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","mappings":"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","sources":["webpack://@simonbackx/vue-app-navigation/webpack/bootstrap","webpack://@simonbackx/vue-app-navigation/webpack/runtime/define property getters","webpack://@simonbackx/vue-app-navigation/webpack/runtime/hasOwnProperty shorthand","webpack://@simonbackx/vue-app-navigation/./src/HistoryManager.ts","webpack://@simonbackx/vue-app-navigation/./src/ComponentWithProperties.ts","webpack://@simonbackx/vue-app-navigation/external module \"vue\"","webpack://@simonbackx/vue-app-navigation/./src/ComponentWithPropertiesInstance.ts","webpack://@simonbackx/vue-app-navigation/./src/FramedComponent.vue?4f5b","webpack://@simonbackx/vue-app-navigation/./node_modules/tslib/tslib.es6.js","webpack://@simonbackx/vue-app-navigation/external module \"vue-class-component\"","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-property-decorator/lib/helpers/metadata.js","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-property-decorator/lib/decorators/Prop.js","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-property-decorator/lib/decorators/Ref.js","webpack://@simonbackx/vue-app-navigation/./src/FramedComponent.vue?2fcd","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://@simonbackx/vue-app-navigation/./src/FramedComponent.vue","webpack://@simonbackx/vue-app-navigation/./src/ModalStackComponent.vue?42b1","webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue?3544","webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue?4d36","webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue?6269","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue?dfe1","webpack://@simonbackx/vue-app-navigation/./src/ModalMixin.ts","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue?7e96","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue?11d0","webpack://@simonbackx/vue-app-navigation/./src/StackComponent.vue?fb8e","webpack://@simonbackx/vue-app-navigation/./src/StackComponent.vue?4684","webpack://@simonbackx/vue-app-navigation/./src/StackComponent.vue","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue?f43c","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue?8e62","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue?195d","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue?9ad8","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue?f85a","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue?13f9","webpack://@simonbackx/vue-app-navigation/./src/ModalStackComponent.vue?08f9","webpack://@simonbackx/vue-app-navigation/./src/ModalStackComponent.vue","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue?8f4b","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue?0eca","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue?b1a8","webpack://@simonbackx/vue-app-navigation/./src/NavigationMixin.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { ComponentWithProperties } from \"./ComponentWithProperties\";\n\ntype HistoryState = {\n /// Url of the page, used if the user returns to this page using buttons on the page\n url?: string;\n\n /// Counter at which the state was added.\n index: number;\n\n /// Whether the history pushState was used to create this state (true) or if this is only a virtual state (false).\n adjustHistory: boolean;\n\n /// Action to execute when the user navigates back to the previous state using the browser's back button.\n undoAction?: (animate: boolean) => void;\n}\n\nclass HistoryManagerStatic {\n // undoActions: Map<number, (animate: boolean) => void> = new Map();\n\n states: HistoryState[] = [];\n\n counter = 0;\n active = false;\n animateHistoryPop = true;\n\n isAdjustingState = false;\n manualStateAction = false;\n\n // Manipulating the history is async and can cause issues when fast calls happen without awaiting the previous one\n historyQueue: (() => Promise<void>)[] = [];\n isQueueRunning = false;\n\n private addToQueue(action: () => Promise<void>) {\n this.historyQueue.push(action);\n if (!this.isQueueRunning) {\n this.runQueue();\n }\n }\n\n private runQueue() {\n this.isQueueRunning = true;\n const action = this.historyQueue.shift();\n if (action) {\n console.log('Running history queue action');\n action().finally(() => this.runQueue());\n } else {\n console.log('History queue done');\n this.isQueueRunning = false;\n }\n }\n\n private go(delta: number) {\n this.addToQueue(async () => {\n return new Promise<void>((resolve) => {\n this.manualStateAction = true;\n console.log('history.go', delta)\n history.go(delta); // should be negative\n let timer \n let listener = () => {\n clearTimeout(timer);\n resolve();\n window.removeEventListener(\"popstate\", listener);\n };\n window.addEventListener(\"popstate\", listener);\n\n // Timeout\n timer = setTimeout(() => {\n console.warn(\"Timeout while waiting for history.go\");\n listener();\n }, 200);\n });\n });\n }\n\n /// Set the current URL without modifying states\n setUrl(url: string) {\n if (!this.active) {\n return;\n }\n\n if (ComponentWithProperties.debug) {\n console.log(\"Set url: \" + url+\", current counter: \"+this.counter);\n }\n\n const count = this.states[this.states.length - 1].index;\n\n this.addToQueue(async () => {\n if (ComponentWithProperties.debug) {\n console.log('history.replaceState', count, url)\n }\n history.replaceState({ counter: count }, \"\", url);\n });\n this.states[this.states.length - 1].url = url;\n }\n\n pushState(url: string | undefined, undoAction: (animate: boolean) => void, adjustHistory: boolean) {\n if (!this.active) {\n return;\n }\n this.counter++;\n\n this.states.push({\n url: url,\n index: this.counter,\n adjustHistory,\n undoAction,\n })\n const c = this.counter;\n\n if (adjustHistory) {\n this.addToQueue(async () => {\n if (ComponentWithProperties.debug) {\n console.log('history.pushState', c, url)\n }\n history.pushState({ counter: c }, \"\", url);\n });\n } else {\n this.addToQueue(async () => {\n if (ComponentWithProperties.debug) {\n console.log('history.replaceState', c, url)\n }\n history.replaceState({ counter: c }, \"\", url);\n });\n }\n\n if (ComponentWithProperties.debug) {\n console.log(\"Push new state \" , this.states[this.states.length - 1]);\n }\n }\n\n /**\n * Return to a given history point in time, if needed\n */\n returnToHistoryIndex(counter: number) {\n // We'll keep this for debugging and remove it if everything is stable\n if (ComponentWithProperties.debug) {\n console.log(\"Did return to history index \" + counter + \", coming from \" + this.counter);\n }\n if (counter < this.counter) {\n this.counter = counter;\n\n // Delete all future states\n const deletedStates = this.states.splice(this.counter + 1);\n\n // Count how many states we have to delete from the history\n const adjustHistoryCount = deletedStates.filter(state => state.adjustHistory).length;\n\n // Don't need to call undo actions, because the user did go back by itself, and the undo actions are already done manually\n if (adjustHistoryCount > 0) {\n // Note: history.go is async, so all replaceState methods stop working until finished!\n if (ComponentWithProperties.debug) {\n console.log(\"Adjusting browser history state: popping \" + adjustHistoryCount + \" items\");\n }\n this.go(-adjustHistoryCount);\n }\n\n if (!this.states[this.counter].adjustHistory && this.states[this.counter].url) {\n if (ComponentWithProperties.debug) {\n console.log(\"Setting manual url without history api: \" + this.states[this.counter].url);\n }\n\n // Set new url manually again\n this.setUrl(this.states[this.counter].url!);\n }\n }\n\n return this.counter;\n }\n\n activate() {\n // Create push pop listener that will execute undo actions\n window.addEventListener(\"popstate\", (event) => {\n if (ComponentWithProperties.debug) {\n console.log(\"HistoryManager popstate\");\n }\n\n if (this.isAdjustingState) {\n console.warn(\"Duplicate popstate\");\n return;\n }\n if (this.manualStateAction) {\n this.manualStateAction = false;\n return;\n }\n this.isAdjustingState = true;\n const newCounter: number | undefined = event.state?.counter;\n\n if (newCounter !== undefined) {\n // Foward or backwards?\n if (newCounter > this.counter) {\n // Not allowed\n const amount = newCounter - this.counter;\n this.go(-amount);\n\n if (ComponentWithProperties.debug) {\n console.log(\"Not allowed to go forward, going back \" + amount + \" steps\");\n }\n } else {\n // Only animate if we only have one undo action and if animations are enabled\n const animate = this.counter - newCounter == 1 && this.animateHistoryPop;\n \n // Set new counter position\n this.counter = newCounter\n \n // Delete all future states\n const deletedStates = this.states.splice(this.counter + 1);\n\n // Execute undo actions in right order\n for (const state of deletedStates.reverse()) {\n if (state.undoAction) {\n if (ComponentWithProperties.debug) {\n console.log(\"Executing undoAction...\");\n }\n state.undoAction(animate);\n }\n }\n }\n }\n this.isAdjustingState = false;\n });\n\n this.active = true;\n\n // Set counter of initial history\n history.replaceState({ counter: this.counter }, \"\");\n\n this.states.push({\n index: this.counter,\n adjustHistory: false,\n url: \"/\"\n })\n }\n}\n\nexport const HistoryManager = new HistoryManagerStatic();\n","import { VNode } from \"vue\";\n\nimport { HistoryManager } from \"./HistoryManager\";\n\nexport type ModalDisplayStyle = \"cover\" | \"popup\" | \"overlay\" | \"sheet\" | \"side-view\"\n\nexport class ComponentWithProperties {\n /// Name of component or component Options. Currently no way to force type\n public component: any;\n public properties: Record<string, any>;\n public key: number | null = null;\n public type: string | null = null;\n public hide = false;\n\n /// Saved vnode of this instance\n public vnode: VNode | null = null;\n\n // Keep the vnode alive when it is removed from the VDOM\n public keepAlive = false;\n public isKeptAlive = false;\n public isMounted = false;\n\n // Counter for debugging. Count of components that are kept alive but are not mounted.\n static keepAliveCounter = 0;\n static keyCounter = 0;\n static debug = false;\n\n /// Cover whole screen. Other style = popup\n public modalDisplayStyle: ModalDisplayStyle = \"cover\"\n\n // If the display animation should be animated\n public animated = true\n\n // Hisotry index\n public historyIndex: number | null = null;\n public isContainerView = false;\n\n private static ignoreActivate: ComponentWithProperties | null = null\n\n constructor(component: any, properties: Record<string, any> = {}) {\n this.component = component;\n this.properties = properties;\n this.key = ComponentWithProperties.keyCounter++;\n }\n\n clone() {\n return new ComponentWithProperties(this.component, this.properties);\n }\n\n beforeMount() {\n if (ComponentWithProperties.debug) console.log(\"Before mount: \" + this.component.name);\n\n if (this.vnode) {\n if (this.isKeptAlive) {\n this.isKeptAlive = false;\n ComponentWithProperties.keepAliveCounter--;\n if (ComponentWithProperties.debug) console.log(\"Total components kept alive: \" + ComponentWithProperties.keepAliveCounter);\n } else {\n if (ComponentWithProperties.debug) console.warn(\"About to mount a component that was not destroyed properly \" + this.component.name);\n\n // Destroy the old vnode (unless keep alive), we should not reuse this one\n this.destroy(this.vnode);\n }\n }\n\n if (this.isContainerView) {\n // Always make sure it has a saved history index on first mount\n if (this.historyIndex === null) {\n this.historyIndex = HistoryManager.counter;\n }\n return;\n }\n if (this.modalDisplayStyle == \"overlay\") {\n return;\n }\n this.assignHistoryIndex()\n }\n\n getHistoryIndex() {\n if (this.component) return this.historyIndex;\n }\n\n mounted() {\n if (ComponentWithProperties.debug) console.log(\"Component mounted: \" + this.component.name);\n this.isMounted = true;\n\n // We pushed some elements and the history index increased during the mounted lifecycle\n // We now risk that in the next activation cycle (that is only called sometimes, not on all components), the UI will think that it is returning\n // to a previous history state\n // So we ignore the activation of only this instance until some other component got activated first\n ComponentWithProperties.ignoreActivate = this;\n }\n\n onMountedChildComponent(child: ComponentWithProperties) {\n this.isContainerView = true\n if (ComponentWithProperties.debug) console.log(\"Container mounted child component: \" + this.component.name + \" got \"+child.component.name);\n }\n\n onActivatedChildComponent(child: ComponentWithProperties) {\n this.isContainerView = true\n if (ComponentWithProperties.debug) console.log(\"Container got activated child component: \" + this.component.name + \" got \"+child.component.name);\n }\n\n /**\n * Call this method to assign a history index to this component (you should only call this when you want to assign a history index to this component that will not get mounted already)\n */\n assignHistoryIndex() {\n if (this.historyIndex == null) {\n if (ComponentWithProperties.debug) console.log(\"Assigned history index: \" + this.component.name + \" = \" + HistoryManager.counter);\n this.historyIndex = HistoryManager.counter;\n } else {\n // This component was never mounted but already got a history index assigned\n // -> probably pushed on a navigation controller with multiple components at once\n this.historyIndex = HistoryManager.returnToHistoryIndex(this.historyIndex);\n }\n }\n\n activated() {\n if (ComponentWithProperties.debug) console.log(\"Component activated: \" + this.component.name);\n\n if (ComponentWithProperties.ignoreActivate === this) {\n if (ComponentWithProperties.debug) console.log(\"Ignore component activation: \" + this.component.name);\n ComponentWithProperties.ignoreActivate = null\n return\n }\n ComponentWithProperties.ignoreActivate = null\n\n if (this.isContainerView) {\n return;\n }\n if (this.modalDisplayStyle == \"overlay\") {\n return;\n }\n if (this.historyIndex !== null) {\n // Sometimes, a component will get activated just after mounting it. We ignore that activated event once\n this.historyIndex = HistoryManager.returnToHistoryIndex(this.historyIndex);\n }\n }\n\n componentInstance(): Vue | undefined {\n return this.vnode?.componentInstance;\n }\n\n async shouldNavigateAway(): Promise<boolean> {\n const instance = this.componentInstance() as any;\n if (instance && instance.shouldNavigateAway) {\n const promise = instance.shouldNavigateAway();\n if (typeof promise === \"boolean\") {\n if (!promise) {\n return false;\n }\n } else if (promise.then && promise.catch) {\n const r = (await promise) as boolean;\n if (!r) {\n return false;\n }\n }\n }\n return true;\n }\n\n destroy(vnode) {\n this.isMounted = false;\n\n if (this.vnode) {\n if (vnode !== this.vnode) {\n console.warn('Received destroy event from old/different vnode', this.vnode, vnode);\n return;\n }\n if (this.keepAlive) {\n this.keepAlive = false;\n\n if (!this.isKeptAlive) {\n this.isKeptAlive = true;\n ComponentWithProperties.keepAliveCounter++;\n if (ComponentWithProperties.debug) console.log(\"Kept component alive \" + this.component.name);\n if (ComponentWithProperties.debug) console.log(\"Total components kept alive: \" + ComponentWithProperties.keepAliveCounter);\n }\n return;\n }\n\n if (this.isKeptAlive) {\n this.isKeptAlive = false;\n ComponentWithProperties.keepAliveCounter--;\n if (ComponentWithProperties.debug) console.log(\"Freed component from alive stack \" + this.component.name);\n if (ComponentWithProperties.debug) console.log(\"Total components kept alive: \" + ComponentWithProperties.keepAliveCounter);\n }\n\n if (ComponentWithProperties.debug) console.log(\"Destroyed component \" + this.component.name, this.vnode);\n this.vnode.componentInstance?.$destroy();\n this.vnode = null;\n }\n }\n\n setDisplayStyle(style: ModalDisplayStyle): ComponentWithProperties {\n this.modalDisplayStyle = style;\n return this;\n }\n\n setAnimated(animated: boolean): ComponentWithProperties {\n this.animated = animated;\n return this;\n }\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_vue__[\"default\"] });","/* eslint-disable vue/no-mutating-props */\nimport Vue, { VNode } from \"vue\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\n\nconst ComponentWithPropertiesInstance = Vue.extend({ \n props: {\n component: ComponentWithProperties,\n },\n\n watch: {\n component(_val) {\n throw new Error(\"Changing component during life is not yet supported\");\n },\n },\n\n created() {\n /// Whether the node should be destroyed if it is removed from the dom\n this.destroy = true;\n },\n\n beforeMount() {\n this.component.beforeMount();\n },\n\n activated() {\n this.component.activated();\n\n // Update container views history index\n let start: any = this.$parent;\n while (start) {\n if (start instanceof ComponentWithPropertiesInstance) {\n (start.component as ComponentWithProperties).onActivatedChildComponent(this.component)\n }\n start = start.$parent;\n }\n },\n\n mounted() {\n this.component.mounted();\n\n // Mark all parents as containers\n let start: any = this.$parent;\n while (start) {\n if (start instanceof ComponentWithPropertiesInstance) {\n (start.component as ComponentWithProperties).onMountedChildComponent(this.component)\n }\n start = start.$parent;\n }\n },\n\n destroyed() {\n // This component got removed (with v-if, v-for, ...) in some way.\n // This doesn't mean we want to destroy it\n this.component.destroy(this.$children[0]?.$vnode);\n },\n\n render(createElement): VNode {\n // Only create the vnode once\n if (this.component.vnode) {\n console.log('Reused render component: ' + this.component.component.name);\n\n // We need to update the parent here\n this.component.vnode.componentInstance.$parent = this;\n // Force update children (needed because the new vnode won't restart a lifecycle \n // and vue won't update children because that is not supported out of the box)\n this.$children = [this.component.vnode.componentInstance]\n return this.component.vnode;\n }\n\n // Only pass attrs that are not at props\n // Else they will get added to the DOM, and we don't want that\n let attrs = {}\n\n if (this.component.component?.options?.props) {\n // Loop all passed properties to the component, and only add\n // the properties that are not defined as prop in the component to attrs\n // which is the same bahviour as vue\n for (const key in this.component.properties) {\n if (Object.prototype.hasOwnProperty.call(this.component.properties, key)) {\n if (!Object.prototype.hasOwnProperty.call(this.component.component.options.props, key)) {\n // This property doesn't exist in the component, so \n // we'll add it as an attribute instead\n attrs[key] = this.component.properties[key];\n }\n }\n }\n } else {\n attrs = this.component.properties;\n }\n\n // Disable component inheritAttrs\n // Make sure we allow to pass props\n this.component.component.options.inheritAttrs = false\n\n this.component.vnode = createElement(this.component.component, {\n props: this.component.properties,\n\n // Also pass properties, so a component catch properties that are not defined in the component\n attrs,\n\n // Use a new key every time, we don't want to reuse previous nodes\n key: 'component-instance-' + ComponentWithProperties.keyCounter++,\n });\n console.log('New render component: ' + this.component.component.name, this.component.vnode);\n\n // Magic trick: we are now responsible for deallocating the component\n this.component.vnode.data.keepAlive = true;\n return this.component.vnode;\n },\n});\n\nexport default ComponentWithPropertiesInstance;\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\n \"div\",\n { ref: \"scrollContainer\" },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n attrs: { component: _vm.root }\n })\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"createDecorator\"]: () => __WEBPACK_EXTERNAL_MODULE_vue_class_component_c93a5958__.createDecorator, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_vue_class_component_c93a5958__[\"default\"] });","/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\nvar reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined';\nexport function applyMetadata(options, target, key) {\n if (reflectMetadataIsSupported) {\n if (!Array.isArray(options) &&\n typeof options !== 'function' &&\n !options.hasOwnProperty('type') &&\n typeof options.type === 'undefined') {\n var type = Reflect.getMetadata('design:type', target, key);\n if (type !== Object) {\n options.type = type;\n }\n }\n }\n}\n","import { createDecorator } from 'vue-class-component';\nimport { applyMetadata } from '../helpers/metadata';\n/**\n * decorator of a prop\n * @param options the options for the prop\n * @return PropertyDecorator | void\n */\nexport function Prop(options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n applyMetadata(options, target, key);\n createDecorator(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\n","import { createDecorator } from 'vue-class-component';\n/**\n * decorator of a ref prop\n * @param refKey the ref key defined in template\n */\nexport function Ref(refKey) {\n return createDecorator(function (options, key) {\n options.computed = options.computed || {};\n options.computed[key] = {\n cache: false,\n get: function () {\n return this.$refs[refKey || key];\n },\n };\n });\n}\n","\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref,Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n },\n})\nexport default class FramedComponent extends Vue {\n @Prop()\n root!: ComponentWithProperties;\n\n @Ref()\n scrollContainer!: HTMLElement;\n\n pop(data) {\n this.$emit(\"pop\", data);\n }\n\n push(data) {\n this.$emit(\"push\", data);\n }\n}\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./FramedComponent.vue?vue&type=template&id=5c46ef86&\"\nimport script from \"./FramedComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./FramedComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5c46ef86')) {\n api.createRecord('5c46ef86', component.options)\n } else {\n api.reload('5c46ef86', component.options)\n }\n module.hot.accept(\"./FramedComponent.vue?vue&type=template&id=5c46ef86&\", function () {\n api.rerender('5c46ef86', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/FramedComponent.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"NavigationController\", {\n ref: \"navigationController\",\n attrs: { \"animation-type\": \"modal\", root: _vm.root },\n on: { present: _vm.present }\n }),\n _vm._v(\" \"),\n _c(\"StackComponent\", {\n ref: \"stackComponent\",\n on: { present: _vm.present }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"navigation-controller\" },\n [\n _vm.mainComponent\n ? _c(\n \"transition\",\n {\n attrs: { css: false },\n on: {\n \"before-enter\": _vm.beforeEnter,\n \"before-leave\": _vm.beforeLeave,\n enter: _vm.enter,\n leave: _vm.leave,\n \"after-leave\": _vm.afterLeave,\n \"after-enter\": _vm.afterEnter,\n \"enter-cancelled\": _vm.enterCancelled\n }\n },\n [\n _c(\"FramedComponent\", {\n key: _vm.mainComponent.key,\n ref: \"child\",\n attrs: { root: _vm.mainComponent },\n on: { push: _vm.push, show: _vm.push, pop: _vm.pop }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport FramedComponent from \"./FramedComponent.vue\";\nimport { HistoryManager } from \"./HistoryManager\";\nimport { PopOptions } from \"./PopOptions\"\nimport { PushOptions } from \"./PushOptions\";\n\n@Component({\n components: {\n FramedComponent,\n },\n})\nexport default class NavigationController extends Vue {\n components: ComponentWithProperties[] = [];\n mainComponent: ComponentWithProperties | null = null;\n transitionName = \"none\";\n savedScrollPositions: number[] = [];\n nextScrollPosition = 0;\n previousScrollPosition = 0;\n\n nextInternalScrollPosition = 0\n savedInternalScrollPositions: number[] = [];\n\n @Prop()\n root!: ComponentWithProperties;\n\n @Prop({ default: null })\n initialComponents: ComponentWithProperties[] | null;\n\n @Prop({ default: \"default\" })\n animationType!: string;\n\n @Ref()\n child!: FramedComponent;\n\n beforeMount() {\n if (this.initialComponents && this.initialComponents.length > 0) {\n this.mainComponent = this.initialComponents[this.initialComponents.length - 1];\n this.components = this.initialComponents.slice(0);\n\n // Update property (even if not allowed, we know, but we need to remove the references)\n this.initialComponents.splice(0, this.initialComponents.length);\n } else {\n this.mainComponent = this.root;\n this.components = [this.root];\n }\n }\n\n freezeSize() {\n const el = this.$el as HTMLElement;\n\n el.style.width = el.offsetWidth + \"px\";\n el.style.height = el.offsetHeight + \"px\";\n }\n\n growSize(width: number, height: number) {\n const el = this.$el as HTMLElement;\n\n el.style.height = height+ \"px\";\n el.style.width = width + \"px\";\n }\n\n unfreezeSize() {\n const el = this.$el as HTMLElement;\n el.style.width = \"\";\n el.style.height = \"\";\n }\n\n getInternalScrollElement(element: HTMLElement | null = null) {\n const mightBe = (element ?? this.$el as HTMLElement).querySelector(\"main\")\n return mightBe ? this.getScrollElement(mightBe) : null;\n }\n\n getScrollElement(element: HTMLElement | null = null): HTMLElement {\n if (!element) {\n element = this.$el as HTMLElement;\n }\n\n const style = window.getComputedStyle(element);\n if (\n style.overflowY == \"scroll\" \n || style.overflow == \"scroll\" \n || style.overflow == \"auto\" \n || style.overflowY == \"auto\" \n // Windows:\n || style.overflow == \"overlay\" \n || style.overflowY == \"overlay\") {\n return element;\n } else {\n if (!element.parentElement) {\n return document.documentElement;\n }\n return this.getScrollElement(element.parentElement);\n }\n }\n\n shouldAnimate() {\n return (this.$el as HTMLElement).offsetWidth <= 1600;\n }\n\n /**\n * popOptions = how to handle the pop of replace. animated and count are ignored\n * -> should get moved to separate configurations in the future\n */\n async push(options: PushOptions) {\n if (options.components.length == 0) {\n console.error(\"Missing component when pushing\")\n return\n }\n (document.activeElement as any)?.blur()\n const components = options.components\n const component = components[components.length - 1]\n\n // shouldAnimate: boolean | null = null, replace = 0, reverse = false, replaceWith: ComponentWithProperties[] = [], popOptions: PopOptions = {}\n const destroy = options.destroy ?? true\n const force = options.force ?? false\n const animated = this.shouldAnimate() ? (options.animated === undefined ? component.animated : options.animated) : false\n\n let replace = options.replace ?? 0\n if (replace > this.components.length) {\n replace = this.components.length\n }\n\n if (ComponentWithProperties.debug) console.log(\"Pushing new component on navigation controller: \" + component.component.name);\n\n if (replace > 0) {\n // Check if we are allowed to dismiss them all.\n // If one fails, we skip everything.\n if (destroy && !force) {\n for (let index = this.components.length - 1; index >= this.components.length - replace; index--) {\n const component = this.components[index];\n const r = await component.shouldNavigateAway();\n if (!r) {\n return;\n }\n }\n }\n }\n\n if (!animated) {\n this.transitionName = \"none\";\n } else {\n this.transitionName = this.animationType == \"modal\" ? \"modal-push\" : options.reverse ? \"pop\" : \"push\";\n }\n\n // Add the client height from the saved height (check pop method for information)\n\n // Check if we have an internal scroll position\n const internalScrollElement = this.getInternalScrollElement()\n\n // The scroll element can also be located inside the component, and should be marked as the main element\n const scrollElement = this.getScrollElement();\n const w = window as any;\n\n let clientHeight = scrollElement.clientHeight;\n if (scrollElement === document.documentElement && w.visualViewport) {\n clientHeight = w.visualViewport.height;\n }\n\n let internalClientHeight = internalScrollElement?.clientHeight;\n\n // Save scroll position\n this.previousScrollPosition = scrollElement.scrollTop;\n this.savedScrollPositions.push(this.previousScrollPosition + clientHeight);\n this.savedInternalScrollPositions.push((internalScrollElement?.scrollTop ?? 0) + (internalClientHeight ?? 0));\n this.nextScrollPosition = 0;\n this.nextInternalScrollPosition = 0;\n\n // Save width and height\n if (animated) {\n this.freezeSize();\n }\n\n // Make sure the transition name changed, so wait for a rerender\n if (replace > 0) {\n const popped = this.components.splice(this.components.length - replace, replace, ...components);\n \n if (!destroy) {\n // Stop destroy\n for (const comp of popped) {\n comp.keepAlive = true;\n }\n }\n } else {\n this.components.push(...components);\n }\n\n if (this.mainComponent) {\n // Keep the component alive while it is removed from the DOM, unless it is being replaced\n this.mainComponent.keepAlive = !replace;\n }\n\n this.mainComponent = component;\n this.$emit(\"didPush\");\n\n if (replace == 0 && this) {\n //\n for (let index = 0; index < components.length; index++) {\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n // todo: fix reference to this and memory handling here!!\n this.pop({ animated: animated && canAnimate});\n }, options?.adjustHistory ?? true);\n\n if (index < components.length - 1) {\n // This component will not get mounted, but we need to simulate this to assign\n // a history index\n components[index].assignHistoryIndex()\n }\n }\n }\n }\n\n /**\n * Whether user interaction might prevent destructive navigation away from components.\n */\n async shouldNavigateAway(): Promise<boolean> {\n for (let index = this.components.length - 1; index >= 0; index--) {\n const component = this.components[index];\n const r = await component.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n return true;\n }\n\n popToRoot(options: PopOptions = {}) {\n options.count = this.components.length - 1\n return this.pop(options);\n }\n\n getPoppableParent(): any | null {\n let prev = this;\n let start: any = this.$parent;\n while (start) {\n if (prev.$listeners[\"pop\"]) {\n return prev;\n }\n\n prev = start;\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * force: whether \"shouldNavigateAway\" of child components is ignored\n */\n async pop(options: PopOptions = {}): Promise<ComponentWithProperties[] | undefined> {\n (document.activeElement as any)?.blur()\n\n const animated = this.shouldAnimate() ? (options.animated ?? true) : false;\n const destroy = options.destroy ?? true;;\n const count = options.count ?? 1;\n const force = options.force ?? false;\n\n if (this.components.length <= count) {\n const parent = this.getPoppableParent()\n\n // Prevent multiple count pop across modal levels\n options.count = 1\n\n if (!parent) {\n console.error(\"Tried to pop an empty navigation controller, but couldn't find a parent to pop\")\n this.$emit(\"pop\", options)\n return;\n }\n parent.$emit(\"pop\", options)\n return;\n }\n\n if (count === 0) {\n return;\n }\n\n if (destroy && !force) {\n for (let index = this.components.length - 1; index >= this.components.length - count; index--) {\n const component = this.components[index];\n const r = await component.shouldNavigateAway();\n if (!r) {\n return;\n }\n }\n }\n\n this.previousScrollPosition = this.getScrollElement().scrollTop;\n\n if (!animated) {\n this.transitionName = \"none\";\n } else {\n this.transitionName = this.animationType == \"modal\" ? \"modal-pop\" : \"pop\";\n this.freezeSize();\n }\n //console.log(\"Prepared previous scroll positoin: \" + this.previousScrollPosition);\n\n const popped = this.components.splice(this.components.length - count, count);\n\n if (!destroy) {\n // Stop destroy\n for (const comp of popped) {\n comp.keepAlive = true;\n }\n }\n\n // Remove the client height from the saved height (since this includes the client height so we can correct any changes in client heigth ahead of time)\n // We need this because when we set the height of the incoming view, we cannot reliably detect the maximum scroll height due some mobile browser glitches\n const scrollElement = this.getScrollElement();\n const w = window as any;\n\n let clientHeight = scrollElement.clientHeight;\n if (scrollElement === document.documentElement && w.visualViewport) {\n clientHeight = w.visualViewport.height;\n }\n\n this.nextScrollPosition = Math.max(0, (this.savedScrollPositions.pop() ?? 0) - clientHeight);\n this.nextInternalScrollPosition = Math.max(0, (this.savedInternalScrollPositions.pop() ?? 0));\n\n this.mainComponent = this.components[this.components.length - 1];\n this.$emit(\"didPop\");\n return popped;\n }\n\n beforeEnter(insertedElement: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n\n // We need to set the class already to hide the incoming element\n insertedElement.className = this.transitionName + \"-enter-active \" + this.transitionName + \"-enter\";\n }\n\n beforeLeave(_element: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n // Do nothing here. Is is important to finish the enter transitions first!\n // Do not even set a class! That will cause flickering on Webkit!\n }\n\n beforeBeforeEnterAnimation() {\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.beforeBeforeEnterAnimation) {\n instance.beforeBeforeEnterAnimation()\n }\n }\n }\n\n finishedEnterAnimation() {\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.finishedEnterAnimation) {\n instance.finishedEnterAnimation()\n }\n }\n }\n\n enter(element: HTMLElement, done) {\n if (this.transitionName == \"none\") {\n this.getScrollElement().scrollTop = this.nextScrollPosition;\n\n const internal = this.getInternalScrollElement(element)\n if (internal) {\n internal.scrollTop = Math.max(0, this.nextInternalScrollPosition - internal.clientHeight);\n }\n\n done();\n return;\n }\n\n // Allow scrollTop override in a specified handler\n // Call before\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.beforeBeforeEnterAnimation) {\n instance.beforeBeforeEnterAnimation()\n }\n }\n\n const scrollElement = this.getScrollElement();\n\n const w = ((element.firstElementChild as HTMLElement).firstElementChild as HTMLElement).offsetWidth;\n const h = (element.firstElementChild as HTMLElement).offsetHeight;\n\n const scrollOuterHeight = this.getScrollOuterHeight(scrollElement);\n\n // Limit\n\n let next = this.nextScrollPosition;\n\n //console.log(\"Entering element \", h, next, scrollOuterHeight)\n\n if (next > h - scrollOuterHeight) {\n // To much scrolled!\n //console.log(\"Corrected maximum scroll position\")\n next = Math.max(0, h - scrollOuterHeight);\n\n // Also propagate this change to the .leave handler\n this.nextScrollPosition = next\n //console.log(\"corrected! \", h, next, scrollOuterHeight)\n }\n\n const internal = this.getInternalScrollElement(element)\n let nextInternal = this.nextInternalScrollPosition\n if (internal) {\n nextInternal = Math.max(0, this.nextInternalScrollPosition - internal.clientHeight);\n const scrollOuterHeight = this.getScrollOuterHeight(internal);\n const h = internal.scrollHeight\n\n if (nextInternal > h - scrollOuterHeight) {\n nextInternal = Math.max(0, h - scrollOuterHeight);\n }\n }\n\n // Prepare animation\n const childElement = (element.firstElementChild as HTMLElement)\n\n let transitionDuration = 300\n if (this.transitionName === \"pop\" || this.transitionName == \"modal-pop\") {\n // Pop animations should go faster\n transitionDuration = 250\n }\n\n if (this.transitionName == \"push\" || this.transitionName == \"pop\" || this.transitionName == \"modal-push\") {\n childElement.style.willChange = \"transform\"\n }\n\n if (scrollElement.scrollTop !== next) {\n scrollElement.style.willChange = \"scroll-position\"\n }\n\n if (internal && internal.scrollTop !== nextInternal) {\n internal.style.willChange = \"scroll-position\"\n }\n\n // Lock position if needed\n // This happens before the beforeLeave animation frame!\n this.growSize(w, h);\n\n // Disable scroll during animation (this is to fix overflow elements)\n // We can only allow scroll during transitions when all browser support overflow: clip, which they don't atm\n // This sometimes doesn't work on iOS Safari on body due to a bug\n requestAnimationFrame(() => {\n // Wait and execute immediately after beforeLeave's animation frame\n // Let the OS rerender once so all the positions are okay after dom insertion\n scrollElement.scrollTop = next;\n\n if (internal) {\n internal.scrollTop = nextInternal;\n }\n\n // Allow scrollTop override in a specified handler\n // Call before\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.beforeEnterAnimation) {\n instance.beforeEnterAnimation()\n }\n }\n\n // Start animation in the next frame\n requestAnimationFrame(() => {\n // We've reached our initial positioning and can start our animation\n element.className = this.transitionName + \"-enter-active \" + this.transitionName + \"-enter-to\";\n\n // Call start\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.beginEnterAnimation) {\n instance.beginEnterAnimation()\n }\n }\n\n setTimeout(() => {\n //scrollElement.style.overflow = \"\";\n element.style.willChange = \"\"\n childElement.style.willChange = \"\"\n scrollElement.style.willChange = \"\"\n if (internal) {\n internal.style.willChange = \"\"\n }\n\n // Call finished\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.finishedEnterAnimation) {\n instance.finishedEnterAnimation()\n }\n }\n done();\n }, transitionDuration + 25);\n });\n });\n }\n\n getScrollOuterHeight(scrollElement: HTMLElement) {\n // we add some extra padding below to fix iOS bug that reports wront clientHeight\n // We need to show some extra area below of the leaving frame, but to do this, we also need\n // to check if there is still content left below the visible client height. So we calculate the area underneath the client height\n // and limit to 300px maximum extra padding\n // const fixPadding = Math.min(300, Math.max(0, element.offsetHeight - current - scrollElement.clientHeight));\n // console.log(\"Fix padding: \" + fixPadding);\n // This fixPadding thing doesn't work on other browsers. Need to recheck when it reappears on iOS\n let h = scrollElement.clientHeight; // + fixPadding;\n if (scrollElement === document.documentElement) {\n // Fix viewport glitch\n const w = window as any;\n if (w.visualViewport) {\n //console.log(\"Used height \" + w.visualViewport.height + \" instead of \" + h);\n h = w.visualViewport.height;\n }\n }\n return h\n }\n\n leave(element: HTMLElement, done) {\n if (this.transitionName == \"none\") {\n done();\n return;\n }\n\n const scrollElement = this.getScrollElement();\n let h = this.getScrollOuterHeight(scrollElement)\n\n // Prepare animation\n const childElement = (element.firstElementChild as HTMLElement)\n childElement.style.willChange = \"scroll-position,transform\"\n\n let transitionDuration = 300\n if (this.transitionName === \"pop\" || this.transitionName == \"modal-pop\") {\n // Pop animations should go faster\n transitionDuration = 250\n }\n\n // This animation frame is super important to prevent flickering on Safari and Webkit!\n // This is also one of the reasons why we cannot use the default Vue class additions\n // We do this to improve the timing of the classes and scroll positions\n requestAnimationFrame(() => {\n // Prevent blinking due to slow rerender after scrollTop changes\n // Create a clone and offset the clone first. After that, adjust the scroll position\n const current = this.previousScrollPosition;\n const next = this.nextScrollPosition;\n\n const height = h + \"px\";\n //console.log(\"height\", height);\n\n // Setting the class has to happen in one go.\n // First we need to make our element fixed / absolute positioned, and pinned to all the edges\n // In the same frame, we need to update the scroll position.\n // If we switch the ordering, this won't work!\n element.className = this.transitionName + \"-leave-active \" + this.transitionName + \"-leave\";\n\n element.style.top = next + \"px\";\n element.style.height = height;\n element.style.bottom = \"auto\";\n element.style.overflow = \"hidden\";\n\n // Now scroll!\n childElement.style.overflow = \"hidden\";\n childElement.style.height = h + \"px\";\n\n childElement.scrollTop = current;\n\n requestAnimationFrame(() => {\n // We've reached our initial positioning and can start our animation\n element.className = this.transitionName + \"-leave-active \" + this.transitionName + \"-leave-to\";\n\n setTimeout(() => {\n element.style.overflow = \"\";\n element.style.top = \"\";\n element.style.height = \"\";\n element.style.bottom = \"\";\n childElement.style.overflow = \"\";\n childElement.style.willChange = \"\"\n done();\n }, transitionDuration + 25);\n });\n });\n }\n\n afterLeave(element: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n\n element.className = \"\";\n }\n\n afterEnter(element: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n this.unfreezeSize();\n element.className = \"\";\n }\n\n enterCancelled(_element: HTMLElement) {\n this.unfreezeSize();\n }\n\n destroyed() {\n // console.log(\"Destroyed navigation controller\");\n\n // Prevent memory issues by removing all references and destroying kept alive components\n for (const component of this.components) {\n // Destroy them one by one\n if (component.isKeptAlive) {\n component.destroy(component.vnode);\n }\n }\n\n this.components = [];\n this.mainComponent = null;\n }\n}\n","import { render, staticRenderFns } from \"./NavigationController.vue?vue&type=template&id=250e5c49&\"\nimport script from \"./NavigationController.vue?vue&type=script&lang=ts&\"\nexport * from \"./NavigationController.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./NavigationController.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('250e5c49')) {\n api.createRecord('250e5c49', component.options)\n } else {\n api.reload('250e5c49', component.options)\n }\n module.hot.accept(\"./NavigationController.vue?vue&type=template&id=250e5c49&\", function () {\n api.rerender('250e5c49', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/NavigationController.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { appear: _vm.shouldAppear, name: \"fade\", duration: 300 } },\n [\n _c(\n \"div\",\n {\n staticClass: \"popup\",\n class: {\n \"push-down\": _vm.pushDown == 1,\n \"push-down-full\": _vm.pushDown > 1\n },\n on: { click: _vm.onClick }\n },\n [\n _c(\"div\", { ref: \"mainContent\" }, [\n _c(\n \"div\",\n { staticClass: \"scrollable-container\" },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n key: _vm.root.key,\n attrs: { component: _vm.root },\n on: { pop: _vm.dismiss }\n })\n ],\n 1\n )\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { Component, Vue } from \"vue-property-decorator\";\n\nimport ModalStackComponent from \"./ModalStackComponent.vue\";\nimport { PopOptions } from \"./PopOptions\";\n\n// You can declare mixins as the same style as components.\n@Component\nexport class ModalMixin extends Vue {\n get modalStackComponent(): ModalStackComponent | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof ModalStackComponent) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * Call one of the pop listeners of a parent or grandparent. E.g. to go back in a navigation controller.\n * @param options Options that should get applied to the pop of the first parent that listens for the pop event\n */\n pop(options: PopOptions = {}) {\n const nav = this.getPoppableParent();\n if (nav) {\n // Sometimes we need to call the pop event instead (because this adds custom data to the event)\n if (nav.$listeners[\"pop\"]) {\n nav.$emit(\"pop\", options);\n } else {\n console.error(\"Couldn't pop. Failed\");\n }\n } else {\n console.warn(\"No navigation controller to pop\");\n }\n }\n\n /**\n * Return the first child of a parent that listens for the pop event\n */\n getPoppableParent(): any | null {\n let prev = this;\n let start: any = this.$parent;\n while (start) {\n if (prev.$listeners[\"pop\"]) {\n return prev;\n }\n\n prev = start;\n start = start.$parent;\n }\n return null;\n }\n}","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\nimport { PopOptions } from './PopOptions';\nimport { HistoryManager } from './HistoryManager';\nimport { ModalMixin } from './ModalMixin';\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n }\n})\nexport default class Popup extends ModalMixin {\n @Prop({ required: true })\n root!: ComponentWithProperties\n\n get shouldAppear() {\n return this.root.animated\n }\n\n get pushDown() {\n const popups = this.modalStackComponent?.stackComponent?.components.filter(c => c.component === Popup) ?? []\n if (popups.length > 0 && popups[popups.length - 1].componentInstance() !== this) {\n if (popups.length > 1 && popups[popups.length - 2].componentInstance() === this) {\n return 1\n }\n return 2\n }\n return 0\n }\n\n get isFocused() {\n const popups = this.modalStackComponent?.stackComponent?.components ?? []\n if (popups.length > 0 && popups[popups.length - 1].componentInstance() !== this) {\n return false\n }\n return true\n }\n\n onClick(event) {\n const mainContent = this.$refs.mainContent as HTMLElement\n // Check click is inside mainContent\n if (mainContent && !mainContent.contains(event.target) && document.body.contains(event.target)) {\n this.dismiss()\n event.preventDefault()\n }\n }\n\n activated() {\n document.addEventListener(\"keydown\", this.onKey);\n }\n\n deactivated() {\n document.removeEventListener(\"keydown\", this.onKey);\n }\n\n async dismiss(options?: PopOptions) {\n if (!options?.force) {\n const r = await this.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n // Check which modal is underneath?\n const popups = this.modalStackComponent?.stackComponent?.components.filter(c => c.modalDisplayStyle !== \"overlay\") ?? []\n if (popups.length === 0 || popups[popups.length - 1].componentInstance() === this) {\n const index = this.root.getHistoryIndex()\n if (index !== null && index !== undefined) {\n HistoryManager.returnToHistoryIndex(index - 1);\n }\n }\n this.pop(options)\n }\n\n onKey(event) {\n if (event.defaultPrevented || event.repeat) {\n return;\n }\n\n if (!this.isFocused) {\n return;\n }\n\n const key = event.key || event.keyCode;\n\n if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n this.dismiss();\n event.preventDefault();\n }\n }\n\n shouldNavigateAway() {\n return this.root.shouldNavigateAway()\n }\n}\n","import { render, staticRenderFns } from \"./Popup.vue?vue&type=template&id=a782d2fa&\"\nimport script from \"./Popup.vue?vue&type=script&lang=ts&\"\nexport * from \"./Popup.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Popup.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a782d2fa')) {\n api.createRecord('a782d2fa', component.options)\n } else {\n api.reload('a782d2fa', component.options)\n }\n module.hot.accept(\"./Popup.vue?vue&type=template&id=a782d2fa&\", function () {\n api.rerender('a782d2fa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/Popup.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n _vm._l(_vm.components, function(component, index) {\n return _c(\"ComponentWithPropertiesInstance\", {\n key: component.key,\n ref: \"children\",\n refInFor: true,\n attrs: { component: component },\n on: {\n pop: function($event) {\n return _vm.removeAt(index, component.key)\n }\n }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n },\n})\nexport default class StackComponent extends Vue {\n components: ComponentWithProperties[] = [];\n\n show(component: ComponentWithProperties) {\n this.components.push(component);\n }\n\n removeAt(index, key) {\n if (!this.components[index]) {\n // Manually search for the key (race conditions with slow events in vue)\n for (const [i, comp] of this.components.entries()) {\n if (comp.key === key) {\n console.warn(\"Corrected index from \"+index+\" to \"+i)\n index = i;\n break;\n }\n }\n }\n if (this.components[index] !== undefined && this.components[index].key === key) {\n this.components.splice(index, 1);\n } else {\n console.warn(\"Expected component with key \" + key + \" at index\" + index);\n }\n }\n\n beforeDestroy() {\n this.components = [];\n }\n}\n","import { render, staticRenderFns } from \"./StackComponent.vue?vue&type=template&id=1b21bde4&\"\nimport script from \"./StackComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./StackComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1b21bde4')) {\n api.createRecord('1b21bde4', component.options)\n } else {\n api.reload('1b21bde4', component.options)\n }\n module.hot.accept(\"./StackComponent.vue?vue&type=template&id=1b21bde4&\", function () {\n api.rerender('1b21bde4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/StackComponent.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { appear: _vm.shouldAppear, name: \"fade\", duration: 300 } },\n [\n _c(\"div\", { staticClass: \"sheet\", on: { click: _vm.onClick } }, [\n _c(\n \"div\",\n { ref: \"mainContent\" },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n key: _vm.root.key,\n attrs: { component: _vm.root },\n on: { pop: _vm.dismiss }\n })\n ],\n 1\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\nimport { Vue, Component, Prop } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\nimport { PopOptions } from './PopOptions';\nimport { ModalMixin } from './ModalMixin';\nimport { HistoryManager } from \"./HistoryManager\";\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n }\n})\nexport default class Sheet extends ModalMixin {\n @Prop({ required: true })\n root!: ComponentWithProperties\n\n get shouldAppear() {\n return this.root.animated\n }\n\n onClick(event) {\n const mainContent = this.$refs.mainContent as HTMLElement\n // Check click is inside mainContent\n if (mainContent && !mainContent.contains(event.target) && document.body.contains(event.target)) {\n this.dismiss()\n event.preventDefault()\n }\n }\n \n activated() {\n document.addEventListener(\"keydown\", this.onKey);\n }\n\n deactivated() {\n document.removeEventListener(\"keydown\", this.onKey);\n }\n\n get isFocused() {\n const popups = this.modalStackComponent?.stackComponent?.components ?? []\n if (popups.length > 0 && popups[popups.length - 1].componentInstance() !== this) {\n return false\n }\n return true\n }\n\n async dismiss(options?: PopOptions) {\n if (!options?.force) {\n const r = await this.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n // Check which modal is undernath?\n const popups = this.modalStackComponent?.stackComponent?.components.filter(c => c.modalDisplayStyle !== \"overlay\") ?? []\n if (popups.length === 0 || popups[popups.length - 1].componentInstance() === this) {\n const index = this.root.getHistoryIndex()\n if (index !== null && index !== undefined) {\n HistoryManager.returnToHistoryIndex(index - 1);\n }\n }\n this.pop(options)\n }\n\n onKey(event) {\n if (event.defaultPrevented || event.repeat) {\n return;\n }\n\n if (!this.isFocused) {\n return;\n }\n\n const key = event.key || event.keyCode;\n\n if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n this.dismiss();\n event.preventDefault();\n }\n }\n\n shouldNavigateAway() {\n return this.root.shouldNavigateAway()\n }\n}\n","import { render, staticRenderFns } from \"./Sheet.vue?vue&type=template&id=30e9f1b6&\"\nimport script from \"./Sheet.vue?vue&type=script&lang=ts&\"\nexport * from \"./Sheet.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Sheet.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('30e9f1b6')) {\n api.createRecord('30e9f1b6', component.options)\n } else {\n api.reload('30e9f1b6', component.options)\n }\n module.hot.accept(\"./Sheet.vue?vue&type=template&id=30e9f1b6&\", function () {\n api.rerender('30e9f1b6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/Sheet.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { appear: _vm.shouldAppear, name: \"fade\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"side-view\",\n class: {\n \"push-down\": _vm.pushDown == 1,\n \"push-down-full\": _vm.pushDown > 1\n },\n on: { mousedown: _vm.dismiss, touchdown: _vm.dismiss }\n },\n [\n _c(\n \"div\",\n {\n on: {\n mousedown: function($event) {\n $event.stopPropagation()\n },\n touchdown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n key: _vm.root.key,\n attrs: { component: _vm.root },\n on: { pop: _vm.dismiss }\n })\n ],\n 1\n )\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\nimport { PopOptions } from './PopOptions';\nimport { HistoryManager } from './HistoryManager';\nimport { ModalMixin } from './ModalMixin';\n\nconst visualViewport = (window as any).visualViewport\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n }\n})\nexport default class SideView extends ModalMixin {\n @Prop({ required: true })\n root!: ComponentWithProperties\n\n get shouldAppear() {\n return this.root.animated\n }\n\n get pushDown() {\n const sideViews = this.modalStackComponent?.stackComponent?.components.filter(c => c.component === SideView) ?? []\n if (sideViews.length > 0 && sideViews[sideViews.length - 1].componentInstance() !== this) {\n if (sideViews.length > 1 && sideViews[sideViews.length - 2].componentInstance() === this) {\n return 1\n }\n return 2\n }\n return 0\n }\n\n get isFocused() {\n const sideViews = this.modalStackComponent?.stackComponent?.components ?? []\n if (sideViews.length > 0 && sideViews[sideViews.length - 1].componentInstance() !== this) {\n return false\n }\n return true\n }\n\n activated() {\n document.addEventListener(\"keydown\", this.onKey);\n this.resize();\n\n if (visualViewport) {\n visualViewport.addEventListener('resize', this.resize);\n }\n }\n\n deactivated() {\n document.removeEventListener(\"keydown\", this.onKey);\n\n if (visualViewport) {\n visualViewport.removeEventListener('resize', this.resize);\n }\n }\n\n async dismiss(options?: PopOptions) {\n if (!options?.force) {\n const r = await this.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n // Check which modal is undernath?\n const sideViews = this.modalStackComponent?.stackComponent?.components.filter(c => c.modalDisplayStyle !== \"overlay\") ?? []\n if (sideViews.length === 0 || sideViews[sideViews.length - 1].componentInstance() === this) {\n const index = this.root.getHistoryIndex()\n if (index !== null && index !== undefined) {\n HistoryManager.returnToHistoryIndex(index - 1);\n }\n }\n this.pop(options)\n }\n\n resize() {\n if (!visualViewport) {\n return;\n }\n }\n\n onKey(event) {\n if (event.defaultPrevented || event.repeat) {\n return;\n }\n\n if (!this.isFocused) {\n return;\n }\n\n const key = event.key || event.keyCode;\n\n if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n this.dismiss();\n event.preventDefault();\n }\n }\n\n shouldNavigateAway() {\n return this.root.shouldNavigateAway()\n }\n}\n","import { render, staticRenderFns } from \"./SideView.vue?vue&type=template&id=9ebd30d6&\"\nimport script from \"./SideView.vue?vue&type=script&lang=ts&\"\nexport * from \"./SideView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SideView.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9ebd30d6')) {\n api.createRecord('9ebd30d6', component.options)\n } else {\n api.reload('9ebd30d6', component.options)\n }\n module.hot.accept(\"./SideView.vue?vue&type=template&id=9ebd30d6&\", function () {\n api.rerender('9ebd30d6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/SideView.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport NavigationController from \"./NavigationController.vue\";\nimport Popup from \"./Popup.vue\";\nimport StackComponent from \"./StackComponent.vue\";\nimport Sheet from './Sheet.vue';\nimport { HistoryManager } from './HistoryManager';\nimport { PushOptions } from \"./PushOptions\";\nimport SideView from \"./SideView.vue\";\n\n@Component({\n components: {\n NavigationController,\n StackComponent,\n },\n})\nexport default class ModalStackComponent extends Vue {\n @Prop()\n readonly root!: ComponentWithProperties;\n\n @Ref()\n stackComponent!: StackComponent;\n\n present(options: PushOptions) {\n const component = options.components[options.components.length - 1]\n\n if (options.animated !== undefined) {\n component.animated = options.animated\n }\n\n const style = options.modalDisplayStyle ?? component.modalDisplayStyle ?? 'cover'\n component.setDisplayStyle(style)\n\n if (style === \"popup\" && (this.$el as HTMLElement).offsetWidth > 800) {\n const c = new ComponentWithProperties(Popup, { root: component })\n\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n (c.componentInstance() as (Popup | undefined))?.pop({ animated: canAnimate});\n }, options?.adjustHistory ?? true);\n \n this.stackComponent.show(c);\n \n return;\n }\n\n if (style === \"sheet\" && (this.$el as HTMLElement).offsetWidth > 700) {\n const c = new ComponentWithProperties(Sheet, { root: component })\n\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n // todo: fix reference to this and memory handling here!!\n (c.componentInstance() as (Sheet | undefined))?.pop({ animated: canAnimate});\n }, options?.adjustHistory ?? true);\n\n this.stackComponent.show(c);\n return;\n }\n\n if (style === \"side-view\" && (this.$el as HTMLElement).offsetWidth > 800) {\n const c = new ComponentWithProperties(SideView, { root: component })\n\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n // todo: fix reference to this and memory handling here!!\n (c.componentInstance() as (SideView | undefined))?.pop({ animated: canAnimate});\n }, options?.adjustHistory ?? true);\n\n this.stackComponent.show(c);\n return;\n }\n\n if (style === \"overlay\") {\n this.stackComponent.show(component);\n return;\n }\n (this.$refs.navigationController as NavigationController).push(options);\n }\n\n /**\n * @deprecated\n */\n replace(component: ComponentWithProperties, animated = true) {\n const nav = this.$refs.navigationController as NavigationController;\n nav.push({ components: [component], animated, replace: nav.components.length });\n }\n}\n","import { render, staticRenderFns } from \"./ModalStackComponent.vue?vue&type=template&id=c053b00e&\"\nimport script from \"./ModalStackComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./ModalStackComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('c053b00e')) {\n api.createRecord('c053b00e', component.options)\n } else {\n api.reload('c053b00e', component.options)\n }\n module.hot.accept(\"./ModalStackComponent.vue?vue&type=template&id=c053b00e&\", function () {\n api.rerender('c053b00e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/ModalStackComponent.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"split-view-controller\",\n attrs: { \"data-has-detail\": _vm.detail ? \"true\" : \"false\" }\n },\n [\n _c(\n \"div\",\n { ref: \"masterElement\", staticClass: \"master\" },\n [\n _c(\"NavigationController\", {\n ref: \"navigationController\",\n attrs: { root: _vm.root },\n on: { showDetail: _vm.showDetail }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.detail\n ? _c(\n \"div\",\n { staticClass: \"detail\" },\n [\n _c(\"FramedComponent\", {\n key: _vm.detail.key,\n ref: \"detailFrame\",\n attrs: { root: _vm.detail }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport FramedComponent from \"./FramedComponent.vue\";\nimport NavigationController from \"./NavigationController.vue\";\nimport { PushOptions } from \"./PushOptions\";\n\n// Credits https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf\nconst throttle = (func, limit) => {\n let lastFunc;\n let lastRan;\n return function() {\n const context = this;\n // eslint-disable-next-line prefer-rest-params\n const args = arguments;\n if (!lastRan) {\n func.apply(context, args);\n lastRan = Date.now();\n } else {\n clearTimeout(lastFunc);\n lastFunc = setTimeout(function() {\n if (Date.now() - lastRan >= limit) {\n func.apply(context, args);\n lastRan = Date.now();\n }\n }, limit - (Date.now() - lastRan));\n }\n };\n};\n\n@Component({\n components: {\n NavigationController,\n FramedComponent,\n }\n})\nexport default class SplitViewController extends Vue {\n @Prop()\n root!: ComponentWithProperties;\n detail: ComponentWithProperties | null = null;\n\n @Prop()\n detailWidth?: string;\n\n @Ref()\n navigationController!: NavigationController;\n\n @Ref()\n masterElement!: HTMLElement; // = KeepAlive internal class\n\n detailKey: number | null = null;\n\n activated() {\n (this as any).listener = throttle(this.onResize, 100);\n window.addEventListener(\"resize\", (this as any).listener, { passive: true } as EventListenerOptions);\n \n // Recheck if we need to show the detail\n this.onResize();\n }\n\n mounted() {\n if (this.detailWidth) {\n (this.$el as HTMLElement).style.setProperty(\"--split-view-width\", this.detailWidth);\n }\n }\n\n deactivated() {\n window.removeEventListener(\"resize\", (this as any).listener, { passive: true } as EventListenerOptions);\n }\n\n beforeDestroy() {\n window.removeEventListener(\"resize\", (this as any).listener, { passive: true } as EventListenerOptions);\n }\n\n onResize() {\n if (this.shouldCollapse()) {\n if (this.detail) {\n this.collapse();\n }\n } else {\n if (this.lastIsDetail && !this.detail) {\n this.expand();\n }\n }\n }\n\n get lastIsDetail() {\n return this.detailKey != null && (this.$refs.navigationController as NavigationController)?.mainComponent?.key == this.detailKey;\n }\n\n getScrollElement(element: HTMLElement | null = null): HTMLElement {\n if (!element) {\n element = this.$el as HTMLElement;\n }\n\n const style = window.getComputedStyle(element);\n if (style.overflowY == \"scroll\" || style.overflow == \"scroll\" || style.overflow == \"auto\" || style.overflowY == \"auto\") {\n return element;\n } else {\n if (!element.parentElement) {\n return document.documentElement;\n }\n return this.getScrollElement(element.parentElement);\n }\n }\n\n async shouldNavigateAway(): Promise<boolean> {\n if (this.detail) {\n const r = await this.detail.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n if (this.navigationController) {\n return await this.navigationController.shouldNavigateAway();\n }\n\n return true;\n }\n\n async showDetail(options: PushOptions): Promise<boolean> {\n const component = options.components[options.components.length - 1]\n this.detailKey = component.key;\n\n if (this.shouldCollapse()) {\n if (this.lastIsDetail || this.detail) {\n console.error(\"Pusing a detail when a detail is already presented is not allowed\");\n return false;\n }\n\n this.navigationController.push(options);\n } else {\n // Replace existing detail component\n // First check if we don't destroy anything\n if (this.detail) {\n const r = await this.detail.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n this.getScrollElement().scrollTop = 0;\n this.detail = component;\n }\n return true;\n }\n\n shouldCollapse() {\n return (this.$el as HTMLElement).offsetWidth < 850;\n }\n\n collapse() {\n if (!this.navigationController) {\n console.error(\"Cannot collapse without navigation controller\");\n return;\n }\n if (this.lastIsDetail) {\n console.error(\"Cannot collapse when the detail is already collaped\");\n return;\n }\n if (!this.detail) {\n console.error(\"Cannot collapse without detail\");\n return;\n }\n this.detail.keepAlive = true;\n const detail = this.detail;\n this.detail = null;\n this.navigationController.push({ components: [detail], animated: false });\n }\n\n async expand() {\n if (!this.navigationController) {\n console.error(\"Cannot expand without navigation controller\");\n return;\n }\n if (this.detail) {\n console.error(\"Cannot expand when detail is already visible\");\n return;\n }\n if (!this.lastIsDetail) {\n console.error(\"Cannot expand when there is no detail\");\n return;\n }\n const popped = await this.navigationController.pop({\n animated: false,\n destroy: false\n });\n if (!popped || popped.length == 0) {\n return;\n }\n\n // We need to wait until it is removed from the vnode\n this.$nextTick(() => {\n this.detail = popped[0];\n });\n }\n}\n","import { render, staticRenderFns } from \"./SplitViewController.vue?vue&type=template&id=e2d6041c&\"\nimport script from \"./SplitViewController.vue?vue&type=script&lang=ts&\"\nexport * from \"./SplitViewController.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SplitViewController.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e2d6041c')) {\n api.createRecord('e2d6041c', component.options)\n } else {\n api.reload('e2d6041c', component.options)\n }\n module.hot.accept(\"./SplitViewController.vue?vue&type=template&id=e2d6041c&\", function () {\n api.rerender('e2d6041c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/SplitViewController.vue\"\nexport default component.exports","// mixins.js\nimport { Component, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"..\";\nimport NavigationController from \"./NavigationController.vue\";\nimport { PopOptions } from './PopOptions';\nimport Popup from \"./Popup.vue\";\nimport { PushOptions } from \"./PushOptions\";\nimport Sheet from \"./Sheet.vue\";\nimport SideView from \"./SideView.vue\";\nimport SplitViewController from \"./SplitViewController.vue\";\n\n// You can declare mixins as the same style as components.\n@Component\nexport class NavigationMixin extends Vue {\n emitParents(event: string, data: any) {\n let start: any = this.$parent;\n while (start) {\n if (start.$listeners[event]) {\n start.$emit(event, data);\n return;\n } else {\n start = start.$parent;\n }\n }\n console.warn(\"No handlers found for event \" + event);\n }\n\n show(options: PushOptions | ComponentWithProperties) {\n if (!(options as any).components) {\n this.emitParents(\"show\", { components: [options] });\n } else {\n this.emitParents(\"show\", options);\n }\n \n }\n\n present(options: PushOptions | ComponentWithProperties) {\n if (!(options as any).components) {\n this.emitParents(\"present\", { components: [options] });\n } else {\n this.emitParents(\"present\", options);\n }\n }\n\n showDetail(options: PushOptions | ComponentWithProperties) {\n if (!(options as any).components) {\n this.emitParents(\"showDetail\", { components: [options] });\n } else {\n this.emitParents(\"showDetail\", options);\n }\n }\n\n /**\n * Call one of the pop listeners of a parent or grandparent. E.g. to go back in a navigation controller.\n * @param options Options that should get applied to the pop of the first parent that listens for the pop event\n */\n pop(options: PopOptions = {}) {\n const nav = this.getPoppableParent();\n if (nav) {\n // Sometimes we need to call the pop event instead (because this adds custom data to the event)\n if (nav.$listeners[\"pop\"]) {\n nav.$emit(\"pop\", options);\n } else {\n console.error(\"Couldn't pop. Failed\");\n }\n } else {\n console.warn(\"No navigation controller to pop\");\n }\n }\n\n /**\n * Same as pop, but instead dismisses the first parent that was displayed as a modal\n * @param options Options that should get applied to the pop of the first modal navigation controller or popup that listens for the pop event\n */\n dismiss(options: PopOptions = {}) {\n const modalNav = this.modalOrPopup as any;\n if (!modalNav) {\n console.warn(\"Tried to dismiss without being displayed as a modal. Use pop instead\")\n // Chances are this is not displayed as a modal, but on a normal stack\n this.pop(options);\n } else {\n if (modalNav instanceof Sheet || modalNav instanceof Popup || modalNav instanceof SideView) {\n modalNav.dismiss(options);\n return\n }\n modalNav.pop(options);\n }\n }\n\n get navigationController(): NavigationController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n get modalOrPopup(): NavigationController | Popup | Sheet | SideView | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n if (start.animationType == \"modal\") return start;\n }\n\n if (start instanceof Sheet) {\n return start;\n }\n\n if (start instanceof Popup) {\n return start;\n }\n\n if (start instanceof SideView) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n get modalNavigationController(): NavigationController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n if (start.animationType == \"modal\") return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n get splitViewController(): SplitViewController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof SplitViewController) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * Return the first child of a parent that listens for the pop event\n */\n getPoppableParent(): any | null {\n let prev = this;\n let start: any = this.$parent;\n while (start) {\n if (prev.$listeners[\"pop\"]) {\n return prev;\n }\n\n prev = start;\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * Whether the current navivation controller above this component can pop (it has more than one child). Excluding modal view controllers\n */\n canPop = false;\n canDismiss = false;\n\n activated() {\n Vue.set(this, \"canPop\", this.calculateCanPop());\n Vue.set(this, \"canDismiss\", this.calculateCanDismiss());\n }\n\n beforeMount() {\n Vue.set(this, \"canPop\", this.calculateCanPop());\n Vue.set(this, \"canDismiss\", this.calculateCanDismiss());\n }\n\n /**\n * Return the first navigation controller that can get popped, excluding the modal navigation controller and the stack component\n * Note: this shouldn't be a getter to disable vue caching getters\n */\n private getPoppableNavigationController(): NavigationController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n if (start.animationType == \"modal\") return null;\n\n if (start.components.length > 1) {\n return start;\n }\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n isFocused() {\n const modalOrPopup = this.modalOrPopup\n if ((modalOrPopup instanceof Popup) || (modalOrPopup instanceof Sheet) || (modalOrPopup instanceof SideView)) {\n return !!(modalOrPopup as (any)).isFocused\n }\n\n // todo: detect edge case when this element is deactivated\n return true\n }\n\n calculateCanPop(): boolean {\n return this.getPoppableNavigationController() != null;\n }\n\n calculateCanDismiss(): boolean {\n const modalOrPopup = this.modalOrPopup;\n\n if (modalOrPopup === null) {\n return false\n }\n\n if (modalOrPopup instanceof NavigationController) {\n if ((modalOrPopup as any).components.length <= 1) {\n return false\n }\n }\n\n return true\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","HistoryManager","HistoryManagerStatic","states","counter","active","animateHistoryPop","isAdjustingState","manualStateAction","historyQueue","isQueueRunning","addToQueue","action","this","push","runQueue","shift","finally","go","delta","async","Promise","resolve","timer","history","listener","clearTimeout","window","removeEventListener","addEventListener","setTimeout","console","warn","setUrl","url","ComponentWithProperties","debug","count","length","index","replaceState","pushState","undoAction","adjustHistory","c","returnToHistoryIndex","adjustHistoryCount","splice","filter","state","activate","event","newCounter","undefined","amount","animate","deletedStates","reverse","constructor","component","properties","type","hide","vnode","keepAlive","isKeptAlive","isMounted","modalDisplayStyle","animated","historyIndex","isContainerView","keyCounter","clone","beforeMount","name","keepAliveCounter","destroy","assignHistoryIndex","getHistoryIndex","mounted","ignoreActivate","onMountedChildComponent","child","onActivatedChildComponent","activated","componentInstance","instance","shouldNavigateAway","promise","then","catch","$destroy","setDisplayStyle","style","setAnimated","y","x","d","__WEBPACK_EXTERNAL_MODULE_vue__","ComponentWithPropertiesInstance","props","watch","_val","Error","created","start","$parent","destroyed","$children","$vnode","render","createElement","attrs","options","inheritAttrs","data","_vm","_h","$createElement","_c","_self","ref","root","_withStripped","__decorate","decorators","target","desc","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","i","__WEBPACK_EXTERNAL_MODULE_vue_class_component_c93a5958__","createDecorator","reflectMetadataIsSupported","getMetadata","Prop","Array","isArray","componentOptions","k","Ref","refKey","computed","cache","$refs","FramedComponent","pop","$emit","components","normalizeComponent","scriptExports","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","__file","on","present","_v","staticClass","mainComponent","css","beforeEnter","beforeLeave","enter","leave","afterLeave","afterEnter","enterCancelled","show","_e","NavigationController","transitionName","savedScrollPositions","nextScrollPosition","previousScrollPosition","nextInternalScrollPosition","savedInternalScrollPositions","initialComponents","slice","freezeSize","el","$el","width","offsetWidth","height","offsetHeight","growSize","unfreezeSize","getInternalScrollElement","element","mightBe","querySelector","getScrollElement","getComputedStyle","overflowY","overflow","parentElement","document","documentElement","shouldAnimate","error","activeElement","blur","force","replace","animationType","internalScrollElement","scrollElement","w","clientHeight","visualViewport","internalClientHeight","scrollTop","popped","comp","canAnimate","popToRoot","getPoppableParent","prev","$listeners","Math","max","insertedElement","className","_element","beforeBeforeEnterAnimation","finishedEnterAnimation","done","internal","firstElementChild","scrollOuterHeight","getScrollOuterHeight","next","nextInternal","scrollHeight","childElement","transitionDuration","willChange","requestAnimationFrame","beforeEnterAnimation","beginEnterAnimation","current","top","bottom","default","appear","shouldAppear","duration","class","pushDown","click","onClick","dismiss","ModalMixin","modalStackComponent","nav","Popup","popups","stackComponent","isFocused","mainContent","contains","body","preventDefault","onKey","deactivated","defaultPrevented","repeat","keyCode","required","_l","refInFor","$event","removeAt","StackComponent","entries","beforeDestroy","Sheet","mousedown","touchdown","stopPropagation","SideView","sideViews","resize","ModalStackComponent","navigationController","detail","showDetail","throttle","func","limit","lastFunc","lastRan","args","Date","now","apply","SplitViewController","detailKey","onResize","passive","detailWidth","setProperty","shouldCollapse","collapse","lastIsDetail","expand","$nextTick","NavigationMixin","canPop","canDismiss","emitParents","modalNav","modalOrPopup","modalNavigationController","splitViewController","calculateCanPop","calculateCanDismiss","getPoppableNavigationController"],"sourceRoot":""}
1
+ {"version":3,"file":"main.js","mappings":"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","sources":["webpack://@simonbackx/vue-app-navigation/webpack/bootstrap","webpack://@simonbackx/vue-app-navigation/webpack/runtime/define property getters","webpack://@simonbackx/vue-app-navigation/webpack/runtime/hasOwnProperty shorthand","webpack://@simonbackx/vue-app-navigation/./src/HistoryManager.ts","webpack://@simonbackx/vue-app-navigation/./src/ComponentWithProperties.ts","webpack://@simonbackx/vue-app-navigation/external module \"vue\"","webpack://@simonbackx/vue-app-navigation/./src/ComponentWithPropertiesInstance.ts","webpack://@simonbackx/vue-app-navigation/./src/FramedComponent.vue?4f5b","webpack://@simonbackx/vue-app-navigation/./node_modules/tslib/tslib.es6.js","webpack://@simonbackx/vue-app-navigation/external module \"vue-class-component\"","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-property-decorator/lib/helpers/metadata.js","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-property-decorator/lib/decorators/Prop.js","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-property-decorator/lib/decorators/Ref.js","webpack://@simonbackx/vue-app-navigation/./src/FramedComponent.vue?2fcd","webpack://@simonbackx/vue-app-navigation/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://@simonbackx/vue-app-navigation/./src/FramedComponent.vue","webpack://@simonbackx/vue-app-navigation/./src/ModalStackComponent.vue?42b1","webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue?3544","webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue?4d36","webpack://@simonbackx/vue-app-navigation/./src/NavigationController.vue?6269","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue?dfe1","webpack://@simonbackx/vue-app-navigation/./src/ModalMixin.ts","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue?7e96","webpack://@simonbackx/vue-app-navigation/./src/Popup.vue?11d0","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue?9ad8","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue?f85a","webpack://@simonbackx/vue-app-navigation/./src/SideView.vue?13f9","webpack://@simonbackx/vue-app-navigation/./src/StackComponent.vue?fb8e","webpack://@simonbackx/vue-app-navigation/./src/StackComponent.vue?4684","webpack://@simonbackx/vue-app-navigation/./src/StackComponent.vue","webpack://@simonbackx/vue-app-navigation/./src/ModalStackComponent.vue?08f9","webpack://@simonbackx/vue-app-navigation/./src/ModalStackComponent.vue","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue?f43c","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue?8e62","webpack://@simonbackx/vue-app-navigation/./src/Sheet.vue?195d","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue?8f4b","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue?0eca","webpack://@simonbackx/vue-app-navigation/./src/SplitViewController.vue?b1a8","webpack://@simonbackx/vue-app-navigation/./src/NavigationMixin.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { ComponentWithProperties } from \"./ComponentWithProperties\";\n\ntype HistoryState = {\n /// Url of the page, used if the user returns to this page using buttons on the page\n url?: string;\n\n /// Counter at which the state was added.\n index: number;\n\n /// Whether the history pushState was used to create this state (true) or if this is only a virtual state (false).\n adjustHistory: boolean;\n\n /// Action to execute when the user navigates back to the previous state using the browser's back button.\n undoAction?: (animate: boolean) => void;\n}\n\nclass HistoryManagerStatic {\n // undoActions: Map<number, (animate: boolean) => void> = new Map();\n\n states: HistoryState[] = [];\n\n counter = 0;\n active = false;\n animateHistoryPop = true;\n\n isAdjustingState = false;\n manualStateAction = false;\n\n // Manipulating the history is async and can cause issues when fast calls happen without awaiting the previous one\n historyQueue: (() => Promise<void>)[] = [];\n isQueueRunning = false;\n\n private addToQueue(action: () => Promise<void>) {\n this.historyQueue.push(action);\n if (!this.isQueueRunning) {\n this.runQueue();\n }\n }\n\n private runQueue() {\n this.isQueueRunning = true;\n const action = this.historyQueue.shift();\n if (action) {\n console.log('Running history queue action');\n action().finally(() => this.runQueue());\n } else {\n console.log('History queue done');\n this.isQueueRunning = false;\n }\n }\n\n private go(delta: number) {\n this.addToQueue(async () => {\n return new Promise<void>((resolve) => {\n this.manualStateAction = true;\n console.log('history.go', delta)\n history.go(delta); // should be negative\n let timer \n let listener = () => {\n clearTimeout(timer);\n resolve();\n window.removeEventListener(\"popstate\", listener);\n };\n window.addEventListener(\"popstate\", listener);\n\n // Timeout\n timer = setTimeout(() => {\n console.warn(\"Timeout while waiting for history.go\");\n listener();\n }, 200);\n });\n });\n }\n\n /// Set the current URL without modifying states\n setUrl(url: string) {\n if (!this.active) {\n return;\n }\n\n if (ComponentWithProperties.debug) {\n console.log(\"Set url: \" + url+\", current counter: \"+this.counter);\n }\n\n const count = this.states[this.states.length - 1].index;\n\n this.addToQueue(async () => {\n if (ComponentWithProperties.debug) {\n console.log('history.replaceState', count, url)\n }\n history.replaceState({ counter: count }, \"\", url);\n });\n this.states[this.states.length - 1].url = url;\n }\n\n pushState(url: string | undefined, undoAction: (animate: boolean) => void, adjustHistory: boolean) {\n if (!this.active) {\n return;\n }\n this.counter++;\n\n this.states.push({\n url: url,\n index: this.counter,\n adjustHistory,\n undoAction,\n })\n const c = this.counter;\n\n if (adjustHistory) {\n this.addToQueue(async () => {\n if (ComponentWithProperties.debug) {\n console.log('history.pushState', c, url)\n }\n history.pushState({ counter: c }, \"\", url);\n });\n } else {\n this.addToQueue(async () => {\n if (ComponentWithProperties.debug) {\n console.log('history.replaceState', c, url)\n }\n history.replaceState({ counter: c }, \"\", url);\n });\n }\n\n if (ComponentWithProperties.debug) {\n console.log(\"Push new state \" , this.states[this.states.length - 1]);\n }\n }\n\n /**\n * Return to a given history point in time, if needed\n */\n returnToHistoryIndex(counter: number) {\n // We'll keep this for debugging and remove it if everything is stable\n if (ComponentWithProperties.debug) {\n console.log(\"Did return to history index \" + counter + \", coming from \" + this.counter);\n }\n if (counter < this.counter) {\n this.counter = counter;\n\n // Delete all future states\n const deletedStates = this.states.splice(this.counter + 1);\n\n // Count how many states we have to delete from the history\n const adjustHistoryCount = deletedStates.filter(state => state.adjustHistory).length;\n\n // Don't need to call undo actions, because the user did go back by itself, and the undo actions are already done manually\n if (adjustHistoryCount > 0) {\n // Note: history.go is async, so all replaceState methods stop working until finished!\n if (ComponentWithProperties.debug) {\n console.log(\"Adjusting browser history state: popping \" + adjustHistoryCount + \" items\");\n }\n this.go(-adjustHistoryCount);\n }\n\n if (!this.states[this.counter].adjustHistory && this.states[this.counter].url) {\n if (ComponentWithProperties.debug) {\n console.log(\"Setting manual url without history api: \" + this.states[this.counter].url);\n }\n\n // Set new url manually again\n this.setUrl(this.states[this.counter].url!);\n }\n }\n\n return this.counter;\n }\n\n activate() {\n // Create push pop listener that will execute undo actions\n window.addEventListener(\"popstate\", (event) => {\n if (ComponentWithProperties.debug) {\n console.log(\"HistoryManager popstate\");\n }\n\n if (this.isAdjustingState) {\n console.warn(\"Duplicate popstate\");\n return;\n }\n if (this.manualStateAction) {\n this.manualStateAction = false;\n return;\n }\n this.isAdjustingState = true;\n const newCounter: number | undefined = event.state?.counter;\n\n if (newCounter !== undefined) {\n // Foward or backwards?\n if (newCounter > this.counter) {\n // Not allowed\n const amount = newCounter - this.counter;\n this.go(-amount);\n\n if (ComponentWithProperties.debug) {\n console.log(\"Not allowed to go forward, going back \" + amount + \" steps\");\n }\n } else {\n // Only animate if we only have one undo action and if animations are enabled\n const animate = this.counter - newCounter == 1 && this.animateHistoryPop;\n \n // Set new counter position\n this.counter = newCounter\n \n // Delete all future states\n const deletedStates = this.states.splice(this.counter + 1);\n\n // Execute undo actions in right order\n for (const state of deletedStates.reverse()) {\n if (state.undoAction) {\n if (ComponentWithProperties.debug) {\n console.log(\"Executing undoAction...\");\n }\n state.undoAction(animate);\n }\n }\n }\n }\n this.isAdjustingState = false;\n });\n\n this.active = true;\n\n // Set counter of initial history\n history.replaceState({ counter: this.counter }, \"\");\n\n this.states.push({\n index: this.counter,\n adjustHistory: false,\n url: \"/\"\n })\n }\n}\n\nexport const HistoryManager = new HistoryManagerStatic();\n","import { VNode } from \"vue\";\n\nimport { HistoryManager } from \"./HistoryManager\";\n\nexport type ModalDisplayStyle = \"cover\" | \"popup\" | \"overlay\" | \"sheet\" | \"side-view\"\n\nexport class ComponentWithProperties {\n /// Name of component or component Options. Currently no way to force type\n public component: any;\n public properties: Record<string, any>;\n public key: number | null = null;\n public type: string | null = null;\n public hide = false;\n\n /// Saved vnode of this instance\n public vnode: VNode | null = null;\n\n // Keep the vnode alive when it is removed from the VDOM\n public keepAlive = false;\n public isKeptAlive = false;\n public isMounted = false;\n\n // Counter for debugging. Count of components that are kept alive but are not mounted.\n static keepAliveCounter = 0;\n static keyCounter = 0;\n static debug = false;\n\n /// Cover whole screen. Other style = popup\n public modalDisplayStyle: ModalDisplayStyle = \"cover\"\n\n // If the display animation should be animated\n public animated = true\n\n // Hisotry index\n public historyIndex: number | null = null;\n public isContainerView = false;\n\n private static ignoreActivate: ComponentWithProperties | null = null\n\n constructor(component: any, properties: Record<string, any> = {}) {\n this.component = component;\n this.properties = properties;\n this.key = ComponentWithProperties.keyCounter++;\n }\n\n clone() {\n return new ComponentWithProperties(this.component, this.properties);\n }\n\n beforeMount() {\n if (ComponentWithProperties.debug) console.log(\"Before mount: \" + this.component.name);\n\n if (this.vnode) {\n if (this.isKeptAlive) {\n this.isKeptAlive = false;\n ComponentWithProperties.keepAliveCounter--;\n if (ComponentWithProperties.debug) console.log(\"Total components kept alive: \" + ComponentWithProperties.keepAliveCounter);\n } else {\n if (ComponentWithProperties.debug) console.warn(\"About to mount a component that was not destroyed properly \" + this.component.name);\n\n // Destroy the old vnode (unless keep alive), we should not reuse this one\n this.destroy(this.vnode);\n }\n }\n\n if (this.isContainerView) {\n // Always make sure it has a saved history index on first mount\n if (this.historyIndex === null) {\n this.historyIndex = HistoryManager.counter;\n }\n return;\n }\n if (this.modalDisplayStyle == \"overlay\") {\n return;\n }\n this.assignHistoryIndex()\n }\n\n getHistoryIndex() {\n if (this.component) return this.historyIndex;\n }\n\n mounted() {\n if (ComponentWithProperties.debug) console.log(\"Component mounted: \" + this.component.name);\n this.isMounted = true;\n\n // We pushed some elements and the history index increased during the mounted lifecycle\n // We now risk that in the next activation cycle (that is only called sometimes, not on all components), the UI will think that it is returning\n // to a previous history state\n // So we ignore the activation of only this instance until some other component got activated first\n ComponentWithProperties.ignoreActivate = this;\n }\n\n onMountedChildComponent(child: ComponentWithProperties) {\n this.isContainerView = true\n if (ComponentWithProperties.debug) console.log(\"Container mounted child component: \" + this.component.name + \" got \"+child.component.name);\n }\n\n onActivatedChildComponent(child: ComponentWithProperties) {\n this.isContainerView = true\n if (ComponentWithProperties.debug) console.log(\"Container got activated child component: \" + this.component.name + \" got \"+child.component.name);\n }\n\n /**\n * Call this method to assign a history index to this component (you should only call this when you want to assign a history index to this component that will not get mounted already)\n */\n assignHistoryIndex() {\n if (this.historyIndex == null) {\n if (ComponentWithProperties.debug) console.log(\"Assigned history index: \" + this.component.name + \" = \" + HistoryManager.counter);\n this.historyIndex = HistoryManager.counter;\n } else {\n // This component was never mounted but already got a history index assigned\n // -> probably pushed on a navigation controller with multiple components at once\n this.historyIndex = HistoryManager.returnToHistoryIndex(this.historyIndex);\n }\n }\n\n activated() {\n if (ComponentWithProperties.debug) console.log(\"Component activated: \" + this.component.name);\n\n if (ComponentWithProperties.ignoreActivate === this) {\n if (ComponentWithProperties.debug) console.log(\"Ignore component activation: \" + this.component.name);\n ComponentWithProperties.ignoreActivate = null\n return\n }\n ComponentWithProperties.ignoreActivate = null\n\n if (this.isContainerView) {\n return;\n }\n if (this.modalDisplayStyle == \"overlay\") {\n return;\n }\n if (this.historyIndex !== null) {\n // Sometimes, a component will get activated just after mounting it. We ignore that activated event once\n this.historyIndex = HistoryManager.returnToHistoryIndex(this.historyIndex);\n }\n }\n\n componentInstance(): Vue | undefined {\n return this.vnode?.componentInstance;\n }\n\n async shouldNavigateAway(): Promise<boolean> {\n const instance = this.componentInstance() as any;\n if (instance && instance.shouldNavigateAway) {\n const promise = instance.shouldNavigateAway();\n if (typeof promise === \"boolean\") {\n if (!promise) {\n return false;\n }\n } else if (promise.then && promise.catch) {\n const r = (await promise) as boolean;\n if (!r) {\n return false;\n }\n }\n }\n return true;\n }\n\n destroy(vnode) {\n this.isMounted = false;\n\n if (this.vnode) {\n if (vnode !== this.vnode) {\n console.warn('Received destroy event from old/different vnode', this.vnode, vnode);\n return;\n }\n if (this.keepAlive) {\n this.keepAlive = false;\n\n if (!this.isKeptAlive) {\n this.isKeptAlive = true;\n ComponentWithProperties.keepAliveCounter++;\n if (ComponentWithProperties.debug) console.log(\"Kept component alive \" + this.component.name);\n if (ComponentWithProperties.debug) console.log(\"Total components kept alive: \" + ComponentWithProperties.keepAliveCounter);\n }\n return;\n }\n\n if (this.isKeptAlive) {\n this.isKeptAlive = false;\n ComponentWithProperties.keepAliveCounter--;\n if (ComponentWithProperties.debug) console.log(\"Freed component from alive stack \" + this.component.name);\n if (ComponentWithProperties.debug) console.log(\"Total components kept alive: \" + ComponentWithProperties.keepAliveCounter);\n }\n\n if (ComponentWithProperties.debug) console.log(\"Destroyed component \" + this.component.name, this.vnode);\n this.vnode.componentInstance?.$destroy();\n this.vnode = null;\n }\n }\n\n setDisplayStyle(style: ModalDisplayStyle): ComponentWithProperties {\n this.modalDisplayStyle = style;\n return this;\n }\n\n setAnimated(animated: boolean): ComponentWithProperties {\n this.animated = animated;\n return this;\n }\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_vue__[\"default\"] });","/* eslint-disable vue/no-mutating-props */\nimport Vue, { VNode } from \"vue\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\n\nconst ComponentWithPropertiesInstance = Vue.extend({ \n props: {\n component: ComponentWithProperties,\n },\n\n watch: {\n component(_val) {\n throw new Error(\"Changing component during life is not yet supported\");\n },\n },\n\n created() {\n /// Whether the node should be destroyed if it is removed from the dom\n this.destroy = true;\n },\n\n beforeMount() {\n this.component.beforeMount();\n },\n\n activated() {\n this.component.activated();\n\n // Update container views history index\n let start: any = this.$parent;\n while (start) {\n if (start instanceof ComponentWithPropertiesInstance) {\n (start.component as ComponentWithProperties).onActivatedChildComponent(this.component)\n }\n start = start.$parent;\n }\n },\n\n mounted() {\n this.component.mounted();\n\n // Mark all parents as containers\n let start: any = this.$parent;\n while (start) {\n if (start instanceof ComponentWithPropertiesInstance) {\n (start.component as ComponentWithProperties).onMountedChildComponent(this.component)\n }\n start = start.$parent;\n }\n },\n\n destroyed() {\n // This component got removed (with v-if, v-for, ...) in some way.\n // This doesn't mean we want to destroy it\n this.component.destroy(this.$children[0]?.$vnode);\n },\n\n render(createElement): VNode {\n // Only create the vnode once\n if (this.component.vnode) {\n console.log('Reused render component: ' + this.component.component.name);\n\n // We need to update the parent here\n this.component.vnode.componentInstance.$parent = this;\n // Force update children (needed because the new vnode won't restart a lifecycle \n // and vue won't update children because that is not supported out of the box)\n this.$children = [this.component.vnode.componentInstance]\n return this.component.vnode;\n }\n\n // Only pass attrs that are not at props\n // Else they will get added to the DOM, and we don't want that\n let attrs = {}\n\n if (this.component.component?.options?.props) {\n // Loop all passed properties to the component, and only add\n // the properties that are not defined as prop in the component to attrs\n // which is the same bahviour as vue\n for (const key in this.component.properties) {\n if (Object.prototype.hasOwnProperty.call(this.component.properties, key)) {\n if (!Object.prototype.hasOwnProperty.call(this.component.component.options.props, key)) {\n // This property doesn't exist in the component, so \n // we'll add it as an attribute instead\n attrs[key] = this.component.properties[key];\n }\n }\n }\n } else {\n attrs = this.component.properties;\n }\n\n // Disable component inheritAttrs\n // Make sure we allow to pass props\n this.component.component.options.inheritAttrs = false\n\n this.component.vnode = createElement(this.component.component, {\n props: this.component.properties,\n\n // Also pass properties, so a component catch properties that are not defined in the component\n attrs,\n\n // Use a new key every time, we don't want to reuse previous nodes\n key: 'component-instance-' + ComponentWithProperties.keyCounter++,\n });\n console.log('New render component: ' + this.component.component.name, this.component.vnode);\n\n // Magic trick: we are now responsible for deallocating the component\n this.component.vnode.data.keepAlive = true;\n return this.component.vnode;\n },\n});\n\nexport default ComponentWithPropertiesInstance;\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\n \"div\",\n { ref: \"scrollContainer\" },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n attrs: { component: _vm.root }\n })\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"createDecorator\"]: () => __WEBPACK_EXTERNAL_MODULE_vue_class_component_c93a5958__.createDecorator, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_vue_class_component_c93a5958__[\"default\"] });","/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\nvar reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined';\nexport function applyMetadata(options, target, key) {\n if (reflectMetadataIsSupported) {\n if (!Array.isArray(options) &&\n typeof options !== 'function' &&\n !options.hasOwnProperty('type') &&\n typeof options.type === 'undefined') {\n var type = Reflect.getMetadata('design:type', target, key);\n if (type !== Object) {\n options.type = type;\n }\n }\n }\n}\n","import { createDecorator } from 'vue-class-component';\nimport { applyMetadata } from '../helpers/metadata';\n/**\n * decorator of a prop\n * @param options the options for the prop\n * @return PropertyDecorator | void\n */\nexport function Prop(options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n applyMetadata(options, target, key);\n createDecorator(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\n","import { createDecorator } from 'vue-class-component';\n/**\n * decorator of a ref prop\n * @param refKey the ref key defined in template\n */\nexport function Ref(refKey) {\n return createDecorator(function (options, key) {\n options.computed = options.computed || {};\n options.computed[key] = {\n cache: false,\n get: function () {\n return this.$refs[refKey || key];\n },\n };\n });\n}\n","\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref,Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n },\n})\nexport default class FramedComponent extends Vue {\n @Prop()\n root!: ComponentWithProperties;\n\n @Ref()\n scrollContainer!: HTMLElement;\n\n pop(data) {\n this.$emit(\"pop\", data);\n }\n\n push(data) {\n this.$emit(\"push\", data);\n }\n}\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./FramedComponent.vue?vue&type=template&id=5c46ef86&\"\nimport script from \"./FramedComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./FramedComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5c46ef86')) {\n api.createRecord('5c46ef86', component.options)\n } else {\n api.reload('5c46ef86', component.options)\n }\n module.hot.accept(\"./FramedComponent.vue?vue&type=template&id=5c46ef86&\", function () {\n api.rerender('5c46ef86', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/FramedComponent.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"NavigationController\", {\n ref: \"navigationController\",\n attrs: {\n \"animation-type\": \"modal\",\n root: _vm.root,\n initialComponents: _vm.initialComponents\n },\n on: { present: _vm.present }\n }),\n _vm._v(\" \"),\n _c(\"StackComponent\", {\n ref: \"stackComponent\",\n on: { present: _vm.present }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"navigation-controller\" },\n [\n _vm.mainComponent\n ? _c(\n \"transition\",\n {\n attrs: { css: false },\n on: {\n \"before-enter\": _vm.beforeEnter,\n \"before-leave\": _vm.beforeLeave,\n enter: _vm.enter,\n leave: _vm.leave,\n \"after-leave\": _vm.afterLeave,\n \"after-enter\": _vm.afterEnter,\n \"enter-cancelled\": _vm.enterCancelled\n }\n },\n [\n _c(\"FramedComponent\", {\n key: _vm.mainComponent.key,\n ref: \"child\",\n attrs: { root: _vm.mainComponent },\n on: { push: _vm.push, show: _vm.push, pop: _vm.pop }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport FramedComponent from \"./FramedComponent.vue\";\nimport { HistoryManager } from \"./HistoryManager\";\nimport { PopOptions } from \"./PopOptions\"\nimport { PushOptions } from \"./PushOptions\";\n\n@Component({\n components: {\n FramedComponent,\n },\n})\nexport default class NavigationController extends Vue {\n components: ComponentWithProperties[] = [];\n mainComponent: ComponentWithProperties | null = null;\n transitionName = \"none\";\n savedScrollPositions: number[] = [];\n nextScrollPosition = 0;\n previousScrollPosition = 0;\n\n nextInternalScrollPosition = 0\n savedInternalScrollPositions: number[] = [];\n\n @Prop()\n root!: ComponentWithProperties;\n\n @Prop({ default: null })\n initialComponents: ComponentWithProperties[] | null;\n\n @Prop({ default: \"default\" })\n animationType!: string;\n\n @Ref()\n child!: FramedComponent;\n\n beforeMount() {\n if (this.initialComponents && this.initialComponents.length > 0) {\n this.mainComponent = this.initialComponents[this.initialComponents.length - 1];\n this.components = this.initialComponents.slice(0);\n\n // Update property (even if not allowed, we know, but we need to remove the references)\n this.initialComponents.splice(0, this.initialComponents.length);\n } else {\n this.mainComponent = this.root;\n this.components = [this.root];\n }\n }\n\n freezeSize() {\n const el = this.$el as HTMLElement;\n\n // First do reads, then writes to avoid 2 layouts\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n\n el.style.width = w + \"px\";\n el.style.height = h + \"px\";\n }\n\n growSize(width: number, height: number) {\n const el = this.$el as HTMLElement;\n\n el.style.height = height+ \"px\";\n el.style.width = width + \"px\";\n }\n\n unfreezeSize() {\n const el = this.$el as HTMLElement;\n el.style.width = \"\";\n el.style.height = \"\";\n }\n\n getInternalScrollElement(element: HTMLElement | null = null) {\n const mightBe = (element ?? this.$el as HTMLElement).querySelector(\"main\")\n return mightBe ? mightBe : null;\n }\n\n getScrollElement(element: HTMLElement | null = null): HTMLElement {\n // Deprecated\n return document.documentElement;\n\n // if (!element) {\n // element = this.$el as HTMLElement;\n // }\n// \n // const style = window.getComputedStyle(element);\n // if (\n // style.overflowY == \"scroll\" \n // || style.overflow == \"scroll\" \n // || style.overflow == \"auto\" \n // || style.overflowY == \"auto\" \n // // Windows:\n // || style.overflow == \"overlay\" \n // || style.overflowY == \"overlay\") {\n // return element;\n // } else {\n // if (!element.parentElement) {\n // return document.documentElement;\n // }\n // return this.getScrollElement(element.parentElement);\n // }\n }\n\n shouldAnimate() {\n return (this.$el as HTMLElement).offsetWidth <= 1000 && !(window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n }\n\n /**\n * popOptions = how to handle the pop of replace. animated and count are ignored\n * -> should get moved to separate configurations in the future\n */\n async push(options: PushOptions) {\n if (options.components.length == 0) {\n console.error(\"Missing component when pushing\")\n return\n }\n (document.activeElement as any)?.blur()\n const components = options.components\n const component = components[components.length - 1]\n\n // shouldAnimate: boolean | null = null, replace = 0, reverse = false, replaceWith: ComponentWithProperties[] = [], popOptions: PopOptions = {}\n const destroy = options.destroy ?? true\n const force = options.force ?? false\n const animated = this.shouldAnimate() ? (options.animated === undefined ? component.animated : options.animated) : false\n\n let replace = options.replace ?? 0\n if (replace > this.components.length) {\n replace = this.components.length\n }\n\n if (ComponentWithProperties.debug) console.log(\"Pushing new component on navigation controller: \" + component.component.name);\n\n if (replace > 0) {\n // Check if we are allowed to dismiss them all.\n // If one fails, we skip everything.\n if (destroy && !force) {\n for (let index = this.components.length - 1; index >= this.components.length - replace; index--) {\n const component = this.components[index];\n const r = await component.shouldNavigateAway();\n if (!r) {\n return;\n }\n }\n }\n }\n\n if (!animated) {\n this.transitionName = \"none\";\n } else {\n this.transitionName = this.animationType == \"modal\" ? \"modal-push\" : options.reverse ? \"pop\" : \"push\";\n }\n\n // Add the client height from the saved height (check pop method for information)\n\n // Check if we have an internal scroll position\n const internalScrollElement = this.getInternalScrollElement()\n\n // The scroll element can also be located inside the component, and should be marked as the main element\n const scrollElement = this.getScrollElement();\n const w = window as any;\n\n let clientHeight = scrollElement.clientHeight;\n if (scrollElement === document.documentElement && w.visualViewport) {\n clientHeight = w.visualViewport.height;\n }\n\n let internalClientHeight = internalScrollElement?.clientHeight;\n\n // Save scroll position\n this.previousScrollPosition = 0; //scrollElement.scrollTop;\n this.savedScrollPositions.push(this.previousScrollPosition + clientHeight);\n this.savedInternalScrollPositions.push((internalScrollElement?.scrollTop ?? 0) + (internalClientHeight ?? 0));\n this.nextScrollPosition = 0;\n this.nextInternalScrollPosition = 0;\n\n // Save width and height\n if (animated) {\n this.freezeSize();\n }\n\n // Make sure the transition name changed, so wait for a rerender\n if (replace > 0) {\n const popped = this.components.splice(this.components.length - replace, replace, ...components);\n \n if (!destroy) {\n // Stop destroy\n for (const comp of popped) {\n comp.keepAlive = true;\n }\n }\n } else {\n this.components.push(...components);\n }\n\n if (this.mainComponent) {\n // Keep the component alive while it is removed from the DOM, unless it is being replaced\n this.mainComponent.keepAlive = !replace;\n }\n\n this.mainComponent = component;\n this.$emit(\"didPush\");\n\n if (replace == 0 && this) {\n //\n for (let index = 0; index < components.length; index++) {\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n // todo: fix reference to this and memory handling here!!\n this.pop({ animated: animated && canAnimate});\n }, options?.adjustHistory ?? true);\n\n if (index < components.length - 1) {\n // This component will not get mounted, but we need to simulate this to assign\n // a history index\n components[index].assignHistoryIndex()\n }\n }\n }\n }\n\n /**\n * Whether user interaction might prevent destructive navigation away from components.\n */\n async shouldNavigateAway(): Promise<boolean> {\n for (let index = this.components.length - 1; index >= 0; index--) {\n const component = this.components[index];\n const r = await component.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n return true;\n }\n\n popToRoot(options: PopOptions = {}) {\n options.count = this.components.length - 1\n return this.pop(options);\n }\n\n getPoppableParent(): any | null {\n let prev = this;\n let start: any = this.$parent;\n while (start) {\n if (prev.$listeners[\"pop\"]) {\n return prev;\n }\n\n prev = start;\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * force: whether \"shouldNavigateAway\" of child components is ignored\n */\n async pop(options: PopOptions = {}): Promise<ComponentWithProperties[] | undefined> {\n (document.activeElement as any)?.blur()\n\n const animated = this.shouldAnimate() ? (options.animated ?? true) : false;\n const destroy = options.destroy ?? true;;\n const count = options.count ?? 1;\n const force = options.force ?? false;\n\n if (this.components.length <= count) {\n const parent = this.getPoppableParent()\n\n // Prevent multiple count pop across modal levels\n options.count = 1\n\n if (!parent) {\n console.error(\"Tried to pop an empty navigation controller, but couldn't find a parent to pop\")\n this.$emit(\"pop\", options)\n return;\n }\n parent.$emit(\"pop\", options)\n return;\n }\n\n if (count === 0) {\n return;\n }\n\n if (destroy && !force) {\n for (let index = this.components.length - 1; index >= this.components.length - count; index--) {\n const component = this.components[index];\n const r = await component.shouldNavigateAway();\n if (!r) {\n return;\n }\n }\n }\n\n this.previousScrollPosition = 0; //this.getScrollElement().scrollTop;\n\n if (!animated) {\n this.transitionName = \"none\";\n } else {\n this.transitionName = this.animationType == \"modal\" ? \"modal-pop\" : \"pop\";\n this.freezeSize();\n }\n //console.log(\"Prepared previous scroll positoin: \" + this.previousScrollPosition);\n\n const popped = this.components.splice(this.components.length - count, count);\n\n if (!destroy) {\n // Stop destroy\n for (const comp of popped) {\n comp.keepAlive = true;\n }\n }\n\n // Remove the client height from the saved height (since this includes the client height so we can correct any changes in client heigth ahead of time)\n // We need this because when we set the height of the incoming view, we cannot reliably detect the maximum scroll height due some mobile browser glitches\n this.nextScrollPosition = 0; //Math.max(0, (this.savedScrollPositions.pop() ?? 0));\n this.nextInternalScrollPosition = Math.max(0, (this.savedInternalScrollPositions.pop() ?? 0));\n\n this.mainComponent = this.components[this.components.length - 1];\n this.$emit(\"didPop\");\n return popped;\n }\n\n beforeEnter(insertedElement: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n\n // We need to set the class already to hide the incoming element\n insertedElement.className = this.transitionName + \"-enter-active \" + this.transitionName + \"-enter\";\n }\n\n beforeLeave(_element: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n // Do nothing here. Is is important to finish the enter transitions first!\n // Do not even set a class! That will cause flickering on Webkit!\n }\n\n beforeBeforeEnterAnimation() {\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.beforeBeforeEnterAnimation) {\n instance.beforeBeforeEnterAnimation()\n }\n }\n }\n\n finishedEnterAnimation() {\n if (this.mainComponent) {\n const instance: any = this.mainComponent.componentInstance()\n if (instance && instance.finishedEnterAnimation) {\n instance.finishedEnterAnimation()\n }\n }\n }\n\n enter(element: HTMLElement, done) {\n if (this.transitionName == \"none\") {\n this.getScrollElement().scrollTop = this.nextScrollPosition;\n\n const internal = this.getInternalScrollElement(element)\n if (internal) {\n internal.scrollTop = Math.max(0, this.nextInternalScrollPosition - internal.clientHeight);\n }\n\n done();\n return;\n }\n\n // Allow scrollTop override in a specified handler\n // Call before\n // if (this.mainComponent) {\n // const instance: any = this.mainComponent.componentInstance()\n // if (instance && instance.beforeBeforeEnterAnimation) {\n // instance.beforeBeforeEnterAnimation()\n // }\n // }\n\n requestAnimationFrame(() => {\n // First group all the reads before making layout changes\n\n const w = ((element.firstElementChild as HTMLElement).firstElementChild as HTMLElement).offsetWidth;\n const h = (element.firstElementChild as HTMLElement).offsetHeight;\n\n // Request a frame, to avoid forced synchronous layout by fetching element sizes\n\n // const scrollElement = this.getScrollElement();\n// \n \n// \n // const scrollOuterHeight = this.getScrollOuterHeight(scrollElement);\n// \n // // Limit\n// \n // let next = this.nextScrollPosition;\n// \n // //console.log(\"Entering element \", h, next, scrollOuterHeight)\n// \n // if (next > h - scrollOuterHeight) {\n // // To much scrolled!\n // //console.log(\"Corrected maximum scroll position\")\n // next = Math.max(0, h - scrollOuterHeight);\n// \n // // Also propagate this change to the .leave handler\n // this.nextScrollPosition = next\n // //console.log(\"corrected! \", h, next, scrollOuterHeight)\n // }\n\n const internal = this.getInternalScrollElement(element)\n let nextInternal = this.nextInternalScrollPosition\n if (internal) {\n nextInternal = Math.max(0, this.nextInternalScrollPosition - internal.clientHeight);\n const scrollOuterHeight = this.getScrollOuterHeight(internal);\n const h = internal.scrollHeight\n\n if (nextInternal > h - scrollOuterHeight) {\n nextInternal = Math.max(0, h - scrollOuterHeight);\n }\n }\n\n // Prepare animation\n const childElement = (element.firstElementChild as HTMLElement)\n\n let transitionDuration = 300\n if (this.transitionName === \"pop\" || this.transitionName == \"modal-pop\") {\n // Pop animations should go faster\n transitionDuration = 250\n }\n\n // Layout changes\n\n if (this.transitionName == \"push\" || this.transitionName == \"pop\" || this.transitionName == \"modal-push\") {\n childElement.style.willChange = \"transform\"\n }\n\n if (internal) {\n internal.style.willChange = \"scroll-position\"\n }\n\n // Lock position if needed\n // This happens before the beforeLeave animation frame!\n this.growSize(w, h);\n\n // Disable scroll during animation (this is to fix overflow elements)\n // We can only allow scroll during transitions when all browser support overflow: clip, which they don't atm\n // This sometimes doesn't work on iOS Safari on body due to a bug\n requestAnimationFrame(() => {\n // Wait and execute immediately after beforeLeave's animation frame\n // Let the OS rerender once so all the positions are okay after dom insertion\n if (internal) {\n internal.scrollTop = nextInternal;\n }\n //element.className = this.transitionName + \"-enter-active \" + this.transitionName + \"-enter-to\";\n\n // Allow scrollTop override in a specified handler\n // Call before\n // if (this.mainComponent) {\n // const instance: any = this.mainComponent.componentInstance()\n // if (instance && instance.beforeEnterAnimation) {\n // instance.beforeEnterAnimation()\n // }\n // }\n\n // Start animation in the next frame\n //requestAnimationFrame(() => {\n // We've reached our initial positioning and can start our animation\n element.className = this.transitionName + \"-enter-active \" + this.transitionName + \"-enter-to\";\n\n // Call start\n // if (this.mainComponent) {\n // const instance: any = this.mainComponent.componentInstance()\n // if (instance && instance.beginEnterAnimation) {\n // instance.beginEnterAnimation()\n // }\n // }\n\n setTimeout(() => {\n //scrollElement.style.overflow = \"\";\n element.style.willChange = \"\"\n childElement.style.willChange = \"\"\n //scrollElement.style.willChange = \"\"\n if (internal) {\n internal.style.willChange = \"\"\n }\n\n // Call finished\n // if (this.mainComponent) {\n // const instance: any = this.mainComponent.componentInstance()\n // if (instance && instance.finishedEnterAnimation) {\n // instance.finishedEnterAnimation()\n // }\n // }\n done();\n }, transitionDuration + 25);\n //});\n });\n });\n }\n\n getScrollOuterHeight(scrollElement: HTMLElement) {\n // we add some extra padding below to fix iOS bug that reports wront clientHeight\n // We need to show some extra area below of the leaving frame, but to do this, we also need\n // to check if there is still content left below the visible client height. So we calculate the area underneath the client height\n // and limit to 300px maximum extra padding\n // const fixPadding = Math.min(300, Math.max(0, element.offsetHeight - current - scrollElement.clientHeight));\n // console.log(\"Fix padding: \" + fixPadding);\n // This fixPadding thing doesn't work on other browsers. Need to recheck when it reappears on iOS\n let h = scrollElement.clientHeight; // + fixPadding;\n if (scrollElement === document.documentElement) {\n // Fix viewport glitch\n const w = window as any;\n if (w.visualViewport) {\n //console.log(\"Used height \" + w.visualViewport.height + \" instead of \" + h);\n h = w.visualViewport.height;\n }\n }\n return h\n }\n\n leave(element: HTMLElement, done) {\n if (this.transitionName == \"none\") {\n done();\n return;\n }\n\n // Prepare animation\n const childElement = (element.firstElementChild as HTMLElement)\n childElement.style.willChange = \"transform\"\n\n let transitionDuration = 300\n if (this.transitionName === \"pop\" || this.transitionName == \"modal-pop\") {\n // Pop animations should go faster\n transitionDuration = 250\n }\n\n // This animation frame is super important to prevent flickering on Safari and Webkit!\n // This is also one of the reasons why we cannot use the default Vue class additions\n // We do this to improve the timing of the classes and scroll positions\n requestAnimationFrame(() => {\n // Prevent blinking due to slow rerender after scrollTop changes\n // Create a clone and offset the clone first. After that, adjust the scroll position\n //const current = this.previousScrollPosition;\n //const next = this.nextScrollPosition;\n\n const h = (this.$el as HTMLElement).offsetHeight;\n const w = (this.$el as HTMLElement).offsetWidth;\n const height = h + \"px\";\n const width = w + \"px\";\n\n //console.log(\"height\", height);\n\n // Setting the class has to happen in one go.\n // First we need to make our element fixed / absolute positioned, and pinned to all the edges\n // In the same frame, we need to update the scroll position.\n // If we switch the ordering, this won't work!\n element.className = this.transitionName + \"-leave-active \" + this.transitionName + \"-leave\";\n\n element.style.top = \"0px\";\n element.style.height = height;\n element.style.width = width;\n\n element.style.bottom = \"auto\";\n element.style.overflow = \"hidden\";\n\n // Now scroll!\n childElement.style.overflow = \"hidden\";\n childElement.style.height = height;\n childElement.style.width = width;\n\n //childElement.scrollTop = current;\n\n requestAnimationFrame(() => {\n // We've reached our initial positioning and can start our animation\n element.className = this.transitionName + \"-leave-active \" + this.transitionName + \"-leave-to\";\n\n setTimeout(() => {\n element.style.overflow = \"\";\n element.style.top = \"\";\n element.style.height = \"\";\n element.style.bottom = \"\";\n childElement.style.overflow = \"\";\n childElement.style.willChange = \"\";\n done();\n }, transitionDuration + 25);\n });\n });\n }\n\n afterLeave(element: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n\n element.className = \"\";\n }\n\n afterEnter(element: HTMLElement) {\n if (this.transitionName == \"none\") {\n return;\n }\n this.unfreezeSize();\n element.className = \"\";\n }\n\n enterCancelled(_element: HTMLElement) {\n this.unfreezeSize();\n }\n\n destroyed() {\n // console.log(\"Destroyed navigation controller\");\n\n // Prevent memory issues by removing all references and destroying kept alive components\n for (const component of this.components) {\n // Destroy them one by one\n if (component.isKeptAlive) {\n component.destroy(component.vnode);\n }\n }\n\n this.components = [];\n this.mainComponent = null;\n }\n}\n","import { render, staticRenderFns } from \"./NavigationController.vue?vue&type=template&id=250e5c49&\"\nimport script from \"./NavigationController.vue?vue&type=script&lang=ts&\"\nexport * from \"./NavigationController.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./NavigationController.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('250e5c49')) {\n api.createRecord('250e5c49', component.options)\n } else {\n api.reload('250e5c49', component.options)\n }\n module.hot.accept(\"./NavigationController.vue?vue&type=template&id=250e5c49&\", function () {\n api.rerender('250e5c49', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/NavigationController.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { appear: _vm.shouldAppear, name: \"fade\", duration: 300 } },\n [\n _c(\"div\", { class: _vm.buildClass, on: { click: _vm.onClick } }, [\n _c(\"div\", { ref: \"mainContent\" }, [\n _c(\n \"div\",\n { staticClass: \"scrollable-container\" },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n key: _vm.root.key,\n attrs: { component: _vm.root },\n on: { pop: _vm.dismiss }\n })\n ],\n 1\n )\n ])\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { Component, Vue } from \"vue-property-decorator\";\n\nimport ModalStackComponent from \"./ModalStackComponent.vue\";\nimport { PopOptions } from \"./PopOptions\";\n\n// You can declare mixins as the same style as components.\n@Component\nexport class ModalMixin extends Vue {\n get modalStackComponent(): ModalStackComponent | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof ModalStackComponent) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * Call one of the pop listeners of a parent or grandparent. E.g. to go back in a navigation controller.\n * @param options Options that should get applied to the pop of the first parent that listens for the pop event\n */\n pop(options: PopOptions = {}) {\n const nav = this.getPoppableParent();\n if (nav) {\n // Sometimes we need to call the pop event instead (because this adds custom data to the event)\n if (nav.$listeners[\"pop\"]) {\n nav.$emit(\"pop\", options);\n } else {\n console.error(\"Couldn't pop. Failed\");\n }\n } else {\n console.warn(\"No navigation controller to pop\");\n }\n }\n\n /**\n * Return the first child of a parent that listens for the pop event\n */\n getPoppableParent(): any | null {\n let prev = this;\n let start: any = this.$parent;\n while (start) {\n if (prev.$listeners[\"pop\"]) {\n return prev;\n }\n\n prev = start;\n start = start.$parent;\n }\n return null;\n }\n}","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\nimport { PopOptions } from './PopOptions';\nimport { HistoryManager } from './HistoryManager';\nimport { ModalMixin } from './ModalMixin';\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n }\n})\nexport default class Popup extends ModalMixin {\n @Prop({ required: true })\n root!: ComponentWithProperties\n\n @Prop({ required: false, default: 'popup' })\n className!: string\n\n get buildClass() {\n const pushDown = {'push-down': this.pushDown == 1, 'push-down-full': this.pushDown > 1 };\n const j = Object.keys(pushDown).filter(p => !!pushDown[p]).join(' ');\n return j + (j ? ' ' : '') + (this.className ? this.className : 'popup')\n }\n\n get shouldAppear() {\n return this.root.animated\n }\n\n get pushDown() {\n const popups = this.modalStackComponent?.stackComponent?.components.filter(c => c.component === Popup && (c.properties.className ?? 'popup') === (this.className ?? 'popup')) ?? []\n if (popups.length > 0 && popups[popups.length - 1].componentInstance() !== this) {\n if (popups.length > 1 && popups[popups.length - 2].componentInstance() === this) {\n return 1\n }\n return 2\n }\n return 0\n }\n\n get isFocused() {\n const popups = this.modalStackComponent?.stackComponent?.components ?? []\n if (popups.length > 0 && popups[popups.length - 1].componentInstance() !== this) {\n return false\n }\n return true\n }\n\n onClick(event) {\n const mainContent = this.$refs.mainContent as HTMLElement\n // Check click is inside mainContent\n if (mainContent && !mainContent.contains(event.target) && document.body.contains(event.target)) {\n this.dismiss()\n event.preventDefault()\n }\n }\n\n activated() {\n document.addEventListener(\"keydown\", this.onKey);\n }\n\n deactivated() {\n document.removeEventListener(\"keydown\", this.onKey);\n }\n\n async dismiss(options?: PopOptions) {\n if (!options?.force) {\n const r = await this.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n // Check which modal is underneath?\n const popups = this.modalStackComponent?.stackComponent?.components.filter(c => c.modalDisplayStyle !== \"overlay\") ?? []\n if (popups.length === 0 || popups[popups.length - 1].componentInstance() === this) {\n const index = this.root.getHistoryIndex()\n if (index !== null && index !== undefined) {\n HistoryManager.returnToHistoryIndex(index - 1);\n }\n }\n this.pop(options)\n }\n\n onKey(event) {\n if (event.defaultPrevented || event.repeat) {\n return;\n }\n\n if (!this.isFocused) {\n return;\n }\n\n const key = event.key || event.keyCode;\n\n if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n this.dismiss();\n event.preventDefault();\n }\n }\n\n shouldNavigateAway() {\n return this.root.shouldNavigateAway()\n }\n}\n","import { render, staticRenderFns } from \"./Popup.vue?vue&type=template&id=a782d2fa&\"\nimport script from \"./Popup.vue?vue&type=script&lang=ts&\"\nexport * from \"./Popup.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Popup.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a782d2fa')) {\n api.createRecord('a782d2fa', component.options)\n } else {\n api.reload('a782d2fa', component.options)\n }\n module.hot.accept(\"./Popup.vue?vue&type=template&id=a782d2fa&\", function () {\n api.rerender('a782d2fa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/Popup.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { appear: _vm.shouldAppear, name: \"fade\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"side-view\",\n class: {\n \"push-down\": _vm.pushDown == 1,\n \"push-down-full\": _vm.pushDown > 1\n },\n on: { mousedown: _vm.dismiss, touchdown: _vm.dismiss }\n },\n [\n _c(\n \"div\",\n {\n on: {\n mousedown: function($event) {\n $event.stopPropagation()\n },\n touchdown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n key: _vm.root.key,\n attrs: { component: _vm.root },\n on: { pop: _vm.dismiss }\n })\n ],\n 1\n )\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\nimport { PopOptions } from './PopOptions';\nimport { HistoryManager } from './HistoryManager';\nimport { ModalMixin } from './ModalMixin';\n\nconst visualViewport = (window as any).visualViewport\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n }\n})\nexport default class SideView extends ModalMixin {\n @Prop({ required: true })\n root!: ComponentWithProperties\n\n get shouldAppear() {\n return this.root.animated\n }\n\n get pushDown() {\n const sideViews = this.modalStackComponent?.stackComponent?.components.filter(c => c.component === SideView) ?? []\n if (sideViews.length > 0 && sideViews[sideViews.length - 1].componentInstance() !== this) {\n if (sideViews.length > 1 && sideViews[sideViews.length - 2].componentInstance() === this) {\n return 1\n }\n return 2\n }\n return 0\n }\n\n get isFocused() {\n const sideViews = this.modalStackComponent?.stackComponent?.components ?? []\n if (sideViews.length > 0 && sideViews[sideViews.length - 1].componentInstance() !== this) {\n return false\n }\n return true\n }\n\n activated() {\n document.addEventListener(\"keydown\", this.onKey);\n this.resize();\n\n if (visualViewport) {\n visualViewport.addEventListener('resize', this.resize);\n }\n }\n\n deactivated() {\n document.removeEventListener(\"keydown\", this.onKey);\n\n if (visualViewport) {\n visualViewport.removeEventListener('resize', this.resize);\n }\n }\n\n async dismiss(options?: PopOptions) {\n if (!options?.force) {\n const r = await this.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n // Check which modal is undernath?\n const sideViews = this.modalStackComponent?.stackComponent?.components.filter(c => c.modalDisplayStyle !== \"overlay\") ?? []\n if (sideViews.length === 0 || sideViews[sideViews.length - 1].componentInstance() === this) {\n const index = this.root.getHistoryIndex()\n if (index !== null && index !== undefined) {\n HistoryManager.returnToHistoryIndex(index - 1);\n }\n }\n this.pop(options)\n }\n\n resize() {\n if (!visualViewport) {\n return;\n }\n }\n\n onKey(event) {\n if (event.defaultPrevented || event.repeat) {\n return;\n }\n\n if (!this.isFocused) {\n return;\n }\n\n const key = event.key || event.keyCode;\n\n if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n this.dismiss();\n event.preventDefault();\n }\n }\n\n shouldNavigateAway() {\n return this.root.shouldNavigateAway()\n }\n}\n","import { render, staticRenderFns } from \"./SideView.vue?vue&type=template&id=9ebd30d6&\"\nimport script from \"./SideView.vue?vue&type=script&lang=ts&\"\nexport * from \"./SideView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SideView.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9ebd30d6')) {\n api.createRecord('9ebd30d6', component.options)\n } else {\n api.reload('9ebd30d6', component.options)\n }\n module.hot.accept(\"./SideView.vue?vue&type=template&id=9ebd30d6&\", function () {\n api.rerender('9ebd30d6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/SideView.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n _vm._l(_vm.components, function(component, index) {\n return _c(\"ComponentWithPropertiesInstance\", {\n key: component.key,\n ref: \"children\",\n refInFor: true,\n attrs: { component: component },\n on: {\n pop: function($event) {\n return _vm.removeAt(index, component.key)\n }\n }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n },\n})\nexport default class StackComponent extends Vue {\n components: ComponentWithProperties[] = [];\n\n show(component: ComponentWithProperties) {\n this.components.push(component);\n }\n\n removeAt(index, key) {\n if (!this.components[index]) {\n // Manually search for the key (race conditions with slow events in vue)\n for (const [i, comp] of this.components.entries()) {\n if (comp.key === key) {\n console.warn(\"Corrected index from \"+index+\" to \"+i)\n index = i;\n break;\n }\n }\n }\n if (this.components[index] !== undefined && this.components[index].key === key) {\n this.components.splice(index, 1);\n } else {\n console.warn(\"Expected component with key \" + key + \" at index\" + index);\n }\n }\n\n beforeDestroy() {\n this.components = [];\n }\n}\n","import { render, staticRenderFns } from \"./StackComponent.vue?vue&type=template&id=1b21bde4&\"\nimport script from \"./StackComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./StackComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1b21bde4')) {\n api.createRecord('1b21bde4', component.options)\n } else {\n api.reload('1b21bde4', component.options)\n }\n module.hot.accept(\"./StackComponent.vue?vue&type=template&id=1b21bde4&\", function () {\n api.rerender('1b21bde4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/StackComponent.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport { HistoryManager } from './HistoryManager';\nimport NavigationController from \"./NavigationController.vue\";\nimport Popup from \"./Popup.vue\";\nimport { PushOptions } from \"./PushOptions\";\nimport SideView from \"./SideView.vue\";\nimport StackComponent from \"./StackComponent.vue\";\n\n@Component({\n components: {\n NavigationController,\n StackComponent,\n },\n})\nexport default class ModalStackComponent extends Vue {\n @Prop()\n readonly root!: ComponentWithProperties;\n\n @Prop({ default: null })\n readonly initialComponents: ComponentWithProperties[] | null;\n\n @Ref()\n stackComponent!: StackComponent;\n\n present(options: PushOptions) {\n const component = options.components[options.components.length - 1]\n\n if (options.animated !== undefined) {\n component.animated = options.animated\n }\n\n const style = options.modalDisplayStyle ?? component.modalDisplayStyle ?? 'cover'\n component.setDisplayStyle(style)\n\n if ((style === \"popup\" || style === \"sheet\") && (this.$el as HTMLElement).offsetWidth > 800 || (style === \"sheet\" && (this.$el as HTMLElement).offsetWidth > 700)) {\n const c = new ComponentWithProperties(Popup, { root: component, className: options.modalClass ?? style })\n\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n (c.componentInstance() as (Popup | undefined))?.pop({ animated: canAnimate});\n }, options?.adjustHistory ?? true);\n \n this.stackComponent.show(c);\n \n return;\n }\n\n if (style === \"side-view\" && (this.$el as HTMLElement).offsetWidth > 800) {\n const c = new ComponentWithProperties(SideView, { root: component, className: options.modalClass })\n\n HistoryManager.pushState(options?.url, (canAnimate: boolean) => {\n // todo: fix reference to this and memory handling here!!\n (c.componentInstance() as (SideView | undefined))?.pop({ animated: canAnimate});\n }, options?.adjustHistory ?? true);\n\n this.stackComponent.show(c);\n return;\n }\n\n if (style === \"overlay\") {\n this.stackComponent.show(component);\n return;\n }\n (this.$refs.navigationController as NavigationController).push(options);\n }\n\n /**\n * @deprecated\n */\n replace(component: ComponentWithProperties, animated = true) {\n const nav = this.$refs.navigationController as NavigationController;\n nav.push({ components: [component], animated, replace: nav.components.length });\n }\n}\n","import { render, staticRenderFns } from \"./ModalStackComponent.vue?vue&type=template&id=c053b00e&\"\nimport script from \"./ModalStackComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./ModalStackComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('c053b00e')) {\n api.createRecord('c053b00e', component.options)\n } else {\n api.reload('c053b00e', component.options)\n }\n module.hot.accept(\"./ModalStackComponent.vue?vue&type=template&id=c053b00e&\", function () {\n api.rerender('c053b00e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/ModalStackComponent.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { appear: _vm.shouldAppear, name: \"fade\", duration: 300 } },\n [\n _c(\"div\", { staticClass: \"sheet\", on: { click: _vm.onClick } }, [\n _c(\n \"div\",\n { ref: \"mainContent\" },\n [\n _c(\"ComponentWithPropertiesInstance\", {\n key: _vm.root.key,\n attrs: { component: _vm.root },\n on: { pop: _vm.dismiss }\n })\n ],\n 1\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\nimport { Vue, Component, Prop } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport ComponentWithPropertiesInstance from \"./ComponentWithPropertiesInstance\";\nimport { PopOptions } from './PopOptions';\nimport { ModalMixin } from './ModalMixin';\nimport { HistoryManager } from \"./HistoryManager\";\n\n@Component({\n components: {\n ComponentWithPropertiesInstance,\n }\n})\nexport default class Sheet extends ModalMixin {\n @Prop({ required: true })\n root!: ComponentWithProperties\n\n get shouldAppear() {\n return this.root.animated\n }\n\n onClick(event) {\n const mainContent = this.$refs.mainContent as HTMLElement\n // Check click is inside mainContent\n if (mainContent && !mainContent.contains(event.target) && document.body.contains(event.target)) {\n this.dismiss()\n event.preventDefault()\n }\n }\n \n activated() {\n document.addEventListener(\"keydown\", this.onKey);\n }\n\n deactivated() {\n document.removeEventListener(\"keydown\", this.onKey);\n }\n\n get isFocused() {\n const popups = this.modalStackComponent?.stackComponent?.components ?? []\n if (popups.length > 0 && popups[popups.length - 1].componentInstance() !== this) {\n return false\n }\n return true\n }\n\n async dismiss(options?: PopOptions) {\n if (!options?.force) {\n const r = await this.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n // Check which modal is undernath?\n const popups = this.modalStackComponent?.stackComponent?.components.filter(c => c.modalDisplayStyle !== \"overlay\") ?? []\n if (popups.length === 0 || popups[popups.length - 1].componentInstance() === this) {\n const index = this.root.getHistoryIndex()\n if (index !== null && index !== undefined) {\n HistoryManager.returnToHistoryIndex(index - 1);\n }\n }\n this.pop(options)\n }\n\n onKey(event) {\n if (event.defaultPrevented || event.repeat) {\n return;\n }\n\n if (!this.isFocused) {\n return;\n }\n\n const key = event.key || event.keyCode;\n\n if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n this.dismiss();\n event.preventDefault();\n }\n }\n\n shouldNavigateAway() {\n return this.root.shouldNavigateAway()\n }\n}\n","import { render, staticRenderFns } from \"./Sheet.vue?vue&type=template&id=30e9f1b6&\"\nimport script from \"./Sheet.vue?vue&type=script&lang=ts&\"\nexport * from \"./Sheet.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Sheet.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('30e9f1b6')) {\n api.createRecord('30e9f1b6', component.options)\n } else {\n api.reload('30e9f1b6', component.options)\n }\n module.hot.accept(\"./Sheet.vue?vue&type=template&id=30e9f1b6&\", function () {\n api.rerender('30e9f1b6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/Sheet.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"split-view-controller\",\n attrs: { \"data-has-detail\": _vm.detail ? \"true\" : \"false\" }\n },\n [\n _c(\n \"div\",\n { ref: \"masterElement\", staticClass: \"master\" },\n [\n _c(\"NavigationController\", {\n ref: \"navigationController\",\n attrs: { root: _vm.root },\n on: { showDetail: _vm.showDetail }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.detail\n ? _c(\n \"div\",\n { staticClass: \"detail\" },\n [\n _c(\"FramedComponent\", {\n key: _vm.detail.key,\n ref: \"detailFrame\",\n attrs: { root: _vm.detail }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Ref, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"./ComponentWithProperties\";\nimport FramedComponent from \"./FramedComponent.vue\";\nimport NavigationController from \"./NavigationController.vue\";\nimport { PushOptions } from \"./PushOptions\";\n\n// Credits https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf\nconst throttle = (func, limit) => {\n let lastFunc;\n let lastRan;\n return function() {\n const context = this;\n // eslint-disable-next-line prefer-rest-params\n const args = arguments;\n if (!lastRan) {\n func.apply(context, args);\n lastRan = Date.now();\n } else {\n clearTimeout(lastFunc);\n lastFunc = setTimeout(function() {\n if (Date.now() - lastRan >= limit) {\n func.apply(context, args);\n lastRan = Date.now();\n }\n }, limit - (Date.now() - lastRan));\n }\n };\n};\n\n@Component({\n components: {\n NavigationController,\n FramedComponent,\n }\n})\nexport default class SplitViewController extends Vue {\n @Prop()\n root!: ComponentWithProperties;\n detail: ComponentWithProperties | null = null;\n\n @Prop()\n detailWidth?: string;\n\n @Ref()\n navigationController!: NavigationController;\n\n @Ref()\n masterElement!: HTMLElement; // = KeepAlive internal class\n\n detailKey: number | null = null;\n\n activated() {\n (this as any).listener = throttle(this.onResize, 100);\n window.addEventListener(\"resize\", (this as any).listener, { passive: true } as EventListenerOptions);\n \n // Recheck if we need to show the detail\n this.onResize();\n }\n\n mounted() {\n if (this.detailWidth) {\n (this.$el as HTMLElement).style.setProperty(\"--split-view-width\", this.detailWidth);\n }\n }\n\n deactivated() {\n window.removeEventListener(\"resize\", (this as any).listener, { passive: true } as EventListenerOptions);\n }\n\n beforeDestroy() {\n window.removeEventListener(\"resize\", (this as any).listener, { passive: true } as EventListenerOptions);\n }\n\n onResize() {\n if (this.shouldCollapse()) {\n if (this.detail) {\n this.collapse();\n }\n } else {\n if (this.lastIsDetail && !this.detail) {\n this.expand();\n }\n }\n }\n\n get lastIsDetail() {\n return this.detailKey != null && (this.$refs.navigationController as NavigationController)?.mainComponent?.key == this.detailKey;\n }\n\n getScrollElement(element: HTMLElement | null = null): HTMLElement {\n if (!element) {\n element = this.$el as HTMLElement;\n }\n\n const style = window.getComputedStyle(element);\n if (style.overflowY == \"scroll\" || style.overflow == \"scroll\" || style.overflow == \"auto\" || style.overflowY == \"auto\") {\n return element;\n } else {\n if (!element.parentElement) {\n return document.documentElement;\n }\n return this.getScrollElement(element.parentElement);\n }\n }\n\n async shouldNavigateAway(): Promise<boolean> {\n if (this.detail) {\n const r = await this.detail.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n if (this.navigationController) {\n return await this.navigationController.shouldNavigateAway();\n }\n\n return true;\n }\n\n async showDetail(options: PushOptions): Promise<boolean> {\n const component = options.components[options.components.length - 1]\n this.detailKey = component.key;\n\n if (this.shouldCollapse()) {\n if (this.lastIsDetail || this.detail) {\n console.error(\"Pusing a detail when a detail is already presented is not allowed\");\n return false;\n }\n\n this.navigationController.push(options);\n } else {\n // Replace existing detail component\n // First check if we don't destroy anything\n if (this.detail) {\n const r = await this.detail.shouldNavigateAway();\n if (!r) {\n return false;\n }\n }\n\n this.getScrollElement().scrollTop = 0;\n this.detail = component;\n }\n return true;\n }\n\n shouldCollapse() {\n return (this.$el as HTMLElement).offsetWidth < 850;\n }\n\n collapse() {\n if (!this.navigationController) {\n console.error(\"Cannot collapse without navigation controller\");\n return;\n }\n if (this.lastIsDetail) {\n console.error(\"Cannot collapse when the detail is already collaped\");\n return;\n }\n if (!this.detail) {\n console.error(\"Cannot collapse without detail\");\n return;\n }\n this.detail.keepAlive = true;\n const detail = this.detail;\n this.detail = null;\n this.navigationController.push({ components: [detail], animated: false });\n }\n\n async expand() {\n if (!this.navigationController) {\n console.error(\"Cannot expand without navigation controller\");\n return;\n }\n if (this.detail) {\n console.error(\"Cannot expand when detail is already visible\");\n return;\n }\n if (!this.lastIsDetail) {\n console.error(\"Cannot expand when there is no detail\");\n return;\n }\n const popped = await this.navigationController.pop({\n animated: false,\n destroy: false\n });\n if (!popped || popped.length == 0) {\n return;\n }\n\n // We need to wait until it is removed from the vnode\n this.$nextTick(() => {\n this.detail = popped[0];\n });\n }\n}\n","import { render, staticRenderFns } from \"./SplitViewController.vue?vue&type=template&id=e2d6041c&\"\nimport script from \"./SplitViewController.vue?vue&type=script&lang=ts&\"\nexport * from \"./SplitViewController.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SplitViewController.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/simon/Documents/Projects/vue-app-navigation/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e2d6041c')) {\n api.createRecord('e2d6041c', component.options)\n } else {\n api.reload('e2d6041c', component.options)\n }\n module.hot.accept(\"./SplitViewController.vue?vue&type=template&id=e2d6041c&\", function () {\n api.rerender('e2d6041c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/SplitViewController.vue\"\nexport default component.exports","// mixins.js\nimport { Component, Vue } from \"vue-property-decorator\";\n\nimport { ComponentWithProperties } from \"..\";\nimport NavigationController from \"./NavigationController.vue\";\nimport { PopOptions } from './PopOptions';\nimport Popup from \"./Popup.vue\";\nimport { PushOptions } from \"./PushOptions\";\nimport Sheet from \"./Sheet.vue\";\nimport SideView from \"./SideView.vue\";\nimport SplitViewController from \"./SplitViewController.vue\";\n\n// You can declare mixins as the same style as components.\n@Component\nexport class NavigationMixin extends Vue {\n emitParents(event: string, data: any) {\n let start: any = this.$parent;\n while (start) {\n if (start.$listeners[event]) {\n start.$emit(event, data);\n return;\n } else {\n start = start.$parent;\n }\n }\n console.warn(\"No handlers found for event \" + event);\n }\n\n show(options: PushOptions | ComponentWithProperties) {\n if (!(options as any).components) {\n this.emitParents(\"show\", { components: [options] });\n } else {\n this.emitParents(\"show\", options);\n }\n \n }\n\n present(options: PushOptions | ComponentWithProperties) {\n if (!(options as any).components) {\n this.emitParents(\"present\", { components: [options] });\n } else {\n this.emitParents(\"present\", options);\n }\n }\n\n showDetail(options: PushOptions | ComponentWithProperties) {\n if (!(options as any).components) {\n this.emitParents(\"showDetail\", { components: [options] });\n } else {\n this.emitParents(\"showDetail\", options);\n }\n }\n\n /**\n * Call one of the pop listeners of a parent or grandparent. E.g. to go back in a navigation controller.\n * @param options Options that should get applied to the pop of the first parent that listens for the pop event\n */\n pop(options: PopOptions = {}) {\n const nav = this.getPoppableParent();\n if (nav) {\n // Sometimes we need to call the pop event instead (because this adds custom data to the event)\n if (nav.$listeners[\"pop\"]) {\n nav.$emit(\"pop\", options);\n } else {\n console.error(\"Couldn't pop. Failed\");\n }\n } else {\n console.warn(\"No navigation controller to pop\");\n }\n }\n\n /**\n * Same as pop, but instead dismisses the first parent that was displayed as a modal\n * @param options Options that should get applied to the pop of the first modal navigation controller or popup that listens for the pop event\n */\n dismiss(options: PopOptions = {}) {\n const modalNav = this.modalOrPopup as any;\n if (!modalNav) {\n console.warn(\"Tried to dismiss without being displayed as a modal. Use pop instead\")\n // Chances are this is not displayed as a modal, but on a normal stack\n this.pop(options);\n } else {\n if (modalNav instanceof Sheet || modalNav instanceof Popup || modalNav instanceof SideView) {\n modalNav.dismiss(options);\n return\n }\n modalNav.pop(options);\n }\n }\n\n get navigationController(): NavigationController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n get modalOrPopup(): NavigationController | Popup | Sheet | SideView | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n if (start.animationType == \"modal\") return start;\n }\n\n if (start instanceof Sheet) {\n return start;\n }\n\n if (start instanceof Popup) {\n return start;\n }\n\n if (start instanceof SideView) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n get modalNavigationController(): NavigationController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n if (start.animationType == \"modal\") return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n get splitViewController(): SplitViewController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof SplitViewController) {\n return start;\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * Return the first child of a parent that listens for the pop event\n */\n getPoppableParent(): any | null {\n let prev = this;\n let start: any = this.$parent;\n while (start) {\n if (prev.$listeners[\"pop\"]) {\n return prev;\n }\n\n prev = start;\n start = start.$parent;\n }\n return null;\n }\n\n /**\n * Whether the current navivation controller above this component can pop (it has more than one child). Excluding modal view controllers\n */\n canPop = false;\n canDismiss = false;\n\n activated() {\n Vue.set(this, \"canPop\", this.calculateCanPop());\n Vue.set(this, \"canDismiss\", this.calculateCanDismiss());\n }\n\n beforeMount() {\n Vue.set(this, \"canPop\", this.calculateCanPop());\n Vue.set(this, \"canDismiss\", this.calculateCanDismiss());\n }\n\n /**\n * Return the first navigation controller that can get popped, excluding the modal navigation controller and the stack component\n * Note: this shouldn't be a getter to disable vue caching getters\n */\n private getPoppableNavigationController(): NavigationController | null {\n let start: any = this.$parent;\n while (start) {\n if (start instanceof NavigationController) {\n if (start.animationType == \"modal\") return null;\n\n if (start.components.length > 1) {\n return start;\n }\n }\n\n start = start.$parent;\n }\n return null;\n }\n\n isFocused() {\n const modalOrPopup = this.modalOrPopup\n if ((modalOrPopup instanceof Popup) || (modalOrPopup instanceof Sheet) || (modalOrPopup instanceof SideView)) {\n return !!(modalOrPopup as (any)).isFocused\n }\n\n // todo: detect edge case when this element is deactivated\n return true\n }\n\n calculateCanPop(): boolean {\n return this.getPoppableNavigationController() != null;\n }\n\n calculateCanDismiss(): boolean {\n const modalOrPopup = this.modalOrPopup;\n\n if (modalOrPopup === null) {\n return false\n }\n\n if (modalOrPopup instanceof NavigationController) {\n if ((modalOrPopup as any).components.length <= 1) {\n return false\n }\n }\n\n return true\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","HistoryManager","HistoryManagerStatic","states","counter","active","animateHistoryPop","isAdjustingState","manualStateAction","historyQueue","isQueueRunning","addToQueue","action","this","push","runQueue","shift","finally","go","delta","async","Promise","resolve","timer","history","listener","clearTimeout","window","removeEventListener","addEventListener","setTimeout","console","warn","setUrl","url","ComponentWithProperties","debug","count","length","index","replaceState","pushState","undoAction","adjustHistory","c","returnToHistoryIndex","adjustHistoryCount","splice","filter","state","activate","event","newCounter","undefined","amount","animate","deletedStates","reverse","constructor","component","properties","type","hide","vnode","keepAlive","isKeptAlive","isMounted","modalDisplayStyle","animated","historyIndex","isContainerView","keyCounter","clone","beforeMount","name","keepAliveCounter","destroy","assignHistoryIndex","getHistoryIndex","mounted","ignoreActivate","onMountedChildComponent","child","onActivatedChildComponent","activated","componentInstance","instance","shouldNavigateAway","promise","then","catch","$destroy","setDisplayStyle","style","setAnimated","y","x","d","__WEBPACK_EXTERNAL_MODULE_vue__","ComponentWithPropertiesInstance","props","watch","_val","Error","created","start","$parent","destroyed","$children","$vnode","render","createElement","attrs","options","inheritAttrs","data","_vm","_h","$createElement","_c","_self","ref","root","_withStripped","__decorate","decorators","target","desc","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","i","__WEBPACK_EXTERNAL_MODULE_vue_class_component_c93a5958__","createDecorator","reflectMetadataIsSupported","getMetadata","Prop","Array","isArray","componentOptions","k","Ref","refKey","computed","cache","$refs","FramedComponent","pop","$emit","components","normalizeComponent","scriptExports","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","__file","initialComponents","on","present","_v","staticClass","mainComponent","css","beforeEnter","beforeLeave","enter","leave","afterLeave","afterEnter","enterCancelled","show","_e","NavigationController","transitionName","savedScrollPositions","nextScrollPosition","previousScrollPosition","nextInternalScrollPosition","savedInternalScrollPositions","slice","freezeSize","el","$el","w","offsetWidth","offsetHeight","width","height","growSize","unfreezeSize","getInternalScrollElement","element","mightBe","querySelector","getScrollElement","document","documentElement","shouldAnimate","matchMedia","error","activeElement","blur","force","replace","animationType","internalScrollElement","scrollElement","clientHeight","visualViewport","internalClientHeight","scrollTop","popped","comp","canAnimate","popToRoot","getPoppableParent","prev","$listeners","Math","max","insertedElement","className","_element","beforeBeforeEnterAnimation","finishedEnterAnimation","done","internal","requestAnimationFrame","firstElementChild","nextInternal","scrollOuterHeight","getScrollOuterHeight","scrollHeight","childElement","transitionDuration","willChange","top","bottom","overflow","default","appear","shouldAppear","duration","class","buildClass","click","onClick","dismiss","ModalMixin","modalStackComponent","nav","Popup","pushDown","j","keys","p","join","popups","stackComponent","isFocused","mainContent","contains","body","preventDefault","onKey","deactivated","defaultPrevented","repeat","keyCode","required","mousedown","touchdown","$event","stopPropagation","SideView","sideViews","resize","_l","refInFor","removeAt","StackComponent","entries","beforeDestroy","ModalStackComponent","modalClass","navigationController","Sheet","detail","showDetail","throttle","func","limit","lastFunc","lastRan","args","Date","now","apply","SplitViewController","detailKey","onResize","passive","detailWidth","setProperty","shouldCollapse","collapse","lastIsDetail","expand","getComputedStyle","overflowY","parentElement","$nextTick","NavigationMixin","canPop","canDismiss","emitParents","modalNav","modalOrPopup","modalNavigationController","splitViewController","calculateCanPop","calculateCanDismiss","getPoppableNavigationController"],"sourceRoot":""}
@@ -1,9 +1,10 @@
1
1
  import { Vue } from "vue-property-decorator";
2
2
  import { ComponentWithProperties } from "./ComponentWithProperties";
3
- import StackComponent from "./StackComponent.vue";
4
3
  import { PushOptions } from "./PushOptions";
4
+ import StackComponent from "./StackComponent.vue";
5
5
  export default class ModalStackComponent extends Vue {
6
6
  readonly root: ComponentWithProperties;
7
+ readonly initialComponents: ComponentWithProperties[] | null;
7
8
  stackComponent: StackComponent;
8
9
  present(options: PushOptions): void;
9
10
  /**
@@ -3,6 +3,8 @@ import { PopOptions } from './PopOptions';
3
3
  import { ModalMixin } from './ModalMixin';
4
4
  export default class Popup extends ModalMixin {
5
5
  root: ComponentWithProperties;
6
+ className: string;
7
+ get buildClass(): string;
6
8
  get shouldAppear(): boolean;
7
9
  get pushDown(): 1 | 0 | 2;
8
10
  get isFocused(): boolean;
@@ -38,4 +38,5 @@ export interface PushOptions {
38
38
  */
39
39
  reverse?: boolean;
40
40
  modalDisplayStyle?: ModalDisplayStyle;
41
+ modalClass?: string;
41
42
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@simonbackx/vue-app-navigation",
3
3
  "main": "./dist/main.js",
4
4
  "types": "./dist/index.d.ts",
5
- "version": "1.24.3",
5
+ "version": "1.26.0",
6
6
  "sideEffects": [
7
7
  "*.vue",
8
8
  "*.css"