{"version":3,"file":"bs-dropdown.directive.js","sourceRoot":"","sources":["../../src/dropdown/bs-dropdown.directive.ts"],"names":[],"mappings":"OAAO,EACL,SAAS,EAAE,UAAU,EAA8C,KAAK,EAAqB,MAAM,EACnG,QAAQ,EAAE,gBAAgB,EAC3B,MAAM,eAAe;OAEf,0BAA0B;OAC1B,EAAmB,sBAAsB,EAAE,MAAM,qBAAqB;OAEtE,EAAE,gBAAgB,EAAE,MAAM,sBAAsB;OAChD,EAAE,4BAA4B,EAAE,MAAM,mCAAmC;OACzE,EAAE,eAAe,EAAE,MAAM,qBAAqB;OAG9C,EAAE,KAAK,EAAE,MAAM,+BAA+B;AAGrD;IAuFE,6BAAoB,WAAuB,EACvB,SAAmB,EACnB,iBAAmC,EACnC,IAA4B,EAC5B,OAAyB,EACzB,MAAuB;QALvB,gBAAW,GAAX,WAAW,CAAY;QACvB,cAAS,GAAT,SAAS,CAAU;QACnB,sBAAiB,GAAjB,iBAAiB,CAAkB;QACnC,SAAI,GAAJ,IAAI,CAAwB;QAC5B,YAAO,GAAP,OAAO,CAAkB;QACzB,WAAM,GAAN,MAAM,CAAiB;QAd3C,iCAAiC;QACzB,kBAAa,GAAG,KAAK,CAAC;QAMtB,mBAAc,GAAmB,EAAE,CAAC;QAQ1C,mCAAmC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;aACvB,YAAY,CAA+B,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC;aACpG,OAAO,CAAC,EAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QAExC,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACjD,CAAC;IA9EA,sBAAI,0CAAS;aAMd;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/B,CAAC;QAZD;;;WAGG;aACF,UAAc,KAAc;YAC3B,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;YAChC,CAAC;QACH,CAAC;;;OAAA;;IASA,sBAAI,2CAAU;aAQf,cAA4B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAXtD;;WAEG;aACF,UAAe,KAAc;YAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACV,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;;;OAAA;IAOA,sBAAI,uCAAM;QAHX;;WAEG;aACF;YACC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,CAAC;aAED,UAAW,KAAc;YACvB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACV,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;;;OARA;IAmBD,sBAAI,sCAAK;aAAT;YACE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;;;OAAA;IA4BD,sCAAQ,GAAR;QAAA,iBA0BC;QAzBC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAEnC,uBAAuB;QACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,IAAI,EAAE,EAAX,CAAW;SACxB,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;aACjC,WAAW,CAAC,SAAS,CAAC,UAAC,KAAc,IAAK,OAAA,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAlB,CAAkB,CAAC,CAAC,CAAC;QAElE,6CAA6C;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;aACjC,gBAAgB;aAChB,MAAM,CAAC,UAAC,KAAc,IAAK,OAAA,KAAK,KAAK,IAAI,EAAd,CAAc,CAAC;aAC1C,SAAS,CAAC,UAAC,KAAc,IAAK,OAAA,KAAI,CAAC,IAAI,EAAE,EAAX,CAAW,CAAC,CAAC,CAAC;QAE/C,0CAA0C;QAC1C,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,YAAY;iBACrB,IAAI,CAAC,UAAC,YAAoD;gBACzD,KAAI,CAAC,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,kBAAkB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,kCAAI,GAAJ;QAAA,iBAgCC;QA/BC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC;QACT,CAAC;QAED,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY;aACrB,IAAI,CAAC,UAAC,YAAY;YACjB,qDAAqD;YACrD,IAAM,OAAO,GAAG,KAAI,CAAC,MAAM,KAAK,IAAI;gBAClC,CAAC,OAAO,KAAI,CAAC,MAAM,KAAK,WAAW,IAAI,KAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;YAChE,KAAI,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;YAChD,IAAM,UAAU,GAAG,KAAI,CAAC,SAAS;gBAC/B,CAAC,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;YAEzC,gBAAgB;YAChB,KAAI,CAAC,SAAS;iBACX,MAAM,CAAC,4BAA4B,CAAC;iBACpC,EAAE,CAAC,KAAI,CAAC,SAAS,CAAC;iBAClB,QAAQ,CAAC,EAAC,UAAU,EAAE,UAAU,EAAC,CAAC;iBAClC,IAAI,CAAC;gBACJ,OAAO,EAAE,YAAY,CAAC,WAAW;gBACjC,SAAS,EAAE,UAAU;aACtB,CAAC,CAAC;YAEL,KAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,kCAAI,GAAJ;QACE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC;QACT,CAAC;QAED,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,oCAAM,GAAN,UAAO,KAAe;QACpB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,yCAAW,GAAX;QACE,8CAA8C;QAC9C,GAAG,CAAC,CAAc,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,CAAC;YAAjC,IAAM,GAAG,SAAA;YACZ,GAAG,CAAC,WAAW,EAAE,CAAC;SACnB;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACI,8BAAU,GAA0B;QAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oBACxB,QAAQ,EAAE,yBAAyB;oBACnC,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE,CAAC,eAAe,CAAC;oBAC5B,IAAI,EAAE;wBACJ,gBAAgB,EAAE,QAAQ;wBAC1B,cAAc,EAAE,QAAQ;wBACxB,cAAc,EAAE,iBAAiB;qBAClC;iBACF,EAAG,EAAE;KACL,CAAC;IACF,kBAAkB;IACX,kCAAc,GAAmE,cAAM,OAAA;QAC9F,EAAC,IAAI,EAAE,UAAU,GAAG;QACpB,EAAC,IAAI,EAAE,QAAQ,GAAG;QAClB,EAAC,IAAI,EAAE,gBAAgB,GAAG;QAC1B,EAAC,IAAI,EAAE,sBAAsB,GAAG;QAChC,EAAC,IAAI,EAAE,gBAAgB,GAAG;QAC1B,EAAC,IAAI,EAAE,eAAe,GAAG;KACxB,EAP6F,CAO7F,CAAC;IACK,kCAAc,GAA2C;QAChE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC9B,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAChC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9B,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;KAC9B,CAAC;IACF,0BAAC;AAAD,CAAC,AAhPD,IAgPC","sourcesContent":["import {\n  Directive, ElementRef, EmbeddedViewRef, EventEmitter, HostBinding, Input, OnDestroy, OnInit, Output,\n  Renderer, ViewContainerRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs/Subscription';\nimport 'rxjs/add/operator/filter';\nimport { ComponentLoader, ComponentLoaderFactory } from '../component-loader';\n\nimport { BsDropdownConfig } from './bs-dropdown.config';\nimport { BsDropdownContainerComponent } from './bs-dropdown-container.component';\nimport { BsDropdownState } from './bs-dropdown.state';\nimport { BsComponentRef } from '../component-loader/bs-component-ref.class';\nimport { BsDropdownMenuDirective } from './';\nimport { isBs3 } from '../utils/ng2-bootstrap-config';\n\n\nexport class BsDropdownDirective implements OnInit, OnDestroy {\n  /**\n   * Placement of a popover. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n   */\n   placement: string;\n  /**\n   * Specifies events that should trigger. Supports a space separated list of\n   * event names.\n   */\n   triggers: string;\n  /**\n   * A selector specifying the element the popover should be appended to.\n   * Currently only supports \"body\".\n   */\n   container: string;\n\n  /**\n   * This attribute indicates that the dropdown should be opened upwards\n   */\n   dropup: boolean;\n\n  /**\n   * Indicates that dropdown will be closed on item or document click,\n   * and after pressing ESC\n   */\n   set autoClose(value: boolean) {\n    if (typeof value === 'boolean') {\n      this._state.autoClose = value;\n    }\n  };\n\n  get autoClose(): boolean {\n    return this._state.autoClose;\n  }\n\n  /**\n   * Disables dropdown toggle and hides dropdown menu if opened\n   */\n   set isDisabled(value: boolean) {\n    this._isDisabled = value;\n    this._state.isDisabledChange.emit(value);\n    if (value) {\n      this.hide();\n    }\n  }\n\n  get isDisabled(): boolean { return this._isDisabled; }\n\n  /**\n   * Returns whether or not the popover is currently being shown\n   */\n   get isOpen(): boolean {\n    if (this._showInline) {\n      return this._isInlineOpen;\n    }\n    return this._dropdown.isShown;\n  }\n\n  set isOpen(value: boolean) {\n    if (value) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Emits an event when the popover is shown\n   */\n   onShown: EventEmitter<any>;\n  /**\n   * Emits an event when the popover is hidden\n   */\n   onHidden: EventEmitter<any>;\n\n  get isBs4(): boolean {\n    return !isBs3();\n  }\n  // todo: move to component loader\n  private _isInlineOpen = false;\n  private _showInline: boolean;\n  private _inlinedMenu: EmbeddedViewRef<BsDropdownMenuDirective>;\n\n  private _isDisabled: boolean;\n  private _dropdown: ComponentLoader<BsDropdownContainerComponent>;\n  private _subscriptions: Subscription[] = [];\n\n  constructor(private _elementRef: ElementRef,\n              private _renderer: Renderer,\n              private _viewContainerRef: ViewContainerRef,\n              private _cis: ComponentLoaderFactory,\n              private _config: BsDropdownConfig,\n              private _state: BsDropdownState) {\n    // create dropdown component loader\n    this._dropdown = this._cis\n      .createLoader<BsDropdownContainerComponent>(this._elementRef, this._viewContainerRef, this._renderer)\n      .provide({provide: BsDropdownState, useValue: this._state});\n\n    this.onShown = this._dropdown.onShown;\n    this.onHidden = this._dropdown.onHidden;\n\n    // set initial dropdown state from config\n    this._state.autoClose = this._config.autoClose;\n  }\n\n  ngOnInit(): void {\n    this._showInline = !this.container;\n\n    // attach DOM listeners\n    this._dropdown.listen({\n      triggers: this.triggers,\n      show: () => this.show()\n    });\n\n    // toggle visibility on toggle element click\n    this._subscriptions.push(this._state\n      .toggleClick.subscribe((value: boolean) => this.toggle(value)));\n\n    // hide dropdown if set disabled while opened\n    this._subscriptions.push(this._state\n      .isDisabledChange\n      .filter((value: boolean) => value === true)\n      .subscribe((value: boolean) => this.hide()));\n\n    // attach dropdown menu inside of dropdown\n    if (this._showInline) {\n      this._state.dropdownMenu\n        .then((dropdownMenu:BsComponentRef<BsDropdownMenuDirective>) => {\n          this._inlinedMenu = dropdownMenu.viewContainer.createEmbeddedView(dropdownMenu.templateRef);\n        });\n    }\n  }\n\n  /**\n   * Opens an element’s popover. This is considered a “manual” triggering of\n   * the popover.\n   */\n  show(): void {\n    if (this.isOpen || this.isDisabled) {\n      return;\n    }\n\n    if (this._showInline) {\n      this._isInlineOpen = true;\n      this._state.isOpenChange.emit(true);\n      return;\n    }\n\n    this._state.dropdownMenu\n      .then((dropdownMenu) => {\n        // check direction in which dropdown should be opened\n        const _dropup = this.dropup === true ||\n          (typeof this.dropup !== 'undefined' && this.dropup !== false);\n        this._state.direction = _dropup ? 'up' : 'down';\n        const _placement = this.placement ||\n          (_dropup ? 'top left' : 'bottom left');\n\n        // show dropdown\n        this._dropdown\n          .attach(BsDropdownContainerComponent)\n          .to(this.container)\n          .position({attachment: _placement})\n          .show({\n            content: dropdownMenu.templateRef,\n            placement: _placement\n          });\n\n        this._state.isOpenChange.emit(true);\n      });\n  }\n\n  /**\n   * Closes an element’s popover. This is considered a “manual” triggering of\n   * the popover.\n   */\n  hide(): void {\n    if (!this.isOpen) {\n      return;\n    }\n\n    if (this._showInline) {\n      this._isInlineOpen = false;\n    } else {\n      this._dropdown.hide();\n    }\n\n    this._state.isOpenChange.emit(false);\n  }\n\n  /**\n   * Toggles an element’s popover. This is considered a “manual” triggering of\n   * the popover.\n   */\n  toggle(value?: boolean): void {\n    if (this.isOpen || value === false) {\n      return this.hide();\n    }\n\n    return this.show();\n  }\n\n  ngOnDestroy(): void {\n    // clean up subscriptions and destroy dropdown\n    for (const sub of this._subscriptions) {\n      sub.unsubscribe();\n    }\n    this._dropdown.dispose();\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n  selector: '[bsDropdown],[dropdown]',\n  exportAs: 'bs-dropdown',\n  providers: [BsDropdownState],\n  host: {\n    '[class.dropup]': 'dropup',\n    '[class.open]': 'isOpen',\n    '[class.show]': 'isOpen && isBs4'\n  }\n}, ] },\n];\n/** @nocollapse */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Renderer, },\n{type: ViewContainerRef, },\n{type: ComponentLoaderFactory, },\n{type: BsDropdownConfig, },\n{type: BsDropdownState, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'placement': [{ type: Input },],\n'triggers': [{ type: Input },],\n'container': [{ type: Input },],\n'dropup': [{ type: Input },],\n'autoClose': [{ type: Input },],\n'isDisabled': [{ type: Input },],\n'isOpen': [{ type: Input },],\n'onShown': [{ type: Output },],\n'onHidden': [{ type: Output },],\n};\n}\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n"]}