@mckit/auth 19.0.2 → 19.0.4

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.
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, signal, Injectable, inject, Pipe, afterNextRender, Component, input, output, EventEmitter, Input, Output } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, inject, signal, Injectable, Pipe, afterNextRender, Component, input, output, EventEmitter, Output, Input } from '@angular/core';
3
3
  import { tap, map, switchMap, catchError } from 'rxjs';
4
+ import { HttpClient, HttpResponse, HttpErrorResponse } from '@angular/common/http';
4
5
  import * as i1 from '@ngx-pwa/local-storage';
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
8
  import { MCCoreComponent, MCComponent } from '@mckit/core';
@@ -69,6 +69,8 @@ function provideMCAuth(value) {
69
69
  const MC_AUTH_KEY_STORAGE_TOKEN = 'mc.auth.storage';
70
70
  class MCAuthenticationService {
71
71
  storage;
72
+ http = inject(HttpClient);
73
+ config = inject(MC_AUTH_CONFIG);
72
74
  isLogged = signal(false);
73
75
  constructor(storage) {
74
76
  this.storage = storage;
@@ -99,10 +101,18 @@ class MCAuthenticationService {
99
101
  this.isLogged.update(res => true);
100
102
  });
101
103
  }
102
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthenticationService, deps: [{ token: i1.StorageMap }], target: i0.ɵɵFactoryTarget.Injectable });
103
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthenticationService, providedIn: 'root' });
104
+ signIn(data) {
105
+ return this.http.post(`${this.config.baseUrl}oauth/token`, data)
106
+ .pipe(switchMap(user => this.saveUser(user).pipe(map(res => user))));
107
+ }
108
+ register(data) {
109
+ return this.http.post(`${this.config.baseUrl}users`, data)
110
+ .pipe(switchMap(() => this.signIn(data)), switchMap(user => this.saveUser(user).pipe(map(res => user))));
111
+ }
112
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthenticationService, deps: [{ token: i1.StorageMap }], target: i0.ɵɵFactoryTarget.Injectable });
113
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthenticationService, providedIn: 'root' });
104
114
  }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthenticationService, decorators: [{
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthenticationService, decorators: [{
106
116
  type: Injectable,
107
117
  args: [{
108
118
  providedIn: 'root'
@@ -183,10 +193,10 @@ class InitialNamePipe {
183
193
  // Return the initials
184
194
  return firstLetter + lastLetter;
185
195
  }
186
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: InitialNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
187
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.4", ngImport: i0, type: InitialNamePipe, isStandalone: true, name: "initialName" });
196
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: InitialNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
197
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.13", ngImport: i0, type: InitialNamePipe, isStandalone: true, name: "initialName" });
188
198
  }
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: InitialNamePipe, decorators: [{
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: InitialNamePipe, decorators: [{
190
200
  type: Pipe,
191
201
  args: [{
192
202
  name: 'initialName',
@@ -200,13 +210,12 @@ class AvatarWithMenuComponent extends MCCoreComponent {
200
210
  items = signal([]);
201
211
  constructor() {
202
212
  super();
203
- this.items.set(this.component.config.items ?? []);
204
213
  afterNextRender(() => {
205
214
  this.loadUser();
206
215
  });
207
216
  }
208
217
  loadMenu() {
209
- let items = this.items();
218
+ let items = this.component.config.items ?? [];
210
219
  if (items.length == 0) {
211
220
  return;
212
221
  }
@@ -218,10 +227,10 @@ class AvatarWithMenuComponent extends MCCoreComponent {
218
227
  .pipe(tap(user => this.user.set(user)))
219
228
  .subscribe(user => this.loadMenu());
220
229
  }
221
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: AvatarWithMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
222
- 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" }] });
230
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AvatarWithMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
231
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", 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" }] });
223
232
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: AvatarWithMenuComponent, decorators: [{
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AvatarWithMenuComponent, decorators: [{
225
234
  type: Component,
226
235
  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"] }]
227
236
  }], ctorParameters: () => [] });
@@ -278,10 +287,10 @@ class MCAuthBasicComponent extends MCBaseAuthPage {
278
287
  onSubmit(obj) {
279
288
  this.submit.emit(obj);
280
289
  }
281
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthBasicComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
282
- 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"] }] });
290
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthBasicComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", 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", "tabindex"], 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"] }] });
283
292
  }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthBasicComponent, decorators: [{
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthBasicComponent, decorators: [{
285
294
  type: Component,
286
295
  args: [{ selector: 'mc-auth-basic', imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, MessageModule, RouterModule], 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"] }]
287
296
  }] });
@@ -299,10 +308,10 @@ class MCAuthBasicConfig extends MCBaseAuthPageConfig {
299
308
  class MCAuthHalfComponent {
300
309
  config;
301
310
  submit = new EventEmitter();
302
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthHalfComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
303
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: MCAuthHalfComponent, isStandalone: true, selector: "mc-auth-half", inputs: { config: "config" }, outputs: { submit: "submit" }, ngImport: i0, template: "<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", styles: [".mc-auth-half-container{display:flex;width:100%;min-height:100vh}.mc-auth-half-container .column-left,.mc-auth-half-container .column-right{display:flex;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center}.mc-auth-half-container .column-right{position:relative}.mc-auth-half-container .column-right img{width:100%;height:100vh;object-fit:cover}.mc-auth-half-container .container-form{background-color:red;max-width:560px;width:100%;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
311
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthHalfComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
312
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: MCAuthHalfComponent, isStandalone: true, selector: "mc-auth-half", inputs: { config: "config" }, outputs: { submit: "submit" }, ngImport: i0, template: "<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", styles: [".mc-auth-half-container{display:flex;width:100%;min-height:100vh}.mc-auth-half-container .column-left,.mc-auth-half-container .column-right{display:flex;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center}.mc-auth-half-container .column-right{position:relative}.mc-auth-half-container .column-right img{width:100%;height:100vh;object-fit:cover}.mc-auth-half-container .container-form{background-color:red;max-width:560px;width:100%;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
304
313
  }
305
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthHalfComponent, decorators: [{
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthHalfComponent, decorators: [{
306
315
  type: Component,
307
316
  args: [{ selector: 'mc-auth-half', imports: [CommonModule], template: "<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", styles: [".mc-auth-half-container{display:flex;width:100%;min-height:100vh}.mc-auth-half-container .column-left,.mc-auth-half-container .column-right{display:flex;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center}.mc-auth-half-container .column-right{position:relative}.mc-auth-half-container .column-right img{width:100%;height:100vh;object-fit:cover}.mc-auth-half-container .container-form{background-color:red;max-width:560px;width:100%;text-align:center}\n"] }]
308
317
  }], propDecorators: { config: [{
@@ -324,10 +333,10 @@ class MCAuthSakaiComponent extends MCBaseAuthPage {
324
333
  onAction(type) {
325
334
  this.action.emit(type);
326
335
  }
327
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
328
- 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"] }] });
336
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthSakaiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
337
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", 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", "tabindex"], 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"] }] });
329
338
  }
330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiComponent, decorators: [{
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthSakaiComponent, decorators: [{
331
340
  type: Component,
332
341
  args: [{ selector: 'mc-auth-sakai', imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, CheckboxModule, MessageModule], 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" }]
333
342
  }] });
@@ -353,10 +362,10 @@ class MCAuthSakaiSocialComponent extends MCBaseAuthPage {
353
362
  onAction(type) {
354
363
  this.action.emit(type);
355
364
  }
356
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiSocialComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
357
- 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"] }] });
365
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthSakaiSocialComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
366
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", 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"] }] });
358
367
  }
359
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: MCAuthSakaiSocialComponent, decorators: [{
368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MCAuthSakaiSocialComponent, decorators: [{
360
369
  type: Component,
361
370
  args: [{ selector: 'mc-auth-sakai-social', imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, CardModule, IconFieldModule, InputIconModule, InputTextModule, PasswordModule, CheckboxModule, MessageModule], 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"] }]
362
371
  }] });
@@ -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/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 this.items.set(this.component.config.items ?? []);\n afterNextRender(() => {\n this.loadUser();\n });\n }\n\n loadMenu() {\n let items = this.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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"}
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 { inject, Injectable, signal } from '@angular/core';\nimport { StorageMap } from '@ngx-pwa/local-storage';\nimport { MCUser } from '../entities/mc-user';\nimport { map, Observable, switchMap, tap } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { MC_AUTH_CONFIG } from '../entities/mc-auth-config';\n\nexport const MC_AUTH_KEY_STORAGE_TOKEN = 'mc.auth.storage';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MCAuthenticationService {\n\n http = inject(HttpClient);\n\n config = inject(MC_AUTH_CONFIG);\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 signIn(data: any): Observable<MCUser> {\n return this.http.post<MCUser>(`${this.config.baseUrl}oauth/token`, data)\n .pipe(\n switchMap(user => this.saveUser(user).pipe(map(res => user)))\n );\n }\n\n register(data: any): Observable<MCUser> {\n return this.http.post<MCUser>(`${this.config.baseUrl}users`, data)\n .pipe(\n switchMap(() => this.signIn(data)),\n switchMap(user => this.saveUser(user).pipe(map(res => user)))\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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"}
@@ -1,16 +1,21 @@
1
1
  import { StorageMap } from '@ngx-pwa/local-storage';
2
2
  import { MCUser } from '../entities/mc-user';
3
3
  import { Observable } from 'rxjs';
4
+ import { HttpClient } from '@angular/common/http';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare const MC_AUTH_KEY_STORAGE_TOKEN = "mc.auth.storage";
6
7
  export declare class MCAuthenticationService {
7
8
  private storage;
9
+ http: HttpClient;
10
+ config: import("../entities/mc-auth-config").MCAuthConfig;
8
11
  isLogged: import("@angular/core").WritableSignal<boolean>;
9
12
  constructor(storage: StorageMap);
10
13
  saveUser(user: MCUser): Observable<undefined>;
11
14
  getUser(): Observable<MCUser | undefined>;
12
15
  removeUser(): Observable<any>;
13
16
  initialize(): void;
17
+ signIn(data: any): Observable<MCUser>;
18
+ register(data: any): Observable<MCUser>;
14
19
  static ɵfac: i0.ɵɵFactoryDeclaration<MCAuthenticationService, never>;
15
20
  static ɵprov: i0.ɵɵInjectableDeclaration<MCAuthenticationService>;
16
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mckit/auth",
3
- "version": "19.0.2",
3
+ "version": "19.0.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.0.0",
6
6
  "@angular/core": "^19.0.0",
@@ -9,7 +9,7 @@
9
9
  "@ngx-pwa/local-storage": "^19.0.0"
10
10
  },
11
11
  "dependencies": {
12
- "tslib": "^2.3.0"
12
+ "tslib": "^2.6.2"
13
13
  },
14
14
  "sideEffects": false,
15
15
  "module": "fesm2022/mckit-auth.mjs",