@flywheel-io/vision 0.3.0 → 0.4.2

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.
Files changed (40) hide show
  1. package/bundles/flywheel-io-vision.umd.js +419 -22
  2. package/bundles/flywheel-io-vision.umd.js.map +1 -1
  3. package/bundles/flywheel-io-vision.umd.min.js +1 -1
  4. package/bundles/flywheel-io-vision.umd.min.js.map +1 -1
  5. package/components/dialog/choice-dialog.component.d.ts +24 -0
  6. package/components/dialog/confirm-dialog.component.d.ts +12 -0
  7. package/components/dialog/dialog.module.d.ts +2 -0
  8. package/components/dialog/dialog.service.d.ts +19 -0
  9. package/components/dialog/error-dialog.component.d.ts +10 -0
  10. package/components/dialog/portal-dialog.component.d.ts +25 -0
  11. package/components/notification/notification-container/notification-container.component.d.ts +2 -2
  12. package/components/shared/pipes/pipes.module.d.ts +4 -0
  13. package/components/shared/pipes/translate.pipe.d.ts +15 -0
  14. package/components/shared/pipes/trusthtml.pipe.d.ts +7 -0
  15. package/components/shared/translation.service.d.ts +11 -0
  16. package/esm2015/components/dialog/choice-dialog.component.js +52 -0
  17. package/esm2015/components/dialog/confirm-dialog.component.js +40 -0
  18. package/esm2015/components/dialog/dialog.module.js +45 -0
  19. package/esm2015/components/dialog/dialog.service.js +69 -0
  20. package/esm2015/components/dialog/error-dialog.component.js +32 -0
  21. package/esm2015/components/dialog/portal-dialog.component.js +88 -0
  22. package/esm2015/components/notification/notification/notification.component.js +3 -3
  23. package/esm2015/components/notification/notification-container/notification-container.component.js +17 -16
  24. package/esm2015/components/popover/popover.component.js +1 -1
  25. package/esm2015/components/shared/pipes/pipes.module.js +24 -0
  26. package/esm2015/components/shared/pipes/translate.pipe.js +40 -0
  27. package/esm2015/components/shared/pipes/trusthtml.pipe.js +20 -0
  28. package/esm2015/components/shared/translation.service.js +22 -0
  29. package/esm2015/flywheel-io-vision.js +5 -2
  30. package/esm2015/public-api.js +8 -1
  31. package/fesm2015/flywheel-io-vision.js +420 -23
  32. package/fesm2015/flywheel-io-vision.js.map +1 -1
  33. package/flywheel-io-vision.d.ts +4 -1
  34. package/flywheel-io-vision.metadata.json +1 -1
  35. package/package.json +2 -2
  36. package/public-api.d.ts +7 -0
  37. package/scss/config/colors.scss +5 -2
  38. package/scss/material/overrides.scss +8 -20
  39. package/styles.css +104 -109
  40. package/styles.scss +0 -3
@@ -1,2 +1,2 @@
1
- !function(o,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common"),require("@angular/material/button"),require("rxjs"),require("@angular/material/icon"),require("@angular/cdk/overlay"),require("@angular/cdk/portal"),require("@angular/forms"),require("@angular/material/paginator"),require("@angular/material/sort"),require("@angular/material/table"),require("rxjs/operators"),require("@angular/material/input"),require("@angular/material/select")):"function"==typeof define&&define.amd?define("@flywheel-io/vision",["exports","@angular/core","@angular/common","@angular/material/button","rxjs","@angular/material/icon","@angular/cdk/overlay","@angular/cdk/portal","@angular/forms","@angular/material/paginator","@angular/material/sort","@angular/material/table","rxjs/operators","@angular/material/input","@angular/material/select"],t):t(((o="undefined"!=typeof globalThis?globalThis:o||self)["flywheel-io"]=o["flywheel-io"]||{},o["flywheel-io"].vision={}),o.ng.core,o.ng.common,o.ng.material.button,o.rxjs,o.ng.material.icon,o.ng.cdk.overlay,o.ng.cdk.portal,o.ng.forms,o.ng.material.paginator,o.ng.material.sort,o.ng.material.table,o.rxjs.operators,o.ng.material.input,o.ng.material.select)}(this,(function(o,t,r,e,n,i,a,l,p,s,c,d,f,b,u){"use strict";var m=function(){this.layout="basic",this.size="medium"};m.decorators=[{type:t.Component,args:[{host:{class:"fw-button-group","[class.small]":'size === "small"',"[class.medium]":'size === "medium"',"[class.large]":'size === "large"',"[class.compact]":'layout === "compact"'},selector:"fw-button-group",template:"<ng-content></ng-content>",encapsulation:t.ViewEncapsulation.None,styles:["fw-button-group.fw-button-group{border-radius:4px;display:inline-flex;align-items:stretch}fw-button-group.fw-button-group.compact button{line-height:24px;height:24px}fw-button-group.fw-button-group.small button{font-size:12px}fw-button-group.fw-button-group.medium button{font-size:14px}fw-button-group.fw-button-group.large button{font-size:18px}fw-button-group.fw-button-group button{min-width:0;margin:0!important;border-radius:0}fw-button-group.fw-button-group>button:first-of-type,fw-button-group.fw-button-group>fw-button:first-of-type>button{border-top-left-radius:4px;border-bottom-left-radius:4px}fw-button-group.fw-button-group>button:last-of-type,fw-button-group.fw-button-group>fw-button:last-of-type>button{border-top-right-radius:4px;border-bottom-right-radius:4px}fw-button-group.fw-button-group>button.mat-stroked-button,fw-button-group.fw-button-group>button.mat-stroked-button+button.mat-stroke-button,fw-button-group.fw-button-group>fw-button[ng-reflect-type=stroked]+fw-button[ng-reflect-type=stroked]>button,fw-button-group.fw-button-group>fw-button[ng-reflect-type=stroked]>button,fw-button-group.fw-button-group>fw-button[type=stroked]+fw-button[type=stroked]>button,fw-button-group.fw-button-group>fw-button[type=stroked]>button{border-right-width:0}fw-button-group.fw-button-group>button.mat-stroked-button:last-of-type,fw-button-group.fw-button-group>fw-button[ng-reflect-type=stroked]:last-of-type>button,fw-button-group.fw-button-group>fw-button[type=stroked]:last-of-type>button{border-right-width:1px!important}fw-button-group.fw-button-group>button:not(.mat-stroked-button)+button.mat-stroked-button,fw-button-group.fw-button-group>fw-button:not([ng-reflect-type=stroked])+fw-button[ng-reflect-type=stroked]>button,fw-button-group.fw-button-group>fw-button:not([type=stroked])+fw-button[type=stroked]>button{border-left-width:0}"]}]}],m.propDecorators={layout:[{type:t.Input}],size:[{type:t.Input}]};var g=function(){};g.decorators=[{type:t.NgModule,args:[{exports:[m],declarations:[m],entryComponents:[m]}]}];var h=function(){this.layout="basic",this.size="medium",this.type="basic"};h.decorators=[{type:t.Component,args:[{host:{class:"fw-button","[class.small]":'size === "small"',"[class.medium]":'size === "medium"',"[class.large]":'size === "large"',"[class.compact]":'layout === "compact"'},selector:"fw-button",template:'<ng-container [ngSwitch]="type">\n <button *ngSwitchCase="\'raised\'" mat-raised-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n <button *ngSwitchCase="\'stroked\'" mat-stroked-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n <button *ngSwitchCase="\'flat\'" mat-flat-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n <button *ngSwitchDefault mat-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n',styles:[":host.compact>button{line-height:24px}:host.small{font-size:12px}:host.medium{font-size:14px}:host.large{font-size:18px}button{font-size:inherit}"]}]}],h.propDecorators={color:[{type:t.Input}],layout:[{type:t.Input}],size:[{type:t.Input}],type:[{type:t.Input}]};var y=function(){};y.decorators=[{type:t.NgModule,args:[{imports:[r.CommonModule,e.MatButtonModule],exports:[h],declarations:[h],entryComponents:[h]}]}];var w=function(o,t){return(w=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,t){o.__proto__=t}||function(o,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(o[r]=t[r])})(o,t)};Object.create;function v(o){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&o[t],e=0;if(r)return r.call(o);if(o&&"number"==typeof o.length)return{next:function(){return o&&e>=o.length&&(o=void 0),{value:o&&o[e++],done:!o}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}Object.create;function x(){return String.prototype.padStart(24,Math.floor(Math.random()*Date.now()).toString(16))}var k=function(){function o(){this.notifications$=new n.BehaviorSubject([]),this.notificationQueue=[]}return o.prototype.show=function(o){o.id||(o.id=x()),this.notificationQueue.push(o),this.notifications$.next(this.notificationQueue)},o.prototype.dismiss=function(o){this.notificationQueue=this.notificationQueue.filter((function(t){return t.id!==o})),this.notifications$.next(this.notificationQueue)},o.prototype.dismissAll=function(){this.notificationQueue=[],this.notifications$.next(this.notificationQueue)},o}();k.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new k},token:k,providedIn:"root"}),k.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}];var C=function(){function o(o,t){var r=this;this.cdr=o,this.notificationService=t,this.limit=3,this.notifications=[],this.showMore=!1,this.showLess=!1,this.subscriptions={notifications:n.Subscription.EMPTY},this.subscriptions.notifications=this.notificationService.notifications$.subscribe((function(o){r.notifications=o,r.showMore=r.notifications.length>1,r.showLess=!1,r.cdr.markForCheck()}))}return o.prototype.ngOnDestroy=function(){var o,t;try{for(var r=v(Object.values(this.subscriptions)),e=r.next();!e.done;e=r.next()){e.value.unsubscribe()}}catch(t){o={error:t}}finally{try{e&&!e.done&&(t=r.return)&&t.call(r)}finally{if(o)throw o.error}}},o.prototype.notificationClass=function(o){var t=this.notifications.length>this.limit?o-(this.notifications.length-this.limit):o;return this.showLess?"default":t>=0?"level-"+t:"hidden"},o.prototype.onReady=function(o){this.notifications[this.notifications.length-1].ref=o,o.startTimer()},o.prototype.onDismiss=function(o){var t=this.notifications.find((function(t){return t.id===o}));(null==t?void 0:t.ref)&&t.ref.stopTimer(),this.notificationService.dismiss(t.id),this.cdr.markForCheck()},o.prototype.clearAll=function(){this.showMore=!1,this.showLess=!1,this.notificationService.dismissAll(),this.cdr.markForCheck()},o.prototype.onShowMore=function(){this.showLess=!0,this.showMore=!1,this.cdr.markForCheck()},o.prototype.onShowLess=function(){this.showMore=!0,this.showLess=!1,this.cdr.markForCheck()},o}();C.decorators=[{type:t.Component,args:[{host:{class:"fw-notification-container","[class.duo]":"notifications.length === 2","[class.triple]":"notifications.length >= 3"},selector:"fw-notification-container",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',encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,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)}"]}]}],C.ctorParameters=function(){return[{type:t.ChangeDetectorRef},{type:k}]};var S,P=function(){function o(){this.now=0,this.remainingDuration=0}return o.prototype.start=function(o){var t=this;return new Promise((function(r){t.remainingDuration=o,t.resolver=r,t.continue()}))},o.prototype.stop=function(){clearTimeout(this.timerId),this.remainingDuration=0},o.prototype.pause=function(){clearTimeout(this.timerId),this.remainingDuration=this.remainingDuration-(new Date).getTime()-this.now},o.prototype.continue=function(){var o=this;this.now=(new Date).getTime(),this.timerId=window.setTimeout((function(){o.resolver()}),this.remainingDuration)},o}();(S=o.FwNotificationType||(o.FwNotificationType={})).Error="error",S.Info="info",S.Success="success",S.Wait="wait",S.Warning="warning";var M=function(){function r(o,r){this.cdr=o,this.timerService=r,this.notificationDuration=9e3,this.ready=new t.EventEmitter,this.dismiss=new t.EventEmitter}return Object.defineProperty(r.prototype,"cssClass",{get:function(){var t,r="fw-notification";switch(null===(t=this.notification)||void 0===t?void 0:t.type){case o.FwNotificationType.Error:return r+" error";case o.FwNotificationType.Info:return r+" info";case o.FwNotificationType.Success:return r+" success";case o.FwNotificationType.Wait:return r+" wait";case o.FwNotificationType.Warning:return r+" warning";default:return r}},enumerable:!1,configurable:!0}),r.prototype.ngAfterViewInit=function(){this.ready.emit(this),this.cdr.markForCheck()},r.prototype.startTimer=function(){var o=this;this.timerService.start(this.notificationDuration).then((function(){o.onClickDismiss(),o.cdr.markForCheck()}))},r.prototype.stopTimer=function(){this.timerService.stop(),this.cdr.markForCheck()},r.prototype.onClickDismiss=function(){this.dismiss.emit(this.notification.id),this.cdr.markForCheck()},r}();M.decorators=[{type:t.Component,args:[{host:{"(click)":"onClickDismiss()"},selector:"fw-notification",template:"<ng-container>{{ notification?.message }}</ng-container>",providers:[P],encapsulation:t.ViewEncapsulation.None,changeDetection:t.ChangeDetectionStrategy.OnPush,styles:["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}"]}]}],M.ctorParameters=function(){return[{type:t.ChangeDetectorRef},{type:P}]},M.propDecorators={notification:[{type:t.Input}],notificationDuration:[{type:t.Input}],ready:[{type:t.Output}],dismiss:[{type:t.Output}],cssClass:[{type:t.HostBinding,args:["class"]}]};var D=function(){};D.decorators=[{type:t.NgModule,args:[{imports:[r.CommonModule,y,g,e.MatButtonModule,i.MatIconModule],exports:[M,C],declarations:[M,C],entryComponents:[M],providers:[k]}]}];var F=function(){function o(o,t,r){this.element=o,this.overlay=t,this.viewContainerRef=r,this.popoverMargin=15,this.positionMap={left:{originX:"start",originY:"center",overlayX:"end",overlayY:"center"},right:{originX:"end",originY:"center",overlayX:"start",overlayY:"center"},above:{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom"},below:{originX:"center",originY:"bottom",overlayX:"center",overlayY:"top"}},this.position="below",this.subscriptions={positionChanges:n.Subscription.EMPTY}}return o.prototype.ngOnChanges=function(o){o.position&&this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)},o.prototype.ngOnDestroy=function(){var o,t;this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null);try{for(var r=v(Object.values(this.subscriptions)),e=r.next();!e.done;e=r.next()){e.value.unsubscribe()}}catch(t){o={error:t}}finally{try{e&&!e.done&&(t=r.return)&&t.call(r)}finally{if(o)throw o.error}}},o.prototype.showPopover=function(){var o;(null===(o=this.popover)||void 0===o?void 0:o.templateRef)&&this.getOverlay().attach(new l.TemplatePortal(this.popover.templateRef,this.viewContainerRef))},o.prototype.hidePopover=function(o){var t;(null===(t=o.relatedTarget)||void 0===t?void 0:t.classList.contains("fw-popover-panel"))||this.getOverlay().detach()},o.prototype.setPopoverCaretPosition=function(o){var t=this.overlayRef.overlayElement.querySelector(".fw-popover-caret"),r=this.overlayRef.overlayElement.getBoundingClientRect(),e=this.element.nativeElement.getBoundingClientRect();this.overlayRef.overlayElement.querySelector(".fw-popover-content-wrapper").style.margin=this.popoverMargin+"px",["left","right","before","after"].includes(o)?t.style.top=e.top-r.top-this.popoverMargin+e.height/2+"px":t.style.left=e.left-r.left-this.popoverMargin+e.width/2+"px"},o.prototype.setPopoverPosition=function(o){var t=this.positionMap[this.mainPosition]===o.connectionPair?this.mainPosition:this.positionMap[this.fallbackPosition]===o.connectionPair?this.fallbackPosition:this.mainPosition;this.overlayRef.removePanelClass(["fw-popover-above","fw-popover-below","fw-popover-left","fw-popover-right"]),this.overlayRef.addPanelClass("fw-popover-"+t),this.setPopoverCaretPosition(t)},o.prototype.getOverlay=function(){var o=this;return this.overlayRef||(this.overlayRef=this.overlay.create({positionStrategy:this.overlay.position().flexibleConnectedTo(this.element).withPositions(this.getPositions()),panelClass:"fw-popover-panel"}),this.overlayRef.overlayElement.addEventListener("mouseleave",(function(t){return o.hidePopover(t)})),this.subscriptions.positionChanges=this.overlayRef.getConfig().positionStrategy.positionChanges.subscribe((function(t){return o.setPopoverPosition(t)}))),this.overlayRef},o.prototype.getMainPosition=function(){return this.mainPosition=["left","before"].includes(this.position)?"left":["right","after"].includes(this.position)?"right":"above"===this.position?"above":"below"},o.prototype.getFallbackPosition=function(){return this.fallbackPosition=["left","before"].includes(this.position)?"right":["right","after"].includes(this.position)?"left":"above"===this.position?"below":"above"},o.prototype.getPositions=function(){return[this.positionMap[this.getMainPosition()],this.positionMap[this.getFallbackPosition()]]},o}();F.decorators=[{type:t.Directive,args:[{host:{class:"fw-popover-trigger","(mouseenter)":"showPopover()","(mouseleave)":"hidePopover($event)"},selector:"[fwPopoverTriggerFor]",exportAs:"fwPopoverTrigger"}]}],F.ctorParameters=function(){return[{type:t.ElementRef},{type:a.Overlay},{type:t.ViewContainerRef}]},F.propDecorators={popover:[{type:t.Input,args:["fwPopoverTriggerFor"]}],position:[{type:t.Input,args:["fwPopoverPosition"]}]};var T=function(o){function t(t,r,e){var n=o.call(this,t,r,e)||this;return n.element=t,n.overlay=r,n.viewContainerRef=e,n.position="below",n}return function(o,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=o}w(o,t),o.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}(t,o),t.prototype.showPopover=function(){var o=this.getOverlay();o.detach(),this.popoverId&&(this.popoverHTML=document.querySelector("fw-popover#"+this.popoverId).innerHTML,o.attach(new l.TemplatePortal(this.popoverTemplateRef,this.viewContainerRef)))},t}(F);T.decorators=[{type:t.Component,args:[{host:{class:"fw-popover-trigger","(mouseenter)":"showPopover()","(mouseleave)":"hidePopover($event)"},selector:"fw-popover-trigger",template:'<ng-content></ng-content>\n \x3c!-- for web component support --\x3e\n <ng-template>\n <div [innerHTML]="popoverHTML"></div>\n </ng-template>'}]}],T.ctorParameters=function(){return[{type:t.ElementRef},{type:a.Overlay},{type:t.ViewContainerRef}]},T.propDecorators={popoverId:[{type:t.Input,args:["trigger-for"]}],position:[{type:t.Input,args:["position"]}],popoverTemplateRef:[{type:t.ViewChild,args:[t.TemplateRef]}]};var I=function(){};I.decorators=[{type:t.Component,args:[{host:{class:"fw-popover"},selector:"fw-popover",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>',encapsulation:t.ViewEncapsulation.None,styles:['.white{color:#fff!important}.fill-white{background-color:#fff!important}.border-top-white,.border-white{border-color:#fff!important}.border-top-white{border-top:1px solid}.border-right-white{border-right:1px solid;border-color:#fff!important}.border-bottom-white{border-bottom:1px solid;border-color:#fff!important}.border-left-white{border-left:1px solid;border-color:#fff!important}.black{color:#000!important}.fill-black{background-color:#000!important}.border-black,.border-top-black{border-color:#000!important}.border-top-black{border-top:1px solid}.border-right-black{border-right:1px solid;border-color:#000!important}.border-bottom-black{border-bottom:1px solid;border-color:#000!important}.border-left-black{border-left:1px solid;border-color:#000!important}.green{color:#59b96b!important}.fill-green{background-color:#59b96b!important}.border-green,.border-top-green{border-color:#59b96b!important}.border-top-green{border-top:1px solid}.border-right-green{border-right:1px solid;border-color:#59b96b!important}.border-bottom-green{border-bottom:1px solid;border-color:#59b96b!important}.border-left-green{border-left:1px solid;border-color:#59b96b!important}.orange{color:#f7941d!important}.fill-orange{background-color:#f7941d!important}.border-orange,.border-top-orange{border-color:#f7941d!important}.border-top-orange{border-top:1px solid}.border-right-orange{border-right:1px solid;border-color:#f7941d!important}.border-bottom-orange{border-bottom:1px solid;border-color:#f7941d!important}.border-left-orange{border-left:1px solid;border-color:#f7941d!important}.red{color:#d22239!important}.fill-red{background-color:#d22239!important}.border-red,.border-top-red{border-color:#d22239!important}.border-top-red{border-top:1px solid}.border-right-red{border-right:1px solid;border-color:#d22239!important}.border-bottom-red{border-bottom:1px solid;border-color:#d22239!important}.border-left-red{border-left:1px solid;border-color:#d22239!important}.blue{color:#5871a2!important}.fill-blue{background-color:#5871a2!important}.border-blue,.border-top-blue{border-color:#5871a2!important}.border-top-blue{border-top:1px solid}.border-right-blue{border-right:1px solid;border-color:#5871a2!important}.border-bottom-blue{border-bottom:1px solid;border-color:#5871a2!important}.border-left-blue{border-left:1px solid;border-color:#5871a2!important}.focus-blue{color:#23527c!important}.fill-focus-blue{background-color:#23527c!important}.border-focus-blue,.border-top-focus-blue{border-color:#23527c!important}.border-top-focus-blue{border-top:1px solid}.border-right-focus-blue{border-right:1px solid;border-color:#23527c!important}.border-bottom-focus-blue{border-bottom:1px solid;border-color:#23527c!important}.border-left-focus-blue{border-left:1px solid;border-color:#23527c!important}.dark-blue{color:#394256!important}.fill-dark-blue{background-color:#394256!important}.border-dark-blue,.border-top-dark-blue{border-color:#394256!important}.border-top-dark-blue{border-top:1px solid}.border-right-dark-blue{border-right:1px solid;border-color:#394256!important}.border-bottom-dark-blue{border-bottom:1px solid;border-color:#394256!important}.border-left-dark-blue{border-left:1px solid;border-color:#394256!important}.light-blue{color:#e7f0fc!important}.fill-light-blue{background-color:#e7f0fc!important}.border-light-blue,.border-top-light-blue{border-color:#e7f0fc!important}.border-top-light-blue{border-top:1px solid}.border-right-light-blue{border-right:1px solid;border-color:#e7f0fc!important}.border-bottom-light-blue{border-bottom:1px solid;border-color:#e7f0fc!important}.border-left-light-blue{border-left:1px solid;border-color:#e7f0fc!important}.bright-blue{color:#1b68fa!important}.fill-bright-blue{background-color:#1b68fa!important}.border-bright-blue,.border-top-bright-blue{border-color:#1b68fa!important}.border-top-bright-blue{border-top:1px solid}.border-right-bright-blue{border-right:1px solid;border-color:#1b68fa!important}.border-bottom-bright-blue{border-bottom:1px solid;border-color:#1b68fa!important}.border-left-bright-blue{border-left:1px solid;border-color:#1b68fa!important}.admin-black{color:#01010a!important}.fill-admin-black{background-color:#01010a!important}.border-admin-black,.border-top-admin-black{border-color:#01010a!important}.border-top-admin-black{border-top:1px solid}.border-right-admin-black{border-right:1px solid;border-color:#01010a!important}.border-bottom-admin-black{border-bottom:1px solid;border-color:#01010a!important}.border-left-admin-black{border-left:1px solid;border-color:#01010a!important}.accent-purple{color:#b080fc!important}.fill-accent-purple{background-color:#b080fc!important}.border-accent-purple,.border-top-accent-purple{border-color:#b080fc!important}.border-top-accent-purple{border-top:1px solid}.border-right-accent-purple{border-right:1px solid;border-color:#b080fc!important}.border-bottom-accent-purple{border-bottom:1px solid;border-color:#b080fc!important}.border-left-accent-purple{border-left:1px solid;border-color:#b080fc!important}.grey{color:#58595b!important}.fill-grey{background-color:#58595b!important}.border-grey,.border-top-grey{border-color:#58595b!important}.border-top-grey{border-top:1px solid}.border-right-grey{border-right:1px solid;border-color:#58595b!important}.border-bottom-grey{border-bottom:1px solid;border-color:#58595b!important}.border-left-grey{border-left:1px solid;border-color:#58595b!important}.soft-grey{color:#dddede!important}.fill-soft-grey{background-color:#dddede!important}.border-soft-grey,.border-top-soft-grey{border-color:#dddede!important}.border-top-soft-grey{border-top:1px solid}.border-right-soft-grey{border-right:1px solid;border-color:#dddede!important}.border-bottom-soft-grey{border-bottom:1px solid;border-color:#dddede!important}.border-left-soft-grey{border-left:1px solid;border-color:#dddede!important}.light-grey{color:#eee!important}.fill-light-grey{background-color:#eee!important}.border-light-grey,.border-top-light-grey{border-color:#eee!important}.border-top-light-grey{border-top:1px solid}.border-right-light-grey{border-right:1px solid;border-color:#eee!important}.border-bottom-light-grey{border-bottom:1px solid;border-color:#eee!important}.border-left-light-grey{border-left:1px solid;border-color:#eee!important}.medium-grey{color:#ccc!important}.fill-medium-grey{background-color:#ccc!important}.border-medium-grey,.border-top-medium-grey{border-color:#ccc!important}.border-top-medium-grey{border-top:1px solid}.border-right-medium-grey{border-right:1px solid;border-color:#ccc!important}.border-bottom-medium-grey{border-bottom:1px solid;border-color:#ccc!important}.border-left-medium-grey{border-left:1px solid;border-color:#ccc!important}.medium-dark-grey{color:#999!important}.fill-medium-dark-grey{background-color:#999!important}.border-medium-dark-grey{border-color:#999!important}.border-top-medium-dark-grey{border-top:1px solid;border-color:#999!important}.border-right-medium-dark-grey{border-right:1px solid;border-color:#999!important}.border-bottom-medium-dark-grey{border-bottom:1px solid;border-color:#999!important}.border-left-medium-dark-grey{border-left:1px solid;border-color:#999!important}.dark-grey{color:#222!important}.fill-dark-grey{background-color:#222!important}.border-dark-grey,.border-top-dark-grey{border-color:#222!important}.border-top-dark-grey{border-top:1px solid}.border-right-dark-grey{border-right:1px solid;border-color:#222!important}.border-bottom-dark-grey{border-bottom:1px solid;border-color:#222!important}.border-left-dark-grey{border-left:1px solid;border-color:#222!important}.soft-blue{color:#eff1f5!important}.fill-soft-blue{background-color:#eff1f5!important}.border-soft-blue,.border-top-soft-blue{border-color:#eff1f5!important}.border-top-soft-blue{border-top:1px solid}.border-right-soft-blue{border-right:1px solid;border-color:#eff1f5!important}.border-bottom-soft-blue{border-bottom:1px solid;border-color:#eff1f5!important}.border-left-soft-blue{border-left:1px solid;border-color:#eff1f5!important}.dark-soft-blue{color:#e9ecf1!important}.fill-dark-soft-blue{background-color:#e9ecf1!important}.border-dark-soft-blue,.border-top-dark-soft-blue{border-color:#e9ecf1!important}.border-top-dark-soft-blue{border-top:1px solid}.border-right-dark-soft-blue{border-right:1px solid;border-color:#e9ecf1!important}.border-bottom-dark-soft-blue{border-bottom:1px solid;border-color:#e9ecf1!important}.border-left-dark-soft-blue{border-left:1px solid;border-color:#e9ecf1!important}.darker-soft-blue{color:#e6e9ef!important}.fill-darker-soft-blue{background-color:#e6e9ef!important}.border-darker-soft-blue,.border-top-darker-soft-blue{border-color:#e6e9ef!important}.border-top-darker-soft-blue{border-top:1px solid}.border-right-darker-soft-blue{border-right:1px solid;border-color:#e6e9ef!important}.border-bottom-darker-soft-blue{border-bottom:1px solid;border-color:#e6e9ef!important}.border-left-darker-soft-blue{border-left:1px solid;border-color:#e6e9ef!important}.light-soft-blue{color:#f5f6f9!important}.fill-light-soft-blue{background-color:#f5f6f9!important}.border-light-soft-blue,.border-top-light-soft-blue{border-color:#f5f6f9!important}.border-top-light-soft-blue{border-top:1px solid}.border-right-light-soft-blue{border-right:1px solid;border-color:#f5f6f9!important}.border-bottom-light-soft-blue{border-bottom:1px solid;border-color:#f5f6f9!important}.border-left-light-soft-blue{border-left:1px solid;border-color:#f5f6f9!important}.lighter-soft-blue{color:#f8f9fb!important}.fill-lighter-soft-blue{background-color:#f8f9fb!important}.border-lighter-soft-blue,.border-top-lighter-soft-blue{border-color:#f8f9fb!important}.border-top-lighter-soft-blue{border-top:1px solid}.border-right-lighter-soft-blue{border-right:1px solid;border-color:#f8f9fb!important}.border-bottom-lighter-soft-blue{border-bottom:1px solid;border-color:#f8f9fb!important}.border-left-lighter-soft-blue{border-left:1px solid;border-color:#f8f9fb!important}:root{--color-gray:var(--color-gray-100);--color-gray-50:#f6f7f8;--color-gray-100:#eff1f4;--color-gray-200:#e3e5e8;--color-gray-300:#d7d9dc;--color-gray-400:#cbcdcf;--color-gray-500:#bfc1c3;--color-primary:var(--color-primary-500);--color-primary-50:#e4edfe;--color-primary-100:#bbd2fe;--color-primary-200:#8db4fd;--color-primary-300:#5f95fc;--color-primary-400:#3d7ffb;--color-primary-500:#1b68fa;--color-primary-600:#1860f9;--color-primary-700:#1455f9;--color-primary-800:#104bf8;--color-primary-900:#083af6;--color-primary-A100:#fff;--color-primary-A200:#ebefff;--color-primary-A400:#b8c4ff;--color-primary-A700:#9fafff;--color-secondary:var(--color-secondary-500);--color-secondary-50:#ebf7ed;--color-secondary-100:#cdead3;--color-secondary-200:#acdcb5;--color-secondary-300:#8bce97;--color-secondary-400:#72c481;--color-secondary-500:#59b96b;--color-secondary-600:#51b263;--color-secondary-700:#48aa58;--color-secondary-800:#3ea24e;--color-secondary-900:#2e933c;--color-secondary-A100:#d9ffde;--color-secondary-A200:#a6ffb1;--color-secondary-A400:#73ff84;--color-secondary-A700:#59ff6e}fw-popover{display:none}.fw-popover-panel .fw-popover-content-wrapper{position:relative;background:#fff;border-radius:4px;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;padding:16px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret{position:absolute;overflow:hidden;width:25px;height:25px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret:after{display:block;content:"";width:16px;height:16px;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;transform:rotate(45deg);position:relative}.fw-popover-panel.fw-popover-above{margin-bottom:-20px;padding-bottom:20px}.fw-popover-panel.fw-popover-above .fw-popover-caret{left:0;bottom:-16px;height:16px}.fw-popover-panel.fw-popover-above .fw-popover-caret:after{margin:-8px auto}.fw-popover-panel.fw-popover-below{margin-top:-20px;padding-top:20px}.fw-popover-panel.fw-popover-below .fw-popover-caret{left:0;top:-16px;height:16px}.fw-popover-panel.fw-popover-below .fw-popover-caret:after{top:16px;margin:-8px auto}.fw-popover-panel.fw-popover-left{margin-right:-20px;padding-right:20px}.fw-popover-panel.fw-popover-left .fw-popover-caret{right:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-left .fw-popover-caret:after{top:calc(50% - 8px);left:-8px}.fw-popover-panel.fw-popover-right{margin-left:-20px;padding-left:20px}.fw-popover-panel.fw-popover-right .fw-popover-caret{left:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-right .fw-popover-caret:after{top:calc(50% - 8px);right:-8px}']}]}],I.propDecorators={templateRef:[{type:t.ViewChild,args:["content"]}]};var O=function(){};O.decorators=[{type:t.NgModule,args:[{imports:[r.CommonModule],exports:[I,T,F],declarations:[I,T,F],entryComponents:[I,T],providers:[a.Overlay]}]}];var R=function(){function o(o){this.changeDetectorRef=o,this.columns=[],this.dataSource=[],this.layout="basic",this.pageSize=null,this.webCompPageSize=null,this.sort=null,this.sortColumn="",this.sortOrder="asc",this.displayedColumns=[],this.filters=new p.FormGroup({}),this.trackByIndex=function(o){return o}}return o.prototype.ngOnInit=function(){var o=this;this.setDataSource(),this.setColumns(),this.addFilterControls(),this.setFilter(),this.matDataSource.filterPredicate=function(o,t){var r=JSON.parse(t);for(var e in r){var n=r[e],i=o[e];if(Array.isArray(n)&&n.length>0&&!n.includes(i))return!1;if(!Array.isArray(n)&&!String(i).toLowerCase().includes(String(null!=n?n:"").toLowerCase()))return!1}return!0},this.filters.valueChanges.pipe(f.debounceTime(200)).subscribe((function(){return o.setFilter()}))},o.prototype.ngAfterViewInit=function(){this.setSort(),this.setPaginator()},o.prototype.ngOnChanges=function(o){o.columns&&this.setColumns(),o.dataSource&&this.setDataSource(),(o.sort||o.dataSource)&&this.setSort(),(o.pageSize||o["page-size"])&&this.setPaginator()},Object.defineProperty(o.prototype,"isCompact",{get:function(){return"compact"===this.layout},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"paginationSize",{get:function(){return this.pageSize||this.webCompPageSize||0},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"isSortEnabled",{get:function(){return null!==this.sort},enumerable:!1,configurable:!0}),o.prototype.addFilterControls=function(){var o,t;try{for(var r=v(this.columns),e=r.next();!e.done;e=r.next()){var n=e.value;this.filters.addControl(n.key,new p.FormControl)}}catch(t){o={error:t}}finally{try{e&&!e.done&&(t=r.return)&&t.call(r)}finally{if(o)throw o.error}}},o.prototype.setDataSource=function(){this.matDataSource=new d.MatTableDataSource(this.dataSource)},o.prototype.setColumns=function(){this.displayedColumns=this.columns.map((function(o){return o.key}))},o.prototype.setFilter=function(){this.matDataSource.filter=JSON.stringify(this.filters.value)},o.prototype.setSort=function(){if(this.matSort&&null!==this.sort){var o=this.sort.split(" ");if(this.sortColumn=o[0],["asc","desc"].includes(o[1])?this.sortOrder=o[1]:console.warn("Sort order '"+o[1]+"' is not 'asc' or 'desc', defaulting to 'asc'"),this.sortColumn){this.matSort.sort({id:this.sortColumn,start:this.sortOrder,disableClear:!1});var t=this.matSort.sortables.get(this.sortColumn);t?t._setAnimationTransitionState({toState:"active"}):console.warn("Unable to find sort column '"+this.sortColumn+"'. Initial sort failed.")}this.matDataSource.sort=this.matSort}},o.prototype.setPaginator=function(){this.changeDetectorRef.detectChanges(),this.matDataSource.paginator=this.matPaginator},o.prototype.onInputFilter=function(o,t){var r=this;setTimeout((function(){return r.filters.get(t.key).setValue(o.target.value)}))},o.prototype.onSelectFilter=function(o,t){var r=o.target.innerText;this.filters.get(t.key).setValue("- none -"===r?null:r)},o.prototype.onMultiSelectFilter=function(o,t){var r=this.filters.controls[t.key].value||[],e=o.target.parentElement.innerText;r.includes(e)?r=r.filter((function(o){return o!==e})):r.push(e),this.filters.get(t.key).setValue(1===r.length&&""===e?null:r)},o}();R.decorators=[{type:t.Component,args:[{host:{class:"fw-table","[class.compact]":"isCompact"},selector:"fw-table",template:'<table mat-table [dataSource]="matDataSource" matSort>\n <ng-container *ngFor="let column of columns; trackBy: trackByIndex">\n <ng-container [matColumnDef]="column.key">\n\n <ng-template #tableHeaders>\n <ng-container [ngSwitch]="column.filter?.control">\n <ng-container *ngSwitchCase="\'input\'">\n <mat-form-field *ngIf="filters.get(column.key) as control" appearance="outline" (click)="$event.stopPropagation()">\n <mat-label *ngIf="!isCompact">{{ column.label }}</mat-label>\n <input matInput [formControl]="control" [placeholder]="column.filter.placeholder" (keydown)="$event.stopPropagation(); onInputFilter($event, column);">\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase="\'select\'">\n <mat-form-field *ngIf="filters.get(column.key) as control" appearance="outline" (click)="$event.stopPropagation()">\n <mat-label *ngIf="!isCompact">{{ column.label }}</mat-label>\n <mat-select [formControl]="control" [placeholder]="column.filter.placeholder">\n <mat-option (click)="onSelectFilter($event, column);">- none -</mat-option>\n <mat-option *ngFor="let option of column.filter.options" [value]="option" (click)="onSelectFilter($event, column);">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase="\'multi-select\'">\n <mat-form-field *ngIf="filters.get(column.key) as control" appearance="outline" (click)="$event.stopPropagation()">\n <mat-label *ngIf="!isCompact">{{ column.label }}</mat-label>\n <mat-select [formControl]="control" [placeholder]="column.filter.placeholder" multiple="true">\n <mat-option *ngFor="let option of column.filter.options" [value]="option" (click)="onMultiSelectFilter($event, column);">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchDefault>{{ column.label }}</ng-container>\n </ng-container>\n </ng-template>\n\n <ng-container *ngIf="isSortEnabled">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ng-container [ngTemplateOutlet]="tableHeaders"></ng-container>\n </th>\n </ng-container>\n\n <ng-container *ngIf="!isSortEnabled">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container [ngTemplateOutlet]="tableHeaders"></ng-container>\n </th>\n </ng-container>\n\n <td mat-cell *matCellDef="let element"> {{ element[column.key] }} </td>\n </ng-container>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>\n <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>\n</table>\n<mat-paginator *ngIf="paginationSize > 0" [pageSize]="paginationSize"></mat-paginator>\n\n\n\n',styles:[":host{display:block;width:100%}:host:not(.compact) table.mat-table tr.mat-header-row,:host:not(.compact) table.mat-table tr.mat-row{height:56px}:host.compact table.mat-table tr.mat-header-row,:host.compact table.mat-table tr.mat-row{height:32px}:host.compact mat-paginator.mat-paginator{align-items:center;display:flex;height:32px;justify-content:flex-end}table.mat-table{width:100%}table.mat-table td,table.mat-table th{vertical-align:middle}table.mat-table td.mat-cell,table.mat-table td.mat-header-cell,table.mat-table th.mat-cell,table.mat-table th.mat-header-cell{border-bottom-color:var(--color-gray)}"]}]}],R.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]},R.propDecorators={columns:[{type:t.Input}],dataSource:[{type:t.Input}],layout:[{type:t.Input}],pageSize:[{type:t.Input}],webCompPageSize:[{type:t.Input,args:["page-size"]}],sort:[{type:t.Input}],matPaginator:[{type:t.ViewChild,args:[s.MatPaginator]}],matSort:[{type:t.ViewChild,args:[c.MatSort]}]};var z=function(){};z.decorators=[{type:t.NgModule,args:[{imports:[r.CommonModule,p.FormsModule,p.ReactiveFormsModule,b.MatInputModule,s.MatPaginatorModule,u.MatSelectModule,c.MatSortModule,d.MatTableModule],exports:[R],declarations:[R],entryComponents:[R]}]}],o.FwButtonComponent=h,o.FwButtonGroupComponent=m,o.FwButtonGroupModule=g,o.FwButtonModule=y,o.FwNotificationComponent=M,o.FwNotificationContainerComponent=C,o.FwNotificationModule=D,o.FwNotificationService=k,o.FwPopoverComponent=I,o.FwPopoverModule=O,o.FwPopoverTriggerComponent=T,o.FwPopoverTriggerDirective=F,o.FwTableComponent=R,o.FwTableModule=z,o.genId=x,o.ɵa=P,Object.defineProperty(o,"__esModule",{value:!0})}));
1
+ !function(t,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@angular/core"),require("@angular/common"),require("@angular/material/button"),require("@angular/material/dialog"),require("@angular/cdk/portal"),require("@angular/material/icon"),require("rxjs"),require("rxjs/operators"),require("@angular/platform-browser"),require("@angular/cdk/overlay"),require("@angular/forms"),require("@angular/material/paginator"),require("@angular/material/sort"),require("@angular/material/table"),require("@angular/material/input"),require("@angular/material/select")):"function"==typeof define&&define.amd?define("@flywheel-io/vision",["exports","@angular/core","@angular/common","@angular/material/button","@angular/material/dialog","@angular/cdk/portal","@angular/material/icon","rxjs","rxjs/operators","@angular/platform-browser","@angular/cdk/overlay","@angular/forms","@angular/material/paginator","@angular/material/sort","@angular/material/table","@angular/material/input","@angular/material/select"],o):o(((t="undefined"!=typeof globalThis?globalThis:t||self)["flywheel-io"]=t["flywheel-io"]||{},t["flywheel-io"].vision={}),t.ng.core,t.ng.common,t.ng.material.button,t.ng.material.dialog,t.ng.cdk.portal,t.ng.material.icon,t.rxjs,t.rxjs.operators,t.ng.platformBrowser,t.ng.cdk.overlay,t.ng.forms,t.ng.material.paginator,t.ng.material.sort,t.ng.material.table,t.ng.material.input,t.ng.material.select)}(this,(function(t,o,e,r,n,i,a,l,s,c,p,d,f,u,b,m,g){"use strict";var h=function(){this.layout="basic",this.size="medium"};h.decorators=[{type:o.Component,args:[{host:{class:"fw-button-group","[class.small]":'size === "small"',"[class.medium]":'size === "medium"',"[class.large]":'size === "large"',"[class.compact]":'layout === "compact"'},selector:"fw-button-group",template:"<ng-content></ng-content>",encapsulation:o.ViewEncapsulation.None,styles:["fw-button-group.fw-button-group{border-radius:4px;display:inline-flex;align-items:stretch}fw-button-group.fw-button-group.compact button{line-height:24px;height:24px}fw-button-group.fw-button-group.small button{font-size:12px}fw-button-group.fw-button-group.medium button{font-size:14px}fw-button-group.fw-button-group.large button{font-size:18px}fw-button-group.fw-button-group button{min-width:0;margin:0!important;border-radius:0}fw-button-group.fw-button-group>button:first-of-type,fw-button-group.fw-button-group>fw-button:first-of-type>button{border-top-left-radius:4px;border-bottom-left-radius:4px}fw-button-group.fw-button-group>button:last-of-type,fw-button-group.fw-button-group>fw-button:last-of-type>button{border-top-right-radius:4px;border-bottom-right-radius:4px}fw-button-group.fw-button-group>button.mat-stroked-button,fw-button-group.fw-button-group>button.mat-stroked-button+button.mat-stroke-button,fw-button-group.fw-button-group>fw-button[ng-reflect-type=stroked]+fw-button[ng-reflect-type=stroked]>button,fw-button-group.fw-button-group>fw-button[ng-reflect-type=stroked]>button,fw-button-group.fw-button-group>fw-button[type=stroked]+fw-button[type=stroked]>button,fw-button-group.fw-button-group>fw-button[type=stroked]>button{border-right-width:0}fw-button-group.fw-button-group>button.mat-stroked-button:last-of-type,fw-button-group.fw-button-group>fw-button[ng-reflect-type=stroked]:last-of-type>button,fw-button-group.fw-button-group>fw-button[type=stroked]:last-of-type>button{border-right-width:1px!important}fw-button-group.fw-button-group>button:not(.mat-stroked-button)+button.mat-stroked-button,fw-button-group.fw-button-group>fw-button:not([ng-reflect-type=stroked])+fw-button[ng-reflect-type=stroked]>button,fw-button-group.fw-button-group>fw-button:not([type=stroked])+fw-button[type=stroked]>button{border-left-width:0}"]}]}],h.propDecorators={layout:[{type:o.Input}],size:[{type:o.Input}]};var y=function(){};y.decorators=[{type:o.NgModule,args:[{exports:[h],declarations:[h],entryComponents:[h]}]}];var v=function(){this.layout="basic",this.size="medium",this.type="basic"};v.decorators=[{type:o.Component,args:[{host:{class:"fw-button","[class.small]":'size === "small"',"[class.medium]":'size === "medium"',"[class.large]":'size === "large"',"[class.compact]":'layout === "compact"'},selector:"fw-button",template:'<ng-container [ngSwitch]="type">\n <button *ngSwitchCase="\'raised\'" mat-raised-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n <button *ngSwitchCase="\'stroked\'" mat-stroked-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n <button *ngSwitchCase="\'flat\'" mat-flat-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n <button *ngSwitchDefault mat-button [color]="color">\n <ng-container *ngTemplateOutlet="content"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n',styles:[":host.compact>button{line-height:24px}:host.small{font-size:12px}:host.medium{font-size:14px}:host.large{font-size:18px}button{font-size:inherit}"]}]}],v.propDecorators={color:[{type:o.Input}],layout:[{type:o.Input}],size:[{type:o.Input}],type:[{type:o.Input}]};var w=function(){};w.decorators=[{type:o.NgModule,args:[{imports:[e.CommonModule,r.MatButtonModule],exports:[v],declarations:[v],entryComponents:[v]}]}];var x=function(){function t(t){this.data=t,this.alignActions=this.data.alignActions?"start"===this.data.alignActions?null:this.data.alignActions:"center",this.choices=this.data.choices,this.content=this.data.content,this.title=this.data.title}return t.prototype.getTestId=function(t){var o;return t.testId||String(null!==(o=t.label)&&void 0!==o?o:t.value).toLowerCase()+"-button"},t}();x.decorators=[{type:o.Component,args:[{host:{class:"mat-dialog-component","test-id":"choice-dialog"},selector:"fw-choice-dialog",template:'\n <h1 mat-dialog-title *ngIf="title">{{ title }}</h1>\n <div mat-dialog-content>{{ content }}</div>\n <div mat-dialog-actions [align]="alignActions">\n <ng-container *ngFor="let choice of choices" [ngSwitch]="choice.variant">\n <button *ngSwitchCase="\'raised\'" mat-raised-button [color]="choice.color" [attr.test-id]="getTestId(choice)"\n [mat-dialog-close]="choice.value">{{ choice.label }}</button>\n <button *ngSwitchCase="\'stroked\'" mat-stroked-button [color]="choice.color" [attr.test-id]="getTestId(choice)"\n [mat-dialog-close]="choice.value">{{ choice.label }}</button>\n <button *ngSwitchCase="\'flat\'" mat-flat-button [color]="choice.color" [attr.test-id]="getTestId(choice)"\n [mat-dialog-close]="choice.value">{{ choice.label }}</button>\n <ng-container *ngSwitchDefault>\n <button *ngIf="choice.color" mat-flat-button [color]="choice.color" [attr.test-id]="getTestId(choice)"\n [mat-dialog-close]="choice.value">{{ choice.label }}</button>\n <button *ngIf="!choice.color" mat-stroked-button [attr.test-id]="getTestId(choice)"\n [mat-dialog-close]="choice.value">{{ choice.label }}</button>\n </ng-container>\n </ng-container>\n </div>\n '}]}],x.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.MAT_DIALOG_DATA]}]}]};var k=function(t){this.data=t,this.title=this.data.title,this.content=this.data.content,this.html=this.data.html};k.decorators=[{type:o.Component,args:[{host:{class:"mat-dialog-component","test-id":"confirm-dialog"},selector:"fw-confirm-dialog",template:'\n <h1 mat-dialog-title *ngIf="title">{{ title }}</h1>\n <div mat-dialog-content *ngIf="html" class="markup" [innerHTML]="html | trusthtml"></div>\n <div mat-dialog-content *ngIf="!html">{{ content || (\'confirmDialog.body\' | translate ) }}</div>\n <div mat-dialog-actions align="center">\n <button test-id="no-button" mat-stroked-button [mat-dialog-close]="false">{{ \'confirmDialog.no\' | translate }}</button>\n <button test-id="yes-button" mat-flat-button color="primary" [mat-dialog-close]="true">{{ \'confirmDialog.yes\' | translate }}</button>\n </div>\n ',styles:["\n [mat-dialog-content] {\n text-align: center;\n }\n [mat-dialog-content].markup {\n text-align: inherit;\n }\n "]}]}],k.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.MAT_DIALOG_DATA]}]}]};var C=function(){function t(t){this.matDialog=t,this.dialogs=[],this.config=new Map}return t.prototype.closeAll=function(t){t?this.dialogs.filter((function(o){return o.component===t})).forEach((function(t){return t.ref.close()})):this.matDialog.closeAll()},t.prototype.open=function(t,o){var e=this,r=this.dialogs.findIndex((function(o){return o.component===t})),n=null,i=Object.assign({multi:"allow"},this.config.get(t));switch(i.multi){case"ignore":-1===r&&(n=this.matDialog.open(t,Object.assign(Object.assign({},i),o)),this.dialogs.push({component:t,ref:n}));break;case"replace":r>-1?(this.dialogs[r].ref.close(),n=this.matDialog.open(t,Object.assign(Object.assign({},i),o)),this.dialogs.splice(r,1,{component:t,ref:n})):(n=this.matDialog.open(t,Object.assign(Object.assign({},i),o)),this.dialogs.push({component:t,ref:n}));break;default:n=this.matDialog.open(t,Object.assign(Object.assign({},i),o)),this.dialogs.push({component:t,ref:n})}return n&&n.afterClosed().subscribe((function(){var t=e.dialogs.findIndex((function(t){return t.ref===n}));t>=0&&e.dialogs.splice(t,1)})),n},t.prototype.registerDialog=function(t,o){this.config.set(t,o)},t}();C.decorators=[{type:o.Injectable}],C.ctorParameters=function(){return[{type:n.MatDialog}]};var S=function(t,o){this.data=t,this.ref=o,this.message=this.data.message,this.ref.disableClose=!1};S.decorators=[{type:o.Component,args:[{host:{class:"mat-dialog-component","test-id":"error-dialog"},selector:"fw-error-dialog",template:'\n <div mat-dialog-content>{{ message }}</div>\n <div mat-dialog-actions align="end">\n <button test-id="close-button" mat-stroked-button mat-dialog-close>\n {{ \'common.actions.close\' | translate }}\n </button>\n </div>\n '}]}],S.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.MAT_DIALOG_DATA]}]},{type:n.MatDialogRef}]};var D=function(t,o){return(D=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,o){t.__proto__=o}||function(t,o){for(var e in o)Object.prototype.hasOwnProperty.call(o,e)&&(t[e]=o[e])})(t,o)};Object.create;function P(t){var o="function"==typeof Symbol&&Symbol.iterator,e=o&&t[o],r=0;if(e)return e.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")}function I(t,o){var e="function"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,n,i=e.call(t),a=[];try{for(;(void 0===o||o-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(e=i.return)&&e.call(i)}finally{if(n)throw n.error}}return a}Object.create;var M=function(){function t(t,o){if(this.data=t,this.viewContainerRef=o,this.content=this.data.content,this.title=this.data.title,this.destroyed$=new l.Subject,this.data.component)this.portal=new i.ComponentPortal(this.data.component.type,this.viewContainerRef);else{if(!this.data.template)throw new Error("One of [component, template] was not provided.");this.portal=new i.TemplatePortal(this.data.template,this.viewContainerRef)}}return t.prototype.ngOnDestroy=function(){this.destroyed$.next()},t.prototype.attached=function(t){var e,r,n,i,a,l;if(this.data.component){if(t=t,this.data.component.outputs)try{for(var c=P(Object.entries(this.data.component.outputs)),p=c.next();!p.done;p=c.next()){var d=I(p.value,2),f=d[0],u=d[1],b=t[f];"function"==typeof(null==b?void 0:b.pipe)&&"function"==typeof b.subscribe&&b.pipe(s.takeUntil(this.destroyed$)).subscribe(u)}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}if(this.data.component.inputs){var m={};try{for(var g=P(Object.entries(this.data.component.inputs)),h=g.next();!h.done;h=g.next()){var y=I(h.value,2),v=(f=y[0],y[1]);t.instance[f]=v,m[f]=new o.SimpleChange(v,v,!0)}}catch(t){n={error:t}}finally{try{h&&!h.done&&(i=g.return)&&i.call(g)}finally{if(n)throw n.error}}null===(l=(a=t.instance).ngOnChanges)||void 0===l||l.call(a,m),t.changeDetectorRef.markForCheck()}}},t}();M.decorators=[{type:o.Component,args:[{host:{class:"mat-dialog-component","test-id":"portal-dialog"},selector:"fw-portal-dialog",template:'\n <ng-container *ngIf="title">\n <h1 mat-dialog-title>{{ title }}</h1>\n <button test-id="dialog-close-corner" mat-icon-button mat-dialog-close>\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n <mat-dialog-content>\n <p *ngIf="content" class="content">{{ content }}</p>\n <ng-template [cdkPortalOutlet]="portal" (attached)="attached($event)"></ng-template>\n </mat-dialog-content>\n <mat-dialog-actions align="end">\n <button test-id="dialog-close-button" mat-stroked-button mat-dialog-close>\n {{ \'common.actions.close\' | translate }}\n </button>\n </mat-dialog-actions>\n ',styles:["\n :host {\n min-width: 200px;\n }\n .content {\n margin-bottom: 30px;\n }\n "]}]}],M.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[n.MAT_DIALOG_DATA]}]},{type:o.ViewContainerRef}]};var T=function(){},O=function(){function t(){}return t.prototype.getMessage=function(o,e){return l.of(t.messages[o])},t}();O.messages={"common.actions.close":"Close","confirmDialog.body":"Are you sure?","confirmDialog.no":"No","confirmDialog.yes":"Yes"},O.decorators=[{type:o.Injectable}];var F=function(){function t(t,o){this.cdr=t,this.translationService=o,this.subscriptions={},this.messages={}}return t.prototype.ngOnDestroy=function(){var t,o;try{for(var e=P(Object.values(this.subscriptions)),r=e.next();!r.done;r=e.next()){r.value.unsubscribe()}}catch(o){t={error:o}}finally{try{r&&!r.done&&(o=e.return)&&o.call(e)}finally{if(t)throw t.error}}},t.prototype.transform=function(t,o){var e=this;return void 0===o&&(o=!1),t in this.subscriptions||(this.subscriptions[t]=this.translationService.getMessage(t,o).subscribe((function(o){e.messages[t]=o,e.cdr.markForCheck()}))),this.messages[t]||""},t}();F.decorators=[{type:o.Pipe,args:[{name:"translate",pure:!1}]}],F.ctorParameters=function(){return[{type:o.ChangeDetectorRef},{type:T}]};var A=function(){function t(t){this.sanitizer=t}return t.prototype.transform=function(t){return this.sanitizer.bypassSecurityTrustHtml(t)},t}();A.decorators=[{type:o.Pipe,args:[{name:"trusthtml",pure:!0}]}],A.ctorParameters=function(){return[{type:c.DomSanitizer}]};var R=[F,A],j=function(){};j.decorators=[{type:o.NgModule,args:[{declarations:R,exports:R,providers:[{provide:T,useClass:O}]}]}];var z={disableClose:!0,hasBackdrop:!0},E=function(){};function N(){return String.prototype.padStart(24,Math.floor(Math.random()*Date.now()).toString(16))}E.decorators=[{type:o.NgModule,args:[{declarations:[x,k,S,M],imports:[e.CommonModule,r.MatButtonModule,n.MatDialogModule,a.MatIconModule,j,i.PortalModule],providers:[C,{provide:n.MAT_DIALOG_DEFAULT_OPTIONS,useValue:z}]}]}];var $=function(){function t(){this.notifications$=new l.BehaviorSubject([]),this.notificationQueue=[]}return t.prototype.show=function(t){t.id||(t.id=N()),this.notificationQueue.push(t),this.notifications$.next(this.notificationQueue)},t.prototype.dismiss=function(t){this.notificationQueue=this.notificationQueue.filter((function(o){return o.id!==t})),this.notifications$.next(this.notificationQueue)},t.prototype.dismissAll=function(){this.notificationQueue=[],this.notifications$.next(this.notificationQueue)},t}();$.ɵprov=o.ɵɵdefineInjectable({factory:function(){return new $},token:$,providedIn:"root"}),$.decorators=[{type:o.Injectable,args:[{providedIn:"root"}]}];var _=function(){function t(t,o){var e=this;this.cdr=t,this.notificationService=o,this.limit=3,this.notifications=[],this.expanded=!1,this.subscriptions={notifications:l.Subscription.EMPTY},this.subscriptions.notifications=this.notificationService.notifications$.subscribe((function(t){e.notifications=t,0===t.length&&(e.expanded=!1),e.cdr.markForCheck()}))}return t.prototype.ngOnDestroy=function(){var t,o;try{for(var e=P(Object.values(this.subscriptions)),r=e.next();!r.done;r=e.next()){r.value.unsubscribe()}}catch(o){t={error:o}}finally{try{r&&!r.done&&(o=e.return)&&o.call(e)}finally{if(t)throw t.error}}},t.prototype.notificationClass=function(t){var o=this.notifications.length>this.limit?t-(this.notifications.length-this.limit):t;return this.expanded?"default":o>=0?"level-"+o:"hidden"},t.prototype.getEmptyNotification=function(t){return Object.assign(Object.assign({},t),{message:" "})},t.prototype.onReady=function(t){this.notifications[this.notifications.length-1].ref=t,t.startTimer()},t.prototype.onDismiss=function(t){var o=this.notifications.find((function(o){return o.id===t}));(null==o?void 0:o.ref)&&o.ref.stopTimer(),(null==o?void 0:o.id)&&this.notificationService.dismiss(o.id),this.cdr.markForCheck()},t.prototype.clearAll=function(){this.notificationService.dismissAll(),this.cdr.markForCheck()},t.prototype.onShowMore=function(){this.expanded=!0,this.cdr.markForCheck()},t.prototype.onShowLess=function(){this.expanded=!1,this.cdr.markForCheck()},t}();_.decorators=[{type:o.Component,args:[{host:{class:"fw-notification-container","[class.duo]":"notifications.length === 2","[class.triple]":"notifications.length >= 3"},selector:"fw-notification-container",template:'<div role="list">\n <fw-notification *ngFor="let notification of notifications; index as $index"\n (ready)="onReady($event)"\n (dismiss)="onDismiss($event)"\n [class]="notificationClass($index)"\n [notification]="expanded || $index === notifications.length - 1 ? notification : getEmptyNotification(notification)"\n [attr.aria-label]="notification.type + \' : \' + notification.message"\n role="listitem"\n ></fw-notification>\n <div class="buttons">\n <fw-button *ngIf="expanded" (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="!expanded && notifications.length > 1" (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',encapsulation:o.ViewEncapsulation.None,changeDetection:o.ChangeDetectionStrategy.OnPush,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)}"]}]}],_.ctorParameters=function(){return[{type:o.ChangeDetectorRef},{type:$}]};var q,L=function(){function t(){this.now=0,this.remainingDuration=0}return t.prototype.start=function(t){var o=this;return new Promise((function(e){o.remainingDuration=t,o.resolver=e,o.continue()}))},t.prototype.stop=function(){clearTimeout(this.timerId),this.remainingDuration=0},t.prototype.pause=function(){clearTimeout(this.timerId),this.remainingDuration=this.remainingDuration-(new Date).getTime()-this.now},t.prototype.continue=function(){var t=this;this.now=(new Date).getTime(),this.timerId=window.setTimeout((function(){t.resolver()}),this.remainingDuration)},t}();(q=t.FwNotificationType||(t.FwNotificationType={})).Error="error",q.Info="info",q.Success="success",q.Wait="wait",q.Warning="warning";var V=function(){function e(t,e){this.cdr=t,this.timerService=e,this.notificationDuration=9e3,this.ready=new o.EventEmitter,this.dismiss=new o.EventEmitter}return Object.defineProperty(e.prototype,"cssClass",{get:function(){var o,e="fw-notification";switch(null===(o=this.notification)||void 0===o?void 0:o.type){case t.FwNotificationType.Error:return e+" error";case t.FwNotificationType.Info:return e+" info";case t.FwNotificationType.Success:return e+" success";case t.FwNotificationType.Wait:return e+" wait";case t.FwNotificationType.Warning:return e+" warning";default:return e}},enumerable:!1,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.ready.emit(this),this.cdr.markForCheck()},e.prototype.startTimer=function(){var t=this;this.timerService.start(this.notificationDuration).then((function(){t.onClickDismiss(),t.cdr.markForCheck()}))},e.prototype.stopTimer=function(){this.timerService.stop(),this.cdr.markForCheck()},e.prototype.onClickDismiss=function(){this.dismiss.emit(this.notification.id),this.cdr.markForCheck()},e}();V.decorators=[{type:o.Component,args:[{host:{"(click)":"onClickDismiss()"},selector:"fw-notification",template:"{{ notification?.message }}",providers:[L],encapsulation:o.ViewEncapsulation.None,changeDetection:o.ChangeDetectionStrategy.OnPush,styles:["fw-notification{display:block;border-radius:4px;box-sizing:border-box;margin:5px 24px;max-width:33vw;min-width:344px;padding:14px 16px;transform-origin:center;background-color:#2f96b4;border:1px solid hsla(0,0%,100%,.7019607843);box-shadow:0 0 12px #999;color:#fff;opacity:.99;white-space:pre-wrap}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}"]}]}],V.ctorParameters=function(){return[{type:o.ChangeDetectorRef},{type:L}]},V.propDecorators={notification:[{type:o.Input}],notificationDuration:[{type:o.Input}],ready:[{type:o.Output}],dismiss:[{type:o.Output}],cssClass:[{type:o.HostBinding,args:["class"]}]};var B=function(){};B.decorators=[{type:o.NgModule,args:[{imports:[e.CommonModule,w,y,r.MatButtonModule,a.MatIconModule],exports:[V,_],declarations:[V,_],entryComponents:[V],providers:[$]}]}];var H=function(){function t(t,o,e){this.element=t,this.overlay=o,this.viewContainerRef=e,this.popoverMargin=15,this.positionMap={left:{originX:"start",originY:"center",overlayX:"end",overlayY:"center"},right:{originX:"end",originY:"center",overlayX:"start",overlayY:"center"},above:{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom"},below:{originX:"center",originY:"bottom",overlayX:"center",overlayY:"top"}},this.position="below",this.subscriptions={positionChanges:l.Subscription.EMPTY}}return t.prototype.ngOnChanges=function(t){t.position&&this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)},t.prototype.ngOnDestroy=function(){var t,o;this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null);try{for(var e=P(Object.values(this.subscriptions)),r=e.next();!r.done;r=e.next()){r.value.unsubscribe()}}catch(o){t={error:o}}finally{try{r&&!r.done&&(o=e.return)&&o.call(e)}finally{if(t)throw t.error}}},t.prototype.showPopover=function(){var t;(null===(t=this.popover)||void 0===t?void 0:t.templateRef)&&this.getOverlay().attach(new i.TemplatePortal(this.popover.templateRef,this.viewContainerRef))},t.prototype.hidePopover=function(t){var o;(null===(o=t.relatedTarget)||void 0===o?void 0:o.classList.contains("fw-popover-panel"))||this.getOverlay().detach()},t.prototype.setPopoverCaretPosition=function(t){var o=this.overlayRef.overlayElement.querySelector(".fw-popover-caret"),e=this.overlayRef.overlayElement.getBoundingClientRect(),r=this.element.nativeElement.getBoundingClientRect();this.overlayRef.overlayElement.querySelector(".fw-popover-content-wrapper").style.margin=this.popoverMargin+"px",["left","right","before","after"].includes(t)?o.style.top=r.top-e.top-this.popoverMargin+r.height/2+"px":o.style.left=r.left-e.left-this.popoverMargin+r.width/2+"px"},t.prototype.setPopoverPosition=function(t){var o=this.positionMap[this.mainPosition]===t.connectionPair?this.mainPosition:this.positionMap[this.fallbackPosition]===t.connectionPair?this.fallbackPosition:this.mainPosition;this.overlayRef.removePanelClass(["fw-popover-above","fw-popover-below","fw-popover-left","fw-popover-right"]),this.overlayRef.addPanelClass("fw-popover-"+o),this.setPopoverCaretPosition(o)},t.prototype.getOverlay=function(){var t=this;return this.overlayRef||(this.overlayRef=this.overlay.create({positionStrategy:this.overlay.position().flexibleConnectedTo(this.element).withPositions(this.getPositions()),panelClass:"fw-popover-panel"}),this.overlayRef.overlayElement.addEventListener("mouseleave",(function(o){return t.hidePopover(o)})),this.subscriptions.positionChanges=this.overlayRef.getConfig().positionStrategy.positionChanges.subscribe((function(o){return t.setPopoverPosition(o)}))),this.overlayRef},t.prototype.getMainPosition=function(){return this.mainPosition=["left","before"].includes(this.position)?"left":["right","after"].includes(this.position)?"right":"above"===this.position?"above":"below"},t.prototype.getFallbackPosition=function(){return this.fallbackPosition=["left","before"].includes(this.position)?"right":["right","after"].includes(this.position)?"left":"above"===this.position?"below":"above"},t.prototype.getPositions=function(){return[this.positionMap[this.getMainPosition()],this.positionMap[this.getFallbackPosition()]]},t}();H.decorators=[{type:o.Directive,args:[{host:{class:"fw-popover-trigger","(mouseenter)":"showPopover()","(mouseleave)":"hidePopover($event)"},selector:"[fwPopoverTriggerFor]",exportAs:"fwPopoverTrigger"}]}],H.ctorParameters=function(){return[{type:o.ElementRef},{type:p.Overlay},{type:o.ViewContainerRef}]},H.propDecorators={popover:[{type:o.Input,args:["fwPopoverTriggerFor"]}],position:[{type:o.Input,args:["fwPopoverPosition"]}]};var Y=function(t){function o(o,e,r){var n=t.call(this,o,e,r)||this;return n.element=o,n.overlay=e,n.viewContainerRef=r,n.position="below",n}return function(t,o){if("function"!=typeof o&&null!==o)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");function e(){this.constructor=t}D(t,o),t.prototype=null===o?Object.create(o):(e.prototype=o.prototype,new e)}(o,t),o.prototype.showPopover=function(){var t=this.getOverlay();t.detach(),this.popoverId&&(this.popoverHTML=document.querySelector("fw-popover#"+this.popoverId).innerHTML,t.attach(new i.TemplatePortal(this.popoverTemplateRef,this.viewContainerRef)))},o}(H);Y.decorators=[{type:o.Component,args:[{host:{class:"fw-popover-trigger","(mouseenter)":"showPopover()","(mouseleave)":"hidePopover($event)"},selector:"fw-popover-trigger",template:'<ng-content></ng-content>\n \x3c!-- for web component support --\x3e\n <ng-template>\n <div [innerHTML]="popoverHTML"></div>\n </ng-template>'}]}],Y.ctorParameters=function(){return[{type:o.ElementRef},{type:p.Overlay},{type:o.ViewContainerRef}]},Y.propDecorators={popoverId:[{type:o.Input,args:["trigger-for"]}],position:[{type:o.Input,args:["position"]}],popoverTemplateRef:[{type:o.ViewChild,args:[o.TemplateRef]}]};var G=function(){};G.decorators=[{type:o.Component,args:[{host:{class:"fw-popover"},selector:"fw-popover",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>',encapsulation:o.ViewEncapsulation.None,styles:['.white{color:#fff!important}.fill-white{background-color:#fff!important}.border-top-white,.border-white{border-color:#fff!important}.border-top-white{border-top:1px solid}.border-right-white{border-right:1px solid;border-color:#fff!important}.border-bottom-white{border-bottom:1px solid;border-color:#fff!important}.border-left-white{border-left:1px solid;border-color:#fff!important}.black{color:#000!important}.fill-black{background-color:#000!important}.border-black,.border-top-black{border-color:#000!important}.border-top-black{border-top:1px solid}.border-right-black{border-right:1px solid;border-color:#000!important}.border-bottom-black{border-bottom:1px solid;border-color:#000!important}.border-left-black{border-left:1px solid;border-color:#000!important}.green{color:#59b96b!important}.fill-green{background-color:#59b96b!important}.border-green,.border-top-green{border-color:#59b96b!important}.border-top-green{border-top:1px solid}.border-right-green{border-right:1px solid;border-color:#59b96b!important}.border-bottom-green{border-bottom:1px solid;border-color:#59b96b!important}.border-left-green{border-left:1px solid;border-color:#59b96b!important}.orange{color:#f7941d!important}.fill-orange{background-color:#f7941d!important}.border-orange,.border-top-orange{border-color:#f7941d!important}.border-top-orange{border-top:1px solid}.border-right-orange{border-right:1px solid;border-color:#f7941d!important}.border-bottom-orange{border-bottom:1px solid;border-color:#f7941d!important}.border-left-orange{border-left:1px solid;border-color:#f7941d!important}.red{color:#de584c!important}.fill-red{background-color:#de584c!important}.border-red,.border-top-red{border-color:#de584c!important}.border-top-red{border-top:1px solid}.border-right-red{border-right:1px solid;border-color:#de584c!important}.border-bottom-red{border-bottom:1px solid;border-color:#de584c!important}.border-left-red{border-left:1px solid;border-color:#de584c!important}.light-red{color:#f8e5e4!important}.fill-light-red{background-color:#f8e5e4!important}.border-light-red,.border-top-light-red{border-color:#f8e5e4!important}.border-top-light-red{border-top:1px solid}.border-right-light-red{border-right:1px solid;border-color:#f8e5e4!important}.border-bottom-light-red{border-bottom:1px solid;border-color:#f8e5e4!important}.border-left-light-red{border-left:1px solid;border-color:#f8e5e4!important}.blue{color:#5871a2!important}.fill-blue{background-color:#5871a2!important}.border-blue,.border-top-blue{border-color:#5871a2!important}.border-top-blue{border-top:1px solid}.border-right-blue{border-right:1px solid;border-color:#5871a2!important}.border-bottom-blue{border-bottom:1px solid;border-color:#5871a2!important}.border-left-blue{border-left:1px solid;border-color:#5871a2!important}.focus-blue{color:#23527c!important}.fill-focus-blue{background-color:#23527c!important}.border-focus-blue,.border-top-focus-blue{border-color:#23527c!important}.border-top-focus-blue{border-top:1px solid}.border-right-focus-blue{border-right:1px solid;border-color:#23527c!important}.border-bottom-focus-blue{border-bottom:1px solid;border-color:#23527c!important}.border-left-focus-blue{border-left:1px solid;border-color:#23527c!important}.dark-blue{color:#394256!important}.fill-dark-blue{background-color:#394256!important}.border-dark-blue,.border-top-dark-blue{border-color:#394256!important}.border-top-dark-blue{border-top:1px solid}.border-right-dark-blue{border-right:1px solid;border-color:#394256!important}.border-bottom-dark-blue{border-bottom:1px solid;border-color:#394256!important}.border-left-dark-blue{border-left:1px solid;border-color:#394256!important}.light-blue{color:#e7effe!important}.fill-light-blue{background-color:#e7effe!important}.border-light-blue,.border-top-light-blue{border-color:#e7effe!important}.border-top-light-blue{border-top:1px solid}.border-right-light-blue{border-right:1px solid;border-color:#e7effe!important}.border-bottom-light-blue{border-bottom:1px solid;border-color:#e7effe!important}.border-left-light-blue{border-left:1px solid;border-color:#e7effe!important}.bright-blue{color:#1b68fa!important}.fill-bright-blue{background-color:#1b68fa!important}.border-bright-blue,.border-top-bright-blue{border-color:#1b68fa!important}.border-top-bright-blue{border-top:1px solid}.border-right-bright-blue{border-right:1px solid;border-color:#1b68fa!important}.border-bottom-bright-blue{border-bottom:1px solid;border-color:#1b68fa!important}.border-left-bright-blue{border-left:1px solid;border-color:#1b68fa!important}.admin-black{color:#01010a!important}.fill-admin-black{background-color:#01010a!important}.border-admin-black,.border-top-admin-black{border-color:#01010a!important}.border-top-admin-black{border-top:1px solid}.border-right-admin-black{border-right:1px solid;border-color:#01010a!important}.border-bottom-admin-black{border-bottom:1px solid;border-color:#01010a!important}.border-left-admin-black{border-left:1px solid;border-color:#01010a!important}.accent-purple{color:#b080fc!important}.fill-accent-purple{background-color:#b080fc!important}.border-accent-purple,.border-top-accent-purple{border-color:#b080fc!important}.border-top-accent-purple{border-top:1px solid}.border-right-accent-purple{border-right:1px solid;border-color:#b080fc!important}.border-bottom-accent-purple{border-bottom:1px solid;border-color:#b080fc!important}.border-left-accent-purple{border-left:1px solid;border-color:#b080fc!important}.grey{color:#58595b!important}.fill-grey{background-color:#58595b!important}.border-grey,.border-top-grey{border-color:#58595b!important}.border-top-grey{border-top:1px solid}.border-right-grey{border-right:1px solid;border-color:#58595b!important}.border-bottom-grey{border-bottom:1px solid;border-color:#58595b!important}.border-left-grey{border-left:1px solid;border-color:#58595b!important}.soft-grey{color:#dddede!important}.fill-soft-grey{background-color:#dddede!important}.border-soft-grey,.border-top-soft-grey{border-color:#dddede!important}.border-top-soft-grey{border-top:1px solid}.border-right-soft-grey{border-right:1px solid;border-color:#dddede!important}.border-bottom-soft-grey{border-bottom:1px solid;border-color:#dddede!important}.border-left-soft-grey{border-left:1px solid;border-color:#dddede!important}.light-grey{color:#eee!important}.fill-light-grey{background-color:#eee!important}.border-light-grey,.border-top-light-grey{border-color:#eee!important}.border-top-light-grey{border-top:1px solid}.border-right-light-grey{border-right:1px solid;border-color:#eee!important}.border-bottom-light-grey{border-bottom:1px solid;border-color:#eee!important}.border-left-light-grey{border-left:1px solid;border-color:#eee!important}.medium-grey{color:#ccc!important}.fill-medium-grey{background-color:#ccc!important}.border-medium-grey,.border-top-medium-grey{border-color:#ccc!important}.border-top-medium-grey{border-top:1px solid}.border-right-medium-grey{border-right:1px solid;border-color:#ccc!important}.border-bottom-medium-grey{border-bottom:1px solid;border-color:#ccc!important}.border-left-medium-grey{border-left:1px solid;border-color:#ccc!important}.medium-dark-grey{color:#999!important}.fill-medium-dark-grey{background-color:#999!important}.border-medium-dark-grey{border-color:#999!important}.border-top-medium-dark-grey{border-top:1px solid;border-color:#999!important}.border-right-medium-dark-grey{border-right:1px solid;border-color:#999!important}.border-bottom-medium-dark-grey{border-bottom:1px solid;border-color:#999!important}.border-left-medium-dark-grey{border-left:1px solid;border-color:#999!important}.dark-grey{color:#222!important}.fill-dark-grey{background-color:#222!important}.border-dark-grey,.border-top-dark-grey{border-color:#222!important}.border-top-dark-grey{border-top:1px solid}.border-right-dark-grey{border-right:1px solid;border-color:#222!important}.border-bottom-dark-grey{border-bottom:1px solid;border-color:#222!important}.border-left-dark-grey{border-left:1px solid;border-color:#222!important}.soft-blue{color:#eff1f5!important}.fill-soft-blue{background-color:#eff1f5!important}.border-soft-blue,.border-top-soft-blue{border-color:#eff1f5!important}.border-top-soft-blue{border-top:1px solid}.border-right-soft-blue{border-right:1px solid;border-color:#eff1f5!important}.border-bottom-soft-blue{border-bottom:1px solid;border-color:#eff1f5!important}.border-left-soft-blue{border-left:1px solid;border-color:#eff1f5!important}.dark-soft-blue{color:#e9ecf1!important}.fill-dark-soft-blue{background-color:#e9ecf1!important}.border-dark-soft-blue,.border-top-dark-soft-blue{border-color:#e9ecf1!important}.border-top-dark-soft-blue{border-top:1px solid}.border-right-dark-soft-blue{border-right:1px solid;border-color:#e9ecf1!important}.border-bottom-dark-soft-blue{border-bottom:1px solid;border-color:#e9ecf1!important}.border-left-dark-soft-blue{border-left:1px solid;border-color:#e9ecf1!important}.darker-soft-blue{color:#e6e9ef!important}.fill-darker-soft-blue{background-color:#e6e9ef!important}.border-darker-soft-blue,.border-top-darker-soft-blue{border-color:#e6e9ef!important}.border-top-darker-soft-blue{border-top:1px solid}.border-right-darker-soft-blue{border-right:1px solid;border-color:#e6e9ef!important}.border-bottom-darker-soft-blue{border-bottom:1px solid;border-color:#e6e9ef!important}.border-left-darker-soft-blue{border-left:1px solid;border-color:#e6e9ef!important}.light-soft-blue{color:#f5f6f9!important}.fill-light-soft-blue{background-color:#f5f6f9!important}.border-light-soft-blue,.border-top-light-soft-blue{border-color:#f5f6f9!important}.border-top-light-soft-blue{border-top:1px solid}.border-right-light-soft-blue{border-right:1px solid;border-color:#f5f6f9!important}.border-bottom-light-soft-blue{border-bottom:1px solid;border-color:#f5f6f9!important}.border-left-light-soft-blue{border-left:1px solid;border-color:#f5f6f9!important}.lighter-soft-blue{color:#f8f9fb!important}.fill-lighter-soft-blue{background-color:#f8f9fb!important}.border-lighter-soft-blue,.border-top-lighter-soft-blue{border-color:#f8f9fb!important}.border-top-lighter-soft-blue{border-top:1px solid}.border-right-lighter-soft-blue{border-right:1px solid;border-color:#f8f9fb!important}.border-bottom-lighter-soft-blue{border-bottom:1px solid;border-color:#f8f9fb!important}.border-left-lighter-soft-blue{border-left:1px solid;border-color:#f8f9fb!important}:root{--color-gray:var(--color-gray-100);--color-gray-50:#f6f7f8;--color-gray-100:#eff1f4;--color-gray-200:#e3e5e8;--color-gray-300:#d7d9dc;--color-gray-400:#cbcdcf;--color-gray-500:#bfc1c3;--color-primary:var(--color-primary-500);--color-primary-50:#e4edfe;--color-primary-100:#bbd2fe;--color-primary-200:#8db4fd;--color-primary-300:#5f95fc;--color-primary-400:#3d7ffb;--color-primary-500:#1b68fa;--color-primary-600:#1860f9;--color-primary-700:#1455f9;--color-primary-800:#104bf8;--color-primary-900:#083af6;--color-primary-A100:#fff;--color-primary-A200:#ebefff;--color-primary-A400:#b8c4ff;--color-primary-A700:#9fafff;--color-secondary:var(--color-secondary-500);--color-secondary-50:#ebf7ed;--color-secondary-100:#cdead3;--color-secondary-200:#acdcb5;--color-secondary-300:#8bce97;--color-secondary-400:#72c481;--color-secondary-500:#59b96b;--color-secondary-600:#51b263;--color-secondary-700:#48aa58;--color-secondary-800:#3ea24e;--color-secondary-900:#2e933c;--color-secondary-A100:#d9ffde;--color-secondary-A200:#a6ffb1;--color-secondary-A400:#73ff84;--color-secondary-A700:#59ff6e}fw-popover{display:none}.fw-popover-panel .fw-popover-content-wrapper{position:relative;background:#fff;border-radius:4px;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;padding:16px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret{position:absolute;overflow:hidden;width:25px;height:25px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret:after{display:block;content:"";width:16px;height:16px;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;transform:rotate(45deg);position:relative}.fw-popover-panel.fw-popover-above{margin-bottom:-20px;padding-bottom:20px}.fw-popover-panel.fw-popover-above .fw-popover-caret{left:0;bottom:-16px;height:16px}.fw-popover-panel.fw-popover-above .fw-popover-caret:after{margin:-8px auto}.fw-popover-panel.fw-popover-below{margin-top:-20px;padding-top:20px}.fw-popover-panel.fw-popover-below .fw-popover-caret{left:0;top:-16px;height:16px}.fw-popover-panel.fw-popover-below .fw-popover-caret:after{top:16px;margin:-8px auto}.fw-popover-panel.fw-popover-left{margin-right:-20px;padding-right:20px}.fw-popover-panel.fw-popover-left .fw-popover-caret{right:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-left .fw-popover-caret:after{top:calc(50% - 8px);left:-8px}.fw-popover-panel.fw-popover-right{margin-left:-20px;padding-left:20px}.fw-popover-panel.fw-popover-right .fw-popover-caret{left:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-right .fw-popover-caret:after{top:calc(50% - 8px);right:-8px}']}]}],G.propDecorators={templateRef:[{type:o.ViewChild,args:["content"]}]};var Q=function(){};Q.decorators=[{type:o.NgModule,args:[{imports:[e.CommonModule],exports:[G,Y,H],declarations:[G,Y,H],entryComponents:[G,Y],providers:[p.Overlay]}]}];var X=function(){function t(t){this.changeDetectorRef=t,this.columns=[],this.dataSource=[],this.layout="basic",this.pageSize=null,this.webCompPageSize=null,this.sort=null,this.sortColumn="",this.sortOrder="asc",this.displayedColumns=[],this.filters=new d.FormGroup({}),this.trackByIndex=function(t){return t}}return t.prototype.ngOnInit=function(){var t=this;this.setDataSource(),this.setColumns(),this.addFilterControls(),this.setFilter(),this.matDataSource.filterPredicate=function(t,o){var e=JSON.parse(o);for(var r in e){var n=e[r],i=t[r];if(Array.isArray(n)&&n.length>0&&!n.includes(i))return!1;if(!Array.isArray(n)&&!String(i).toLowerCase().includes(String(null!=n?n:"").toLowerCase()))return!1}return!0},this.filters.valueChanges.pipe(s.debounceTime(200)).subscribe((function(){return t.setFilter()}))},t.prototype.ngAfterViewInit=function(){this.setSort(),this.setPaginator()},t.prototype.ngOnChanges=function(t){t.columns&&this.setColumns(),t.dataSource&&this.setDataSource(),(t.sort||t.dataSource)&&this.setSort(),(t.pageSize||t["page-size"])&&this.setPaginator()},Object.defineProperty(t.prototype,"isCompact",{get:function(){return"compact"===this.layout},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"paginationSize",{get:function(){return this.pageSize||this.webCompPageSize||0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isSortEnabled",{get:function(){return null!==this.sort},enumerable:!1,configurable:!0}),t.prototype.addFilterControls=function(){var t,o;try{for(var e=P(this.columns),r=e.next();!r.done;r=e.next()){var n=r.value;this.filters.addControl(n.key,new d.FormControl)}}catch(o){t={error:o}}finally{try{r&&!r.done&&(o=e.return)&&o.call(e)}finally{if(t)throw t.error}}},t.prototype.setDataSource=function(){this.matDataSource=new b.MatTableDataSource(this.dataSource)},t.prototype.setColumns=function(){this.displayedColumns=this.columns.map((function(t){return t.key}))},t.prototype.setFilter=function(){this.matDataSource.filter=JSON.stringify(this.filters.value)},t.prototype.setSort=function(){if(this.matSort&&null!==this.sort){var t=this.sort.split(" ");if(this.sortColumn=t[0],["asc","desc"].includes(t[1])?this.sortOrder=t[1]:console.warn("Sort order '"+t[1]+"' is not 'asc' or 'desc', defaulting to 'asc'"),this.sortColumn){this.matSort.sort({id:this.sortColumn,start:this.sortOrder,disableClear:!1});var o=this.matSort.sortables.get(this.sortColumn);o?o._setAnimationTransitionState({toState:"active"}):console.warn("Unable to find sort column '"+this.sortColumn+"'. Initial sort failed.")}this.matDataSource.sort=this.matSort}},t.prototype.setPaginator=function(){this.changeDetectorRef.detectChanges(),this.matDataSource.paginator=this.matPaginator},t.prototype.onInputFilter=function(t,o){var e=this;setTimeout((function(){return e.filters.get(o.key).setValue(t.target.value)}))},t.prototype.onSelectFilter=function(t,o){var e=t.target.innerText;this.filters.get(o.key).setValue("- none -"===e?null:e)},t.prototype.onMultiSelectFilter=function(t,o){var e=this.filters.controls[o.key].value||[],r=t.target.parentElement.innerText;e.includes(r)?e=e.filter((function(t){return t!==r})):e.push(r),this.filters.get(o.key).setValue(1===e.length&&""===r?null:e)},t}();X.decorators=[{type:o.Component,args:[{host:{class:"fw-table","[class.compact]":"isCompact"},selector:"fw-table",template:'<table mat-table [dataSource]="matDataSource" matSort>\n <ng-container *ngFor="let column of columns; trackBy: trackByIndex">\n <ng-container [matColumnDef]="column.key">\n\n <ng-template #tableHeaders>\n <ng-container [ngSwitch]="column.filter?.control">\n <ng-container *ngSwitchCase="\'input\'">\n <mat-form-field *ngIf="filters.get(column.key) as control" appearance="outline" (click)="$event.stopPropagation()">\n <mat-label *ngIf="!isCompact">{{ column.label }}</mat-label>\n <input matInput [formControl]="control" [placeholder]="column.filter.placeholder" (keydown)="$event.stopPropagation(); onInputFilter($event, column);">\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase="\'select\'">\n <mat-form-field *ngIf="filters.get(column.key) as control" appearance="outline" (click)="$event.stopPropagation()">\n <mat-label *ngIf="!isCompact">{{ column.label }}</mat-label>\n <mat-select [formControl]="control" [placeholder]="column.filter.placeholder">\n <mat-option (click)="onSelectFilter($event, column);">- none -</mat-option>\n <mat-option *ngFor="let option of column.filter.options" [value]="option" (click)="onSelectFilter($event, column);">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase="\'multi-select\'">\n <mat-form-field *ngIf="filters.get(column.key) as control" appearance="outline" (click)="$event.stopPropagation()">\n <mat-label *ngIf="!isCompact">{{ column.label }}</mat-label>\n <mat-select [formControl]="control" [placeholder]="column.filter.placeholder" multiple="true">\n <mat-option *ngFor="let option of column.filter.options" [value]="option" (click)="onMultiSelectFilter($event, column);">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchDefault>{{ column.label }}</ng-container>\n </ng-container>\n </ng-template>\n\n <ng-container *ngIf="isSortEnabled">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ng-container [ngTemplateOutlet]="tableHeaders"></ng-container>\n </th>\n </ng-container>\n\n <ng-container *ngIf="!isSortEnabled">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container [ngTemplateOutlet]="tableHeaders"></ng-container>\n </th>\n </ng-container>\n\n <td mat-cell *matCellDef="let element"> {{ element[column.key] }} </td>\n </ng-container>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>\n <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>\n</table>\n<mat-paginator *ngIf="paginationSize > 0" [pageSize]="paginationSize"></mat-paginator>\n\n\n\n',styles:[":host{display:block;width:100%}:host:not(.compact) table.mat-table tr.mat-header-row,:host:not(.compact) table.mat-table tr.mat-row{height:56px}:host.compact table.mat-table tr.mat-header-row,:host.compact table.mat-table tr.mat-row{height:32px}:host.compact mat-paginator.mat-paginator{align-items:center;display:flex;height:32px;justify-content:flex-end}table.mat-table{width:100%}table.mat-table td,table.mat-table th{vertical-align:middle}table.mat-table td.mat-cell,table.mat-table td.mat-header-cell,table.mat-table th.mat-cell,table.mat-table th.mat-header-cell{border-bottom-color:var(--color-gray)}"]}]}],X.ctorParameters=function(){return[{type:o.ChangeDetectorRef}]},X.propDecorators={columns:[{type:o.Input}],dataSource:[{type:o.Input}],layout:[{type:o.Input}],pageSize:[{type:o.Input}],webCompPageSize:[{type:o.Input,args:["page-size"]}],sort:[{type:o.Input}],matPaginator:[{type:o.ViewChild,args:[f.MatPaginator]}],matSort:[{type:o.ViewChild,args:[u.MatSort]}]};var W=function(){};W.decorators=[{type:o.NgModule,args:[{imports:[e.CommonModule,d.FormsModule,d.ReactiveFormsModule,m.MatInputModule,f.MatPaginatorModule,g.MatSelectModule,u.MatSortModule,b.MatTableModule],exports:[X],declarations:[X],entryComponents:[X]}]}],t.FwButtonComponent=v,t.FwButtonGroupComponent=h,t.FwButtonGroupModule=y,t.FwButtonModule=w,t.FwChoiceDialog=x,t.FwConfirmDialog=k,t.FwDialogModule=E,t.FwDialogService=C,t.FwErrorDialog=S,t.FwNotificationComponent=V,t.FwNotificationContainerComponent=_,t.FwNotificationModule=B,t.FwNotificationService=$,t.FwPopoverComponent=G,t.FwPopoverModule=Q,t.FwPopoverTriggerComponent=Y,t.FwPopoverTriggerDirective=H,t.FwPortalDialog=M,t.FwTableComponent=X,t.FwTableModule=W,t.MinimalTranslationService=O,t.TranslationService=T,t.genId=N,t.ɵ0=z,t.ɵa=j,t.ɵb=F,t.ɵc=A,t.ɵd=L,Object.defineProperty(t,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=flywheel-io-vision.umd.min.js.map
@@ -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/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","defineProperty","cssClass","_a","Error","Info","Success","Wait","Warning","ngAfterViewInit","emit","then","onClickDismiss","(click)","providers","Output","HostBinding","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","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","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 var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\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 || Array.prototype.slice.call(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\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\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?.ref) {\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}","export 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, HostBinding, 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 '(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 @HostBinding('class') get cssClass() {\n let cssClass = 'fw-notification';\n switch (this.notification?.type) {\n case FwNotificationType.Error:\n return cssClass += ' error';\n case FwNotificationType.Info:\n return cssClass += ' info';\n case FwNotificationType.Success:\n return cssClass += ' success';\n case FwNotificationType.Wait:\n return cssClass += ' wait';\n case FwNotificationType.Warning:\n return cssClass += ' warning';\n default:\n return cssClass;\n }\n }\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"]}
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","../../../src/components/dialog/choice-dialog.component.ts","../../../src/components/dialog/confirm-dialog.component.ts","../../../src/components/dialog/dialog.service.ts","../../../src/components/dialog/error-dialog.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../src/components/dialog/portal-dialog.component.ts","../../../src/components/shared/translation.service.ts","../../../src/components/shared/pipes/translate.pipe.ts","../../../src/components/shared/pipes/trusthtml.pipe.ts","../../../src/components/shared/pipes/pipes.module.ts","../../../src/components/dialog/dialog.module.ts","../../../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","FwChoiceDialog","data","alignActions","choices","content","title","prototype","getTestId","choice","testId","String","_a","label","value","toLowerCase","test-id","Inject","MAT_DIALOG_DATA","html","FwDialogService","matDialog","dialogs","config","Map","closeAll","component","filter","el","forEach","ref","close","open","_this","index","findIndex","baseConfig","Object","assign","multi","get","push","splice","afterClosed","subscribe","registerDialog","set","Injectable","MatDialog","message","disableClose","MatDialogRef","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","create","__values","o","s","Symbol","iterator","m","i","length","next","done","TypeError","__read","n","r","e","ar","error","FwPortalDialog","viewContainerRef","destroyed$","Subject","portal","ComponentPortal","Error","TemplatePortal","ngOnDestroy","attached","outputs","_e","entries","_f","_g","key","observer","output$","pipe","takeUntil","inputs","changes","_h","_j","_k","instance","SimpleChange","_b","ngOnChanges","changeDetectorRef","markForCheck","ViewContainerRef","MinimalTranslationService","getMessage","silent","of","messages","common.actions.close","confirmDialog.body","confirmDialog.no","confirmDialog.yes","TranslatePipe","cdr","translationService","subscriptions","values","_c","unsubscribe","transform","Pipe","name","pure","ChangeDetectorRef","TranslationService","TrustHtmlPipe","sanitizer","bypassSecurityTrustHtml","DomSanitizer","providers","provide","useClass","hasBackdrop","genId","padStart","Math","floor","random","Date","now","toString","FwConfirmDialog","FwErrorDialog","MatDialogModule","MatIconModule","PipesModule","PortalModule","MAT_DIALOG_DEFAULT_OPTIONS","useValue","ɵ0","FwNotificationService","notifications$","BehaviorSubject","notificationQueue","show","notification","id","dismiss","notificationId","v","dismissAll","providedIn","FwNotificationContainerComponent","notificationService","limit","notifications","expanded","Subscription","EMPTY","notificationClass","level","getEmptyNotification","onReady","startTimer","onDismiss","find","currentNotification","stopTimer","clearAll","onShowMore","onShowLess","[class.duo]","[class.triple]","changeDetection","ChangeDetectionStrategy","OnPush","FwNotificationType","FwNotificationTimerService","remainingDuration","start","duration","Promise","resolve","resolver","continue","stop","clearTimeout","timerId","pause","getTime","window","setTimeout","FwNotificationComponent","timerService","notificationDuration","ready","EventEmitter","defineProperty","cssClass","Info","Success","Wait","Warning","ngAfterViewInit","emit","then","onClickDismiss","(click)","Output","HostBinding","FwButtonModule","FwButtonGroupModule","FwPopoverTriggerDirective","element","overlay","popoverMargin","positionMap","left","originX","originY","overlayX","overlayY","right","above","below","position","positionChanges","overlayRef","dispose","_d","showPopover","popover","templateRef","getOverlay","attach","hidePopover","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","FwPopoverTriggerComponent","_super","__","constructor","__extends","popoverId","popoverHTML","document","innerHTML","popoverTemplateRef","ViewChild","TemplateRef","FwPopoverComponent","FwTableComponent","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","valueChanges","debounceTime","setSort","setPaginator","column","addControl","FormControl","MatTableDataSource","map","stringify","matSort","sortSplit","split","console","warn","disableClear","sortHeader","sortables","_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","import { Component, Inject } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\ninterface Choice {\n color?: ThemePalette\n label: string\n testId?: string\n value: any\n variant?: 'raised' | 'stroked' | 'flat'\n}\n\nexport interface FwChoiceDialogData {\n alignActions: 'start' | 'center' | 'end'\n choices: Choice[]\n content: string\n title?: string\n}\n\n@Component({\n host: {\n class: 'mat-dialog-component',\n 'test-id': 'choice-dialog',\n },\n selector: 'fw-choice-dialog',\n template: `\n <h1 mat-dialog-title *ngIf=\"title\">{{ title }}</h1>\n <div mat-dialog-content>{{ content }}</div>\n <div mat-dialog-actions [align]=\"alignActions\">\n <ng-container *ngFor=\"let choice of choices\" [ngSwitch]=\"choice.variant\">\n <button *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"choice.color\" [attr.test-id]=\"getTestId(choice)\"\n [mat-dialog-close]=\"choice.value\">{{ choice.label }}</button>\n <button *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"choice.color\" [attr.test-id]=\"getTestId(choice)\"\n [mat-dialog-close]=\"choice.value\">{{ choice.label }}</button>\n <button *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"choice.color\" [attr.test-id]=\"getTestId(choice)\"\n [mat-dialog-close]=\"choice.value\">{{ choice.label }}</button>\n <ng-container *ngSwitchDefault>\n <button *ngIf=\"choice.color\" mat-flat-button [color]=\"choice.color\" [attr.test-id]=\"getTestId(choice)\"\n [mat-dialog-close]=\"choice.value\">{{ choice.label }}</button>\n <button *ngIf=\"!choice.color\" mat-stroked-button [attr.test-id]=\"getTestId(choice)\"\n [mat-dialog-close]=\"choice.value\">{{ choice.label }}</button>\n </ng-container>\n </ng-container>\n </div>\n `,\n})\nexport class FwChoiceDialog {\n alignActions = this.data.alignActions\n ? this.data.alignActions === 'start'\n ? null\n : this.data.alignActions\n : 'center'\n choices = this.data.choices\n content = this.data.content\n title = this.data.title\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: FwChoiceDialogData,\n ) {}\n\n getTestId(choice): string {\n return choice.testId || `${String(choice.label ?? choice.value).toLowerCase()}-button`;\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface FwConfirmDialogData {\n title?: string,\n content?: string,\n html?: string,\n}\n\n@Component({\n host: {\n class: 'mat-dialog-component',\n 'test-id': 'confirm-dialog',\n },\n selector: 'fw-confirm-dialog',\n template: `\n <h1 mat-dialog-title *ngIf=\"title\">{{ title }}</h1>\n <div mat-dialog-content *ngIf=\"html\" class=\"markup\" [innerHTML]=\"html | trusthtml\"></div>\n <div mat-dialog-content *ngIf=\"!html\">{{ content || ('confirmDialog.body' | translate ) }}</div>\n <div mat-dialog-actions align=\"center\">\n <button test-id=\"no-button\" mat-stroked-button [mat-dialog-close]=\"false\">{{ 'confirmDialog.no' | translate }}</button>\n <button test-id=\"yes-button\" mat-flat-button color=\"primary\" [mat-dialog-close]=\"true\">{{ 'confirmDialog.yes' | translate }}</button>\n </div>\n `,\n styles: [`\n [mat-dialog-content] {\n text-align: center;\n }\n [mat-dialog-content].markup {\n text-align: inherit;\n }\n `],\n})\nexport class FwConfirmDialog {\n title = this.data.title\n content = this.data.content\n html = this.data.html\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: FwConfirmDialogData,\n ) {}\n}\n","\nimport { Injectable, Type } from '@angular/core';\nimport {\n MatDialog,\n MatDialogConfig,\n MatDialogRef,\n} from '@angular/material/dialog';\n\n/*\n* type StackingStrategy\n* allow - will allow multiple instances of the same dialog to display at once\n* replace - will close existing dialogs of the same type and open a new one\n* ignore - will keep a dialog of the same type open\n*/\nexport type StackingStrategy = 'allow' | 'replace' | 'ignore'\nexport interface DialogConfig<T> extends MatDialogConfig<T> {\n multi: StackingStrategy\n}\nexport interface OpenDialog<T> {\n component: Type<T>\n ref: MatDialogRef<T>\n}\n\n@Injectable()\nexport class FwDialogService {\n readonly dialogs: OpenDialog<any>[] = [];\n\n private config = new Map<Type<unknown>, DialogConfig<unknown>>();\n\n constructor(\n private matDialog: MatDialog,\n ) {}\n\n closeAll(component?: Type<unknown>): void {\n if (component) {\n this.dialogs\n .filter((el) => el.component === component)\n .forEach((el) => el.ref.close());\n } else {\n this.matDialog.closeAll();\n }\n }\n\n open<T, D, R>(component: Type<T>, config?: MatDialogConfig<D>): MatDialogRef<T, R> {\n const index = this.dialogs.findIndex(el => el.component === component);\n let ref: MatDialogRef<T, R> = null;\n const baseConfig = {\n multi: 'allow',\n ...this.config.get(component),\n };\n\n switch (baseConfig.multi) {\n case 'ignore':\n // if an existing dialog of the same type doesn't exist, open one\n if (index === -1) {\n ref = this.matDialog.open(component, { ...baseConfig, ...config });\n this.dialogs.push({ component, ref });\n }\n break;\n case 'replace':\n // if an existing dialog of the same type exists, replace it.\n if (index > -1) {\n this.dialogs[index].ref.close();\n ref = this.matDialog.open(component, { ...baseConfig, ...config });\n this.dialogs.splice(index, 1, { component, ref });\n } else {\n ref = this.matDialog.open(component, { ...baseConfig, ...config });\n this.dialogs.push({ component, ref });\n }\n break;\n default:\n ref = this.matDialog.open(component, { ...baseConfig, ...config });\n this.dialogs.push({ component, ref });\n break;\n }\n\n if (ref) {\n ref.afterClosed().subscribe(() => {\n // clean up open dialog reference\n const index = this.dialogs.findIndex(el => el.ref === ref);\n if (index >= 0) {\n this.dialogs.splice(index, 1);\n }\n });\n }\n\n return ref;\n }\n\n registerDialog(component: Type<unknown>, config: DialogConfig<unknown>): void {\n this.config.set(component, config);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface FwErrorDialogData {\n message: string\n}\n\n@Component({\n host: {\n class: 'mat-dialog-component',\n 'test-id': 'error-dialog',\n },\n selector: 'fw-error-dialog',\n template: `\n <div mat-dialog-content>{{ message }}</div>\n <div mat-dialog-actions align=\"end\">\n <button test-id=\"close-button\" mat-stroked-button mat-dialog-close>\n {{ 'common.actions.close' | translate }}\n </button>\n </div>\n `,\n})\nexport class FwErrorDialog {\n public message = this.data.message\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: FwErrorDialogData,\n private ref: MatDialogRef<FwErrorDialog>,\n ) {\n this.ref.disableClose = false;\n }\n}\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 var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\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 || Array.prototype.slice.call(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\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { CdkPortalOutletAttachedRef, ComponentPortal, ComponentType, Portal, TemplatePortal } from '@angular/cdk/portal';\nimport { Component, ComponentRef, EventEmitter, Inject, OnDestroy, SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\ninterface ComponentSpec {\n type: ComponentType<unknown>,\n inputs?: Record<string, unknown>\n outputs?: Record<string, (value: unknown) => void>\n}\n\nexport interface FwPortalDialogData {\n component?: ComponentSpec\n content?: string\n template?: TemplateRef<unknown>\n title?: string\n}\n\n@Component({\n host: {\n class: 'mat-dialog-component',\n 'test-id': 'portal-dialog',\n },\n selector: 'fw-portal-dialog',\n template: `\n <ng-container *ngIf=\"title\">\n <h1 mat-dialog-title>{{ title }}</h1>\n <button test-id=\"dialog-close-corner\" mat-icon-button mat-dialog-close>\n <mat-icon>close</mat-icon>\n </button>\n </ng-container>\n <mat-dialog-content>\n <p *ngIf=\"content\" class=\"content\">{{ content }}</p>\n <ng-template [cdkPortalOutlet]=\"portal\" (attached)=\"attached($event)\"></ng-template>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button test-id=\"dialog-close-button\" mat-stroked-button mat-dialog-close>\n {{ 'common.actions.close' | translate }}\n </button>\n </mat-dialog-actions>\n `,\n styles: [`\n :host {\n min-width: 200px;\n }\n .content {\n margin-bottom: 30px;\n }\n `],\n})\nexport class FwPortalDialog implements OnDestroy {\n content = this.data.content\n portal: Portal<any>\n title = this.data.title\n\n private destroyed$ = new Subject()\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: FwPortalDialogData,\n private viewContainerRef: ViewContainerRef,\n ) {\n if (this.data.component) {\n this.portal = new ComponentPortal(this.data.component.type, this.viewContainerRef);\n } else if (this.data.template) {\n this.portal = new TemplatePortal(this.data.template, this.viewContainerRef);\n } else {\n throw new Error('One of [component, template] was not provided.');\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n }\n\n attached(ref: CdkPortalOutletAttachedRef): void {\n if (this.data.component) {\n ref = ref as ComponentRef<any>;\n if (this.data.component.outputs) {\n for (const [key, observer] of Object.entries(this.data.component.outputs)) {\n const output$: EventEmitter<unknown> = ref[key];\n if (typeof output$?.pipe === 'function' && typeof output$.subscribe === 'function') {\n output$.pipe(takeUntil(this.destroyed$)).subscribe(observer);\n }\n }\n }\n if (this.data.component.inputs) {\n const changes: SimpleChanges = {};\n for (const [key, value] of Object.entries(this.data.component.inputs)) {\n ref.instance[key] = value;\n changes[key] = new SimpleChange(value, value, true);\n }\n ref.instance.ngOnChanges?.(changes);\n ref.changeDetectorRef.markForCheck();\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { of } from 'rxjs';\nimport { Observable } from 'rxjs';\n\nexport abstract class TranslationService {\n abstract getMessage(key: string, silent?: boolean): Observable<string>\n}\n\n/**\n * Very basic i18n implementation. Consumer apps can provide their own implementation of TranslationService to override.\n */\n @Injectable()\n export class MinimalTranslationService implements TranslationService {\n private static messages = {\n 'common.actions.close': 'Close',\n 'confirmDialog.body': 'Are you sure?',\n 'confirmDialog.no': 'No',\n 'confirmDialog.yes': 'Yes',\n }\n\n getMessage(key: string, silent?: boolean): Observable<string> {\n return of(MinimalTranslationService.messages[key]);\n }\n }\n","import { ChangeDetectorRef, OnDestroy } from '@angular/core';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { TranslationService } from '../translation.service';\n\n/**\n * Translate a message given a nested key to a location in the loaded locale copy.\n */\n @Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private subscriptions: { [key: string]: Subscription } = {}\n private messages: { [key: string]: string } = {}\n\n constructor(\n private cdr: ChangeDetectorRef,\n private translationService: TranslationService,\n ) {}\n\n ngOnDestroy(): void {\n for (const subscription of Object.values(this.subscriptions)) {\n subscription.unsubscribe();\n }\n }\n\n transform(key: string, silent = false): string {\n if (!(key in this.subscriptions)) {\n this.subscriptions[key] = this.translationService.getMessage(key, silent).subscribe(message => {\n this.messages[key] = message;\n // trigger change detection to support components with ChangeDetectionStrategy.OnPush\n this.cdr.markForCheck();\n });\n }\n return this.messages[key] || '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n name: 'trusthtml',\n pure: true,\n})\nexport class TrustHtmlPipe implements PipeTransform {\n constructor (private sanitizer: DomSanitizer) { }\n\n transform(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslationService, MinimalTranslationService } from '../translation.service';\nimport { TrustHtmlPipe } from './trusthtml.pipe';\n\nconst exports = [\n TranslatePipe,\n TrustHtmlPipe,\n];\n\n@NgModule({\n declarations: exports,\n exports: exports,\n providers: [\n {\n provide: TranslationService,\n useClass: MinimalTranslationService,\n },\n ],\n})\nexport class PipesModule {}\n\nexport { TranslationService }\n","import { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { FwChoiceDialog } from './choice-dialog.component';\nimport { FwConfirmDialog } from './confirm-dialog.component';\nimport { FwDialogService } from './dialog.service';\nimport { FwErrorDialog } from './error-dialog.component';\nimport { FwPortalDialog } from './portal-dialog.component';\nimport { PipesModule } from '../shared/pipes/pipes.module';\n\n@NgModule({\n declarations: [\n FwChoiceDialog,\n FwConfirmDialog,\n FwErrorDialog,\n FwPortalDialog,\n ],\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n MatIconModule,\n PipesModule,\n PortalModule,\n ],\n providers: [\n FwDialogService,\n {\n provide: MAT_DIALOG_DEFAULT_OPTIONS,\n useValue: {\n disableClose: true,\n hasBackdrop: true,\n }\n }\n ],\n})\nexport class FwDialogModule {}\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 expanded = 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 if (notifications.length === 0) {\n this.expanded = false;\n }\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.expanded) {\n cssClass = 'default';\n } else {\n cssClass = level >= 0 ? `level-${level}` : 'hidden';\n }\n\n return cssClass;\n }\n\n getEmptyNotification(notification: Notification): Notification {\n return { ...notification, message: ' ' }; // take up a line but show no content\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?.ref) {\n notification.ref.stopTimer();\n }\n if (notification?.id) {\n this.notificationService.dismiss(notification.id);\n }\n this.cdr.markForCheck();\n }\n\n clearAll(): void {\n this.notificationService.dismissAll();\n this.cdr.markForCheck();\n }\n\n onShowMore(): void {\n this.expanded = true;\n this.cdr.markForCheck();\n }\n\n onShowLess(): void {\n this.expanded = 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}","export 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, HostBinding, 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 '(click)': 'onClickDismiss()'\n },\n selector: 'fw-notification',\n styleUrls: [ './notification.component.scss' ],\n template: `{{ notification?.message }}`,\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 @HostBinding('class') get cssClass() {\n let cssClass = 'fw-notification';\n switch (this.notification?.type) {\n case FwNotificationType.Error:\n return cssClass += ' error';\n case FwNotificationType.Info:\n return cssClass += ' info';\n case FwNotificationType.Success:\n return cssClass += ' success';\n case FwNotificationType.Wait:\n return cssClass += ' wait';\n case FwNotificationType.Warning:\n return cssClass += ' warning';\n default:\n return cssClass;\n }\n }\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"]}