UNPKG

@koalarx/ui

Version:

Koala UI is a Design System developed in Angular whose objective is to facilitate and make your development faster and simpler, making this framework your greatest ally.

404 lines 76.7 kB
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { KoalaTokenService } from '../services/token/koala.token.service'; import { menuStateSubject } from '@koalarx/ui/menu'; import jwtEncode from "jwt-encode"; import { TokenFactory } from "../services/token/token.factory"; import { KoalaEnvironment } from "../environments/koalaEnvironment"; import { KoalaOauthConfig } from "../services/openid/koala.oauth.config"; import { KoalaLanguageHelper } from "./koala-language.helper"; import * as i0 from "@angular/core"; import * as i1 from "../services/token/koala.token.service"; import * as i2 from "@angular/router"; import * as i3 from "../services/loader/koala.loader.service"; import * as i4 from "@koalarx/ui/menu"; import * as i5 from "../services/openid/koala.oauth2.service"; import * as i6 from "ngx-device-detector"; import * as i7 from "@angular/common"; import * as i8 from "@angular/material/badge"; import * as i9 from "@angular/material/progress-spinner"; import * as i10 from "@angular/material/toolbar"; import * as i11 from "@angular/material/button"; import * as i12 from "@angular/material/icon"; import * as i13 from "@angular/material/sidenav"; import * as i14 from "@angular/material/menu"; import * as i15 from "./notifications/notification.component"; import * as i16 from "../loader/loader-bar-page.component"; export class PageComponent { constructor(tokenService, router, loaderService, menuService, oauth2Service, deviceService) { this.tokenService = tokenService; this.router = router; this.loaderService = loaderService; this.menuService = menuService; this.oauth2Service = oauth2Service; this.deviceService = deviceService; this.showMenu = true; this.startMenuOpened = true; this.userMenuOptions = []; this.language = 'ptBr'; this.validatingScope = new EventEmitter(false); this.logoutEmitter = new EventEmitter(false); this.deleteAllNotifications = new EventEmitter(false); this.deleteNotification = new EventEmitter(null); this.username$ = new BehaviorSubject(''); this.firstUserLetter$ = new BehaviorSubject(''); this.logged$ = new BehaviorSubject(false); this.validationScope$ = new BehaviorSubject(false); this.isMobile = this.deviceService.isMobile(); this.defaultPalletColors = { scrollbarColor: '#1976D2', scrollbarColorHover: '#1565C0', userPresentationBackground: '#f1f1f1', userPresentationUserBackground: '#1976D2', userPresentationUserFontColor: '#fff', firstColor: '#fff', secondColor: '#F1F1F1', bodyBackground: '#eeeeee', checkboxBackground: '#1976d2', checkboxColor: '#ffffff', fontColor: '#1976D2', fontHoverColor: '#1976D2', fontActiveColor: '#1565C0', menuTitleBackground: 'rgba(0,0,0,.1)', menuTitleColor: 'rgba(0,0,0,.3)', menuBackground: '#fafafa', menuOptionsBackground: '#eaeaea', menuOptionsColor: '#a5a5a5', menuOptionsColorHover: '#1976D2', menuOptionsColorActive: '#1565c0', toolbarBackground: '#ffffff', toolbarColor: '#1976d2', listBackground: '#fff', listContentBackground: '#fff', listTitleItemColor: '#838383', listItemColor: '#3e3e3e', listItemBackgroudHover: '#F1F1F1', listItemBackgroundActive: '#EEE', shadowColorTableList: 'rgba(25, 118, 210, .4)' }; this.loaderSubject = loaderService.getLoaderSubject(); } ngOnInit() { KoalaLanguageHelper.setLanguage(this.language); this.initOAuth2(); if (this.openPages) { if (this.openPages.indexOf('/') < 0) { this.openPages.push('/'); } if (this.openPages.indexOf('/login') < 0) { this.openPages.push('/login'); } } else { this.openPages = [ '/', '/login' ]; } this.tokenService.getToken()?.subscribe(token => { this.logged$.next(!!token); if (this.logged$.getValue()) { const decodedToken = this.tokenService.getDecodedToken(); this.username$.next(decodedToken.login); this.firstUserLetter$.next(decodedToken.login.charAt(0).toUpperCase()); if (!this.isMobile) { this.menuService.open(); } } if (this.logged$.getValue() && this.openPages?.indexOf(this.currentUrl) >= 0 && this.defaultPage) { this.router.navigate([this.defaultPage]).then(); } else if (!this.logged$.getValue() && this.currentUrl && this.openPages?.indexOf(this.currentUrl) < 0) { this.router.navigate(['login']).then(); return false; } }); this.router.events.subscribe(event => { switch (true) { case event instanceof NavigationStart: { this.loaderService.create({ typeLoader: 'indeterminate' }); break; } case event instanceof NavigationEnd: case event instanceof NavigationCancel: case event instanceof NavigationError: { this.loaderService.dismiss(); if (event instanceof NavigationEnd) { if (this.isMobile) { this.menuService.close(); } this.currentUrl = event.url.split('?')[0]; if (event.url.indexOf('/login?clientId=') < 0) { if (this.logged$.getValue() && this.defaultPage && this.openPages?.indexOf(this.currentUrl) >= 0) { this.router.navigate([this.defaultPage]).then(); return false; } else if (!this.logged$.getValue() && this.openPages?.indexOf(this.currentUrl) < 0) { this.router.navigate(['login']).then(); return false; } } } break; } default: { break; } } }); if (this.palletColors) { Object.keys(this.defaultPalletColors).forEach(indexName => { if (!this.palletColors.hasOwnProperty(indexName) || !this.palletColors[indexName]) { this.palletColors[indexName] = this.defaultPalletColors[indexName]; } }); } else { this.palletColors = this.defaultPalletColors; } this.defineColor(); if (this.showMenu) { menuStateSubject.subscribe(async (state) => { if (this.menu) { if (state === 'close') { if (this.menu.opened) { await this.menu.close(); } } else if (state === 'open') { if (!this.menu.opened) { await this.menu.open(); } } } }); if (this.startMenuOpened && this.logged$.getValue()) { if (!this.isMobile) { this.menuService.open(); } } else { this.menuService.close(); } } else { this.menuService.close(); } this.validationScope$.subscribe(scope => this.validatingScope.emit(scope)); } async toogleMenu() { this.menuService.clearConfig(); if (this.menu) { await this.menu.toggle(); } } async logout() { if (KoalaEnvironment.environment?.oauthConfig) { this.oauth2Service.logout(); } this.menuService.close(); this.tokenService.removeToken(); this.tokenService.getToken().next(null); this.logoutEmitter.emit(true); } defineColor() { const css = ` *::-webkit-scrollbar-thumb {background: ${this.palletColors.scrollbarColor};width: 2px;} *::-webkit-scrollbar-thumb:hover {background: ${this.palletColors.scrollbarColorHover};} input:-webkit-autofill, input:-webkit-autofill:focus, input:-webkit-autofill:hover {color: ${this.palletColors.fontColor}!important;} .menu-container, body {background: ${this.palletColors.bodyBackground}!important;} input:-webkit-autofill, input:-webkit-autofill:focus, input:-webkit-autofill:hover {-webkit-box-shadow: 0 0 0 1000px ${this.palletColors.firstColor} inset !important;} .mat-button-disabled, input::placeholder, .mat-form-field-appearance-outline .mat-form-field-outline {color: ${this.palletColors.fontColor}!important;opacity: .6;} .mat-hint, .mat-expansion-indicator::after, .more-items-content .items .titleForm, fieldset legend, .mat-paginator-container, .mat-form-field-flex mat-icon {color: ${this.palletColors.fontColor}!important;} .mat-paginator-container, .mat-card, .mat-expansion-panel, .mat-select-panel, .mat-autocomplete-panel, .mat-menu-panel {background: ${this.palletColors.firstColor}} .mat-selected {background-color: rgba(0,0,0,.3)!important;} .question p, .alert-message, .mat-action-row, .mat-option, .mat-menu-item, .mat-menu-item mat-icon {color: ${this.palletColors.fontColor}!important} .mat-select-value, .mat-select-arrow, .mat-form-field input, .mat-form-field textarea, .mat-form-field-appearance-outline:not(.mat-form-field-invalid) .mat-form-field-outline-thick, .mat-form-field label, .select-multiple-native select {color: ${this.palletColors.fontColor}!important;caret-color: ${this.palletColors.fontColor}!important;} .mat-form-field-underline, .mat-form-field-appearance-fill .mat-form-field-underline::before, .mat-form-field-ripple {background: ${this.palletColors.fontColor}!important;} .mat-checkbox-checked.mat-accent .mat-checkbox-background, .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element {background-color: ${this.palletColors.checkboxBackground} !important;} .mat-checkbox-checkmark-path {stroke: ${this.palletColors.checkboxColor} !important;} .mat-checkbox-checkmark {fill: ${this.palletColors.checkboxColor} !important;} .mat-checkbox-mixedmark {background-color: ${this.palletColors.checkboxColor} !important;} .mat-checkbox-frame {border-color: ${this.palletColors.checkboxOutlineColor}!important;} .mat-checkbox-label {color: ${this.palletColors.fontColor}!important;} .mat-radio-outer-circle {border-color: ${this.palletColors.checkboxBackground}!important;} .mat-radio-ripple .mat-ripple-element, .mat-radio-inner-circle {background-color: ${this.palletColors.checkboxBackground} !important;} .home-list-cards .list .mat-list-item-content .mat-icon {color: ${this.palletColors.fontColor};} .home-list-cards .list button .mat-badge-content {background: ${this.palletColors.fontColor};} .koala-dialog .mat-dialog-title h2 {color: ${this.palletColors.fontColor};} .koala-dialog .mat-dialog-title mat-icon {color: ${this.palletColors.fontColor}!important;} .koala-dialog .mat-dialog-container {background: ${this.palletColors.firstColor}} .list-filter mat-icon {color: ${this.palletColors.filterIconColor}!important;} koala-page .menu-options {background: ${this.palletColors.menuBackground};} koala-page .toolbar {background: ${this.palletColors.toolbarBackground};} koala-page .toolbar .btn-collapse-menu, koala-page .btn-toolbar span{color: ${this.palletColors.toolbarColor};} koala-page .btn-toolbar span.icon-user, .user-presentation span.icon-user {background: ${this.palletColors.userPresentationUserBackground};color: ${this.palletColors.userPresentationUserFontColor};} .user-presentation {background: ${this.palletColors.userPresentationBackground};} .user-presentation span.username {color: ${this.palletColors.toolbarColor};} .mat-drawer.mat-drawer-push {background-color: ${this.palletColors.bodyBackground};} koala-menu .title {background: ${this.palletColors.menuTitleBackground};color: ${this.palletColors.menuTitleColor};} koala-menu ul li, koala-menu ul li a {color: ${this.palletColors.menuOptionsColor};} koala-menu ul li:hover, koala-menu ul li:hover a {color: ${this.palletColors.menuOptionsColorHover} !important;} koala-menu ul li.active, koala-menu ul li.expanded {color: ${this.palletColors.menuOptionsColorActive} !important;border-left: 4px solid ${this.palletColors.menuOptionsColorActive} !important;background: ${this.palletColors.menuOptionsBackground} !important;} koala-menu ul li.active a, koala-menu ul li.expanded a {color: ${this.palletColors.menuOptionsColorActive} !important;background: ${this.palletColors.menuOptionsBackground} !important;} koala-menu ul li li:hover, koala-menu ul li li:hover a {color: ${this.palletColors.menuOptionsColorHover} !important;} koala-menu ul li li.active, koala-menu ul li li.active a {color: ${this.palletColors.menuOptionsColorActive} !important;} koala-menu ul li koala-icon svg *, koala-menu ul li a koala-icon svg * {fill: ${this.palletColors.menuOptionsColor};} koala-menu ul li:hover koala-icon svg *, koala-menu ul li:hover a koala-icon svg * {fill: ${this.palletColors.menuOptionsColorHover} !important;} koala-menu ul li.active koala-icon *, koala-menu ul li.expanded koala-icon * {fill: ${this.palletColors.menuOptionsColorActive} !important;} koala-menu ul li li:hover koala-icon *, koala-menu ul li li:hover a koala-icon * {fill: ${this.palletColors.menuOptionsColorHover} !important;} koala-menu ul li li.active koala-icon *, koala-menu ul li li.active a koala-icon * {fill: ${this.palletColors.menuOptionsColorActive}!important;} .notifications-content .title {color: ${this.palletColors.notificationTitleColor}!important;} .notifications-content .empty, .notifications-content .titleList {color: ${this.palletColors.notificationContentTitleColor}!important;} .notifications-content .iconList {color: ${this.palletColors.notificationContentIconColor}!important;} .notifications-content .textList {color: ${this.palletColors.notificationTitleColor}!important;} .list-container {box-shadow: 0 1px 3px ${this.palletColors.shadowColorTableList};} .list-container .list table.table-hover tr:hover {background: ${this.palletColors.listItemBackgroudHover};} .list-container .list table.table-hover tr:active {background: ${this.palletColors.listItemBackgroundActive};} .list-container .list-filter .advanced {background: ${this.palletColors.firstColor};} .list-container nav.menu-list {background: ${this.palletColors.firstColor};color: rgba(25, 118, 210, .3);} .content {background: ${this.palletColors.listContentBackground};} .mat-tab-group .mat-tab-label {color: ${this.palletColors.fontColor};} .mat-tab-group .mat-ink-bar {background-color: ${this.palletColors.fontColor}!important;} .mat-table {background: ${this.palletColors.listBackground};color: ${this.palletColors.fontColor};} .mat-table th {color: ${this.palletColors.listTitleItemColor}!important;} .mat-sort-header-arrow {color: ${this.palletColors.listItemColor}!important;} .mat-table td {color: ${this.palletColors.listItemColor}!important;}`; const head = document.head || document.getElementsByTagName('head')[0]; const style = document.createElement('style'); head.appendChild(style); style.appendChild(document.createTextNode(css)); } initOAuth2() { KoalaOauthConfig.config.subscribe(config => this.startConfig(config)); if (KoalaOauthConfig.hasConfig()) { KoalaOauthConfig.setConfig(KoalaOauthConfig.getConfig()); } } startConfig(config) { if (config.clientId) { this.oauth2Service.configure({ redirectUri: window.location.origin, redirectUriAfterAuth: this.defaultPage, responseType: 'code', clientId: config.clientId, scope: config.scope, issuer: config.domain, customQueryParams: config.customQueryParams, endpointToken: config.endpointToken ?? null, endpointClaims: config.endpointClaims ?? null }); this.oauth2Service.loadDiscoveryDocumentAndTryLogin().then(); if (this.oauthEventsSubscription) { this.oauthEventsSubscription.unsubscribe(); } this.oauthEventsSubscription = this.oauth2Service.events.subscribe(event => { if (event === 'userAuthenticated' || event === 'refreshToken') { const claims = this.oauth2Service.getIdentityClaims(); if (claims && (!TokenFactory.hasToken() || (TokenFactory.hasToken() && event === 'refreshToken'))) { this.tokenService.setToken(jwtEncode({ accessToken: this.oauth2Service.getAccessToken(), idToken: this.oauth2Service.getIdToken(), refreshToken: this.oauth2Service.getRefreshToken(), login: claims[config.indexLoginName] ?? 'Undefined', expired: this.oauth2Service.getAccessTokenExpiration(), code: this.oauth2Service.getCode() }, 'secret')); } if (event === 'userAuthenticated') { setTimeout(() => this.validationScope$.next(false), 300); } } else if (event === 'getToken') { this.validationScope$.next(true); } }); } } } PageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PageComponent, deps: [{ token: i1.KoalaTokenService }, { token: i2.Router }, { token: i3.KoalaLoaderService }, { token: i4.KoalaMenuService }, { token: i5.KoalaOAuth2Service }, { token: i6.DeviceDetectorService }], target: i0.ɵɵFactoryTarget.Component }); PageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PageComponent, selector: "koala-page", inputs: { showMenu: "showMenu", color: "color", logo: "logo", startMenuOpened: "startMenuOpened", showLoaderPage: "showLoaderPage", messageLoaderPage: "messageLoaderPage", defaultPage: "defaultPage", openPages: "openPages", notifications: "notifications", userMenuOptions: "userMenuOptions", palletColors: "palletColors", language: "language" }, outputs: { validatingScope: "validatingScope", logoutEmitter: "logoutEmitter", deleteAllNotifications: "deleteAllNotifications", deleteNotification: "deleteNotification" }, providers: [KoalaTokenService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["drawer"], descendants: true, static: true }], ngImport: i0, template: "<div *ngIf=\"showLoaderPage | async\" class=\"koala-loader-pg\">\n <div class=\"loader-content\">\n <figure>\n <img [src]=\"logo\" alt=\"Logotipo\"/>\n <figcaption *ngIf=\"(messageLoaderPage | async) as messageLoader\" [innerHTML]=\"messageLoader\"></figcaption>\n </figure>\n <mat-spinner></mat-spinner>\n </div>\n</div>\n<app-loader-page *ngIf=\"(loaderSubject | async) as loader\" [progress]=\"loader.progress\" [show]=\"loader.show\"\n [typeLoader]=\"loader.typeLoader\"></app-loader-page>\n<mat-drawer-container autosize class=\"menu-container\">\n <mat-drawer #drawer class=\"menu-options\" [mode]=\"isMobile ? 'push' : 'side'\">\n <img [src]=\"logo\" alt=\"Logotipo\" id=\"logotipo\"/>\n <ng-content *ngIf=\"showMenu\" select=\"[menu-options]\"></ng-content>\n </mat-drawer>\n\n <mat-toolbar *ngIf=\"!!(logged$ | async) && (username$ | async)\" class=\"toolbar\">\n <img *ngIf=\"!showMenu\" [src]=\"logo\" alt=\"Logotipo Toolbar\" id=\"logotipo-toolbar\"/>\n <button (click)=\"toogleMenu()\" *ngIf=\"showMenu\" [color]=\"color\" class=\"btn-collapse-menu\" mat-icon-button>\n <mat-icon>menu</mat-icon>\n </button>\n <span class=\"spacer\"></span>\n\t <div class=\"menu-toolbar\">\n\t\t <ng-content select=\"[menu-toolbar]\"></ng-content>\n\t </div>\n <div *ngIf=\"(notifications | async) as notificationList\">\n <button *ngIf=\"notifications\" [color]=\"color\" [matMenuTriggerFor]=\"notificationsMenu\" class=\"btn-toolbar\"\n mat-icon-button>\n <mat-icon\n\t [matBadgeHidden]=\"notificationList.length === 0\"\n\t [matBadge]=\"notificationList.length.toString()\"\n\t matBadgeColor=\"warn\">notifications\n </mat-icon>\n </button>\n <mat-menu #notificationsMenu=\"matMenu\" class=\"menu-list\" yPosition=\"below\">\n <koala-notification-list\n (delete)=\"deleteNotification.emit($event)\"\n (deleteAll)=\"deleteAllNotifications.emit($event)\"\n [notifications]=\"notificationList\">\n </koala-notification-list>\n </mat-menu>\n </div>\n <button [color]=\"color\" [matMenuTriggerFor]=\"userOptions\" class=\"btn-toolbar\" mat-button>\n <span>{{username$ | async}}</span>\n <span class=\"icon-user\">{{firstUserLetter$ | async}}</span>\n </button>\n <mat-menu #userOptions=\"matMenu\" class=\"user-menu menu-list\" yPosition=\"below\">\n <div class=\"user-presentation\">\n <span class=\"icon-user\">{{firstUserLetter$ | async}}</span><br/>\n <span class=\"username\">{{username$ | async}}</span>\n </div>\n <button (click)=\"btn.action()\" *ngFor=\"let btn of userMenuOptions\" mat-menu-item>\n <mat-icon>{{btn.icon}}</mat-icon>\n <span>{{btn.name}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>exit_to_app</mat-icon>\n <span>{{language === 'ptBr' ? 'Sair' : 'Logout'}}</span>\n </button>\n </mat-menu>\n </mat-toolbar>\n\n <ng-content class=\"page-content\" select=\"[page-content]\"></ng-content>\n\n</mat-drawer-container>\n\n<ng-content class=\"loading-info-content\" select=\"[loading-info-content]\"></ng-content>\n", styles: [".menu-container{height:100vh;width:100vw}.menu-options{border:none;padding:20px 0 0;width:250px}.page-content{align-items:center;display:flex;height:100%;justify-content:center}img#logotipo,img#logotipo-toolbar{display:block;height:auto;margin:0 auto 25px;position:relative;width:120px}.toolbar{box-shadow:none;padding:0 7px 0 13px}.toolbar img#logotipo-toolbar{margin:0;padding:0 10px}.menu-toolbar{margin:0 10px}.spacer{flex:1 1 auto}.btn-toolbar{display:inline-block;margin-right:10px;position:relative}.btn-toolbar span{padding:0 10px 0 0}.btn-toolbar span.icon-user,.user-presentation span.icon-user{border-radius:50%;display:inline-block;height:10px;line-height:10px;padding:5px;width:10px}.user-presentation{min-width:260px;padding:50px 10px;text-align:center}.user-presentation span.icon-user{font-size:30px;height:30px;line-height:30px;margin-bottom:10px;width:30px}.user-presentation span.username{font-family:OpenSansLight,sans-serif;word-break:break-all}@media (max-width: 900px){.btn-toolbar span:first-child{display:none}.btn-toolbar span.icon-user,.user-presentation span.icon-user{height:20px;line-height:20px;width:20px}}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i13.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i15.NotificationComponent, selector: "koala-notification-list", inputs: ["notifications"], outputs: ["deleteAll", "delete"] }, { kind: "component", type: i16.LoaderBarPageComponent, selector: "app-loader-page", inputs: ["show", "progress", "typeLoader"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PageComponent, decorators: [{ type: Component, args: [{ selector: 'koala-page', providers: [KoalaTokenService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"showLoaderPage | async\" class=\"koala-loader-pg\">\n <div class=\"loader-content\">\n <figure>\n <img [src]=\"logo\" alt=\"Logotipo\"/>\n <figcaption *ngIf=\"(messageLoaderPage | async) as messageLoader\" [innerHTML]=\"messageLoader\"></figcaption>\n </figure>\n <mat-spinner></mat-spinner>\n </div>\n</div>\n<app-loader-page *ngIf=\"(loaderSubject | async) as loader\" [progress]=\"loader.progress\" [show]=\"loader.show\"\n [typeLoader]=\"loader.typeLoader\"></app-loader-page>\n<mat-drawer-container autosize class=\"menu-container\">\n <mat-drawer #drawer class=\"menu-options\" [mode]=\"isMobile ? 'push' : 'side'\">\n <img [src]=\"logo\" alt=\"Logotipo\" id=\"logotipo\"/>\n <ng-content *ngIf=\"showMenu\" select=\"[menu-options]\"></ng-content>\n </mat-drawer>\n\n <mat-toolbar *ngIf=\"!!(logged$ | async) && (username$ | async)\" class=\"toolbar\">\n <img *ngIf=\"!showMenu\" [src]=\"logo\" alt=\"Logotipo Toolbar\" id=\"logotipo-toolbar\"/>\n <button (click)=\"toogleMenu()\" *ngIf=\"showMenu\" [color]=\"color\" class=\"btn-collapse-menu\" mat-icon-button>\n <mat-icon>menu</mat-icon>\n </button>\n <span class=\"spacer\"></span>\n\t <div class=\"menu-toolbar\">\n\t\t <ng-content select=\"[menu-toolbar]\"></ng-content>\n\t </div>\n <div *ngIf=\"(notifications | async) as notificationList\">\n <button *ngIf=\"notifications\" [color]=\"color\" [matMenuTriggerFor]=\"notificationsMenu\" class=\"btn-toolbar\"\n mat-icon-button>\n <mat-icon\n\t [matBadgeHidden]=\"notificationList.length === 0\"\n\t [matBadge]=\"notificationList.length.toString()\"\n\t matBadgeColor=\"warn\">notifications\n </mat-icon>\n </button>\n <mat-menu #notificationsMenu=\"matMenu\" class=\"menu-list\" yPosition=\"below\">\n <koala-notification-list\n (delete)=\"deleteNotification.emit($event)\"\n (deleteAll)=\"deleteAllNotifications.emit($event)\"\n [notifications]=\"notificationList\">\n </koala-notification-list>\n </mat-menu>\n </div>\n <button [color]=\"color\" [matMenuTriggerFor]=\"userOptions\" class=\"btn-toolbar\" mat-button>\n <span>{{username$ | async}}</span>\n <span class=\"icon-user\">{{firstUserLetter$ | async}}</span>\n </button>\n <mat-menu #userOptions=\"matMenu\" class=\"user-menu menu-list\" yPosition=\"below\">\n <div class=\"user-presentation\">\n <span class=\"icon-user\">{{firstUserLetter$ | async}}</span><br/>\n <span class=\"username\">{{username$ | async}}</span>\n </div>\n <button (click)=\"btn.action()\" *ngFor=\"let btn of userMenuOptions\" mat-menu-item>\n <mat-icon>{{btn.icon}}</mat-icon>\n <span>{{btn.name}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>exit_to_app</mat-icon>\n <span>{{language === 'ptBr' ? 'Sair' : 'Logout'}}</span>\n </button>\n </mat-menu>\n </mat-toolbar>\n\n <ng-content class=\"page-content\" select=\"[page-content]\"></ng-content>\n\n</mat-drawer-container>\n\n<ng-content class=\"loading-info-content\" select=\"[loading-info-content]\"></ng-content>\n", styles: [".menu-container{height:100vh;width:100vw}.menu-options{border:none;padding:20px 0 0;width:250px}.page-content{align-items:center;display:flex;height:100%;justify-content:center}img#logotipo,img#logotipo-toolbar{display:block;height:auto;margin:0 auto 25px;position:relative;width:120px}.toolbar{box-shadow:none;padding:0 7px 0 13px}.toolbar img#logotipo-toolbar{margin:0;padding:0 10px}.menu-toolbar{margin:0 10px}.spacer{flex:1 1 auto}.btn-toolbar{display:inline-block;margin-right:10px;position:relative}.btn-toolbar span{padding:0 10px 0 0}.btn-toolbar span.icon-user,.user-presentation span.icon-user{border-radius:50%;display:inline-block;height:10px;line-height:10px;padding:5px;width:10px}.user-presentation{min-width:260px;padding:50px 10px;text-align:center}.user-presentation span.icon-user{font-size:30px;height:30px;line-height:30px;margin-bottom:10px;width:30px}.user-presentation span.username{font-family:OpenSansLight,sans-serif;word-break:break-all}@media (max-width: 900px){.btn-toolbar span:first-child{display:none}.btn-toolbar span.icon-user,.user-presentation span.icon-user{height:20px;line-height:20px;width:20px}}\n"] }] }], ctorParameters: function () { return [{ type: i1.KoalaTokenService }, { type: i2.Router }, { type: i3.KoalaLoaderService }, { type: i4.KoalaMenuService }, { type: i5.KoalaOAuth2Service }, { type: i6.DeviceDetectorService }]; }, propDecorators: { showMenu: [{ type: Input }], color: [{ type: Input }], logo: [{ type: Input }], startMenuOpened: [{ type: Input }], showLoaderPage: [{ type: Input }], messageLoaderPage: [{ type: Input }], defaultPage: [{ type: Input }], openPages: [{ type: Input }], notifications: [{ type: Input }], userMenuOptions: [{ type: Input }], palletColors: [{ type: Input }], language: [{ type: Input }], validatingScope: [{ type: Output }], logoutEmitter: [{ type: Output }], deleteAllNotifications: [{ type: Output }], deleteNotification: [{ type: Output }], menu: [{ type: ViewChild, args: ['drawer', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvcGFnZS9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9wYWdlL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFNUcsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFNMUUsT0FBTyxFQUFvQixnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RFLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekUsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVakYsTUFBTSxPQUFPLGFBQWE7SUE2RHhCLFlBQ1UsWUFBK0IsRUFDL0IsTUFBYyxFQUNkLGFBQWlDLEVBQ2pDLFdBQTZCLEVBQzdCLGFBQWlDLEVBQ2pDLGFBQW9DO1FBTHBDLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qs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Q0FBQztpQkFDbEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7MEdBeFdVLGFBQWE7OEZBQWIsYUFBYSw0aUJBSGIsQ0FBQyxpQkFBaUIsQ0FBQyx3SUN6QmhDLHlxR0FvRUE7MkZEeENhLGFBQWE7a0JBUHpCLFNBQVM7K0JBQ0UsWUFBWSxhQUdYLENBQUMsaUJBQWlCLENBQUMsbUJBQ2IsdUJBQXVCLENBQUMsTUFBTTtrUUFHdEMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBMkNzQyxJQUFJO3NCQUFoRCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTG9hZGVyQmFyUGFnZUludGVyZmFjZSB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXItYmFyLXBhZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLb2FsYVRva2VuU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Rva2VuL2tvYWxhLnRva2VuLnNlcnZpY2UnO1xuaW1wb3J0IHsgS29hbGFMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9hZGVyL2tvYWxhLmxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEtvYWxhTm90aWZpY2F0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi9ub3RpZmljYXRpb25zL2tvYWxhLm5vdGlmaWNhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS29hbGFVc2VyTWVudU9wdGlvbnNJbnRlcmZhY2UgfSBmcm9tICcuL2tvYWxhLnVzZXItbWVudS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLb2FsYVBhZ2VQYWxsZXRDb2xvcnNJbnRlcmZhY2UgfSBmcm9tICcuL2tvYWxhLXBhZ2UtcGFsbGV0LWNvbG9ycy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0RHJhd2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBLb2FsYU1lbnVTZXJ2aWNlLCBtZW51U3RhdGVTdWJqZWN0IH0gZnJvbSAnQGtvYWxhcngvdWkvbWVudSc7XG5pbXBvcnQgand0RW5jb2RlIGZyb20gXCJqd3QtZW5jb2RlXCI7XG5pbXBvcnQgeyBUb2tlbkZhY3RvcnkgfSBmcm9tIFwiLi4vc2VydmljZXMvdG9rZW4vdG9rZW4uZmFjdG9yeVwiO1xuaW1wb3J0IHsgS29hbGFPQXV0aDJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL29wZW5pZC9rb2FsYS5vYXV0aDIuc2VydmljZVwiO1xuaW1wb3J0IHsgS29hbGFFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9lbnZpcm9ubWVudHMva29hbGFFbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgS29hbGFPYXV0aENvbmZpZyB9IGZyb20gXCIuLi9zZXJ2aWNlcy9vcGVuaWQva29hbGEub2F1dGguY29uZmlnXCI7XG5pbXBvcnQgeyBLb2FsYU9hdXRoMkNvbmZpZ0ludGVyZmFjZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9vcGVuaWQva29hbGEtb2F1dGgyLWNvbmZpZy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEtvYWxhTGFuZ3