{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-theresa/src/client/morphic/component-loader.js"],"names":["register","componentName","template","prototype","scriptManager","files","self","lively4loadingPromises","loadingPromises","_templates","_prototypes","_proxies","_templatePaths","_templatePathsCache","_templatePathsCacheTime","_templateFirstLoadTimes","_loggingEnabled","_log","args","console","log","_timeEnabled","_timeLog","name","msg","Math","round","performance","now","ComponentLoader","templates","prototypes","proxies","updatePrototype","aClass","moduleName","replace","__proto__","onCreatedCallback","object","attachScriptsFromShadowDOM","findLively4Script","createdCallback","call","_livelyLoading","Promise","resolve","_livelyLoadingDep","loadUnresolved","then","initialize","window","LastRegistered","toFixed","_lively4created","Date","dispatchEvent","Event","catch","e","error","onAttachedCallback","attachedCallback","onDetachedCallback","detachedCallback","applyTemplate","element","shadowRoot","attachShadow","mode","fragment","cloneNode","childNodes","forEach","ea","clone","document","importNode","appendChild","proxy","lively","fillTemplateStyles","HTMLElement","_lively4version","constructor","connectedCallback","apply","disconnectedCallback","adoptedCallback","customElements","define","lookupRoot","deep","debuggingHint","withChildren","withyourself","body","selector","unresolved","parentElement","unresolvedSiblingsAndMe","Array","from","querySelectorAll","includes","push","concat","deepUnresolved","findUnresolvedDeep","root","shadow","result","children","child","unique","Set","__debugOpenPromisedComponents","promises","filter","el","nodeName","toLowerCase","has","add","map","createdPromise","reject","target","addEventListener","evt","stopPropagation","delete","loadByName","didInsertTag","promise","p","r","finished","er","setTimeout","unfinished","unfinishedPromise","warn","join","all","err","resetTemplatePathCache","undefined","getTemplatePathContent","path","cacheInvalidationTime","cached","time","resultPromise","fetch","method","resp","status","json","contents","getTemplatePaths","lively4url","addTemplatePath","isURL","location","href","searchTemplateFilename","filename","templatePaths","templateDir","__karma__","stats","found","find","modUrl","Error","templateURL","exists","mod","System","import","default","templateSource","text","div","createElement","innerHTML","querySelector","remove","content","createComponent","tagString","comp","openIn","parent","component","beginning","created","compPromise","composedPath","tagName","insertBefore","firstChild","openInBody","openInWindow","pos","w","setPosition","style","opacity","localName","match","windowPromise","ensureWindowTitle","windowTitle","setAttribute","reloadComponent","source","html","parseHTML","id","templateClone"],"mappings":";;;;;AAmCA;AACO,WAASA,QAAT,CAAkBC,aAAlB,EAAiCC,QAAjC,EAA2CC,SAA3C,EAAsD;AAC3D,WAAO,mEAAgBH,QAAhB,CAAyBC,aAAzB,EAAwCC,QAAxC,EAAkDC,SAAlD,CAAP;AACD;;AAED;;;;;;;;;;;;;sBAJgBH,Q;;;;AApCTI,mB;;AACAC,W;;;;;;;;;AAEP;AACA,UAAI,CAACC,KAAKC,sBAAV,EAAkC;AAChC;AACAD,aAAKC,sBAAL,GAA8B,EAA9B,CAFgC,CAEC;AAClC;;iCACUC,e,GAAkBF,KAAKC,sB;;;;;AAG9BE,gB;;AACAC,iB;;AACAC,c;;AAEAC,oB;;AACAC,yB;;AACAC,6B;;AACAC,6B,GAA0B,E;;AAE1BC,qB,GAAkB,K;;;AAClBC,U,GAAO,UAAS,GAAGC,IAAZ,EAAkB;AAC3B,+DAAIF,eAAJ,EAAqB;AACnBG,kBAAQC,GAAR,CAAY,kBAAZ,EAA+B,GAAGF,IAAlC;AACD;AACF,O;;;AAEGG,kB,GAAe,K;;;AACfC,c,GAAW,UAASC,IAAT,EAAeC,GAAf,EAAoB,GAAGN,IAAvB,EAA6B;AAC1C,+DAAIG,YAAJ,EAAkB;AAChBF,kBAAQC,GAAR,CAAY,iBAAiBG,IAAjB,GAAwB,GAAxB,GAA8BE,KAAKC,KAAL,CAAWC,YAAYC,GAAZ,KAAoB,2EAAwBL,IAAxB,CAA/B,CAA9B,GAA6F,KAA7F,GAAoGC,GAAhH,EAAqH,GAAGN,IAAxH;AACD;AACF,O;;;AAsBc,YAAMW,eAAN,CAAsB;;AAEnC,mBAAWC,SAAX,GAAuB;AACrB,cAAI,oDAACrB,UAAL,EAAiB,gEAAa,EAAb;AACjB,oEAAOA,UAAP;AACD;;AAED,mBAAWsB,UAAX,GAAwB;AACtB,cAAI,oDAACrB,WAAL,EAAkB,iEAAc,EAAd;AAClB,oEAAOA,WAAP;AACD;;AAED,mBAAWsB,OAAX,GAAqB;AAClB,cAAI,oDAACrB,QAAL,EAAe,8DAAW,EAAX;AAChB,oEAAOA,QAAP;AACD;;AAED,eAAOsB,eAAP,CAAuBC,MAAvB,EAA+BC,UAA/B,EAA2C;AACzC,cAAIlC,gBAAgBkC,WAAWC,OAAX,CAAmB,MAAnB,EAA0B,EAA1B,EAA8BA,OAA9B,CAAsC,OAAtC,EAA8C,EAA9C,CAApB;AACA,cAAInC,iBAAiB,KAAK8B,UAAL,CAAgB9B,aAAhB,CAArB,EAAqD;AACnD,iBAAK8B,UAAL,CAAgB9B,aAAhB,IAAiCiC,MAAjC;AACA,iBAAKF,OAAL,CAAa/B,aAAb,EAA4BoC,SAA5B,GAAwCH,MAAxC;AACA,iBAAKF,OAAL,CAAa/B,aAAb,EAA4BE,SAA5B,CAAsCkC,SAAtC,GAAkDH,OAAO/B,SAAzD;AACD;AACF;;AAED,qBAAamC,iBAAb,CAA+BC,MAA/B,EAAuCtC,aAAvC,EAAsD;AACpD,kEAAK,uBAAuBA;;AAE5B;AAFA,YAGA,iEAAcuC,0BAAd,CAAyCD,MAAzC;;AAEA;AACA,2EAAcE,iBAAd,CAAgCF,MAAhC,EAAwC,KAAxC;;AAEA,cAAI,mEAAgBR,UAAhB,CAA2B9B,aAA3B,EAA0CyC,eAA9C,EAA+D;AAC7D,+EAAgBX,UAAhB,CAA2B9B,aAA3B,EAA0CyC,eAA1C,CAA0DC,IAA1D,CAA+DJ,MAA/D;AACD;;AAED;AACA,kEAAK,4CAA4CtC,aAAjD;;AAEA,eAAK2C,cAAL,GAAsBC,QAAQC,OAAR,EAAtB;AACA,eAAKC,iBAAL,GAA0B,mEAAgBC,cAAhB,CACtBT,MADsB,EACd,IADc,EACR,eAAetC,aADP,EACsB,KADtB,EAC6BgD,IAD7B,CACmC/B,IAAD,IAAU;AACpE,oEAAK,+CAA+CjB;;AAEpD;AACE;;AAHF,cAKE,IAAI,OAAOsC,OAAOW,UAAd,KAA6B,UAAjC,EAA6C;AAC3CX,qBAAOW,UAAP;AACD;AACD,oEAAK,sBAAqBjD,aAA1B;AACA,oEAAK,kBAAkBkD,OAAOC,cAAP,KAA0Bb,MAA5C;;AAEP;AAFE,cAGF,IAAI,2EAAwBtC,aAAxB,CAAJ,EAA4C;AAC1C,sEAAK,gCAAgC,CAAC,CAAC0B,YAAYC,GAAZ,KAAoB,2EAAwB3B,aAAxB,CAArB,IAA+D,IAAhE,EAAsEoD,OAAtE,CAA8E,CAA9E,CAAhC,GAAmH,IAAnH,GAA0HpD,aAA1H,GAA0I,GAA/I;AACA,yFAAwBA,aAAxB,IAAyC,IAAzC;AACD;AACD,oEAAK,qCAAqCA,aAA1C;AACAsC,mBAAOe,eAAP,GAAyBC,KAAK3B,GAAL,EAAzB;AACAW,mBAAOiB,aAAP,CAAqB,IAAIC,KAAJ,CAAU,SAAV,CAArB,EAnBoE,CAmBxB;AAC7C,WArByB,EAqBvBC,KArBuB,CAqBhBC,KAAK;AACbxC,oBAAQyC,KAAR,CAAcD,CAAd;AACA,mBAAOA,CAAP;AACD,WAxByB,CAA1B;AAyBA,eAAKZ,iBAAL;AACD;;AAED,qBAAac,kBAAb,CAAgCtB,MAAhC,EAAwCtC,aAAxC,EAAuD;;AAErD,cAAI,KAAK2C,cAAT,EAAyB;AACvB,kBAAM,KAAKA,cAAX,CADuB,CACG;AAC3B;;AAED,kEAAK,wBAAwB3C,aAA7B;;AAEA,cAAIsC,OAAOuB,gBAAP,IACF,mEAAgB9B,OAAhB,CAAwB/B,aAAxB,EAAuC6D,gBAAvC,IAA2DvB,OAAOuB,gBADpE,EACsF;AAClFvB,mBAAOuB,gBAAP,CAAwBnB,IAAxB,CAA6BJ,MAA7B;AACH,WAHD,MAGO,IAAI,mEAAgBR,UAAhB,CAA2B9B,aAA3B,EAA0C6D,gBAA9C,EAAgE;AACrE,+EAAgB/B,UAAhB,CAA2B9B,aAA3B,EAA0C6D,gBAA1C,CAA2DnB,IAA3D,CAAgEJ,MAAhE;AACD;AACF;;AAED,qBAAawB,kBAAb,CAAgCxB,MAAhC,EAAwCtC,aAAxC,EAAuD;;AAErD,cAAI,KAAK2C,cAAT,EAAyB;AACvB,kBAAM,KAAKA,cAAX;AACD;;AAED,cAAIL,OAAOyB,gBAAP,IACD,mEAAgBhC,OAAhB,CAAwB/B,aAAxB,EAAuC+D,gBAAvC,IAA2DzB,OAAOyB,gBADrE,EACuF;AACrFzB,mBAAOyB,gBAAP,CAAwBrB,IAAxB,CAA6BJ,MAA7B;AACD,WAHD,MAGO,IAAI,mEAAgBR,UAAhB,CAA2B9B,aAA3B,EAA0C+D,gBAA9C,EAAgE;AACrE,+EAAgBjC,UAAhB,CAA2B9B,aAA3B,EAA0C+D,gBAA1C,CAA2DrB,IAA3D,CAAgEJ,MAAhE;AACD;AACF;;AAED,eAAO0B,aAAP,CAAqBC,OAArB,EAA8BjE,aAA9B,EAA6C;AAC3C,cAAI,CAACiE,QAAQC,UAAb,EAAyB;AACvBD,oBAAQE,YAAR,CAAqB,EAACC,MAAM,MAAP,EAArB;AACD;;AAED,cAAInE,WAAW,KAAK4B,SAAL,CAAe7B,aAAf,CAAf;AACA,cAAIC,QAAJ,EAAc;AACZ,gBAAIoE,WAAWpE,SAASqE,SAAT,CAAmB,IAAnB,CAAf;AACAD,qBAASE,UAAT,CAAoBC,OAApB,CAA4BC,MAAM;AAChC,kBAAIC,QAAQC,SAASC,UAAT,CAAoBH,EAApB,EAAwB,IAAxB,CAAZ;AACAR,sBAAQC,UAAR,CAAmBW,WAAnB,CAA+BH,KAA/B;AACD,aAHD;AAID;AACF;;AAED;AACA;AACA,qBAAa3E,QAAb,CAAsBC,aAAtB,EAAqCC,QAArC,EAA+CgC,MAA/C,EAAuD;AACrD,kEAAK,iCAAiCjC,aAAtC;AACA,cAAI8E,KAAJ;;AAEA;AACA,eAAKjD,SAAL,CAAe7B,aAAf,IAAgCC,QAAhC;AACA,eAAK6B,UAAL,CAAgB9B,aAAhB,IAAiCiC,MAAjC;;AAEA,cAAIhC,QAAJ,EAAc;AACZ,oEAAK,qDAAqDD,aAA1D;AACA,kBAAM+E,OAAOC,kBAAP,CAA0B/E,QAA1B,EAAoC,aAAaD,aAAjD,CAAN;AACD;;AAED,cAAI,CAAC,KAAK+B,OAAL,CAAa/B,aAAb,CAAL,EAAkC;AAChC8E,oBAAQ,cAAcG,WAAd,CAA0B;AAChC,yBAAW3D,IAAX,GAAkB;AAChB,uBAAOtB,aAAP;AACD;;AAED,kBAAIkF,eAAJ,GAAsB;AACpB,uBAAO,CAAP;AACD;;AAEDC,4BAAc;AACZ,wEAAK,0CAA0CnF,aAA/C;;AAEA,wBAHY,CAGH;;AAET,mFAAgBgE,aAAhB,CAA8B,IAA9B,EAAoChE,aAApC;AACA,mFAAgBqC,iBAAhB,CAAkC,IAAlC,EAAwCrC,aAAxC;AACD;;AAEDoF,gCAAmBnE,IAAnB,EAAyB;AACvB,wEAAK,uBAAuBjB;;AAG5B;AACA;AAJA,kBAKA,mEAAgB4D,kBAAhB,CAAmC,IAAnC,EAAyC5D,aAAzC;AACA,oBAAI,KAAKmF,WAAL,CAAiB/C,SAAjB,CAA2BlC,SAA3B,CAAqCkF,iBAAzC,EAA4D;AAC1D,yBAAO,KAAKD,WAAL,CAAiB/C,SAAjB,CAA2BlC,SAA3B,CAAqCkF,iBAArC,CAAuDC,KAAvD,CAA6D,IAA7D,EAAmEpE,IAAnE,CAAP;AACD;AACF;AACDqE,mCAAqB,GAAGrE,IAAxB,EAA8B;AAC5B,wEAAK,yBAAyBjB;;AAE9B;AAFA,kBAGA,mEAAgB8D,kBAAhB,CAAmC,IAAnC,EAAyC9D,aAAzC;AACA,oBAAI,KAAKmF,WAAL,CAAiB/C,SAAjB,CAA2BlC,SAA3B,CAAqCoF,oBAAzC,EAA+D;AAC7D,yBAAO,KAAKH,WAAL,CAAiB/C,SAAjB,CAA2BlC,SAA3B,CAAqCoF,oBAArC,CAA0DD,KAA1D,CAAgE,IAAhE,EAAsEpE,IAAtE,CAAP;AACD;AACF;;AAEDsE,8BAAgB,GAAGtE,IAAnB,EAAyB;AACvB,wEAAK,qBAAqBjB;AAC1B;AADA,kBAEA,IAAI,KAAKmF,WAAL,CAAiB/C,SAAjB,CAA2BlC,SAA3B,CAAqCqF,eAAzC,EAA0D;AACxD,yBAAO,KAAKJ,WAAL,CAAiB/C,SAAjB,CAA2BlC,SAA3B,CAAqCqF,eAArC,CAAqDF,KAArD,CAA2D,IAA3D,EAAiEpE,IAAjE,CAAP;AACD;AACF;AA7C+B,aAAlC;AA+CA;AACA;AACA;AACA;;AAEA,oEAAK,0CAA0CjB,aAA/C;AACAkD,mBAAOsC,cAAP,CAAsBC,MAAtB,CAA6BzF,aAA7B,EAA4C8E,KAA5C,EAtDgC,CAsDoB;AACpD,iBAAK/C,OAAL,CAAa/B,aAAb,IAA+B8E,KAA/B;AACD,WAxDD,MAwDO;AACLA,oBAAQ,KAAK/C,OAAL,CAAa/B,aAAb,CAAR;AAED;;AAED;AACA8E,gBAAM1C,SAAN,GAAkBH,MAAlB;AACA6C,gBAAM5E,SAAN,CAAgBkC,SAAhB,GAA4BH,OAAO/B,SAAnC;AACD;;AAED;AACA;AACA;AACA,eAAO6C,cAAP,CAAsB2C,UAAtB,EAAkCC,IAAlC,EAAwCC,aAAxC,EAAuDC,eAAa,KAApE,EAA2EC,eAAa,KAAxF,EAA+F;AAC7FJ,uBAAaA,cAAcf,SAASoB,IAApC;;AAEA,cAAIC,WAAW,gBAAf;AACA,cAAIC,aAAa,EAAjB;;AAEA;;AAEA;AACA,cAAIH,gBAAgBJ,WAAWQ,aAA/B,EAA8C;AAC5C,gBAAIC,0BAA0BC,MAAMC,IAAN,CAAWX,WAAWQ,aAAX,CAAyBI,gBAAzB,CAA0CN,QAA1C,CAAX,CAA9B;AACA,gBAAIG,wBAAwBI,QAAxB,CAAiCb,UAAjC,CAAJ,EAAkD;AAChDO,yBAAWO,IAAX,CAAgBd,UAAhB;AACD;AACF;AACD;;AAEA;AACA,cAAIG,YAAJ,EAAkB;AAChBI,yBAAaA,WAAWQ,MAAX,CAAkBL,MAAMC,IAAN,CAAWX,WAAWY,gBAAX,CAA4BN,QAA5B,CAAX,CAAlB,CAAb;AACD;;AAED;AACA,cAAIL,IAAJ,EAAU;AACR,gBAAIe,iBAAiBC,mBAAmBjB,UAAnB,CAArB;AACAO,yBAAaA,WAAWQ,MAAX,CAAkBC,cAAlB,CAAb;AACD;;AAED,mBAASC,kBAAT,CAA4BC,IAA5B,EAAkC;AAChC,gBAAIC,SAASD,KAAK1C,UAAlB;AACA,gBAAI,CAAC2C,MAAL,EAAa;AACX,qBAAO,EAAP;AACD;;AAED,gBAAIC,SAASV,MAAMC,IAAN,CAAWQ,OAAOP,gBAAP,CAAwBN,QAAxB,CAAX,CAAb;;AAEAI,kBAAMC,IAAN,CAAWQ,OAAOE,QAAlB,EAA4BvC,OAA5B,CAAqCwC,KAAD,IAAW;AAC7CF,uBAASA,OAAOL,MAAP,CAAcE,mBAAmBK,KAAnB,CAAd,CAAT;AACD,aAFD;;AAIA,mBAAOF,MAAP;AACD;;AAED;AACA,cAAIG,SAAS,IAAIC,GAAJ,EAAb;;AAGA,cAAIC,gCAAgC,IAAID,GAAJ,EAApC;;AAEA,cAAIE,WAAWnB,WAAWoB,MAAX,CAAmBC,EAAD,IAAQ;AACvC;AACA,gBAAI,CAACA,GAAGC,QAAJ,IAAgBD,GAAGC,QAAH,CAAYC,WAAZ,MAA6B,WAAjD,EAA8D,OAAO,KAAP;AAC9D,gBAAIlG,OAAOgG,GAAGC,QAAH,CAAYC,WAAZ,EAAX;AACA,mBAAO,CAACP,OAAOQ,GAAP,CAAWnG,IAAX,CAAD,IAAqB2F,OAAOS,GAAP,CAAWpG,IAAX,CAA5B;AACD,WALc,EAMdqG,GANc,CAMTL,EAAD,IAAQ;AACX,gBAAIhG,OAAOgG,GAAGC,QAAH,CAAYC,WAAZ,EAAX;AACA,gBAAI,mEAAgBlG,IAAhB,CAAJ,EAA2B;AACzB;AACA,qBAAO,mEAAgBA,IAAhB,CAAP;AACD;;AAED6F,0CAA8BO,GAA9B,CAAkCpG;AAClC;AADA,cAEA,IAAIsG,iBAAiB,IAAIhF,OAAJ,CAAY,CAACC,OAAD,EAAUgF,MAAV,KAAqB;AACpD,kBAAIP,GAAGjE,eAAP,EAAwB;AACtB,uBAAOR,QAAQ,EAACiF,QAAQR,EAAT,EAAR,CAAP;AACD;AACDA,iBAAGS,gBAAH,CAAoB,SAApB,EAAgCC,GAAD,IAAS;AACtCA,oBAAIC,eAAJ;AACAd,8CAA8Be,MAA9B,CAAqC5G,IAArC;AACAuB,wBAAQmF,GAAR;AACD,eAJD;AAKD,aAToB,CAArB;;AAWA;AACA,+EAAgB1G,IAAhB,IAAwBsG,cAAxB;;AAEA,+EAAgBtG,IAAhB,EAAsBA,IAAtB,GAA6B,aAAYA,IAAZ,GAAmB,GAAnB,GAAyBgC,KAAK3B,GAAL,EAAzB,GAAsC,GAAnE;;AAEA,iBAAKwG,UAAL,CAAgB7G,IAAhB,EAAsB0B,IAAtB,CAA4BoF,YAAD,IAAkB;AAC3C,kBAAG,CAACA,YAAJ,EAAkB;AAChBlH,wBAAQyC,KAAR,CAAc,kBAAd,EAAmC,YAAWrC,IAAK,uBAAnD,EAA2E,CAA3E,EAA8E,IAA9E,EAAoF,QAApF;AACA,uBAAO,mEAAgBA,IAAhB,CAAP;AACA,uBAAO,IAAP;AACD;AACF,aAND;;AASA,mBAAOsG,cAAP;AACD,WAzCc,EA0CdP,MA1Cc,CA0CPgB,WAAWA,WAAW,IA1Cf,CAAf;;AA4CA,kEAAK,iCAAL,EAAwCjB;;AAExC;AACA;AAHA,YAIA,OAAO,IAAIxE,OAAJ,CAAa,CAACC,OAAD,EAAUgF,MAAV,KAAqB;;AAEvC;AACAT,qBAAS5C,OAAT,CAAkB8D,KAAK;AACrBA,gBAAEtF,IAAF,CAAQuF,KAAK;AACXD,kBAAEE,QAAF,GAAa,IAAb;AACD,eAFD,EAEGC,MAAMvH,QAAQC,GAAR,CAAY,uBAAuBmH,EAAEhH,IAArC,CAFT;AAID,aALD;AAMA4B,mBAAOwF,UAAP,CAAmB,YAAW;AAC5B,kBAAIC,aAAa,KAAjB;AACA,kBAAIC,iBAAJ;AACAxB,uBAAS5C,OAAT,CAAkB8D,KAAK;AACrB,oBAAI,CAACA,EAAEE,QAAP,EAAiB;AACfI,sCAAoBN,CAApB;AACAK,+BAAa,IAAb;AACD;AACF,eALD;AAMA,kBAAIA,UAAJ,EAAgB;AACd9F,wBAAQ,SAAR,CAAmB;AAAnB,kBACA3B,QAAQ2H,IAAR,CAAa,sDAAsDD,kBAAkBtH,IAAxE,GAA+E,YAA/E,GAA8FsE,aAA3G,EAA0H,kBAAkBQ,MAAMC,IAAN,CAAWc,6BAAX,EAA0C2B,IAA1C,CAA+C,IAA/C,CAA5I;AACD;AACF,aAbD,EAaG,KAAK,IAbR;;AAeAlG,oBAAQmG,GAAR,CAAY3B,QAAZ,EAAsBpE,IAAtB,CAA4B8D,UAAUjE,SAAtC,EAAiDmG,OAAO;AACpD,sEAAK,0BAAL,EAAiCA,GAAjC;AACH,aAFD;AAGD,WA3BM,CAAP;AA4BD;;AAGD,eAAOC,sBAAP,GAAgC;AAC9B,mFAAsBC,SAAtB;AACA,uFAA0BA,SAA1B;AACD;;AAED,qBAAaC,sBAAb,CAAoCC,IAApC,EAA0C;;AAExC,cAAI,oDAACxI,mBAAL,EAA0B;AACxB,qFAAsB,EAAtB;AACA,yFAA0B,EAA1B;AACD;;AAED,cAAIyI,wBAAwB,KAAK,CAAL,GAAS,IAArC;AACA,cAAIC,SAAS,uEAAoBF,IAApB,CAAb;AACA,cAAIG,OAAO,2EAAwBH,IAAxB,CAAX;AACA,cAAIE,UAAYhG,KAAK3B,GAAL,KAAa4H,IAAd,GAAsBF,qBAArC,EAA6D,OAAOC,MAAP;;AAE7D,cAAIE,gBAAiBC,MAAML,IAAN,EAAY,EAAEM,QAAQ,SAAV,EAAZ,EAAmC1G,IAAnC,CAAwC2G,QAAQ;AACnE,gBAAIA,KAAKC,MAAL,KAAgB,GAApB,EAAyB,OAAOV,SAAP;AACzB,mBAAOS,KAAKE,IAAL,EAAP;AACD,WAHoB,CAArB;AAIA,qFAAwBT,IAAxB,IAAgC9F,KAAK3B,GAAL,EAAhC;AACA,iFAAoByH,IAApB,IAA4B,IAAIxG,OAAJ,CAAY,OAAOC,OAAP,EAAgBgF,MAAhB,KAA2B;AACjE,gBAAIf,SAAS,MAAM0C,aAAnB;AACA,gBAAI1C,MAAJ,EAAY;AACRjE,sBAAQ,EAACiH,UAAUhD,OAAOgD,QAAlB,EAAR;AACF,qBAAOR,MAAP;AACD;AACF,WAN2B,CAA5B;AAOA,iBAAOE,aAAP;AACD;;AAED,eAAOO,gBAAP,GAA0B;AACxB,cAAI,oDAACpJ,cAAL,EAAqB;AACnB,gFAAiB,CACfqJ,aAAa,aADE,EAEfA,aAAa,kBAFE,EAGfA,aAAa,0BAHE,EAIfA,aAAa,wBAJE,EAKfA,aAAa,uBALE,EAMfA,aAAa,uBANE,EAOfA,aAAa,wBAPE,EAQfA,aAAa,qBARE,EASfA,aAAa,gCATE,EAUfA,aAAa,4CAVE,EAWfA,aAAa,wCAXE,EAYfA,aAAa,iCAZE,EAafA,aAAa,oCAbE,EAcfA,aAAa,qCAdE,EAefA,aAAa,kDAfE,EAgBfA,aAAa,gDAhBE,CAAjB,CADmB,CAkBhB;AACJ;AACD,oEAAOrJ,cAAP;AACD;;AAED,eAAOsJ,eAAP,CAAuBb,IAAvB,EAA6B;AAC3B,cAAI,CAACrE,OAAO3E,KAAP,CAAa8J,KAAb,CAAmBd,IAAnB,CAAL,EAA+B;AAC7BA,mBAAOrE,OAAOoF,QAAP,CAAgBC,IAAhB,CAAqBjI,OAArB,CAA6B,QAA7B,EAAuCiH,IAAvC,CAAP;AACD;AACD,cAAIL,MAAM,KAAKgB,gBAAL,EAAV;AACA,cAAI,CAAChB,IAAIxC,QAAJ,CAAa6C,IAAb,CAAL,EAAyB;AACvBL,gBAAIvC,IAAJ,CAAS4C,IAAT;AACD;AACF;;AAED,qBAAaiB,sBAAb,CAAoCC,QAApC,EAA8C;;AAE5C,cAAIC,gBAAiB,KAAKR,gBAAL,EAArB;AACA,cAAIS,cAActB,SAAlB;;AAEA;AACA;;;AAGA;AACA,cAAI,CAAChG,OAAOuH,SAAZ,EAAuB;AACrB,iBAAID,WAAJ,IAAmBD,aAAnB,EAAkC;AAChC,kBAAI;AACF,oBAAIG,QAAQ,MAAM,KAAKvB,sBAAL,CAA4BqB,WAA5B,CAAlB;AACA,oBAAIG,QAAQD,MAAMZ,QAAN,CAAec,IAAf,CAAoBnG,MAAMA,GAAGnD,IAAH,IAAWgJ,QAArC,CAAZ;AACD,eAHD,CAGE,OAAM5G,CAAN,EAAS;AACT,wEAAK,qDAAqD4G,QAArD,GAAgE,UAArE,EAAiF5G,CAAjF;AACAiH,wBAAQ,IAAR;AACD;AACD,kBAAIA,KAAJ,EAAW;AACT,uBAAOH,cAAcF,QAArB;AACD;AACF;AAEF,WAdD,MAcO;AACL;AACA,gBAAI,CAACK,KAAL,EAAY;AACV,mBAAIH,WAAJ,IAAmBD,aAAnB,EAAkC;AAChCI,wBAAQ,MAAMlB,MAAMe,cAAcF,QAApB,EAA8B,EAAEZ,QAAQ,KAAV,EAA9B,CAAiD;AAAjD,kBACX1G,IADW,CACN2G,QAAQA,KAAKC,MAAL,IAAe,GADjB,CAAd;AAEA,oBAAIe,KAAJ,EAAW;AACT,yBAAOH,cAAcF,QAArB;AACD;AACF;AACF;AACF;AACD,iBAAOpB,SAAP;AACD;;AAED;AACA,qBAAaf,UAAb,CAAwB7G,IAAxB,EAA8B;AAC5B,kEAAK,mCAAmCA,IAAxC;;AAEA,qFAAwBA,IAAxB,IAAgCI,YAAYC,GAAZ,EAAhC;AACA,cAAIkJ,SAAS,MAAM,KAAKR,sBAAL,CAA4B/I,OAAO,KAAnC,CAAnB;AACA,cAAI,CAACuJ,MAAL,EAAa;AACX,kBAAM,IAAIC,KAAJ,CAAU,iCAAiCxJ,IAA3C,CAAN;AACD;AACD,sEAASA,IAAT,EAAe,wBAAf;;AAEA,cAAIyJ,cAAc,MAAM,KAAKV,sBAAL,CAA4B/I,OAAO,OAAnC,CAAxB;AACA,sEAASA,IAAT,EAAe;;AAEf;AACA;AACA;AAJA,YAKA,IAAI;AACF,gBAAG,yDAAM0J,MAAN,CAAaH,MAAb,CAAH,EAAyB;AACvB,0EAASvJ,IAAT,EAAe,eAAf;AACA,kBAAI2J,MAAM,MAAMC,OAAOC,MAAP,CAAcN,MAAd,CAAhB;AACA,0EAASvJ,IAAT,EAAe,eAAf;AACA,kBAAIW,SAASgJ,IAAIG,OAAjB;;AAEA,kBAAIL,WAAJ,EAAiB;AACf,oBAAG,yDAAMC,MAAN,CAAaD,WAAb,CAAH,EAA8B;AAC5B,8EAASzJ,IAAT,EAAe,gBAAf;AACA,sBAAI+J,iBAAiB,MAAM5B,MAAMsB,WAAN,EAAmB/H,IAAnB,CAAwBuF,KAAKA,EAAE+C,IAAF,EAA7B,CAA3B;AACA,8EAAShK,IAAT,EAAe,iBAAf;AACA,sBAAIiK,MAAM5G,SAAS6G,aAAT,CAAuB,KAAvB,CAAV;AACAD,sBAAIE,SAAJ,GAAgBJ,cAAhB;AACA,sBAAIpL,WAAWsL,IAAIG,aAAJ,CAAkB,UAAlB,CAAf;AACAzL,2BAAS0L,MAAT;AACD;AACF;AACD,mBAAK5L,QAAL,CAAcuB,IAAd,EAAoBrB,SAAS2L,OAA7B,EAAsC3J,MAAtC;AACA,0EAASX,IAAT,EAAe,YAAf;AACA,qBAAO,IAAP;AACD,aApBD,MAoBO;AACL,qBAAO,KAAP;AACD;AACF,WAxBD,CAwBE,OAAOqC,KAAP,EAAc;AACd,mBAAO,KAAP;AACD;AACF;;AAED;AACA,eAAOkI,eAAP,CAAuBC,SAAvB,EAAkC;AAChC,cAAIC,OAAOpH,SAAS6G,aAAT,CAAuBM,SAAvB,CAAX;AACA,iBAAOC,IAAP;AACD;;AAED,eAAOC,MAAP,CAAcC,MAAd,EAAsBC,SAAtB,EAAiCC,SAAjC,EAA4C;AAC1C,cAAIC,UAAU,KAAd;AACA,cAAIC,cAAc,IAAIzJ,OAAJ,CAAaC,OAAD,IAAa;AACzC,gBAAIqJ,UAAU7I,eAAd,EAAgC,OAAOR,QAAQqJ,SAAR,CAAP;;AAEhCA,sBAAUnE,gBAAV,CAA2B,SAA3B,EAAuCrE,CAAD,IAAO;AAC3C,kBAAIA,EAAE4I,YAAF,GAAiB,CAAjB,MAAwBJ,SAA5B,EAAuC;AACrC,wEAAK,4DAA4DxI,EAAE4I,YAAF,CAAe,CAAf,EAAkBC,OAAnF;AACA;AACD;AACD,kBAAIH,OAAJ,EAAa;AACX;AACA,sBAAM,IAAItB,KAAJ,CAAU,4CAA4CoB,SAAtD,CAAN;AACD,eAHD,MAGO;AACLE,0BAAU,IAAV;AACA1I,kBAAEuE,eAAF;AACApF,wBAAQa,EAAEoE,MAAV;AACD;AAEF,aAdD;AAeD,WAlBiB,CAAlB;;AAoBA,cAAIqE,SAAJ,EAAe;AACbF,mBAAOO,YAAP,CAAoBN,SAApB,EAA+BD,OAAOQ,UAAtC;AACD,WAFD,MAEO;AACLR,mBAAOpH,WAAP,CAAmBqH,SAAnB;AACD;AACD,eAAKnJ,cAAL,CAAoBmJ,SAApB,EAA+B,IAA/B,EAAqC,YAAYA,SAAjD,EAA4D,IAA5D,EAAkE,IAAlE;AACA,iBAAOG,WAAP;AACD;;AAED,eAAOK,UAAP,CAAkBR,SAAlB,EAA6B;AAC3B,iBAAO,KAAKF,MAAL,CAAYrH,SAASoB,IAArB,EAA2BmG,SAA3B,EAAsC,IAAtC,CAAP;AACD;;AAED,qBAAaS,YAAb,CAA0BT,SAA1B,EAAqCU,GAArC,EAA0C;AACxC;AACA;AACA;AACA,cAAIC,IAAI,KAAKhB,eAAL,CAAqB,eAArB,CAAR;AACA,cAAIe,GAAJ,EAAS;AACP7H,mBAAO+H,WAAP,CAAmBD,CAAnB,EAAsBD,GAAtB;AACD;AACDC,YAAEE,KAAF,CAAQC,OAAR,GAAkB,GAAlB;AACAH,YAAEhI,WAAF,CAAcqH,SAAd;;AAEA,eAAKQ,UAAL,CAAgBG,CAAhB;;AAEA,cAAI,CAACX,UAAUe,SAAV,CAAoBC,KAApB,CAA0B,GAA1B,CAAL,EAAqC;AACnC,mBAAOL,CAAP,CADmC,CAC1B;AACV;;AAED;AACA;AACA;AACA,cAAIM,gBAAgB,IAAIvK,OAAJ,CAAaC,OAAD,IAAa;AAC3C,iBAAKE,cAAL,CAAoB4B,SAASoB,IAA7B,EAAmC,IAAnC,EAAyC,kBAAkBmG,SAA3D,EAAsElJ,IAAtE,CAA2E,MAAM;AAC/E6J,gBAAEE,KAAF,CAAQC,OAAR,GAAkB,GAAlB;AACA,mBAAKI,iBAAL,CAAuBlB,SAAvB,EAAkCW,CAAlC;;AAEAhK,sBAAQgK,CAAR;AACD,aALD;AAMD,WAPmB,CAApB;;AASA,iBAAOM,aAAP;AACD;;AAED,eAAOC,iBAAP,CAAyBlB,SAAzB,EAAoCW,CAApC,EAAuC;AACrC,cAAIX,UAAUmB,WAAd,EAA2B;AACzBR,cAAES,YAAF,CAAe,OAAf,EAAwB,KAAKpB,UAAUmB,WAAvC;AACD;AACF;;AAED,eAAOE,eAAP,CAAuBC,MAAvB,EAA+B;AAC7B,cAAIvN,WAAW8E,OAAO0I,IAAP,CAAYC,SAAZ,CAAsBF,MAAtB,EAA8B5C,IAA9B,CAAmCnG,MAAMA,GAAGwI,SAAH,IAAgB,UAAzD,CAAf;AACA,cAAI,CAAChN,QAAL,EAAe;AACf,cAAIqB,OAAOrB,SAAS0N,EAApB;AACA,cAAI,CAACrM,IAAL,EAAW;AACX,cAAIsM,gBAAgBjJ,SAASC,UAAT,CAAoB3E,SAAS2L,OAA7B,EAAsC,IAAtC,CAApB;AACA,6EAAgB/J,SAAhB,CAA0BP,IAA1B,IAAkCsM,aAAlC;;AAEA,iBAAO7I,OAAOC,kBAAP,CAA0B4I,aAA1B,EAAyC,aAAatM,IAAtD,EAA4D0B,IAA5D,CAAkE,MAAM1B,IAAxE,CAAP;AACD;;AAvjBkC;;yBAAhBM,e;;;AA6jBrB,+EAAsB,IAAtB","file":"component-loader.js","sourcesContent":["import scriptManager from  \"src/client/script-manager.js\";\nimport files from \"../files.js\"\n\n// store promises of loaded and currently loading templates\nif (!self.lively4loadingPromises) {\n  // WARNING: only used by loadUnresolved and not loadByName\n  self.lively4loadingPromises = {} // just to be on the save side....\n}\nexport var loadingPromises = self.lively4loadingPromises;\n\n// #MetaNote #UserCase this is an example for preserving module internal state while reloading a module\nvar _templates;\nvar _prototypes;\nvar _proxies;\n\nvar _templatePaths;\nvar _templatePathsCache;\nvar _templatePathsCacheTime;\nvar _templateFirstLoadTimes = {}\n\nvar _loggingEnabled = false\nvar _log = function(...args) {\n  if (_loggingEnabled) {\n    console.log(\"ComponentLoader \",...args)\n  }\n}\n\nvar _timeEnabled = false\nvar _timeLog = function(name, msg, ...args) {\n  if (_timeEnabled) {\n    console.log(\"[component] \" + name + \" \" + Math.round(performance.now() - _templateFirstLoadTimes[name]) +\"ms \"+ msg, ...args)\n  }\n}\n\n\n// for compatibility\nexport function register(componentName, template, prototype) {\n  return ComponentLoader.register(componentName, template, prototype);\n}\n\n/* #FutureWork should interactive state change of \"(module) global\" state be preserved while reloading / developing modules\n    ComponentLoader.foo = 3\n    ComponentLoader.foo\n\n#Discussion\n\npro) expected in Smalltalk-like developent and live-programmning experience\ncontra) gap between development-time and runtime (those manualy changes could make something work that without it won't...)\n\nsynthese) if modules and classes are also objects that can have run-time-specific state they should be migrated the same as objects. \n\n*/\n\n\nexport default class ComponentLoader {\n\n  static get templates() {\n    if (!_templates) _templates = {};\n    return _templates;\n  }\n\n  static get prototypes() {\n    if (!_prototypes) _prototypes = {};\n    return _prototypes;\n  }\n\n  static get proxies() {\n     if (!_proxies) _proxies = {};\n    return _proxies;\n  }\n\n  static updatePrototype(aClass, moduleName) {    \n    var componentName = moduleName.replace(/.*\\//,\"\").replace(/\\.js$/,\"\")\n    if (componentName && this.prototypes[componentName]) {\n      this.prototypes[componentName] = aClass\n      this.proxies[componentName].__proto__ = aClass\n      this.proxies[componentName].prototype.__proto__ = aClass.prototype\n    }\n  }\n\n  static async onCreatedCallback(object, componentName) {\n    _log('onCreatedCallback ' + componentName)\n      \n    // attach lively4scripts from the shadow root to this\n    scriptManager.attachScriptsFromShadowDOM(object);\n    \n    // attach lively4script from the instance\n    scriptManager.findLively4Script(object, false);\n\n    if (ComponentLoader.prototypes[componentName].createdCallback) {\n      ComponentLoader.prototypes[componentName].createdCallback.call(object);\n    }\n\n    // load any unknown elements, which this component might introduce\n    _log('START onCreatedCallback loadUnresolved ' + componentName)\n            \n    this._livelyLoading = Promise.resolve()\n    this._livelyLoadingDep =  ComponentLoader.loadUnresolved(\n        object, true, \"onCreated \" + componentName, false).then((args) => {\n      _log('FINISHED onCreatedCallback loadUnresolved ' + componentName)\n\n      // lively.fillTemplateStyles(object.shadowRoot, \"source: \" + componentName).then(() => {\n        // call the initialize script, if it exists\n      \n        if (typeof object.initialize === \"function\") {\n          object.initialize();\n        }\n        _log(\"dispatch created \" +componentName )\n        _log(\"Identitity: \" + (window.LastRegistered === object))\n        \n      // })\n      if (_templateFirstLoadTimes[componentName]) {\n        _log('Component first load time: ' + ((performance.now() - _templateFirstLoadTimes[componentName]) / 1000).toFixed(3) + \"s \" + componentName + \" \")\n        _templateFirstLoadTimes[componentName] = null;\n      }\n      _log(\"[component loader] fire created \" + componentName)\n      object._lively4created = Date.now()\n      object.dispatchEvent(new Event(\"created\")); // when we wait on other unresolved components, we can run into cyclic dependencies.... #Cyclic\n    }).catch( e => {\n      console.error(e); \n      return e\n    });\n    this._livelyLoadingDep\n  }\n  \n  static async onAttachedCallback(object, componentName) {\n    \n    if (this._livelyLoading) {\n      await this._livelyLoading // should we provicde this robustness here? Or should these be more pure metal...\n    }\n    \n    _log(\"onAttachedCallback \" + componentName)\n    \n    if (object.attachedCallback && \n      ComponentLoader.proxies[componentName].attachedCallback != object.attachedCallback) {\n        object.attachedCallback.call(object);\n    } else if (ComponentLoader.prototypes[componentName].attachedCallback) {\n      ComponentLoader.prototypes[componentName].attachedCallback.call(object);\n    }\n  }\n  \n  static async onDetachedCallback(object, componentName) {\n    \n    if (this._livelyLoading) {\n      await this._livelyLoading\n    }\n    \n    if (object.detachedCallback \n    && ComponentLoader.proxies[componentName].detachedCallback != object.detachedCallback) {\n      object.detachedCallback.call(object);\n    } else if (ComponentLoader.prototypes[componentName].detachedCallback) {\n      ComponentLoader.prototypes[componentName].detachedCallback.call(object);\n    }\n  }\n  \n  static applyTemplate(element, componentName) {\n    if (!element.shadowRoot) {\n      element.attachShadow({mode: 'open'});\n    }\n    \n    var template = this.templates[componentName]\n    if (template) {\n      var fragment = template.cloneNode(true)\n      fragment.childNodes.forEach(ea => {\n        var clone = document.importNode(ea, true)\n        element.shadowRoot.appendChild(clone)\n      })\n    }\n  }\n  \n  // this function registers a custom element,\n  // it is called from the bootstap code in the component templates\n  static async register(componentName, template, aClass) { \n    _log(\"[component loader] register \" + componentName)\n    var proxy\n    \n    // For reflection and debugging\n    this.templates[componentName] = template;\n    this.prototypes[componentName] = aClass;\n    \n    if (template) {\n      _log(\"[component loader] register fillTemplateStyles: \" + componentName)\n      await lively.fillTemplateStyles(template, \"source: \" + componentName)\n    }\n    \n    if (!this.proxies[componentName]) {\n      proxy = class extends HTMLElement {\n        static get name() {\n          return componentName\n        } \n        \n        get _lively4version() {\n          return 2\n        }\n        \n        constructor() {\n          _log(\"[component loader] Proxy Constructor \" + componentName)\n    \n          super(); // always call super() first in the constructor.\n          \n          ComponentLoader.applyTemplate(this, componentName)\n          ComponentLoader.onCreatedCallback(this, componentName)\n        }\n\n        connectedCallback( args) {\n          _log('connectedCallback ' + componentName )\n          \n          \n          // return super.connectedCallback(...args)\n          // super seams to bind early?\n          ComponentLoader.onAttachedCallback(this, componentName)\n          if (this.constructor.__proto__.prototype.connectedCallback) {\n            return this.constructor.__proto__.prototype.connectedCallback.apply(this, args)\n          }\n        }\n        disconnectedCallback(...args) {\n          _log('diconnectedCallback ' + componentName )\n          \n          // return super.disconnectedCallback(...args)\n          ComponentLoader.onDetachedCallback(this, componentName)\n          if (this.constructor.__proto__.prototype.disconnectedCallback) {\n            return this.constructor.__proto__.prototype.disconnectedCallback.apply(this, args)\n          }\n        }\n\n        adoptedCallback(...args)\t{\n          _log('adoptedCallback ' + componentName )\n          // return super.adoptedCallback(...args)\n          if (this.constructor.__proto__.prototype.adoptedCallback) {\n            return this.constructor.__proto__.prototype.adoptedCallback.apply(this, args)  \n          }\n        }\n      }\n      // set the prototype of the proxy the first time\n      // #Idea: use \"extemds aClass\" ?\n      //       proxy.__proto__ = aClass\n      //       proxy.prototype.__proto__ = aClass.prototype\n      \n      _log(\"[component loader] define component: \" + componentName)\n      window.customElements.define(componentName, proxy); // #WebComponent #Magic\n      this.proxies[componentName] =  proxy\n    } else {\n      proxy = this.proxies[componentName] \n      \n    }\n    \n    // change the prototype of the proxy\n    proxy.__proto__ = aClass\n    proxy.prototype.__proto__ = aClass.prototype\n  }\n\n  // this function loads all unregistered elements, starts looking in lookupRoot,\n  // if lookupRoot is not set, it looks in the whole document.body,\n  // if deep is set, it also looks into shadow roots\n  static loadUnresolved(lookupRoot, deep, debuggingHint, withChildren=false, withyourself=false) {\n    lookupRoot = lookupRoot || document.body;\n\n    var selector = \":not(:defined)\";\n    var unresolved = []\n    \n    // check if lookupRoot is unresolved\n    \n    // loot at me\n    if (withyourself && lookupRoot.parentElement) {\n      var unresolvedSiblingsAndMe = Array.from(lookupRoot.parentElement.querySelectorAll(selector));\n      if (unresolvedSiblingsAndMe.includes(lookupRoot)) {\n        unresolved.push(lookupRoot)\n      }\n    }\n    // find all unresolved elements looking downwards from lookupRoot\n    \n    // look at my children? \n    if (withChildren) {\n      unresolved = unresolved.concat(Array.from(lookupRoot.querySelectorAll(selector)));\n    }\n    \n    // look into the shadow?\n    if (deep) {\n      var deepUnresolved = findUnresolvedDeep(lookupRoot);\n      unresolved = unresolved.concat(deepUnresolved);\n    }\n\n    function findUnresolvedDeep(root) {\n      var shadow = root.shadowRoot;\n      if (!shadow) {\n        return [];\n      }\n\n      var result = Array.from(shadow.querySelectorAll(selector));\n\n      Array.from(shadow.children).forEach((child) => {\n        result = result.concat(findUnresolvedDeep(child));\n      });\n\n      return result;\n    }\n\n    // helper set to filter for unique tags\n    var unique = new Set();\n    \n    \n    var __debugOpenPromisedComponents = new Set()\n    \n    var promises = unresolved.filter((el) => {\n      // filter for unique tag names\n      if (!el.nodeName || el.nodeName.toLowerCase() == \"undefined\") return false;\n      var name = el.nodeName.toLowerCase();\n      return !unique.has(name) && unique.add(name);\n    })\n    .map((el) => {\n      var name = el.nodeName.toLowerCase();\n      if (loadingPromises[name]) {\n        // the loading was already triggered\n        return loadingPromises[name];\n      }\n\n      __debugOpenPromisedComponents.add(name)\n      // create a promise that resolves once el is completely created\n      var createdPromise = new Promise((resolve, reject) => {\n        if (el._lively4created) {\n          return resolve({target: el})\n        }\n        el.addEventListener(\"created\", (evt) => {\n          evt.stopPropagation();\n          __debugOpenPromisedComponents.delete(name)\n          resolve(evt);\n        });\n      });\n\n      // trigger loading the template of the unresolved element\n      loadingPromises[name] = createdPromise;\n      \n      loadingPromises[name].name = \"[Loaded \" +name + \" \" + Date.now() + \"]\"\n      \n      this.loadByName(name).then((didInsertTag) => {\n        if(!didInsertTag) {\n          console.error(\"Component Loader\", `Template ${name} could not be loaded.`, 3, null, \"yellow\");\n          delete loadingPromises[name];\n          return null;\n        }\n      })\n      \n\n      return createdPromise;\n    })\n    .filter(promise => promise != null);\n    \n    _log(\"findUnresolvedDeep components: \", promises)\n\n    // return a promise that resolves once all unresolved elements from the unresolved-array\n    // are completely created\n    return new Promise( (resolve, reject) => {\n      \n      // fuck promises!!!! I hate them. There is one promise pending.... but just does not fail. It just hangs around doing nothing! #Jens\n      promises.forEach( p => {\n        p.then( r => {\n          p.finished = true;\n        }, er => console.log(\"ERROR in promise: \" + p.name))\n        \n      })\n      window.setTimeout( function() {\n        var unfinished = false;\n        var unfinishedPromise;\n        promises.forEach( p => {\n          if (!p.finished) {\n            unfinishedPromise = p\n            unfinished = true;\n          }\n        })\n        if (unfinished) {\n          resolve(\"timeout\") // \"(if) the fuel gauge breaks, call maintenance. If they are not there in 20 minutes, fuck it.\"\n          console.warn(\"Timout due to unresolved promises, while loading \" + unfinishedPromise.name + \" context: \" + debuggingHint, \" unresolved: \" + Array.from(__debugOpenPromisedComponents).join(\", \") )\n        }\n      }, 20 * 1000)\n\n      Promise.all(promises).then( result => resolve(), err => {\n          _log(\"ERROR loading component \", err)\n      })\n    })\n  }\n  \n  \n  static resetTemplatePathCache() {\n    _templatePathsCache = undefined\n    _templatePathsCacheTime = undefined\n  }\n\n  static async getTemplatePathContent(path) {\n    \n    if (!_templatePathsCache) {\n      _templatePathsCache = {}\n      _templatePathsCacheTime = {}\n    }\n    \n    let cacheInvalidationTime = 60 * 5 * 1000;\n    let cached = _templatePathsCache[path]\n    let time = _templatePathsCacheTime[path]\n    if (cached && ((Date.now() - time) < cacheInvalidationTime)) return cached\n    \n    let resultPromise =  fetch(path, { method: 'OPTIONS' }).then(resp => {\n      if (resp.status !== 200) return undefined\n      return resp.json()\n    });\n    _templatePathsCacheTime[path] = Date.now()\n    _templatePathsCache[path] = new Promise(async (resolve, reject) => {\n      let result = await resultPromise;\n      if (result) {\n          resolve({contents: result.contents});\n        return cached \n      }\n    })\n    return resultPromise \n  }\n  \n  static getTemplatePaths() {\n    if (!_templatePaths) {\n      _templatePaths = [\n        lively4url + '/templates/',\n        lively4url + '/src/components/',\n        lively4url + '/src/components/widgets/',\n        lively4url + '/src/components/tools/',\n        lively4url + '/src/components/halo/',\n        lively4url + '/src/components/demo/',\n        lively4url + '/src/components/draft/',\n        lively4url + '/src/components/d3/',\n        lively4url + '/src/client/vivide/components/',\n        lively4url + '/src/client/reactive/components/rewritten/',\n        lively4url + '/src/client/reactive/components/basic/',\n        lively4url + '/src/client/triples/components/',\n        lively4url + '/src/client/pen-editor/components/',\n        lively4url + '/src/babylonian-programming-editor/',\n        lively4url + '/src/babylonian-programming-editor/demos/canvas/',\n        lively4url + '/src/babylonian-programming-editor/demos/todo/',\n      ]; // default\n    } \n    return _templatePaths\n  }\n\n  static addTemplatePath(path) {\n    if (!lively.files.isURL(path)) {\n      path = lively.location.href.replace(/[^/]*$/, path)\n    }\n    var all = this.getTemplatePaths()\n    if (!all.includes(path)) {\n      all.push(path)\n    }\n  }\n\n  static async searchTemplateFilename(filename) {\n    \n    var templatePaths =  this.getTemplatePaths()\n    let templateDir = undefined;          \n  \n    // #IDEA, using HTTP HEAD could be faster, but is not always implemented... as ource OPTIONS is neigher\n    // this method avoids the 404 in the console.log\n    \n    \n    // the OPTIONS request seems to break karma... waits to long..\n    if (!window.__karma__) { \n      for(templateDir of templatePaths) {\n        try {\n          var stats = await this.getTemplatePathContent(templateDir);\n          var found = stats.contents.find(ea => ea.name == filename)\n        } catch(e) {\n          _log(\"searchTemplateFilename: could not get stats of  \" + filename + \" ERROR: \", e)\n          found = null\n        }\n        if (found) {\n          return templateDir + filename\n        }\n      }\n\n    } else {\n      // so the server did not understand OPTIONS, so lets ask for the files directly\n      if (!found) {\n        for(templateDir of templatePaths) {\n          found = await fetch(templateDir + filename, { method: 'GET' }) // #TODO use HEAD, after implementing it in lively4-server\n            .then(resp => resp.status == 200); \n          if (found) {\n            return templateDir + filename\n          }  \n        } \n      }      \n    }\n    return undefined\n  }\n  \n  // #TODO use loadingPromises here... #Issue, as we used it in livley.js directly, we loaded lively-window in parralel... \n  static async loadByName(name) {\n    _log(\"[component loader] loadByName \" + name)\n    \n    _templateFirstLoadTimes[name] = performance.now()\n    var modUrl = await this.searchTemplateFilename(name + '.js')\n    if (!modUrl) {\n      throw new Error(\"Could not find template for \" + name)\n    }\n    _timeLog(name, \" found module filename\")\n    \n    var templateURL = await this.searchTemplateFilename(name + '.html')\n    _timeLog(name, \" found template filename\")\n    \n    // Check  if the template will be loadable (this would e.g. fail if we were offline without cache)\n    // We have to check this before inserting the link tag because otherwise we will have\n    // the link tag even though the template was not properly loaded\n    try {\n      if(files.exists(modUrl)) {\n        _timeLog(name, \"module exists\")\n        var mod = await System.import(modUrl)\n        _timeLog(name, \"module loaded\")\n        var aClass = mod.default\n        \n        if (templateURL) {\n          if(files.exists(templateURL)) {\n            _timeLog(name, \"template exits\")\n            var templateSource = await fetch(templateURL).then(r => r.text());\n            _timeLog(name, \"template loaded\")\n            var div = document.createElement(\"div\")\n            div.innerHTML = templateSource\n            var template = div.querySelector(\"template\")\n            template.remove()\n          }          \n        }\n        this.register(name, template.content, aClass)\n        _timeLog(name, \"registered\")\n        return true;\n      } else {\n        return false;\n      }\n    } catch (error) {\n      return false;\n    }\n  }\n  \n  // #TODO refactor this to use lively.create(), because this is not enough... \n  static createComponent(tagString) {\n    var comp = document.createElement(tagString);\n    return comp;\n  }\n  \n  static openIn(parent, component, beginning) {\n    var created = false;\n    var compPromise = new Promise((resolve) => {\n      if (component._lively4created ) return resolve(component)\n      \n      component.addEventListener(\"created\", (e) => {\n        if (e.composedPath()[0] !== component) {\n          _log(\"[components] ingnore and stop created event from child \" + e.composedPath[0].tagName);\n          return \n        }\n        if (created) {\n          // #Just check... we had this issue before\n          throw new Error(\"[compontents] created called twice for \" + component)\n        } else {\n          created = true\n          e.stopPropagation();\n          resolve(e.target);\n        }\n        \n      });\n    });\n\n    if (beginning) {\n      parent.insertBefore(component, parent.firstChild);\n    } else {\n      parent.appendChild(component);\n    }\n    this.loadUnresolved(component, true, \"openIn \" + component, true, true);\n    return compPromise;\n  }\n\n  static openInBody(component) {\n    return this.openIn(document.body, component, true);\n  }\n\n  static async openInWindow(component, pos) {\n    // this will call the window's createdCallback before\n    // we append the child, if the window template is already\n    // loaded\n    var w = this.createComponent(\"lively-window\");\n    if (pos) {\n      lively.setPosition(w, pos);\n    }\n    w.style.opacity = 0.2\n    w.appendChild(component);\n\n    this.openInBody(w);\n\n    if (!component.localName.match(/-/)) {\n      return w // standard elments... which are no components\n    }\n    \n    // therefore, we need to call loadUnresolved again after\n    // adding the child, so that it finds it and resolves it,\n    // if it is currently unresolved\n    var windowPromise = new Promise((resolve) => {\n      this.loadUnresolved(document.body, true, \"openInWindow \" + component).then(() => {\n        w.style.opacity = 1.0\n        this.ensureWindowTitle(component, w)\n\n        resolve(w);\n      });\n    });\n\n    return windowPromise;\n  }\n  \n  static ensureWindowTitle(component, w) {\n    if (component.windowTitle) {\n      w.setAttribute('title', '' + component.windowTitle);\n    }\n  }  \n\n  static reloadComponent(source) {\n    var template = lively.html.parseHTML(source).find(ea => ea.localName == \"template\");\n    if (!template) return;\n    var name = template.id;\n    if (!name) return;\n    var templateClone = document.importNode(template.content, true);\n    ComponentLoader.templates[name] = templateClone;\n    \n    return lively.fillTemplateStyles(templateClone, \"source: \" + name).then( () => name);\n  }\n  \n}\n\n\n\n_templatePathsCache = null\n\n"]}