{"version":3,"file":"deliverysolutions-ngx-modialog.mjs","sources":["../../../projects/ngx-modialog/src/lib/framework/fluent-assign.ts","../../../projects/ngx-modialog/src/lib/framework/utils.ts","../../../projects/ngx-modialog/src/lib/framework/createComponent.ts","../../../projects/ngx-modialog/src/lib/models/errors.ts","../../../projects/ngx-modialog/src/lib/models/dialog-ref.ts","../../../projects/ngx-modialog/src/lib/models/tokens.ts","../../../projects/ngx-modialog/src/lib/models/vc-ref-store.ts","../../../projects/ngx-modialog/src/lib/overlay/overlay.directives.ts","../../../projects/ngx-modialog/src/lib/components/base-dynamic-component.ts","../../../projects/ngx-modialog/src/lib/components/css-backdrop.ts","../../../projects/ngx-modialog/src/lib/components/css-dialog-container.ts","../../../projects/ngx-modialog/src/lib/components/index.ts","../../../projects/ngx-modialog/src/lib/overlay/overlay.component.ts","../../../projects/ngx-modialog/src/lib/overlay/overlay.component.html","../../../projects/ngx-modialog/src/lib/models/dialog-ref-stack.ts","../../../projects/ngx-modialog/src/lib/overlay/overlay.service.ts","../../../projects/ngx-modialog/src/lib/providers/dom-modal-renderer.ts","../../../projects/ngx-modialog/src/lib/providers/modal.ts","../../../projects/ngx-modialog/src/lib/providers/outside-event-plugin.ts","../../../projects/ngx-modialog/src/lib/models/overlay-context.ts","../../../projects/ngx-modialog/src/lib/models/modal-context.ts","../../../projects/ngx-modialog/src/lib/models/modal-open-context.ts","../../../projects/ngx-modialog/src/lib/ngx-modialog.module.ts","../../../projects/ngx-modialog/src/deliverysolutions-ngx-modialog.ts"],"sourcesContent":["import { extend, arrayUnion } from './utils';\n\nconst PRIVATE_PREFIX = '$$';\nconst RESERVED_REGEX = /^(\\$\\$).*/;\n\nfunction validateMethodName(name: string) {\n  if (!name) {\n    throw new Error(`Illegal method name. Empty method name is not allowed`);\n  } else if (name in this) {\n    throw new Error(`A member name '${name}' already defined.`);\n  }\n}\n\n/**\n * Returns a list of assigned property names (non private)\n * @param subject\n */\nfunction getAssignedPropertyNames(subject: any): string[] {\n  return Object.getOwnPropertyNames(subject)\n    .filter(name => RESERVED_REGEX.test(name))\n    .map(name => name.substr(2));\n}\n\nexport function privateKey(name: string): string {\n  return PRIVATE_PREFIX + name;\n}\n\nfunction objectDefinePropertyValue(obj: any, propertyName, value: (value: any) => void): void {\n  Object.defineProperty(obj, propertyName, <any>{\n    configurable: false,\n    enumerable: false,\n    writable: false,\n    value\n  });\n}\n\n/**\n * Given a FluentAssign instance, apply all of the supplied default values so calling\n * instance.toJSON will return those values (does not create a setter function)\n * @param instance\n * @param defaultValues\n */\nfunction applyDefaultValues(instance: any, defaultValues: Object): void {\n  Object.getOwnPropertyNames(defaultValues)\n    .forEach(name => (<any>instance)[privateKey(name)] = (<any>defaultValues)[name]);\n}\n\n/**\n * Create a function for setting a value for a property on a given object.\n * @param obj The object to apply the key & setter on.\n * @param propertyName The name of the property on the object\n * @param writeOnce If true will allow writing once (default: false)\n *\n * Example:\n * let obj = new FluentAssign<any>;\n * setAssignMethod(obj, 'myProp');\n * obj.myProp('someValue');\n * const result = obj.toJSON();\n * console.log(result); //{ myProp: 'someValue' }\n *\n *\n * let obj = new FluentAssign<any>;\n * setAssignMethod(obj, 'myProp', true); // applying writeOnce\n * obj.myProp('someValue');\n * obj.myProp('someValue'); // ERROR: Overriding config property 'myProp' is not allowed.\n */\nexport function setAssignMethod<T>(obj: T, propertyName: string, writeOnce: boolean = false): void {\n  validateMethodName.call(obj, propertyName);\n\n  const key = privateKey(propertyName);\n  objectDefinePropertyValue(obj, propertyName, (value: any) => {\n    if (writeOnce && this.hasOwnProperty(key)) {\n      throw new Error(`Overriding config property '${propertyName}' is not allowed.`);\n    }\n    obj[key] = value;\n    return obj;\n  });\n}\n\n/**\n * Create a function for setting a value that is an alias to an other setter function.\n * @param obj The object to apply the key & setter on.\n * @param propertyName The name of the property on the object\n * @param srcPropertyName The name of the property on the object this alias points to\n * @param hard If true, will set a readonly property on the object that returns\n *        the value of the source property. Default: false\n *\n * Example:\n * let obj = new FluentAssign<any> ;\n * setAssignMethod(obj, 'myProp');\n * setAssignAlias(obj, 'myPropAlias', 'myProp');\n * obj.myPropAlias('someValue');\n * const result = obj.toJSON();\n * console.log(result); //{ myProp: 'someValue' }\n * result.myPropAlias // undefined\n *\n *\n * let obj = new FluentAssign<any> ;\n * setAssignMethod(obj, 'myProp');\n * setAssignAlias(obj, 'myPropAlias', 'myProp', true); // setting a hard alias.\n * obj.myPropAlias('someValue');\n * const result = obj.toJSON();\n * console.log(result); //{ myProp: 'someValue' }\n * result.myPropAlias // someValue\n */\nexport function setAssignAlias<T>(obj: T, propertyName: string,\n                                  srcPropertyName: string,\n                                  hard: boolean = false): void {\n  validateMethodName.call(obj, propertyName);\n\n  objectDefinePropertyValue(obj, propertyName, (value: any) => {\n    obj[srcPropertyName](value);\n    return obj;\n  });\n\n  if (hard === true) {\n    const key = privateKey(propertyName),\n      srcKey = privateKey(srcPropertyName);\n\n    Object.defineProperty(obj, key, <any>{\n      configurable: false,\n      enumerable: false,\n      get: () => obj[srcKey]\n    });\n  }\n}\n\n/**\n * Describes a fluent assign method.\n * A function that gets a value and returns the instance it works on.\n */\nexport type FluentAssignMethod<T, Z> = (value: T) => Z;\n\n\nexport interface IFluentAssignFactory<Z> {\n  fluentAssign: Z;\n\n  setMethod(name: string, defaultValue?: any): IFluentAssignFactory<Z>;\n}\n\n/**\n * Represent a fluent API factory wrapper for defining FluentAssign instances.\n */\nexport class FluentAssignFactory<T> {\n  private _fluentAssign: FluentAssign<T>;\n\n  constructor(fluentAssign?: FluentAssign<T>) {\n    this._fluentAssign =\n      fluentAssign instanceof FluentAssign ? fluentAssign : <any>new FluentAssign();\n  }\n\n  /**\n   * Create a setter method on the FluentAssign instance.\n   * @param name The name of the setter function.\n   * @param defaultValue If set (not undefined) set's the value on the instance immediately.\n   */\n  setMethod(name: string, defaultValue?: any): FluentAssignFactory<T> {\n    setAssignMethod(this._fluentAssign, name);\n    if (defaultValue !== undefined) {\n      (<any>this._fluentAssign)[name](defaultValue);\n    }\n    return this;\n  }\n\n  /**\n   * The FluentAssign instance.\n   */\n  get fluentAssign(): FluentAssign<T> {\n    return this._fluentAssign;\n  }\n}\n\n\n/**\n * Represent an object where every property is a function representing an assignment function.\n * Calling each function with a value will assign the value to the object and return the object.\n * Calling 'toJSON' returns an object with the same properties but this time representing the\n * assigned values.\n *\n * This allows setting an object in a fluent API manner.\n * Example:\n let fluent = new FluentAssign<any>(undefined, ['some', 'went']);\n fluent.some('thing').went('wrong').toJSON();\n // { some: 'thing', went: 'wrong' }\n */\nexport class FluentAssign<T> {\n  private __fluent$base__: new () => T;\n\n  /**\n   * Returns a FluentAssignFactory<FluentAssign<T>> ready to define a FluentAssign type.\n   * @param defaultValues An object representing default values for the instance.\n   * @param initialSetters A list of initial setters for the instance.\n   */\n  static compose<T>(defaultValues?: T, initialSetters?: string[]): FluentAssignFactory<T> {\n\n    return <any>FluentAssign.composeWith<FluentAssign<T>>(\n      new FluentAssign<T>(defaultValues, initialSetters));\n  }\n\n  /**\n   * Returns a FluentAssignFactory<Z> where Z is an instance of FluentAssign<?> or a derived\n   * class of it.\n   * @param fluentAssign An instance of FluentAssign<?> or a derived class of FluentAssign<?>.\n   */\n  static composeWith<Z>(fluentAssign: Z): IFluentAssignFactory<Z> {\n    return <any>new FluentAssignFactory<any>(<any>fluentAssign);\n  }\n\n  /**\n   *\n   * @param defaultValues An object representing default values for the underlying object.\n   * @param initialSetters A list of initial setters for this FluentAssign.\n   * @param baseType the class/type to create a new base. optional, {} is used if not supplied.\n   */\n  constructor(defaultValues?: T | T[], initialSetters?: string[], baseType?: new () => T) {\n    if (Array.isArray(defaultValues)) {\n      (defaultValues as Array<any>).forEach(d => applyDefaultValues(this, d));\n    } else if (defaultValues) {\n      applyDefaultValues(this, defaultValues);\n    }\n\n    if (Array.isArray(initialSetters)) {\n\n      initialSetters.forEach(name => setAssignMethod(this, name));\n    }\n\n    if (baseType) {\n      this.__fluent$base__ = baseType;\n    }\n  }\n\n  toJSON(): T {\n    return getAssignedPropertyNames(this)\n      .reduce((obj: T, name: string) => {\n        const key = privateKey(name);\n        // re-define property descriptors (we dont want their value)\n        const propDesc = Object.getOwnPropertyDescriptor(this, key);\n        if (propDesc) {\n          Object.defineProperty(obj, name, propDesc);\n        } else {\n          (<any>obj)[name] = (<any>this)[key];\n        }\n        return obj;\n      }, this.__fluent$base__ ? new this.__fluent$base__() : <any>{});\n  }\n}\n","/**\n * Simple object extend\n * @param m1\n * @param m2\n */\nexport function extend<T>(m1: any, m2: any): T {\n  const m: T = <T>{};\n  for (const attr in m1) {\n    if (m1.hasOwnProperty(attr)) {\n      (<any>m)[attr] = (<any>m1)[attr];\n    }\n  }\n\n  for (const attr in m2) {\n    if (m2.hasOwnProperty(attr)) {\n      (<any>m)[attr] = (<any>m2)[attr];\n    }\n  }\n\n  return m;\n}\n\n/**\n * Simple, not optimized, array union of unique values.\n * @param arr1\n * @param arr2\n */\nexport function arrayUnion<T>(arr1: any[], arr2: any[]): T[] {\n  return arr1\n    .concat(arr2.filter(v => arr1.indexOf(v) === -1));\n\n}\n\n/**\n * Returns true if the config supports a given key.\n * @param keyCode\n * @param config\n */\nexport function supportsKey(keyCode: number, config: Array<number>): boolean {\n  if (!Array.isArray(config)) {\n    return config !== null;\n  }\n\n  return config.indexOf(keyCode) > -1;\n}\n\n/**\n * Given an object representing a key/value map of css properties, returns a valid css string\n * representing the object.\n * Example:\n * console.log(toStyleString({\n *     position: 'absolute',\n *     width: '100%',\n *     height: '100%',\n *     top: '0',\n *     left: '0',\n *     right: '0',\n *     bottom: '0'\n * }));\n * // position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0\n * @param obj\n */\nexport function toStyleString(obj: any | CSSStyleDeclaration): string {\n  return Object.getOwnPropertyNames(obj)\n    .map(k => `${k}:${obj[k]}`)\n    .join(';');\n\n  // let objStr = JSON.stringify(obj);\n  // return objStr.substr(1, objStr.length - 2)\n  //     .replace(/,/g, ';')\n  //     .replace(/\"/g, '');\n}\n\nexport class PromiseCompleter<R> {\n  promise: Promise<R>;\n  resolve: (value?: R | PromiseLike<R>) => void;\n  reject: (error?: any, stackTrace?: string) => void;\n\n  constructor() {\n    this.promise = new Promise((res, rej) => {\n      this.resolve = res;\n      this.reject = rej;\n    });\n  }\n}\n\nexport type Class<T> = new(...args: any[]) => T;\n\nexport function noop() {\n}\n","import {\n  ComponentRef,\n  ComponentFactory,\n  ComponentFactoryResolver,\n  Injector,\n  ViewContainerRef\n} from '@angular/core';\n\nexport interface CreateComponentArgs {\n  component: any;\n  vcRef: ViewContainerRef;\n  injector?: Injector;\n  projectableNodes?: any[][];\n}\n\nexport function createComponent(instructions: CreateComponentArgs): ComponentRef<any> {\n  const injector: Injector =  instructions.injector || instructions.vcRef.injector;\n  const cmpFactory: ComponentFactory<any>\n    = injector.get(ComponentFactoryResolver).resolveComponentFactory(instructions.component);\n\n  if (instructions.vcRef) {\n    return instructions.vcRef.createComponent(\n      cmpFactory,\n      instructions.vcRef.length,\n      injector,\n      instructions.projectableNodes\n    );\n  } else {\n    return cmpFactory.create(injector);\n  }\n}\n\n","export class DialogBailOutError extends Error {\n  constructor(value?: string) {\n    super();\n\n    if (!value) {\n      value = 'Dialog was forced to close by an unknown source.';\n    }\n    this.message = value;\n  }\n}\n","import { Observable, Subject } from 'rxjs';\nimport { ComponentRef } from '@angular/core';\n\nimport { PromiseCompleter } from '../framework/utils';\nimport { Overlay, ModalOverlay } from '../overlay/index';\nimport { CloseGuard } from './tokens';\nimport { DialogBailOutError } from './errors';\n\n/**\n * API to an open modal window.\n */\nexport class DialogRef<T> {\n  /**\n   * Reference to the overlay component ref.\n   */\n  overlayRef: ComponentRef<ModalOverlay>;\n\n  /**\n   * States if the modal is inside a specific element.\n   */\n  public inElement: boolean;\n\n  public destroyed: boolean;\n\n  /**\n   * Fired before dialog is destroyed.\n   * No need to unsubscribe, done automatically.\n   * Note: Always called.\n   * When called, overlayRef might or might not be destroyed.\n   */\n  public onDestroy: Observable<void>;\n\n  private _resultDeferred: PromiseCompleter<any> = new PromiseCompleter<any>();\n  private _onDestroy: Subject<void> = new Subject<void>();\n  private closeGuard: CloseGuard;\n\n  constructor(public overlay: Overlay, public context?: T) {\n    this.onDestroy = this._onDestroy.asObservable();\n  }\n\n  /**\n   * A Promise that is resolved on a close event and rejected on a dismiss event.\n   */\n  get result(): Promise<any> {\n    return this._resultDeferred.promise;\n  }\n\n  /**\n   * Set a close/dismiss guard\n   * @param guard\n   */\n  setCloseGuard(guard: CloseGuard): void {\n    this.closeGuard = guard;\n  }\n\n  /**\n   *  Close the modal with a return value, i.e: result.\n   */\n  close(result: any = null) {\n    const _close = () => {\n      this.destroy();\n      this._resultDeferred.resolve(result);\n    };\n    this._fireHook<boolean>('beforeClose')\n      .then(value => value !== true && _close())\n      .catch(_close);\n  }\n\n  /**\n   *  Close the modal without a return value, i.e: cancelled.\n   *  This call is automatically invoked when a user either:\n   *  - Presses an exit keyboard key (if configured).\n   *  - Clicks outside of the modal window (if configured).\n   *  Usually, dismiss represent a Cancel button or a X button.\n   */\n  dismiss() {\n    const _dismiss = () => {\n      this.destroy();\n      this._resultDeferred.promise.catch(() => {});\n      this._resultDeferred.reject();\n    };\n    this._fireHook<boolean>('beforeDismiss')\n      .then(value => value !== true && _dismiss())\n      .catch(_dismiss);\n  }\n\n  /**\n   * Gracefully close the overlay/dialog with a rejected result.\n   * Does not trigger canDestroy on the overlay.\n   */\n  bailOut() {\n    if (this.destroyed !== true) {\n      this.destroyed = true;\n      this._onDestroy.next();\n      this._onDestroy.complete();\n      this._resultDeferred.reject(new DialogBailOutError());\n    }\n  }\n\n  destroy() {\n    if (this.destroyed !== true) {\n      this.destroyed = true;\n\n      if (typeof this.overlayRef.instance.canDestroy === 'function') {\n        this.overlayRef.instance.canDestroy()\n          .catch( () => {})\n          .then ( () => this._destroy() );\n      } else {\n        this._destroy();\n      }\n    }\n  }\n\n  private _destroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n    this.overlayRef.destroy();\n  }\n\n  private _fireHook<G>(name: 'beforeClose' | 'beforeDismiss'): Promise<G> {\n    const guard = this.closeGuard,\n          fn: Function = guard && typeof guard[name] === 'function' && guard[name];\n\n    return Promise.resolve(fn ? fn.call(guard) : false);\n  }\n}\n","import {\n  ComponentRef,\n  Injector,\n  ViewContainerRef,\n  TemplateRef,\n  Type\n} from '@angular/core';\n\nimport { ModalOverlay } from '../overlay/index';\nimport { DialogRef } from './dialog-ref';\nimport { OverlayContext } from './overlay-context';\n\nexport enum DROP_IN_TYPE {\n  alert,\n  prompt,\n  confirm\n}\n\nexport type WideVCRef = ViewContainerRef | string;\n\nexport type ContainerContent = string | TemplateRef<any> | Type<any>;\n\nexport type OverlayPlugin = <T>(component: any, dialogRef: DialogRef<T>, config: OverlayConfig) => DialogRef<any>;\n\nexport interface OverlayConfig {\n  /**\n   * The context for the modal, attached to the dialog instance, DialogRef.context.\n   * Default: {}\n   */\n  context?: OverlayContext;\n\n  injector?: Injector;\n\n  /**\n   * The element to block using the modal.\n   */\n  viewContainer?: WideVCRef;\n\n  renderer?: OverlayRenderer;\n\n  /**\n   * Not used yet.\n   */\n  overlayPlugins?: OverlayPlugin | Array<OverlayPlugin>;\n}\n\nexport interface ModalComponent<T> {\n  dialog: DialogRef<T>;\n}\n\nexport interface CloseGuard {\n  /**\n   * Invoked before a modal is dismissed.\n   */\n  beforeDismiss?(): boolean | Promise<boolean>;\n\n  /**\n   * Invoked before a modal is closed.\n   */\n  beforeClose?(): boolean | Promise<boolean>;\n}\n\nexport abstract class OverlayRenderer {\n  public abstract render(dialogRef: DialogRef<any>,\n                         vcRef: ViewContainerRef,\n                         injector?: Injector): ComponentRef<ModalOverlay>;\n}\n","import { ViewContainerRef } from '@angular/core';\n\nconst vcRefCollection: { [key: string]: ViewContainerRef[] } = {};\n\n\nfunction getVCRef(key: string): ViewContainerRef[] {\n  return vcRefCollection[key] ? vcRefCollection[key].slice() : [];\n}\n\nfunction setVCRef(key: string, vcRef: ViewContainerRef): void {\n  if (!vcRefCollection.hasOwnProperty(key)) {\n    vcRefCollection[key] = [];\n  }\n  vcRefCollection[key].push(vcRef);\n}\n\nfunction delVCRef(key: string, vcRef?: ViewContainerRef): void {\n  if (!vcRef) {\n    vcRefCollection[key] = [];\n  } else {\n    const coll = vcRefCollection[key] || [],\n      idx = coll.indexOf(vcRef);\n    if (idx > -1) {\n      coll.splice(idx, 1);\n    }\n  }\n}\n\n/**\n * A Simple store that holds a reference to ViewContainerRef instances by a user defined key.\n * This, with the OverlayTarget directive makes it easy to block the overlay inside an element\n * without having to use the angular query boilerplate.\n */\nexport const vcRefStore = {getVCRef, setVCRef, delVCRef};\n","import {\n  Directive,\n  Input,\n  ElementRef,\n  ViewContainerRef,\n  OnDestroy\n} from '@angular/core';\n\nimport { DialogRef } from '../models/dialog-ref';\nimport { vcRefStore } from '../models/vc-ref-store';\nimport { Overlay } from './overlay.service';\n\n/**\n * A directive use to signal the overlay that the host of this directive\n * is a dialog boundary, i.e: over click outside of the element should close the modal\n * (if non blocking)\n */\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[overlayDialogBoundary]'\n})\n// tslint:disable-next-line:directive-class-suffix\nexport class OverlayDialogBoundary {\n  constructor(el: ElementRef, dialogRef: DialogRef<any>) {\n    if (dialogRef && el.nativeElement) {\n      dialogRef.overlayRef.instance.setClickBoundary(el.nativeElement);\n    }\n  }\n\n}\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[overlayTarget]'\n})\n// tslint:disable-next-line:directive-class-suffix\nexport class OverlayTarget implements OnDestroy {\n  @Input('overlayTarget') set targetKey(value: string) {\n    this._targetKey = value;\n    if (value) {\n      vcRefStore.setVCRef(value, this.vcRef);\n    }\n  }\n\n  private _targetKey: string;\n\n  constructor(private vcRef: ViewContainerRef) {\n  }\n\n  ngOnDestroy() {\n    if (this._targetKey) {\n      vcRefStore.delVCRef(this._targetKey, this.vcRef);\n    }\n  }\n}\n","import { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n  ComponentRef,\n  Directive,\n  ElementRef,\n  OnDestroy,\n  Renderer2\n} from '@angular/core';\n\nimport { createComponent, CreateComponentArgs } from '../framework/createComponent';\n\nconst BROWSER_PREFIX = ['webkit', 'moz', 'MS', 'o', ''];\n\nfunction register(eventName, element, cb) {\n  BROWSER_PREFIX.forEach(p => {\n    element.addEventListener(p ? p + eventName : eventName.toLowerCase(), cb, false);\n  });\n}\n\n/**\n * A base class for supporting dynamic components.\n * There are 3 main support areas:\n * 1 - Easy wrapper for dynamic styling via CSS classes and inline styles.\n * 2 - Easy wrapper for interception of transition/animation end events.\n * 3 - Easy wrapper for component creation and injection.\n *\n * Dynamic css is done via direct element manipulation (via renderer), it does not use change detection\n * or binding. This is to allow better control over animation.\n *\n * Animation support is limited, only transition/keyframes END even are notified.\n * The animation support is needed since currently the angular animation module is limited as well and\n * does not support CSS animation that are not pre-parsed and are not in the styles metadata of a component.\n *\n * Capabilities: Add/Remove styls, Add/Remove classes, listen to animation/transition end event,\n * add components\n */\n// TODO: Add Angular decorator.\n@Directive()\nexport class BaseDynamicComponent implements OnDestroy {\n  animationEnd$: Observable<TransitionEvent | AnimationEvent>;\n\n  protected animationEnd: Subject<TransitionEvent | AnimationEvent>;\n\n  constructor(protected el: ElementRef,\n              protected renderer: Renderer2) {\n  }\n\n  activateAnimationListener() {\n    if (this.animationEnd) {\n      return;\n    }\n    this.animationEnd = new Subject<TransitionEvent | AnimationEvent>();\n    this.animationEnd$ = this.animationEnd.asObservable();\n    register('TransitionEnd', this.el.nativeElement, (e: TransitionEvent) => this.onEnd(e));\n    register('AnimationEnd', this.el.nativeElement, (e: AnimationEvent) => this.onEnd(e));\n  }\n\n  /**\n   * Set a specific inline style on the overlay host element.\n   * @param prop The style key\n   * @param value The value, undefined to remove\n   */\n  setStyle(prop: string, value: string): this {\n    this.renderer.setStyle(this.el.nativeElement, prop, value);\n    return this;\n  }\n\n  forceReflow() {\n    this.el.nativeElement.offsetWidth;\n  }\n\n  addClass(css: string, forceReflow: boolean = false): void {\n    css.split(' ')\n      .forEach(c => this.renderer.addClass(this.el.nativeElement, c));\n    if (forceReflow) {\n      this.forceReflow();\n    }\n  }\n\n  removeClass(css: string, forceReflow: boolean = false): void {\n    css.split(' ')\n      .forEach(c => this.renderer.removeClass(this.el.nativeElement, c));\n    if (forceReflow) {\n      this.forceReflow();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.animationEnd && !this.animationEnd.closed) {\n      this.animationEnd.complete();\n    }\n  }\n\n  myAnimationEnd$(): Observable<AnimationEvent | TransitionEvent> {\n    return this.animationEnd$.pipe(\n      filter(e => e.target === this.el.nativeElement)\n    );\n  }\n\n  /**\n   * Add a component, supply a view container ref.\n   * Note: The components vcRef will result in a sibling.\n   */\n  protected _addComponent<T>(instructions: CreateComponentArgs): ComponentRef<T> {\n    const cmpRef = createComponent(instructions);\n    cmpRef.changeDetectorRef.detectChanges();\n\n    return cmpRef;\n  }\n\n\n  private onEnd(event: TransitionEvent | AnimationEvent): void {\n\n    if (!this.animationEnd.closed) {\n      this.animationEnd.next(event);\n    }\n  }\n\n}\n","import {\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  Renderer2\n} from '@angular/core';\n\nimport { BaseDynamicComponent } from './base-dynamic-component';\n\n/**\n * Represents the modal backdrop shaped by CSS.\n */\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'css-backdrop',\n  host: {\n    '[attr.class]': 'cssClass',\n    '[attr.style]': 'styleStr'\n  },\n  encapsulation: ViewEncapsulation.None,\n  template: ``\n})\n// tslint:disable-next-line:component-class-suffix\nexport class CSSBackdrop extends BaseDynamicComponent {\n  public cssClass: string;\n  public styleStr: string;\n\n  constructor(el: ElementRef, renderer: Renderer2) {\n    super(el, renderer);\n    this.activateAnimationListener();\n\n    const style = {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      width: '100%',\n      height: '100%'\n    };\n    Object.keys(style).forEach(k => this.setStyle(k, style[k]));\n  }\n}\n","import {\n  Component,\n  ViewEncapsulation,\n  ElementRef,\n  Renderer2\n} from '@angular/core';\n\nimport { BaseDynamicComponent } from './base-dynamic-component';\nimport { DialogRef } from '../models/dialog-ref';\n\n/**\n * A component that acts as a top level container for an open modal window.\n */\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'css-dialog-container',\n  host: {\n    'tabindex': '-1',\n    'role': 'dialog'\n  },\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <ng-content></ng-content>`\n})\n// tslint:disable-next-line:component-class-suffix\nexport class CSSDialogContainer extends BaseDynamicComponent {\n\n  constructor(public dialog: DialogRef<any>, el: ElementRef, renderer: Renderer2) {\n    super(el, renderer);\n    this.activateAnimationListener();\n  }\n\n}\n","export { BaseDynamicComponent } from './base-dynamic-component';\nexport { CSSBackdrop } from './css-backdrop';\nexport { CSSDialogContainer } from './css-dialog-container';\n// export { FadeInBackdrop } from './fade-in-backdrop';\n// export { SplitScreenBackdrop } from './split-screen-backdrop';\n","declare const clearTimeout: any;\n\nimport {\n  Component,\n  ComponentRef,\n  ElementRef,\n  EmbeddedViewRef,\n  Injector,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n  Renderer2,\n  TemplateRef, HostListener\n} from '@angular/core';\n\nimport { PromiseCompleter, supportsKey } from '../framework/utils';\nimport { DialogRef } from '../models/dialog-ref';\nimport { ContainerContent } from '../models/tokens';\nimport { BaseDynamicComponent } from '../components/index';\n\n// TODO: use DI factory for this.\n// TODO: consolidate dup code\nconst isDoc: boolean = !(typeof document === 'undefined' || !document);\n\nexport interface EmbedComponentConfig {\n  component: any;\n  projectableNodes?: any[][];\n}\n\n/**\n * Represents the modal overlay.\n */\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'modal-overlay',\n  encapsulation: ViewEncapsulation.None,\n  templateUrl: './overlay.component.html'\n})\n// tslint:disable-next-line:component-class-suffix\nexport class ModalOverlay extends BaseDynamicComponent {\n  private beforeDestroyHandlers: Array<() => Promise<void>>;\n\n  @ViewChild('container', {read: ElementRef, static: true}) public container: ElementRef;\n  @ViewChild('innerView', {read: ViewContainerRef, static: true }) public innerVcr: ViewContainerRef;\n  @ViewChild('template', { static: true }) public template: TemplateRef<any>;\n\n  constructor(private dialogRef: DialogRef<any>,\n              private vcr: ViewContainerRef,\n              el: ElementRef,\n              renderer: Renderer2) {\n    super(el, renderer);\n    this.activateAnimationListener();\n  }\n\n  /**\n   * @internal\n   */\n  getProjectables<T>(content: ContainerContent): any[][] {\n\n    let nodes: any[];\n    if (typeof content === 'string') {\n      nodes = [[this.renderer.createText(`${content}`)]];\n    } else if (content instanceof TemplateRef) {\n      nodes = [this.vcr.createEmbeddedView(content, {$implicit: this.dialogRef.context, dialogRef: this.dialogRef}).rootNodes];\n    } else {\n      nodes = [this.embedComponent({component: content}).rootNodes];\n    }\n\n    return nodes;\n  }\n\n  embedComponent(config: EmbedComponentConfig): EmbeddedViewRef<EmbedComponentConfig> {\n    const ctx: EmbedComponentConfig & { injector: Injector } = <any>config;\n\n    return this.vcr.createEmbeddedView(this.template, <any>{\n      $implicit: ctx\n    });\n  }\n\n  addComponent<T>(type: any, projectableNodes: any[][] = []): ComponentRef<T> {\n    return super._addComponent<T>({\n      component: type,\n      vcRef: this.innerVcr,\n      projectableNodes\n    });\n  }\n\n  fullscreen(): void {\n    const style = {\n      position: 'fixed',\n      top: 0,\n      left: 0,\n      bottom: 0,\n      right: 0,\n      'z-index': 1500\n    };\n    Object.keys(style).forEach(k => this.setStyle(k, style[k]));\n  }\n\n  insideElement(): void {\n    const style = {\n      position: 'absolute',\n      overflow: 'hidden',\n      width: '100%',\n      height: '100%',\n      top: 0,\n      left: 0,\n      bottom: 0,\n      right: 0\n    };\n    Object.keys(style).forEach(k => this.setStyle(k, style[k]));\n  }\n\n  /**\n   * Set a specific inline style for the container of the whole dialog component\n   * The dialog component root element is the host of this component, it contains only 1 direct\n   * child which is the container.\n   *\n   * Structure:\n   *\n   * ```html\n   * <modal-overlay>\n   *   <div>\n   *     <!-- BACKDROP ELEMENT -->\n   *     <!-- DIALOG CONTAINER ELEMENT -->\n   *   </div>\n   * </modal-overlay>\n   * ```\n   *\n   * @param prop The style key\n   * @param value The value, undefined to remove\n   */\n  setContainerStyle(prop: string, value: string): this {\n    this.renderer.setStyle(this.container.nativeElement, prop, value);\n    return this;\n  }\n\n  /**\n   * Define an element that click inside it will not trigger modal close.\n   * Since events bubble, clicking on a dialog will bubble up to the overlay, a plugin\n   * must define an element that represent the dialog, the overlay will make sure no to close when\n   * it was clicked.\n   * @param element\n   */\n  setClickBoundary(element: Element): void {\n    let target: Element;\n    const elListener = event => target = event.target as any;\n    const docListener = event => {\n      if (this.dialogRef.context.isBlocking || !this.dialogRef.overlay.isTopMost(this.dialogRef)) {\n        return;\n      }\n\n      let current: any = event.target;\n\n      // on click, this will hit.\n      if (current === target) {\n        return;\n      }\n\n      // on mouse down -> drag -> release the current might not be 'target', it might be\n      // a sibling or a child (i.e: not part of the tree-up direction). It might also be a release\n      // outside the dialog... so we compare to the boundary element\n      do {\n        if (current === element) {\n          return;\n        }\n      } while (current.parentNode && (current = current.parentNode));\n      this.dialogRef.dismiss();\n    };\n\n    if (isDoc) {\n      this.dialogRef.onDestroy.subscribe(() => {\n        element.removeEventListener('click', elListener, false);\n        element.removeEventListener('touchstart', elListener, false);\n        document.removeEventListener('click', docListener, false);\n        document.removeEventListener('touchend', docListener, false);\n      });\n\n\n      setTimeout(() => {\n        element.addEventListener('mousedown', elListener, false);\n        element.addEventListener('touchstart', docListener, false);\n        document.addEventListener('click', docListener, false);\n        document.addEventListener('touchend', docListener, false);\n      });\n    }\n  }\n\n  /**\n   * Temp workaround for animation where destruction of the top level component does not\n   * trigger child animations. Solution should be found either in animation module or in design\n   * of the modal component tree.\n   */\n  canDestroy(): Promise<void> {\n    const completer = new PromiseCompleter<void>();\n\n    if (!Array.isArray(this.beforeDestroyHandlers)) {\n      completer.resolve();\n    } else {\n\n      // run destroy notification but protect against halt.\n      let id = setTimeout(() => {\n        id = null;\n        completer.reject();\n      }, 1000);\n\n      const resolve = () => {\n        if (id === null) {\n          return;\n        }\n\n        clearTimeout(id);\n        completer.resolve();\n      };\n\n      Promise.all(this.beforeDestroyHandlers.map(fn => fn()))\n        .then(resolve)\n        .catch(resolve);\n\n    }\n\n    return completer.promise;\n  }\n\n  /**\n   * A handler running before destruction of the overlay\n   * use to delay destruction due to animation.\n   * This is part of the workaround for animation, see canDestroy.\n   *\n   * NOTE: There is no guarantee that the listeners will fire, use dialog.onDestory for that.\n   * @param fn\n   */\n  beforeDestroy(fn: () => Promise<void>) {\n    if (!this.beforeDestroyHandlers) {\n      this.beforeDestroyHandlers = [];\n    }\n    this.beforeDestroyHandlers.push(fn);\n  }\n\n  @HostListener('body:keydown', ['$event'])\n  documentKeypress(event: KeyboardEvent) {\n    // check that this modal is the last in the stack.\n    if (!this.dialogRef.overlay.isTopMost(this.dialogRef)) {\n      return;\n    }\n\n\n    if (supportsKey(event.keyCode, <any>this.dialogRef.context.keyboard)) {\n      this.dialogRef.dismiss();\n    }\n  }\n\n  ngOnDestroy(): void {\n    super.ngOnDestroy();\n    if (this.dialogRef.destroyed !== true) {\n      // if we're here the overlay is destroyed by an external event that is not user invoked.\n      // i.e: The user did no call dismiss or close and dialogRef.destroy() did not invoke.\n      // this will happen when routing or killing an element containing a blocked overlay (ngIf)\n      // we bail out, i.e gracefully shutting down.\n      this.dialogRef.bailOut();\n    }\n  }\n}\n","<div #container>\n  <ng-template #innerView></ng-template>\n</div>\n<ng-template #template let-ctx>\n  <ng-container *ngComponentOutlet=\"ctx.component; injector: ctx.injector; content: ctx.projectableNodes\"></ng-container>\n</ng-template>","import { DialogRef } from './dialog-ref';\n\nconst BASKET_GROUP = {};\n\n/**\n * A dumb stack implementation over an array.\n */\nexport class DialogRefStack<T> {\n  private _stack: DialogRef<T>[];\n  private _stackMap: Map<DialogRef<T>, any>;\n\n  get length(): number {\n    return this._stack.length;\n  }\n\n  constructor() {\n    this._stack = [];\n    this._stackMap = new Map<DialogRef<T>, any>();\n  }\n\n  closeAll(result: any = null): void {\n    for (let i = 0, len = this._stack.length; i < len; i++) {\n      this._stack.pop().close(result);\n    }\n  }\n\n  push(dialogRef: DialogRef<T>, group?: any): void {\n    if (this._stack.indexOf(dialogRef) === -1) {\n      this._stack.push(dialogRef);\n      this._stackMap.set(dialogRef, group || BASKET_GROUP);\n    }\n  }\n\n  /**\n   * Push a DialogRef into the stack and manage it so when it's done\n   * it will automatically kick itself out of the stack.\n   * @param dialogRef\n   */\n  pushManaged(dialogRef: DialogRef<T>, group?: any): void {\n    this.push(dialogRef, group);\n    dialogRef.onDestroy.subscribe(() => this.remove(dialogRef));\n  }\n\n  pop(): DialogRef<T> {\n    const dialogRef = this._stack.pop();\n    this._stackMap.delete(dialogRef);\n    return dialogRef;\n  }\n\n  /**\n   * Remove a DialogRef from the stack.\n   * @param dialogRef\n   */\n  remove(dialogRef: DialogRef<T>): void {\n    let idx = this.indexOf(dialogRef);\n    if (idx > -1) {\n      this._stack.splice(idx, 1);\n      this._stackMap.delete(dialogRef);\n    }\n  }\n\n  index(index: number): DialogRef<T> {\n    return this._stack[index];\n  }\n\n  indexOf(dialogRef: DialogRef<T>): number {\n    return this._stack.indexOf(dialogRef);\n  }\n\n  groupOf(dialogRef: DialogRef<T>): any {\n    return this._stackMap.get(dialogRef);\n  }\n\n  groupBy(group: any): DialogRef<T>[] {\n    const arr = [];\n    if (group) {\n      this._stackMap.forEach((value, key) => {\n        if (value === group) {\n          arr.push(key);\n        }\n      });\n    }\n    return arr;\n  }\n\n  groupLength(group: any): number {\n    let count = 0;\n    if (group) {\n      this._stackMap.forEach((value) => {\n        if (value === group) {\n          count++;\n        }\n      });\n    }\n    return count;\n  }\n}\n","import { ViewContainerRef, Injectable, Injector } from '@angular/core';\n\nimport { OverlayRenderer, OverlayConfig } from '../models/tokens';\nimport { DialogRefStack } from '../models/dialog-ref-stack';\nimport { vcRefStore } from '../models/vc-ref-store';\nimport { DialogRef } from '../models/dialog-ref';\nimport { OverlayContext } from '../models/overlay-context';\n\nconst _stack = new DialogRefStack<any>();\n\n@Injectable()\nexport class Overlay {\n  get stackLength(): number {\n    return _stack.length;\n  }\n\n  constructor(private _modalRenderer: OverlayRenderer, protected injector: Injector) {\n  }\n\n  /**\n   * Check if a given DialogRef is the top most ref in the stack.\n   * TODO: distinguish between body modal vs in element modal.\n   * @param dialogRef\n   */\n  isTopMost(dialogRef: DialogRef<any>): boolean {\n    return _stack.indexOf(dialogRef) === _stack.length - 1;\n  }\n\n  stackPosition(dialogRef: DialogRef<any>) {\n    return _stack.indexOf(dialogRef);\n  }\n\n  groupStackLength(dialogRef: DialogRef<any>): number {\n    return _stack.groupLength(_stack.groupOf(dialogRef));\n  }\n\n  closeAll(result: any = null): void {\n      _stack.closeAll(result);\n  }\n\n  /**\n   * Creates an overlay and returns a dialog ref.\n   * @param config instructions how to create the overlay\n   * @param group A token to associate the new overlay with, used for reference (stacks usually)\n   */\n  open<T extends OverlayContext>(config: OverlayConfig, group?: any): DialogRef<T>[] {\n    const viewContainer = config.viewContainer;\n    let containers: Array<ViewContainerRef> = [];\n\n    if (typeof viewContainer === 'string') {\n      containers = vcRefStore.getVCRef(viewContainer as string);\n    } else if (Array.isArray(viewContainer)) {\n      containers = viewContainer as any;\n    } else if (viewContainer) {\n      containers = [viewContainer] as any;\n    } else {\n      containers = [null];\n    }\n\n    return containers\n      .map( vc => this.createOverlay(config.renderer || this._modalRenderer, vc, config, group));\n  }\n\n  private createOverlay(renderer: OverlayRenderer,\n                        vcRef: ViewContainerRef,\n                        config: OverlayConfig,\n                        group: any): DialogRef<any> {\n\n    if (config.context) {\n      config.context.normalize();\n    }\n\n    if (!config.injector) {\n      config.injector = this.injector;\n    }\n\n    const dialog = new DialogRef<any>(this, config.context || {});\n    dialog.inElement = config.context && !!config.context.inElement;\n\n    const cmpRef = renderer.render(dialog, vcRef, config.injector);\n\n    Object.defineProperty(dialog, 'overlayRef', {value: cmpRef});\n    _stack.pushManaged(dialog, group);\n\n    return dialog;\n  }\n}\n","import {\n  ApplicationRef,\n  ViewContainerRef,\n  ComponentRef,\n  Injector,\n  Injectable\n} from '@angular/core';\n\nimport { createComponent } from '../framework/createComponent';\nimport { DialogRef } from '../models/dialog-ref';\nimport { OverlayRenderer } from '../models/tokens';\nimport { ModalOverlay } from '../overlay/index';\n\n@Injectable()\nexport class DOMOverlayRenderer implements OverlayRenderer {\n\n  private isDoc: boolean = !(typeof document === 'undefined' || !document);\n\n  constructor(private appRef: ApplicationRef, private injector: Injector) {\n  }\n\n  render(dialog: DialogRef<any>, vcRef: ViewContainerRef, injector?: Injector): ComponentRef<ModalOverlay> {\n    if (!injector) {\n      injector = this.injector;\n    }\n\n    const cmpRef = createComponent({\n      component: ModalOverlay,\n      vcRef,\n      injector: Injector.create({\n        providers: [\n          {provide: DialogRef, useValue: dialog}\n        ],\n        parent: injector\n      })\n    });\n\n    if (!vcRef) {\n      this.appRef.attachView(cmpRef.hostView);\n\n      // TODO: doesn't look like this is needed, explore. leaving now to be on the safe side.\n      dialog.onDestroy.subscribe(() => this.appRef.detachView(cmpRef.hostView));\n    }\n\n    if (vcRef && dialog.inElement) {\n      vcRef.element.nativeElement.appendChild(cmpRef.location.nativeElement);\n    } else if (this.isDoc) {\n      document.body.appendChild(cmpRef.location.nativeElement);\n    }\n\n    return cmpRef;\n  }\n}\n\n","import { ComponentRef } from '@angular/core';\n\nimport { Overlay } from '../overlay/index';\nimport { Class } from '../framework/utils';\nimport { OverlayConfig, ContainerContent } from '../models/tokens';\nimport { DialogRef } from '../models/dialog-ref';\nimport { ModalControllingContextBuilder } from '../models/overlay-context';\n\nexport function unsupportedDropInError(dropInName: string): Error {\n  return new Error(`Unsupported Drop-In ${dropInName}`);\n}\n\nexport abstract class Modal {\n  constructor(public overlay: Overlay) {\n  }\n\n\n  alert(): ModalControllingContextBuilder<any> {\n    throw unsupportedDropInError('alert');\n  }\n\n  prompt(): ModalControllingContextBuilder<any> {\n    throw unsupportedDropInError('prompt');\n  }\n\n  confirm(): ModalControllingContextBuilder<any> {\n    throw unsupportedDropInError('confirm');\n  }\n\n  /**\n   * Opens a modal window inside an existing component.\n   * @param content The content to display, either string, template ref or a component.\n   * @param config Additional settings.\n   */\n  open(content: ContainerContent, config?: OverlayConfig): DialogRef<any> {\n    config = config || {} as any;\n    const dialogs = this.overlay.open(config, this.constructor);\n\n    if (dialogs.length > 1) {\n      console.warn(`Attempt to open more then 1 overlay detected.\n      Multiple modal copies are not supported at the moment,\n      only the first viewContainer will display.`);\n    }\n    // TODO:  Currently supporting 1 view container, hence working on dialogs[0].\n    //        upgrade to multiple containers.\n    return this.create(dialogs[0], content);\n  }\n\n  /**\n   * A Hook that enables derived classes to add content to the overlay.\n   * @param dialogRef\n   * @param type\n   */\n  protected abstract create(dialogRef: DialogRef<any>, type: ContainerContent): DialogRef<any>;\n\n\n  protected createBackdrop<T>(dialogRef: DialogRef<any>, BackdropComponent: Class<T>): ComponentRef<T> {\n    return dialogRef.overlayRef.instance.addComponent<T>(BackdropComponent);\n  }\n\n  protected createContainer<T>(\n    dialogRef: DialogRef<any>,\n    ContainerComponent: Class<T>,\n    content: ContainerContent): ComponentRef<T> {\n\n    const nodes: any[] = dialogRef.overlayRef.instance.getProjectables(content);\n    return dialogRef.overlayRef.instance.addComponent<T>(ContainerComponent, nodes);\n  }\n\n}\n","// heavily inspired by:\n// http://www.bennadel.com/blog/3025-creating-custom-dom-and-host-event-bindings-in-angular-2-beta-6.htm\n\nimport { Injectable } from '@angular/core';\nimport { EventManager } from '@angular/platform-browser';\nimport { noop } from '../framework/utils';\n\n// TODO: use DI factory for this.\n// TODO: consolidate dup code\nconst isDoc: boolean = !(typeof document === 'undefined' || !document);\n\nconst eventMap = {\n    clickOutside: 'click',\n    mousedownOutside: 'mousedown',\n    mouseupOutside: 'mouseup',\n    mousemoveOutside: 'mousemove'\n};\n\n/**\n * An event handler factory for event handlers that bubble the event to a given handler\n * if the event target is not an ancestor of the given element.\n * @param element\n * @param handler\n */\nfunction bubbleNonAncestorHandlerFactory(element: HTMLElement, handler: (event) => void) {\n    return (event) => {\n        let current = event.target;\n        do {\n            if (current === element) {\n                return;\n            }\n        } while (current.parentNode && ( current = current.parentNode ));\n\n        handler(event);\n    };\n}\n\n@Injectable()\nexport class DOMOutsideEventPlugin { // extends EventManagerPlugin\n    manager: EventManager;\n\n    constructor() {\n    if (!isDoc || typeof document.addEventListener !== 'function') {\n        this.addEventListener = noop as any;\n    }\n    }\n\n    supports(eventName: string): boolean {\n        return eventMap.hasOwnProperty(eventName);\n    }\n\n    addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n        const zone = this.manager.getZone();\n\n        // A Factory that registers the event on the document, instead of the element.\n        // the handler is created at runtime, and it acts as a propagation/bubble predicate, it will\n        // bubble up the event (i.e: execute our original event handler) only if the event targer\n        // is an ancestor of our element.\n        // The event is fired inside the angular zone so change detection can kick into action.\n        const onceOnOutside = () => {\n            const listener =\n              bubbleNonAncestorHandlerFactory(element, evt => zone.runGuarded(() => handler(evt)));\n\n            // mimic BrowserDomAdapter.onAndCancel\n            document.addEventListener(eventMap[eventName], listener, false);\n            return () => document.removeEventListener(eventMap[eventName], listener, false);\n        };\n\n        // we run the event registration for the document in a different zone, this will make sure\n        // change detection is off.\n        // It turns out that if a component that use DOMOutsideEventPlugin is built from a click\n        // event, we might get here before the event reached the document, causing a quick false\n        // positive handling (when stopPropagation() was'nt invoked). To workaround this we wait\n        // for the next vm turn and register.\n        // Event registration returns a dispose function for that event, angular use it to clean\n        // up after component get's destroyed. Since we need to return a dispose function\n        // synchronously we have to put a wrapper for it since we will get it asynchronously,\n        // i.e: after we need to return it.\n        //\n        return zone.runOutsideAngular(() => {\n            let fn: Function;\n            setTimeout(() => fn = onceOnOutside(), 0);\n            return () => {\n                if (fn) { fn(); }\n            };\n        });\n    }\n\n}\n","import { FluentAssign, FluentAssignMethod } from '../framework/fluent-assign';\nimport { extend, arrayUnion } from '../framework/utils';\nimport { DialogRef } from './dialog-ref';\nimport { WideVCRef, OverlayConfig } from './tokens';\n\nexport const DEFAULT_VALUES = {\n  inElement: false,\n  isBlocking: true,\n  keyboard: [27],\n  supportsKey: function supportsKey(keyCode: number): boolean {\n    return (<Array<number>>this.keyboard).indexOf(keyCode) > -1;\n  }\n};\n\nconst DEFAULT_SETTERS = [\n  'inElement',\n  'isBlocking',\n  'keyboard'\n];\n\nexport class OverlayContext {\n  /**\n   * Describes if the modal is rendered within the container element.\n   * The container element is the ViewContainerRef supplied.\n   * Defaults to false.\n   */\n  inElement: boolean;\n\n  /**\n   * Describes if the modal is blocking modal.\n   * A Blocking modal is not closable by clicking outside of the modal window.\n   * Defaults to false.\n   */\n  isBlocking: boolean;\n\n  /**\n   * Keyboard value/s that close the modal.\n   * Accepts either a single numeric value or an array of numeric values.\n   * A modal closed by a keyboard stroke will result in a 'reject' notification from the promise.\n   * Defaults to 27, set `null` implicitly to disable.\n   */\n  keyboard: Array<number> | number;\n\n  normalize(): void {\n    if (this.isBlocking !== false) {\n      this.isBlocking = true;\n    }\n\n    if (this.keyboard === null) {\n      this.keyboard = [];\n    } else if (typeof this.keyboard === 'number') {\n      this.keyboard = [<number>this.keyboard];\n    } else if (!Array.isArray(<Array<number>>this.keyboard)) {\n      this.keyboard = DEFAULT_VALUES.keyboard;\n    }\n  }\n}\n\n/**\n * A core context builder for a modal window instance, used to define the context upon\n * a modal choose it's behaviour.\n */\nexport class OverlayContextBuilder<T extends OverlayContext> extends FluentAssign<T> {\n  /**\n   * Describes if the modal is rendered within the container element.\n   * The container element is the ViewContainerRef supplied.\n   * Defaults to false.\n   */\n  inElement: FluentAssignMethod<boolean, this>;\n\n  /**\n   * Describes if the modal is blocking modal.\n   * A Blocking modal is not closable by clicking outside of the modal window.\n   * Defaults to false.\n   */\n  isBlocking: FluentAssignMethod<boolean, this>;\n\n  /**\n   * Keyboard value/s that close the modal.\n   * Accepts either a single numeric value or an array of numeric values.\n   * A modal closed by a keyboard stroke will result in a 'reject' notification from the promise.\n   * Defaults to 27, set `null` implicitly to disable.\n   */\n  keyboard: FluentAssignMethod<Array<number> | number, this>;\n\n\n  constructor(defaultValues?: T | T[],\n              initialSetters?: string[],\n              baseType?: new () => T) {\n    super(\n      extend<any>(DEFAULT_VALUES, defaultValues || {}),\n      arrayUnion<string>(DEFAULT_SETTERS, initialSetters || []),\n      baseType || <any>OverlayContext // https://github.com/Microsoft/TypeScript/issues/7234\n    );\n  }\n\n  /**\n   * Returns an new OverlayConfig with a context property representing the data in this builder.\n   * @param base A base configuration that the result will extend\n   */\n  toOverlayConfig(base?: OverlayConfig): OverlayConfig {\n    return extend(base || {}, {\n      context: this.toJSON()\n    });\n  }\n}\n\nexport interface ModalControllingContextBuilder<T> {\n  open(viewContainer?: WideVCRef): DialogRef<T>;\n}\n\n/**\n * A helper to create an `OverlayConfig` on the fly.\n * Since `OverlayConfig` requires context it means a builder is needed, this process had some boilerplate.\n * When a quick, on the fly overlay config is needed use this helper to avoid that boilerplate.\n *\n * A builder is used as an API to allow setting the context and providing some operations around the modal.\n * When a developers knows the context before hand we can skip this step, this is what this factory is for.\n *\n * @param context The context for the modal\n * @param baseContextType Optional. The type/class of the context. This is the class used to init a new instance of the context\n * @param baseConfig A base configuration that the result will extend\n */\nexport function overlayConfigFactory<T>(context: T, baseContextType?: any, baseConfig?: OverlayConfig): OverlayConfig {\n  return new OverlayContextBuilder<T & OverlayContext>(<any>context, undefined, baseContextType).toOverlayConfig(baseConfig);\n}\n","import { FluentAssignMethod } from '../framework/fluent-assign';\nimport { extend, arrayUnion } from '../framework/utils';\nimport { OverlayContext, OverlayContextBuilder } from './overlay-context';\n\nexport const DEFAULT_VALUES = {};\n\nconst DEFAULT_SETTERS = [\n  'message'\n];\n\nexport class ModalContext extends OverlayContext {\n  /**\n   * The core message to display.\n   * A modal might have an extended message (e.g: HTML message) or other fields (e.g: title) but\n   * all models, at core, convey a message thus message is common to all modals.\n   */\n  message: string;\n}\n\n/**\n * A core context builder for a modal window instance, used to define the context upon\n * a modal choose it's behaviour.\n */\nexport class ModalContextBuilder<T extends ModalContext> extends OverlayContextBuilder<T> {\n  /**\n   * The core message to display.\n   * A modal might have an extended message (e.g: HTML message) or other fields (e.g: title) but\n   * all models, at core, convey a message thus message is common to all modals.\n   */\n  message: FluentAssignMethod<string, this>;\n\n  constructor(\n    defaultValues?: T | T[],\n    initialSetters?: string[],\n    baseType?: new () => T\n  ) {\n    super(\n      extend<any>(DEFAULT_VALUES, defaultValues || {}),\n      arrayUnion<string>(DEFAULT_SETTERS, initialSetters || []),\n      baseType\n    );\n  }\n}\n","import { ResolvedReflectiveProvider } from '@angular/core';\n\nimport { FluentAssignMethod } from '../framework/fluent-assign';\nimport { ModalComponent, OverlayConfig, WideVCRef } from './tokens';\nimport { Modal } from '../providers/index';\nimport { DialogRef } from './dialog-ref';\nimport { ModalContext, ModalContextBuilder } from './modal-context';\nimport { ModalControllingContextBuilder } from './overlay-context';\n\nimport { arrayUnion } from '../framework/utils';\n\nconst DEFAULT_SETTERS = [\n  'component'\n];\n\nexport class ModalOpenContext extends ModalContext {\n  component: any;\n  modal: Modal;\n}\n\n/**\n * A Modal Context that knows about the modal service, and so can open a modal window on demand.\n * Use the fluent API to configure the preset and then invoke the 'open' method to open a modal\n * based on the context.\n */\nexport abstract class ModalOpenContextBuilder<T extends ModalOpenContext>\n                  extends ModalContextBuilder<T> implements ModalControllingContextBuilder<T> {\n\n  /**\n   * A Class for the footer container.\n   * Default: modal-footer\n   */\n  component: FluentAssignMethod<ModalComponent<T>, this>;\n\n  constructor(defaultValues?: T,\n              initialSetters?: string[],\n              baseType?: new () => T) {\n    super(\n      defaultValues || <any>{},\n      arrayUnion<string>(DEFAULT_SETTERS, initialSetters || []),\n      baseType\n    );\n  }\n\n  /**\n   * Hook to alter config and return bindings.\n   * @param config\n   */\n  protected $$beforeOpen(config: T): void { }\n\n  /**\n   * Open a modal window based on the configuration of this config instance.\n   * @param viewContainer If set opens the modal inside the supplied viewContainer\n   */\n  open(viewContainer?: WideVCRef): DialogRef<T> {\n    const context: T = this.toJSON();\n\n    if (!(context.modal instanceof Modal)) {\n      return <any>Promise.reject(new Error('Configuration Error: modal service not set.'));\n    }\n\n    this.$$beforeOpen(context);\n\n    const overlayConfig: OverlayConfig = {\n      context: context,\n      viewContainer: viewContainer\n    };\n\n    return context.modal.open(context.component, overlayConfig);\n  }\n}\n","import { ANALYZE_FOR_ENTRY_COMPONENTS, NgModule, ModuleWithProviders, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser';\n\nimport { DOMOutsideEventPlugin, DOMOverlayRenderer } from './providers/index';\nimport { OverlayRenderer } from './models/tokens';\nimport { CSSBackdrop, CSSDialogContainer } from './components/index';\nimport {\n  Overlay,\n  ModalOverlay,\n  OverlayDialogBoundary,\n  OverlayTarget\n} from './overlay/index';\n\n@NgModule({\n    declarations: [\n        ModalOverlay,\n        CSSBackdrop,\n        CSSDialogContainer,\n        OverlayDialogBoundary,\n        OverlayTarget\n    ],\n    imports: [CommonModule],\n    exports: [\n        CSSBackdrop,\n        CSSDialogContainer,\n        OverlayDialogBoundary,\n        OverlayTarget\n    ],\n    providers: [\n        Overlay\n    ]\n})\nexport class ModalModule {\n\n  /**\n   * Returns a ModalModule pre-loaded with a list of dynamically inserted components.\n   * Since dynamic components are not analysed by the angular compiler they must register manually\n   * using entryComponents, this is an easy way to do it.\n   * @param entryComponents A list of dynamically inserted components (dialog's).\n   */\n  static withComponents(entryComponents: Array<Type<any> | any[]>): ModuleWithProviders<ModalModule> {\n    return {\n      ngModule: ModalModule,\n      providers: [\n        {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: entryComponents, multi: true}\n      ]\n    };\n  }\n\n  /**\n   * Returns a NgModule for use in the root Module.\n   * @param entryComponents A list of dynamically inserted components (dialog's).\n   */\n  static forRoot(entryComponents?: Array<Type<any> | any[]>): ModuleWithProviders<ModalModule> {\n    return {\n      ngModule: ModalModule,\n      providers: [\n        {provide: OverlayRenderer, useClass: DOMOverlayRenderer},\n        {provide: EVENT_MANAGER_PLUGINS, useClass: DOMOutsideEventPlugin, multi: true},\n        {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: entryComponents || [], multi: true}\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DialogRef","isDoc","i1.OverlayRenderer","DEFAULT_VALUES","DEFAULT_SETTERS"],"mappings":"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"}