@arsedizioni/ars-utils 22.0.69 → 22.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +24 -24
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +49 -49
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +111 -96
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +76 -59
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +97 -97
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1 -1
- package/types/arsedizioni-ars-utils-core.d.ts +10 -0
- package/types/arsedizioni-ars-utils-ui.application.d.ts +9 -3
- package/types/arsedizioni-ars-utils-ui.d.ts +1 -1
|
@@ -201,8 +201,8 @@ class LoginOAuthComponent {
|
|
|
201
201
|
}
|
|
202
202
|
this.googleButtonWrapper.click();
|
|
203
203
|
}
|
|
204
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
205
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
204
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LoginOAuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: LoginOAuthComponent, isStandalone: true, selector: "login-oauth", inputs: { showInfo: { classPropertyName: "showInfo", publicName: "showInfo", isSignal: true, isRequired: false, transformFunction: null }, applicationName: { classPropertyName: "applicationName", publicName: "applicationName", isSignal: true, isRequired: false, transformFunction: null }, autoInitialize: { classPropertyName: "autoInitialize", publicName: "autoInitialize", isSignal: true, isRequired: false, transformFunction: null }, allowMicrosoft: { classPropertyName: "allowMicrosoft", publicName: "allowMicrosoft", isSignal: true, isRequired: false, transformFunction: null }, allowGoogle: { classPropertyName: "allowGoogle", publicName: "allowGoogle", isSignal: true, isRequired: false, transformFunction: null }, googleClientId: { classPropertyName: "googleClientId", publicName: "googleClientId", isSignal: true, isRequired: false, transformFunction: null }, msalScope: { classPropertyName: "msalScope", publicName: "msalScope", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { success: "success" }, providers: [
|
|
206
206
|
{
|
|
207
207
|
provide: MSAL_INSTANCE,
|
|
208
208
|
deps: [EnvironmentService],
|
|
@@ -221,7 +221,7 @@ class LoginOAuthComponent {
|
|
|
221
221
|
MsalBroadcastService
|
|
222
222
|
], ngImport: i0, template: "<div class=\"login-oauth\">\r\n @if(showInfo()) {\r\n <div class=\"message\">\r\n <p>Questa sezione consente di accedere al servizio utilizzando un provider OAuth2.</p>\r\n @if(applicationName()) {\r\n <p>La email utilizzata deve essere collegata ad un utente valido di {{applicationName()}} e dei servizi ad esso\r\n connessi.</p>\r\n }\r\n </div>\r\n }\r\n @if (allowMicrosoft()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginMSAL()\" aria-label=\"Effettua accesso\"\r\n [disabled]=\"!oauthMicrosoftReady()\" style=\"width: 100%;\">\r\n Accedi con Microsoft</button>\r\n </div>\r\n }\r\n @if (allowGoogle()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginGoogle()\" style=\"width: 100%;\"\r\n aria-label=\"Effettua accesso\" [disabled]=\"!oauthGoogleReady()\">\r\n Accedi con Google</button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".login-oauth{text-align:center}.login-oauth .button{padding:10px 0;width:100%}.login-oauth .message{padding:0 0 10px!important;font-size:small}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
223
223
|
}
|
|
224
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LoginOAuthComponent, decorators: [{
|
|
225
225
|
type: Component,
|
|
226
226
|
args: [{ selector: 'login-oauth', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
227
227
|
{
|
|
@@ -274,12 +274,12 @@ class LoginOAuthOkMSComponent {
|
|
|
274
274
|
console.error('Errore durante la comunicazione della risposta di autenticazione:', error);
|
|
275
275
|
});
|
|
276
276
|
}
|
|
277
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
278
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
277
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LoginOAuthOkMSComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
278
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: LoginOAuthOkMSComponent, isStandalone: true, selector: "app-login-oauth-ok-ms", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"login-auto fade-in\">\r\n <div class=\"message\">\r\n Autenticazione in corso...\r\n </div>\r\n <mat-progress-bar mode=\"indeterminate\" ></mat-progress-bar>\r\n </div>\r\n</div>\r\n", styles: [".login-auto{padding:20px 0}.login-auto .message{font-size:large;font-weight:700;color:var(--ars-color-primary);max-width:300px;text-align:center;width:100%;padding:40px 0}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1$1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1$1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1$1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
279
279
|
}
|
|
280
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
280
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LoginOAuthOkMSComponent, decorators: [{
|
|
281
281
|
type: Component,
|
|
282
|
-
args: [{ selector: 'app-login-oauth-ok-ms', changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexLayoutModule, MatProgressBarModule], template: "<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"login-auto fade-in\">\r\n <div class=\"message\">\r\n Autenticazione in corso...\r\n </div>\r\n <mat-progress-bar mode=\"indeterminate\"
|
|
282
|
+
args: [{ selector: 'app-login-oauth-ok-ms', changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexLayoutModule, MatProgressBarModule], template: "<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"login-auto fade-in\">\r\n <div class=\"message\">\r\n Autenticazione in corso...\r\n </div>\r\n <mat-progress-bar mode=\"indeterminate\" ></mat-progress-bar>\r\n </div>\r\n</div>\r\n", styles: [".login-auto{padding:20px 0}.login-auto .message{font-size:large;font-weight:700;color:var(--ars-color-primary);max-width:300px;text-align:center;width:100%;padding:40px 0}\n"] }]
|
|
283
283
|
}], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }] } });
|
|
284
284
|
|
|
285
285
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.oauth.mjs","sources":["../../../projects/ars-utils/ui.oauth/ui/definitions.ts","../../../projects/ars-utils/ui.oauth/ui/components/login/login-oauth.component.ts","../../../projects/ars-utils/ui.oauth/ui/components/login/login-oauth.component.html","../../../projects/ars-utils/ui.oauth/ui/components/login-ok/ms/login-oauth-ok-ms.component.ts","../../../projects/ars-utils/ui.oauth/ui/components/login-ok/ms/login-oauth-ok-ms.component.html","../../../projects/ars-utils/ui.oauth/public_api.ts","../../../projects/ars-utils/ui.oauth/arsedizioni-ars-utils-ui.oauth.ts"],"sourcesContent":["export enum LoginOAuthType {\r\n None = 0,\r\n Microsoft = 1,\r\n Google = 2\r\n}\r\n\r\nexport interface LoginOAuthResult {\r\n type: LoginOAuthType,\r\n token: string\r\n}","import { ChangeDetectionStrategy, Component, DestroyRef, NgZone, afterNextRender, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { EnvironmentService } from '@arsedizioni/ars-utils/core';\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\nimport { MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalBroadcastService, MsalGuardConfiguration, MsalInterceptorConfiguration, MsalService } from '@azure/msal-angular';\nimport { AuthenticationResult, BrowserCacheLocation, EventMessage, EventType, IPublicClientApplication, InteractionType, PublicClientApplication } from '@azure/msal-browser';\nimport { filter } from 'rxjs';\nimport { LoginOAuthResult, LoginOAuthType } from '../../definitions';\n\n/** Default Azure app registration — overridable via EnvironmentService. */\nconst DEFAULT_MS_CLIENT_ID = '6b2c080f-6ab0-4511-a9df-0bce69db5833';\nconst MS_AUTH_SCOPE = `api://${DEFAULT_MS_CLIENT_ID}/AngularSPAAuthScope`;\n\nexport function MSALInstanceFactory(environment: EnvironmentService): IPublicClientApplication {\n return new PublicClientApplication({\n auth: {\n clientId: (environment as any).msalClientId ?? DEFAULT_MS_CLIENT_ID,\n authority: (environment as any).msalAuthority ?? 'https://login.microsoftonline.com/common',\n redirectUri: environment.appLoginRedirectUri,\n },\n cache: {\n cacheLocation: BrowserCacheLocation.LocalStorage\n }\n });\n}\n\nexport function MSALInterceptorConfigFactory(environment: EnvironmentService): MsalInterceptorConfiguration {\n\n return {\n interactionType: InteractionType.Popup,\n protectedResourceMap: new Map([\n [environment.appServiceLoginUri, [MS_AUTH_SCOPE]],\n [\"https://graph.microsoft.com/v2.0/me\", [\"user.read\"]],\n ])\n };\n}\n\nexport function MSALGuardConfigFactory(): MsalGuardConfiguration {\n return {\n interactionType: InteractionType.Popup,\n authRequest: {\n scopes: [\"user.read\"]\n }\n };\n}\n\n@Component({\n selector: 'login-oauth',\n templateUrl: './login-oauth.component.html',\n styleUrls: ['./login-oauth.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: MSAL_INSTANCE,\n deps: [EnvironmentService],\n useFactory: MSALInstanceFactory\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALGuardConfigFactory\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n deps: [EnvironmentService],\n useFactory: MSALInterceptorConfigFactory\n },\n MsalService,\n MsalBroadcastService],\n imports: [\n MatButtonModule\n ]\n})\nexport class LoginOAuthComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly msalBroadcastService = inject(MsalBroadcastService);\n private readonly msaLService = inject(MsalService);\n private readonly dialogService = inject(DialogService);\n private readonly ngZone = inject(NgZone);\n /** Emitted when OAuth authentication succeeds. */\n readonly success = output<LoginOAuthResult>();\n /** Whether to show the introductory info panel. */\n readonly showInfo = input<boolean>(true);\n /** Application name displayed in the info panel. */\n readonly applicationName = input<string>();\n /** Whether to trigger `initialize()` automatically on mount. */\n readonly autoInitialize = input<boolean>(false);\n /** Whether the Microsoft login button is shown. */\n readonly allowMicrosoft = input<boolean>(true);\n /** Whether the Google login button is shown. */\n readonly allowGoogle = input<boolean>(true);\n /** Google OAuth client id. Override per deployment. */\n readonly googleClientId = input<string>('71204983077-ag31h3bgt2udcbfr9nn84r9rni2k3snp.apps.googleusercontent.com');\n /** MSAL access-token scope requested after login. */\n readonly msalScope = input<string>(MS_AUTH_SCOPE);\n protected readonly oauthReady = signal<boolean>(false);\n protected readonly oauthMicrosoftReady = signal<boolean>(false);\n protected readonly oauthGoogleReady = signal<boolean>(false);\n /** Hidden GSI button proxy, created once the Google library is ready. */\n private googleButtonWrapper?: { click: () => void };\n\n constructor() {\n\n this.msalBroadcastService.msalSubject$\n .pipe(\n filter((msg: EventMessage) =>\n msg.eventType === EventType.LOGOUT_FAILURE ||\n msg.eventType === EventType.ACQUIRE_TOKEN_FAILURE),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((r: EventMessage) => {\n if (r?.payload) {\n const error = r.payload as any;\n this.dialogService.error(error?.message ?? 'Errore di autenticazione Microsoft');\n }\n });\n\n afterNextRender(() => {\n if (this.autoInitialize()) {\n this.initialize();\n }\n });\n\n }\n\n /**\n * Initialize OAuth providers (Microsoft MSAL and Google GSI).\n * Safe to call multiple times — already-initialized providers are skipped.\n * Must be public so the host component can trigger it manually when `autoInitialize` is false.\n */\n initialize() {\n this.oauthReady.set(true);\n\n // Initialize the Microsoft stack only when allowed and not already done.\n if (this.allowMicrosoft() && !this.oauthMicrosoftReady()) {\n this.msaLService.initialize()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => this.oauthMicrosoftReady.set(true),\n error: (error: any) =>\n this.dialogService.error(error?.message ?? 'Errore di inizializzazione Microsoft'),\n });\n }\n\n // Load the Google GSI script only when allowed and not already done.\n if (this.allowGoogle() && !this.oauthGoogleReady()) {\n // @ts-ignore — define the callback BEFORE the script loads so GSI can find it\n window.onGoogleLibraryLoad = () => {\n // @ts-ignore\n google.accounts.id.initialize({\n client_id: this.googleClientId(),\n cancel_on_tap_outside: true,\n auto_select: false,\n callback: (r: any) => {\n this.ngZone.run(() => {\n this.success.emit({ type: LoginOAuthType.Google, token: r.credential });\n });\n }\n });\n\n this.googleButtonWrapper = createFakeGoogleWrapper();\n this.ngZone.run(() => this.oauthGoogleReady.set(true));\n };\n\n // Reuse the script tag if a previous instance already added it.\n const existing = document.querySelector<HTMLScriptElement>('script[data-gsi=\"ars\"]');\n if (existing) {\n // @ts-ignore — library already present: run the callback directly\n if (window.google?.accounts?.id) window.onGoogleLibraryLoad();\n } else {\n const script = document.createElement('script');\n script.src = 'https://accounts.google.com/gsi/client';\n script.async = true;\n script.defer = true;\n script.dataset['gsi'] = 'ars';\n script.onerror = () => this.ngZone.run(() =>\n this.dialogService.error('Impossibile caricare il servizio di accesso Google.'));\n // Append and LEAVE it in the DOM so the browser actually fetches it.\n document.body.appendChild(script);\n }\n }\n }\n\n /**\n * Trigger a Microsoft (MSAL) login popup and acquire an access token on success.\n */\n protected loginMSAL() {\n // Clear any in-progress interaction flag that may have been left by a previous incomplete popup\n sessionStorage.removeItem('msal.interaction.status');\n\n this.msaLService.loginPopup()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (r: AuthenticationResult) => {\n try {\n this.msaLService.instance.setActiveAccount(r.account);\n this.msaLService.acquireTokenSilent({\n scopes: [this.msalScope()],\n account: r.account\n }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: (tokenResult: AuthenticationResult) => {\n this.success.emit({ type: LoginOAuthType.Microsoft, token: tokenResult.accessToken });\n },\n error: (error: any) => {\n this.dialogService.error(error.message);\n }\n });\n } catch (error: any) {\n this.dialogService.error(error.message);\n }\n },\n error: (error: any) => {\n this.dialogService.error(error.message);\n }\n });\n }\n\n /**\n * Trigger the hidden Google GSI button to open the Google sign-in flow.\n */\n protected loginGoogle() {\n // Use the wrapper click to avoid an \"Illegal invocation\" exception.\n // Guard: the button only exists once the GSI library has loaded.\n if (!this.googleButtonWrapper) {\n this.dialogService.error('Il servizio di accesso Google non è ancora pronto.');\n return;\n }\n this.googleButtonWrapper.click();\n }\n}\n\nconst createFakeGoogleWrapper = (): { click: () => void } => {\n const googleLoginWrapper = document.createElement(\"div\");\n googleLoginWrapper.style.display = \"none\";\n googleLoginWrapper.classList.add(\"custom-google-button\");\n document.body.appendChild(googleLoginWrapper);\n\n // Render the (invisible) GSI button inside our wrapper.\n // @ts-ignore\n window.google.accounts.id.renderButton(googleLoginWrapper, {\n type: \"icon\",\n width: \"200\",\n });\n\n const googleLoginWrapperButton =\n googleLoginWrapper.querySelector<HTMLElement>(\"div[role=button]\");\n\n return {\n click: () => googleLoginWrapperButton?.click(),\n };\n};\n\n","<div class=\"login-oauth\">\r\n @if(showInfo()) {\r\n <div class=\"message\">\r\n <p>Questa sezione consente di accedere al servizio utilizzando un provider OAuth2.</p>\r\n @if(applicationName()) {\r\n <p>La email utilizzata deve essere collegata ad un utente valido di {{applicationName()}} e dei servizi ad esso\r\n connessi.</p>\r\n }\r\n </div>\r\n }\r\n @if (allowMicrosoft()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginMSAL()\" aria-label=\"Effettua accesso\"\r\n [disabled]=\"!oauthMicrosoftReady()\" style=\"width: 100%;\">\r\n Accedi con Microsoft</button>\r\n </div>\r\n }\r\n @if (allowGoogle()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginGoogle()\" style=\"width: 100%;\"\r\n aria-label=\"Effettua accesso\" [disabled]=\"!oauthGoogleReady()\">\r\n Accedi con Google</button>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { broadcastResponseToMainFrame } from '@azure/msal-browser/redirect-bridge';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n\n@Component({\n selector: 'app-login-oauth-ok-ms',\n styleUrls: ['./login-oauth-ok-ms.component.scss'],\n templateUrl: './login-oauth-ok-ms.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatProgressBarModule]\n})\nexport class LoginOAuthOkMSComponent {\n\n /** Message displayed while the popup is completing authentication. */\n readonly message = input<string>('Accesso in corso...');\n\n constructor() {\n // MSAL v5 popup flow: parse the auth response from the URL and send\n // it back to the opener window via BroadcastChannel, then close the popup.\n // The promise can reject (e.g. COOP misconfiguration); log instead of\n // leaving an unhandled rejection that silently strands the popup.\n broadcastResponseToMainFrame().catch((error: unknown) => {\n console.error('Errore durante la comunicazione della risposta di autenticazione:', error);\n });\n }\n}\n","<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"login-auto fade-in\">\r\n <div class=\"message\">\r\n Autenticazione in corso...\r\n </div>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of scm-utils\r\n */\r\nexport * from './ui/definitions';\r\nexport * from './ui/components/index';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.oauth.mjs","sources":["../../../projects/ars-utils/ui.oauth/ui/definitions.ts","../../../projects/ars-utils/ui.oauth/ui/components/login/login-oauth.component.ts","../../../projects/ars-utils/ui.oauth/ui/components/login/login-oauth.component.html","../../../projects/ars-utils/ui.oauth/ui/components/login-ok/ms/login-oauth-ok-ms.component.ts","../../../projects/ars-utils/ui.oauth/ui/components/login-ok/ms/login-oauth-ok-ms.component.html","../../../projects/ars-utils/ui.oauth/public_api.ts","../../../projects/ars-utils/ui.oauth/arsedizioni-ars-utils-ui.oauth.ts"],"sourcesContent":["export enum LoginOAuthType {\r\n None = 0,\r\n Microsoft = 1,\r\n Google = 2\r\n}\r\n\r\nexport interface LoginOAuthResult {\r\n type: LoginOAuthType,\r\n token: string\r\n}","import { ChangeDetectionStrategy, Component, DestroyRef, NgZone, afterNextRender, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { EnvironmentService } from '@arsedizioni/ars-utils/core';\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\nimport { MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalBroadcastService, MsalGuardConfiguration, MsalInterceptorConfiguration, MsalService } from '@azure/msal-angular';\nimport { AuthenticationResult, BrowserCacheLocation, EventMessage, EventType, IPublicClientApplication, InteractionType, PublicClientApplication } from '@azure/msal-browser';\nimport { filter } from 'rxjs';\nimport { LoginOAuthResult, LoginOAuthType } from '../../definitions';\n\n/** Default Azure app registration — overridable via EnvironmentService. */\nconst DEFAULT_MS_CLIENT_ID = '6b2c080f-6ab0-4511-a9df-0bce69db5833';\nconst MS_AUTH_SCOPE = `api://${DEFAULT_MS_CLIENT_ID}/AngularSPAAuthScope`;\n\nexport function MSALInstanceFactory(environment: EnvironmentService): IPublicClientApplication {\n return new PublicClientApplication({\n auth: {\n clientId: (environment as any).msalClientId ?? DEFAULT_MS_CLIENT_ID,\n authority: (environment as any).msalAuthority ?? 'https://login.microsoftonline.com/common',\n redirectUri: environment.appLoginRedirectUri,\n },\n cache: {\n cacheLocation: BrowserCacheLocation.LocalStorage\n }\n });\n}\n\nexport function MSALInterceptorConfigFactory(environment: EnvironmentService): MsalInterceptorConfiguration {\n\n return {\n interactionType: InteractionType.Popup,\n protectedResourceMap: new Map([\n [environment.appServiceLoginUri, [MS_AUTH_SCOPE]],\n [\"https://graph.microsoft.com/v2.0/me\", [\"user.read\"]],\n ])\n };\n}\n\nexport function MSALGuardConfigFactory(): MsalGuardConfiguration {\n return {\n interactionType: InteractionType.Popup,\n authRequest: {\n scopes: [\"user.read\"]\n }\n };\n}\n\n@Component({\n selector: 'login-oauth',\n templateUrl: './login-oauth.component.html',\n styleUrls: ['./login-oauth.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: MSAL_INSTANCE,\n deps: [EnvironmentService],\n useFactory: MSALInstanceFactory\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALGuardConfigFactory\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n deps: [EnvironmentService],\n useFactory: MSALInterceptorConfigFactory\n },\n MsalService,\n MsalBroadcastService],\n imports: [\n MatButtonModule\n ]\n})\nexport class LoginOAuthComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly msalBroadcastService = inject(MsalBroadcastService);\n private readonly msaLService = inject(MsalService);\n private readonly dialogService = inject(DialogService);\n private readonly ngZone = inject(NgZone);\n /** Emitted when OAuth authentication succeeds. */\n readonly success = output<LoginOAuthResult>();\n /** Whether to show the introductory info panel. */\n readonly showInfo = input<boolean>(true);\n /** Application name displayed in the info panel. */\n readonly applicationName = input<string>();\n /** Whether to trigger `initialize()` automatically on mount. */\n readonly autoInitialize = input<boolean>(false);\n /** Whether the Microsoft login button is shown. */\n readonly allowMicrosoft = input<boolean>(true);\n /** Whether the Google login button is shown. */\n readonly allowGoogle = input<boolean>(true);\n /** Google OAuth client id. Override per deployment. */\n readonly googleClientId = input<string>('71204983077-ag31h3bgt2udcbfr9nn84r9rni2k3snp.apps.googleusercontent.com');\n /** MSAL access-token scope requested after login. */\n readonly msalScope = input<string>(MS_AUTH_SCOPE);\n protected readonly oauthReady = signal<boolean>(false);\n protected readonly oauthMicrosoftReady = signal<boolean>(false);\n protected readonly oauthGoogleReady = signal<boolean>(false);\n /** Hidden GSI button proxy, created once the Google library is ready. */\n private googleButtonWrapper?: { click: () => void };\n\n constructor() {\n\n this.msalBroadcastService.msalSubject$\n .pipe(\n filter((msg: EventMessage) =>\n msg.eventType === EventType.LOGOUT_FAILURE ||\n msg.eventType === EventType.ACQUIRE_TOKEN_FAILURE),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((r: EventMessage) => {\n if (r?.payload) {\n const error = r.payload as any;\n this.dialogService.error(error?.message ?? 'Errore di autenticazione Microsoft');\n }\n });\n\n afterNextRender(() => {\n if (this.autoInitialize()) {\n this.initialize();\n }\n });\n\n }\n\n /**\n * Initialize OAuth providers (Microsoft MSAL and Google GSI).\n * Safe to call multiple times — already-initialized providers are skipped.\n * Must be public so the host component can trigger it manually when `autoInitialize` is false.\n */\n initialize() {\n this.oauthReady.set(true);\n\n // Initialize the Microsoft stack only when allowed and not already done.\n if (this.allowMicrosoft() && !this.oauthMicrosoftReady()) {\n this.msaLService.initialize()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => this.oauthMicrosoftReady.set(true),\n error: (error: any) =>\n this.dialogService.error(error?.message ?? 'Errore di inizializzazione Microsoft'),\n });\n }\n\n // Load the Google GSI script only when allowed and not already done.\n if (this.allowGoogle() && !this.oauthGoogleReady()) {\n // @ts-ignore — define the callback BEFORE the script loads so GSI can find it\n window.onGoogleLibraryLoad = () => {\n // @ts-ignore\n google.accounts.id.initialize({\n client_id: this.googleClientId(),\n cancel_on_tap_outside: true,\n auto_select: false,\n callback: (r: any) => {\n this.ngZone.run(() => {\n this.success.emit({ type: LoginOAuthType.Google, token: r.credential });\n });\n }\n });\n\n this.googleButtonWrapper = createFakeGoogleWrapper();\n this.ngZone.run(() => this.oauthGoogleReady.set(true));\n };\n\n // Reuse the script tag if a previous instance already added it.\n const existing = document.querySelector<HTMLScriptElement>('script[data-gsi=\"ars\"]');\n if (existing) {\n // @ts-ignore — library already present: run the callback directly\n if (window.google?.accounts?.id) window.onGoogleLibraryLoad();\n } else {\n const script = document.createElement('script');\n script.src = 'https://accounts.google.com/gsi/client';\n script.async = true;\n script.defer = true;\n script.dataset['gsi'] = 'ars';\n script.onerror = () => this.ngZone.run(() =>\n this.dialogService.error('Impossibile caricare il servizio di accesso Google.'));\n // Append and LEAVE it in the DOM so the browser actually fetches it.\n document.body.appendChild(script);\n }\n }\n }\n\n /**\n * Trigger a Microsoft (MSAL) login popup and acquire an access token on success.\n */\n protected loginMSAL() {\n // Clear any in-progress interaction flag that may have been left by a previous incomplete popup\n sessionStorage.removeItem('msal.interaction.status');\n\n this.msaLService.loginPopup()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (r: AuthenticationResult) => {\n try {\n this.msaLService.instance.setActiveAccount(r.account);\n this.msaLService.acquireTokenSilent({\n scopes: [this.msalScope()],\n account: r.account\n }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: (tokenResult: AuthenticationResult) => {\n this.success.emit({ type: LoginOAuthType.Microsoft, token: tokenResult.accessToken });\n },\n error: (error: any) => {\n this.dialogService.error(error.message);\n }\n });\n } catch (error: any) {\n this.dialogService.error(error.message);\n }\n },\n error: (error: any) => {\n this.dialogService.error(error.message);\n }\n });\n }\n\n /**\n * Trigger the hidden Google GSI button to open the Google sign-in flow.\n */\n protected loginGoogle() {\n // Use the wrapper click to avoid an \"Illegal invocation\" exception.\n // Guard: the button only exists once the GSI library has loaded.\n if (!this.googleButtonWrapper) {\n this.dialogService.error('Il servizio di accesso Google non è ancora pronto.');\n return;\n }\n this.googleButtonWrapper.click();\n }\n}\n\nconst createFakeGoogleWrapper = (): { click: () => void } => {\n const googleLoginWrapper = document.createElement(\"div\");\n googleLoginWrapper.style.display = \"none\";\n googleLoginWrapper.classList.add(\"custom-google-button\");\n document.body.appendChild(googleLoginWrapper);\n\n // Render the (invisible) GSI button inside our wrapper.\n // @ts-ignore\n window.google.accounts.id.renderButton(googleLoginWrapper, {\n type: \"icon\",\n width: \"200\",\n });\n\n const googleLoginWrapperButton =\n googleLoginWrapper.querySelector<HTMLElement>(\"div[role=button]\");\n\n return {\n click: () => googleLoginWrapperButton?.click(),\n };\n};\n\n","<div class=\"login-oauth\">\r\n @if(showInfo()) {\r\n <div class=\"message\">\r\n <p>Questa sezione consente di accedere al servizio utilizzando un provider OAuth2.</p>\r\n @if(applicationName()) {\r\n <p>La email utilizzata deve essere collegata ad un utente valido di {{applicationName()}} e dei servizi ad esso\r\n connessi.</p>\r\n }\r\n </div>\r\n }\r\n @if (allowMicrosoft()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginMSAL()\" aria-label=\"Effettua accesso\"\r\n [disabled]=\"!oauthMicrosoftReady()\" style=\"width: 100%;\">\r\n Accedi con Microsoft</button>\r\n </div>\r\n }\r\n @if (allowGoogle()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginGoogle()\" style=\"width: 100%;\"\r\n aria-label=\"Effettua accesso\" [disabled]=\"!oauthGoogleReady()\">\r\n Accedi con Google</button>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { broadcastResponseToMainFrame } from '@azure/msal-browser/redirect-bridge';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n\n@Component({\n selector: 'app-login-oauth-ok-ms',\n styleUrls: ['./login-oauth-ok-ms.component.scss'],\n templateUrl: './login-oauth-ok-ms.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatProgressBarModule]\n})\nexport class LoginOAuthOkMSComponent {\n\n /** Message displayed while the popup is completing authentication. */\n readonly message = input<string>('Accesso in corso...');\n\n constructor() {\n // MSAL v5 popup flow: parse the auth response from the URL and send\n // it back to the opener window via BroadcastChannel, then close the popup.\n // The promise can reject (e.g. COOP misconfiguration); log instead of\n // leaving an unhandled rejection that silently strands the popup.\n broadcastResponseToMainFrame().catch((error: unknown) => {\n console.error('Errore durante la comunicazione della risposta di autenticazione:', error);\n });\n }\n}\n","<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"login-auto fade-in\">\r\n <div class=\"message\">\r\n Autenticazione in corso...\r\n </div>\r\n <mat-progress-bar mode=\"indeterminate\" ></mat-progress-bar>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of scm-utils\r\n */\r\nexport * from './ui/definitions';\r\nexport * from './ui/components/index';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1049,7 +1049,7 @@ declare class ClipperDocumentMenuComponent {
|
|
|
1049
1049
|
private readonly renderer2;
|
|
1050
1050
|
private readonly clipperService;
|
|
1051
1051
|
readonly useSelections: _angular_core.InputSignal<boolean>;
|
|
1052
|
-
readonly selectionSource: _angular_core.InputSignal<"
|
|
1052
|
+
readonly selectionSource: _angular_core.InputSignal<"none" | "selection" | "bag">;
|
|
1053
1053
|
/**
|
|
1054
1054
|
* Computed signal that returns the current effective document selection.
|
|
1055
1055
|
* Re-evaluates when any input signal or the underlying selection model changes.
|
|
@@ -1291,6 +1291,16 @@ declare class SelectableModel<T, V> {
|
|
|
1291
1291
|
readonly hasValue: i0.Signal<boolean>;
|
|
1292
1292
|
/** Signal with the number of items currently tracked in the internal list. */
|
|
1293
1293
|
readonly count: i0.Signal<number>;
|
|
1294
|
+
/** Signal that is `true` when exactly one item is currently selected. */
|
|
1295
|
+
readonly selectedOne: i0.Signal<boolean>;
|
|
1296
|
+
/** Signal that is `true` when two or more items are currently selected. */
|
|
1297
|
+
readonly selectedMany: i0.Signal<boolean>;
|
|
1298
|
+
/** Signal that is `true` when no item is currently selected. */
|
|
1299
|
+
readonly selectedNone: i0.Signal<boolean>;
|
|
1300
|
+
/** Signal with the first currently selected item, or `undefined` when none is selected. */
|
|
1301
|
+
readonly selectedFirst: i0.Signal<T>;
|
|
1302
|
+
/** Signal with a snapshot of all currently selected items. */
|
|
1303
|
+
readonly selectedAll: i0.Signal<T[]>;
|
|
1294
1304
|
/**
|
|
1295
1305
|
* @param allowMultiSelect - When `true` (default), multiple items can be selected simultaneously.
|
|
1296
1306
|
* @param lookupFieldName - Name of the field used as the unique key when searching the internal list
|
|
@@ -693,7 +693,13 @@ declare class SelectDialogComponent implements AfterViewInit {
|
|
|
693
693
|
* Applies a structured filter option, emitting the filter output event.
|
|
694
694
|
* @param filterOption - The selected filter option object.
|
|
695
695
|
*/
|
|
696
|
-
|
|
696
|
+
private applyFilterByOptions;
|
|
697
|
+
/**
|
|
698
|
+
* Applies a structured filter option, emitting the filter output event.
|
|
699
|
+
* @param filterOption - The selected filter option object.
|
|
700
|
+
* @param apply - Optional flag to immediately apply the filter.
|
|
701
|
+
*/
|
|
702
|
+
protected doFilterByOptions(filterOption: any, apply?: boolean): void;
|
|
697
703
|
/**
|
|
698
704
|
* Triggers a server-side lookup with the given parameters (public API).
|
|
699
705
|
* @param params - An object containing the lookup query parameters.
|
|
@@ -996,7 +1002,7 @@ declare class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor
|
|
|
996
1002
|
/** Minimum width in pixels when collapsed. Use `-1` for automatic. */
|
|
997
1003
|
readonly collapsedWidth: _angular_core.InputSignal<number>;
|
|
998
1004
|
/** Display mode used when the selector is in collapsed state. */
|
|
999
|
-
readonly collapsedDisplayMode: _angular_core.InputSignal<"
|
|
1005
|
+
readonly collapsedDisplayMode: _angular_core.InputSignal<"button" | "dropdown">;
|
|
1000
1006
|
/** Pixel threshold below which the selector collapses. Use `-1` to disable. */
|
|
1001
1007
|
readonly collapseAt: _angular_core.InputSignal<number>;
|
|
1002
1008
|
/** When `true`, `collapseAt` is compared against the container width rather than the window width. */
|
|
@@ -1009,7 +1015,7 @@ declare class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor
|
|
|
1009
1015
|
/** When `true`, at least one item must remain selected. */
|
|
1010
1016
|
readonly mustSelect: _angular_core.InputSignal<boolean>;
|
|
1011
1017
|
/** Layout mode: `'collapsed'` forces dropdown mode, `'dynamic'` collapses based on `collapseAt`. */
|
|
1012
|
-
readonly mode: _angular_core.InputSignal<"
|
|
1018
|
+
readonly mode: _angular_core.InputSignal<"dynamic" | "collapsed">;
|
|
1013
1019
|
/** When `true`, chips are stacked vertically instead of wrapping horizontally. */
|
|
1014
1020
|
readonly stacked: _angular_core.InputSignal<boolean>;
|
|
1015
1021
|
/** Chips below this index receive extra padding to align with other UI elements. */
|
|
@@ -409,7 +409,7 @@ declare class BusyDialogComponent {
|
|
|
409
409
|
/** Current progress value (0–100). Used when `progressMode` is `'determinate'`. */
|
|
410
410
|
readonly progress: _angular_core.WritableSignal<number>;
|
|
411
411
|
/** Progress mode passed to the Material progress components. */
|
|
412
|
-
readonly progressMode: _angular_core.WritableSignal<"
|
|
412
|
+
readonly progressMode: _angular_core.WritableSignal<"indeterminate" | "determinate">;
|
|
413
413
|
/** Message displayed above the progress indicator. */
|
|
414
414
|
readonly message: _angular_core.WritableSignal<string>;
|
|
415
415
|
/**
|