{"version":3,"file":"toolbox-window.mjs","sources":["../../../projects/toolbox/window/window-ref.ts","../../../projects/toolbox/window/window.factory.ts","../../../projects/toolbox/window/browser-window-ref.ts","../../../projects/toolbox/window/window.service.ts","../../../projects/toolbox/window/public-api.ts","../../../projects/toolbox/window/toolbox-window.ts"],"sourcesContent":["/**\r\n * Define abstract class for obtaining reference to the global window object.\r\n */\r\nexport abstract class WindowRef\r\n{\r\n  /** Gets the native window object. */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public get nativeWindow(): Window | Object\r\n  {\r\n    throw new Error( \"Not implemented.\" );\r\n  }\r\n}\r\n","import { isPlatformBrowser } from \"@angular/common\";\r\nimport { BrowserWindowRef } from \"./browser-window-ref\";\r\n\r\n/* Create a factory function that returns the native window object. */\r\nexport const windowFactory = (\r\n  browserWindowRef: BrowserWindowRef, platformId: object ): Window | object =>\r\n{\r\n  if( isPlatformBrowser( platformId ) )\r\n  {\r\n    return browserWindowRef.nativeWindow;\r\n  }\r\n\r\n  return {};\r\n};\r\n","import { WindowRef } from \"./window-ref\";\r\n\r\n/**\r\n * Implements the abstract class and returns the native window object.\r\n */\r\nexport class BrowserWindowRef extends WindowRef\r\n{\r\n  /** Initializes a new instance of the {@link BrowserWindowRef} class. */\r\n  public constructor()\r\n  {\r\n    super();\r\n  }\r\n\r\n  /** Gets the native window object. */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public get nativeWindow(): Window | Object\r\n  {\r\n    return window;\r\n  }\r\n}\r\n","import {\r\n  Inject,\r\n  Injectable,\r\n  ClassProvider,\r\n  FactoryProvider,\r\n  InjectionToken,\r\n  PLATFORM_ID,\r\n  EventEmitter\r\n} from \"@angular/core\";\r\nimport { EventManager } from \"@angular/platform-browser\";\r\n\r\nimport { WindowRef } from \"./window-ref\";\r\nimport { windowFactory } from \"./window.factory\";\r\nimport { BrowserWindowRef } from \"./browser-window-ref\";\r\n\r\n/* Create a new injection token for injecting the window into a component. */\r\nexport const WINDOW = new InjectionToken( \"WindowToken\" );\r\n\r\n/* Create an injectable provider for the WindowRef token that uses the\r\n BrowserWindowRef class. */\r\nconst browserWindowProvider: ClassProvider = {\r\n  provide: WindowRef,\r\n  useClass: BrowserWindowRef\r\n};\r\n\r\n/* Create an injectable provider that uses the windowFactory function\r\n for returning the native window object. */\r\nexport const windowProvider: FactoryProvider = {\r\n  provide: WINDOW,\r\n  useFactory: windowFactory,\r\n  deps: [WindowRef, PLATFORM_ID]\r\n};\r\n\r\n/* Create an array of providers for the extensibility options. */\r\nexport const WINDOW_PROVIDERS = [\r\n  browserWindowProvider,\r\n  windowProvider\r\n];\r\n\r\n/**\r\n * Provides safe access to the Browser's {@link window} object. It provides\r\n * functions such as 'alert', 'confirm' and 'prompt' instead of calling\r\n * window.* directly. This service also provides a Browser window resize\r\n * event and to Angular's {@link EventManager} for additional functionality.\r\n *\r\n * Ensure to call {@link provideBrowserWindow} from the appConfig.ts to\r\n * register the {@link WINDOW} token this services uses.\r\n */\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxWindowService {\r\n  /**\r\n   * Event occurs when the Browser window is resized. Provides an\r\n   * object with the width and height of the window.\r\n   */\r\n  public onResize = new EventEmitter<{\r\n    /** The window width. */\r\n    width: number;\r\n\r\n    /** The window height. */\r\n    height: number;\r\n  }>();\r\n\r\n  public constructor(\r\n    @Inject( WINDOW ) public readonly window: Window,\r\n    public readonly eventManager: EventManager\r\n  ) {\r\n    // Add a listener to notify subscribers when the Browser window resizes\r\n    eventManager.addEventListener(\r\n      document.body,\r\n      \"resize\",\r\n      ( e: any ) => this.onResize.emit( {\r\n        width: e.target.innerWidth,\r\n        height: e.target.innerHeight\r\n      } )\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Displays an alert using the Browser Alert service.\r\n   * @param message The message to display.\r\n   */\r\n  public alert( message: string ): void {\r\n    this.window.alert( message );\r\n  }\r\n\r\n  /**\r\n   * Displays a confirm prompt using the Browser Confirm service.\r\n   * @param message The message to display.\r\n   * @return The confirmation response.\r\n   */\r\n  public confirm( message: string ): boolean {\r\n    return this.window.confirm( message );\r\n  }\r\n\r\n  public prompt( message: string, defaultValue?: string ): string | null {\r\n    return this.window.prompt( message, defaultValue );\r\n  }\r\n}\r\n","import { EventManager } from \"@angular/platform-browser\";\r\nimport { WINDOW_PROVIDERS } from \"./window.service\";\r\n\r\n/**\r\n * Provides safe access to the Browser's {@link window} object. Inject the\r\n * {@link TbxWindowService} to use functions such as 'alert' and 'confirm'\r\n * instead of calling window.* directly. This service also provides a\r\n * Browser window resize event and to Angular's {@link EventManager} for\r\n * additional functionality.\r\n */\r\nexport const provideBrowserWindow = () => WINDOW_PROVIDERS;\r\n\r\nexport * from \"./window.service\";\r\nexport * from \"./window-ref\";\r\nexport * from \"./browser-window-ref\";\r\nexport * from \"./window.factory\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAA;;AAEG;MACmB,SAAS,CAAA;;;AAI7B,IAAA,IAAW,YAAY,GAAA;AAErB,QAAA,MAAM,IAAI,KAAK,CAAE,kBAAkB,CAAE;;AAExC;;ACRD;MACa,aAAa,GAAG,CAC3B,gBAAkC,EAAE,UAAkB,KAAsB;AAE5E,IAAA,IAAI,iBAAiB,CAAE,UAAU,CAAE,EACnC;QACE,OAAO,gBAAgB,CAAC,YAAY;;AAGtC,IAAA,OAAO,EAAE;AACX;;ACXA;;AAEG;AACG,MAAO,gBAAiB,SAAQ,SAAS,CAAA;;AAG7C,IAAA,WAAA,GAAA;AAEE,QAAA,KAAK,EAAE;;;;AAKT,IAAA,IAAW,YAAY,GAAA;AAErB,QAAA,OAAO,MAAM;;AAEhB;;ACJD;MACa,MAAM,GAAG,IAAI,cAAc,CAAE,aAAa;AAEvD;AAC2B;AAC3B,MAAM,qBAAqB,GAAkB;AAC3C,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,QAAQ,EAAE;CACX;AAED;AAC2C;AACpC,MAAM,cAAc,GAAoB;AAC7C,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW;;AAG/B;AACO,MAAM,gBAAgB,GAAG;IAC9B,qBAAqB;IACrB;;AAGF;;;;;;;;AAQG;MAEU,gBAAgB,CAAA;IAa3B,WAAA,CACoC,MAAc,EAChC,YAA0B,EAAA;QADR,IAAA,CAAA,MAAM,GAAN,MAAM;QACxB,IAAA,CAAA,YAAY,GAAZ,YAAY;AAd9B;;;AAGG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAM9B;;AAOF,QAAA,YAAY,CAAC,gBAAgB,CAC3B,QAAQ,CAAC,IAAI,EACb,QAAQ,EACR,CAAE,CAAM,KAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAE;AAChC,YAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;AAC1B,YAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AAClB,SAAA,CAAE,CACJ;;AAGH;;;AAGG;AACI,IAAA,KAAK,CAAE,OAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,OAAO,CAAE;;AAG9B;;;;AAIG;AACI,IAAA,OAAO,CAAE,OAAe,EAAA;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAE,OAAO,CAAE;;IAGhC,MAAM,CAAE,OAAe,EAAE,YAAqB,EAAA;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE,YAAY,CAAE;;AA9CzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAchB,MAAM,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAdN,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADF,MAAM,EAAA,CAAA,CAAA;;2FACpB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAE,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAe9B,MAAM;2BAAE,MAAM;;;AC5DnB;;;;;;AAMG;MACU,oBAAoB,GAAG,MAAM;;ACV1C;;AAEG;;;;"}