@mckit/auth 19.0.1 → 19.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -15,6 +15,12 @@ Core para integrar facilmente Auth en tu plataforma. Incluye paginas de login ya
|
|
|
15
15
|
|
|
16
16
|
## Installation
|
|
17
17
|
|
|
18
|
+
### Use Schematics
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
ng g @mckit/schematics:add-login-page
|
|
22
|
+
```
|
|
23
|
+
|
|
18
24
|
### 1. Install MIA Core
|
|
19
25
|
|
|
20
26
|
[Instalar MIA Core](https://github.com/matiascamiletti/mc-kit/blob/main/projects/mckit/core/README.md#1-install-libraries)
|
package/fesm2022/mckit-auth.mjs
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, makeEnvironmentProviders, signal, Injectable, inject, Pipe, input, output,
|
|
2
|
+
import { InjectionToken, makeEnvironmentProviders, signal, Injectable, inject, Pipe, afterNextRender, Component, input, output, EventEmitter, Input, Output } from '@angular/core';
|
|
3
3
|
import { tap, map, switchMap, catchError } from 'rxjs';
|
|
4
4
|
import * as i1 from '@ngx-pwa/local-storage';
|
|
5
5
|
import { HttpResponse, HttpErrorResponse } from '@angular/common/http';
|
|
6
6
|
import * as i11 from '@angular/router';
|
|
7
7
|
import { Router, RedirectCommand, RouterModule } from '@angular/router';
|
|
8
|
-
import
|
|
8
|
+
import { MCCoreComponent, MCComponent } from '@mckit/core';
|
|
9
|
+
import * as i1$2 from '@angular/common';
|
|
10
|
+
import { CommonModule } from '@angular/common';
|
|
11
|
+
import * as i3 from 'primeng/button';
|
|
12
|
+
import { ButtonModule } from 'primeng/button';
|
|
13
|
+
import * as i1$1 from 'primeng/menu';
|
|
14
|
+
import { MenuModule } from 'primeng/menu';
|
|
15
|
+
import * as i2 from 'primeng/avatar';
|
|
16
|
+
import { AvatarModule } from 'primeng/avatar';
|
|
17
|
+
import * as i2$1 from '@angular/forms';
|
|
9
18
|
import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
10
19
|
import * as i5 from 'primeng/card';
|
|
11
20
|
import { CardModule } from 'primeng/card';
|
|
12
|
-
import * as i3 from 'primeng/button';
|
|
13
|
-
import { ButtonModule } from 'primeng/button';
|
|
14
21
|
import * as i6 from 'primeng/iconfield';
|
|
15
22
|
import { IconFieldModule } from 'primeng/iconfield';
|
|
16
23
|
import * as i7 from 'primeng/inputicon';
|
|
@@ -21,8 +28,6 @@ import * as i9 from 'primeng/password';
|
|
|
21
28
|
import { PasswordModule } from 'primeng/password';
|
|
22
29
|
import * as i10 from 'primeng/message';
|
|
23
30
|
import { MessageModule } from 'primeng/message';
|
|
24
|
-
import * as i1$1 from '@angular/common';
|
|
25
|
-
import { CommonModule } from '@angular/common';
|
|
26
31
|
import * as i4 from 'primeng/api';
|
|
27
32
|
import { CheckboxModule } from 'primeng/checkbox';
|
|
28
33
|
|
|
@@ -189,6 +194,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
|
|
|
189
194
|
}]
|
|
190
195
|
}] });
|
|
191
196
|
|
|
197
|
+
class AvatarWithMenuComponent extends MCCoreComponent {
|
|
198
|
+
authService = inject(MCAuthenticationService);
|
|
199
|
+
user = signal(undefined);
|
|
200
|
+
items = signal([]);
|
|
201
|
+
constructor() {
|
|
202
|
+
super();
|
|
203
|
+
afterNextRender(() => {
|
|
204
|
+
this.loadUser();
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
loadMenu() {
|
|
208
|
+
let items = this.component.config.items ?? [];
|
|
209
|
+
if (items.length == 0) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
items[0].label = `Hi ${this.user()?.firstname}`;
|
|
213
|
+
this.items.set(items);
|
|
214
|
+
}
|
|
215
|
+
loadUser() {
|
|
216
|
+
this.authService.getUser()
|
|
217
|
+
.pipe(tap(user => this.user.set(user)))
|
|
218
|
+
.subscribe(user => this.loadMenu());
|
|
219
|
+
}
|
|
220
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: AvatarWithMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
221
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: AvatarWithMenuComponent, isStandalone: true, selector: "mc-avatar-with-menu", usesInheritance: true, ngImport: i0, template: "<p-menu #menu [model]=\"items()\" [popup]=\"true\" />\n@if (user() != undefined) {\n @if (user()!.photo != undefined && user()!.photo != '') {\n <p-avatar [image]=\"user()!.photo\" styleClass=\"topbar-avatar\" [shape]=\"'circle'\" [size]=\"'large'\" (click)=\"menu.toggle($event)\" />\n } @else {\n <p-avatar label=\"{{ user()! | initialName }}\" styleClass=\"topbar-avatar\" [shape]=\"'circle'\" [size]=\"'large'\" (click)=\"menu.toggle($event)\" />\n }\n\n}\n", styles: [":host ::ng-deep .topbar-avatar{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i1$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "pipe", type: InitialNamePipe, name: "initialName" }] });
|
|
222
|
+
}
|
|
223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: AvatarWithMenuComponent, decorators: [{
|
|
224
|
+
type: Component,
|
|
225
|
+
args: [{ selector: 'mc-avatar-with-menu', imports: [CommonModule, ButtonModule, MenuModule, AvatarModule, InitialNamePipe], template: "<p-menu #menu [model]=\"items()\" [popup]=\"true\" />\n@if (user() != undefined) {\n @if (user()!.photo != undefined && user()!.photo != '') {\n <p-avatar [image]=\"user()!.photo\" styleClass=\"topbar-avatar\" [shape]=\"'circle'\" [size]=\"'large'\" (click)=\"menu.toggle($event)\" />\n } @else {\n <p-avatar label=\"{{ user()! | initialName }}\" styleClass=\"topbar-avatar\" [shape]=\"'circle'\" [size]=\"'large'\" (click)=\"menu.toggle($event)\" />\n }\n\n}\n", styles: [":host ::ng-deep .topbar-avatar{cursor:pointer}\n"] }]
|
|
226
|
+
}], ctorParameters: () => [] });
|
|
227
|
+
class MCAvatarWithMenu extends MCComponent {
|
|
228
|
+
constructor(items) {
|
|
229
|
+
super(AvatarWithMenuComponent);
|
|
230
|
+
this.config = {
|
|
231
|
+
items: items
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
192
236
|
class MCBaseAuthPage {
|
|
193
237
|
group = new FormGroup({
|
|
194
238
|
email: new FormControl('', [Validators.required, Validators.email]),
|
|
@@ -234,7 +278,7 @@ class MCAuthBasicComponent extends MCBaseAuthPage {
|
|
|
234
278
|
this.submit.emit(obj);
|
|
235
279
|
}
|
|
236
280
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthBasicComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
237
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthBasicComponent, isStandalone: true, selector: "mc-auth-basic", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submit: "submit" }, usesInheritance: true, ngImport: i0, template: "<div class=\"background-container\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1600 800\" preserveAspectRatio=\"none\" class=\"fixed left-0 top-0 min-h-screen min-w-screen\"><rect width=\"1600\" height=\"800\" fill=\"var(--primary-500)\"></rect><path d=\"M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z\" fill=\"var(--primary-400)\"></path><path d=\"M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z\" fill=\"var(--primary-300)\"></path><path d=\"M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z\" fill=\"var(--primary-200)\"></path><path d=\"M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z\" fill=\"var(--primary-100)\"></path></svg>\n</div>\n<div class=\"mc-auth-basic-container\">\n <p-card [header]=\"config().title ?? 'Log in'\" [subheader]=\"config().subtitle ?? 'Please enter your details'\">\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <p-iconField iconPosition=\"left\" class=\"mb-3 w-full\">\n <p-inputIcon styleClass=\"pi pi-envelope\" />\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" (keyup.enter)=\"onClickSubmit()\" class=\"w-full\" />\n </p-iconField>\n\n <p-iconField iconPosition=\"left\" class=\"w-full\">\n <p-inputIcon styleClass=\"pi pi-lock\" />\n <p-password [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" [feedback]=\"false\" [toggleMask]=\"true\" formControlName=\"password\" name=\"password\" (keyup.enter)=\"onClickSubmit()\" inputStyleClass=\"w-full\" styleClass=\"w-full\" />\n </p-iconField>\n\n @if (config().resetPasswordLink != undefined) {\n <div class=\"more-actions\">\n <p-button [routerLink]=\"config().resetPasswordLink\" [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" />\n </div>\n }\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n </form>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"mt-1 w-full\">\n <p-button [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" styleClass=\"w-full\" />\n </div>\n\n @if (config().registerLink != undefined) {\n <div class=\"more-actions-footer mt-3\">\n <p-button [routerLink]=\"config().registerLink\" [label]=\"config().register ?? 'Don\u2019t have an account? Register'\" [link]=\"true\" />\n </div>\n }\n </ng-template>\n </p-card>\n</div>\n", styles: [".background-container{position:fixed;left:0;top:0;width:100%;height:100vh;z-index:-1;margin:0}.mc-auth-basic-container{display:flex;justify-content:center;min-height:100%;align-items:center}p-card{width:500px;max-width:500px}:host ::ng-deep .p-card-body{padding:40px}.more-actions{text-align:right;font-size:small}:host ::ng-deep .more-actions .p-button{padding-right:0}.more-actions-footer{text-align:center;font-size:x-small}@media (max-width: 768px){p-card{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$
|
|
281
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthBasicComponent, isStandalone: true, selector: "mc-auth-basic", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submit: "submit" }, usesInheritance: true, ngImport: i0, template: "<div class=\"background-container\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1600 800\" preserveAspectRatio=\"none\" class=\"fixed left-0 top-0 min-h-screen min-w-screen\"><rect width=\"1600\" height=\"800\" fill=\"var(--primary-500)\"></rect><path d=\"M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z\" fill=\"var(--primary-400)\"></path><path d=\"M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z\" fill=\"var(--primary-300)\"></path><path d=\"M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z\" fill=\"var(--primary-200)\"></path><path d=\"M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z\" fill=\"var(--primary-100)\"></path></svg>\n</div>\n<div class=\"mc-auth-basic-container\">\n <p-card [header]=\"config().title ?? 'Log in'\" [subheader]=\"config().subtitle ?? 'Please enter your details'\">\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <p-iconField iconPosition=\"left\" class=\"mb-3 w-full\">\n <p-inputIcon styleClass=\"pi pi-envelope\" />\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" (keyup.enter)=\"onClickSubmit()\" class=\"w-full\" />\n </p-iconField>\n\n <p-iconField iconPosition=\"left\" class=\"w-full\">\n <p-inputIcon styleClass=\"pi pi-lock\" />\n <p-password [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" [feedback]=\"false\" [toggleMask]=\"true\" formControlName=\"password\" name=\"password\" (keyup.enter)=\"onClickSubmit()\" inputStyleClass=\"w-full\" styleClass=\"w-full\" />\n </p-iconField>\n\n @if (config().resetPasswordLink != undefined) {\n <div class=\"more-actions\">\n <p-button [routerLink]=\"config().resetPasswordLink\" [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" />\n </div>\n }\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n </form>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"mt-1 w-full\">\n <p-button [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" styleClass=\"w-full\" />\n </div>\n\n @if (config().registerLink != undefined) {\n <div class=\"more-actions-footer mt-3\">\n <p-button [routerLink]=\"config().registerLink\" [label]=\"config().register ?? 'Don\u2019t have an account? Register'\" [link]=\"true\" />\n </div>\n }\n </ng-template>\n </p-card>\n</div>\n", styles: [".background-container{position:fixed;left:0;top:0;width:100%;height:100vh;z-index:-1;margin:0}.mc-auth-basic-container{display:flex;justify-content:center;min-height:100%;align-items:center}p-card{width:500px;max-width:500px}:host ::ng-deep .p-card-body{padding:40px}.more-actions{text-align:right;font-size:small}:host ::ng-deep .more-actions .p-button{padding-right:0}.more-actions-footer{text-align:center;font-size:x-small}@media (max-width: 768px){p-card{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i5.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "ngmodule", type: IconFieldModule }, { kind: "component", type: i6.IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "ngmodule", type: InputIconModule }, { kind: "component", type: i7.InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i8.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: PasswordModule }, { kind: "component", type: i9.Password, selector: "p-password", inputs: ["ariaLabel", "fluid", "ariaLabelledBy", "label", "disabled", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "appendTo", "toggleMask", "size", "inputStyleClass", "styleClass", "style", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "variant"], outputs: ["onFocus", "onBlur", "onClear"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i10.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i11.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
238
282
|
}
|
|
239
283
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthBasicComponent, decorators: [{
|
|
240
284
|
type: Component,
|
|
@@ -280,7 +324,7 @@ class MCAuthSakaiComponent extends MCBaseAuthPage {
|
|
|
280
324
|
this.action.emit(type);
|
|
281
325
|
}
|
|
282
326
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
283
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthSakaiComponent, isStandalone: true, selector: "mc-auth-sakai", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submit: "submit", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\">\n }\n <div class=\"container-degradee\" style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\n <div class=\"container-content\" class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius:53px\">\n <div class=\"text-center mb-8\">\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">{{config().subtitle}}</div>\n <h1 class=\"text-muted-color font-medium\">{{config().title}}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n <label for=\"email\" class=\"block text-surface-900 dark:text-surface-0 text-xl font-medium mb-2\">Email</label>\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" class=\"w-full md:w-[30rem] mb-8\" />\n\n <div class=\"container-password-label flex justify-between justify-content-between align-items-end items-end\">\n <label for=\"password1\" class=\"block text-surface-900 dark:text-surface-0 font-medium text-xl mb-2\">Password</label>\n @if (config().resetPassword != undefined) {\n <div class=\"more-actions\">\n <p-button [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" (onClick)=\"onAction('forgot-password')\" styleClass=\"button-forgot-password\" />\n </div>\n }\n </div>\n\n <p-password id=\"password1\" formControlName=\"password\" name=\"password\" placeholder=\"Password\" [toggleMask]=\"true\" styleClass=\"mb-5 w-full\" inputStyleClass=\"w-full p-3 md:w-30rem\" [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" (keyup.enter)=\"onClickSubmit()\" [feedback]=\"false\"></p-password>\n\n <!--<div class=\"flex align-items-center items-center justify-between mb-5 gap-5\">\n <div class=\"flex align-items-center items-center\">\n <p-checkbox id=\"rememberme1\" [binary]=\"true\" styleClass=\"mr-2\"></p-checkbox>\n <label for=\"rememberme1\">Remember me</label>\n </div>\n <a class=\"font-medium no-underline ml-2 text-right cursor-pointer\" style=\"color: var(--primary-color)\">Forgot password?</a>\n </div>-->\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <p-button pRipple [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" size=\"large\" [style]=\"{ width: '100%' }\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" />\n\n </div>\n </form>\n </div>\n </div>\n\n <ng-content></ng-content>\n\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$
|
|
327
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthSakaiComponent, isStandalone: true, selector: "mc-auth-sakai", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submit: "submit", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\">\n }\n <div class=\"container-degradee\" style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\n <div class=\"container-content\" class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius:53px\">\n <div class=\"text-center mb-8\">\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">{{config().subtitle}}</div>\n <h1 class=\"text-muted-color font-medium\">{{config().title}}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n <label for=\"email\" class=\"block text-surface-900 dark:text-surface-0 text-xl font-medium mb-2\">Email</label>\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" class=\"w-full md:w-[30rem] mb-8\" />\n\n <div class=\"container-password-label flex justify-between justify-content-between align-items-end items-end\">\n <label for=\"password1\" class=\"block text-surface-900 dark:text-surface-0 font-medium text-xl mb-2\">Password</label>\n @if (config().resetPassword != undefined) {\n <div class=\"more-actions\">\n <p-button [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" (onClick)=\"onAction('forgot-password')\" styleClass=\"button-forgot-password\" />\n </div>\n }\n </div>\n\n <p-password id=\"password1\" formControlName=\"password\" name=\"password\" placeholder=\"Password\" [toggleMask]=\"true\" styleClass=\"mb-5 w-full\" inputStyleClass=\"w-full p-3 md:w-30rem\" [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" (keyup.enter)=\"onClickSubmit()\" [feedback]=\"false\"></p-password>\n\n <!--<div class=\"flex align-items-center items-center justify-between mb-5 gap-5\">\n <div class=\"flex align-items-center items-center\">\n <p-checkbox id=\"rememberme1\" [binary]=\"true\" styleClass=\"mr-2\"></p-checkbox>\n <label for=\"rememberme1\">Remember me</label>\n </div>\n <a class=\"font-medium no-underline ml-2 text-right cursor-pointer\" style=\"color: var(--primary-color)\">Forgot password?</a>\n </div>-->\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <p-button pRipple [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" size=\"large\" [style]=\"{ width: '100%' }\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" />\n\n </div>\n </form>\n </div>\n </div>\n\n <ng-content></ng-content>\n\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CardModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: InputIconModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i8.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: PasswordModule }, { kind: "component", type: i9.Password, selector: "p-password", inputs: ["ariaLabel", "fluid", "ariaLabelledBy", "label", "disabled", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "appendTo", "toggleMask", "size", "inputStyleClass", "styleClass", "style", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "variant"], outputs: ["onFocus", "onBlur", "onClear"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i10.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }] });
|
|
284
328
|
}
|
|
285
329
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiComponent, decorators: [{
|
|
286
330
|
type: Component,
|
|
@@ -309,7 +353,7 @@ class MCAuthSakaiSocialComponent extends MCBaseAuthPage {
|
|
|
309
353
|
this.action.emit(type);
|
|
310
354
|
}
|
|
311
355
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiSocialComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
312
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthSakaiSocialComponent, isStandalone: true, selector: "mc-auth-sakai-social", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submit: "submit", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"surface-ground flex align-items-center items-center justify-content-center justify-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-col flex-column align-items-center items-center justify-content-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\" alt=\"logo\">\n }\n\n <ng-content select=\"[pageheader]\"></ng-content>\n <div class=\"container-degradee\"\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"container-content w-full surface-card py-8 px-5 sm:px-8\" style=\"border-radius:53px\">\n <div class=\"text-center mb-5\">\n <div class=\"text-900 text-sm font-medium mb-3 uppercase tracking-widest\">{{ config().subtitle }}</div>\n <h1 class=\"text-600 font-black text-2xl\">{{ config().title }}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <ng-content></ng-content>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", styles: [".surface-ground{background-color:#f9fafb}.surface-card{background-color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$
|
|
356
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthSakaiSocialComponent, isStandalone: true, selector: "mc-auth-sakai-social", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submit: "submit", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"surface-ground flex align-items-center items-center justify-content-center justify-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-col flex-column align-items-center items-center justify-content-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\" alt=\"logo\">\n }\n\n <ng-content select=\"[pageheader]\"></ng-content>\n <div class=\"container-degradee\"\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"container-content w-full surface-card py-8 px-5 sm:px-8\" style=\"border-radius:53px\">\n <div class=\"text-center mb-5\">\n <div class=\"text-900 text-sm font-medium mb-3 uppercase tracking-widest\">{{ config().subtitle }}</div>\n <h1 class=\"text-600 font-black text-2xl\">{{ config().title }}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <ng-content></ng-content>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", styles: [".surface-ground{background-color:#f9fafb}.surface-card{background-color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: CardModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: InputIconModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: PasswordModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i10.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }] });
|
|
313
357
|
}
|
|
314
358
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiSocialComponent, decorators: [{
|
|
315
359
|
type: Component,
|
|
@@ -327,5 +371,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
|
|
|
327
371
|
* Generated bundle index. Do not edit.
|
|
328
372
|
*/
|
|
329
373
|
|
|
330
|
-
export { InitialNamePipe, MCAuthBasicComponent, MCAuthBasicConfig, MCAuthConfig, MCAuthHalfComponent, MCAuthHalfConfig, MCAuthModel, MCAuthSakaiComponent, MCAuthSakaiConfig, MCAuthSakaiSocialComponent, MCAuthenticationService, MCBaseAuthPage, MCBaseAuthPageConfig, MCUser, MC_AUTH_CONFIG, MC_AUTH_KEY_STORAGE_TOKEN, MC_AUTH_SKIP_INTERCEPTOR, authInterceptor, mcAuthGuard, mcUserResolver, provideMCAuth };
|
|
374
|
+
export { AvatarWithMenuComponent, InitialNamePipe, MCAuthBasicComponent, MCAuthBasicConfig, MCAuthConfig, MCAuthHalfComponent, MCAuthHalfConfig, MCAuthModel, MCAuthSakaiComponent, MCAuthSakaiConfig, MCAuthSakaiSocialComponent, MCAuthenticationService, MCAvatarWithMenu, MCBaseAuthPage, MCBaseAuthPageConfig, MCUser, MC_AUTH_CONFIG, MC_AUTH_KEY_STORAGE_TOKEN, MC_AUTH_SKIP_INTERCEPTOR, authInterceptor, mcAuthGuard, mcUserResolver, provideMCAuth };
|
|
331
375
|
//# sourceMappingURL=mckit-auth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mckit-auth.mjs","sources":["../../../../projects/mckit/auth/src/lib/entities/mc-user.ts","../../../../projects/mckit/auth/src/lib/entities/mc-auth-config.ts","../../../../projects/mckit/auth/src/lib/entities/mc-auth-model.ts","../../../../projects/mckit/auth/src/lib/entities/mc-base-auth-page-config.ts","../../../../projects/mckit/auth/src/lib/providers/auth.provider.ts","../../../../projects/mckit/auth/src/lib/services/authentication.service.ts","../../../../projects/mckit/auth/src/lib/interceptors/auth.interceptor.ts","../../../../projects/mckit/auth/src/lib/guards/auth.guard.ts","../../../../projects/mckit/auth/src/lib/resolvers/user.resolver.ts","../../../../projects/mckit/auth/src/lib/pipes/initial-name.pipe.ts","../../../../projects/mckit/auth/src/lib/pages/base-auth-page.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-basic/auth-basic.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-basic/auth-basic.component.html","../../../../projects/mckit/auth/src/lib/pages/auth-half/auth-half.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-half/auth-half.component.html","../../../../projects/mckit/auth/src/lib/pages/auth-sakai/auth-sakai.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-sakai/auth-sakai.component.html","../../../../projects/mckit/auth/src/lib/pages/auth-sakai-only-social/auth-sakai-only-social.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-sakai-only-social/auth-sakai-only-social.component.html","../../../../projects/mckit/auth/src/public-api.ts","../../../../projects/mckit/auth/src/mckit-auth.ts"],"sourcesContent":["export class MCUser {\n static STATUS_INACTIVE = 0;\n static STATUS_ACTIVE = 1;\n static STATUS_SUSPENDED = 2;\n\n public id?: number|string;\n public firstname: string = '';\n public lastname: string = '';\n public email: string = '';\n public photo?: string = '';\n public role: number = 0;\n public status: number = 0;\n public created_at: string = '';\n public extra: any;\n\n public token_type: string = 'bearer';\n public access_token: string = '';\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const MC_AUTH_CONFIG = new InjectionToken<MCAuthConfig>('mc.auth');\n\nexport class MCAuthConfig {\n baseUrl: string = '';\n}\n","export class MCAuthModel {\n email?: string|null;\n password?: string|null;\n}\n","export class MCBaseAuthPageConfig {\n title?: string;\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\nimport { MC_AUTH_CONFIG, MCAuthConfig } from \"../entities/mc-auth-config\";\n\nexport function provideMCAuth(value: MCAuthConfig): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: MC_AUTH_CONFIG, useValue: value }]);\n}\n","import { Injectable, signal } from '@angular/core';\nimport { StorageMap } from '@ngx-pwa/local-storage';\nimport { MCUser } from '../entities/mc-user';\nimport { map, Observable, tap } from 'rxjs';\n\nexport const MC_AUTH_KEY_STORAGE_TOKEN = 'mc.auth.storage';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MCAuthenticationService {\n\n isLogged = signal<boolean>(false);\n\n constructor(\n private storage: StorageMap\n ) {\n this.initialize();\n }\n\n saveUser(user: MCUser): Observable<undefined> {\n return this.storage.set(MC_AUTH_KEY_STORAGE_TOKEN, JSON.stringify(user), { type: 'string' })\n .pipe(tap(res => this.isLogged.update(res => true)));\n }\n\n getUser(): Observable<MCUser|undefined> {\n return this.storage.get(MC_AUTH_KEY_STORAGE_TOKEN, { type: 'string' })\n .pipe(map(data => {\n if(data == undefined||data == ''){\n return;\n }\n return JSON.parse(data);\n }));\n }\n\n removeUser(): Observable<any> {\n return this.storage.delete(MC_AUTH_KEY_STORAGE_TOKEN);\n }\n\n initialize() {\n this.getUser()\n .subscribe(user => {\n if(user == undefined){\n return;\n }\n\n this.isLogged.update(res => true);\n });\n }\n}\n","import { HttpErrorResponse, HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { MC_AUTH_CONFIG } from '../entities/mc-auth-config';\nimport { MCAuthenticationService } from '../services/authentication.service';\nimport { catchError, switchMap, tap } from 'rxjs';\n\nexport const MC_AUTH_SKIP_INTERCEPTOR = 'skip-interceptor';\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n\n const config = inject(MC_AUTH_CONFIG);\n const authService = inject(MCAuthenticationService);\n\n if(req.url.indexOf(config.baseUrl) == -1){\n return next(req);\n }\n\n if (req.headers.has(MC_AUTH_SKIP_INTERCEPTOR)) {\n const clonedReq = req.clone({ headers: req.headers.delete(MC_AUTH_SKIP_INTERCEPTOR) });\n return next(clonedReq);\n }\n\n return authService.getUser()\n .pipe(\n\n switchMap(user => {\n\n if(user == undefined){\n return next(req);\n }\n\n return next(req.clone({\n headers: req.headers.set('Authorization', `Bearer ${user.access_token}`)\n }));\n\n }),\n tap(event => {\n\n if(event instanceof HttpResponse && event.status == 401){\n authService.removeUser().subscribe(() => {\n window.location.reload();\n });\n }\n\n }),\n catchError(err => {\n\n if(err instanceof HttpErrorResponse && err.status == 401){\n authService.removeUser().subscribe(() => {\n window.location.reload();\n });\n }\n\n throw err;\n }),\n\n\n );\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, RedirectCommand, Router } from '@angular/router';\nimport { MCAuthenticationService } from '../services/authentication.service';\nimport { map } from 'rxjs';\n\nexport const mcAuthGuard: CanActivateFn = (route, state) => {\n const router = inject(Router);\n const authService = inject(MCAuthenticationService);\n\n let paramRedirect = router.url;\n if (paramRedirect.includes('/login')) {\n paramRedirect = '';\n }\n\n return authService.getUser()\n .pipe(map(user => {\n if(user == undefined){\n const loginPath = router.parseUrl(\"/login\");\n loginPath.queryParams = {\n redirect: paramRedirect\n };\n return new RedirectCommand(loginPath, { skipLocationChange: true });\n }\n\n return true;\n }));\n};\n","import { ResolveFn } from '@angular/router';\nimport { MCAuthenticationService } from '../services/authentication.service';\nimport { inject } from '@angular/core';\nimport { MCUser } from '../entities/mc-user';\n\nexport const mcUserResolver: ResolveFn<MCUser|undefined> = (route, state) => {\n const authService = inject(MCAuthenticationService);\n\n return authService.getUser();\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MCUser } from '../entities/mc-user';\n\n@Pipe({\n name: 'initialName',\n standalone: true\n})\nexport class InitialNamePipe implements PipeTransform {\n\n transform(user: MCUser): string {\n // Get the first letter of the first name\n const firstLetter = user.firstname.charAt(0);\n // Verify if the last name is not empty\n if (user.lastname == undefined || user.lastname == '') {\n // Return the first letter\n return firstLetter;\n }\n // Get the first letter of the last name\n const lastLetter = user.lastname.charAt(0);\n // Return the initials\n return firstLetter + lastLetter;\n }\n\n}\n","import { FormControl, FormGroup, Validators } from \"@angular/forms\";\nimport { MCAuthModel } from \"../entities/mc-auth-model\";\nimport { inject, signal } from \"@angular/core\";\nimport { MCMessage } from \"@mckit/core\";\n\nexport abstract class MCBaseAuthPage {\n group = new FormGroup({\n email: new FormControl<string>('', [Validators.required, Validators.email]),\n password: new FormControl<string>('', Validators.required)\n });\n\n isSending = signal(false);\n\n messages = signal<Array<MCMessage>>([]);\n\n abstract onSubmit(obj: MCAuthModel): void;\n\n onClickSubmit() {\n if(this.group.invalid){\n return;\n }\n\n if(this.isSending()){\n return;\n }\n\n this.clearMessages();\n\n let obj = new MCAuthModel();\n obj.email = this.group.get('email')?.value;\n obj.password = this.group.get('password')?.value;\n\n this.showLoading();\n this.onSubmit(obj);\n }\n\n showSuccessMessage(message: string) {\n this.messages.set([{ severity: 'success', text: message}]);\n }\n\n showErrorMessage(message: string) {\n this.messages.set([{ severity: 'error', text: message}]);\n }\n\n clearMessages() {\n this.messages.set([]);\n }\n\n showLoading() {\n this.isSending.set(true);\n }\n\n hideLoading() {\n this.isSending.set(false);\n }\n}\n","import { Component, EventEmitter, input, Input, output, Output } from '@angular/core';\nimport { CardModule } from 'primeng/card';\nimport { ButtonModule } from 'primeng/button';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PasswordModule } from 'primeng/password';\nimport { FormGroup, FormsModule, ReactiveFormsModule, FormControl, Validators } from '@angular/forms';\nimport { MessageModule } from 'primeng/message';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { MCBaseAuthPageConfig } from '../../entities/mc-base-auth-page-config';\nimport { RouterModule } from '@angular/router';\nimport { MCBaseAuthPage } from '../base-auth-page.component';\nimport { CommonModule } from '@angular/common';\n\n\n\n@Component({\n selector: 'mc-auth-basic',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, MessageModule, RouterModule],\n templateUrl: './auth-basic.component.html',\n styleUrl: './auth-basic.component.scss'\n})\nexport class MCAuthBasicComponent extends MCBaseAuthPage {\n config = input.required<MCAuthBasicConfig>();\n submit = output<MCAuthModel>();\n\n onSubmit(obj: MCAuthModel): void {\n this.submit.emit(obj);\n }\n}\n\nexport class MCAuthBasicConfig extends MCBaseAuthPageConfig {\n subtitle?: string;\n\n emailPlaceholder?: string;\n passwordPlaceholder?: string;\n\n submitButton?: string;\n\n resetPassword?: string;\n resetPasswordLink?: string;\n\n register?: string;\n registerLink?: string;\n}\n","<div class=\"background-container\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1600 800\" preserveAspectRatio=\"none\" class=\"fixed left-0 top-0 min-h-screen min-w-screen\"><rect width=\"1600\" height=\"800\" fill=\"var(--primary-500)\"></rect><path d=\"M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z\" fill=\"var(--primary-400)\"></path><path d=\"M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z\" fill=\"var(--primary-300)\"></path><path d=\"M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z\" fill=\"var(--primary-200)\"></path><path d=\"M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z\" fill=\"var(--primary-100)\"></path></svg>\n</div>\n<div class=\"mc-auth-basic-container\">\n <p-card [header]=\"config().title ?? 'Log in'\" [subheader]=\"config().subtitle ?? 'Please enter your details'\">\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <p-iconField iconPosition=\"left\" class=\"mb-3 w-full\">\n <p-inputIcon styleClass=\"pi pi-envelope\" />\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" (keyup.enter)=\"onClickSubmit()\" class=\"w-full\" />\n </p-iconField>\n\n <p-iconField iconPosition=\"left\" class=\"w-full\">\n <p-inputIcon styleClass=\"pi pi-lock\" />\n <p-password [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" [feedback]=\"false\" [toggleMask]=\"true\" formControlName=\"password\" name=\"password\" (keyup.enter)=\"onClickSubmit()\" inputStyleClass=\"w-full\" styleClass=\"w-full\" />\n </p-iconField>\n\n @if (config().resetPasswordLink != undefined) {\n <div class=\"more-actions\">\n <p-button [routerLink]=\"config().resetPasswordLink\" [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" />\n </div>\n }\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n </form>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"mt-1 w-full\">\n <p-button [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" styleClass=\"w-full\" />\n </div>\n\n @if (config().registerLink != undefined) {\n <div class=\"more-actions-footer mt-3\">\n <p-button [routerLink]=\"config().registerLink\" [label]=\"config().register ?? 'Don’t have an account? Register'\" [link]=\"true\" />\n </div>\n }\n </ng-template>\n </p-card>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MCBaseAuthPageConfig } from '../../entities/mc-base-auth-page-config';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'mc-auth-half',\n imports: [CommonModule],\n templateUrl: './auth-half.component.html',\n styleUrl: './auth-half.component.scss'\n})\nexport class MCAuthHalfComponent {\n @Input() config!: MCAuthHalfConfig;\n @Output() submit = new EventEmitter<MCAuthModel>();\n\n\n}\n\nexport class MCAuthHalfConfig extends MCBaseAuthPageConfig {\n image?: string;\n}\n","<div class=\"mc-auth-half-container\">\n <div class=\"column-left\">\n <div class=\"container-form\">\n <h1>{{ config.title }}</h1>\n </div>\n </div>\n\n <div class=\"column-right\">\n @if (config.image != undefined) {\n <img [src]=\"config.image\" />\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PasswordModule } from 'primeng/password';\nimport { MCBaseAuthPageConfig } from '../../entities/mc-base-auth-page-config';\nimport { MCBaseAuthPage } from '../base-auth-page.component';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'mc-auth-sakai',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, CheckboxModule, MessageModule],\n templateUrl: './auth-sakai.component.html',\n styleUrl: './auth-sakai.component.scss'\n})\nexport class MCAuthSakaiComponent extends MCBaseAuthPage {\n config = input.required<MCAuthSakaiConfig>();\n submit = output<MCAuthModel>();\n action = output<string>();\n\n onSubmit(obj: MCAuthModel): void {\n this.submit.emit(obj);\n }\n\n onAction(type: string) {\n this.action.emit(type);\n }\n}\n\nexport class MCAuthSakaiConfig extends MCBaseAuthPageConfig {\n logo?: string;\n\n subtitle?: string;\n\n emailPlaceholder?: string;\n passwordPlaceholder?: string;\n\n submitButton?: string;\n\n resetPassword?: string;\n resetPasswordLink?: string;\n\n register?: string;\n registerLink?: string;\n}\n","<div class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\">\n }\n <div class=\"container-degradee\" style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\n <div class=\"container-content\" class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius:53px\">\n <div class=\"text-center mb-8\">\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">{{config().subtitle}}</div>\n <h1 class=\"text-muted-color font-medium\">{{config().title}}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n <label for=\"email\" class=\"block text-surface-900 dark:text-surface-0 text-xl font-medium mb-2\">Email</label>\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" class=\"w-full md:w-[30rem] mb-8\" />\n\n <div class=\"container-password-label flex justify-between justify-content-between align-items-end items-end\">\n <label for=\"password1\" class=\"block text-surface-900 dark:text-surface-0 font-medium text-xl mb-2\">Password</label>\n @if (config().resetPassword != undefined) {\n <div class=\"more-actions\">\n <p-button [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" (onClick)=\"onAction('forgot-password')\" styleClass=\"button-forgot-password\" />\n </div>\n }\n </div>\n\n <p-password id=\"password1\" formControlName=\"password\" name=\"password\" placeholder=\"Password\" [toggleMask]=\"true\" styleClass=\"mb-5 w-full\" inputStyleClass=\"w-full p-3 md:w-30rem\" [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" (keyup.enter)=\"onClickSubmit()\" [feedback]=\"false\"></p-password>\n\n <!--<div class=\"flex align-items-center items-center justify-between mb-5 gap-5\">\n <div class=\"flex align-items-center items-center\">\n <p-checkbox id=\"rememberme1\" [binary]=\"true\" styleClass=\"mr-2\"></p-checkbox>\n <label for=\"rememberme1\">Remember me</label>\n </div>\n <a class=\"font-medium no-underline ml-2 text-right cursor-pointer\" style=\"color: var(--primary-color)\">Forgot password?</a>\n </div>-->\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <p-button pRipple [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" size=\"large\" [style]=\"{ width: '100%' }\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" />\n\n </div>\n </form>\n </div>\n </div>\n\n <ng-content></ng-content>\n\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PasswordModule } from 'primeng/password';\nimport { MCBaseAuthPage } from '../base-auth-page.component';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { MessageModule } from 'primeng/message';\nimport { MCAuthSakaiConfig } from '../auth-sakai/auth-sakai.component';\n\n@Component({\n selector: 'mc-auth-sakai-social',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, CheckboxModule, MessageModule],\n\n templateUrl: './auth-sakai-only-social.component.html',\n styleUrl: './auth-sakai-only-social.component.scss'\n})\nexport class MCAuthSakaiSocialComponent extends MCBaseAuthPage {\n config = input.required<MCAuthSakaiConfig>();\n submit = output<MCAuthModel>();\n action = output<string>();\n\n onSubmit(obj: MCAuthModel): void {\n this.submit.emit(obj);\n }\n\n onAction(type: string) {\n this.action.emit(type);\n }\n}\n","<div\n class=\"surface-ground flex align-items-center items-center justify-content-center justify-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-col flex-column align-items-center items-center justify-content-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\" alt=\"logo\">\n }\n\n <ng-content select=\"[pageheader]\"></ng-content>\n <div class=\"container-degradee\"\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"container-content w-full surface-card py-8 px-5 sm:px-8\" style=\"border-radius:53px\">\n <div class=\"text-center mb-5\">\n <div class=\"text-900 text-sm font-medium mb-3 uppercase tracking-widest\">{{ config().subtitle }}</div>\n <h1 class=\"text-600 font-black text-2xl\">{{ config().title }}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <ng-content></ng-content>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n","/*\n * Public API Surface of auth\n */\n\n/**\n * Entities\n */\nexport * from './lib/entities/mc-user';\nexport * from './lib/entities/mc-auth-config';\nexport * from './lib/entities/mc-auth-model';\nexport * from './lib/entities/mc-base-auth-page-config';\n\n/**\n * Providers\n */\nexport * from './lib/providers/auth.provider';\n\n/**\n * Services\n */\nexport * from './lib/services/authentication.service';\n\n/**\n * Interceptors\n */\nexport * from './lib/interceptors/auth.interceptor';\n\n/**\n * Guards\n */\nexport * from './lib/guards/auth.guard';\n\n/**\n * Resolvers\n */\nexport * from './lib/resolvers/user.resolver';\n\n/**\n * Pipes\n */\nexport * from './lib/pipes/initial-name.pipe';\n\n/**\n * Pages\n */\nexport * from './lib/pages/base-auth-page.component';\nexport * from './lib/pages/auth-basic/auth-basic.component';\nexport * from './lib/pages/auth-half/auth-half.component';\nexport * from './lib/pages/auth-sakai/auth-sakai.component';\nexport * from './lib/pages/auth-sakai-only-social/auth-sakai-only-social.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5","i6","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mckit-auth.mjs","sources":["../../../../projects/mckit/auth/src/lib/entities/mc-user.ts","../../../../projects/mckit/auth/src/lib/entities/mc-auth-config.ts","../../../../projects/mckit/auth/src/lib/entities/mc-auth-model.ts","../../../../projects/mckit/auth/src/lib/entities/mc-base-auth-page-config.ts","../../../../projects/mckit/auth/src/lib/providers/auth.provider.ts","../../../../projects/mckit/auth/src/lib/services/authentication.service.ts","../../../../projects/mckit/auth/src/lib/interceptors/auth.interceptor.ts","../../../../projects/mckit/auth/src/lib/guards/auth.guard.ts","../../../../projects/mckit/auth/src/lib/resolvers/user.resolver.ts","../../../../projects/mckit/auth/src/lib/pipes/initial-name.pipe.ts","../../../../projects/mckit/auth/src/lib/components/avatar-with-menu/avatar-with-menu.component.ts","../../../../projects/mckit/auth/src/lib/components/avatar-with-menu/avatar-with-menu.component.html","../../../../projects/mckit/auth/src/lib/pages/base-auth-page.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-basic/auth-basic.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-basic/auth-basic.component.html","../../../../projects/mckit/auth/src/lib/pages/auth-half/auth-half.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-half/auth-half.component.html","../../../../projects/mckit/auth/src/lib/pages/auth-sakai/auth-sakai.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-sakai/auth-sakai.component.html","../../../../projects/mckit/auth/src/lib/pages/auth-sakai-only-social/auth-sakai-only-social.component.ts","../../../../projects/mckit/auth/src/lib/pages/auth-sakai-only-social/auth-sakai-only-social.component.html","../../../../projects/mckit/auth/src/public-api.ts","../../../../projects/mckit/auth/src/mckit-auth.ts"],"sourcesContent":["export class MCUser {\n static STATUS_INACTIVE = 0;\n static STATUS_ACTIVE = 1;\n static STATUS_SUSPENDED = 2;\n\n public id?: number|string;\n public firstname: string = '';\n public lastname: string = '';\n public email: string = '';\n public photo?: string = '';\n public role: number = 0;\n public status: number = 0;\n public created_at: string = '';\n public extra: any;\n\n public token_type: string = 'bearer';\n public access_token: string = '';\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const MC_AUTH_CONFIG = new InjectionToken<MCAuthConfig>('mc.auth');\n\nexport class MCAuthConfig {\n baseUrl: string = '';\n}\n","export class MCAuthModel {\n email?: string|null;\n password?: string|null;\n}\n","export class MCBaseAuthPageConfig {\n title?: string;\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\nimport { MC_AUTH_CONFIG, MCAuthConfig } from \"../entities/mc-auth-config\";\n\nexport function provideMCAuth(value: MCAuthConfig): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: MC_AUTH_CONFIG, useValue: value }]);\n}\n","import { Injectable, signal } from '@angular/core';\nimport { StorageMap } from '@ngx-pwa/local-storage';\nimport { MCUser } from '../entities/mc-user';\nimport { map, Observable, tap } from 'rxjs';\n\nexport const MC_AUTH_KEY_STORAGE_TOKEN = 'mc.auth.storage';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MCAuthenticationService {\n\n isLogged = signal<boolean>(false);\n\n constructor(\n private storage: StorageMap\n ) {\n this.initialize();\n }\n\n saveUser(user: MCUser): Observable<undefined> {\n return this.storage.set(MC_AUTH_KEY_STORAGE_TOKEN, JSON.stringify(user), { type: 'string' })\n .pipe(tap(res => this.isLogged.update(res => true)));\n }\n\n getUser(): Observable<MCUser|undefined> {\n return this.storage.get(MC_AUTH_KEY_STORAGE_TOKEN, { type: 'string' })\n .pipe(map(data => {\n if(data == undefined||data == ''){\n return;\n }\n return JSON.parse(data);\n }));\n }\n\n removeUser(): Observable<any> {\n return this.storage.delete(MC_AUTH_KEY_STORAGE_TOKEN);\n }\n\n initialize() {\n this.getUser()\n .subscribe(user => {\n if(user == undefined){\n return;\n }\n\n this.isLogged.update(res => true);\n });\n }\n}\n","import { HttpErrorResponse, HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { MC_AUTH_CONFIG } from '../entities/mc-auth-config';\nimport { MCAuthenticationService } from '../services/authentication.service';\nimport { catchError, switchMap, tap } from 'rxjs';\n\nexport const MC_AUTH_SKIP_INTERCEPTOR = 'skip-interceptor';\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n\n const config = inject(MC_AUTH_CONFIG);\n const authService = inject(MCAuthenticationService);\n\n if(req.url.indexOf(config.baseUrl) == -1){\n return next(req);\n }\n\n if (req.headers.has(MC_AUTH_SKIP_INTERCEPTOR)) {\n const clonedReq = req.clone({ headers: req.headers.delete(MC_AUTH_SKIP_INTERCEPTOR) });\n return next(clonedReq);\n }\n\n return authService.getUser()\n .pipe(\n\n switchMap(user => {\n\n if(user == undefined){\n return next(req);\n }\n\n return next(req.clone({\n headers: req.headers.set('Authorization', `Bearer ${user.access_token}`)\n }));\n\n }),\n tap(event => {\n\n if(event instanceof HttpResponse && event.status == 401){\n authService.removeUser().subscribe(() => {\n window.location.reload();\n });\n }\n\n }),\n catchError(err => {\n\n if(err instanceof HttpErrorResponse && err.status == 401){\n authService.removeUser().subscribe(() => {\n window.location.reload();\n });\n }\n\n throw err;\n }),\n\n\n );\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, RedirectCommand, Router } from '@angular/router';\nimport { MCAuthenticationService } from '../services/authentication.service';\nimport { map } from 'rxjs';\n\nexport const mcAuthGuard: CanActivateFn = (route, state) => {\n const router = inject(Router);\n const authService = inject(MCAuthenticationService);\n\n let paramRedirect = router.url;\n if (paramRedirect.includes('/login')) {\n paramRedirect = '';\n }\n\n return authService.getUser()\n .pipe(map(user => {\n if(user == undefined){\n const loginPath = router.parseUrl(\"/login\");\n loginPath.queryParams = {\n redirect: paramRedirect\n };\n return new RedirectCommand(loginPath, { skipLocationChange: true });\n }\n\n return true;\n }));\n};\n","import { ResolveFn } from '@angular/router';\nimport { MCAuthenticationService } from '../services/authentication.service';\nimport { inject } from '@angular/core';\nimport { MCUser } from '../entities/mc-user';\n\nexport const mcUserResolver: ResolveFn<MCUser|undefined> = (route, state) => {\n const authService = inject(MCAuthenticationService);\n\n return authService.getUser();\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MCUser } from '../entities/mc-user';\n\n@Pipe({\n name: 'initialName',\n standalone: true\n})\nexport class InitialNamePipe implements PipeTransform {\n\n transform(user: MCUser): string {\n // Get the first letter of the first name\n const firstLetter = user.firstname.charAt(0);\n // Verify if the last name is not empty\n if (user.lastname == undefined || user.lastname == '') {\n // Return the first letter\n return firstLetter;\n }\n // Get the first letter of the last name\n const lastLetter = user.lastname.charAt(0);\n // Return the initials\n return firstLetter + lastLetter;\n }\n\n}\n","import { afterNextRender, Component, inject, signal } from '@angular/core';\nimport { MCComponent, MCCoreComponent } from '@mckit/core';\nimport { MenuItem } from 'primeng/api';\nimport { MCAuthenticationService } from '../../services/authentication.service';\nimport { tap } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\nimport { AvatarModule } from 'primeng/avatar';\nimport { InitialNamePipe } from '../../pipes/initial-name.pipe';\nimport { MCUser } from '../../entities/mc-user';\n\n@Component({\n selector: 'mc-avatar-with-menu',\n imports: [CommonModule, ButtonModule, MenuModule, AvatarModule, InitialNamePipe],\n templateUrl: './avatar-with-menu.component.html',\n styleUrl: './avatar-with-menu.component.scss'\n})\nexport class AvatarWithMenuComponent extends MCCoreComponent {\n\n authService = inject(MCAuthenticationService);\n\n user = signal<MCUser|undefined>(undefined);\n items = signal<Array<MenuItem>>([]);\n\n constructor() {\n super();\n afterNextRender(() => {\n this.loadUser();\n });\n }\n\n loadMenu() {\n let items = this.component.config.items ?? [];\n if(items.length == 0){\n return;\n }\n\n items[0].label = `Hi ${this.user()?.firstname}`;\n this.items.set(items);\n }\n\n loadUser() {\n this.authService.getUser()\n .pipe(tap(user => this.user.set(user)))\n .subscribe(user => this.loadMenu());\n }\n}\n\nexport class MCAvatarWithMenu extends MCComponent {\n constructor(\n items: Array<MenuItem>\n ) {\n super(AvatarWithMenuComponent);\n\n this.config = {\n items: items\n };\n }\n}\n","<p-menu #menu [model]=\"items()\" [popup]=\"true\" />\n@if (user() != undefined) {\n @if (user()!.photo != undefined && user()!.photo != '') {\n <p-avatar [image]=\"user()!.photo\" styleClass=\"topbar-avatar\" [shape]=\"'circle'\" [size]=\"'large'\" (click)=\"menu.toggle($event)\" />\n } @else {\n <p-avatar label=\"{{ user()! | initialName }}\" styleClass=\"topbar-avatar\" [shape]=\"'circle'\" [size]=\"'large'\" (click)=\"menu.toggle($event)\" />\n }\n\n}\n","import { FormControl, FormGroup, Validators } from \"@angular/forms\";\nimport { MCAuthModel } from \"../entities/mc-auth-model\";\nimport { inject, signal } from \"@angular/core\";\nimport { MCMessage } from \"@mckit/core\";\n\nexport abstract class MCBaseAuthPage {\n group = new FormGroup({\n email: new FormControl<string>('', [Validators.required, Validators.email]),\n password: new FormControl<string>('', Validators.required)\n });\n\n isSending = signal(false);\n\n messages = signal<Array<MCMessage>>([]);\n\n abstract onSubmit(obj: MCAuthModel): void;\n\n onClickSubmit() {\n if(this.group.invalid){\n return;\n }\n\n if(this.isSending()){\n return;\n }\n\n this.clearMessages();\n\n let obj = new MCAuthModel();\n obj.email = this.group.get('email')?.value;\n obj.password = this.group.get('password')?.value;\n\n this.showLoading();\n this.onSubmit(obj);\n }\n\n showSuccessMessage(message: string) {\n this.messages.set([{ severity: 'success', text: message}]);\n }\n\n showErrorMessage(message: string) {\n this.messages.set([{ severity: 'error', text: message}]);\n }\n\n clearMessages() {\n this.messages.set([]);\n }\n\n showLoading() {\n this.isSending.set(true);\n }\n\n hideLoading() {\n this.isSending.set(false);\n }\n}\n","import { Component, EventEmitter, input, Input, output, Output } from '@angular/core';\nimport { CardModule } from 'primeng/card';\nimport { ButtonModule } from 'primeng/button';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PasswordModule } from 'primeng/password';\nimport { FormGroup, FormsModule, ReactiveFormsModule, FormControl, Validators } from '@angular/forms';\nimport { MessageModule } from 'primeng/message';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { MCBaseAuthPageConfig } from '../../entities/mc-base-auth-page-config';\nimport { RouterModule } from '@angular/router';\nimport { MCBaseAuthPage } from '../base-auth-page.component';\nimport { CommonModule } from '@angular/common';\n\n\n\n@Component({\n selector: 'mc-auth-basic',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, MessageModule, RouterModule],\n templateUrl: './auth-basic.component.html',\n styleUrl: './auth-basic.component.scss'\n})\nexport class MCAuthBasicComponent extends MCBaseAuthPage {\n config = input.required<MCAuthBasicConfig>();\n submit = output<MCAuthModel>();\n\n onSubmit(obj: MCAuthModel): void {\n this.submit.emit(obj);\n }\n}\n\nexport class MCAuthBasicConfig extends MCBaseAuthPageConfig {\n subtitle?: string;\n\n emailPlaceholder?: string;\n passwordPlaceholder?: string;\n\n submitButton?: string;\n\n resetPassword?: string;\n resetPasswordLink?: string;\n\n register?: string;\n registerLink?: string;\n}\n","<div class=\"background-container\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1600 800\" preserveAspectRatio=\"none\" class=\"fixed left-0 top-0 min-h-screen min-w-screen\"><rect width=\"1600\" height=\"800\" fill=\"var(--primary-500)\"></rect><path d=\"M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z\" fill=\"var(--primary-400)\"></path><path d=\"M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z\" fill=\"var(--primary-300)\"></path><path d=\"M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z\" fill=\"var(--primary-200)\"></path><path d=\"M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z\" fill=\"var(--primary-100)\"></path></svg>\n</div>\n<div class=\"mc-auth-basic-container\">\n <p-card [header]=\"config().title ?? 'Log in'\" [subheader]=\"config().subtitle ?? 'Please enter your details'\">\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <p-iconField iconPosition=\"left\" class=\"mb-3 w-full\">\n <p-inputIcon styleClass=\"pi pi-envelope\" />\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" (keyup.enter)=\"onClickSubmit()\" class=\"w-full\" />\n </p-iconField>\n\n <p-iconField iconPosition=\"left\" class=\"w-full\">\n <p-inputIcon styleClass=\"pi pi-lock\" />\n <p-password [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" [feedback]=\"false\" [toggleMask]=\"true\" formControlName=\"password\" name=\"password\" (keyup.enter)=\"onClickSubmit()\" inputStyleClass=\"w-full\" styleClass=\"w-full\" />\n </p-iconField>\n\n @if (config().resetPasswordLink != undefined) {\n <div class=\"more-actions\">\n <p-button [routerLink]=\"config().resetPasswordLink\" [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" />\n </div>\n }\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n </form>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"mt-1 w-full\">\n <p-button [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" styleClass=\"w-full\" />\n </div>\n\n @if (config().registerLink != undefined) {\n <div class=\"more-actions-footer mt-3\">\n <p-button [routerLink]=\"config().registerLink\" [label]=\"config().register ?? 'Don’t have an account? Register'\" [link]=\"true\" />\n </div>\n }\n </ng-template>\n </p-card>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MCBaseAuthPageConfig } from '../../entities/mc-base-auth-page-config';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'mc-auth-half',\n imports: [CommonModule],\n templateUrl: './auth-half.component.html',\n styleUrl: './auth-half.component.scss'\n})\nexport class MCAuthHalfComponent {\n @Input() config!: MCAuthHalfConfig;\n @Output() submit = new EventEmitter<MCAuthModel>();\n\n\n}\n\nexport class MCAuthHalfConfig extends MCBaseAuthPageConfig {\n image?: string;\n}\n","<div class=\"mc-auth-half-container\">\n <div class=\"column-left\">\n <div class=\"container-form\">\n <h1>{{ config.title }}</h1>\n </div>\n </div>\n\n <div class=\"column-right\">\n @if (config.image != undefined) {\n <img [src]=\"config.image\" />\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PasswordModule } from 'primeng/password';\nimport { MCBaseAuthPageConfig } from '../../entities/mc-base-auth-page-config';\nimport { MCBaseAuthPage } from '../base-auth-page.component';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'mc-auth-sakai',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, CheckboxModule, MessageModule],\n templateUrl: './auth-sakai.component.html',\n styleUrl: './auth-sakai.component.scss'\n})\nexport class MCAuthSakaiComponent extends MCBaseAuthPage {\n config = input.required<MCAuthSakaiConfig>();\n submit = output<MCAuthModel>();\n action = output<string>();\n\n onSubmit(obj: MCAuthModel): void {\n this.submit.emit(obj);\n }\n\n onAction(type: string) {\n this.action.emit(type);\n }\n}\n\nexport class MCAuthSakaiConfig extends MCBaseAuthPageConfig {\n logo?: string;\n\n subtitle?: string;\n\n emailPlaceholder?: string;\n passwordPlaceholder?: string;\n\n submitButton?: string;\n\n resetPassword?: string;\n resetPasswordLink?: string;\n\n register?: string;\n registerLink?: string;\n}\n","<div class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\">\n }\n <div class=\"container-degradee\" style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\n <div class=\"container-content\" class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius:53px\">\n <div class=\"text-center mb-8\">\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">{{config().subtitle}}</div>\n <h1 class=\"text-muted-color font-medium\">{{config().title}}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n <label for=\"email\" class=\"block text-surface-900 dark:text-surface-0 text-xl font-medium mb-2\">Email</label>\n <input type=\"text\" pInputText [placeholder]=\"config().emailPlaceholder ?? 'Email'\" formControlName=\"email\" name=\"email\" class=\"w-full md:w-[30rem] mb-8\" />\n\n <div class=\"container-password-label flex justify-between justify-content-between align-items-end items-end\">\n <label for=\"password1\" class=\"block text-surface-900 dark:text-surface-0 font-medium text-xl mb-2\">Password</label>\n @if (config().resetPassword != undefined) {\n <div class=\"more-actions\">\n <p-button [label]=\"config().resetPassword ?? 'Reset Password'\" [link]=\"true\" (onClick)=\"onAction('forgot-password')\" styleClass=\"button-forgot-password\" />\n </div>\n }\n </div>\n\n <p-password id=\"password1\" formControlName=\"password\" name=\"password\" placeholder=\"Password\" [toggleMask]=\"true\" styleClass=\"mb-5 w-full\" inputStyleClass=\"w-full p-3 md:w-30rem\" [placeholder]=\"config().passwordPlaceholder ?? 'Password'\" (keyup.enter)=\"onClickSubmit()\" [feedback]=\"false\"></p-password>\n\n <!--<div class=\"flex align-items-center items-center justify-between mb-5 gap-5\">\n <div class=\"flex align-items-center items-center\">\n <p-checkbox id=\"rememberme1\" [binary]=\"true\" styleClass=\"mr-2\"></p-checkbox>\n <label for=\"rememberme1\">Remember me</label>\n </div>\n <a class=\"font-medium no-underline ml-2 text-right cursor-pointer\" style=\"color: var(--primary-color)\">Forgot password?</a>\n </div>-->\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <p-button pRipple [label]=\"config().submitButton ?? 'Log in'\" [loading]=\"isSending()\" size=\"large\" [style]=\"{ width: '100%' }\" (click)=\"onClickSubmit()\" [disabled]=\"group.invalid || isSending()\" />\n\n </div>\n </form>\n </div>\n </div>\n\n <ng-content></ng-content>\n\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PasswordModule } from 'primeng/password';\nimport { MCBaseAuthPage } from '../base-auth-page.component';\nimport { MCAuthModel } from '../../entities/mc-auth-model';\nimport { MessageModule } from 'primeng/message';\nimport { MCAuthSakaiConfig } from '../auth-sakai/auth-sakai.component';\n\n@Component({\n selector: 'mc-auth-sakai-social',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, CheckboxModule, MessageModule],\n\n templateUrl: './auth-sakai-only-social.component.html',\n styleUrl: './auth-sakai-only-social.component.scss'\n})\nexport class MCAuthSakaiSocialComponent extends MCBaseAuthPage {\n config = input.required<MCAuthSakaiConfig>();\n submit = output<MCAuthModel>();\n action = output<string>();\n\n onSubmit(obj: MCAuthModel): void {\n this.submit.emit(obj);\n }\n\n onAction(type: string) {\n this.action.emit(type);\n }\n}\n","<div\n class=\"surface-ground flex align-items-center items-center justify-content-center justify-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-col flex-column align-items-center items-center justify-content-center justify-center\">\n @if (config().logo != undefined) {\n <img [src]=\"config().logo\" class=\"mb-5 w-6rem flex-shrink-0\" alt=\"logo\">\n }\n\n <ng-content select=\"[pageheader]\"></ng-content>\n <div class=\"container-degradee\"\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"container-content w-full surface-card py-8 px-5 sm:px-8\" style=\"border-radius:53px\">\n <div class=\"text-center mb-5\">\n <div class=\"text-900 text-sm font-medium mb-3 uppercase tracking-widest\">{{ config().subtitle }}</div>\n <h1 class=\"text-600 font-black text-2xl\">{{ config().title }}</h1>\n </div>\n\n <form class=\"\" [formGroup]=\"group\" (ngSubmit)=\"onClickSubmit()\">\n <div>\n\n @for (message of messages(); track message; let first = $first) {\n <p-message [severity]=\"message.severity\" [text]=\"message.text\" [ngClass]=\"{ 'mt-4': !first }\" />\n }\n\n <ng-content></ng-content>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n","/*\n * Public API Surface of auth\n */\n\n/**\n * Entities\n */\nexport * from './lib/entities/mc-user';\nexport * from './lib/entities/mc-auth-config';\nexport * from './lib/entities/mc-auth-model';\nexport * from './lib/entities/mc-base-auth-page-config';\n\n/**\n * Providers\n */\nexport * from './lib/providers/auth.provider';\n\n/**\n * Services\n */\nexport * from './lib/services/authentication.service';\n\n/**\n * Interceptors\n */\nexport * from './lib/interceptors/auth.interceptor';\n\n/**\n * Guards\n */\nexport * from './lib/guards/auth.guard';\n\n/**\n * Resolvers\n */\nexport * from './lib/resolvers/user.resolver';\n\n/**\n * Pipes\n */\nexport * from './lib/pipes/initial-name.pipe';\n\n/**\n * Components\n */\nexport * from './lib/components/avatar-with-menu/avatar-with-menu.component';\n\n/**\n * Pages\n */\nexport * from './lib/pages/base-auth-page.component';\nexport * from './lib/pages/auth-basic/auth-basic.component';\nexport * from './lib/pages/auth-half/auth-half.component';\nexport * from './lib/pages/auth-sakai/auth-sakai.component';\nexport * from './lib/pages/auth-sakai-only-social/auth-sakai-only-social.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i5","i6","i3"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MCComponent, MCCoreComponent } from '@mckit/core';
|
|
2
|
+
import { MenuItem } from 'primeng/api';
|
|
3
|
+
import { MCAuthenticationService } from '../../services/authentication.service';
|
|
4
|
+
import { MCUser } from '../../entities/mc-user';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class AvatarWithMenuComponent extends MCCoreComponent {
|
|
7
|
+
authService: MCAuthenticationService;
|
|
8
|
+
user: import("@angular/core").WritableSignal<MCUser | undefined>;
|
|
9
|
+
items: import("@angular/core").WritableSignal<MenuItem[]>;
|
|
10
|
+
constructor();
|
|
11
|
+
loadMenu(): void;
|
|
12
|
+
loadUser(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AvatarWithMenuComponent, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AvatarWithMenuComponent, "mc-avatar-with-menu", never, {}, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
16
|
+
export declare class MCAvatarWithMenu extends MCComponent {
|
|
17
|
+
constructor(items: Array<MenuItem>);
|
|
18
|
+
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED