@acorex/layout 3.0.65 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/acorex-layout.d.ts +1 -2
  2. package/esm2020/acorex-layout.mjs +5 -0
  3. package/esm2020/lib/widget-board/editors/widget-size-editor/widget-size.editor.mjs +46 -0
  4. package/esm2020/lib/widget-board/editors/widget-size-editor/widget-size.module.mjs +21 -0
  5. package/esm2020/lib/widget-board/widget-board.component.mjs +441 -0
  6. package/esm2020/lib/widget-board/widget-board.module.mjs +111 -0
  7. package/esm2020/lib/widget-board/widget-config.component.mjs +82 -0
  8. package/esm2020/lib/widget-board/widget-host.component.mjs +290 -0
  9. package/esm2020/lib/widget-board/widget-save.component.mjs +79 -0
  10. package/esm2020/lib/widget-board/widget.class.mjs +127 -0
  11. package/esm2020/public-api.mjs +7 -0
  12. package/fesm2015/acorex-layout.mjs +1166 -0
  13. package/fesm2015/acorex-layout.mjs.map +1 -0
  14. package/fesm2020/acorex-layout.mjs +1159 -0
  15. package/fesm2020/acorex-layout.mjs.map +1 -0
  16. package/lib/widget-board/editors/widget-size-editor/widget-size.editor.d.ts +3 -0
  17. package/lib/widget-board/editors/widget-size-editor/widget-size.module.d.ts +8 -0
  18. package/lib/widget-board/widget-board.component.d.ts +3 -0
  19. package/lib/widget-board/widget-board.module.d.ts +12 -0
  20. package/lib/widget-board/widget-config.component.d.ts +3 -0
  21. package/lib/widget-board/widget-host.component.d.ts +3 -0
  22. package/lib/widget-board/widget-save.component.d.ts +3 -0
  23. package/lib/widget-board/widget.class.d.ts +3 -0
  24. package/package.json +23 -13
  25. package/acorex-layout.metadata.json +0 -1
  26. package/bundles/acorex-layout.umd.js +0 -1487
  27. package/bundles/acorex-layout.umd.js.map +0 -1
  28. package/bundles/acorex-layout.umd.min.js +0 -16
  29. package/bundles/acorex-layout.umd.min.js.map +0 -1
  30. package/esm2015/acorex-layout.js +0 -7
  31. package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +0 -49
  32. package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.module.js +0 -19
  33. package/esm2015/lib/widget-board/widget-board.component.js +0 -468
  34. package/esm2015/lib/widget-board/widget-board.module.js +0 -67
  35. package/esm2015/lib/widget-board/widget-config.component.js +0 -86
  36. package/esm2015/lib/widget-board/widget-host.component.js +0 -323
  37. package/esm2015/lib/widget-board/widget-save.component.js +0 -79
  38. package/esm2015/lib/widget-board/widget.class.js +0 -123
  39. package/esm2015/public-api.js +0 -7
  40. package/esm5/acorex-layout.js +0 -7
  41. package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +0 -52
  42. package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.module.js +0 -22
  43. package/esm5/lib/widget-board/widget-board.component.js +0 -494
  44. package/esm5/lib/widget-board/widget-board.module.js +0 -68
  45. package/esm5/lib/widget-board/widget-config.component.js +0 -90
  46. package/esm5/lib/widget-board/widget-host.component.js +0 -359
  47. package/esm5/lib/widget-board/widget-save.component.js +0 -83
  48. package/esm5/lib/widget-board/widget.class.js +0 -134
  49. package/esm5/public-api.js +0 -7
  50. package/fesm2015/acorex-layout.js +0 -1177
  51. package/fesm2015/acorex-layout.js.map +0 -1
  52. package/fesm5/acorex-layout.js +0 -1264
  53. package/fesm5/acorex-layout.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@acorex/layout/lib/widget-board/widget.class.ts","ng://@acorex/layout/lib/widget-board/widget-config.component.ts","ng://@acorex/layout/lib/widget-board/widget-save.component.ts","ng://@acorex/layout/lib/widget-board/widget-host.component.ts","ng://@acorex/layout/lib/widget-board/widget-board.component.ts","ng://@acorex/layout/lib/widget-board/editors/widget-size-editor/widget-size.editor.ts","ng://@acorex/layout/lib/widget-board/widget-board.module.ts","ng://@acorex/layout/lib/widget-board/editors/widget-size-editor/widget-size.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","push","__read","o","m","ar","error","__spread","concat","map","id","text","AXTranslator","get","replace","toString","AXWidgetComponent","_this","uid","AXHtmlUtil","getUID","onBusyChanged","EventEmitter","_isBusy","refreshRate","onConfiguredChanged","subscribe","isConfigured","getRefreshRate","restartRefreshTimer","stopRefreshTimer","eventData","component","oldValue","emit","isArray","startRefreshTimer","intervalId","window","setInterval","refresh","bind","clearInterval","ngOnDestroy","redraw","setValue","name","getValue","val","config","_a","props","runtime","provideValue","res","uniqueName","options","propertyEditor","editorClass","title","visible","order","editorOptions","items","ɵ0","allowNull","allowSearch","selectionDataMode","selectionMode","valueField","AXWidgetConfigComponent","cdr","_super","displayProps","changes","context","getFooterButtons","submitBehavior","style","cancelBehavior","onFooterButtonClick","close","form","validate","handleValueChange","prop","find","property","updateContext","ngOnInit","filter","sort","a","ctx","forEach","identify","index","item","ChangeDetectorRef","ViewChild","AXValidationFormComponent","Component","template","encapsulation","ViewEncapsulation","None","changeDetection","ChangeDetectionStrategy","OnPush","AXBasePopupPageComponent","AXWidgetSaveComponent","pp","_b","data","AXObjectUtil","deepJSONClone","allow","ppp","AXWidgetHostComponent","ref","componentFactoryResolver","rendererService","popup","loadingService","_hasProps","_hasMenu","configMenuItem","icon","onRemove","onConfigChanged","onResized","onSave","_isLoading","sizeX","sizeY","col","row","_widget","nativeElement","_loadingId","hide","show","isLoading","ngAfterViewInit","findLoadedComponentByRoute","route","console","widgetFactory","resolveComponentFactory","componentRef","vc","createComponent","instance","widgetSize","setSizeFromOptions","detectChanges","assign","AXPropertyDecorators","getProperties","onClick","widget","openConfigDialog","openSaveDialog","oldSizeX","oldSizeY","remove","preventDefault","stopPropagation","handleConfig","getMergedProps","open","size","emitConfigChanged","handleOptionClick","clear","destroy","deepCopy","this_1","newP","existPropDec","ElementRef","ComponentFactoryResolver","AXRenderService","AXPopupService","AXLoadingService","Input","Output","read","ViewContainerRef","HostBinding","selector","host","class","tabindex","AXWidgetBoardComponent","zone","widgets","galleryItems","tileSize","gapSize","newWidget","_isInEditing","isDragging","DATA_COL","DATA_ROW","DATA_SIZE_X","DATA_SIZE_Y","DATA_OLD_COL","DATA_OLD_ROW","onWidgetSave","isInEditing","rtl","getComputedStyle","getPropertyValue","runOutsideAngular","document","createElement","type","appendChild","innerHTML","calcGridSize","width","Math","max","height","container","toggleEdit","finishEdit","startEdit","dragStart","which","dragItem","currentTarget","setAttribute","offsetLeft","clientX","offsetTop","clientY","classList","add","removePositionData","getAttribute","removeAttribute","resetPositionData","setPosition","element","removeProperty","Number","drag","addPlaceholder","xOffset","yOffset","left","top","detectBestPlacement","dragEnd","querySelector","w_1","removeChild","run","setTimeout","addEventListener","removePlaceholder","detectFirstEmptySlot","w","xTile","floor","parentElement","offsetWidth","j","rec","AXClientRec","intersect","ceil","clientWidth","from","querySelectorAll","some","collision","bg","setProperty","pattern","removeEventListener","addWidget","handleOnRemove","__meta__","handleOnSave","trackByFn","load","loadedWidgets_1","JSON","parse","intervalId_1","gitem","stringify","save","obj","widgetHosts","handleOnConfigChanged","handleOnResizedChanged","resizeChangeObserver","Observable","observer","pipe","debounceTime","distinctUntilChanged","Date","NgZone","ViewChildren","QueryList","AXWidgetSizePropertyEditorComponent","minX","maxX","minY","maxY","handleMinValueChange","handleMaxValueChange","onRenderCompleted","AXProperyEditorComponent","AXWidgetBoardModule","widget-board","configurable-props","configure","NgModule","imports","CommonModule","AXSearchBoxModule","AXLoadingModule","RouterModule","AXProppertyEditorModule","AXPageModule","AXToolbarModule","AXTranslatorModule","AXLabelModule","AXTextAreaModule","AXFieldsetModule","AXTextBoxModule","AXFormGroupModule","AXTabStripModule","AXCheckBoxModule","AXMenuModule","AXValidationModule","forChild","path","exports","declarations","entryComponents","providers","AXWidgetSizePropertyEditorModule","FormsModule","AXNumberBoxModule"],"mappings":";;;;;;;;;;;;;;oFAgBA,IAAIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,IAGrB,SAASO,EAAUR,EAAGC,GAEzB,SAASQ,IAAOC,KAAKC,YAAcX,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEY,UAAkB,OAANX,EAAaC,OAAOW,OAAOZ,IAAMQ,EAAGG,UAAYX,EAAEW,UAAW,IAAIH,GA0B5E,SAASK,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2HlB,EAAvHmB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOhB,OAAOqB,yBAAyBP,EAAQC,GAAOC,EACrH,GAAuB,iBAAZM,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIQ,EAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAAS1B,EAAIe,EAAWW,MAAIJ,GAAKH,EAAI,EAAInB,EAAEsB,GAAKH,EAAI,EAAInB,EAAEgB,EAAQC,EAAKK,GAAKtB,EAAEgB,EAAQC,KAASK,GAChJ,OAAOH,EAAI,GAAKG,GAAKpB,OAAOyB,eAAeX,EAAQC,EAAKK,GAAIA,EAOzD,SAASM,EAAWC,EAAaC,GACpC,GAAuB,iBAAZN,SAAoD,mBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAaC,GAG7G,SAASE,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,IAAW,MAAOG,GAAKL,EAAOK,IACpF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,IAAW,MAAOG,GAAKL,EAAOK,IACvF,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,OAITO,KAAKR,EAAWK,GAClGH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,WAI/D,SAASO,EAAYjB,EAASkB,GACjC,IAAsGC,EAAGC,EAAGC,EAAGC,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPJ,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOK,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEZ,KAAMkB,EAAK,GAAIC,MAASD,EAAK,GAAIE,OAAUF,EAAK,IAAwB,mBAAXG,SAA0BT,EAAES,OAAOC,UAAY,WAAa,OAAOvD,OAAU6C,EACvJ,SAASM,EAAKK,GAAK,OAAO,SAAUC,GAAK,OACzC,SAAcC,GACV,GAAIhB,EAAG,MAAM,IAAIiB,UAAU,mCAC3B,KAAOb,GAAG,IACN,GAAIJ,EAAI,EAAGC,IAAMC,EAAY,EAARc,EAAG,GAASf,EAAU,OAAIe,EAAG,GAAKf,EAAS,SAAOC,EAAID,EAAU,SAAMC,EAAEgB,KAAKjB,GAAI,GAAKA,EAAEV,SAAWW,EAAIA,EAAEgB,KAAKjB,EAAGe,EAAG,KAAKrB,KAAM,OAAOO,EAE3J,OADID,EAAI,EAAGC,IAAGc,EAAK,CAAS,EAARA,EAAG,GAAQd,EAAEb,QACzB2B,EAAG,IACP,KAAK,EAAG,KAAK,EAAGd,EAAIc,EAAI,MACxB,KAAK,EAAc,OAAXZ,EAAEC,QAAgB,CAAEhB,MAAO2B,EAAG,GAAIrB,MAAM,GAChD,KAAK,EAAGS,EAAEC,QAASJ,EAAIe,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKZ,EAAEI,IAAIW,MAAOf,EAAEG,KAAKY,MAAO,SACxC,QACI,KAAkBjB,GAAZA,EAAIE,EAAEG,MAAYtC,OAAS,GAAKiC,EAAEA,EAAEjC,OAAS,MAAkB,IAAV+C,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEZ,EAAI,EAAG,SACjG,GAAc,IAAVY,EAAG,MAAcd,GAAMc,EAAG,GAAKd,EAAE,IAAMc,EAAG,GAAKd,EAAE,IAAM,CAAEE,EAAEC,MAAQW,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYZ,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIA,EAAIc,EAAI,MAC7D,GAAId,GAAKE,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIE,EAAEI,IAAIY,KAAKJ,GAAK,MACvDd,EAAE,IAAIE,EAAEI,IAAIW,MAChBf,EAAEG,KAAKY,MAAO,SAEtBH,EAAKjB,EAAKmB,KAAKrC,EAASuB,GAC1B,MAAOZ,GAAKwB,EAAK,CAAC,EAAGxB,GAAIS,EAAI,EAAI,QAAWD,EAAIE,EAAI,EACtD,GAAY,EAARc,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAE3B,MAAO2B,EAAG,GAAKA,EAAG,QAAK,EAAQrB,MAAM,GArB9BL,CAAK,CAACwB,EAAGC,MA8CtD,SAASM,EAAOC,EAAGR,GACtB,IAAIS,EAAsB,mBAAXX,QAAyBU,EAAEV,OAAOC,UACjD,IAAKU,EAAG,OAAOD,EACf,IAAmBpD,EAAYsB,EAA3BlB,EAAIiD,EAAEL,KAAKI,GAAOE,EAAK,GAC3B,IACI,WAAc,IAANV,GAAgBA,KAAM,MAAQ5C,EAAII,EAAEiB,QAAQI,MAAM6B,EAAGJ,KAAKlD,EAAEmB,OAExE,MAAOoC,GAASjC,EAAI,CAAEiC,MAAOA,GACjC,QACQ,IACQvD,IAAMA,EAAEyB,OAAS4B,EAAIjD,EAAU,SAAIiD,EAAEL,KAAK5C,GAE1D,QAAkB,GAAIkB,EAAG,MAAMA,EAAEiC,OAE7B,OAAOD,EAGJ,SAASE,IACZ,IAAK,IAAIF,EAAK,GAAIlD,EAAI,EAAGA,EAAIN,UAAUC,OAAQK,IAC3CkD,EAAKA,EAAGG,OAAON,EAAOrD,UAAUM,KACpC,OAAOkD,QCjEQ,WACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAAII,KAAI,SAAA7D,GAAK,MAAA,CACzC8D,GAAI,IAAQ9D,EACZ+D,KAAMC,EAAAA,aAAaC,IAAI,mCAAmCC,QAAQ,MAAOlE,EAAEmE,8BAsB3F,SAAAC,IAAA,IAAAC,EAAA9E,KA5DSA,KAAA+E,IAAcC,EAAAA,WAAWC,SAGlCjF,KAAAkF,cAAqD,IAAIC,EAAAA,aAEjDnF,KAAAoF,SAAmB,EA2C3BpF,KAAAqF,YAAmB,CAAC,CAChBd,GAAI,IACJC,KAAMC,EAAAA,aAAaC,IAAI,mCAAmCC,QAAQ,MAAO,OA+C7E3E,KAAAsF,oBAA0C,IAAIH,EAAAA,aApC1CnF,KAAKsF,oBAAoBC,WAAU,YACL,IAAtBT,EAAKU,cAAyBV,EAAKW,iBACnCX,EAAKY,sBAGLZ,EAAKa,sBA+DrB,OA3HInG,OAAAyB,eAAW4D,EAAA3E,UAAA,SAAM,KAAjB,WACI,OAAOF,KAAKoF,aAEhB,SAAkB3B,GACd,GAAIA,IAAMzD,KAAKoF,QAAS,CACpB,IAAMQ,EAAmC,CACrCC,UAAW7F,KACX8F,SAAU9F,KAAKoF,QACfrD,MAAO0B,GAEXzD,KAAKoF,QAAU3B,EACfzD,KAAKkF,cAAca,KAAKH,qCAqChCf,EAAA3E,UAAAuF,eAAA,WACI,OAAO9F,MAAMqG,QAAQhG,KAAKqF,cAAgBrF,KAAKqF,YAAY1E,OAASX,KAAKqF,YAAY,GAAGd,GAAKvE,KAAKqF,aAiB9FR,EAAA3E,UAAA+F,kBAAR,WACIjG,KAAKkG,WAAaC,OAAOC,YAAYpG,KAAKqG,QAAQC,KAAKtG,MAAOA,KAAKyF,mBAG/DZ,EAAA3E,UAAAyF,iBAAR,WACIQ,OAAOI,cAAcvG,KAAKkG,aAGtBrB,EAAA3E,UAAAwF,oBAAR,WACI1F,KAAK2F,mBACL3F,KAAKiG,qBAGTpB,EAAA3E,UAAAsG,YAAA,WACIxG,KAAK2F,oBAGFd,EAAA3E,UAAAuG,OAAP,aAIO5B,EAAA3E,UAAAmG,QAAP,WACIrG,KAAK0F,uBAKTlG,OAAAyB,eAAI4D,EAAA3E,UAAA,eAAY,KAAhB,WACI,OAAO,mCAGJ2E,EAAA3E,UAAAwG,SAAP,SAAgBC,EAAc5E,GAC1B/B,KAAK2G,GAAQ5E,EACb/B,KAAKsF,oBAAoBS,QAGtBlB,EAAA3E,UAAA0G,SAAP,SAAgBD,SACNE,EAAM7G,KAAK2G,GACXG,EAAS9G,KAAe,SAAE8G,OAEhC,IADkC,QAArBC,EAAGD,EAAOE,MAAML,UAAK,IAAAI,OAAA,EAAAA,EAAEE,UACrBjH,KAAKkH,aAAc,CAC9B,IAAMC,EAAMnH,KAAKkH,aAAa,CAC1BP,KAAIA,EACJ5E,MAAO8E,EACPO,WAAYN,EAAOM,WACnBC,QAASP,EAAOO,UAEpB,OAAIrH,KAAKkH,wBAAwBvF,QACtBwF,EAGAxF,QAAQC,QAAQuF,GAG/B,OAAOxF,QAAQC,QAAQiF,IAnG3BzG,EAAA,CANCkH,EAAAA,eAAe,CACZC,YAAa,yBACbC,MAAO,cACPC,SAAS,EACTC,OAAQ,8DAuBZtH,EAAA,CAnBCkH,EAAAA,eAAe,CACZC,YAAa,oBACbC,MAAO,sBACPC,SAAS,EACTC,OAAQ,GACRC,cAAe,CACXC,MAAKC,EAMLC,WAAW,EACXC,aAAa,EACbC,kBAAmB,QACnBC,cAAe,SACfC,WAAY,mEAoFxBrD,mBC/JI,SAAAsD,EAAoBC,GAApB,IAAAtD,EACIuD,EAAAzE,KAAA5D,OAAOA,YADS8E,EAAAsD,IAAAA,EAMpBtD,EAAAkC,MAA4B,GAC5BlC,EAAAwD,aAAmC,GAGnCxD,EAAAyD,QAA8B,GAE9BzD,EAAA0D,QAAe,KAsEnB,OAtF6C1I,EAAAqI,EAAAE,GAmBzCF,EAAAjI,UAAAuI,iBAAA,WACI,MAAO,CACH,CACI9B,KAAM,OACN+B,gBAAgB,EAChBlE,KAAMC,EAAAA,aAAaC,IAAI,kBACvBiE,MAAO,WAEX,CACIhC,KAAM,SACNiC,gBAAgB,EAChBpE,KAAMC,EAAAA,aAAaC,IAAI,iBACvBiE,MAAO,kBASnBR,EAAAjI,UAAA2I,oBAAA,SAAoB3G,GAApB,IAAA4C,EAAA9E,KACmB,WAAXkC,EAAEyE,MACF3G,KAAK8I,QAEM,SAAX5G,EAAEyE,MACF3G,KAAK+I,KAAKC,WAAW1G,MAAK,SAAA7B,GAClBA,EAAE2B,QACF0C,EAAKgE,MAAMhE,EAAKyD,aAMhCJ,EAAAjI,UAAA+I,kBAAA,SAAkB/G,GACd,IAAMgH,EAAOlJ,KAAKuI,QAAQY,MAAK,SAAA1I,GAAK,OAAAA,EAAE2I,SAASzC,OAASzE,EAAEkH,SAASzC,QAC/DuC,EACAA,EAAKnH,MAAQG,EAAEH,MAGf/B,KAAKuI,QAAQzE,KAAK,CAAEsF,SAAUlH,EAAEkH,SAAUrH,MAAOG,EAAEH,QAEvD/B,KAAKqJ,iBAGTlB,EAAAjI,UAAAoJ,SAAA,WACItJ,KAAKsI,aAAetI,KAAKgH,MAAMuC,QAAO,SAAA9I,GAAK,OAAuB,IAAvBA,EAAE2I,SAAS3B,WAAmB+B,MAAK,SAACC,EAAGlK,GAAM,OAAAkK,EAAEL,SAAS1B,MAAQnI,EAAE6J,SAAS1B,SACtH1H,KAAKqJ,iBAIDlB,EAAAjI,UAAAmJ,cAAR,WACI,IAAMK,EAAM,GACZ1J,KAAKgH,MAAM2C,SAAQ,SAAA/J,GACf8J,EAAI9J,EAAEwJ,SAASzC,MAAQ/G,EAAEmC,SAE7B/B,KAAKuI,QAAQoB,SAAQ,SAAA/J,GACjB8J,EAAI9J,EAAEwJ,SAASzC,MAAQ/G,EAAEmC,SAE7B/B,KAAKwI,QAAUkB,GAInBvB,EAAAjI,UAAA0J,SAAA,SAASC,EAAOC,GACZ,OAAOA,EAAKV,SAASzC,+CA/EAoD,EAAAA,qBAFa3J,EAAA,CAArC4J,EAAAA,UAAUC,EAAAA,2CAAiCA,EAAAA,uDAFnC9B,EAAuB/H,EAAA,CANnC8J,EAAAA,UAAU,CACPC,SAAA,iuBACAC,cAAeC,EAAAA,kBAAkBC,KACjCC,gBAAiBC,EAAAA,wBAAwBC,gCAOhBV,EAAAA,qBAJhB5B,IAAgCuC,EAAAA,wCCK7C,SAAAC,IAAA,IAAA7F,EAAA,OAAAuD,GAAAA,EAAA9F,MAAAvC,KAAAU,YAAAV,YAEI8E,EAAAkC,MAA4B,KAoEhC,OAtE2ClH,EAAA6K,EAAAtC,GAOvCsC,EAAAzK,UAAAuI,iBAAA,WACI,MAAO,CACH,CACI9B,KAAM,OACN+B,gBAAgB,EAChBlE,KAAMC,EAAAA,aAAaC,IAAI,kBACvBiE,MAAO,cAEX,CACIhC,KAAM,SACNiC,gBAAgB,EAChBpE,KAAMC,EAAAA,aAAaC,IAAI,iBACvBiE,MAAO,cAKnBgC,EAAAzK,UAAAoJ,SAAA,mBAEU9B,GAAiB,QAATT,EADI/G,KAAKgH,MAAMmC,MAAK,SAAA1I,GAAK,MAAoB,UAApBA,EAAE2I,SAASzC,MAAwC,SAApBlG,EAAE2I,SAASzC,eAC1D,IAAAI,OAAA,EAAAA,EAAEhF,QAAS/B,KAAK8G,OAAOU,MACxCoD,EAAU,GACN,QAAVC,EAAA7K,KAAKgH,aAAK,IAAA6D,GAAAA,EAAElB,SAAQ,SAAAlJ,GAChBmK,EAAGnK,EAAE2I,SAASzC,MAAQlG,EAAE2I,YAE5BpJ,KAAK8K,KAAO,CACRjF,UAAW7F,KAAK8G,OAAOjB,UACvB2B,MAAKA,EACLJ,WAAepH,KAAK8G,OAAOM,WAAU,IAAIpC,EAAAA,WAAWC,SACpDoC,QAAS0D,EAAAA,aAAaC,cAAchL,KAAK8G,OAAOO,SAChDL,MAAO+D,EAAAA,aAAaC,cAAcJ,IAEtC5K,KAAKsI,aAAetI,KAAKgH,MACpBuC,QAAO,SAAA9I,GAAK,OAAuB,IAAvBA,EAAE2I,SAAS3B,WACvB+B,MAAK,SAACC,EAAGlK,GAAM,OAAAkK,EAAEL,SAAS1B,MAAQnI,EAAE6J,SAAS1B,SAC7CpD,KAAI,SAAA7D,GAAK,MAAA,CACNkG,KAAMlG,EAAE2I,SAASzC,KACjBa,MAAO/G,EAAE2I,SAAS5B,MAClByD,OAAO,OAMnBN,EAAAzK,UAAA2I,oBAAA,SAAoB3G,GAApB,IAAA4C,EAAA9E,KACmB,WAAXkC,EAAEyE,MACF3G,KAAK8I,QAEM,SAAX5G,EAAEyE,OACF3G,KAAKgH,MAAM2C,SAAQ,SAAA/J,GACf,IAAMgL,EAAK9F,EAAKwD,aAAaa,MAAK,SAAA1I,GAAK,OAAAA,EAAEkG,OAAS/G,EAAEwJ,SAASzC,QAC7D,GAAU,MAANiE,IAAeA,EAAGK,MAAO,CACzB,IAAIC,EAAMpG,EAAKgG,KAAK9D,MAAMpH,EAAEwJ,SAASzC,MACjCuE,EACAA,EAAIzD,SAAU,EAGdyD,EAAM,CAAEzD,SAAS,OAI7BzH,KAAK8I,MAAM9I,KAAK8K,QAnEfH,EAAqBvK,EAAA,CALjC8J,EAAAA,UAAU,CACPC,SAAA,+5DACAC,cAAeC,EAAAA,kBAAkBC,KACjCC,gBAAiBC,EAAAA,wBAAwBC,UAEhCE,IAA8BD,EAAAA,uCCyFvC,SAAAS,EACYC,EACAC,EACAC,EACAlD,EACAmD,EACAC,GALAxL,KAAAoL,IAAAA,EACApL,KAAAqL,yBAAAA,EACArL,KAAAsL,gBAAAA,EACAtL,KAAAoI,IAAAA,EACApI,KAAAuL,MAAAA,EACAvL,KAAAwL,eAAAA,EA9EZxL,KAAAyL,WAAqB,EAGrBzL,KAAA0L,UAAoB,EAWpB1L,KAAA2L,eAA+B,CAC3B,CACIC,KAAM,oBACNhE,MAAO,KAMf5H,KAAA6L,SAAgD,IAAI1G,EAAAA,aAGpDnF,KAAA8L,gBAAuD,IAAI3G,EAAAA,aAI3DnF,KAAA+L,UAAiD,IAAI5G,EAAAA,aAGrDnF,KAAAgM,OAAiD,IAAI7G,EAAAA,aAkB7CnF,KAAAiM,YAAsB,EAkI9BjM,KAAAkM,MAAgB,EAIhBlM,KAAAmM,MAAgB,EAIhBnM,KAAAoM,IAAc,EAKdpM,KAAAqM,IAAc,EAkHlB,OAxTI7M,OAAAyB,eAAWkK,EAAAjL,UAAA,SAAM,KAAjB,WACI,OAAOF,KAAKsM,yCAYhB9M,OAAAyB,eAAIkK,EAAAjL,UAAA,UAAO,KAAX,WACI,OAAOF,KAAKoL,IAAImB,+CA0CpB/M,OAAAyB,eAAWkK,EAAAjL,UAAA,YAAS,KAApB,WACI,OAAOF,KAAKiM,gBAEhB,SAAqBxI,GACjBzD,KAAKiM,WAAaxI,EACdzD,KAAKwM,aAAe/I,IACpBzD,KAAKwL,eAAeiB,KAAKzM,KAAKwM,YAC9BxM,KAAKwM,WAAa,MAElB/I,IACAzD,KAAKwM,WAAaxM,KAAKwL,eAAekB,KAAK1M,KAAKoL,IAAImB,iDAK5D/M,OAAAyB,eAAIkK,EAAAjL,UAAA,eAAY,KAAhB,iBACI,OAAmB,QAAZ6G,EAAA/G,KAAKsM,eAAO,IAAAvF,OAAA,EAAAA,EAAEvB,gBAAgB,mCAiBzC2F,EAAAjL,UAAAoJ,SAAA,WACItJ,KAAK2M,WAAY,GAIfxB,EAAAjL,UAAA0M,gBAAN,kIAEyC,iBAA1B5M,KAAK8G,OAAOjB,UAAnB,CAAA,EAAA,GACc,CAAA,EAAM7F,KAAKsL,gBAAgBuB,2BAA2B7M,KAAK8G,OAAOjB,UAAW,mBAArFiH,EAAQjC,EAAA7H,OACd6C,EAAiB,QAARkB,EAAG+F,SAAK,IAAA/F,OAAA,EAAAA,EAAElB,uBAEmB,mBAA1B7F,KAAK8G,OAAOjB,YACxBA,EAAY7F,KAAK8G,OAAOjB,4BAE5B,OAAiB,MAAbA,GACAkH,QAAQ5I,MAAM,4BAA6BnE,KAAK8G,QAChD9G,KAAK6L,SAAS9F,KAAK/F,MACnB,CAAA,KAGEgN,EAAgBhN,KAAKqL,yBAAyB4B,wBAAwBpH,GAC5E7F,KAAKkN,aAAelN,KAAKmN,GAAGC,gBAAgBJ,GAC5ChN,KAAKsM,QAAUtM,KAAKkN,aAAaG,SACjCrN,KAAKsM,QAAQpF,aAAelH,KAAKkH,aAC7BlH,KAAKsM,QAAQpH,eACblF,KAAKsM,QAAQpH,cAAcK,WAAU,SAACjG,GAC7BwF,EAAKwH,QAAQgB,WAIdxI,EAAKyI,qBAHLzI,EAAKwH,QAAQ5F,SAAS,aAAc,CAAC5B,EAAKoH,MAAOpH,EAAKqH,QAK1DrH,EAAK6H,UAAYrN,EAAEyC,MACnB+C,EAAKsD,IAAIoF,mBAGbxN,KAAKsM,QAAQhH,qBACbtF,KAAKsM,QAAQhH,oBAAoBC,WAAU,WACvCT,EAAKyI,wBAITvN,KAAK8G,OAAOO,SACZ7H,OAAOiO,OAAOzN,KAAKsM,QAAStM,KAAK8G,OAAOO,SAE5CrH,KAAKyL,UAAYiC,EAAAA,qBAAqBC,cAAc3N,KAAKsM,SAAS3L,OAAS,EAE3EX,KAAK2M,WAAY,EACjB3M,KAAK8G,OAAiB,SAAEuG,SAAWrN,KACnCA,KAAKsM,QAAkB,SAAI,GAC3BtM,KAAKsM,QAAkB,SAAExF,OAAS9G,KAAK8G,OAEvC9G,KAAK2L,eAAe,GAAG/D,MAAM9D,KAAK,CAC9B6C,KAAM,UACNiF,KAAM,cACNpH,KAAMC,EAAAA,aAAaC,IAAI,kBACvBkJ,QAAS,mBACO,QAAZ/C,EAAI,QAAJ9D,EAAAjC,SAAI,IAAAiC,OAAA,EAAAA,EAAE8G,cAAM,IAAAhD,GAAAA,EAAExE,aAIlBrG,KAAKyL,WACLzL,KAAK2L,eAAe,GAAG/D,MAAM9D,KAAK,CAC9B6C,KAAM,UACNiF,KAAM,cACNpH,KAAMC,EAAAA,aAAaC,IAAI,kBACvBkJ,QAAS,WACL9I,EAAKgJ,sBAIjB9N,KAAK2L,eAAe,GAAG/D,MAAM9D,KAAK,CAC9B6C,KAAM,OACNiF,KAAM,cACNpH,KAAMC,EAAAA,aAAaC,IAAI,kBACvBkJ,QAAS,WACL9I,EAAKiJ,oBAIT/N,KAAK2L,eAAe,GAAG/D,MAAM9D,KAAK,CAC9B6C,KAAM,SACNiF,KAAM,eACNjD,MAAO,kBACPnE,KAAMC,EAAAA,aAAaC,IAAI,iBACvBkJ,QAAS,WACL9I,EAAK+G,SAAS9F,KAAKjB,MAI/B9E,KAAK0L,SAAW1L,KAAK2L,eAAe,GAAG/D,MAAMjH,OAAS,EACtDX,KAAKoI,IAAIoF,6BAqBLrC,EAAAjL,UAAAqN,mBAAR,WAAA,IAAAzI,EAAA9E,KACIA,KAAKsM,QAAQ1F,SAAS,cAActE,MAAK,SAAA7B,GACrC,IAAMuN,EAAWlJ,EAAKoH,MAChB+B,EAAWnJ,EAAKqH,MAClB1L,GAAKd,MAAMqG,QAAQvF,KAAOuN,IAAavN,EAAE,IAAMwN,IAAaxN,EAAE,MAC9DqE,EAAKgC,OAAOoF,MAAQpH,EAAKoH,MAAQzL,EAAE,GACnCqE,EAAKgC,OAAOqF,MAAQrH,EAAKqH,MAAQ1L,EAAE,GACnCqE,EAAKiH,UAAUhG,KAAK,CAChBF,UAAWf,EAAKwH,QAChBxF,OAAQhC,EAAKgC,UAGrBhC,EAAKsD,IAAIoF,oBAIjBrC,EAAAjL,UAAAgO,OAAA,SAAOhM,GAIH,OAHAA,EAAEiM,iBACFjM,EAAEkM,kBACFpO,KAAK6L,SAAS9F,KAAK/F,OACZ,GAGXmL,EAAAjL,UAAAmO,aAAA,SAAanM,GAIT,OAHAA,EAAEiM,iBACFjM,EAAEkM,kBACFpO,KAAK8N,oBACE,GAGH3C,EAAAjL,UAAA4N,iBAAR,WAAA,IAAAhJ,EAAA9E,KACUkL,EAAMlL,KAAKsO,iBACjBtO,KAAKuL,MAAMgD,KAAKpG,EAAyB,CACrCX,MAAO/C,EAAAA,aAAaC,IAAI,kBACxB8J,KAAM,KACN1D,KAAM,CACF9D,MAAOkE,EAAI5G,KAAI,SAAA7D,GAAK,MAAA,CAAG2I,SAAU3I,EAAE4G,QAAStF,MAAO+C,EAAKwH,QAAQ7L,EAAE4G,QAAQV,UAC1EkH,OAAQ7N,KAAK6N,UAElBvL,MAAK,SAAA7B,GACAA,EAAEqK,OACGhG,EAAKgC,OAAOO,UACbvC,EAAKgC,OAAOO,QAAU,IAE1B5G,EAAEqK,KAAKnB,SAAQ,SAAA/J,GACXkF,EAAKwH,QAAQ5F,SAAS9G,EAAEwJ,SAASzC,KAAM/G,EAAEmC,OACzC+C,EAAKgC,OAAOO,QAAQzH,EAAEwJ,SAASzC,MAAQ/G,EAAEmC,SAE7C+C,EAAK2J,oBACL3J,EAAKwH,QAAQ7F,SACb3B,EAAKsD,IAAIoF,qBAKbrC,EAAAjL,UAAA6N,eAAR,WAAA,IAAAjJ,EAAA9E,KACUkL,EAAMlL,KAAKsO,iBACjBtO,KAAKuL,MAAMgD,KAAK5D,EAAuB,CACnCnD,MAAO/C,EAAAA,aAAaC,IAAI,kBACxB8J,KAAM,KACN1D,KAAM,CACFhE,OAAQ9G,KAAK8G,OACbE,MAAOkE,EAAI5G,KAAI,SAAA7D,GAAK,MAAA,CAAG2I,SAAU3I,EAAE4G,QAAStF,MAAO+C,EAAKwH,QAAQ7L,EAAE4G,QAAQV,aAE/ErE,MAAK,SAAA7B,GACAA,EAAEqK,MACFhG,EAAKkH,OAAOjG,KAAK,CACbF,UAAWf,EAAKwH,QAChBxB,KAAMrK,EAAEqK,WAQxBK,EAAAjL,UAAAwO,kBAAA,SAAkBxM,GAId,OAHAA,EAAEiM,iBACFjM,EAAEkM,kBACFpO,KAAK8N,oBACE,GAGX3C,EAAAjL,UAAAsG,YAAA,WACIxG,KAAKmN,GAAGwB,QACJ3O,KAAKkN,cACLlN,KAAKkN,aAAa0B,WAIlBzD,EAAAjL,UAAAoO,eAAR,WACI,IAAMpD,EAAMH,EAAAA,aAAa8D,SAASnB,EAAAA,qBAAqBC,cAAc3N,KAAKsM,qBAC/D/L,GACP,GAAIf,OAAOU,UAAUL,eAAe+D,KAAKkL,EAAKhI,OAAOE,MAAOzG,GAAM,CAC9D,IAAMwO,EAAOD,EAAKhI,OAAOE,MAAMzG,GACzByO,EAAe9D,EAAI/B,MAAK,SAAAvJ,GAAK,OAAAA,EAAEwJ,WAAa7I,KAC9CyO,GACAxP,OAAOiO,OAAOuB,EAAa3H,QAAS0H,YALhD,IAAK,IAAMxO,KAAOP,KAAK8G,OAAOE,QAAnBzG,GASX,OAAO2K,GAGHC,EAAAjL,UAAAuO,kBAAR,WACIzO,KAAK8L,gBAAgB/F,KAAK,CACtBF,UAAW7F,KAAKsM,QAChBxF,OAAQ9G,KAAK8G,mDAvOJmI,EAAAA,kBACqBC,EAAAA,gCACTC,EAAAA,uBACZpF,EAAAA,yBACEqF,EAAAA,sBACSC,EAAAA,oBAxE5BjP,EAAA,CADCkP,EAAAA,sEAkBDlP,EAAA,CADCmP,EAAAA,yBACSpK,EAAAA,8CAGV/E,EAAA,CADCmP,EAAAA,yBACgBpK,EAAAA,qDAIjB/E,EAAA,CADCmP,EAAAA,yBACUpK,EAAAA,+CAGX/E,EAAA,CADCmP,EAAAA,yBACOpK,EAAAA,4CAGR/E,EAAA,CADCkP,EAAAA,8DAIDlP,EAAA,CADC4J,EAAAA,UAAU,KAAM,CAAEwF,KAAMC,EAAAA,mCACrBA,EAAAA,4CA8IJrP,EAAA,CAFCsP,EAAAA,YAAY,oBACZJ,EAAAA,6DAKDlP,EAAA,CAFCsP,EAAAA,YAAY,oBACZJ,EAAAA,6DAKDlP,EAAA,CAFCsP,EAAAA,YAAY,iBACZJ,EAAAA,2DAMDlP,EAAA,CAFCsP,EAAAA,YAAY,iBACZJ,EAAAA,2DAxMQnE,EAAqB/K,EAAA,CARjC8J,EAAAA,UAAU,CACPyF,SAAU,iBACVxF,SAAA,w8CACAyF,KAAM,CAAEC,MAAO,iBAAkBC,SAAU,KAC3C1F,cAAeC,EAAAA,kBAAkBC,KACjCC,gBAAiBC,EAAAA,wBAAwBC,gCAmFxBwE,EAAAA,WACqBC,EAAAA,yBACTC,EAAAA,gBACZpF,EAAAA,kBACEqF,EAAAA,eACSC,EAAAA,oBArFnBlE,mBCoDX,SAAA4E,EACU3E,EACA4E,EACA5H,GAFApI,KAAAoL,IAAAA,EACApL,KAAAgQ,KAAAA,EACAhQ,KAAAoI,IAAAA,EA1CVpI,KAAAiQ,QAA4B,GAG5BjQ,KAAAkQ,aAAiC,GAGjClQ,KAAAmQ,SAAmB,GAGnBnQ,KAAAoQ,QAAkB,EAEVpQ,KAAAqQ,UAA4B,KAI5BrQ,KAAAsQ,cAAwB,EAIxBtQ,KAAAuQ,YAAsB,EAMbvQ,KAAAwQ,SAAW,WACXxQ,KAAAyQ,SAAW,WACXzQ,KAAA0Q,YAAc,cACd1Q,KAAA2Q,YAAc,cACd3Q,KAAA4Q,aAAe,eACf5Q,KAAA6Q,aAAe,eAIhC7Q,KAAA8L,gBAA4D,IAAI3G,EAAAA,aAGhEnF,KAAA8Q,aAAuD,IAAI3L,EAAAA,aAgb7D,OArcS4K,EAAA7P,UAAA6Q,YAAP,WACE,OAAO/Q,KAAKsQ,cA6BdP,EAAA7P,UAAAoJ,SAAA,WACkB,MAAZtJ,KAAKgR,MACPhR,KAAKgR,IAA8F,QAAxF7K,OAAO8K,iBAAiBjR,KAAKoL,IAAImB,cAAe,MAAM2E,iBAAiB,eAItFnB,EAAA7P,UAAA0M,gBAAA,WAAA,IAAA9H,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,SAAC1Q,GAC3B,IAAMkI,EAAQyI,SAASC,cAAc,SACrC1I,EAAM2I,KAAO,WACbxM,EAAKsG,IAAImB,cAAcgF,YAAY5I,GAEnC,IAAK,IAAI3H,EAAI,EAAGA,GAAK,GAAIA,IACvB2H,EAAM6I,WAAa,IAAI1M,EAAK0L,SAAQ,KAAKxP,EAAC,UAAS8D,EAAKkM,IAAM,QAAU,QAAM,MAAMhQ,EAAI,IAAM8D,EAAKqL,SAAWrL,EAAKsL,SAAQ,QAC3HzH,EAAM6I,WAAa,IAAI1M,EAAK2L,SAAQ,KAAKzP,EAAC,eAAeA,EAAI,IAAM8D,EAAKqL,SAAWrL,EAAKsL,SAAQ,QAChGzH,EAAM6I,WAAa,IAAI1M,EAAK4L,YAAW,KAAK1P,EAAC,kBAAkBA,EAAI8D,EAAKqL,UAAcnP,EAAI,GAAK8D,EAAKsL,SAAQ,QAC5GzH,EAAM6I,WAAa,IAAI1M,EAAK6L,YAAW,KAAK3P,EAAC,kBAAkBA,EAAI8D,EAAKqL,UAAcnP,EAAI,GAAK8D,EAAKsL,SAAQ,YAK1GL,EAAA7P,UAAAuR,aAAR,WAAA,IAAA3M,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WAC1B,IAAMO,EACHC,KAAKC,IAAGrP,MAARoP,KAAIvN,EAAQU,EAAKmL,QAAQ3L,KAAI,SAAC7D,GAAM,OAAAA,EAAE2L,IAAM3L,EAAEyL,MAAQ,QAAQpH,EAAKqL,SAAWrL,EAAKsL,SAChFyB,EACHF,KAAKC,IAAGrP,MAARoP,KAAIvN,EAAQU,EAAKmL,QAAQ3L,KAAI,SAAC7D,GAAM,OAAAA,EAAE4L,IAAM5L,EAAE0L,MAAQ,QAAQrH,EAAKqL,SAAWrL,EAAKsL,SACtFtL,EAAKgN,UAAUvF,cAAc5D,MAAM+I,MAAQA,EAAQ,KACnD5M,EAAKgN,UAAUvF,cAAc5D,MAAMkJ,OAASA,EAAS,SAIzD9B,EAAA7P,UAAA6R,WAAA,WACE/R,KAAKsQ,aAAetQ,KAAKgS,aAAehS,KAAKiS,aAKvClC,EAAA7P,UAAAgS,UAAR,SAAkBhQ,GAAlB,IAAA4C,EAAA9E,KAaE,OAZAkC,EAAEiM,iBACFjM,EAAEkM,kBACFpO,KAAKgQ,KAAKmB,mBAAkB,WACtBrM,EAAKwL,cAA4B,IAAZpO,EAAEiQ,QACzBrN,EAAKsN,SAAWlQ,EAAEmQ,cAClBvN,EAAKsN,SAASE,aAAa,iBAAkBxN,EAAKsN,SAASG,WAAarQ,EAAEsQ,SAAS5N,YAEnFE,EAAKsN,SAASE,aAAa,iBAAkBxN,EAAKsN,SAASK,UAAYvQ,EAAEwQ,SAAS9N,YAClFE,EAAKsN,SAASO,UAAUC,IAAI,mBAC5B9N,EAAKsN,SAASO,UAAUzE,OAAO,oBAAqB,uBAGjD,GAGT6B,EAAA7P,UAAA2S,mBAAA,WAAA,IAAA/N,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WACtBrM,EAAKsN,UAAYtN,EAAKwL,cAAiE,MAAjDxL,EAAKsN,SAASU,aAAahO,EAAK8L,gBACxE9L,EAAKsN,SAASE,aAAaxN,EAAK8L,aAAc9L,EAAKsN,SAASU,aAAahO,EAAK0L,WAC9E1L,EAAKsN,SAASE,aAAaxN,EAAK+L,aAAc/L,EAAKsN,SAASU,aAAahO,EAAK2L,WAC9E3L,EAAKsN,SAASW,gBAAgBjO,EAAK0L,UACnC1L,EAAKsN,SAASW,gBAAgBjO,EAAK2L,eAKzCV,EAAA7P,UAAA8S,kBAAA,WAAA,IAAAlO,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WACtBrM,EAAKsN,UAAYtN,EAAKwL,cACxBxL,EAAKmO,YAAYnO,EAAKsN,SAAUtN,EAAKsN,SAASU,aAAahO,EAAK8L,cAAe9L,EAAKsN,SAASU,aAAahO,EAAK+L,mBAK7Gd,EAAA7P,UAAA+S,YAAR,SAAoBC,EAAsB9G,EAAaC,GAAvD,IAAAvH,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WAC1B+B,EAAQZ,aAAaxN,EAAK0L,SAAUpE,GACpC8G,EAAQZ,aAAaxN,EAAK2L,SAAUpE,GACpC6G,EAAQH,gBAAgBjO,EAAK8L,cAC7BsC,EAAQH,gBAAgBjO,EAAK+L,cAC7BqC,EAAQvK,MAAMwK,eAAe,OAC7BD,EAAQvK,MAAMwK,eAAe,QAC7B,IAAMtF,EAAS/I,EAAKmL,QAAQ9G,MAAK,SAAA1I,GAAK,OAAAA,EAAY,SAAE4M,SAAS6F,UAAYA,KACzErF,EAAOzB,IAAMgH,OAAOhH,GACpByB,EAAOxB,IAAM+G,OAAO/G,OAIhB0D,EAAA7P,UAAAmT,KAAR,SAAanR,GAAb,IAAA4C,EAAA9E,KAgBE,OAfAkC,EAAEiM,iBACFjM,EAAEkM,kBACFpO,KAAKgQ,KAAKmB,mBAAkB,WAC1B,GAAIrM,EAAKsN,UAAYtN,EAAKwL,aAAc,CACtCxL,EAAKyL,YAAa,EAClBzL,EAAKwO,iBACL,IAAMC,EAAUH,OAAOtO,EAAKsN,SAASU,aAAa,kBAC5CU,EAAUJ,OAAOtO,EAAKsN,SAASU,aAAa,kBAClDhO,EAAKsN,SAASzJ,MAAM8K,KAAOvR,EAAEsQ,QAAUe,EAAU,KACjDzO,EAAKsN,SAASzJ,MAAM+K,IAAMxR,EAAEwQ,QAAUc,EAAU,KAEhD1O,EAAK6O,sBACL7O,EAAK+N,0BAGF,GAGD9C,EAAA7P,UAAA0T,QAAR,SAAgB1R,GAAhB,IAAA4C,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WAC1B,GAAIrM,EAAKsN,UAAYtN,EAAKwL,cAAgBxL,EAAKyL,WAAY,CACzDzL,EAAKsN,SAASO,UAAUzE,OAAO,mBAC/BpJ,EAAKsN,SAASO,UAAUC,IAAI,oBAAqB,kBAEjD,IAAMhT,EAAIkF,EAAKgN,UAAUvF,cAAcsH,cAAc,6BACrD,GAAI/O,EAAKuL,UAAW,CAClB,IAAMyD,EAAI,CACR1M,WAAYtC,EAAKuL,UAAUjJ,WAC3BvB,UAAWf,EAAKuL,UAAUxK,UAC1B2B,MAAO1C,EAAKuL,UAAU7I,MACtBH,QAASvC,EAAKuL,UAAUhJ,QACxB6E,MAAOpH,EAAKuL,UAAUnE,MACtBC,MAAOrH,EAAKuL,UAAUlE,MACtBC,IAAKgH,OAAOxT,EAAEkT,aAAahO,EAAK0L,WAChCnE,IAAK+G,OAAOxT,EAAEkT,aAAahO,EAAK2L,YAGlC3L,EAAKmL,QAAQnM,KAAKgQ,GAClBhP,EAAKuL,UAAY,KACjBvL,EAAKgN,UAAUvF,cAAcwH,YAAYjP,EAAKsN,UAC9CtN,EAAKkL,KAAKgE,KAAI,WACZlP,EAAKsD,IAAIoF,gBACT1I,EAAK2M,eACLwC,YAAW,WACTH,EAAY,SAAEzG,SAAS6F,QAAQgB,iBAAiB,YAAapP,EAAKoN,UAAU5L,KAAKxB,IAAO,KACvF,aAGDlF,EACFkF,EAAKmO,YAAYnO,EAAKsN,SAAUxS,EAAEkT,aAAahO,EAAK0L,UAAW5Q,EAAEkT,aAAahO,EAAK2L,WAGnF3L,EAAKmO,YAAYnO,EAAKsN,SAAUtN,EAAKsN,SAASU,aAAahO,EAAK8L,cAAe9L,EAAKsN,SAASU,aAAahO,EAAK+L,eAInH/L,EAAKqP,oBACLrP,EAAKsN,SAAW,KAChBtN,EAAK2M,eACL3M,EAAK2J,oBAEP3J,EAAKyL,YAAa,MAIdR,EAAA7P,UAAAkU,qBAAR,SAA6BC,GAE3B,IADA,IAAMC,EAAQ3C,KAAK4C,MAAMvU,KAAKoL,IAAImB,cAAciI,cAAcC,YAAczU,KAAKmQ,UACxEuE,EAAI,EAAGA,GAAK,IAAKA,IACxB,mBAAS1T,GACP,IAAM2T,EAAM,IAAIC,EAAAA,YAAY,CAC1BnB,KAAMzS,EACN0S,IAAKgB,EACLhD,MAAO2C,EAAEnI,MACT2F,OAAQwC,EAAElI,QAUZ,GAAU,MARC2C,EAAKmB,QAAQ1G,QAAO,SAAA9I,GAAK,OAAAA,IAAM4T,KAAGlL,MAAK,SAAC1I,GACjD,OAAAkU,EAAIE,UAAU,CACZpB,KAAMhT,EAAE2L,IACRsH,IAAKjT,EAAE4L,IACPqF,MAAOjR,EAAEyL,MACT2F,OAAQpR,EAAE0L,kBAIZkI,EAAEjI,IAAMpL,EACRqT,EAAEhI,IAAMqI,yBAjBH1T,EAAI,EAAGA,GAAKsT,EAAQD,EAAEnI,MAAOlL,IAAG,SAAhCA,0CAwBL+O,EAAA7P,UAAAyT,oBAAR,WAAA,IAAA7O,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WAC1B,IAAMvR,EAAIkF,EAAKgN,UAAUvF,cAAcsH,cAAc,6BACjDzH,EAAMuF,KAAKmD,KAAKhQ,EAAKsN,SAASG,WAAazN,EAAKqL,UAChDrL,EAAKkM,MACP5E,EAAMuF,KAAKmD,MAAMhQ,EAAKgN,UAAUvF,cAAcwI,aAAejQ,EAAKsN,SAASG,WAAazN,EAAKsN,SAAS2C,cAAgBjQ,EAAKqL,WAG7H,IAAI9D,EAAMsF,KAAKmD,KAAKhQ,EAAKsN,SAASK,UAAY3N,EAAKqL,UAC/C/D,EAAM,IACRA,EAAM,GAEJC,EAAM,IACRA,EAAM,GAER,IAAM4D,EAAUtQ,MAAMqV,KAAKlQ,EAAKsG,IAAImB,cAAc0I,iBAAiB,iBAAiB3Q,KAAI,SAAC7D,GAAM,OAAAA,KAC/Fb,EAAE0S,aAAaxN,EAAK0L,SAAUpE,EAAIxH,YAClChF,EAAE0S,aAAaxN,EAAK2L,SAAUpE,EAAIzH,YAChBqL,EAAQ1G,QAAO,SAAA9I,GAAK,OAAAA,IAAMqE,EAAKsN,YAAU8C,MAAK,SAAAzU,GAAK,OAAAuE,EAAAA,WAAWmQ,UAAU1U,EAAGqE,EAAKsN,cAEhGtN,EAAKqP,wBAQHpE,EAAA7P,UAAAoT,eAAR,WAAA,IAAAxO,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WAE1B,GADArM,EAAKqP,oBACDrP,EAAKsN,SAAU,CACjB,IAAMxS,EAAIwR,SAASC,cAAc,OACjCzR,EAAE+S,UAAUC,IAAI,4BAChBhT,EAAE0S,aAAaxN,EAAK0L,SAAU1L,EAAKsN,SAASU,aAAahO,EAAK0L,WAC9D5Q,EAAE0S,aAAaxN,EAAK2L,SAAU3L,EAAKsN,SAASU,aAAahO,EAAK2L,WAC9D7Q,EAAE0S,aAAaxN,EAAK4L,YAAa5L,EAAKsN,SAASU,aAAahO,EAAK4L,cACjE9Q,EAAE0S,aAAaxN,EAAK6L,YAAa7L,EAAKsN,SAASU,aAAahO,EAAK6L,cACjE7L,EAAKgN,UAAUvF,cAAcgF,YAAY3R,QAKvCmQ,EAAA7P,UAAAiU,kBAAR,iBAEG,QAADpN,EADU/G,KAAK8R,UAAUvF,cAAcsH,cAAc,oCACpD,IAAA9M,GAAAA,EAAEmH,UAGE6B,EAAA7P,UAAA+R,UAAP,WAAA,IAAAnN,EAAA9E,KACEA,KAAKsQ,cAAe,EACpBtQ,KAAKyR,eACLzR,KAAKoL,IAAImB,cAAcoG,UAAUC,IAAI,mBACrC,IAAMwC,EAAKpV,KAAKoL,IAAImB,cACpB6I,EAAGzM,MAAM0M,YAAY,uBAA0BrV,KAAKgR,IAAM,QAAU,QAAM,QAE1E,IAAMsE,EAAU,4HAA0HtV,KAAKmQ,SAAWnQ,KAAKoQ,SAAO,cAAapQ,KAAKmQ,SAAWnQ,KAAKoQ,SAAO,wCAAuCpQ,KAAKgR,IAAMhR,KAAKoQ,QAAU,GAAC,YAAYpQ,KAAKmQ,SAAQ,aAAanQ,KAAKmQ,SAAQ,2BACpUiF,EAAGzM,MAAM0M,YAAY,mBAAoBC,GAEzB3V,MAAMqV,KAAKhV,KAAKoL,IAAImB,cAAc0I,iBAAiB,iBAC3DtL,SAAQ,SAAC0K,GACfA,EAAEH,iBAAiB,YAAapP,EAAKoN,UAAU5L,KAAKxB,IAAO,MAE7D9E,KAAKoL,IAAImB,cAAc2H,iBAAiB,YAAalU,KAAKqT,KAAK/M,KAAKtG,OAAO,GAC3EA,KAAKoL,IAAImB,cAAc2H,iBAAiB,UAAWlU,KAAK4T,QAAQtN,KAAKtG,OAAO,IAGvE+P,EAAA7P,UAAA8R,WAAP,WAAA,IAAAlN,EAAA9E,KACEA,KAAKoL,IAAImB,cAAcoG,UAAUzE,OAAO,mBAC7BlO,KAAKoL,IAAImB,cACjB5D,MAAMwK,eAAe,oBAExBnT,KAAKsQ,cAAe,EACJ3Q,MAAMqV,KAAKhV,KAAKoL,IAAImB,cAAc0I,iBAAiB,iBAC3DtL,SAAQ,SAAC0K,GACfA,EAAEkB,oBAAoB,YAAazQ,EAAKoN,UAAU5L,KAAKxB,IAAO,MAEhE9E,KAAKoL,IAAImB,cAAcgJ,oBAAoB,YAAavV,KAAKqT,KAAK/M,KAAKtG,OAAO,GAC9EA,KAAKoL,IAAImB,cAAcgJ,oBAAoB,UAAWvV,KAAK4T,QAAQtN,KAAKtG,OAAO,GAC/EA,KAAKyO,qBAIPsB,EAAA7P,UAAAsV,UAAA,SAAU3H,GAAV,IAAA/I,EAAA9E,KACEA,KAAKgQ,KAAKmB,mBAAkB,WAC1BrM,EAAKuL,UAAY,CACfjJ,WAAYyG,EAAOzG,WACnBvB,UAAWgI,EAAOhI,UAClB2B,MAAOqG,EAAOrG,MACd4E,IAAK,EACLC,IAAK,EACLH,MAAO2B,EAAO3B,MACdC,MAAO0B,EAAO1B,MACd9E,QAASwG,EAAOxG,QAChBL,MAAO6G,EAAO7G,OAEhBlC,EAAKsP,qBAAqBtP,EAAKuL,WAC/B,IAAMgE,EAAI,CACRjN,WAAYtC,EAAKuL,UAAUjJ,WAC3BvB,UAAWf,EAAKuL,UAAUxK,UAC1B2B,MAAO1C,EAAKuL,UAAU7I,MACtBH,QAASvC,EAAKuL,UAAUhJ,QACxBL,MAAOlC,EAAKuL,UAAUrJ,MACtBkF,MAAOpH,EAAKuL,UAAUnE,MACtBC,MAAOrH,EAAKuL,UAAUlE,MACtBC,IAAKtH,EAAKuL,UAAUjE,IACpBC,IAAKvH,EAAKuL,UAAUhE,KAEtBvH,EAAKmL,QAAQnM,KAAKuQ,GAClBvP,EAAKuL,UAAY,KACjBvL,EAAKkL,KAAKgE,KAAI,WACZlP,EAAKsD,IAAIoF,gBACT1I,EAAK2M,eACL3M,EAAK2J,oBACLwF,YAAW,WACTI,EAAY,SAAEhH,SAAS6F,QAAQgB,iBAAiB,YAAapP,EAAKoN,UAAU5L,KAAKxB,IAAO,KACvF,YAMTiL,EAAA7P,UAAAuV,eAAA,SAAepB,GAAf,IAAAvP,EAAA9E,KACEqU,EAAEnB,QAAQP,UAAUC,IAAI,oBAAqB,oBAC7CyB,EAAEnB,QAAQgB,iBAAiB,gBAAgB,WACzCpP,EAAKmL,QAAUnL,EAAKmL,QAAQ1G,QAAO,SAAC9I,GAAM,OAACA,EAAUiV,SAASnR,KAAQ8P,EAAEvN,OAAe4O,SAASnR,MAChGO,EAAKsD,IAAIoF,gBACT1I,EAAK2M,eACL3M,EAAK2J,wBAITsB,EAAA7P,UAAAyV,aAAA,SAAazT,GACXlC,KAAK8Q,aAAa/K,KAAK7D,IAGzB6N,EAAA7P,UAAA0V,UAAA,SAAU/L,EAAOC,WAKf,OAJqB,QAAjB/C,EAAC+C,EAAe,gBAAC,IAAA/C,OAAA,EAAAA,EAAExC,MACrBuF,EAAe,SAAI,GACnBA,EAAe,SAAEvF,GAAKS,EAAAA,WAAWC,UAEZ,QAAvB4F,EAAOf,EAAe,gBAAC,IAAAe,OAAA,EAAAA,EAAEtG,IAI3BwL,EAAA7P,UAAA2V,KAAA,SAAK5F,GAAL,IAAAnL,EAAA9E,KAEE,OADAA,KAAK2O,QACE,IAAIhN,SAAc,SAACC,EAASC,GACjC,GAAIoO,EAAS,CACX,IAAM6F,EAAkC,GACxC,GAAuB,iBAAZ7F,EACT,IACE6F,EAAchS,KAAIvB,MAAlBuT,EAAa1R,EAAS2R,KAAKC,MAAM/F,KACjC,MAAO9L,GACPtC,EAAO,kCAITiU,EAAchS,KAAIvB,MAAlBuT,EAAa1R,EAAS6L,IAExB,IAAIgG,GAAsB,EAmB1BA,EAAa9P,OAAOC,aAlBH,iBAEXtB,EAAKoL,cAAgBpL,EAAKoL,aAAavP,OAAS,IAClDmV,EAAcnM,SAAQ,SAAA0K,GACpB,IAAM6B,EAAQpR,EAAKoL,aAAa/G,MAAK,SAAA1I,GAAK,OAAAA,EAAE2G,aAAeiN,EAAEjN,cACzD8O,IACF7B,EAAExO,UAAYqQ,EAAMrQ,UAChBqQ,EAAMlP,QACRqN,EAAErN,MAAQ+O,KAAKC,MAAMD,KAAKI,UAAUD,EAAMlP,cAIhDD,EAAAjC,EAAKmL,SAAQnM,KAAIvB,MAAAwE,EAAA3C,EAAI0R,IACrB3P,OAAOI,cAAc0P,GACrBnR,EAAKsD,IAAIoF,gBACT5L,OAGsC,UAG1CA,QAKNmO,EAAA7P,UAAAyO,MAAA,WACM3O,KAAKiQ,QAAQtP,SACfX,KAAKiQ,QAAU,GACfjQ,KAAKoI,IAAIoF,gBACTxN,KAAKyO,sBAITsB,EAAA7P,UAAAkW,KAAA,WACE,IAAMC,EAAMrW,KAAKiQ,QAAQ3L,KAAI,SAAA7D,GAAK,MAAA,CAChC2G,WAAY3G,EAAE2G,WACdvB,UAAWpF,EAAEoF,UACb2B,MAAO/G,EAAE+G,MACT0E,MAAOzL,EAAEyL,MACTC,MAAO1L,EAAE0L,MACTC,IAAK3L,EAAE2L,IACPC,IAAK5L,EAAE4L,IACPhF,QAAS5G,EAAE4G,QACXL,MAAOvG,EAAEuG,UAEX,OAAOrF,QAAQC,QAAQmU,KAAKI,UAAUE,KAGxCtG,EAAA7P,UAAAmG,QAAA,WACErG,KAAKsW,YAAY3M,SAAQ,SAAAiG,GACvBA,EAAK/B,OAAOxH,cAIhB0J,EAAA7P,UAAAqW,sBAAA,SAAsBrU,GACpBlC,KAAKoI,IAAIoF,gBACTxN,KAAKyO,qBAGPsB,EAAA7P,UAAAsW,uBAAA,SAAuBtU,GACrBlC,KAAKoU,qBAAqBlS,EAAE4E,QAC5B9G,KAAKoI,IAAIoF,gBACTxN,KAAKyO,qBAICsB,EAAA7P,UAAAuO,kBAAR,WAAA,IAAA3J,EAAA9E,KACOA,KAAKyW,uBACRzW,KAAKyW,qBAAuB,IAAIC,EAAAA,WAChCA,EAAAA,WAAWvW,QAAO,SAAAwW,GAChB7R,EAAK2R,qBAAuBE,KAE3BC,KAAKC,EAAAA,aAAa,MAClBD,KAAKE,EAAAA,wBACLvR,WAAU,SAAA9E,GACTqE,EAAKgH,gBAAgB/F,KAAK,CACxBF,UAAWf,QAInB9E,KAAKyW,qBAAqBxU,KAAK,IAAI8U,gDA3atB9H,EAAAA,kBACC+H,EAAAA,cACDjN,EAAAA,qBA/Cf3J,EAAA,CADC4J,EAAAA,UAAU,6BACQiF,EAAAA,6CAGnB7O,EAAA,CADC6W,EAAAA,aAAa9L,mBACO+L,EAAAA,8CAKrB9W,EAAA,CADCkP,EAAAA,mEAIDlP,EAAA,CADCkP,EAAAA,gEAIDlP,EAAA,CADCkP,EAAAA,+DAeDlP,EAAA,CADCkP,EAAAA,sEAYDlP,EAAA,CADCmP,EAAAA,yBACgBpK,EAAAA,qDAGjB/E,EAAA,CADCmP,EAAAA,yBACapK,EAAAA,kDA7CH4K,EAAsB3P,EAAA,CARlC8J,EAAAA,UAAU,CACTyF,SAAU,kBACVxF,SAAA,6dAEAyF,KAAM,CAAEC,MAAO,mBACfzF,cAAeC,EAAAA,kBAAkBC,KACjCC,gBAAiBC,EAAAA,wBAAwBC,woHAkD1BwE,EAAAA,WACC+H,EAAAA,OACDjN,EAAAA,qBAlDJgG,oBCdT,SAAAoH,EAAsB/O,GAAtB,IAAAtD,EACIuD,EAAAzE,KAAA5D,KAAMoI,IAAIpI,YADQ8E,EAAAsD,IAAAA,EAPtBtD,EAAAsS,KAAe,EACftS,EAAAuS,KAAe,GAEfvS,EAAAwS,KAAe,EACfxS,EAAAyS,KAAe,KAuCnB,OAhDyDzX,EAAAqX,EAAA9O,GAgBrD8O,EAAAjX,UAAAoJ,SAAA,WACQ3J,MAAMqG,QAAQhG,KAAK+B,QACnB/B,KAAKkM,MAAQlM,KAAK+B,MAAM,GACxB/B,KAAKmM,MAAQnM,KAAK+B,MAAM,KAGxB/B,KAAKkM,MAAQ,EACblM,KAAKmM,MAAQ,IAIrBgL,EAAAjX,UAAAsX,qBAAA,SAAqBtV,GACjBlC,KAAKkM,MAAQhK,EAAEH,MAEX/B,KAAKmM,MAAQ,GACb9D,EAAAnI,UAAM+I,kBAAiBrF,KAAA5D,KAAC,CAACA,KAAKkM,MAAOlM,KAAKmM,SAIlDgL,EAAAjX,UAAAuX,qBAAA,SAAqBvV,GACjBlC,KAAKmM,MAAQjK,EAAEH,MACX/B,KAAKkM,MAAQ,GACb7D,EAAAnI,UAAM+I,kBAAiBrF,KAAA5D,KAAC,CAACA,KAAKkM,MAAOlM,KAAKmM,SAMlDgL,EAAAjX,UAAA0M,gBAAA,WACI5M,KAAK0X,kBAAkB3R,iDAjCAgE,EAAAA,qBAZlBoN,EAAmC/W,EAAA,CAH/C8J,EAAAA,UAAU,CACPC,SAAA,ufAc2BJ,EAAAA,qBAZlBoN,IAA4CQ,EAAAA,uCCoDrD,SAAAC,IACInT,EAAAA,aAAaoR,KAAK,KAAM,CACpBgC,eAAgB,CACZC,qBAAsB,0BACtBC,UAAW,sBAGnBtT,EAAAA,aAAaoR,KAAK,KAAM,CACpBgC,eAAgB,CACZC,qBAAsB,uBACtBC,UAAW,sBAM3B,OApBaH,EAAmBxX,EAAA,CAhC/B4X,EAAAA,SAAS,CACNC,QAAS,CACLC,EAAAA,aACAC,EAAAA,kBACAC,EAAAA,gBACAC,EAAAA,aACAC,EAAAA,wBACAC,EAAAA,aACAC,EAAAA,gBACAC,EAAAA,mBACAC,EAAAA,cACAC,EAAAA,iBACAC,EAAAA,iBACAC,EAAAA,gBACAC,EAAAA,kBACAC,EAAAA,iBACAC,EAAAA,iBACAC,EAAAA,aACAR,EAAAA,mBACAS,EAAAA,mBACAb,EAAAA,aAAac,SAAS,CAClB,CACItT,UAAWsR,EACXiC,KAAM,6BAIlBC,QAAS,CAACtJ,EAAwBuI,EAAAA,yBAClCgB,aAAc,CAACvJ,EAAwB5E,EAAuBhD,EAAyBwC,GACvF4O,gBAAiB,CAACpR,EAAyBwC,GAC3C6O,UAAW,gCAEF5B,mBCrCb,SAAA6B,KAEA,OAFaA,EAAgCrZ,EAAA,CAP5C4X,EAAAA,SAAS,CACNsB,aAAc,CAACnC,GACfc,QAAS,CAACC,EAAAA,aAAcwB,EAAAA,YAAaC,EAAAA,mBACrCN,QAAS,CAAClC,GACVoC,gBAAiB,CAACpC,GAClBqC,UAAW,MAEFC","sourcesContent":["/*! *****************************************************************************\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","import { EventEmitter } from '@angular/core';\r\nimport { AXValueEvent, AXBaseEvent, propertyEditor, AXDataEvent } from '@acorex/components';\r\nimport { AXHtmlUtil, AXTranslator } from '@acorex/core';\r\n\r\nexport interface AXWidgetConfig {\r\n uniqueName: string;\r\n component: any;\r\n title: string;\r\n sizeX: number;\r\n sizeY: number;\r\n col?: number;\r\n row?: number;\r\n options?: any;\r\n props?: any;\r\n}\r\n\r\nexport interface AXWidgetConfigChanged extends AXBaseEvent {\r\n config: AXWidgetConfig;\r\n}\r\n\r\n\r\n\r\nexport interface AXWidgetBoardConfigChanged extends AXBaseEvent {\r\n\r\n}\r\n\r\nexport interface AXWidgetConfigSavedEvent extends AXDataEvent<AXWidgetSaveAsData> {\r\n\r\n}\r\n\r\n\r\nexport interface AXWidgetSaveAsData {\r\n title?: string;\r\n description?: string;\r\n icon?: string;\r\n group?: string;\r\n //\r\n uniqueName: string;\r\n component: any;\r\n options?: any;\r\n props?: any;\r\n}\r\n\r\n// @dynamic\r\nexport abstract class AXWidgetComponent {\r\n\r\n readonly uid: string = AXHtmlUtil.getUID();\r\n provideValue: (e: any) => any;\r\n\r\n onBusyChanged: EventEmitter<AXValueEvent<boolean>> = new EventEmitter<AXValueEvent<boolean>>();\r\n\r\n private _isBusy: boolean = true;\r\n public get isBusy(): boolean {\r\n return this._isBusy;\r\n }\r\n public set isBusy(v: boolean) {\r\n if (v !== this._isBusy) {\r\n const eventData: AXValueEvent<boolean> = {\r\n component: this,\r\n oldValue: this._isBusy,\r\n value: v\r\n };\r\n this._isBusy = v;\r\n this.onBusyChanged.emit(eventData);\r\n }\r\n }\r\n\r\n @propertyEditor({\r\n editorClass: 'ax/editors/widget-size',\r\n title: 'common.size',\r\n visible: false,\r\n order: -99,\r\n })\r\n widgetSize: number[];\r\n\r\n @propertyEditor({\r\n editorClass: 'ax/editors/select',\r\n title: 'common.refresh-rate',\r\n visible: true,\r\n order: -98,\r\n editorOptions: {\r\n items: () => {\r\n return [1, 2, 3, 5, 10, 20, 30, 60].map(c => ({\r\n id: 60000 * c,\r\n text: AXTranslator.get('dateTime.duration.format_minute').replace('{0}', c.toString())\r\n }));\r\n },\r\n allowNull: false,\r\n allowSearch: false,\r\n selectionDataMode: 'value',\r\n selectionMode: 'single',\r\n valueField: 'id',\r\n }\r\n })\r\n refreshRate: any = [{\r\n id: 60000 * 5,\r\n text: AXTranslator.get('dateTime.duration.format_minute').replace('{0}', '5')\r\n }];\r\n\r\n // ???\r\n getRefreshRate() {\r\n return Array.isArray(this.refreshRate) && this.refreshRate.length ? this.refreshRate[0].id : this.refreshRate;\r\n }\r\n\r\n private intervalId: number;\r\n\r\n constructor() {\r\n this.onConfiguredChanged.subscribe(() => {\r\n if (this.isConfigured === true && this.getRefreshRate()) {\r\n this.restartRefreshTimer();\r\n }\r\n else {\r\n this.stopRefreshTimer();\r\n }\r\n });\r\n }\r\n\r\n\r\n private startRefreshTimer() {\r\n this.intervalId = window.setInterval(this.refresh.bind(this), this.getRefreshRate());\r\n }\r\n\r\n private stopRefreshTimer() {\r\n window.clearInterval(this.intervalId);\r\n }\r\n\r\n private restartRefreshTimer() {\r\n this.stopRefreshTimer();\r\n this.startRefreshTimer();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stopRefreshTimer();\r\n }\r\n\r\n public redraw() {\r\n\r\n }\r\n\r\n public refresh() {\r\n this.restartRefreshTimer();\r\n }\r\n\r\n onConfiguredChanged: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n get isConfigured(): boolean {\r\n return true;\r\n }\r\n\r\n public setValue(name: string, value?: any) {\r\n this[name] = value;\r\n this.onConfiguredChanged.emit();\r\n }\r\n\r\n public getValue(name: string): Promise<any> {\r\n const val = this[name];\r\n const config = this['__meta__'].config;\r\n const runtime = config.props[name]?.runtime;\r\n if (runtime && this.provideValue) {\r\n const res = this.provideValue({\r\n name,\r\n value: val,\r\n uniqueName: config.uniqueName,\r\n options: config.options,\r\n });\r\n if (this.provideValue instanceof Promise) {\r\n return res;\r\n }\r\n else {\r\n return Promise.resolve(res);\r\n }\r\n }\r\n return Promise.resolve(val);\r\n }\r\n\r\n}","import { Component, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild } from '@angular/core';\r\nimport { AXPropertyConfig, AXBasePopupPageComponent, AXMenuItemClickEvent, AXProperyEditorValueChangeEvent, AXValidationFormComponent } from '@acorex/components';\r\nimport { AXButtonItem, AXTranslator } from '@acorex/core';\r\nimport { AXWidgetComponent } from './widget.class';\r\n\r\n\r\n@Component({\r\n templateUrl: './widget-config.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class AXWidgetConfigComponent extends AXBasePopupPageComponent {\r\n\r\n @ViewChild(AXValidationFormComponent) form: AXValidationFormComponent;\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n\r\n widget: AXWidgetComponent;\r\n props: AXPropertyConfig[] = [];\r\n displayProps: AXPropertyConfig[] = [];\r\n\r\n\r\n changes: AXPropertyConfig[] = [];\r\n\r\n context: any = {};\r\n\r\n\r\n getFooterButtons(): AXButtonItem[] {\r\n return [\r\n {\r\n name: 'okay',\r\n submitBehavior: true,\r\n text: AXTranslator.get('common.confirm'),\r\n style: 'success'\r\n },\r\n {\r\n name: 'cancel',\r\n cancelBehavior: true,\r\n text: AXTranslator.get('common.cancel'),\r\n style: 'danger blank'\r\n }\r\n ];\r\n }\r\n\r\n\r\n\r\n\r\n\r\n onFooterButtonClick(e: AXMenuItemClickEvent) {\r\n if (e.name === 'cancel') {\r\n this.close();\r\n }\r\n if (e.name === 'okay') {\r\n this.form.validate().then(c => {\r\n if (c.result) {\r\n this.close(this.changes);\r\n }\r\n });\r\n }\r\n }\r\n\r\n handleValueChange(e: AXProperyEditorValueChangeEvent) {\r\n const prop = this.changes.find(c => c.property.name === e.property.name);\r\n if (prop) {\r\n prop.value = e.value;\r\n }\r\n else {\r\n this.changes.push({ property: e.property, value: e.value });\r\n }\r\n this.updateContext();\r\n }\r\n\r\n ngOnInit() {\r\n this.displayProps = this.props.filter(c => c.property.visible !== false).sort((a, b) => a.property.order - b.property.order);\r\n this.updateContext();\r\n }\r\n\r\n\r\n private updateContext() {\r\n const ctx = {};\r\n this.props.forEach(p => {\r\n ctx[p.property.name] = p.value;\r\n });\r\n this.changes.forEach(p => {\r\n ctx[p.property.name] = p.value;\r\n });\r\n this.context = ctx;\r\n }\r\n\r\n\r\n identify(index, item: AXPropertyConfig) {\r\n return item.property.name;\r\n }\r\n\r\n}","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n\r\n} from '@angular/core';\r\nimport { AXWidgetConfig, AXWidgetSaveAsData } from './widget.class';\r\nimport { AXButtonItem, AXHtmlUtil, AXObjectUtil, AXTranslator } from '@acorex/core';\r\nimport { AXPropertyConfig, AXMenuItemClickEvent, AXBasePopupPageComponent } from '@acorex/components';\r\n\r\n\r\n\r\n@Component({\r\n templateUrl: \"./widget-save.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AXWidgetSaveComponent extends AXBasePopupPageComponent {\r\n config: AXWidgetConfig;\r\n props: AXPropertyConfig[] = [];\r\n displayProps: { name: string, title: string, allow: boolean }[];\r\n\r\n data: AXWidgetSaveAsData;\r\n\r\n getFooterButtons(): AXButtonItem[] {\r\n return [\r\n {\r\n name: 'okay',\r\n submitBehavior: true,\r\n text: AXTranslator.get('common.confirm'),\r\n style: 'ax success'\r\n },\r\n {\r\n name: 'cancel',\r\n cancelBehavior: true,\r\n text: AXTranslator.get('common.cancel'),\r\n style: 'ax light'\r\n }\r\n ];\r\n }\r\n\r\n ngOnInit() {\r\n const titleProp = this.props.find(c => c.property.name === 'title' || c.property.name === 'name');\r\n const title = titleProp?.value || this.config.title;\r\n const pp: any = {};\r\n this.props?.forEach(c => {\r\n pp[c.property.name] = c.property;\r\n });\r\n this.data = {\r\n component: this.config.component,\r\n title,\r\n uniqueName: `${this.config.uniqueName}-${AXHtmlUtil.getUID()}`,\r\n options: AXObjectUtil.deepJSONClone(this.config.options),\r\n props: AXObjectUtil.deepJSONClone(pp)\r\n };\r\n this.displayProps = this.props\r\n .filter(c => c.property.visible !== false)\r\n .sort((a, b) => a.property.order - b.property.order)\r\n .map(c => ({\r\n name: c.property.name,\r\n title: c.property.title,\r\n allow: true\r\n }));\r\n }\r\n\r\n\r\n\r\n onFooterButtonClick(e: AXMenuItemClickEvent) {\r\n if (e.name === 'cancel') {\r\n this.close();\r\n }\r\n if (e.name === 'okay') {\r\n this.props.forEach(p => {\r\n const pp = this.displayProps.find(c => c.name === p.property.name);\r\n if (pp == null || !pp.allow) {\r\n let ppp = this.data.props[p.property.name];\r\n if (ppp) {\r\n ppp.visible = false;\r\n }\r\n else {\r\n ppp = { visible: false };\r\n }\r\n }\r\n });\r\n this.close(this.data);\r\n }\r\n }\r\n}","import {\r\n Component,\r\n ViewEncapsulation, Input,\r\n ElementRef, HostBinding, ComponentFactoryResolver, ViewChild,\r\n ViewContainerRef, Output, EventEmitter, ChangeDetectionStrategy,\r\n ChangeDetectorRef, ComponentRef\r\n} from '@angular/core';\r\nimport { AXWidgetConfig, AXWidgetComponent, AXWidgetConfigChanged, AXWidgetConfigSavedEvent } from './widget.class';\r\nimport { AXObjectUtil, AXRenderService } from '@acorex/core';\r\nimport { AXPopupService, AXPropertyDecorators, AXPropertyDecorator, AXLoadingService } from '@acorex/components';\r\nimport { AXWidgetConfigComponent } from './widget-config.component';\r\nimport { AXMenuItem } from '@acorex/core';\r\nimport { AXTranslator } from '@acorex/core';\r\nimport { AXWidgetSaveComponent } from './widget-save.component';\r\n\r\n\r\n\r\n\r\n\r\n@Component({\r\n selector: 'ax-widget-host',\r\n templateUrl: \"./widget-host.component.html\",\r\n host: { class: 'ax widget-host', tabindex: '0' },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class AXWidgetHostComponent {\r\n\r\n private _widget: AXWidgetComponent;\r\n public get widget(): AXWidgetComponent {\r\n return this._widget;\r\n }\r\n\r\n _hasProps: boolean = false;\r\n\r\n\r\n _hasMenu: boolean = false;\r\n\r\n @Input()\r\n provideValue: (e: any) => any;\r\n\r\n\r\n get element(): HTMLDivElement {\r\n return this.ref.nativeElement;\r\n }\r\n\r\n\r\n configMenuItem: AXMenuItem[] = [\r\n {\r\n icon: 'far fa-ellipsis-h',\r\n items: []\r\n }\r\n ];\r\n\r\n\r\n @Output()\r\n onRemove: EventEmitter<AXWidgetHostComponent> = new EventEmitter<AXWidgetHostComponent>();\r\n\r\n @Output()\r\n onConfigChanged: EventEmitter<AXWidgetConfigChanged> = new EventEmitter<AXWidgetConfigChanged>();\r\n\r\n\r\n @Output()\r\n onResized: EventEmitter<AXWidgetConfigChanged> = new EventEmitter<AXWidgetConfigChanged>();\r\n\r\n @Output()\r\n onSave: EventEmitter<AXWidgetConfigSavedEvent> = new EventEmitter<AXWidgetConfigSavedEvent>();\r\n\r\n @Input()\r\n config: AXWidgetConfig;\r\n\r\n @ViewChild('vc', { read: ViewContainerRef })\r\n vc: ViewContainerRef;\r\n\r\n private componentRef: ComponentRef<any>;\r\n //private isLoading: boolean = true;\r\n\r\n // get isBusy() {\r\n // return this._widget?.isBusy || this.isLoading;\r\n // }\r\n\r\n\r\n private _loadingId: number;\r\n\r\n private _isLoading: boolean = false;\r\n public get isLoading(): boolean {\r\n return this._isLoading;\r\n }\r\n public set isLoading(v: boolean) {\r\n this._isLoading = v;\r\n if (this._loadingId && !v) {\r\n this.loadingService.hide(this._loadingId);\r\n this._loadingId = null;\r\n }\r\n if (v) {\r\n this._loadingId = this.loadingService.show(this.ref.nativeElement);\r\n }\r\n }\r\n\r\n\r\n get isConfigured(): boolean {\r\n return this._widget?.isConfigured || false;\r\n }\r\n\r\n\r\n constructor(\r\n private ref: ElementRef<HTMLDivElement>,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private rendererService: AXRenderService,\r\n private cdr: ChangeDetectorRef,\r\n private popup: AXPopupService,\r\n private loadingService: AXLoadingService\r\n\r\n ) {\r\n\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.isLoading = true;\r\n }\r\n\r\n\r\n async ngAfterViewInit() {\r\n let component: any;\r\n if (typeof this.config.component === 'string') {\r\n const route = await this.rendererService.findLoadedComponentByRoute(this.config.component, 20);\r\n component = route?.component;\r\n }\r\n else if (typeof this.config.component === 'function') {\r\n component = this.config.component;\r\n }\r\n if (component == null) {\r\n console.error(`Invalid Widget Component!`, this.config);\r\n this.onRemove.emit(this);\r\n return;\r\n }\r\n\r\n const widgetFactory = this.componentFactoryResolver.resolveComponentFactory(component);\r\n this.componentRef = this.vc.createComponent(widgetFactory);\r\n this._widget = this.componentRef.instance as AXWidgetComponent;\r\n this._widget.provideValue = this.provideValue;\r\n if (this._widget.onBusyChanged) {\r\n this._widget.onBusyChanged.subscribe((d) => {\r\n if (!this._widget.widgetSize) {\r\n this._widget.setValue('widgetSize', [this.sizeX, this.sizeY]);\r\n }\r\n else {\r\n this.setSizeFromOptions();\r\n }\r\n this.isLoading = d.value;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n if (this._widget.onConfiguredChanged) {\r\n this._widget.onConfiguredChanged.subscribe(() => {\r\n this.setSizeFromOptions();\r\n });\r\n }\r\n //\r\n if (this.config.options) {\r\n Object.assign(this._widget, this.config.options);\r\n }\r\n this._hasProps = AXPropertyDecorators.getProperties(this._widget).length > 0;\r\n\r\n this.isLoading = false;\r\n this.config['__meta__'].instance = this;\r\n this._widget['__meta__'] = {};\r\n this._widget['__meta__'].config = this.config;\r\n //\r\n this.configMenuItem[0].items.push({\r\n name: 'refresh',\r\n icon: 'far fa-undo',\r\n text: AXTranslator.get('common.refresh'),\r\n onClick: () => {\r\n this?.widget?.refresh();\r\n }\r\n });\r\n //\r\n if (this._hasProps) {\r\n this.configMenuItem[0].items.push({\r\n name: 'configs',\r\n icon: 'far fa-cogs',\r\n text: AXTranslator.get('common.configs'),\r\n onClick: () => {\r\n this.openConfigDialog();\r\n }\r\n });\r\n }\r\n this.configMenuItem[0].items.push({\r\n name: 'save',\r\n icon: 'far fa-save',\r\n text: AXTranslator.get('common.save-as'),\r\n onClick: () => {\r\n this.openSaveDialog();\r\n }\r\n });\r\n if (true) {\r\n this.configMenuItem[0].items.push({\r\n name: 'remove',\r\n icon: 'far fa-times',\r\n style: 'ax danger blank',\r\n text: AXTranslator.get('common.remove'),\r\n onClick: () => {\r\n this.onRemove.emit(this);\r\n }\r\n });\r\n }\r\n this._hasMenu = this.configMenuItem[0].items.length > 0;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n @HostBinding('attr.data-size-x')\r\n @Input()\r\n sizeX: number = 1;\r\n\r\n @HostBinding('attr.data-size-y')\r\n @Input()\r\n sizeY: number = 1;\r\n\r\n @HostBinding('attr.data-col')\r\n @Input()\r\n col: number = 1;\r\n\r\n\r\n @HostBinding('attr.data-row')\r\n @Input()\r\n row: number = 1;\r\n\r\n\r\n private setSizeFromOptions() {\r\n this._widget.getValue('widgetSize').then(c => {\r\n const oldSizeX = this.sizeX;\r\n const oldSizeY = this.sizeY;\r\n if (c && Array.isArray(c) && (oldSizeX !== c[0] || oldSizeY !== c[1])) {\r\n this.config.sizeX = this.sizeX = c[0];\r\n this.config.sizeY = this.sizeY = c[1];\r\n this.onResized.emit({\r\n component: this._widget,\r\n config: this.config\r\n });\r\n }\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n remove(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.onRemove.emit(this);\r\n return false;\r\n }\r\n\r\n handleConfig(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.openConfigDialog();\r\n return false;\r\n }\r\n\r\n private openConfigDialog() {\r\n const ppp = this.getMergedProps();\r\n this.popup.open(AXWidgetConfigComponent, {\r\n title: AXTranslator.get('common.configs'),\r\n size: 'sm',\r\n data: {\r\n props: ppp.map(c => ({ property: c.options, value: this._widget[c.options.name] })),\r\n widget: this.widget\r\n }\r\n }).then(c => {\r\n if (c.data) {\r\n if (!this.config.options) {\r\n this.config.options = {};\r\n }\r\n c.data.forEach(p => {\r\n this._widget.setValue(p.property.name, p.value);\r\n this.config.options[p.property.name] = p.value;\r\n });\r\n this.emitConfigChanged();\r\n this._widget.redraw();\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n private openSaveDialog() {\r\n const ppp = this.getMergedProps();\r\n this.popup.open(AXWidgetSaveComponent, {\r\n title: AXTranslator.get('common.save-as'),\r\n size: 'sm',\r\n data: {\r\n config: this.config,\r\n props: ppp.map(c => ({ property: c.options, value: this._widget[c.options.name] }))\r\n }\r\n }).then(c => {\r\n if (c.data) {\r\n this.onSave.emit({\r\n component: this._widget,\r\n data: c.data\r\n });\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n handleOptionClick(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.openConfigDialog();\r\n return false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.vc.clear();\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n }\r\n }\r\n\r\n private getMergedProps(): AXPropertyDecorator[] {\r\n const ppp = AXObjectUtil.deepCopy(AXPropertyDecorators.getProperties(this._widget)) as AXPropertyDecorator[];\r\n for (const key in this.config.props) {\r\n if (Object.prototype.hasOwnProperty.call(this.config.props, key)) {\r\n const newP = this.config.props[key];\r\n const existPropDec = ppp.find(p => p.property === key);\r\n if (existPropDec) {\r\n Object.assign(existPropDec.options, newP);\r\n }\r\n }\r\n }\r\n return ppp;\r\n }\r\n\r\n private emitConfigChanged() {\r\n this.onConfigChanged.emit({\r\n component: this._widget,\r\n config: this.config\r\n });\r\n }\r\n\r\n}","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewEncapsulation,\r\n ElementRef,\r\n ViewChild,\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Output,\r\n EventEmitter, ViewChildren, QueryList\r\n} from '@angular/core';\r\nimport {\r\n AXWidgetConfig,\r\n AXWidgetConfigChanged,\r\n AXWidgetBoardConfigChanged,\r\n AXWidgetConfigSavedEvent\r\n} from './widget.class';\r\nimport { AXWidgetHostComponent } from './widget-host.component';\r\nimport { AXHtmlUtil, AXClientRec } from '@acorex/core';\r\nimport { Observable } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'ax-widget-board',\r\n templateUrl: './widget-board.component.html',\r\n styleUrls: ['./widget-board.component.scss'],\r\n host: { class: 'ax widget-board' },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AXWidgetBoardComponent implements OnInit {\r\n\r\n @ViewChild('container')\r\n private container: ElementRef<HTMLDivElement>;\r\n\r\n @ViewChildren(AXWidgetHostComponent)\r\n private widgetHosts: QueryList<AXWidgetHostComponent>;\r\n\r\n widgets: AXWidgetConfig[] = [];\r\n\r\n @Input()\r\n galleryItems: AXWidgetConfig[] = [];\r\n\r\n @Input()\r\n tileSize: number = 80;\r\n\r\n @Input()\r\n gapSize: number = 5;\r\n\r\n private newWidget: AXWidgetConfig = null;\r\n\r\n public rtl: boolean;\r\n\r\n private _isInEditing: boolean = false;\r\n public isInEditing(): boolean {\r\n return this._isInEditing;\r\n }\r\n private isDragging: boolean = false;\r\n private dragItem: HTMLElement;\r\n\r\n @Input()\r\n provideValue: (e: any) => any;\r\n\r\n private readonly DATA_COL = 'data-col';\r\n private readonly DATA_ROW = 'data-row';\r\n private readonly DATA_SIZE_X = 'data-size-x';\r\n private readonly DATA_SIZE_Y = 'data-size-y';\r\n private readonly DATA_OLD_COL = 'data-old-col';\r\n private readonly DATA_OLD_ROW = 'data-old-row';\r\n\r\n\r\n @Output()\r\n onConfigChanged: EventEmitter<AXWidgetBoardConfigChanged> = new EventEmitter<AXWidgetBoardConfigChanged>();\r\n\r\n @Output()\r\n onWidgetSave: EventEmitter<AXWidgetConfigSavedEvent> = new EventEmitter<AXWidgetConfigSavedEvent>();\r\n\r\n constructor(\r\n private ref: ElementRef<HTMLDivElement>,\r\n private zone: NgZone,\r\n private cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n\r\n ngOnInit() {\r\n if (this.rtl == null) {\r\n this.rtl = window.getComputedStyle(this.ref.nativeElement, null).getPropertyValue('direction') === 'rtl';\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.zone.runOutsideAngular((c) => {\r\n const style = document.createElement('style');\r\n style.type = 'text/css';\r\n this.ref.nativeElement.appendChild(style);\r\n // add css data classes\r\n for (let i = 1; i <= 50; i++) {\r\n style.innerHTML += `[${this.DATA_COL}=\"${i}\"] { ${this.rtl ? 'right' : 'left'}: ${(i - 1) * (this.tileSize + this.gapSize)}px; }`;\r\n style.innerHTML += `[${this.DATA_ROW}=\"${i}\"] { top: ${(i - 1) * (this.tileSize + this.gapSize)}px; }`;\r\n style.innerHTML += `[${this.DATA_SIZE_X}=\"${i}\"] { width: ${(i * this.tileSize) + ((i - 1) * this.gapSize)}px; }`;\r\n style.innerHTML += `[${this.DATA_SIZE_Y}=\"${i}\"] { height: ${(i * this.tileSize) + ((i - 1) * this.gapSize)}px; }`;\r\n }\r\n });\r\n }\r\n\r\n private calcGridSize() {\r\n this.zone.runOutsideAngular(() => {\r\n const width =\r\n (Math.max(...this.widgets.map((c) => c.col + c.sizeX - 1))) * (this.tileSize + this.gapSize);\r\n const height =\r\n (Math.max(...this.widgets.map((c) => c.row + c.sizeY - 1))) * (this.tileSize + this.gapSize);\r\n this.container.nativeElement.style.width = width + 'px';\r\n this.container.nativeElement.style.height = height + 'px';\r\n });\r\n }\r\n\r\n toggleEdit() {\r\n this._isInEditing ? this.finishEdit() : this.startEdit();\r\n }\r\n\r\n\r\n\r\n private dragStart(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.zone.runOutsideAngular(() => {\r\n if (this._isInEditing && e.which === 1) {\r\n this.dragItem = e.currentTarget as any;\r\n this.dragItem.setAttribute('data-x-offset', (this.dragItem.offsetLeft - e.clientX).toString());\r\n //\r\n this.dragItem.setAttribute('data-y-offset', (this.dragItem.offsetTop - e.clientY).toString());\r\n this.dragItem.classList.add('widget-dragging');\r\n this.dragItem.classList.remove('animate__animated', 'animate__pulse');\r\n }\r\n });\r\n return false;\r\n }\r\n\r\n removePositionData() {\r\n this.zone.runOutsideAngular(() => {\r\n if (this.dragItem && this._isInEditing && this.dragItem.getAttribute(this.DATA_OLD_COL) == null) {\r\n this.dragItem.setAttribute(this.DATA_OLD_COL, this.dragItem.getAttribute(this.DATA_COL));\r\n this.dragItem.setAttribute(this.DATA_OLD_ROW, this.dragItem.getAttribute(this.DATA_ROW));\r\n this.dragItem.removeAttribute(this.DATA_COL);\r\n this.dragItem.removeAttribute(this.DATA_ROW);\r\n }\r\n });\r\n }\r\n\r\n resetPositionData() {\r\n this.zone.runOutsideAngular(() => {\r\n if (this.dragItem && this._isInEditing) {\r\n this.setPosition(this.dragItem, this.dragItem.getAttribute(this.DATA_OLD_COL), this.dragItem.getAttribute(this.DATA_OLD_ROW));\r\n }\r\n });\r\n }\r\n\r\n private setPosition(element: HTMLElement, col: string, row: string) {\r\n this.zone.runOutsideAngular(() => {\r\n element.setAttribute(this.DATA_COL, col);\r\n element.setAttribute(this.DATA_ROW, row);\r\n element.removeAttribute(this.DATA_OLD_COL);\r\n element.removeAttribute(this.DATA_OLD_ROW);\r\n element.style.removeProperty('top');\r\n element.style.removeProperty('left');\r\n const widget = this.widgets.find(c => c['__meta__'].instance.element === element);\r\n widget.col = Number(col);\r\n widget.row = Number(row);\r\n });\r\n }\r\n\r\n private drag(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.zone.runOutsideAngular(() => {\r\n if (this.dragItem && this._isInEditing) {\r\n this.isDragging = true;\r\n this.addPlaceholder();\r\n const xOffset = Number(this.dragItem.getAttribute('data-x-offset'));\r\n const yOffset = Number(this.dragItem.getAttribute('data-y-offset'));\r\n this.dragItem.style.left = e.clientX + xOffset + 'px';\r\n this.dragItem.style.top = e.clientY + yOffset + 'px';\r\n //\r\n this.detectBestPlacement();\r\n this.removePositionData();\r\n }\r\n });\r\n return false;\r\n }\r\n\r\n private dragEnd(e) {\r\n this.zone.runOutsideAngular(() => {\r\n if (this.dragItem && this._isInEditing && this.isDragging) {\r\n this.dragItem.classList.remove('widget-dragging');\r\n this.dragItem.classList.add('animate__animated', 'animate__pulse');\r\n //\r\n const p = this.container.nativeElement.querySelector('.widget-blank-placeholder');\r\n if (this.newWidget) {\r\n const w = {\r\n uniqueName: this.newWidget.uniqueName,\r\n component: this.newWidget.component,\r\n title: this.newWidget.title,\r\n options: this.newWidget.options,\r\n sizeX: this.newWidget.sizeX,\r\n sizeY: this.newWidget.sizeY,\r\n col: Number(p.getAttribute(this.DATA_COL)),\r\n row: Number(p.getAttribute(this.DATA_ROW))\r\n };\r\n\r\n this.widgets.push(w);\r\n this.newWidget = null;\r\n this.container.nativeElement.removeChild(this.dragItem);\r\n this.zone.run(() => {\r\n this.cdr.detectChanges();\r\n this.calcGridSize();\r\n setTimeout(() => {\r\n w['__meta__'].instance.element.addEventListener('mousedown', this.dragStart.bind(this), false);\r\n }, 1000);\r\n });\r\n } else {\r\n if (p) {\r\n this.setPosition(this.dragItem, p.getAttribute(this.DATA_COL), p.getAttribute(this.DATA_ROW));\r\n }\r\n else {\r\n this.setPosition(this.dragItem, this.dragItem.getAttribute(this.DATA_OLD_COL), this.dragItem.getAttribute(this.DATA_OLD_ROW));\r\n }\r\n }\r\n //\r\n this.removePlaceholder();\r\n this.dragItem = null;\r\n this.calcGridSize();\r\n this.emitConfigChanged();\r\n }\r\n this.isDragging = false;\r\n });\r\n }\r\n\r\n private detectFirstEmptySlot(w: AXWidgetConfig) {\r\n const xTile = Math.floor(this.ref.nativeElement.parentElement.offsetWidth / this.tileSize);\r\n for (let j = 1; j <= 100; j++) {\r\n for (let i = 1; i <= xTile - w.sizeX; i++) {\r\n const rec = new AXClientRec({\r\n left: i,\r\n top: j,\r\n width: w.sizeX,\r\n height: w.sizeY\r\n });\r\n const el = this.widgets.filter(c => c !== w).find((c) =>\r\n rec.intersect({\r\n left: c.col,\r\n top: c.row,\r\n width: c.sizeX,\r\n height: c.sizeY\r\n })\r\n );\r\n if (el == null) {\r\n w.col = i;\r\n w.row = j;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private detectBestPlacement() {\r\n this.zone.runOutsideAngular(() => {\r\n const p = this.container.nativeElement.querySelector('.widget-blank-placeholder') as HTMLElement;\r\n let col = Math.ceil(this.dragItem.offsetLeft / this.tileSize);\r\n if (this.rtl) {\r\n col = Math.ceil((this.container.nativeElement.clientWidth - (this.dragItem.offsetLeft + this.dragItem.clientWidth)) / this.tileSize);\r\n }\r\n\r\n let row = Math.ceil(this.dragItem.offsetTop / this.tileSize);\r\n if (col < 1) {\r\n col = 1;\r\n }\r\n if (row < 1) {\r\n row = 1;\r\n }\r\n const widgets = Array.from(this.ref.nativeElement.querySelectorAll('.widget-host')).map((c) => c as HTMLElement);\r\n p.setAttribute(this.DATA_COL, col.toString());\r\n p.setAttribute(this.DATA_ROW, row.toString());\r\n const collision = widgets.filter(c => c !== this.dragItem).some(c => AXHtmlUtil.collision(c, this.dragItem));\r\n if (collision) {\r\n this.removePlaceholder();\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n private addPlaceholder() {\r\n this.zone.runOutsideAngular(() => {\r\n this.removePlaceholder();\r\n if (this.dragItem) {\r\n const p = document.createElement('div');\r\n p.classList.add('widget-blank-placeholder');\r\n p.setAttribute(this.DATA_COL, this.dragItem.getAttribute(this.DATA_COL));\r\n p.setAttribute(this.DATA_ROW, this.dragItem.getAttribute(this.DATA_ROW));\r\n p.setAttribute(this.DATA_SIZE_X, this.dragItem.getAttribute(this.DATA_SIZE_X));\r\n p.setAttribute(this.DATA_SIZE_Y, this.dragItem.getAttribute(this.DATA_SIZE_Y));\r\n this.container.nativeElement.appendChild(p);\r\n }\r\n });\r\n }\r\n\r\n private removePlaceholder() {\r\n const p = this.container.nativeElement.querySelector('.widget-blank-placeholder');\r\n p?.remove();\r\n }\r\n\r\n public startEdit() {\r\n this._isInEditing = true;\r\n this.calcGridSize();\r\n this.ref.nativeElement.classList.add('grid-background');\r\n const bg = this.ref.nativeElement as HTMLDivElement;\r\n bg.style.setProperty('background-position', `${this.rtl ? 'right' : 'left'} top`);\r\n // tslint:disable-next-line: max-line-length\r\n const pattern = `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"${this.tileSize + this.gapSize}\" height=\"${this.tileSize + this.gapSize}\"> <rect style=\"fill: %23dadada\" x=\"${this.rtl ? this.gapSize : 0}\" width=\"${this.tileSize}\" height=\"${this.tileSize}\" y=\"0\"></rect></svg>')`;\r\n bg.style.setProperty('background-image', pattern);\r\n //\r\n const widgets = Array.from(this.ref.nativeElement.querySelectorAll('.widget-host'));\r\n widgets.forEach((w) => {\r\n w.addEventListener('mousedown', this.dragStart.bind(this), false);\r\n });\r\n this.ref.nativeElement.addEventListener('mousemove', this.drag.bind(this), false);\r\n this.ref.nativeElement.addEventListener('mouseup', this.dragEnd.bind(this), false);\r\n }\r\n\r\n public finishEdit() {\r\n this.ref.nativeElement.classList.remove('grid-background');\r\n const bg = this.ref.nativeElement as HTMLDivElement;\r\n bg.style.removeProperty('background-image');\r\n //\r\n this._isInEditing = false;\r\n const widgets = Array.from(this.ref.nativeElement.querySelectorAll('.widget-host'));\r\n widgets.forEach((w) => {\r\n w.removeEventListener('mousedown', this.dragStart.bind(this), false);\r\n });\r\n this.ref.nativeElement.removeEventListener('mousemove', this.drag.bind(this), false);\r\n this.ref.nativeElement.removeEventListener('mouseup', this.dragEnd.bind(this), false);\r\n this.emitConfigChanged();\r\n }\r\n\r\n\r\n addWidget(widget: AXWidgetConfig) {\r\n this.zone.runOutsideAngular(() => {\r\n this.newWidget = {\r\n uniqueName: widget.uniqueName,\r\n component: widget.component,\r\n title: widget.title,\r\n col: 1,\r\n row: 1,\r\n sizeX: widget.sizeX,\r\n sizeY: widget.sizeY,\r\n options: widget.options,\r\n props: widget.props\r\n };\r\n this.detectFirstEmptySlot(this.newWidget);\r\n const w = {\r\n uniqueName: this.newWidget.uniqueName,\r\n component: this.newWidget.component,\r\n title: this.newWidget.title,\r\n options: this.newWidget.options,\r\n props: this.newWidget.props,\r\n sizeX: this.newWidget.sizeX,\r\n sizeY: this.newWidget.sizeY,\r\n col: this.newWidget.col,\r\n row: this.newWidget.row\r\n };\r\n this.widgets.push(w);\r\n this.newWidget = null;\r\n this.zone.run(() => {\r\n this.cdr.detectChanges();\r\n this.calcGridSize();\r\n this.emitConfigChanged();\r\n setTimeout(() => {\r\n w['__meta__'].instance.element.addEventListener('mousedown', this.dragStart.bind(this), false);\r\n }, 1000);\r\n });\r\n });\r\n }\r\n\r\n\r\n handleOnRemove(w: AXWidgetHostComponent) {\r\n w.element.classList.add('animate__animated', 'animate__zoomOut');\r\n w.element.addEventListener('animationend', () => {\r\n this.widgets = this.widgets.filter((c) => (c as any).__meta__.id !== (w.config as any).__meta__.id);\r\n this.cdr.detectChanges();\r\n this.calcGridSize();\r\n this.emitConfigChanged();\r\n });\r\n }\r\n\r\n handleOnSave(e: AXWidgetConfigSavedEvent) {\r\n this.onWidgetSave.emit(e);\r\n }\r\n\r\n trackByFn(index, item) {\r\n if (!item['__meta__']?.id) {\r\n item['__meta__'] = {};\r\n item['__meta__'].id = AXHtmlUtil.getUID();\r\n }\r\n return item['__meta__']?.id;\r\n }\r\n\r\n\r\n load(widgets: string | AXWidgetConfig[]): Promise<void> {\r\n this.clear();\r\n return new Promise<void>((resolve, reject) => {\r\n if (widgets) {\r\n const loadedWidgets: AXWidgetConfig[] = [];\r\n if (typeof widgets === 'string') {\r\n try {\r\n loadedWidgets.push(...JSON.parse(widgets));\r\n } catch (error) {\r\n reject('Invalid widget json data!');\r\n }\r\n }\r\n else {\r\n loadedWidgets.push(...widgets);\r\n }\r\n let intervalId: number = -1;\r\n const loadFunc = () => {\r\n\r\n if (this.galleryItems && this.galleryItems.length > 0) {\r\n loadedWidgets.forEach(w => {\r\n const gitem = this.galleryItems.find(c => c.uniqueName === w.uniqueName);\r\n if (gitem) {\r\n w.component = gitem.component;\r\n if (gitem.props) {\r\n w.props = JSON.parse(JSON.stringify(gitem.props));\r\n }\r\n }\r\n });\r\n this.widgets.push(...loadedWidgets);\r\n window.clearInterval(intervalId);\r\n this.cdr.detectChanges();\r\n resolve();\r\n }\r\n };\r\n intervalId = window.setInterval(loadFunc, 200);\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n clear() {\r\n if (this.widgets.length) {\r\n this.widgets = [];\r\n this.cdr.detectChanges();\r\n this.emitConfigChanged();\r\n }\r\n }\r\n\r\n save(): Promise<string> {\r\n const obj = this.widgets.map(c => ({\r\n uniqueName: c.uniqueName,\r\n component: c.component,\r\n title: c.title,\r\n sizeX: c.sizeX,\r\n sizeY: c.sizeY,\r\n col: c.col,\r\n row: c.row,\r\n options: c.options,\r\n props: c.props\r\n }));\r\n return Promise.resolve(JSON.stringify(obj));\r\n }\r\n\r\n refresh() {\r\n this.widgetHosts.forEach(host => {\r\n host.widget.refresh();\r\n });\r\n }\r\n\r\n handleOnConfigChanged(e: AXWidgetConfigChanged) {\r\n this.cdr.detectChanges();\r\n this.emitConfigChanged();\r\n }\r\n\r\n handleOnResizedChanged(e: AXWidgetConfigChanged) {\r\n this.detectFirstEmptySlot(e.config);\r\n this.cdr.detectChanges();\r\n this.emitConfigChanged();\r\n }\r\n\r\n private resizeChangeObserver: any;\r\n private emitConfigChanged() {\r\n if (!this.resizeChangeObserver) {\r\n this.resizeChangeObserver = new Observable();\r\n Observable.create(observer => {\r\n this.resizeChangeObserver = observer;\r\n })\r\n .pipe(debounceTime(750))\r\n .pipe(distinctUntilChanged())\r\n .subscribe(c => {\r\n this.onConfigChanged.emit({\r\n component: this\r\n });\r\n });\r\n }\r\n this.resizeChangeObserver.next(new Date());\r\n }\r\n}\r\n","import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\r\nimport { AXProperyEditorComponent } from '@acorex/components';\r\n\r\n@Component({\r\n templateUrl: './widget-size.editor.html'\r\n})\r\nexport class AXWidgetSizePropertyEditorComponent extends AXProperyEditorComponent<number[]> {\r\n\r\n sizeX: number;\r\n sizeY: number;\r\n\r\n minX: number = 1;\r\n maxX: number = 10;\r\n\r\n minY: number = 1;\r\n maxY: number = 10;\r\n\r\n\r\n constructor(protected cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n }\r\n\r\n ngOnInit() {\r\n if (Array.isArray(this.value)) {\r\n this.sizeX = this.value[0];\r\n this.sizeY = this.value[1];\r\n }\r\n else {\r\n this.sizeX = 2;\r\n this.sizeY = 2;\r\n }\r\n }\r\n\r\n handleMinValueChange(e: any) {\r\n this.sizeX = e.value;\r\n\r\n if (this.sizeY > 0) {\r\n super.handleValueChange([this.sizeX, this.sizeY]);\r\n }\r\n }\r\n\r\n handleMaxValueChange(e: any) {\r\n this.sizeY = e.value;\r\n if (this.sizeX > 0) {\r\n super.handleValueChange([this.sizeX, this.sizeY]);\r\n }\r\n }\r\n\r\n\r\n\r\n ngAfterViewInit() {\r\n this.onRenderCompleted.emit();\r\n }\r\n\r\n}","import { NgModule } from '@angular/core';\r\nimport { AXWidgetBoardComponent } from './widget-board.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AXWidgetHostComponent } from './widget-host.component';\r\nimport {\r\n AXSearchBoxModule,\r\n AXLoadingModule,\r\n AXProppertyEditorModule,\r\n AXPageModule, AXLabelModule,\r\n AXToolbarModule,\r\n AXTabStripModule,\r\n AXMenuModule,\r\n AXFormGroupModule,\r\n AXTextAreaModule, AXTextBoxModule, AXFieldsetModule, AXCheckBoxModule, AXValidationModule\r\n} from '@acorex/components';\r\nimport { RouterModule } from '@angular/router';\r\nimport { AXWidgetConfigComponent } from './widget-config.component';\r\nimport { AXTranslator, AXTranslatorModule } from '@acorex/core';\r\nimport { AXWidgetSizePropertyEditorComponent } from './editors/widget-size-editor/widget-size.editor';\r\nimport { AXWidgetSizePropertyEditorModule } from './editors/widget-size-editor/widget-size.module';\r\nimport { AXWidgetSaveComponent } from './widget-save.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n AXSearchBoxModule,\r\n AXLoadingModule,\r\n RouterModule,\r\n AXProppertyEditorModule,\r\n AXPageModule,\r\n AXToolbarModule,\r\n AXTranslatorModule,\r\n AXLabelModule,\r\n AXTextAreaModule,\r\n AXFieldsetModule,\r\n AXTextBoxModule,\r\n AXFormGroupModule,\r\n AXTabStripModule,\r\n AXCheckBoxModule,\r\n AXMenuModule,\r\n AXTranslatorModule,\r\n AXValidationModule,\r\n RouterModule.forChild([\r\n {\r\n component: AXWidgetSizePropertyEditorComponent,\r\n path: 'ax/editors/widget-size'\r\n },\r\n ])\r\n ],\r\n exports: [AXWidgetBoardComponent, AXProppertyEditorModule],\r\n declarations: [AXWidgetBoardComponent, AXWidgetHostComponent, AXWidgetConfigComponent, AXWidgetSaveComponent],\r\n entryComponents: [AXWidgetConfigComponent, AXWidgetSaveComponent],\r\n providers: []\r\n})\r\nexport class AXWidgetBoardModule {\r\n /**\r\n *\r\n */\r\n constructor() {\r\n AXTranslator.load('en', {\r\n 'widget-board': {\r\n 'configurable-props': 'Configurable Properties',\r\n configure: 'Configure Widget'\r\n }\r\n });\r\n AXTranslator.load('fa', {\r\n 'widget-board': {\r\n 'configurable-props': 'ویژگی های قابل تنظیم',\r\n configure: 'پیکر بندی ابزارک'\r\n }\r\n });\r\n\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { AXWidgetSizePropertyEditorComponent } from './widget-size.editor';\r\nimport { AXNumberBoxModule } from '@acorex/components';\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [AXWidgetSizePropertyEditorComponent],\r\n imports: [CommonModule, FormsModule, AXNumberBoxModule],\r\n exports: [AXWidgetSizePropertyEditorComponent],\r\n entryComponents: [AXWidgetSizePropertyEditorComponent],\r\n providers: [],\r\n})\r\nexport class AXWidgetSizePropertyEditorModule {\r\n \r\n}"]}
@@ -1,7 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- export { AXWidgetConfigComponent as ɵa } from './lib/widget-board/widget-config.component';
6
- export { AXWidgetSaveComponent as ɵb } from './lib/widget-board/widget-save.component';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvbGF5b3V0LyIsInNvdXJjZXMiOlsiYWNvcmV4LWxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sMENBQTBDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG5cbmV4cG9ydCB7QVhXaWRnZXRDb25maWdDb21wb25lbnQgYXMgybVhfSBmcm9tICcuL2xpYi93aWRnZXQtYm9hcmQvd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQnO1xuZXhwb3J0IHtBWFdpZGdldFNhdmVDb21wb25lbnQgYXMgybVifSBmcm9tICcuL2xpYi93aWRnZXQtYm9hcmQvd2lkZ2V0LXNhdmUuY29tcG9uZW50JzsiXX0=
@@ -1,49 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
3
- import { AXProperyEditorComponent } from '@acorex/components';
4
- let AXWidgetSizePropertyEditorComponent = class AXWidgetSizePropertyEditorComponent extends AXProperyEditorComponent {
5
- constructor(cdr) {
6
- super(cdr);
7
- this.cdr = cdr;
8
- this.minX = 1;
9
- this.maxX = 10;
10
- this.minY = 1;
11
- this.maxY = 10;
12
- }
13
- ngOnInit() {
14
- if (Array.isArray(this.value)) {
15
- this.sizeX = this.value[0];
16
- this.sizeY = this.value[1];
17
- }
18
- else {
19
- this.sizeX = 2;
20
- this.sizeY = 2;
21
- }
22
- }
23
- handleMinValueChange(e) {
24
- this.sizeX = e.value;
25
- if (this.sizeY > 0) {
26
- super.handleValueChange([this.sizeX, this.sizeY]);
27
- }
28
- }
29
- handleMaxValueChange(e) {
30
- this.sizeY = e.value;
31
- if (this.sizeX > 0) {
32
- super.handleValueChange([this.sizeX, this.sizeY]);
33
- }
34
- }
35
- ngAfterViewInit() {
36
- this.onRenderCompleted.emit();
37
- }
38
- };
39
- AXWidgetSizePropertyEditorComponent.ctorParameters = () => [
40
- { type: ChangeDetectorRef }
41
- ];
42
- AXWidgetSizePropertyEditorComponent = __decorate([
43
- Component({
44
- template: "<div style=\"display: flex;\">\r\n <div style=\"margin-inline-end: 0.5em;flex: calc(50% - 0.25em);\">\r\n <ax-number-box (onValueChanged)=\"handleMinValueChange($event)\" [value]=\"sizeX\" [min]=\"minX\" [max]=\"maxX\">\r\n </ax-number-box>\r\n </div>\r\n <div style=\"flex: calc(50% - 0.25em);\">\r\n <ax-number-box (onValueChanged)=\"handleMaxValueChange($event)\" [value]=\"sizeY\" [min]=\"minY\" [max]=\"maxY\">\r\n </ax-number-box>\r\n </div>\r\n</div>"
45
- }),
46
- __metadata("design:paramtypes", [ChangeDetectorRef])
47
- ], AXWidgetSizePropertyEditorComponent);
48
- export { AXWidgetSizePropertyEditorComponent };
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXNpemUuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFjb3JleC9sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvd2lkZ2V0LWJvYXJkL2VkaXRvcnMvd2lkZ2V0LXNpemUtZWRpdG9yL3dpZGdldC1zaXplLmVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLOUQsSUFBYSxtQ0FBbUMsR0FBaEQsTUFBYSxtQ0FBb0MsU0FBUSx3QkFBa0M7SUFZdkYsWUFBc0IsR0FBc0I7UUFDeEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRE8sUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFQNUMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsU0FBSSxHQUFXLEVBQUUsQ0FBQztJQUtsQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QjthQUNJO1lBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxDQUFNO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDckQ7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsQ0FBTTtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNoQixLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUlELGVBQWU7UUFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUVKLENBQUE7O1lBcEM4QixpQkFBaUI7O0FBWm5DLG1DQUFtQztJQUgvQyxTQUFTLENBQUM7UUFDUCw2ZkFBd0M7S0FDM0MsQ0FBQztxQ0FhNkIsaUJBQWlCO0dBWm5DLG1DQUFtQyxDQWdEL0M7U0FoRFksbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFYUHJvcGVyeUVkaXRvckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtc2l6ZS5lZGl0b3IuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQVhQcm9wZXJ5RWRpdG9yQ29tcG9uZW50PG51bWJlcltdPiAge1xyXG5cclxuICAgIHNpemVYOiBudW1iZXI7XHJcbiAgICBzaXplWTogbnVtYmVyO1xyXG5cclxuICAgIG1pblg6IG51bWJlciA9IDE7XHJcbiAgICBtYXhYOiBudW1iZXIgPSAxMDtcclxuXHJcbiAgICBtaW5ZOiBudW1iZXIgPSAxO1xyXG4gICAgbWF4WTogbnVtYmVyID0gMTA7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNpemVYID0gdGhpcy52YWx1ZVswXTtcclxuICAgICAgICAgICAgdGhpcy5zaXplWSA9IHRoaXMudmFsdWVbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNpemVYID0gMjtcclxuICAgICAgICAgICAgdGhpcy5zaXplWSA9IDI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1pblZhbHVlQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2l6ZVggPSBlLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaXplWSA+IDApIHtcclxuICAgICAgICAgICAgc3VwZXIuaGFuZGxlVmFsdWVDaGFuZ2UoW3RoaXMuc2l6ZVgsIHRoaXMuc2l6ZVldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlTWF4VmFsdWVDaGFuZ2UoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zaXplWSA9IGUudmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2l6ZVggPiAwKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZVZhbHVlQ2hhbmdlKFt0aGlzLnNpemVYLCB0aGlzLnNpemVZXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMub25SZW5kZXJDb21wbGV0ZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxufSJdfQ==
@@ -1,19 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { NgModule } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { FormsModule } from '@angular/forms';
5
- import { AXWidgetSizePropertyEditorComponent } from './widget-size.editor';
6
- import { AXNumberBoxModule } from '@acorex/components';
7
- let AXWidgetSizePropertyEditorModule = class AXWidgetSizePropertyEditorModule {
8
- };
9
- AXWidgetSizePropertyEditorModule = __decorate([
10
- NgModule({
11
- declarations: [AXWidgetSizePropertyEditorComponent],
12
- imports: [CommonModule, FormsModule, AXNumberBoxModule],
13
- exports: [AXWidgetSizePropertyEditorComponent],
14
- entryComponents: [AXWidgetSizePropertyEditorComponent],
15
- providers: [],
16
- })
17
- ], AXWidgetSizePropertyEditorModule);
18
- export { AXWidgetSizePropertyEditorModule };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXNpemUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFjb3JleC9sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvd2lkZ2V0LWJvYXJkL2VkaXRvcnMvd2lkZ2V0LXNpemUtZWRpdG9yL3dpZGdldC1zaXplLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBWXZELElBQWEsZ0NBQWdDLEdBQTdDLE1BQWEsZ0NBQWdDO0NBRTVDLENBQUE7QUFGWSxnQ0FBZ0M7SUFQNUMsUUFBUSxDQUFDO1FBQ04sWUFBWSxFQUFFLENBQUMsbUNBQW1DLENBQUM7UUFDbkQsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQztRQUN2RCxPQUFPLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztRQUM5QyxlQUFlLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztRQUN0RCxTQUFTLEVBQUUsRUFBRTtLQUNoQixDQUFDO0dBQ1csZ0NBQWdDLENBRTVDO1NBRlksZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBBWFdpZGdldFNpemVQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LXNpemUuZWRpdG9yJztcclxuaW1wb3J0IHsgQVhOdW1iZXJCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMnO1xyXG5cclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW0FYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yQ29tcG9uZW50XSxcclxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBBWE51bWJlckJveE1vZHVsZV0sXHJcbiAgICBleHBvcnRzOiBbQVhXaWRnZXRTaXplUHJvcGVydHlFZGl0b3JDb21wb25lbnRdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbQVhXaWRnZXRTaXplUHJvcGVydHlFZGl0b3JDb21wb25lbnRdLFxyXG4gICAgcHJvdmlkZXJzOiBbXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yTW9kdWxlIHtcclxuICAgXHJcbn0iXX0=