{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tabs/src/client/vivide/components/vivide-view.js"],"names":["Morph","uuid","without","getTempKeyFor","getObjectFor","flatMap","VivideObject","Script","WidgetChooser","getPreferredWidgetType","forest","viewConfig","has","get","length","model","properties","findAppropriateWidget","type","includes","VivideView","findViewWithId","id","context","document","body","lively","query","getIdForView","view","idAttribute","outportAttribute","scriptAttribute","widgetId","widgetSelector","forestToData","map","m","object","dataToForest","data","d","widget","input","_input","val","getAttribute","newId","setAttribute","outportTargets","ids","getJSONAttribute","call","findWorldContext","error","targets","setJSONAttribute","addOutportTarget","target","concat","removeOutportTarget","inportSources","Array","from","querySelectorAll","targetHull","hull","Set","addToHull","add","forEach","connectTo","removeConnectionTo","transmitDataToOutportTargets","dataToTransmit","newDataFromUpstream","reallyNotifyOutportTargets","stuffToTransmit","notifyOutportTargets","forestToDisplay","updateOutportTargets","getDataToTransmit","multiSelectionEnabled","getSelectedData","localName","undefined","selectionChanged","addDragInfoTo","evt","dt","dataTransfer","selection","setData","initialize","windowTitle","addEventListener","onExtentChanged","dragenter","dragover","dragleave","drop","myCurrentScript","scriptJSON","fromJSON","dataJSON","JSON","parse","childNodes","childNode","dispatchEvent","CustomEvent","preventDefault","_resetDropOverEffects","classList","hasSourceView","types","dropEffect","hasData","remove","shouldPreventPropagation","success","getData","sourceView","warn","stopPropagation","_myCurrentScript","script","toJSON","initDefaultScript","createDefaultScript","calculateOutputModel","updateWidget","getInputData","firstStep","getInitialStep","slice","processData","scriptGotUpdated","notify","innerHTML","getViewConfig","chosenWidgetType","create","setView","appendChild","display","createScriptEditor","viewWindow","findWindow","reference","tagName","pos","getGlobalBounds","topRight","scriptEditor","openComponentInWindow","setScript","livelyPrepareSave","json","stringify","e","console","livelyExample","exampleData","name","subclasses","livelyMigrate","other","livelyInspect","contentNode","inspector","livelyHalo","configureHalo","halo","style","outportContainer","item","createElement","setTarget","inportContainer","source","setSource"],"mappings":";;;;;;;;;AAAOA,W;;AACEC,U,UAAAA,I;AAAMC,a,UAAAA,O;AAASC,mB,UAAAA,a;AAAeC,kB,UAAAA,Y;AAAcC,a,UAAAA,O;;AAC9CC,kB;;AACAC,Y;;;;;;;;;;;AAHAP,gD;;;;;;;;;;;;;AAC8CK,kD;;;;;;;;;;;;;AAAdD,uD;;;;;;;;;;;;;AAAfD,wD;;;;;;;;;;;;;AAATD,kD;;;;;;;;;;;;;AAAND,+C;;;;;;;;;;;;;AACFK,uD;;;;;;;;;;;;;AACAC,iD;;;;;;;;;AAEP;;;AAGA,YAAMC,aAAN,CAAoB;AAClB,eAAOC,sBAAP,CAA8BC,MAA9B,EAAsCC,UAAtC,EAAkD;AAChD,cAAIA,WAAWC,GAAX,CAAe,QAAf,CAAJ,EAA8B;AAC5B,mBAAOD,WAAWE,GAAX,CAAe,QAAf,CAAP;AACD;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,cAAIH,UAAUA,OAAOI,MAAP,GAAgB,CAA9B,EAAiC;AAC/B;AACA,kBAAMC,QAAQL,OAAO,CAAP,CAAd;;AAEA,gBAAGK,MAAMC,UAAN,CAAiBJ,GAAjB,CAAqB,YAArB,KAAsC,OAAOG,MAAMC,UAAN,CAAiBH,GAAjB,CAAqB,YAArB,EAAmC,CAAnC,CAAP,KAAiD,QAA1F,EAAoG;AAClG,qBAAO,SAAP;AACD,aAFD,MAEO,IAAIE,MAAMC,UAAN,CAAiBJ,GAAjB,CAAqB,MAArB,CAAJ,EAAkC;AACvC,qBAAO,MAAP;AACD;AACF;AACD,iBAAO,MAAP;AACD;AACD,eAAOK,qBAAP,CAA6BP,MAA7B,EAAqCC,UAArC,EAAiD;AAC/C,gBAAMO,OAAO,KAAKT,sBAAL,CAA4BC,MAA5B,EAAoCC,UAApC,CAAb;;AAEA;AACA,cAAGO,KAAKC,QAAL,CAAc,GAAd,CAAH,EAAuB;AACrB,mBAAOD,IAAP;AACD;;AAED;AACA,iBAAQ,UAASA,IAAK,SAAtB;AACD;AAlCiB;;;;;;;;AAAdV,wD;;;;;;;AAqCS,YAAMY,UAAN,SAAyBpB,KAAzB,CAA+B;AAC5C,eAAOqB,cAAP,CAAsBC,EAAtB,EAA0BC,UAAQC,SAASC,IAA3C,EAAiD;AAC/C,iBAAOC,OAAOC,KAAP,CAAaJ,OAAb,EAAuB,8BAA6BD,EAAG,GAAvD,CAAP;AACD;;AAED,eAAOM,YAAP,CAAoBC,IAApB,EAA0B;AACxB,iBAAOA,KAAKP,EAAZ;AACD;;AAED,mBAAWQ,WAAX,GAAyB;AAAE,iBAAO,gBAAP;AAA0B;;AAErD,mBAAWC,gBAAX,GAA8B;AAAE,iBAAO,gBAAP;AAA0B;;AAE1D,mBAAWC,eAAX,GAA6B;AAAE,iBAAO,eAAP;AAAyB;;AAExD,mBAAWC,QAAX,GAAsB;AAAE,iBAAO,QAAP;AAAkB;;AAE1C,mBAAWC,cAAX,GAA4B;AAAE,iBAAO,MAAM,KAAKD,QAAlB;AAA6B;;AAE3D,eAAOE,YAAP,CAAoBpB,KAApB,EAA2B;AACzB,iBAAOA,MAAMqB,GAAN,CAAUC,KAAKA,EAAEC,MAAjB,CAAP;AACD;;AAED;AACA,eAAOC,YAAP,CAAoBC,IAApB,EAA0B;AACxB,iBAAOA,KAAKJ,GAAL,CAASK,KAAK,IAAInC,YAAJ,CAAiBmC,CAAjB,CAAd,CAAP;AACD;;AAED,YAAIC,MAAJ,GAAa;AAAE,iBAAO,KAAK7B,GAAL,CAASO,WAAWc,cAApB,CAAP;AAA6C;;AAE5D,YAAIS,KAAJ,GAAY;AAAE,iBAAO,KAAKC,MAAL,KAAgB,KAAKA,MAAL,GAAc,EAA9B,CAAP;AAA2C;AACzD,YAAID,KAAJ,CAAUE,GAAV,EAAe;AAAE,iBAAO,KAAKD,MAAL,GAAcC,GAArB;AAA2B;;AAE5C,YAAIvB,EAAJ,GAAS;AACP,cAAIA,KAAK,KAAKwB,YAAL,CAAkB1B,WAAWU,WAA7B,CAAT;AACA,cAAGR,EAAH,EAAO;AAAE,mBAAOA,EAAP;AAAY;;AAErB;AACA,cAAIyB,QAAQ,iBAAiB9C,MAA7B;AACA,eAAK+C,YAAL,CAAkB5B,WAAWU,WAA7B,EAA0CiB,KAA1C;AACA,iBAAOA,KAAP;AACD;;AAED,YAAIE,cAAJ,GAAqB;AACnB,cAAIC,MAAM,KAAKC,gBAAL,CAAsB/B,WAAWW,gBAAjC,CAAV;AACA,cAAGmB,GAAH,EAAQ;AACN,mBAAO7C,QAAQ+C,IAAR,CAAaF,GAAb,EAAkB5B,MAAM;AAC7B,kBAAIO,OAAOT,WAAWC,cAAX,CAA0BC,EAA1B,EAA8BI,OAAO2B,gBAAP,CAAwB,IAAxB,CAA9B,CAAX;AACA,kBAAGxB,SAAS,IAAZ,EAAkB;AAChBH,uBAAO4B,KAAP,CAAa,0BAA0BhC,EAAvC;AACA,uBAAO,EAAP;AACD;AACD,qBAAO,CAACO,IAAD,CAAP;AACD,aAPM,CAAP;AAQD;;AAED,iBAAO,KAAKoB,cAAL,GAAsB,EAA7B;AACD;;AAED,YAAIA,cAAJ,CAAmBM,OAAnB,EAA4B;AAC1B,iBAAO,KAAKC,gBAAL,CACLpC,WAAWW,gBADN,EAELwB,QAAQnB,GAAR,CAAYhB,WAAWQ,YAAvB,CAFK,CAAP;AAID;;AAED6B,yBAAiBC,MAAjB,EAAyB;AACvB,iBAAO,KAAKT,cAAL,GAAsB,KAAKA,cAAL,CAAoBU,MAApB,CAA2BD,MAA3B,CAA7B;AACD;;AAEDE,4BAAoBF,MAApB,EAA4B;AAC1B,iBAAO,KAAKT,cAAL,GAAsB/C,QAAQkD,IAAR,CAAa,KAAKH,cAAlB,EAAkCS,MAAlC,CAA7B;AACD;;AAED,YAAIG,aAAJ,GAAoB;AAClB,iBAAOC,MAAMC,IAAN,CAAWvC,SAASC,IAAT,CAAcuC,gBAAd,CAAgC,eAAc5C,WAAWW,gBAAiB,KAAI,KAAKT,EAAG,GAAtF,CAAX,CAAP;AACD;;AAED,YAAI2C,UAAJ,GAAiB;AACf,cAAIC,OAAO,IAAIC,GAAJ,EAAX;;AAEA,mBAASC,SAAT,CAAmBvC,IAAnB,EAAyB;AACvB,gBAAGA,QAAQ,CAACqC,KAAKtD,GAAL,CAASiB,IAAT,CAAZ,EAA4B;AAC1BqC,mBAAKG,GAAL,CAASxC,IAAT;AACAA,mBAAKoB,cAAL,CAAoBqB,OAApB,CAA4BF,SAA5B;AACD;AACF;AACDA,oBAAU,IAAV;;AAEA,iBAAON,MAAMC,IAAN,CAAWG,IAAX,CAAP;AACD;;AAEDK,kBAAUb,MAAV,EAAkB;AAChB;AACA,eAAKD,gBAAL,CAAsBC,MAAtB;AACD;AACDc,2BAAmBd,MAAnB,EAA2B;AACzB,eAAKE,mBAAL,CAAyBF,MAAzB;AACD;;AAEDe,qCAA6BC,cAA7B,EAA6C;AAC3C,eAAKzB,cAAL,CAAoBqB,OAApB,CAA4BZ,UAAUA,OAAOiB,mBAAP,CAA2BD,cAA3B,CAAtC;AACD;AACDE,mCAA2BC,eAA3B,EAA4C;AAC1C,eAAKJ,4BAAL,CAAkCrD,WAAWe,YAAX,CAAwB0C,eAAxB,CAAlC;AACD;AACDC,+BAAuB;AACrB;AACA,eAAKF,0BAAL,CAAgC,KAAKG,eAArC;AACD;;AAEDC,+BAAuB;AACrB,gBAAMN,iBAAiB,KAAKO,iBAAL,EAAvB;AACA,cAAGP,cAAH,EAAmB;AACjB;AACA,iBAAKD,4BAAL,CAAkCC,cAAlC;AACD;AACF;;AAEDO,4BAAoB;AAChB;AACF,cAAG,KAAKvC,MAAL,IAAe,KAAKA,MAAL,CAAYwC,qBAA9B,EAAqD;AACnD,mBAAO,KAAKC,eAAL,EAAP;AACD,WAFD,MAEO,IAAI,KAAKzC,MAAL,IAAe,KAAKA,MAAL,CAAY0C,SAAZ,KAA0B,oBAA7C,EAAmE;AACxE,mBAAO,KAAKD,eAAL,EAAP;AACD,WAFM,MAEA;AACL;AACA,mBAAO7E,aAAa6B,YAAb,CAA0B,KAAK4C,eAA/B,CAAP;AACD;AACF;;AAEDI,0BAAkB;AAChB,gBAAMzC,SAAS,KAAKA,MAApB;AACA,cAAGA,MAAH,EAAW;AACT,mBAAOA,OAAOyC,eAAP,EAAP;AACD;AACD,iBAAOE,SAAP;AACD;;AAEDC,2BAAmB;AACjB,eAAKN,oBAAL;AACD;;AAEDO,sBAAcC,GAAd,EAAmB;AACjB,gBAAMC,KAAKD,IAAIE,YAAf;AACA;AACA,cAAIC,YAAY,KAAKV,iBAAL,EAAhB;AACA,cAAGU,SAAH,EAAc;AACZ;AACAF,eAAGG,OAAH,CAAW,mBAAX,EAAgCzF,cAAcwF,SAAd,CAAhC;AACD,WAHD,MAGO;AACLjE,mBAAO4B,KAAP,CAAa,yBAAb;AACD;;AAEDmC,aAAGG,OAAH,CAAW,QAAX,EAAqB,EAArB;AACAH,aAAGG,OAAH,CAAW,oBAAX,EAAiCzF,cAAc,IAAd,CAAjC;AACD;;AAED,cAAM0F,UAAN,GAAmB;AACjB,eAAKC,WAAL,GAAmB,YAAnB;AACA,eAAKC,gBAAL,CAAsB,gBAAtB,EAAwCP,OAAO,KAAKQ,eAAL,CAAqBR,GAArB,CAA/C;;AAEA,eAAKO,gBAAL,CAAsB,WAAtB,EAAmCP,OAAO,KAAKS,SAAL,CAAeT,GAAf,CAA1C,EAA+D,KAA/D;AACA,eAAKO,gBAAL,CAAsB,UAAtB,EAAkCP,OAAO,KAAKU,QAAL,CAAcV,GAAd,CAAzC,EAA6D,KAA7D;AACA,eAAKO,gBAAL,CAAsB,WAAtB,EAAmCP,OAAO,KAAKW,SAAL,CAAeX,GAAf,CAA1C,EAA+D,KAA/D;AACA,eAAKO,gBAAL,CAAsB,MAAtB,EAA8BP,OAAO,KAAKY,IAAL,CAAUZ,GAAV,CAArC,EAAqD,KAArD;;AAEA;;AAEA;AACA,cAAI,CAAC,KAAKa,eAAV,EAA2B;AACzB,gBAAIC,aAAa,KAAKxD,YAAL,CAAkB,eAAlB,CAAjB;AACA,gBAAIwD,UAAJ,EAAgB;AACd,mBAAKD,eAAL,GAAuB,MAAM9F,OAAOgG,QAAP,CAAgBD,UAAhB,EAA4B,IAA5B,CAA7B;AACD,aAFD,MAEO;AACL;AACA;AACD;;AAED,gBAAIE,WAAW,KAAK1D,YAAL,CAAkB,aAAlB,CAAf;AACA,gBAAI0D,QAAJ,EAAc;AACZ;AACA,kBAAIhE,OAAOiE,KAAKC,KAAL,CAAWF,QAAX,CAAX;AACA,mBAAK7B,mBAAL,CAAyBnC,IAAzB;AACD;AACF;AACF;;AAEDwD,0BAAkB;AAChB,eAAKW,UAAL,CAAgBrC,OAAhB,CAAwBsC,aAAa;AACnC,gBAAGA,UAAUC,aAAb,EAA4B;AAC1BD,wBAAUC,aAAV,CAAwB,IAAIC,WAAJ,CAAgB,gBAAhB,CAAxB;AACD;AACF,WAJD;AAKD;;AAEDb,kBAAUT,GAAV,EAAe,CAAE;AACjBU,iBAASV,GAAT,EAAc;AACZA,cAAIuB,cAAJ;;AAEA,eAAKC,qBAAL;AACA,eAAKC,SAAL,CAAe5C,GAAf,CAAmB,MAAnB;;AAEA,gBAAMoB,KAAKD,IAAIE,YAAf;;AAEA,cAAIwB,gBAAgBzB,GAAG0B,KAAH,CAAShG,QAAT,CAAkB,QAAlB,KAA+BsE,GAAG0B,KAAH,CAAShG,QAAT,CAAkB,oBAAlB,CAAnD;AACA,cAAG+F,aAAH,EAAkB;AAChB;AACA;AACA;AACA,iBAAKD,SAAL,CAAe5C,GAAf,CAAmB,aAAnB;AACAoB,eAAG2B,UAAH,GAAgB,MAAhB;;AAEA;AACD;;AAED,cAAIC,UAAU5B,GAAG0B,KAAH,CAAShG,QAAT,CAAkB,mBAAlB,CAAd;AACA,cAAGkG,OAAH,EAAY;AACV,iBAAKJ,SAAL,CAAe5C,GAAf,CAAmB,aAAnB;AACAoB,eAAG2B,UAAH,GAAgB,MAAhB;;AAEA;AACD;;AAED,eAAKH,SAAL,CAAe5C,GAAf,CAAmB,aAAnB;AACD;AACD8B,kBAAUX,GAAV,EAAe;AACb,eAAKwB,qBAAL;AACD;AACDA,gCAAwB;AACtB,eAAKC,SAAL,CAAeK,MAAf,CAAsB,MAAtB;AACA,eAAKL,SAAL,CAAeK,MAAf,CAAsB,aAAtB;AACA,eAAKL,SAAL,CAAeK,MAAf,CAAsB,aAAtB;AACD;AACDlB,aAAKZ,GAAL,EAAU;AACR,eAAKwB,qBAAL;;AAEA,cAAIO,2BAA2B,KAA/B;;AAEA,gBAAM9B,KAAKD,IAAIE,YAAf;AACA,cAAID,GAAG0B,KAAH,CAAShG,QAAT,CAAkB,mBAAlB,CAAJ,EAA4C;AAC1CO,mBAAO8F,OAAP,CAAe,WAAf;;AAEA,kBAAMhF,OAAOpC,aAAaqF,GAAGgC,OAAH,CAAW,mBAAX,CAAb,CAAb;AACA,iBAAK9C,mBAAL,CAAyBnC,IAAzB;;AAEA+E,uCAA2B,IAA3B;AACD;;AAED,cAAI9B,GAAG0B,KAAH,CAAShG,QAAT,CAAkB,QAAlB,KAA+BsE,GAAG0B,KAAH,CAAShG,QAAT,CAAkB,oBAAlB,CAAnC,EAA4E;AAC1EO,mBAAO8F,OAAP,CAAe,aAAf;;AAEA,kBAAME,aAAatH,aAAaqF,GAAGgC,OAAH,CAAW,oBAAX,CAAb,CAAnB;;AAEA,gBAAG,KAAKxD,UAAL,CAAgB9C,QAAhB,CAAyBuG,UAAzB,CAAH,EAAyC;AACvChG,qBAAOiG,IAAP,CAAY,sBAAZ,EAAoC,gCAApC;AACD,aAFD,MAEO;AACLD,yBAAWnD,SAAX,CAAqB,IAArB;AACD;;AAEDgD,uCAA2B,IAA3B;AACD;;AAED,cAAGA,wBAAH,EAA6B;AAC3B/B,gBAAIoC,eAAJ;AACD;AACF;;AAED,YAAIvB,eAAJ,GAAsB;AAAE,iBAAO,KAAKwB,gBAAZ;AAA+B;AACvD,YAAIxB,eAAJ,CAAoByB,MAApB,EAA4B;AAC1B,eAAKD,gBAAL,GAAwBC,MAAxB;AACA,eAAK9E,YAAL,CAAkB5B,WAAWY,eAA7B,EAA8C8F,OAAOC,MAAP,EAA9C;AACD;;AAED,cAAMC,iBAAN,GAA0B;AACxB,gBAAMF,SAAS,MAAMvH,OAAO0H,mBAAP,CAA2B,IAA3B,CAArB;AACA,eAAK5B,eAAL,GAAuByB,MAAvB;AACA,iBAAOA,MAAP;AACA;AACD;;AAED,cAAMnD,mBAAN,CAA0BnC,IAA1B,EAAgC;AAC9B,eAAKG,KAAL,GAAaH,IAAb;;AAEA,gBAAM,KAAK0F,oBAAL,EAAN;AACA,gBAAM,KAAKC,YAAL,EAAN;AACA,eAAKnD,oBAAL;AACD;;AAEDoD,uBAAe;AACb,iBAAO,KAAKzF,KAAZ;AACD;;AAED,cAAMuF,oBAAN,GAA6B;AAC3B,gBAAMG,YAAY,KAAKhC,eAAL,CAAqBiC,cAArB,EAAlB;AACA,gBAAM9F,OAAO,KAAKG,KAAL,CAAW4F,KAAX,CAAiB,CAAjB,CAAb;;AAEA,eAAKxD,eAAL,GAAuB,MAAMsD,UAAUG,WAAV,CAAsBhG,IAAtB,CAA7B;AACD;;AAED;AACA,cAAMiG,gBAAN,GAAyB;AACvB;AACA;AACA/G,iBAAOgH,MAAP,CAAc,8BAAd;AACA,gBAAM,KAAKR,oBAAL,EAAN;AACA,gBAAM,KAAKC,YAAL,EAAN;AACA;AACA;AACA,eAAKnD,oBAAL;AACD;;AAED,cAAMmD,YAAN,GAAqB;AACnB,eAAKQ,SAAL,GAAiB,EAAjB;;AAEA,gBAAMhI,aAAa,MAAM,KAAK0F,eAAL,CAAqBuC,aAArB,EAAzB;AACA,gBAAMC,mBAAmBrI,cAAcS,qBAAd,CAAoC,KAAK8D,eAAzC,EAA0DpE,UAA1D,CAAzB;;AAEA,gBAAM+B,SAAS,yBAAMhB,OAAOoH,MAAP,CAAcD,gBAAd,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAf;AACAnG,iBAAOqG,OAAP,CAAe,IAAf;AACArG,iBAAOM,YAAP,CAAoB,IAApB,EAA0B5B,WAAWa,QAArC;AACA,eAAK+G,WAAL,CAAiBtG,MAAjB;AACA,gBAAMA,OAAOuG,OAAP,CAAe,KAAKlE,eAApB,EAAqCpE,UAArC,CAAN;AACD;;AAED,cAAMuI,kBAAN,GAA2B;AACzB,gBAAMC,aAAazH,OAAO0H,UAAP,CAAkB,IAAlB,CAAnB;AACA,gBAAMC,YAAYF,cAAcA,WAAWG,OAAX,KAAuB,eAArC,GACdH,UADc,GACD,IADjB;AAEA,gBAAMI,MAAM7H,OAAO8H,eAAP,CAAuBH,SAAvB,EAAkCI,QAAlC,EAAZ;;AAEA,gBAAMC,eAAe,MAAMhI,OAAOiI,qBAAP,CAA6B,sBAA7B,EAAqDJ,GAArD,CAA3B;AACAG,uBAAaX,OAAb,CAAqB,IAArB;AACA;AACA,gBAAMW,aAAaE,SAAb,CAAuB,KAAKvD,eAA5B,CAAN;;AAEA,iBAAOqD,YAAP;AACD;;AAEDG,4BAAoB;AAClB,eAAK7G,YAAL,CAAkB,eAAlB,EAAmC,KAAKqD,eAAL,CAAqB0B,MAArB,EAAnC;;AAEA,cAAI;AACF,gBAAI+B,OAAOrD,KAAKsD,SAAL,CAAe,KAAK3B,YAAL,EAAf,CAAX;AACA,iBAAKpF,YAAL,CAAkB,aAAlB,EAAiC8G,IAAjC;AACD,WAHD,CAGE,OAAME,CAAN,EAAS;AACTC,oBAAQtC,IAAR,CAAa,+BAAb,EAA8C,KAAKS,YAAL,EAA9C;AACD;AACF;;AAED,cAAM8B,aAAN,GAAsB;AACpB,gBAAMC,cAAc,CAClB;AACEC,kBAAM,QADR;AAEEC,wBAAW,CACT,EAACD,MAAM,OAAP,EADS,CAFb,EADkB,EAMlB;AACEA,kBAAM,MADR;AAEEC,wBAAW,CACT;AACED,oBAAM,YADR;AAEEC,0BAAW,CACT,EAACD,MAAM,OAAP,EADS,CAFb,EADS,EAMT;AACEA,oBAAM;AADR,aANS;AAFb,WANkB,EAkBlB;AACEA,kBAAM,aADR;AAEEC,wBAAW,CACT,EAACD,MAAM,SAAP,EADS,EAET,EAACA,MAAM,QAAP,EAFS,EAGT,EAACA,MAAM,OAAP,EAHS,CAFb,EAlBkB,CAApB;;AA2BA,gBAAM,KAAKpC,iBAAL,EAAN;AACA,gBAAM,KAAKkB,kBAAL,EAAN;AACA,gBAAM,KAAKvE,mBAAL,CAAyBwF,WAAzB,CAAN;AACD;;AAEDG,sBAAcC,KAAd,EAAqB;AACnB7I,iBAAOgH,MAAP,CAAc,qBAAd;AACA,eAAKrC,eAAL,GAAuBkE,MAAMlE,eAA7B;AACA,eAAKA,eAAL,CAAqB0C,OAArB,CAA6B,IAA7B;;AAEA,eAAKpE,mBAAL,CAAyB4F,MAAM5H,KAA/B;AACD;;AAED6H,sBAAcC,WAAd,EAA2BC,SAA3B,EAAsC;AACpC,cAAI,KAAKrE,eAAT,EAA0B;AACxBoE,wBAAYzB,WAAZ,CAAwB0B,UAAUzB,OAAV,CAAkB,KAAK5C,eAAvB,EAAwC,KAAxC,EAA+C,SAA/C,EAA0D,IAA1D,CAAxB;AACD;AACD,cAAI,KAAK1D,KAAT,EAAgB;AACd8H,wBAAYzB,WAAZ,CAAwB0B,UAAUzB,OAAV,CAAkB,KAAKtG,KAAvB,EAA8B,KAA9B,EAAqC,QAArC,EAA+C,IAA/C,CAAxB;AACD;;AAED,cAAIM,iBAAiB,KAAKA,cAA1B;AACA,cAAIA,cAAJ,EAAoB;AAClBwH,wBAAYzB,WAAZ,CAAwB0B,UAAUzB,OAAV,CAAkBhG,cAAlB,EAAkC,KAAlC,EAAyC,iBAAzC,EAA4D,IAA5D,CAAxB;AACD;AAGF;;AAGD0H,qBAAa;AACX,iBAAO;AACLC,0BAAcC,IAAd,EAAoB;AAClBA,mBAAKhK,GAAL,CAAS,gBAAT,EAA2BiK,KAA3B,CAAiC7B,OAAjC,GAA2C,MAA3C;AACA4B,mBAAKhK,GAAL,CAAS,eAAT,EAA0BiK,KAA1B,CAAgC7B,OAAhC,GAA0C,MAA1C;;AAEA;AACA,oBAAM8B,mBAAmBF,KAAKhK,GAAL,CAAS,kCAAT,CAAzB;AACA,mBAAKoC,cAAL,CAAoBqB,OAApB,CAA4BZ,UAAU;AACpC,sBAAMsH,0BAAOxJ,SAASyJ,aAAT,CAAuB,4CAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAN;AACAD,qBAAK/D,SAAL,CAAe5C,GAAf,CAAmB,MAAnB;AACA2G,qBAAKE,SAAL,CAAexH,MAAf;AACAqH,iCAAiB/B,WAAjB,CAA6BgC,IAA7B;AACD,eALD;;AAOA,oBAAMG,kBAAkBN,KAAKhK,GAAL,CAAS,iCAAT,CAAxB;AACA,mBAAKgD,aAAL,CAAmBS,OAAnB,CAA2B8G,UAAU;AACnC,sBAAMJ,0BAAOxJ,SAASyJ,aAAT,CAAuB,2CAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAN;AACAD,qBAAK/D,SAAL,CAAe5C,GAAf,CAAmB,MAAnB;AACA2G,qBAAKK,SAAL,CAAeD,MAAf;AACAD,gCAAgBnC,WAAhB,CAA4BgC,IAA5B;AACD,eALD;AAMD;AArBI,WAAP;AAuBD;AAhb2C;;yBAAzB5J,U;;;;;;;;6BAAAA,2C","file":"vivide-view.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { uuid, without, getTempKeyFor, getObjectFor, flatMap } from 'utils';\nimport VivideObject from 'src/client/vivide/vivideobject.js';\nimport Script from 'src/client/vivide/vividescript.js';\n\n/**\n * Smart widget choosing\n */\nclass WidgetChooser {\n  static getPreferredWidgetType(forest, viewConfig) {\n    if (viewConfig.has('widget')) { \n      return viewConfig.get('widget');\n    }\n    \n    // #TODO: this is too dependent on internal structure of the model/VivideObject\n    // PROPOSAL: Models should not know about views, therefore they cannot return\n    //   a suggested view, but they could return a data type suggestion like:\n    //     model.dataType == \"data-points\" || \"list\" || \"text\"\n    //   Additionally, this data type could be set manually or via an \"intelligent\"\n    //   algorithm.\n    if (forest && forest.length > 0) {\n      // #Question: this model has an objects array, what is the data structure of this model?\n      const model = forest[0];\n      \n      if(model.properties.has('dataPoints') && typeof model.properties.get('dataPoints')[0] === 'number') {\n        return 'boxplot';\n      } else if (model.properties.has('text')) {\n        return 'text';\n      }\n    }\n    return 'tree';\n  }\n  static findAppropriateWidget(forest, viewConfig) {\n    const type = this.getPreferredWidgetType(forest, viewConfig);\n    \n    // full type specified\n    if(type.includes('-')) {\n      return type;\n    }\n    \n    // shorthand notation used\n    return `vivide-${type}-widget`;\n  }\n}\n\nexport default class VivideView extends Morph {\n  static findViewWithId(id, context=document.body) {\n    return lively.query(context, `vivide-view[vivide-view-id=${id}]`);\n  }\n  \n  static getIdForView(view) {\n    return view.id;\n  }\n  \n  static get idAttribute() { return 'vivide-view-id'; }\n  \n  static get outportAttribute() { return 'outport-target'; }\n  \n  static get scriptAttribute() { return 'vivide-script'; }\n  \n  static get widgetId() { return 'widget'; }\n  \n  static get widgetSelector() { return '#' + this.widgetId; }\n  \n  static forestToData(model) {\n    return model.map(m => m.object);\n  }\n  \n  // unused?\n  static dataToForest(data) {\n    return data.map(d => new VivideObject(d));\n  }\n\n  get widget() { return this.get(VivideView.widgetSelector); }\n  \n  get input() { return this._input || (this._input = []); }\n  set input(val) { return this._input = val; }\n  \n  get id() {\n    let id = this.getAttribute(VivideView.idAttribute);\n    if(id) { return id; }\n    \n    // ensure uuid begins with a letter to match the requirements for a css selector\n    let newId = 'vivide-view-' + uuid();\n    this.setAttribute(VivideView.idAttribute, newId);\n    return newId;\n  }\n  \n  get outportTargets() {\n    let ids = this.getJSONAttribute(VivideView.outportAttribute);\n    if(ids) {\n      return flatMap.call(ids, id => {\n        let view = VivideView.findViewWithId(id, lively.findWorldContext(this)) ;\n        if(view === null) {\n          lively.error('could not find view: ' + id);\n          return [];\n        }\n        return [view];\n      });\n    }\n    \n    return this.outportTargets = [];\n  }\n  \n  set outportTargets(targets) {\n    return this.setJSONAttribute(\n      VivideView.outportAttribute,\n      targets.map(VivideView.getIdForView)\n    );\n  }\n  \n  addOutportTarget(target) {\n    return this.outportTargets = this.outportTargets.concat(target);\n  }\n  \n  removeOutportTarget(target) {\n    return this.outportTargets = without.call(this.outportTargets, target);\n  }\n  \n  get inportSources() {\n    return Array.from(document.body.querySelectorAll(`vivide-view[${VivideView.outportAttribute}*=${this.id}]`));\n  }\n  \n  get targetHull() {\n    let hull = new Set();\n    \n    function addToHull(view) {\n      if(view && !hull.has(view)) {\n        hull.add(view);\n        view.outportTargets.forEach(addToHull);\n      }\n    }\n    addToHull(this);\n    \n    return Array.from(hull);\n  }\n  \n  connectTo(target) {\n    // #TODO: cycle detection, here?\n    this.addOutportTarget(target);\n  }\n  removeConnectionTo(target) {\n    this.removeOutportTarget(target);\n  }\n  \n  transmitDataToOutportTargets(dataToTransmit) {\n    this.outportTargets.forEach(target => target.newDataFromUpstream(dataToTransmit));\n  }\n  reallyNotifyOutportTargets(stuffToTransmit) {\n    this.transmitDataToOutportTargets(VivideView.forestToData(stuffToTransmit));\n  }\n  notifyOutportTargets() {\n    // lively.warn('VIEW::NOTIFY2', this.forestToDisplay[0])\n    this.reallyNotifyOutportTargets(this.forestToDisplay);\n  }\n  \n  updateOutportTargets() {\n    const dataToTransmit = this.getDataToTransmit();\n    if(dataToTransmit) {\n      // lively.warn('VIEW::UPDATE', dataToTransmit[0])\n      this.transmitDataToOutportTargets(dataToTransmit);\n    }\n  }\n  \n  getDataToTransmit() {\n      // lively.warn('display all data')\n    if(this.widget && this.widget.multiSelectionEnabled) {\n      return this.getSelectedData();\n    } else if (this.widget && this.widget.localName === 'vivide-text-widget') {\n      return this.getSelectedData();\n    } else {\n      // use all data\n      return VivideObject.forestToData(this.forestToDisplay);\n    }\n  }\n  \n  getSelectedData() {\n    const widget = this.widget;\n    if(widget) {\n      return widget.getSelectedData();\n    }\n    return undefined;\n  }\n\n  selectionChanged() {\n    this.updateOutportTargets();\n  }\n  \n  addDragInfoTo(evt) {\n    const dt = evt.dataTransfer;\n    // #TODO: An improved fix would be to change what is returned by the widget selection\n    let selection = this.getDataToTransmit();\n    if(selection) {\n      // lively.warn('VivideView::addDragInfoTo', selection[0])\n      dt.setData(\"javascript/object\", getTempKeyFor(selection));\n    } else {\n      lively.error('could not add drag data');\n    }\n\n    dt.setData(\"vivide\", \"\");\n    dt.setData(\"vivide/source-view\", getTempKeyFor(this));\n  }\n\n  async initialize() {\n    this.windowTitle = \"VivideView\";\n    this.addEventListener('extent-changed', evt => this.onExtentChanged(evt));\n    \n    this.addEventListener('dragenter', evt => this.dragenter(evt), false);\n    this.addEventListener('dragover', evt => this.dragover(evt), false);\n    this.addEventListener('dragleave', evt => this.dragleave(evt), false);\n    this.addEventListener('drop', evt => this.drop(evt), false);\n\n    // restore data... \n    \n    // not migrating, but initializing from source\n    if (!this.myCurrentScript) {\n      var scriptJSON = this.getAttribute(\"vivide-script\")\n      if (scriptJSON) {\n        this.myCurrentScript = await Script.fromJSON(scriptJSON, this)\n      } else {\n        //This got commented because it is not reliable. It will often overwrite or take longer to setup and overwrite later on\n        // await this.initDefaultScript();\n      }\n\n      var dataJSON = this.getAttribute(\"vivide-data\")\n      if (dataJSON) {\n        // await this.createScriptEditor();\n        var data = JSON.parse(dataJSON)\n        this.newDataFromUpstream(data)\n      }      \n    }\n  }\n  \n  onExtentChanged() {\n    this.childNodes.forEach(childNode => {\n      if(childNode.dispatchEvent) {\n        childNode.dispatchEvent(new CustomEvent(\"extent-changed\"));\n      }\n    })\n  }\n  \n  dragenter(evt) {}\n  dragover(evt) {\n    evt.preventDefault();\n\n    this._resetDropOverEffects();\n    this.classList.add('over');\n    \n    const dt = evt.dataTransfer;\n    \n    let hasSourceView = dt.types.includes(\"vivide\") && dt.types.includes(\"vivide/source-view\");\n    if(hasSourceView) {\n      // unfortunately, we cannot check for a circular dependency here,\n      // because we cannot get data from the dataTransfer outside dragStart and drop\n      // see: https://stackoverflow.com/a/31922258/1152174\n      this.classList.add('accept-drop');\n      dt.dropEffect = \"link\";\n      \n      return;\n    }\n    \n    let hasData = dt.types.includes(\"javascript/object\");\n    if(hasData) {\n      this.classList.add('accept-drop');\n      dt.dropEffect = \"copy\";\n      \n      return;\n    }\n    \n    this.classList.add('reject-drop');\n  }\n  dragleave(evt) {\n    this._resetDropOverEffects();\n  }\n  _resetDropOverEffects() {\n    this.classList.remove('over');\n    this.classList.remove('reject-drop');\n    this.classList.remove('accept-drop');\n  }\n  drop(evt) {\n    this._resetDropOverEffects();\n\n    let shouldPreventPropagation = false;\n    \n    const dt = evt.dataTransfer;\n    if (dt.types.includes(\"javascript/object\")) {\n      lively.success('drop data');\n\n      const data = getObjectFor(dt.getData(\"javascript/object\"));\n      this.newDataFromUpstream(data);\n      \n      shouldPreventPropagation = true;\n    }\n    \n    if (dt.types.includes(\"vivide\") && dt.types.includes(\"vivide/source-view\")) {\n      lively.success('drop vivide');\n      \n      const sourceView = getObjectFor(dt.getData(\"vivide/source-view\"));\n\n      if(this.targetHull.includes(sourceView)) {\n        lively.warn('cannot connect views', 'preventing cyclic dependencies')\n      } else {\n        sourceView.connectTo(this);\n      }\n\n      shouldPreventPropagation = true;\n    }\n\n    if(shouldPreventPropagation) {\n      evt.stopPropagation();\n    }\n  }\n  \n  get myCurrentScript() { return this._myCurrentScript; }\n  set myCurrentScript(script) {\n    this._myCurrentScript = script;\n    this.setAttribute(VivideView.scriptAttribute, script.toJSON());\n  }\n\n  async initDefaultScript() {\n    const script = await Script.createDefaultScript(this);\n    this.myCurrentScript = script;\n    return script;\n    // this.setJSONAttribute(VivideView.scriptAttribute, this.myCurrentScript.toJSON());\n  }\n  \n  async newDataFromUpstream(data) {\n    this.input = data;\n    \n    await this.calculateOutputModel();\n    await this.updateWidget();\n    this.updateOutportTargets();\n  }\n  \n  getInputData() {\n    return this.input;\n  }\n  \n  async calculateOutputModel() {\n    const firstStep = this.myCurrentScript.getInitialStep();\n    const data = this.input.slice(0);\n    \n    this.forestToDisplay = await firstStep.processData(data);\n  }\n  \n  // #TODO: nearly a duplicate with newDataFromUpstream; remove duplication\n  async scriptGotUpdated() {\n    // #TODO: save script to web-component\n    // #TODO: later support multiple profiles\n    lively.notify('VivideView::scriptGotUpdated');\n    await this.calculateOutputModel();\n    await this.updateWidget();\n    // Update outport views\n    // #TODO: nearly a duplicate with notifyOutportTargets, remove duplication\n    this.updateOutportTargets();\n  }\n  \n  async updateWidget() {\n    this.innerHTML = '';\n\n    const viewConfig = await this.myCurrentScript.getViewConfig();\n    const chosenWidgetType = WidgetChooser.findAppropriateWidget(this.forestToDisplay, viewConfig);\n\n    const widget = await lively.create(chosenWidgetType);\n    widget.setView(this);\n    widget.setAttribute('id', VivideView.widgetId);\n    this.appendChild(widget);\n    await widget.display(this.forestToDisplay, viewConfig);\n  }\n  \n  async createScriptEditor() {\n    const viewWindow = lively.findWindow(this);\n    const reference = viewWindow && viewWindow.tagName === \"LIVELY-WINDOW\" ?\n        viewWindow : this;\n    const pos = lively.getGlobalBounds(reference).topRight();\n\n    const scriptEditor = await lively.openComponentInWindow('vivide-script-editor', pos);\n    scriptEditor.setView(this);\n    // #TODO: only do setView with this as argument, the following line should not be required\n    await scriptEditor.setScript(this.myCurrentScript);\n\n    return scriptEditor;\n  }\n  \n  livelyPrepareSave() {\n    this.setAttribute(\"vivide-script\", this.myCurrentScript.toJSON());\n\n    try {\n      var json = JSON.stringify(this.getInputData())\n      this.setAttribute(\"vivide-data\", json)\n    } catch(e) {\n      console.warn(\"could not persist vivide data\", this.getInputData() )\n    }\n  }\n  \n  async livelyExample() {\n    const exampleData = [\n      {\n        name: \"object\",\n        subclasses:[\n          {name: \"morph\"}\n        ]},\n      {\n        name: \"list\",\n        subclasses:[\n          {\n            name: \"linkedlist\",\n            subclasses:[\n              {name: \"stack\"}\n            ]},\n          {\n            name: \"arraylist\"\n          }]\n      },\n      {\n        name: \"usercontrol\",\n        subclasses:[\n          {name: \"textbox\"},\n          {name: \"button\"},\n          {name: \"label\"}\n        ]},\n    ];\n    \n    await this.initDefaultScript();\n    await this.createScriptEditor();\n    await this.newDataFromUpstream(exampleData);\n  }\n  \n  livelyMigrate(other) {\n    lively.notify('VivideView::migrate')\n    this.myCurrentScript = other.myCurrentScript;\n    this.myCurrentScript.setView(this);\n\n    this.newDataFromUpstream(other.input);\n  }\n  \n  livelyInspect(contentNode, inspector) {\n    if (this.myCurrentScript) {\n      contentNode.appendChild(inspector.display(this.myCurrentScript, false, \"#script\", this));\n    }\n    if (this.input) {\n      contentNode.appendChild(inspector.display(this.input, false, \"#input\", this));\n    }\n    \n    var outportTargets = this.outportTargets\n    if (outportTargets) {\n      contentNode.appendChild(inspector.display(outportTargets, false, \"#outportTargets\", this));\n    }\n    \n    \n  }\n  \n  \n  livelyHalo() {\n    return {\n      configureHalo(halo) {\n        halo.get('#default-items').style.display = 'none';\n        halo.get('#vivide-items').style.display = 'flex';\n\n        // dynamically create outport connection visualizations\n        const outportContainer = halo.get('#vivide-outport-connection-items');\n        this.outportTargets.forEach(target => {\n          const item = document.createElement('lively-halo-vivide-outport-connection-item')\n          item.classList.add('halo');\n          item.setTarget(target);\n          outportContainer.appendChild(item);\n        });\n        \n        const inportContainer = halo.get('#vivide-inport-connection-items');\n        this.inportSources.forEach(source => {\n          const item = document.createElement('lively-halo-vivide-inport-connection-item')\n          item.classList.add('halo');\n          item.setSource(source);\n          inportContainer.appendChild(item);\n        });\n      }\n    };\n  }\n}\n"]}