@flywheel-io/vision 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/flywheel-io-vision.umd.js +313 -41
- package/bundles/flywheel-io-vision.umd.js.map +1 -1
- package/bundles/flywheel-io-vision.umd.min.js +2 -2
- package/bundles/flywheel-io-vision.umd.min.js.map +1 -1
- package/components/notification/notification/notification.component.d.ts +16 -0
- package/components/notification/notification/notification.model.d.ts +14 -0
- package/components/notification/notification-container/notification-container.component.d.ts +21 -0
- package/components/notification/notification-timer.service.d.ts +10 -0
- package/components/notification/notification.module.d.ts +2 -0
- package/components/notification/notification.service.d.ts +10 -0
- package/esm2015/components/notification/notification/notification.component.js +60 -0
- package/esm2015/components/notification/notification/notification.model.js +9 -0
- package/esm2015/components/notification/notification-container/notification-container.component.js +88 -0
- package/esm2015/components/notification/notification-timer.service.js +37 -0
- package/esm2015/components/notification/notification.module.js +37 -0
- package/esm2015/components/notification/notification.service.js +34 -0
- package/esm2015/flywheel-io-vision.js +2 -1
- package/esm2015/public-api.js +6 -1
- package/fesm2015/flywheel-io-vision.js +249 -3
- package/fesm2015/flywheel-io-vision.js.map +1 -1
- package/flywheel-io-vision.d.ts +1 -0
- package/flywheel-io-vision.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/button-group/button-group.component.ts","../../../src/components/button-group/button-group.module.ts","../../../src/components/button/button.component.ts","../../../src/components/button/button.module.ts","../../../node_modules/tslib/tslib.es6.js","../../../src/components/popover/popover-trigger.directive.ts","../../../src/components/popover/popover-trigger.component.ts","../../../src/components/popover/popover.component.ts","../../../src/components/popover/popover.module.ts","../../../src/components/table/table.component.ts","../../../src/components/table/table.module.ts"],"names":["this","layout","size","Component","args","host","class","[class.small]","[class.medium]","[class.large]","[class.compact]","selector","template","encapsulation","ViewEncapsulation","None","Input","NgModule","exports","FwButtonGroupComponent","declarations","entryComponents","type","imports","CommonModule","MatButtonModule","FwButtonComponent","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","TypeError","FwPopoverTriggerDirective","element","overlay","viewContainerRef","popoverMargin","positionMap","left","originX","originY","overlayX","overlayY","right","above","below","position","subscriptions","positionChanges","Subscription","EMPTY","ngOnChanges","changes","overlayRef","dispose","ngOnDestroy","_c","values","_d","unsubscribe","showPopover","_a","popover","templateRef","getOverlay","attach","TemplatePortal","hidePopover","e","relatedTarget","classList","contains","detach","setPopoverCaretPosition","caret","overlayElement","querySelector","caretRect","getBoundingClientRect","triggerRect","nativeElement","style","margin","includes","top","height","width","setPopoverPosition","positionChange","mainPosition","connectionPair","fallbackPosition","removePanelClass","addPanelClass","_this","positionStrategy","flexibleConnectedTo","withPositions","getPositions","panelClass","addEventListener","getConfig","subscribe","getMainPosition","getFallbackPosition","Directive","(mouseenter)","(mouseleave)","exportAs","ElementRef","Overlay","ViewContainerRef","FwPopoverTriggerComponent","_super","String","__","constructor","__extends","popoverId","popoverHTML","document","innerHTML","popoverTemplateRef","ViewChild","TemplateRef","FwPopoverComponent","providers","FwTableComponent","changeDetectorRef","columns","dataSource","pageSize","webCompPageSize","sort","sortColumn","sortOrder","displayedColumns","filters","FormGroup","trackByIndex","ngOnInit","setDataSource","setColumns","addFilterControls","setFilter","matDataSource","filterPredicate","row","filter","JSON","parse","filter_1","filterValue","rowValue","isArray","toLowerCase","valueChanges","pipe","debounceTime","ngAfterViewInit","setSort","setPaginator","defineProperty","_b","column","addControl","key","FormControl","MatTableDataSource","map","stringify","matSort","sortSplit","split","console","warn","id","start","disableClear","sortHeader","sortables","get","_setAnimationTransitionState","toState","detectChanges","paginator","matPaginator","onInputFilter","event","setTimeout","setValue","target","onSelectFilter","innerText","onMultiSelectFilter","controls","parentElement","v","push","ChangeDetectorRef","MatPaginator","MatSort","FormsModule","ReactiveFormsModule","MatInputModule","MatPaginatorModule","MatSelectModule","MatSortModule","MatTableModule"],"mappings":"ytCAEA,WAcWA,KAAAC,OAA+B,QAC/BD,KAAAE,KAAsC,8BAfhDC,EAAAA,UAASC,KAAA,CAAC,CACTC,KAAM,CACJC,MAAS,kBACTC,gBAAiB,mBACjBC,iBAAkB,oBAClBC,gBAAiB,mBACjBC,kBAAmB,wBAErBC,SAAU,kBAEVC,SAAU,4BACVC,cAAeC,EAAAA,kBAAkBC,w3DAGhCC,EAAAA,oBACAA,EAAAA,eCFH,iCAXCC,EAAAA,SAAQb,KAAA,CAAC,CACRc,QAAS,CACPC,GAEFC,aAAc,CACZD,GAEFE,gBAAiB,CACfF,aCTJ,WAcWnB,KAAAC,OAA+B,QAC/BD,KAAAE,KAAsC,SACtCF,KAAAsB,KAAiD,6BAhB3DnB,EAAAA,UAASC,KAAA,CAAC,CACTC,KAAM,CACJC,MAAS,YACTC,gBAAiB,mBACjBC,iBAAkB,oBAClBC,gBAAiB,mBACjBC,kBAAmB,wBAErBC,SAAU,YAEVC,SAAA,83BAGCI,EAAAA,sBACAA,EAAAA,oBACAA,EAAAA,oBACAA,EAAAA,eCEH,iCAfCC,EAAAA,SAAQb,KAAA,CAAC,CACRmB,QAAS,CACPC,EAAAA,aACAC,EAAAA,iBAEFP,QAAS,CACPQ,GAEFN,aAAc,CACZM,GAEFL,gBAAiB,CACfK;;;;;;;;;;;;;;;ACFJ,IAAIC,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOC,OAAOK,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,MAC3EN,EAAGC,IAuFCC,OAAOQ,gBAYpBC,EAASC,GACrB,IAAIC,EAAsB,mBAAXC,QAAyBA,OAAOC,SAAUC,EAAIH,GAAKD,EAAEC,GAAII,EAAI,EAC5E,GAAID,EAAG,OAAOA,EAAEP,KAAKG,GACrB,GAAIA,GAAyB,iBAAbA,EAAEM,OAAqB,MAAO,CAC1CC,KAAM,WAEF,OADIP,GAAKK,GAAKL,EAAEM,SAAQN,OAAI,GACrB,CAAEQ,MAAOR,GAAKA,EAAEK,KAAMI,MAAOT,KAG5C,MAAM,IAAIU,UAAUT,EAAI,0BAA4B,mCAiF/BX,OAAOQ,wBC3K9B,SAAAa,EACSC,EACAC,EACAC,GAFAtD,KAAAoD,QAAAA,EACApD,KAAAqD,QAAAA,EACArD,KAAAsD,iBAAAA,EArBDtD,KAAAuD,cAAgB,GAIhBvD,KAAAwD,YAAoD,CAC1DC,KAAQ,CAAEC,QAAS,QAASC,QAAS,SAAUC,SAAU,MAAOC,SAAU,UAC1EC,MAAS,CAAEJ,QAAS,MAAOC,QAAS,SAAUC,SAAU,QAASC,SAAU,UAC3EE,MAAS,CAAEL,QAAS,SAAUC,QAAS,MAAOC,SAAU,SAAUC,SAAU,UAC5EG,MAAS,CAAEN,QAAS,SAAUC,QAAS,SAAUC,SAAU,SAAUC,SAAU,QAIrD7D,KAAAiE,SAA8B,QAElDjE,KAAAkE,cAAgB,CACtBC,gBAAiBC,EAAAA,aAAaC,cAShClB,EAAAhB,UAAAmC,YAAA,SAAYC,GACNA,EAAQN,UAAYjE,KAAKwE,aAC3BxE,KAAKwE,WAAWC,UAChBzE,KAAKwE,WAAa,OAItBrB,EAAAhB,UAAAuC,YAAA,mBACM1E,KAAKwE,aACPxE,KAAKwE,WAAWC,UAChBzE,KAAKwE,WAAa,UAEpB,IAA2B,IAAAG,EAAApC,EAAAT,OAAO8C,OAAO5E,KAAKkE,gBAAcW,EAAAF,EAAA5B,QAAA8B,EAAA5B,KAAA4B,EAAAF,EAAA5B,OAAE,CAAvC8B,EAAA7B,MACR8B,kHAIjB3B,EAAAhB,UAAA4C,YAAA,kBACkB,QAAhBC,EAAIhF,KAAKiF,eAAO,IAAAD,OAAA,EAAAA,EAAEE,cAChBlF,KAAKmF,aAAaC,OAAO,IAAIC,EAAAA,eAAerF,KAAKiF,QAAQC,YAAalF,KAAKsD,oBAI/EH,EAAAhB,UAAAmD,YAAA,SAAYC,UAC2B,QAAjCP,EAAEO,EAAEC,qBAA6B,IAAAR,OAAA,EAAAA,EAAES,UAAUC,SAAS,sBACxD1F,KAAKmF,aAAaQ,UAIdxC,EAAAhB,UAAAyD,wBAAA,SAAwB3B,GAC9B,IAAM4B,EAAQ7F,KAAKwE,WAAWsB,eAAeC,cAAc,qBACrDC,EAAYhG,KAAKwE,WAAWsB,eAAeG,wBAC3CC,EAAclG,KAAKoD,QAAQ+C,cAAcF,wBAC9CjG,KAAKwE,WAAWsB,eAAeC,cAAc,+BAA+CK,MAAMC,OAAYrG,KAAKuD,cAAa,KAC7H,CAAC,OAAQ,QAAS,SAAU,SAAS+C,SAASrC,GAChD4B,EAAMO,MAAMG,IAASL,EAAYK,IAAMP,EAAUO,IAAMvG,KAAKuD,cAAiB2C,EAAYM,OAAS,EAAE,KAEpGX,EAAMO,MAAM3C,KAAUyC,EAAYzC,KAAOuC,EAAUvC,KAAOzD,KAAKuD,cAAiB2C,EAAYO,MAAQ,EAAE,MAIlGtD,EAAAhB,UAAAuE,mBAAA,SAAmBC,GACzB,IAAM1C,EAAWjE,KAAKwD,YAAYxD,KAAK4G,gBAAkBD,EAAeE,eACpE7G,KAAK4G,aACL5G,KAAKwD,YAAYxD,KAAK8G,oBAAsBH,EAAeE,eACzD7G,KAAK8G,iBACL9G,KAAK4G,aACX5G,KAAKwE,WAAWuC,iBAAiB,CAAC,mBAAoB,mBAAoB,kBAAmB,qBAC7F/G,KAAKwE,WAAWwC,cAAc,cAAc/C,GAC5CjE,KAAK4F,wBAAwB3B,IAGxBd,EAAAhB,UAAAgD,WAAA,WAAA,IAAA8B,EAAAjH,KAYL,OAXKA,KAAKwE,aACRxE,KAAKwE,WAAaxE,KAAKqD,QAAQf,OAAO,CACpC4E,iBAAkBlH,KAAKqD,QAAQY,WAC5BkD,oBAAoBnH,KAAKoD,SACzBgE,cAAcpH,KAAKqH,gBACtBC,WAAY,qBAEdtH,KAAKwE,WAAWsB,eAAeyB,iBAAiB,cAAc,SAAAhC,GAAK,OAAA0B,EAAK3B,YAAYC,MACpFvF,KAAKkE,cAAcC,gBAAmBnE,KAAKwE,WAAWgD,YAAYN,iBAAuD/C,gBACtHsD,WAAU,SAAAd,GAAkB,OAAAM,EAAKP,mBAAmBC,OAElD3G,KAAKwE,YAGNrB,EAAAhB,UAAAuF,gBAAA,WACN,OAAO1H,KAAK4G,aACV,CAAC,OAAQ,UAAUN,SAAStG,KAAKiE,UAC7B,OACA,CAAC,QAAS,SAASqC,SAAStG,KAAKiE,UAC/B,QACkB,UAAlBjE,KAAKiE,SACH,QACA,SAGJd,EAAAhB,UAAAwF,oBAAA,WACN,OAAO3H,KAAK8G,iBACV,CAAC,OAAQ,UAAUR,SAAStG,KAAKiE,UAC7B,QACA,CAAC,QAAS,SAASqC,SAAStG,KAAKiE,UAC/B,OACkB,UAAlBjE,KAAKiE,SACH,QACA,SAGJd,EAAAhB,UAAAkF,aAAA,WACN,MAAO,CAELrH,KAAKwD,YAAYxD,KAAK0H,mBAEtB1H,KAAKwD,YAAYxD,KAAK2H,kDAjI3BC,EAAAA,UAASxH,KAAA,CAAC,CACTC,KAAM,CACJC,MAAS,qBACTuH,eAAgB,gBAChBC,eAAgB,uBAElBnH,SAAU,wBACVoH,SAAU,gEAdQC,EAAAA,kBAF2EC,EAAAA,eAEnBC,EAAAA,qDA6BzElH,EAAAA,MAAKZ,KAAA,CAAC,yCACNY,EAAAA,MAAKZ,KAAA,CAAC,0CCJP,SAAA+H,EACS/E,EACAC,EACAC,GAHT,IAAA2D,EAKEmB,EAAA/F,KAAArC,KAAMoD,EAASC,EAASC,IAAiBtD,YAJlCiH,EAAA7D,QAAAA,EACA6D,EAAA5D,QAAAA,EACA4D,EAAA3D,iBAAAA,EATU2D,EAAAhD,SAA8B,0BFCzBrC,EAAGC,GACzB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIqB,UAAU,uBAAyBmF,OAAOxG,GAAK,iCAE7D,SAASyG,IAAOtI,KAAKuI,YAAc3G,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOQ,OAAOT,IAAMyG,EAAGnG,UAAYN,EAAEM,UAAW,IAAImG,GERpCE,CAAAL,EAAAC,GAgB7CD,EAAAhG,UAAA4C,YAAA,WACE,IAAM1B,EAAUrD,KAAKmF,aACrB9B,EAAQsC,SACJ3F,KAAKyI,YAEPzI,KAAK0I,YAAcC,SAAS5C,cAAc,cAAc/F,KAAKyI,WAAaG,UAC1EvF,EAAQ+B,OAAO,IAAIC,EAAAA,eAAerF,KAAK6I,mBAAoB7I,KAAKsD,wBAtBvBH,uBAb9ChD,EAAAA,UAASC,KAAA,CAAC,CACTC,KAAM,CACJC,MAAS,qBACTuH,eAAgB,gBAChBC,eAAgB,uBAElBnH,SAAU,qBACVC,SAAU,mMAXHoH,EAAAA,kBAHAC,EAAAA,eAGmBC,EAAAA,uDAkBzBlH,EAAAA,MAAKZ,KAAA,CAAC,iCACNY,EAAAA,MAAKZ,KAAA,CAAC,wCAGN0I,EAAAA,UAAS1I,KAAA,CAAC2I,EAAAA,sBCTb,iCAdC5I,EAAAA,UAASC,KAAA,CAAC,CACTC,KAAM,CAAEC,MAAS,cACjBK,SAAU,aAEVC,SAAU,mPAQVC,cAAeC,EAAAA,kBAAkBC,6hZAIhC+H,EAAAA,UAAS1I,KAAA,CAAC,oBCYb,iCAtBCa,EAAAA,SAAQb,KAAA,CAAC,CACRmB,QAAS,CACPC,EAAAA,cAEFN,QAAS,CACP8H,EACAb,EACAhF,GAEF/B,aAAc,CACZ4H,EACAb,EACAhF,GAEF9B,gBAAiB,CACf2H,EACAb,GAEFc,UAAW,CACThB,EAAAA,8BCwBF,SAAAiB,EACUC,GAAAnJ,KAAAmJ,kBAAAA,EArBDnJ,KAAAoJ,QAAoB,GACpBpJ,KAAAqJ,WAAoB,GACpBrJ,KAAAC,OAA+B,QAC/BD,KAAAsJ,SAAW,KACAtJ,KAAAuJ,gBAAkB,KAC7BvJ,KAAAwJ,KAAO,KAERxJ,KAAAyJ,WAAa,GACbzJ,KAAA0J,UAAuB,MAE/B1J,KAAA2J,iBAA6B,GAC7B3J,KAAA4J,QAAqB,IAAIC,EAAAA,UAAU,IAInC7J,KAAA8J,aAAoB,SAAAjH,GAAK,OAAAA,UASzBqG,EAAA/G,UAAA4H,SAAA,WAAA,IAAA9C,EAAAjH,KACEA,KAAKgK,gBACLhK,KAAKiK,aACLjK,KAAKkK,oBACLlK,KAAKmK,YACLnK,KAAKoK,cAAcC,gBAAkB,SAACC,EAAKC,GACzC,IAAMX,EAAUY,KAAKC,MAAMF,GAC3B,IAAK,IAAMG,KAAUd,EAAS,CAC5B,IAAMe,EAAcf,EAAQc,GACtBE,EAAWN,EAAII,GAErB,GAAIzI,MAAM4I,QAAQF,IAAgBA,EAAY7H,OAAS,IAAM6H,EAAYrE,SAASsE,GAChF,OAAO,EAGT,IAAK3I,MAAM4I,QAAQF,KAAiBtC,OAAOuC,GAAUE,cAAcxE,SAAS+B,OAAOsC,MAAAA,EAAAA,EAAe,IAAIG,eACpG,OAAO,EAGX,OAAO,GAET9K,KAAK4J,QAAQmB,aAAaC,KAAKC,EAAAA,aAAa,MAAMxD,WAAU,WAAM,OAAAR,EAAKkD,gBAGzEjB,EAAA/G,UAAA+I,gBAAA,WACElL,KAAKmL,UACLnL,KAAKoL,gBAGPlC,EAAA/G,UAAAmC,YAAA,SAAYC,GACNA,EAAQ6E,SACVpJ,KAAKiK,aAEH1F,EAAQ8E,YACVrJ,KAAKgK,iBAEHzF,EAAQiF,MAAQjF,EAAQ8E,aAC1BrJ,KAAKmL,WAEH5G,EAAQ+E,UAAY/E,EAAQ,eAC9BvE,KAAKoL,gBAITtJ,OAAAuJ,eAAInC,EAAA/G,UAAA,YAAS,KAAb,WACE,MAAuB,YAAhBnC,KAAKC,wCAGd6B,OAAAuJ,eAAInC,EAAA/G,UAAA,iBAAc,KAAlB,WACE,OAAOnC,KAAKsJ,UAAYtJ,KAAKuJ,iBAAmB,mCAGlDzH,OAAAuJ,eAAInC,EAAA/G,UAAA,gBAAa,KAAjB,WACE,OAAqB,OAAdnC,KAAKwJ,sCAGdN,EAAA/G,UAAA+H,kBAAA,uBACE,IAAqB,IAAAoB,EAAA/I,EAAAvC,KAAKoJ,SAAOzE,EAAA2G,EAAAvI,QAAA4B,EAAA1B,KAAA0B,EAAA2G,EAAAvI,OAAE,CAA9B,IAAMwI,EAAM5G,EAAA3B,MACfhD,KAAK4J,QAAQ4B,WAAWD,EAAOE,IAAK,IAAIC,EAAAA,iHAI5CxC,EAAA/G,UAAA6H,cAAA,WACEhK,KAAKoK,cAAgB,IAAIuB,EAAAA,mBAAmB3L,KAAKqJ,aAGnDH,EAAA/G,UAAA8H,WAAA,WACEjK,KAAK2J,iBAAmB3J,KAAKoJ,QAAQwC,KAAI,SAAAL,GAAU,OAAAA,EAAOE,QAG5DvC,EAAA/G,UAAAgI,UAAA,WACEnK,KAAKoK,cAAcG,OAASC,KAAKqB,UAAU7L,KAAK4J,QAAQ5G,QAG1DkG,EAAA/G,UAAAgJ,QAAA,WACE,GAAKnL,KAAK8L,SAAyB,OAAd9L,KAAKwJ,KAA1B,CAGA,IAAMuC,EAAY/L,KAAKwJ,KAAKwC,MAAM,KAOlC,GANAhM,KAAKyJ,WAAasC,EAAU,GACxB,CAAC,MAAO,QAAQzF,SAASyF,EAAU,IACrC/L,KAAK0J,UAAYqC,EAAU,GAE3BE,QAAQC,KAAK,eAAeH,EAAU,GAAE,iDAEtC/L,KAAKyJ,WAAY,CACnBzJ,KAAK8L,QAAQtC,KAAK,CAAE2C,GAAInM,KAAKyJ,WAAY2C,MAAOpM,KAAK0J,UAAW2C,cAAc,IAC9E,IAAMC,EAAatM,KAAK8L,QAAQS,UAAUC,IAAIxM,KAAKyJ,YAC/C6C,EACFA,EAAWG,6BAA6B,CAAEC,QAAS,WAEnDT,QAAQC,KAAK,+BAA+BlM,KAAKyJ,WAAU,2BAG/DzJ,KAAKoK,cAAcZ,KAAOxJ,KAAK8L,UAGjC5C,EAAA/G,UAAAiJ,aAAA,WAEEpL,KAAKmJ,kBAAkBwD,gBACvB3M,KAAKoK,cAAcwC,UAAY5M,KAAK6M,cAItC3D,EAAA/G,UAAA2K,cAAA,SAAcC,EAAsBxB,GAApC,IAAAtE,EAAAjH,KAEEgN,YAAW,WAAM,OAAA/F,EAAK2C,QAAQ4C,IAAIjB,EAAOE,KAAKwB,SAAUF,EAAMG,OAA4BlK,WAI5FkG,EAAA/G,UAAAgL,eAAA,SAAeJ,EAAmBxB,GAChC,IAAM6B,EAAaL,EAAMG,OAA4BE,UACrDpN,KAAK4J,QAAQ4C,IAAIjB,EAAOE,KAAKwB,SAAuB,aAAdG,EAA2B,KAAOA,IAI1ElE,EAAA/G,UAAAkL,oBAAA,SAAoBN,EAAmBxB,GACrC,IAAIvI,EAAQhD,KAAK4J,QAAQ0D,SAAS/B,EAAOE,KAAKzI,OAAS,GACjDoK,EAAaL,EAAMG,OAA4BK,cAAcH,UAC/DpK,EAAMsD,SAAS8G,GACjBpK,EAAQA,EAAMuH,QAAO,SAAAiD,GAAK,OAAAA,IAAMJ,KAEhCpK,EAAMyK,KAAKL,GAEbpN,KAAK4J,QAAQ4C,IAAIjB,EAAOE,KAAKwB,SACV,IAAjBjK,EAAMF,QAA8B,KAAdsK,EAClB,KACApK,6BAjKT7C,EAAAA,UAASC,KAAA,CAAC,CACTC,KAAM,CACJC,MAAS,WACTI,kBAAmB,aAErBC,SAAU,WAEVC,SAAA,mkHA5BO8M,EAAAA,sDA+BN1M,EAAAA,0BACAA,EAAAA,sBACAA,EAAAA,wBACAA,EAAAA,+BACAA,EAAAA,MAAKZ,KAAA,CAAC,2BACNY,EAAAA,4BAYA8H,EAAAA,UAAS1I,KAAA,CAACuN,EAAAA,+BACV7E,EAAAA,UAAS1I,KAAA,CAACwN,EAAAA,kBCjBb,iCArBC3M,EAAAA,SAAQb,KAAA,CAAC,CACRmB,QAAS,CACPC,EAAAA,aACAqM,EAAAA,YACAC,EAAAA,oBACAC,EAAAA,eACAC,EAAAA,mBACAC,EAAAA,gBACAC,EAAAA,cACAC,EAAAA,gBAEFjN,QAAS,CACPgI,GAEF9H,aAAc,CACZ8H,GAEF7H,gBAAiB,CACf6H","sourcesContent":["import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n host: {\n 'class': 'fw-button-group',\n '[class.small]': 'size === \"small\"',\n '[class.medium]': 'size === \"medium\"',\n '[class.large]': 'size === \"large\"',\n '[class.compact]': 'layout === \"compact\"',\n },\n selector: 'fw-button-group',\n styleUrls: [ './button-group.component.scss' ],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n})\nexport class FwButtonGroupComponent {\n @Input() layout?: 'basic' | 'compact' = 'basic'\n @Input() size?: 'small' | 'medium' | 'large' = 'medium'\n}\n","import { NgModule } from '@angular/core';\n\nimport { FwButtonGroupComponent } from './button-group.component';\n\n@NgModule({\n exports: [\n FwButtonGroupComponent,\n ],\n declarations: [\n FwButtonGroupComponent,\n ],\n entryComponents: [\n FwButtonGroupComponent,\n ]\n})\nexport class FwButtonGroupModule {}","import { Component, Input } from '@angular/core';\nimport type { ThemePalette } from '@angular/material/core';\n\n@Component({\n host: {\n 'class': 'fw-button',\n '[class.small]': 'size === \"small\"',\n '[class.medium]': 'size === \"medium\"',\n '[class.large]': 'size === \"large\"',\n '[class.compact]': 'layout === \"compact\"',\n },\n selector: 'fw-button',\n styleUrls: ['./button.component.scss'],\n templateUrl: './button.component.html',\n})\nexport class FwButtonComponent {\n @Input() color?: ThemePalette\n @Input() layout?: 'basic' | 'compact' = 'basic'\n @Input() size?: 'small' | 'medium' | 'large' = 'medium'\n @Input() type?: 'basic' | 'flat' | 'raised' | 'stroked' = 'basic'\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { FwButtonComponent } from './button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n ],\n exports: [\n FwButtonComponent,\n ],\n declarations: [\n FwButtonComponent,\n ],\n entryComponents: [\n FwButtonComponent,\n ],\n})\nexport class FwButtonModule {}\n","/*! *****************************************************************************\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(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, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { ConnectedOverlayPositionChange, ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Directive, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { FwPopoverComponent } from './popover.component';\n\nexport type FwPopoverPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n\n@Directive({\n host: {\n 'class': 'fw-popover-trigger',\n '(mouseenter)': 'showPopover()',\n '(mouseleave)': 'hidePopover($event)',\n },\n selector: '[fwPopoverTriggerFor]',\n exportAs: 'fwPopoverTrigger',\n})\nexport class FwPopoverTriggerDirective implements OnChanges, OnDestroy {\n public popoverId: string\n private popoverMargin = 15\n private fallbackPosition: FwPopoverPosition\n private mainPosition: FwPopoverPosition\n private overlayRef: OverlayRef\n private positionMap: { [key: string]: ConnectedPosition } = {\n 'left': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n 'right': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },\n 'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },\n 'below': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\n }\n\n @Input('fwPopoverTriggerFor') popover: FwPopoverComponent\n @Input('fwPopoverPosition') position: FwPopoverPosition = 'below'\n\n private subscriptions = {\n positionChanges: Subscription.EMPTY,\n };\n\n constructor(\n public element: ElementRef,\n public overlay: Overlay,\n public viewContainerRef: ViewContainerRef,\n ) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.position && this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n for (const subscription of Object.values(this.subscriptions)) {\n subscription.unsubscribe();\n }\n }\n\n showPopover(): void {\n if (this.popover?.templateRef) {\n this.getOverlay().attach(new TemplatePortal(this.popover.templateRef, this.viewContainerRef));\n }\n }\n\n hidePopover(e: MouseEvent): void {\n if (!(e.relatedTarget as HTMLElement)?.classList.contains('fw-popover-panel')) {\n this.getOverlay().detach();\n }\n }\n\n private setPopoverCaretPosition(position: FwPopoverPosition): void {\n const caret = this.overlayRef.overlayElement.querySelector('.fw-popover-caret') as HTMLElement;\n const caretRect = this.overlayRef.overlayElement.getBoundingClientRect();\n const triggerRect = this.element.nativeElement.getBoundingClientRect();\n (this.overlayRef.overlayElement.querySelector('.fw-popover-content-wrapper') as HTMLElement).style.margin = `${this.popoverMargin}px`;\n if (['left', 'right', 'before', 'after'].includes(position)) {\n caret.style.top = `${triggerRect.top - caretRect.top - this.popoverMargin + (triggerRect.height / 2)}px`;\n } else {\n caret.style.left = `${triggerRect.left - caretRect.left - this.popoverMargin + (triggerRect.width / 2)}px`;\n }\n }\n\n private setPopoverPosition(positionChange: ConnectedOverlayPositionChange): void {\n const position = this.positionMap[this.mainPosition] === positionChange.connectionPair\n ? this.mainPosition\n : this.positionMap[this.fallbackPosition] === positionChange.connectionPair\n ? this.fallbackPosition\n : this.mainPosition;\n this.overlayRef.removePanelClass(['fw-popover-above', 'fw-popover-below', 'fw-popover-left', 'fw-popover-right']);\n this.overlayRef.addPanelClass(`fw-popover-${position}`);\n this.setPopoverCaretPosition(position);\n }\n\n public getOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position()\n .flexibleConnectedTo(this.element)\n .withPositions(this.getPositions()),\n panelClass: 'fw-popover-panel',\n });\n this.overlayRef.overlayElement.addEventListener('mouseleave', e => this.hidePopover(e));\n this.subscriptions.positionChanges = (this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy).positionChanges\n .subscribe(positionChange => this.setPopoverPosition(positionChange));\n }\n return this.overlayRef;\n }\n\n private getMainPosition(): FwPopoverPosition {\n return this.mainPosition =\n ['left', 'before'].includes(this.position)\n ? 'left'\n : ['right', 'after'].includes(this.position)\n ? 'right'\n : this.position === 'above'\n ? 'above'\n : 'below';\n }\n\n private getFallbackPosition(): FwPopoverPosition {\n return this.fallbackPosition =\n ['left', 'before'].includes(this.position)\n ? 'right'\n : ['right', 'after'].includes(this.position)\n ? 'left'\n : this.position === 'above'\n ? 'below'\n : 'above';\n }\n\n private getPositions(): ConnectedPosition[] {\n return [\n // main position\n this.positionMap[this.getMainPosition()],\n // fallback position (inverse of main)\n this.positionMap[this.getFallbackPosition()],\n ];\n }\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Component, TemplateRef, ViewChild } from '@angular/core';\nimport { ElementRef, Input, ViewContainerRef } from '@angular/core';\n\nimport { FwPopoverPosition, FwPopoverTriggerDirective } from './popover-trigger.directive';\n\n@Component({\n host: {\n 'class': 'fw-popover-trigger',\n '(mouseenter)': 'showPopover()',\n '(mouseleave)': 'hidePopover($event)',\n },\n selector: 'fw-popover-trigger',\n template: `<ng-content></ng-content>\n <!-- for web component support -->\n <ng-template>\n <div [innerHTML]=\"popoverHTML\"></div>\n </ng-template>`,\n})\nexport class FwPopoverTriggerComponent extends FwPopoverTriggerDirective {\n @Input('trigger-for') popoverId: string\n @Input('position') position: FwPopoverPosition = 'below'\n\n // for web component support\n @ViewChild(TemplateRef) popoverTemplateRef: TemplateRef<any> // eslint-disable-line @typescript-eslint/no-explicit-any\n popoverHTML: string\n\n constructor(\n public element: ElementRef,\n public overlay: Overlay,\n public viewContainerRef: ViewContainerRef,\n ) {\n super(element, overlay, viewContainerRef);\n }\n\n showPopover(): void {\n const overlay = this.getOverlay();\n overlay.detach();\n if (this.popoverId) {\n // as a web component it is not possible to have a reference to this.popover\n this.popoverHTML = document.querySelector(`fw-popover#${this.popoverId}`).innerHTML;\n overlay.attach(new TemplatePortal(this.popoverTemplateRef, this.viewContainerRef));\n }\n }\n}\n","import { Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n host: { 'class': 'fw-popover' },\n selector: 'fw-popover',\n styleUrls: [ './popover.component.scss' ],\n template: `\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ng-template #content>\n <div class=\"fw-popover-content-wrapper\">\n <ng-content></ng-content>\n <div class=\"fw-popover-caret\"></div>\n </div>\n </ng-template>`,\n encapsulation: ViewEncapsulation.None,\n})\nexport class FwPopoverComponent {\n // Used for TemplatePortal in ./popover-trigger.directive.ts\n @ViewChild('content') templateRef: TemplateRef<any> // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n","import { CommonModule } from '@angular/common';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { NgModule } from '@angular/core';\n\nimport { FwPopoverTriggerComponent } from './popover-trigger.component';\nimport { FwPopoverTriggerDirective } from './popover-trigger.directive';\nimport { FwPopoverComponent } from './popover.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FwPopoverComponent,\n FwPopoverTriggerComponent,\n FwPopoverTriggerDirective,\n ],\n declarations: [\n FwPopoverComponent,\n FwPopoverTriggerComponent,\n FwPopoverTriggerDirective,\n ],\n entryComponents: [\n FwPopoverComponent,\n FwPopoverTriggerComponent,\n ],\n providers: [\n Overlay,\n ],\n})\nexport class FwPopoverModule {}\n","import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime } from 'rxjs/operators';\n\ntype SortOrder = 'asc' | 'desc'\n\ninterface ColumnFilter {\n control: 'input' | 'select' | 'multi-select',\n options?: string[],\n placeholder?: string,\n}\n\ninterface Column {\n label: string,\n key: string,\n filter?: ColumnFilter,\n}\n\n@Component({\n host: {\n 'class': 'fw-table',\n '[class.compact]': 'isCompact',\n },\n selector: 'fw-table',\n styleUrls: ['./table.component.scss'],\n templateUrl: './table.component.html',\n})\nexport class FwTableComponent implements OnInit, OnChanges {\n @Input() columns: Column[] = []\n @Input() dataSource: any[] = []\n @Input() layout?: 'basic' | 'compact' = 'basic'\n @Input() pageSize = null\n @Input('page-size') webCompPageSize = null\n @Input() sort = null\n\n private sortColumn = ''\n private sortOrder: SortOrder = 'asc'\n\n displayedColumns: string[] = []\n filters: FormGroup = new FormGroup({})\n matDataSource: MatTableDataSource<any>\n\n // to support updating column header labels\n trackByIndex: any = i => i\n\n @ViewChild(MatPaginator) matPaginator: MatPaginator\n @ViewChild(MatSort) matSort: MatSort\n\n constructor(\n private changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void {\n this.setDataSource();\n this.setColumns();\n this.addFilterControls();\n this.setFilter();\n this.matDataSource.filterPredicate = (row, filter) => {\n const filters = JSON.parse(filter);\n for (const filter in filters) {\n const filterValue = filters[filter];\n const rowValue = row[filter];\n // multi-select\n if (Array.isArray(filterValue) && filterValue.length > 0 && !filterValue.includes(rowValue)) {\n return false;\n }\n // input or select\n if (!Array.isArray(filterValue) && !String(rowValue).toLowerCase().includes(String(filterValue ?? '').toLowerCase())) {\n return false;\n }\n }\n return true;\n };\n this.filters.valueChanges.pipe(debounceTime(200)).subscribe(() => this.setFilter());\n }\n\n ngAfterViewInit(): void {\n this.setSort();\n this.setPaginator();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.columns) {\n this.setColumns();\n }\n if (changes.dataSource) {\n this.setDataSource();\n }\n if (changes.sort || changes.dataSource) {\n this.setSort();\n }\n if (changes.pageSize || changes['page-size']) {\n this.setPaginator();\n }\n }\n\n get isCompact(): boolean {\n return this.layout === 'compact';\n }\n\n get paginationSize(): number {\n return this.pageSize || this.webCompPageSize || 0;\n }\n\n get isSortEnabled(): boolean {\n return this.sort !== null;\n }\n\n addFilterControls(): void {\n for (const column of this.columns) {\n this.filters.addControl(column.key, new FormControl());\n }\n }\n\n setDataSource(): void {\n this.matDataSource = new MatTableDataSource(this.dataSource);\n }\n\n setColumns(): void {\n this.displayedColumns = this.columns.map(column => column.key);\n }\n\n setFilter(): void {\n this.matDataSource.filter = JSON.stringify(this.filters.value);\n }\n\n setSort(): void {\n if (!this.matSort || this.sort === null) {\n return;\n }\n const sortSplit = this.sort.split(' ');\n this.sortColumn = sortSplit[0];\n if (['asc', 'desc'].includes(sortSplit[1])) {\n this.sortOrder = sortSplit[1] as SortOrder;\n } else {\n console.warn(`Sort order '${sortSplit[1]}' is not 'asc' or 'desc', defaulting to 'asc'`);\n }\n if (this.sortColumn) {\n this.matSort.sort({ id: this.sortColumn, start: this.sortOrder, disableClear: false });\n const sortHeader = this.matSort.sortables.get(this.sortColumn) as MatSortHeader;\n if (sortHeader) {\n sortHeader._setAnimationTransitionState({ toState: 'active' });\n } else {\n console.warn(`Unable to find sort column '${this.sortColumn}'. Initial sort failed.`);\n }\n }\n this.matDataSource.sort = this.matSort;\n }\n\n setPaginator(): void {\n // ensures ui updates correctly when paginator options change\n this.changeDetectorRef.detectChanges();\n this.matDataSource.paginator = this.matPaginator;\n }\n\n // necessary for web component to trigger this.filter.valueChanges\n onInputFilter(event: KeyboardEvent, column: Column): void {\n // defer setting filter control as event.target.value is not set yet\n setTimeout(() => this.filters.get(column.key).setValue((event.target as HTMLInputElement).value));\n }\n\n // necessary for web component to trigger this.filter.valueChanges\n onSelectFilter(event: MouseEvent, column: Column): void {\n const innerText = (event.target as HTMLInputElement).innerText;\n this.filters.get(column.key).setValue(innerText === '- none -' ? null : innerText);\n }\n\n // necessary for web component to trigger this.filter.valueChanges\n onMultiSelectFilter(event: MouseEvent, column: Column): void {\n let value = this.filters.controls[column.key].value || [];\n const innerText = (event.target as HTMLInputElement).parentElement.innerText;\n if (value.includes(innerText)) {\n value = value.filter(v => v !== innerText);\n } else {\n value.push(innerText);\n }\n this.filters.get(column.key).setValue(\n value.length === 1 && innerText === ''\n ? null // when all checboxes have been deselected\n : value\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { FwTableComponent } from './table.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n MatPaginatorModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n ],\n exports: [\n FwTableComponent,\n ],\n declarations: [\n FwTableComponent,\n ],\n entryComponents: [\n FwTableComponent,\n ]\n})\nexport class FwTableModule {}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/button-group/button-group.component.ts","../../../src/components/button-group/button-group.module.ts","../../../src/components/button/button.component.ts","../../../src/components/button/button.module.ts","../../../node_modules/tslib/tslib.es6.js","../../../src/components/notification/notification.service.ts","../../../src/components/notification/notification-container/notification-container.component.ts","../../../src/components/notification/notification/notification.model.ts","../../../src/components/notification/notification-timer.service.ts","../../../src/components/notification/notification/notification.component.ts","../../../src/components/notification/notification.module.ts","../../../src/components/popover/popover-trigger.directive.ts","../../../src/components/popover/popover-trigger.component.ts","../../../src/components/popover/popover.component.ts","../../../src/components/popover/popover.module.ts","../../../src/components/table/table.component.ts","../../../src/components/table/table.module.ts"],"names":["this","layout","size","Component","args","host","class","[class.small]","[class.medium]","[class.large]","[class.compact]","selector","template","encapsulation","ViewEncapsulation","None","Input","NgModule","exports","FwButtonGroupComponent","declarations","entryComponents","type","imports","CommonModule","MatButtonModule","FwButtonComponent","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","TypeError","genId","String","padStart","Math","floor","random","Date","now","toString","FwNotificationService","notifications$","BehaviorSubject","notificationQueue","show","notification","id","push","dismiss","notificationId","filter","v","dismissAll","Injectable","providedIn","FwNotificationContainerComponent","cdr","notificationService","_this","limit","notifications","showMore","showLess","subscriptions","Subscription","EMPTY","subscribe","markForCheck","ngOnDestroy","_b","values","_c","unsubscribe","notificationClass","index","level","onReady","ref","startTimer","onDismiss","find","currentNotification","stopTimer","clearAll","onShowMore","onShowLess","[class.duo]","[class.triple]","changeDetection","ChangeDetectionStrategy","OnPush","ChangeDetectorRef","FwNotificationType","FwNotificationTimerService","remainingDuration","start","duration","Promise","resolve","resolver","continue","stop","clearTimeout","timerId","pause","getTime","window","setTimeout","FwNotificationComponent","timerService","notificationDuration","ready","EventEmitter","ngAfterViewInit","emit","then","onClickDismiss","[class.error]","Error","[class.info]","Info","[class.success]","Success","[class.wait]","Wait","[class.warning]","Warning","(click)","providers","Output","FwButtonModule","FwButtonGroupModule","MatIconModule","FwPopoverTriggerDirective","element","overlay","viewContainerRef","popoverMargin","positionMap","left","originX","originY","overlayX","overlayY","right","above","below","position","positionChanges","ngOnChanges","changes","overlayRef","dispose","_d","showPopover","_a","popover","templateRef","getOverlay","attach","TemplatePortal","hidePopover","e","relatedTarget","classList","contains","detach","setPopoverCaretPosition","caret","overlayElement","querySelector","caretRect","getBoundingClientRect","triggerRect","nativeElement","style","margin","includes","top","height","width","setPopoverPosition","positionChange","mainPosition","connectionPair","fallbackPosition","removePanelClass","addPanelClass","positionStrategy","flexibleConnectedTo","withPositions","getPositions","panelClass","addEventListener","getConfig","getMainPosition","getFallbackPosition","Directive","(mouseenter)","(mouseleave)","exportAs","ElementRef","Overlay","ViewContainerRef","FwPopoverTriggerComponent","_super","__","constructor","__extends","popoverId","popoverHTML","document","innerHTML","popoverTemplateRef","ViewChild","TemplateRef","FwPopoverComponent","FwTableComponent","changeDetectorRef","columns","dataSource","pageSize","webCompPageSize","sort","sortColumn","sortOrder","displayedColumns","filters","FormGroup","trackByIndex","ngOnInit","setDataSource","setColumns","addFilterControls","setFilter","matDataSource","filterPredicate","row","JSON","parse","filter_1","filterValue","rowValue","isArray","toLowerCase","valueChanges","pipe","debounceTime","setSort","setPaginator","defineProperty","column","addControl","key","FormControl","MatTableDataSource","map","stringify","matSort","sortSplit","split","console","warn","disableClear","sortHeader","sortables","get","_setAnimationTransitionState","toState","detectChanges","paginator","matPaginator","onInputFilter","event","setValue","target","onSelectFilter","innerText","onMultiSelectFilter","controls","parentElement","MatPaginator","MatSort","FormsModule","ReactiveFormsModule","MatInputModule","MatPaginatorModule","MatSelectModule","MatSortModule","MatTableModule"],"mappings":"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","sourcesContent":["import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n host: {\n 'class': 'fw-button-group',\n '[class.small]': 'size === \"small\"',\n '[class.medium]': 'size === \"medium\"',\n '[class.large]': 'size === \"large\"',\n '[class.compact]': 'layout === \"compact\"',\n },\n selector: 'fw-button-group',\n styleUrls: [ './button-group.component.scss' ],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n})\nexport class FwButtonGroupComponent {\n @Input() layout?: 'basic' | 'compact' = 'basic'\n @Input() size?: 'small' | 'medium' | 'large' = 'medium'\n}\n","import { NgModule } from '@angular/core';\n\nimport { FwButtonGroupComponent } from './button-group.component';\n\n@NgModule({\n exports: [\n FwButtonGroupComponent,\n ],\n declarations: [\n FwButtonGroupComponent,\n ],\n entryComponents: [\n FwButtonGroupComponent,\n ]\n})\nexport class FwButtonGroupModule {}","import { Component, Input } from '@angular/core';\nimport type { ThemePalette } from '@angular/material/core';\n\n@Component({\n host: {\n 'class': 'fw-button',\n '[class.small]': 'size === \"small\"',\n '[class.medium]': 'size === \"medium\"',\n '[class.large]': 'size === \"large\"',\n '[class.compact]': 'layout === \"compact\"',\n },\n selector: 'fw-button',\n styleUrls: ['./button.component.scss'],\n templateUrl: './button.component.html',\n})\nexport class FwButtonComponent {\n @Input() color?: ThemePalette\n @Input() layout?: 'basic' | 'compact' = 'basic'\n @Input() size?: 'small' | 'medium' | 'large' = 'medium'\n @Input() type?: 'basic' | 'flat' | 'raised' | 'stroked' = 'basic'\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { FwButtonComponent } from './button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n ],\n exports: [\n FwButtonComponent,\n ],\n declarations: [\n FwButtonComponent,\n ],\n entryComponents: [\n FwButtonComponent,\n ],\n})\nexport class FwButtonModule {}\n","/*! *****************************************************************************\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(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, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Notification } from './notification/notification.model';\n\nexport function genId(): string {\n return String.prototype.padStart(24, Math.floor(Math.random() * Date.now()).toString(16));\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FwNotificationService {\n readonly notifications$ = new BehaviorSubject<Notification[]>([]);\n private notificationQueue: Notification[] = [];\n\n show(notification: Notification): void {\n if (!notification.id) {\n notification.id = genId();\n }\n\n this.notificationQueue.push(notification);\n this.notifications$.next(this.notificationQueue);\n }\n\n dismiss(notificationId: string): void {\n this.notificationQueue = this.notificationQueue.filter((v) => v.id !== notificationId);\n this.notifications$.next(this.notificationQueue);\n }\n\n dismissAll(): void {\n this.notificationQueue = [];\n this.notifications$.next(this.notificationQueue);\n }\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { FwNotificationService } from '../notification.service';\nimport { FwNotificationComponent } from '../notification/notification.component';\nimport { Notification } from '../notification/notification.model';\n\n@Component({\n host: {\n 'class': 'fw-notification-container',\n '[class.duo]': 'notifications.length === 2',\n '[class.triple]': 'notifications.length >= 3',\n },\n selector: 'fw-notification-container',\n templateUrl: './notification-container.component.html',\n styleUrls: ['./notification-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FwNotificationContainerComponent implements OnDestroy {\n limit = 3;\n notifications: Notification[] = [];\n showMore = false;\n showLess = false;\n\n private subscriptions = {\n notifications: Subscription.EMPTY\n }\n\n constructor(private cdr: ChangeDetectorRef, private notificationService: FwNotificationService) {\n this.subscriptions.notifications = this.notificationService.notifications$.subscribe((notifications: Notification[]) => {\n this.notifications = notifications;\n this.showMore = this.notifications.length > 1;\n this.showLess = false;\n this.cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n for (const subscription of Object.values(this.subscriptions)) {\n subscription.unsubscribe();\n }\n }\n\n notificationClass(index: number): string {\n let cssClass: string;\n const level = this.notifications.length > this.limit\n ? index - (this.notifications.length - this.limit)\n : index;\n\n if (this.showLess) {\n cssClass = 'default';\n } else {\n cssClass = level >= 0 ? `level-${level}` : 'hidden';\n }\n\n return cssClass;\n }\n\n onReady(notification: FwNotificationComponent): void {\n const currentNotification = this.notifications[this.notifications.length - 1];\n currentNotification.ref = notification;\n notification.startTimer();\n }\n\n onDismiss(notificationId: string): void {\n const notification = this.notifications.find((currentNotification) => currentNotification.id === notificationId);\n if (notification) {\n notification.ref.stopTimer();\n }\n\n this.notificationService.dismiss(notification.id);\n this.cdr.markForCheck();\n }\n\n clearAll(): void {\n this.showMore = false;\n this.showLess = false;\n this.notificationService.dismissAll();\n this.cdr.markForCheck();\n }\n\n onShowMore(): void {\n this.showLess = true;\n this.showMore = false;\n this.cdr.markForCheck();\n }\n\n onShowLess(): void {\n this.showMore = true;\n this.showLess = false;\n this.cdr.markForCheck();\n }\n}\n","import { FwNotificationComponent } from './notification.component';\n\nexport enum FwNotificationType {\n Error = 'error',\n Info = 'info',\n Success = 'success',\n Wait = 'wait',\n Warning = 'warning',\n}\n\nexport interface Notification {\n id?: string\n message: string\n type: FwNotificationType\n ref?: FwNotificationComponent\n}","import { Injectable } from \"@angular/core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class FwNotificationTimerService {\n private timerId: number;\n private now = 0;\n private remainingDuration = 0;\n private resolver: () => void;\n\n start(duration: number): Promise<void> {\n return new Promise<void>((resolve) => {\n this.remainingDuration = duration;\n this.resolver = resolve;\n this.continue();\n });\n }\n\n stop(): void {\n clearTimeout(this.timerId);\n this.remainingDuration = 0;\n }\n\n pause(): void {\n clearTimeout(this.timerId);\n this.remainingDuration =\n this.remainingDuration - new Date().getTime() - this.now;\n }\n\n continue(): void {\n this.now = new Date().getTime();\n this.timerId = window.setTimeout(() => {\n this.resolver();\n }, this.remainingDuration);\n }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { FwNotificationTimerService } from '../notification-timer.service';\nimport { FwNotificationType, Notification } from './notification.model';\n\n@Component({\n host: {\n 'class': 'fw-notification',\n '[class.error]': `notification.type === '${FwNotificationType.Error}'`,\n '[class.info]': `notification.type === '${FwNotificationType.Info}'`,\n '[class.success]': `notification.type === '${FwNotificationType.Success}'`,\n '[class.wait]': `notification.type === '${FwNotificationType.Wait}'`,\n '[class.warning]': `notification.type === '${FwNotificationType.Warning}'`,\n '(click)': 'onClickDismiss()'\n },\n selector: 'fw-notification',\n styleUrls: [ './notification.component.scss' ],\n template: `<ng-container>{{ notification.message }}</ng-container>`,\n providers: [FwNotificationTimerService],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class FwNotificationComponent implements AfterViewInit {\n @Input() notification: Notification\n @Input() notificationDuration: number = 9000;\n @Output() ready = new EventEmitter<FwNotificationComponent>()\n @Output() dismiss = new EventEmitter<string>()\n\n constructor(private cdr: ChangeDetectorRef, private timerService: FwNotificationTimerService) {}\n\n ngAfterViewInit(): void {\n this.ready.emit(this);\n this.cdr.markForCheck();\n }\n\n startTimer(): void {\n this.timerService.start(this.notificationDuration).then(() => {\n this.onClickDismiss();\n this.cdr.markForCheck();\n });\n }\n\n stopTimer(): void {\n this.timerService.stop();\n this.cdr.markForCheck();\n }\n\n onClickDismiss(): void {\n this.dismiss.emit(this.notification.id);\n this.cdr.markForCheck();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { FwButtonGroupModule } from '../button-group/button-group.module';\nimport { FwButtonModule } from '../button/button.module';\nimport { FwNotificationContainerComponent } from './notification-container/notification-container.component';\nimport { FwNotificationService } from './notification.service';\nimport { FwNotificationComponent } from './notification/notification.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FwButtonModule,\n FwButtonGroupModule,\n MatButtonModule,\n MatIconModule,\n ],\n exports: [\n FwNotificationComponent,\n FwNotificationContainerComponent\n ],\n declarations: [\n FwNotificationComponent,\n FwNotificationContainerComponent,\n ],\n entryComponents: [\n FwNotificationComponent,\n ],\n providers: [\n FwNotificationService,\n ]\n})\nexport class FwNotificationModule {}","import { ConnectedOverlayPositionChange, ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Directive, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { FwPopoverComponent } from './popover.component';\n\nexport type FwPopoverPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n\n@Directive({\n host: {\n 'class': 'fw-popover-trigger',\n '(mouseenter)': 'showPopover()',\n '(mouseleave)': 'hidePopover($event)',\n },\n selector: '[fwPopoverTriggerFor]',\n exportAs: 'fwPopoverTrigger',\n})\nexport class FwPopoverTriggerDirective implements OnChanges, OnDestroy {\n public popoverId: string\n private popoverMargin = 15\n private fallbackPosition: FwPopoverPosition\n private mainPosition: FwPopoverPosition\n private overlayRef: OverlayRef\n private positionMap: { [key: string]: ConnectedPosition } = {\n 'left': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n 'right': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },\n 'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },\n 'below': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\n }\n\n @Input('fwPopoverTriggerFor') popover: FwPopoverComponent\n @Input('fwPopoverPosition') position: FwPopoverPosition = 'below'\n\n private subscriptions = {\n positionChanges: Subscription.EMPTY,\n };\n\n constructor(\n public element: ElementRef,\n public overlay: Overlay,\n public viewContainerRef: ViewContainerRef,\n ) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.position && this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n for (const subscription of Object.values(this.subscriptions)) {\n subscription.unsubscribe();\n }\n }\n\n showPopover(): void {\n if (this.popover?.templateRef) {\n this.getOverlay().attach(new TemplatePortal(this.popover.templateRef, this.viewContainerRef));\n }\n }\n\n hidePopover(e: MouseEvent): void {\n if (!(e.relatedTarget as HTMLElement)?.classList.contains('fw-popover-panel')) {\n this.getOverlay().detach();\n }\n }\n\n private setPopoverCaretPosition(position: FwPopoverPosition): void {\n const caret = this.overlayRef.overlayElement.querySelector('.fw-popover-caret') as HTMLElement;\n const caretRect = this.overlayRef.overlayElement.getBoundingClientRect();\n const triggerRect = this.element.nativeElement.getBoundingClientRect();\n (this.overlayRef.overlayElement.querySelector('.fw-popover-content-wrapper') as HTMLElement).style.margin = `${this.popoverMargin}px`;\n if (['left', 'right', 'before', 'after'].includes(position)) {\n caret.style.top = `${triggerRect.top - caretRect.top - this.popoverMargin + (triggerRect.height / 2)}px`;\n } else {\n caret.style.left = `${triggerRect.left - caretRect.left - this.popoverMargin + (triggerRect.width / 2)}px`;\n }\n }\n\n private setPopoverPosition(positionChange: ConnectedOverlayPositionChange): void {\n const position = this.positionMap[this.mainPosition] === positionChange.connectionPair\n ? this.mainPosition\n : this.positionMap[this.fallbackPosition] === positionChange.connectionPair\n ? this.fallbackPosition\n : this.mainPosition;\n this.overlayRef.removePanelClass(['fw-popover-above', 'fw-popover-below', 'fw-popover-left', 'fw-popover-right']);\n this.overlayRef.addPanelClass(`fw-popover-${position}`);\n this.setPopoverCaretPosition(position);\n }\n\n public getOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position()\n .flexibleConnectedTo(this.element)\n .withPositions(this.getPositions()),\n panelClass: 'fw-popover-panel',\n });\n this.overlayRef.overlayElement.addEventListener('mouseleave', e => this.hidePopover(e));\n this.subscriptions.positionChanges = (this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy).positionChanges\n .subscribe(positionChange => this.setPopoverPosition(positionChange));\n }\n return this.overlayRef;\n }\n\n private getMainPosition(): FwPopoverPosition {\n return this.mainPosition =\n ['left', 'before'].includes(this.position)\n ? 'left'\n : ['right', 'after'].includes(this.position)\n ? 'right'\n : this.position === 'above'\n ? 'above'\n : 'below';\n }\n\n private getFallbackPosition(): FwPopoverPosition {\n return this.fallbackPosition =\n ['left', 'before'].includes(this.position)\n ? 'right'\n : ['right', 'after'].includes(this.position)\n ? 'left'\n : this.position === 'above'\n ? 'below'\n : 'above';\n }\n\n private getPositions(): ConnectedPosition[] {\n return [\n // main position\n this.positionMap[this.getMainPosition()],\n // fallback position (inverse of main)\n this.positionMap[this.getFallbackPosition()],\n ];\n }\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Component, TemplateRef, ViewChild } from '@angular/core';\nimport { ElementRef, Input, ViewContainerRef } from '@angular/core';\n\nimport { FwPopoverPosition, FwPopoverTriggerDirective } from './popover-trigger.directive';\n\n@Component({\n host: {\n 'class': 'fw-popover-trigger',\n '(mouseenter)': 'showPopover()',\n '(mouseleave)': 'hidePopover($event)',\n },\n selector: 'fw-popover-trigger',\n template: `<ng-content></ng-content>\n <!-- for web component support -->\n <ng-template>\n <div [innerHTML]=\"popoverHTML\"></div>\n </ng-template>`,\n})\nexport class FwPopoverTriggerComponent extends FwPopoverTriggerDirective {\n @Input('trigger-for') popoverId: string\n @Input('position') position: FwPopoverPosition = 'below'\n\n // for web component support\n @ViewChild(TemplateRef) popoverTemplateRef: TemplateRef<any> // eslint-disable-line @typescript-eslint/no-explicit-any\n popoverHTML: string\n\n constructor(\n public element: ElementRef,\n public overlay: Overlay,\n public viewContainerRef: ViewContainerRef,\n ) {\n super(element, overlay, viewContainerRef);\n }\n\n showPopover(): void {\n const overlay = this.getOverlay();\n overlay.detach();\n if (this.popoverId) {\n // as a web component it is not possible to have a reference to this.popover\n this.popoverHTML = document.querySelector(`fw-popover#${this.popoverId}`).innerHTML;\n overlay.attach(new TemplatePortal(this.popoverTemplateRef, this.viewContainerRef));\n }\n }\n}\n","import { Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n host: { 'class': 'fw-popover' },\n selector: 'fw-popover',\n styleUrls: [ './popover.component.scss' ],\n template: `\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ng-template #content>\n <div class=\"fw-popover-content-wrapper\">\n <ng-content></ng-content>\n <div class=\"fw-popover-caret\"></div>\n </div>\n </ng-template>`,\n encapsulation: ViewEncapsulation.None,\n})\nexport class FwPopoverComponent {\n // Used for TemplatePortal in ./popover-trigger.directive.ts\n @ViewChild('content') templateRef: TemplateRef<any> // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n","import { CommonModule } from '@angular/common';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { NgModule } from '@angular/core';\n\nimport { FwPopoverTriggerComponent } from './popover-trigger.component';\nimport { FwPopoverTriggerDirective } from './popover-trigger.directive';\nimport { FwPopoverComponent } from './popover.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FwPopoverComponent,\n FwPopoverTriggerComponent,\n FwPopoverTriggerDirective,\n ],\n declarations: [\n FwPopoverComponent,\n FwPopoverTriggerComponent,\n FwPopoverTriggerDirective,\n ],\n entryComponents: [\n FwPopoverComponent,\n FwPopoverTriggerComponent,\n ],\n providers: [\n Overlay,\n ],\n})\nexport class FwPopoverModule {}\n","import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime } from 'rxjs/operators';\n\ntype SortOrder = 'asc' | 'desc'\n\ninterface ColumnFilter {\n control: 'input' | 'select' | 'multi-select',\n options?: string[],\n placeholder?: string,\n}\n\ninterface Column {\n label: string,\n key: string,\n filter?: ColumnFilter,\n}\n\n@Component({\n host: {\n 'class': 'fw-table',\n '[class.compact]': 'isCompact',\n },\n selector: 'fw-table',\n styleUrls: ['./table.component.scss'],\n templateUrl: './table.component.html',\n})\nexport class FwTableComponent implements OnInit, OnChanges {\n @Input() columns: Column[] = []\n @Input() dataSource: any[] = []\n @Input() layout?: 'basic' | 'compact' = 'basic'\n @Input() pageSize = null\n @Input('page-size') webCompPageSize = null\n @Input() sort = null\n\n private sortColumn = ''\n private sortOrder: SortOrder = 'asc'\n\n displayedColumns: string[] = []\n filters: FormGroup = new FormGroup({})\n matDataSource: MatTableDataSource<any>\n\n // to support updating column header labels\n trackByIndex: any = i => i\n\n @ViewChild(MatPaginator) matPaginator: MatPaginator\n @ViewChild(MatSort) matSort: MatSort\n\n constructor(\n private changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void {\n this.setDataSource();\n this.setColumns();\n this.addFilterControls();\n this.setFilter();\n this.matDataSource.filterPredicate = (row, filter) => {\n const filters = JSON.parse(filter);\n for (const filter in filters) {\n const filterValue = filters[filter];\n const rowValue = row[filter];\n // multi-select\n if (Array.isArray(filterValue) && filterValue.length > 0 && !filterValue.includes(rowValue)) {\n return false;\n }\n // input or select\n if (!Array.isArray(filterValue) && !String(rowValue).toLowerCase().includes(String(filterValue ?? '').toLowerCase())) {\n return false;\n }\n }\n return true;\n };\n this.filters.valueChanges.pipe(debounceTime(200)).subscribe(() => this.setFilter());\n }\n\n ngAfterViewInit(): void {\n this.setSort();\n this.setPaginator();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.columns) {\n this.setColumns();\n }\n if (changes.dataSource) {\n this.setDataSource();\n }\n if (changes.sort || changes.dataSource) {\n this.setSort();\n }\n if (changes.pageSize || changes['page-size']) {\n this.setPaginator();\n }\n }\n\n get isCompact(): boolean {\n return this.layout === 'compact';\n }\n\n get paginationSize(): number {\n return this.pageSize || this.webCompPageSize || 0;\n }\n\n get isSortEnabled(): boolean {\n return this.sort !== null;\n }\n\n addFilterControls(): void {\n for (const column of this.columns) {\n this.filters.addControl(column.key, new FormControl());\n }\n }\n\n setDataSource(): void {\n this.matDataSource = new MatTableDataSource(this.dataSource);\n }\n\n setColumns(): void {\n this.displayedColumns = this.columns.map(column => column.key);\n }\n\n setFilter(): void {\n this.matDataSource.filter = JSON.stringify(this.filters.value);\n }\n\n setSort(): void {\n if (!this.matSort || this.sort === null) {\n return;\n }\n const sortSplit = this.sort.split(' ');\n this.sortColumn = sortSplit[0];\n if (['asc', 'desc'].includes(sortSplit[1])) {\n this.sortOrder = sortSplit[1] as SortOrder;\n } else {\n console.warn(`Sort order '${sortSplit[1]}' is not 'asc' or 'desc', defaulting to 'asc'`);\n }\n if (this.sortColumn) {\n this.matSort.sort({ id: this.sortColumn, start: this.sortOrder, disableClear: false });\n const sortHeader = this.matSort.sortables.get(this.sortColumn) as MatSortHeader;\n if (sortHeader) {\n sortHeader._setAnimationTransitionState({ toState: 'active' });\n } else {\n console.warn(`Unable to find sort column '${this.sortColumn}'. Initial sort failed.`);\n }\n }\n this.matDataSource.sort = this.matSort;\n }\n\n setPaginator(): void {\n // ensures ui updates correctly when paginator options change\n this.changeDetectorRef.detectChanges();\n this.matDataSource.paginator = this.matPaginator;\n }\n\n // necessary for web component to trigger this.filter.valueChanges\n onInputFilter(event: KeyboardEvent, column: Column): void {\n // defer setting filter control as event.target.value is not set yet\n setTimeout(() => this.filters.get(column.key).setValue((event.target as HTMLInputElement).value));\n }\n\n // necessary for web component to trigger this.filter.valueChanges\n onSelectFilter(event: MouseEvent, column: Column): void {\n const innerText = (event.target as HTMLInputElement).innerText;\n this.filters.get(column.key).setValue(innerText === '- none -' ? null : innerText);\n }\n\n // necessary for web component to trigger this.filter.valueChanges\n onMultiSelectFilter(event: MouseEvent, column: Column): void {\n let value = this.filters.controls[column.key].value || [];\n const innerText = (event.target as HTMLInputElement).parentElement.innerText;\n if (value.includes(innerText)) {\n value = value.filter(v => v !== innerText);\n } else {\n value.push(innerText);\n }\n this.filters.get(column.key).setValue(\n value.length === 1 && innerText === ''\n ? null // when all checboxes have been deselected\n : value\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { FwTableComponent } from './table.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n MatPaginatorModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n ],\n exports: [\n FwTableComponent,\n ],\n declarations: [\n FwTableComponent,\n ],\n entryComponents: [\n FwTableComponent,\n ]\n})\nexport class FwTableModule {}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, EventEmitter } from '@angular/core';
|
|
2
|
+
import { FwNotificationTimerService } from '../notification-timer.service';
|
|
3
|
+
import { Notification } from './notification.model';
|
|
4
|
+
export declare class FwNotificationComponent implements AfterViewInit {
|
|
5
|
+
private cdr;
|
|
6
|
+
private timerService;
|
|
7
|
+
notification: Notification;
|
|
8
|
+
notificationDuration: number;
|
|
9
|
+
ready: EventEmitter<FwNotificationComponent>;
|
|
10
|
+
dismiss: EventEmitter<string>;
|
|
11
|
+
constructor(cdr: ChangeDetectorRef, timerService: FwNotificationTimerService);
|
|
12
|
+
ngAfterViewInit(): void;
|
|
13
|
+
startTimer(): void;
|
|
14
|
+
stopTimer(): void;
|
|
15
|
+
onClickDismiss(): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FwNotificationComponent } from './notification.component';
|
|
2
|
+
export declare enum FwNotificationType {
|
|
3
|
+
Error = "error",
|
|
4
|
+
Info = "info",
|
|
5
|
+
Success = "success",
|
|
6
|
+
Wait = "wait",
|
|
7
|
+
Warning = "warning"
|
|
8
|
+
}
|
|
9
|
+
export interface Notification {
|
|
10
|
+
id?: string;
|
|
11
|
+
message: string;
|
|
12
|
+
type: FwNotificationType;
|
|
13
|
+
ref?: FwNotificationComponent;
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FwNotificationService } from '../notification.service';
|
|
3
|
+
import { FwNotificationComponent } from '../notification/notification.component';
|
|
4
|
+
import { Notification } from '../notification/notification.model';
|
|
5
|
+
export declare class FwNotificationContainerComponent implements OnDestroy {
|
|
6
|
+
private cdr;
|
|
7
|
+
private notificationService;
|
|
8
|
+
limit: number;
|
|
9
|
+
notifications: Notification[];
|
|
10
|
+
showMore: boolean;
|
|
11
|
+
showLess: boolean;
|
|
12
|
+
private subscriptions;
|
|
13
|
+
constructor(cdr: ChangeDetectorRef, notificationService: FwNotificationService);
|
|
14
|
+
ngOnDestroy(): void;
|
|
15
|
+
notificationClass(index: number): string;
|
|
16
|
+
onReady(notification: FwNotificationComponent): void;
|
|
17
|
+
onDismiss(notificationId: string): void;
|
|
18
|
+
clearAll(): void;
|
|
19
|
+
onShowMore(): void;
|
|
20
|
+
onShowLess(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { Notification } from './notification/notification.model';
|
|
3
|
+
export declare function genId(): string;
|
|
4
|
+
export declare class FwNotificationService {
|
|
5
|
+
readonly notifications$: BehaviorSubject<Notification[]>;
|
|
6
|
+
private notificationQueue;
|
|
7
|
+
show(notification: Notification): void;
|
|
8
|
+
dismiss(notificationId: string): void;
|
|
9
|
+
dismissAll(): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { FwNotificationTimerService } from '../notification-timer.service';
|
|
3
|
+
import { FwNotificationType } from './notification.model';
|
|
4
|
+
export class FwNotificationComponent {
|
|
5
|
+
constructor(cdr, timerService) {
|
|
6
|
+
this.cdr = cdr;
|
|
7
|
+
this.timerService = timerService;
|
|
8
|
+
this.notificationDuration = 9000;
|
|
9
|
+
this.ready = new EventEmitter();
|
|
10
|
+
this.dismiss = new EventEmitter();
|
|
11
|
+
}
|
|
12
|
+
ngAfterViewInit() {
|
|
13
|
+
this.ready.emit(this);
|
|
14
|
+
this.cdr.markForCheck();
|
|
15
|
+
}
|
|
16
|
+
startTimer() {
|
|
17
|
+
this.timerService.start(this.notificationDuration).then(() => {
|
|
18
|
+
this.onClickDismiss();
|
|
19
|
+
this.cdr.markForCheck();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
stopTimer() {
|
|
23
|
+
this.timerService.stop();
|
|
24
|
+
this.cdr.markForCheck();
|
|
25
|
+
}
|
|
26
|
+
onClickDismiss() {
|
|
27
|
+
this.dismiss.emit(this.notification.id);
|
|
28
|
+
this.cdr.markForCheck();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
FwNotificationComponent.decorators = [
|
|
32
|
+
{ type: Component, args: [{
|
|
33
|
+
host: {
|
|
34
|
+
'class': 'fw-notification',
|
|
35
|
+
'[class.error]': `notification.type === '${FwNotificationType.Error}'`,
|
|
36
|
+
'[class.info]': `notification.type === '${FwNotificationType.Info}'`,
|
|
37
|
+
'[class.success]': `notification.type === '${FwNotificationType.Success}'`,
|
|
38
|
+
'[class.wait]': `notification.type === '${FwNotificationType.Wait}'`,
|
|
39
|
+
'[class.warning]': `notification.type === '${FwNotificationType.Warning}'`,
|
|
40
|
+
'(click)': 'onClickDismiss()'
|
|
41
|
+
},
|
|
42
|
+
selector: 'fw-notification',
|
|
43
|
+
template: `<ng-container>{{ notification.message }}</ng-container>`,
|
|
44
|
+
providers: [FwNotificationTimerService],
|
|
45
|
+
encapsulation: ViewEncapsulation.None,
|
|
46
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
47
|
+
styles: [":root{--shadow-level-1:0px 1px 2px rgba(0,0,0,0.1);--shadow-level-2:0px 2px 4px rgba(0,0,0,0.1);--shadow-level-3:0px 4px 8px rgba(0,0,0,0.1);--inset-shadow-level-1:inset 0px 1px 2px rgba(0,0,0,0.1);--inset-shadow-level-2:inset 0px 2px 4px rgba(0,0,0,0.1);--inset-shadow-level-3:inset 0px 4px 8px rgba(0,0,0,0.1);--font-primary:\"Inter\",system-ui,-apple-system,BlinkMacSystemFont,Roboto,Ubuntu,\"Helvetica Neue\",Oxygen,Cantarell,sans-serif;--font-secondary:\"Poppins\",system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Ubuntu,\"Helvetica Neue\",Oxygen,Cantarell,sans-serif;--sidebar-width:55px;--menu-bar-width:180px;--page-layout-padding:235px;--radius:6px}*{font-family:var(--font-primary);box-sizing:border-box;text-shadow:1px 1px 1px rgba(0,0,0,.004);text-rendering:optimizeLegibility!important;-webkit-font-smoothing:antialiased!important}html{background:var(--color-gray)}body,html{height:100%}fw-notification{display:block;border-radius:4px;box-sizing:border-box;margin:5px 24px;max-width:33vw;min-width:344px;padding:14px 16px;height:48px;transform-origin:center;background-color:#2f96b4;border:1px solid hsla(0,0%,100%,.7019607843137254);box-shadow:0 0 12px #999;color:#fff;opacity:.99}fw-notification .notification{display:flex;justify-content:space-between;align-items:center}fw-notification.error{background-color:#bd362f}fw-notification.info{background-color:#2f96b4}fw-notification.success{background-color:#51a351}fw-notification.wait{background-color:#2f96b4}fw-notification.warning{background-color:#f89406}"]
|
|
48
|
+
},] }
|
|
49
|
+
];
|
|
50
|
+
FwNotificationComponent.ctorParameters = () => [
|
|
51
|
+
{ type: ChangeDetectorRef },
|
|
52
|
+
{ type: FwNotificationTimerService }
|
|
53
|
+
];
|
|
54
|
+
FwNotificationComponent.propDecorators = {
|
|
55
|
+
notification: [{ type: Input }],
|
|
56
|
+
notificationDuration: [{ type: Input }],
|
|
57
|
+
ready: [{ type: Output }],
|
|
58
|
+
dismiss: [{ type: Output }]
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVySixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFvQnhFLE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFBb0IsR0FBc0IsRUFBVSxZQUF3QztRQUF4RSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUE0QjtRQUpuRix5QkFBb0IsR0FBVyxJQUFJLENBQUM7UUFDbkMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFBO1FBQ25ELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFBO0lBRWlELENBQUM7SUFFaEcsZUFBZTtRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7O1lBOUNGLFNBQVMsU0FBQztnQkFDVCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsZUFBZSxFQUFFLDBCQUEwQixrQkFBa0IsQ0FBQyxLQUFLLEdBQUc7b0JBQ3RFLGNBQWMsRUFBRSwwQkFBMEIsa0JBQWtCLENBQUMsSUFBSSxHQUFHO29CQUNwRSxpQkFBaUIsRUFBRSwwQkFBMEIsa0JBQWtCLENBQUMsT0FBTyxHQUFHO29CQUMxRSxjQUFjLEVBQUUsMEJBQTBCLGtCQUFrQixDQUFDLElBQUksR0FBRztvQkFDcEUsaUJBQWlCLEVBQUUsMEJBQTBCLGtCQUFrQixDQUFDLE9BQU8sR0FBRztvQkFDMUUsU0FBUyxFQUFFLGtCQUFrQjtpQkFDOUI7Z0JBQ0QsUUFBUSxFQUFFLGlCQUFpQjtnQkFFM0IsUUFBUSxFQUFFLHlEQUF5RDtnQkFDbkUsU0FBUyxFQUFFLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3ZDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXJCZ0QsaUJBQWlCO1lBRXpELDBCQUEwQjs7OzJCQXNCaEMsS0FBSzttQ0FDTCxLQUFLO29CQUNMLE1BQU07c0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZ3Tm90aWZpY2F0aW9uVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLXRpbWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRndOb3RpZmljYXRpb25UeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICcuL25vdGlmaWNhdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Z3LW5vdGlmaWNhdGlvbicsXG4gICAgJ1tjbGFzcy5lcnJvcl0nOiBgbm90aWZpY2F0aW9uLnR5cGUgPT09ICcke0Z3Tm90aWZpY2F0aW9uVHlwZS5FcnJvcn0nYCxcbiAgICAnW2NsYXNzLmluZm9dJzogYG5vdGlmaWNhdGlvbi50eXBlID09PSAnJHtGd05vdGlmaWNhdGlvblR5cGUuSW5mb30nYCxcbiAgICAnW2NsYXNzLnN1Y2Nlc3NdJzogYG5vdGlmaWNhdGlvbi50eXBlID09PSAnJHtGd05vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc30nYCxcbiAgICAnW2NsYXNzLndhaXRdJzogYG5vdGlmaWNhdGlvbi50eXBlID09PSAnJHtGd05vdGlmaWNhdGlvblR5cGUuV2FpdH0nYCxcbiAgICAnW2NsYXNzLndhcm5pbmddJzogYG5vdGlmaWNhdGlvbi50eXBlID09PSAnJHtGd05vdGlmaWNhdGlvblR5cGUuV2FybmluZ30nYCxcbiAgICAnKGNsaWNrKSc6ICdvbkNsaWNrRGlzbWlzcygpJ1xuICB9LFxuICBzZWxlY3RvcjogJ2Z3LW5vdGlmaWNhdGlvbicsXG4gIHN0eWxlVXJsczogWyAnLi9ub3RpZmljYXRpb24uY29tcG9uZW50LnNjc3MnIF0sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRhaW5lcj57eyBub3RpZmljYXRpb24ubWVzc2FnZSB9fTwvbmctY29udGFpbmVyPmAsXG4gIHByb3ZpZGVyczogW0Z3Tm90aWZpY2F0aW9uVGltZXJTZXJ2aWNlXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuXG5leHBvcnQgY2xhc3MgRndOb3RpZmljYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25cbiAgQElucHV0KCkgbm90aWZpY2F0aW9uRHVyYXRpb246IG51bWJlciA9IDkwMDA7XG4gIEBPdXRwdXQoKSByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8RndOb3RpZmljYXRpb25Db21wb25lbnQ+KClcbiAgQE91dHB1dCgpIGRpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0aW1lclNlcnZpY2U6IEZ3Tm90aWZpY2F0aW9uVGltZXJTZXJ2aWNlKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5LmVtaXQodGhpcyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzdGFydFRpbWVyKCk6IHZvaWQge1xuICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0YXJ0KHRoaXMubm90aWZpY2F0aW9uRHVyYXRpb24pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5vbkNsaWNrRGlzbWlzcygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBzdG9wVGltZXIoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lclNlcnZpY2Uuc3RvcCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DbGlja0Rpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQodGhpcy5ub3RpZmljYXRpb24uaWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export var FwNotificationType;
|
|
2
|
+
(function (FwNotificationType) {
|
|
3
|
+
FwNotificationType["Error"] = "error";
|
|
4
|
+
FwNotificationType["Info"] = "info";
|
|
5
|
+
FwNotificationType["Success"] = "success";
|
|
6
|
+
FwNotificationType["Wait"] = "wait";
|
|
7
|
+
FwNotificationType["Warning"] = "warning";
|
|
8
|
+
})(FwNotificationType || (FwNotificationType = {}));
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFOLElBQVksa0JBTVg7QUFORCxXQUFZLGtCQUFrQjtJQUM1QixxQ0FBZSxDQUFBO0lBQ2YsbUNBQWEsQ0FBQTtJQUNiLHlDQUFtQixDQUFBO0lBQ25CLG1DQUFhLENBQUE7SUFDYix5Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQU03QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZ3Tm90aWZpY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9ub3RpZmljYXRpb24uY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gRndOb3RpZmljYXRpb25UeXBlIHtcbiAgRXJyb3IgPSAnZXJyb3InLFxuICBJbmZvID0gJ2luZm8nLFxuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICBXYWl0ID0gJ3dhaXQnLFxuICBXYXJuaW5nID0gJ3dhcm5pbmcnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbiB7XG4gIGlkPzogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICB0eXBlOiBGd05vdGlmaWNhdGlvblR5cGVcbiAgcmVmPzogRndOb3RpZmljYXRpb25Db21wb25lbnRcbn0iXX0=
|
package/esm2015/components/notification/notification-container/notification-container.component.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import { FwNotificationService } from '../notification.service';
|
|
4
|
+
export class FwNotificationContainerComponent {
|
|
5
|
+
constructor(cdr, notificationService) {
|
|
6
|
+
this.cdr = cdr;
|
|
7
|
+
this.notificationService = notificationService;
|
|
8
|
+
this.limit = 3;
|
|
9
|
+
this.notifications = [];
|
|
10
|
+
this.showMore = false;
|
|
11
|
+
this.showLess = false;
|
|
12
|
+
this.subscriptions = {
|
|
13
|
+
notifications: Subscription.EMPTY
|
|
14
|
+
};
|
|
15
|
+
this.subscriptions.notifications = this.notificationService.notifications$.subscribe((notifications) => {
|
|
16
|
+
this.notifications = notifications;
|
|
17
|
+
this.showMore = this.notifications.length > 1;
|
|
18
|
+
this.showLess = false;
|
|
19
|
+
this.cdr.markForCheck();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
ngOnDestroy() {
|
|
23
|
+
for (const subscription of Object.values(this.subscriptions)) {
|
|
24
|
+
subscription.unsubscribe();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
notificationClass(index) {
|
|
28
|
+
let cssClass;
|
|
29
|
+
const level = this.notifications.length > this.limit
|
|
30
|
+
? index - (this.notifications.length - this.limit)
|
|
31
|
+
: index;
|
|
32
|
+
if (this.showLess) {
|
|
33
|
+
cssClass = 'default';
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
cssClass = level >= 0 ? `level-${level}` : 'hidden';
|
|
37
|
+
}
|
|
38
|
+
return cssClass;
|
|
39
|
+
}
|
|
40
|
+
onReady(notification) {
|
|
41
|
+
const currentNotification = this.notifications[this.notifications.length - 1];
|
|
42
|
+
currentNotification.ref = notification;
|
|
43
|
+
notification.startTimer();
|
|
44
|
+
}
|
|
45
|
+
onDismiss(notificationId) {
|
|
46
|
+
const notification = this.notifications.find((currentNotification) => currentNotification.id === notificationId);
|
|
47
|
+
if (notification) {
|
|
48
|
+
notification.ref.stopTimer();
|
|
49
|
+
}
|
|
50
|
+
this.notificationService.dismiss(notification.id);
|
|
51
|
+
this.cdr.markForCheck();
|
|
52
|
+
}
|
|
53
|
+
clearAll() {
|
|
54
|
+
this.showMore = false;
|
|
55
|
+
this.showLess = false;
|
|
56
|
+
this.notificationService.dismissAll();
|
|
57
|
+
this.cdr.markForCheck();
|
|
58
|
+
}
|
|
59
|
+
onShowMore() {
|
|
60
|
+
this.showLess = true;
|
|
61
|
+
this.showMore = false;
|
|
62
|
+
this.cdr.markForCheck();
|
|
63
|
+
}
|
|
64
|
+
onShowLess() {
|
|
65
|
+
this.showMore = true;
|
|
66
|
+
this.showLess = false;
|
|
67
|
+
this.cdr.markForCheck();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
FwNotificationContainerComponent.decorators = [
|
|
71
|
+
{ type: Component, args: [{
|
|
72
|
+
host: {
|
|
73
|
+
'class': 'fw-notification-container',
|
|
74
|
+
'[class.duo]': 'notifications.length === 2',
|
|
75
|
+
'[class.triple]': 'notifications.length >= 3',
|
|
76
|
+
},
|
|
77
|
+
selector: 'fw-notification-container',
|
|
78
|
+
template: "<div role=\"list\">\n <fw-notification *ngFor=\"let notification of notifications; index as i\"\n (ready)=\"onReady($event)\"\n (dismiss)=\"onDismiss($event)\"\n [class]=\"notificationClass(i)\"\n [notification]=\"notification\"\n [attr.aria-label]=\"notification.type + ' : ' + notification.message\"\n role=\"listitem\"\n ></fw-notification>\n <div class=\"buttons\">\n <fw-button *ngIf=\"showLess\" (click)=\"onShowLess()\" mat-button aria-label=\"show less\" layout=\"compact\" size=\"small\">\n <mat-icon>expand_less</mat-icon>\n </fw-button>\n <fw-button *ngIf=\"showMore\" (click)=\"onShowMore()\" mat-button aria-label=\"show more\" layout=\"compact\" size=\"small\">\n <mat-icon>expand_more</mat-icon>\n </fw-button>\n <fw-button (click)=\"clearAll()\" mat-button class=\"clear-all\" aria-label=\"clear all\" layout=\"compact\" size=\"small\">\n Clear All\n </fw-button>\n </div>\n</div>\n",
|
|
79
|
+
encapsulation: ViewEncapsulation.None,
|
|
80
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
81
|
+
styles: ["fw-notification-container{position:absolute;right:0;top:0;margin-top:20px;z-index:999999}fw-notification-container>div{display:flex;flex-direction:column-reverse}fw-notification-container .buttons{display:none;position:absolute;top:-5px;right:25px}fw-notification-container .buttons button{color:#fff;background-color:#919292;margin-left:2px}fw-notification-container .buttons button.mat-button{line-height:24px!important;margin:0 0 0 2px!important}fw-notification-container:hover .buttons{display:flex}fw-notification-container .hidden{display:none}fw-notification-container fw-notification:last-of-type{margin-top:24px}fw-notification-container.duo fw-notification.level-0,fw-notification-container.triple fw-notification.level-1{transform:scale(.95) translateY(-51px)}fw-notification-container.triple fw-notification.level-0{transform:scale(.9) translateY(-108px)}"]
|
|
82
|
+
},] }
|
|
83
|
+
];
|
|
84
|
+
FwNotificationContainerComponent.ctorParameters = () => [
|
|
85
|
+
{ type: ChangeDetectorRef },
|
|
86
|
+
{ type: FwNotificationService }
|
|
87
|
+
];
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbnRhaW5lci9ub3RpZmljYXRpb24tY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFnQmhFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFVM0MsWUFBb0IsR0FBc0IsRUFBVSxtQkFBMEM7UUFBMUUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBVDlGLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRVQsa0JBQWEsR0FBRztZQUN0QixhQUFhLEVBQUUsWUFBWSxDQUFDLEtBQUs7U0FDbEMsQ0FBQTtRQUdDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBNkIsRUFBRSxFQUFFO1lBQ3JILElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUks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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRndOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRndOb3RpZmljYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZnctbm90aWZpY2F0aW9uLWNvbnRhaW5lcicsXG4gICAgJ1tjbGFzcy5kdW9dJzogJ25vdGlmaWNhdGlvbnMubGVuZ3RoID09PSAyJyxcbiAgICAnW2NsYXNzLnRyaXBsZV0nOiAnbm90aWZpY2F0aW9ucy5sZW5ndGggPj0gMycsXG4gIH0sXG4gIHNlbGVjdG9yOiAnZnctbm90aWZpY2F0aW9uLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb24tY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm90aWZpY2F0aW9uLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRndOb3RpZmljYXRpb25Db250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBsaW1pdCA9IDM7XG4gIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbltdID0gW107XG4gIHNob3dNb3JlID0gZmFsc2U7XG4gIHNob3dMZXNzID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0ge1xuICAgIG5vdGlmaWNhdGlvbnM6IFN1YnNjcmlwdGlvbi5FTVBUWVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IEZ3Tm90aWZpY2F0aW9uU2VydmljZSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5ub3RpZmljYXRpb25zID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSgobm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW10pID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnM7XG4gICAgICB0aGlzLnNob3dNb3JlID0gdGhpcy5ub3RpZmljYXRpb25zLmxlbmd0aCA+IDE7XG4gICAgICB0aGlzLnNob3dMZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIE9iamVjdC52YWx1ZXModGhpcy5zdWJzY3JpcHRpb25zKSkge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbm90aWZpY2F0aW9uQ2xhc3MoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzOiBzdHJpbmc7XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLm5vdGlmaWNhdGlvbnMubGVuZ3RoID4gdGhpcy5saW1pdFxuICAgICAgPyBpbmRleCAtICh0aGlzLm5vdGlmaWNhdGlvbnMubGVuZ3RoIC0gdGhpcy5saW1pdClcbiAgICAgIDogaW5kZXg7XG5cbiAgICBpZiAodGhpcy5zaG93TGVzcykge1xuICAgICAgY3NzQ2xhc3MgPSAnZGVmYXVsdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNzc0NsYXNzID0gbGV2ZWwgPj0gMCA/IGBsZXZlbC0ke2xldmVsfWAgOiAnaGlkZGVuJztcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzQ2xhc3M7XG4gIH1cblxuICBvblJlYWR5KG5vdGlmaWNhdGlvbjogRndOb3RpZmljYXRpb25Db21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Tm90aWZpY2F0aW9uID0gdGhpcy5ub3RpZmljYXRpb25zW3RoaXMubm90aWZpY2F0aW9ucy5sZW5ndGggLSAxXTtcbiAgICBjdXJyZW50Tm90aWZpY2F0aW9uLnJlZiA9IG5vdGlmaWNhdGlvbjtcbiAgICBub3RpZmljYXRpb24uc3RhcnRUaW1lcigpO1xuICB9XG5cbiAgb25EaXNtaXNzKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZCgoY3VycmVudE5vdGlmaWNhdGlvbikgPT4gY3VycmVudE5vdGlmaWNhdGlvbi5pZCA9PT0gbm90aWZpY2F0aW9uSWQpO1xuICAgIGlmIChub3RpZmljYXRpb24pIHtcbiAgICAgIG5vdGlmaWNhdGlvbi5yZWYuc3RvcFRpbWVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmRpc21pc3Mobm90aWZpY2F0aW9uLmlkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vcmUgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dMZXNzID0gZmFsc2U7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uU2hvd01vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TGVzcyA9IHRydWU7XG4gICAgdGhpcy5zaG93TW9yZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TaG93TGVzcygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNb3JlID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dMZXNzID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FwNotificationTimerService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.now = 0;
|
|
6
|
+
this.remainingDuration = 0;
|
|
7
|
+
}
|
|
8
|
+
start(duration) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
this.remainingDuration = duration;
|
|
11
|
+
this.resolver = resolve;
|
|
12
|
+
this.continue();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
stop() {
|
|
16
|
+
clearTimeout(this.timerId);
|
|
17
|
+
this.remainingDuration = 0;
|
|
18
|
+
}
|
|
19
|
+
pause() {
|
|
20
|
+
clearTimeout(this.timerId);
|
|
21
|
+
this.remainingDuration =
|
|
22
|
+
this.remainingDuration - new Date().getTime() - this.now;
|
|
23
|
+
}
|
|
24
|
+
continue() {
|
|
25
|
+
this.now = new Date().getTime();
|
|
26
|
+
this.timerId = window.setTimeout(() => {
|
|
27
|
+
this.resolver();
|
|
28
|
+
}, this.remainingDuration);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
FwNotificationTimerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FwNotificationTimerService_Factory() { return new FwNotificationTimerService(); }, token: FwNotificationTimerService, providedIn: "root" });
|
|
32
|
+
FwNotificationTimerService.decorators = [
|
|
33
|
+
{ type: Injectable, args: [{
|
|
34
|
+
providedIn: "root",
|
|
35
|
+
},] }
|
|
36
|
+
];
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXRpbWVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXRpbWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUtVLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixzQkFBaUIsR0FBRyxDQUFDLENBQUM7S0E0Qi9CO0lBekJDLEtBQUssQ0FBQyxRQUFnQjtRQUNwQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSTtRQUNGLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSztRQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQjtZQUNwQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzdELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7O1lBakNGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBGd05vdGlmaWNhdGlvblRpbWVyU2VydmljZSB7XG4gIHByaXZhdGUgdGltZXJJZDogbnVtYmVyO1xuICBwcml2YXRlIG5vdyA9IDA7XG4gIHByaXZhdGUgcmVtYWluaW5nRHVyYXRpb24gPSAwO1xuICBwcml2YXRlIHJlc29sdmVyOiAoKSA9PiB2b2lkO1xuXG4gIHN0YXJ0KGR1cmF0aW9uOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVtYWluaW5nRHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgIHRoaXMucmVzb2x2ZXIgPSByZXNvbHZlO1xuICAgICAgdGhpcy5jb250aW51ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RvcCgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcklkKTtcbiAgICB0aGlzLnJlbWFpbmluZ0R1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHBhdXNlKCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgIHRoaXMucmVtYWluaW5nRHVyYXRpb24gPVxuICAgICAgdGhpcy5yZW1haW5pbmdEdXJhdGlvbiAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhpcy5ub3c7XG4gIH1cblxuICBjb250aW51ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMudGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXIoKTtcbiAgICB9LCB0aGlzLnJlbWFpbmluZ0R1cmF0aW9uKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
+
import { FwButtonGroupModule } from '../button-group/button-group.module';
|
|
6
|
+
import { FwButtonModule } from '../button/button.module';
|
|
7
|
+
import { FwNotificationContainerComponent } from './notification-container/notification-container.component';
|
|
8
|
+
import { FwNotificationService } from './notification.service';
|
|
9
|
+
import { FwNotificationComponent } from './notification/notification.component';
|
|
10
|
+
export class FwNotificationModule {
|
|
11
|
+
}
|
|
12
|
+
FwNotificationModule.decorators = [
|
|
13
|
+
{ type: NgModule, args: [{
|
|
14
|
+
imports: [
|
|
15
|
+
CommonModule,
|
|
16
|
+
FwButtonModule,
|
|
17
|
+
FwButtonGroupModule,
|
|
18
|
+
MatButtonModule,
|
|
19
|
+
MatIconModule,
|
|
20
|
+
],
|
|
21
|
+
exports: [
|
|
22
|
+
FwNotificationComponent,
|
|
23
|
+
FwNotificationContainerComponent
|
|
24
|
+
],
|
|
25
|
+
declarations: [
|
|
26
|
+
FwNotificationComponent,
|
|
27
|
+
FwNotificationContainerComponent,
|
|
28
|
+
],
|
|
29
|
+
entryComponents: [
|
|
30
|
+
FwNotificationComponent,
|
|
31
|
+
],
|
|
32
|
+
providers: [
|
|
33
|
+
FwNotificationService,
|
|
34
|
+
]
|
|
35
|
+
},] }
|
|
36
|
+
];
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBeUJoRixNQUFNLE9BQU8sb0JBQW9COzs7WUF2QmhDLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWixjQUFjO29CQUNkLG1CQUFtQjtvQkFDbkIsZUFBZTtvQkFDZixhQUFhO2lCQUNkO2dCQUNELE9BQU8sRUFBRTtvQkFDUCx1QkFBdUI7b0JBQ3ZCLGdDQUFnQztpQkFDakM7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLHVCQUF1QjtvQkFDdkIsZ0NBQWdDO2lCQUNqQztnQkFDRCxlQUFlLEVBQUU7b0JBQ2YsdUJBQXVCO2lCQUN4QjtnQkFDRCxTQUFTLEVBQUU7b0JBQ1QscUJBQXFCO2lCQUN0QjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5pbXBvcnQgeyBGd0J1dHRvbkdyb3VwTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uLWdyb3VwL2J1dHRvbi1ncm91cC5tb2R1bGUnO1xuaW1wb3J0IHsgRndCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLm1vZHVsZSc7XG5pbXBvcnQgeyBGd05vdGlmaWNhdGlvbkNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vbm90aWZpY2F0aW9uLWNvbnRhaW5lci9ub3RpZmljYXRpb24tY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGd05vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZ3Tm90aWZpY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRndCdXR0b25Nb2R1bGUsXG4gICAgRndCdXR0b25Hcm91cE1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEZ3Tm90aWZpY2F0aW9uQ29tcG9uZW50LFxuICAgIEZ3Tm90aWZpY2F0aW9uQ29udGFpbmVyQ29tcG9uZW50XG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZ3Tm90aWZpY2F0aW9uQ29tcG9uZW50LFxuICAgIEZ3Tm90aWZpY2F0aW9uQ29udGFpbmVyQ29tcG9uZW50LFxuICBdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBGd05vdGlmaWNhdGlvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRndOb3RpZmljYXRpb25TZXJ2aWNlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZ3Tm90aWZpY2F0aW9uTW9kdWxlIHt9Il19
|