@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
81 lines • 8.45 kB
JavaScript
/**
* Copyright (c) 2025 Visa, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
import { ApplicationRef, Injectable, Inject, PLATFORM_ID, signal } from '@angular/core';
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
import * as i0 from "@angular/core";
/**
* This service is used internally by the library and can optionally be used directly. <br />
* It’s required for SSR integration but not necessary for functions behind Angular's renderer.
*/
export class AppReadyService {
constructor(appRef, document, platformId) {
this.appRef = appRef;
this.document = document;
this.platformId = platformId;
/**
* Signal to indicate if the application is stable.
*/
this.appStable = signal(false);
/** @ignore */
this._browserAndDomReady = false;
this.appRef.isStable.subscribe((isStable) => {
this.appStable.set(isStable);
});
}
/**
* The checkDocumentExists method checks and returns the document object if applicable.
*/
checkDocumentExists() {
if (this.document) {
return this.document;
}
else
return false;
}
/**
* The checkIsPlatformBrowser method checks if the platform is a browser (as opposed to server).
* @returns boolean
*/
checkIsPlatformBrowser() {
return isPlatformBrowser(this.platformId);
}
/**
* The isBrowserAndDomAvailable method checks for both the document and the browser platform.
* @returns boolean
*/
isBrowserAndDomAvailable() {
if (this._browserAndDomReady)
return true; // prevent calling the functions every time
this._browserAndDomReady = this.checkDocumentExists() && this.checkIsPlatformBrowser();
return this._browserAndDomReady;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppReadyService, deps: [{ token: i0.ApplicationRef }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppReadyService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppReadyService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN0YWJsZS1jaGVjay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ub3ZhLWxpYi9zcmMvbGliL191dGlsaXRpZXMvc2VydmljZXMvYXBwLXN0YWJsZS1jaGVjay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7SUFlSTtBQUNKLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBQzlEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBUTFCLFlBQ1UsTUFBc0IsRUFDSixRQUFrQixFQUNmLFVBQWtCO1FBRnZDLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ0osYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQVE7UUFWakQ7O1dBRUc7UUFDSCxjQUFTLEdBQTRCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxjQUFjO1FBQ2Qsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBTzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDOztZQUFNLE9BQU8sS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxzQkFBc0I7UUFDcEIsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixJQUFJLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLDJDQUEyQztRQUN0RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdkYsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQzsrR0EzQ1UsZUFBZSxnREFVaEIsUUFBUSxhQUNSLFdBQVc7bUhBWFYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFXSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAyNSBWaXNhLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiovXG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0LCBQTEFURk9STV9JRCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbi8qKlxuICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgbGlicmFyeSBhbmQgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCBkaXJlY3RseS4gPGJyIC8+XG4gKiBJdOKAmXMgcmVxdWlyZWQgZm9yIFNTUiBpbnRlZ3JhdGlvbiBidXQgbm90IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zIGJlaGluZCBBbmd1bGFyJ3MgcmVuZGVyZXIuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcFJlYWR5U2VydmljZSB7XG4gIC8qKlxuICAgKiBTaWduYWwgdG8gaW5kaWNhdGUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0YWJsZS5cbiAgICovXG4gIGFwcFN0YWJsZTogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuICAvKiogQGlnbm9yZSAqL1xuICBfYnJvd3NlckFuZERvbVJlYWR5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XG4gICkge1xuICAgIHRoaXMuYXBwUmVmLmlzU3RhYmxlLnN1YnNjcmliZSgoaXNTdGFibGUpID0+IHtcbiAgICAgIHRoaXMuYXBwU3RhYmxlLnNldChpc1N0YWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNoZWNrRG9jdW1lbnRFeGlzdHMgbWV0aG9kIGNoZWNrcyBhbmQgcmV0dXJucyB0aGUgZG9jdW1lbnQgb2JqZWN0IGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICBjaGVja0RvY3VtZW50RXhpc3RzKCk6IERvY3VtZW50IHwgYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50O1xuICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNoZWNrSXNQbGF0Zm9ybUJyb3dzZXIgbWV0aG9kIGNoZWNrcyBpZiB0aGUgcGxhdGZvcm0gaXMgYSBicm93c2VyIChhcyBvcHBvc2VkIHRvIHNlcnZlcikuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIGNoZWNrSXNQbGF0Zm9ybUJyb3dzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlzQnJvd3NlckFuZERvbUF2YWlsYWJsZSBtZXRob2QgY2hlY2tzIGZvciBib3RoIHRoZSBkb2N1bWVudCBhbmQgdGhlIGJyb3dzZXIgcGxhdGZvcm0uXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIGlzQnJvd3NlckFuZERvbUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fYnJvd3NlckFuZERvbVJlYWR5KSByZXR1cm4gdHJ1ZTsgLy8gcHJldmVudCBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgZXZlcnkgdGltZVxuICAgIHRoaXMuX2Jyb3dzZXJBbmREb21SZWFkeSA9IHRoaXMuY2hlY2tEb2N1bWVudEV4aXN0cygpICYmIHRoaXMuY2hlY2tJc1BsYXRmb3JtQnJvd3NlcigpO1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyQW5kRG9tUmVhZHk7XG4gIH1cbn1cbiJdfQ==