{"version":3,"file":"toolbox-dropdown.mjs","sources":["../../../projects/toolbox/dropdown/dropdown-toggle-status.ts","../../../projects/toolbox/dropdown/dropdown.directive.ts","../../../projects/toolbox/dropdown/dropdown-menu.directive.ts","../../../projects/toolbox/dropdown/dropdown-toggle.directive.ts","../../../projects/toolbox/dropdown/simple-dropdown.directive.ts","../../../projects/toolbox/dropdown/dropdown.module.ts","../../../projects/toolbox/dropdown/toolbox-dropdown.ts"],"sourcesContent":["export enum TbxDropdownToggleStatus\r\n{\r\n  open  = 0,\r\n  close = 1\r\n}\r\n","import { Directive, ElementRef, Renderer2 } from \"@angular/core\";\r\nimport { Subject, Observable } from \"rxjs\";\r\nimport { TbxDropdownToggleStatus } from \"./dropdown-toggle-status\";\r\n\r\n@Directive( {\r\n  selector: \"[tbxDropdown]\",\r\n  exportAs: \"tbxDropdown\"\r\n} )\r\nexport class TbxDropdownDirective {\r\n  /** The current status of the dropdown menu. */\r\n  private status: TbxDropdownToggleStatus = TbxDropdownToggleStatus.close;\r\n\r\n  /** An observable for the open/close status. */\r\n  private status$: Subject<TbxDropdownToggleStatus> =\r\n    new Subject<TbxDropdownToggleStatus>();\r\n\r\n  public constructor( private elementRef: ElementRef, private renderer: Renderer2 ) {\r\n  }\r\n\r\n  public toggle(): void {\r\n    if( this.status === TbxDropdownToggleStatus.open ) {\r\n      this.close();\r\n    }\r\n    else {\r\n      this.open();\r\n    }\r\n  }\r\n\r\n  public open(): void {\r\n    if( this.status !== TbxDropdownToggleStatus.open ) {\r\n      this.status$.next( TbxDropdownToggleStatus.open );\r\n    }\r\n\r\n    this.status = TbxDropdownToggleStatus.open;\r\n    this.renderer.addClass( this.elementRef.nativeElement, \"show\" );\r\n  }\r\n\r\n  public close(): void {\r\n    if( this.status !== TbxDropdownToggleStatus.close ) {\r\n      this.status$.next( TbxDropdownToggleStatus.close );\r\n    }\r\n\r\n    this.status = TbxDropdownToggleStatus.close;\r\n    this.renderer.removeClass( this.elementRef.nativeElement, \"show\" );\r\n  }\r\n\r\n  public statusChange(): Observable<TbxDropdownToggleStatus> {\r\n    return this.status$.asObservable();\r\n  }\r\n}\r\n","/* eslint-disable no-extra-boolean-cast */\r\nimport { Directive, ElementRef, Host, OnInit, OnDestroy, Renderer2 } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\nimport { TbxDropdownToggleStatus } from \"./dropdown-toggle-status\";\r\nimport { TbxDropdownDirective } from \"./dropdown.directive\";\r\n\r\n@Directive( {\r\n  selector: \"[tbxDropdownMenu]\",\r\n  exportAs: \"tbxDropdownMenu\"\r\n} )\r\nexport class TbxDropdownMenuDirective implements OnInit, OnDestroy {\r\n  /** Used to stop subscription to the dropdown control status change. */\r\n  private ngUnsubscribe: Subject<void> = new Subject<void>();\r\n\r\n  /** The bind to the document click event. */\r\n  private onDocumentClickBound: any;\r\n\r\n  public constructor(\r\n    private elementRef: ElementRef,\r\n    @Host() public dropdown: TbxDropdownDirective,\r\n    private renderer: Renderer2\r\n  ) {\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.dropdown.statusChange()\r\n        .pipe( takeUntil( this.ngUnsubscribe ) )\r\n        .subscribe( ( newStatus: TbxDropdownToggleStatus ) => {\r\n          if( newStatus === TbxDropdownToggleStatus.open ) {\r\n            // Listen to click events to realize when to close the dropdown.\r\n            if( !( Boolean( this.onDocumentClickBound ) ) ) {\r\n              this.onDocumentClickBound = this.onDocumentClick.bind( this );\r\n            }\r\n\r\n            document.addEventListener( \"click\", this.onDocumentClickBound, true );\r\n            this.renderer.addClass( this.elementRef.nativeElement, \"show\" );\r\n          }\r\n          else {\r\n            document.removeEventListener( \"click\", this.onDocumentClickBound, true );\r\n            this.renderer.removeClass( this.elementRef.nativeElement, \"show\" );\r\n          }\r\n        } );\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.ngUnsubscribe.next();\r\n    this.ngUnsubscribe.complete();\r\n\r\n    document.removeEventListener( \"click\", this.onDocumentClickBound, true );\r\n  }\r\n\r\n  public onDocumentClick( event: MouseEvent ): void {\r\n    const target: EventTarget | null = event.target;\r\n    if( target instanceof HTMLElement && target.hasAttribute( \"tbxDropdownToggle\" ) ) {\r\n      // Ignore dropdownToggle element, even if it's outside the menu.\r\n      return;\r\n    }\r\n\r\n    const isInsideClick = this.elementRef.nativeElement.contains( target );\r\n    if( !( Boolean( isInsideClick ) ) || target instanceof HTMLElement ) {\r\n      this.dropdown.close();\r\n    }\r\n    else {\r\n      this.dropdown.open();\r\n    }\r\n  }\r\n}\r\n","import { Directive, Host, HostListener } from \"@angular/core\";\r\n\r\nimport { TbxDropdownDirective } from \"./dropdown.directive\";\r\n\r\n@Directive( {\r\n    selector: \"[tbxDropdownToggle]\",\r\n    exportAs: \"tbxDropdownToggle\"\r\n} )\r\nexport class TbxDropdownToggleDirective\r\n{\r\n  public constructor( @Host() public dropdown: TbxDropdownDirective )\r\n  {\r\n  }\r\n\r\n  @HostListener( \"click\" )\r\n  public toggle(): void\r\n  {\r\n    this.dropdown.toggle();\r\n  }\r\n}\r\n","import { Directive, HostBinding, HostListener } from \"@angular/core\";\r\n\r\n/**\r\n * A simple directive to toggle a dropdown open or close.\r\n * @example\r\n * <div class=\"btn-group\">\r\n *  <button class=\"btn btn-secondary\" tbxSimpleDropdown #dd=\"tbxSimpleDropdown\">\r\n *    Action\r\n *  </button>\r\n *  <div [ngClass]=\"{'show':dd.isOpen}\" class=\"dropdown-menu\">\r\n *    <a class=\"dropdown-item\">Option 1</a>\r\n *  </div>\r\n * </div>\r\n */\r\n@Directive( {\r\n  selector: \"[tbxSimpleDropdown]\",\r\n  exportAs: \"tbxSimpleDropdown\"\r\n} )\r\nexport class TbxSimpleDropdownDirective {\r\n  /** The value indicating whether the dropdown is in an open state. */\r\n  @HostBinding( \"class.show\" )\r\n  public isOpen = false;\r\n\r\n  /** Flag whether the last click was inside component. */\r\n  private wasInside = false;\r\n\r\n  /** Called when a click is detected on the dropdown component. */\r\n  @HostListener( \"click\" )\r\n  public toggleOpen(): void {\r\n    this.isOpen = !this.isOpen;\r\n    this.wasInside = true;\r\n  }\r\n\r\n  /**\r\n   * Called when a click is detected in the Document to open/close the dropdown.\r\n   * https://stackoverflow.com/a/46656671\r\n   */\r\n  @HostListener( \"document:click\" )\r\n  public clickOut(): void {\r\n    if( !this.wasInside ) {\r\n      this.isOpen = false;\r\n    }\r\n\r\n    this.wasInside = false;\r\n  }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\n\r\nimport { TbxDropdownDirective } from \"./dropdown.directive\";\r\nimport { TbxDropdownToggleDirective } from \"./dropdown-toggle.directive\";\r\nimport { TbxDropdownMenuDirective } from \"./dropdown-menu.directive\";\r\nimport { TbxSimpleDropdownDirective } from \"./simple-dropdown.directive\";\r\n\r\n@NgModule( {\r\n  exports: [\r\n    TbxDropdownDirective,\r\n    TbxDropdownToggleDirective,\r\n    TbxDropdownMenuDirective,\r\n    TbxSimpleDropdownDirective\r\n  ],\r\n  imports: [\r\n    TbxDropdownDirective,\r\n    TbxDropdownToggleDirective,\r\n    TbxDropdownMenuDirective,\r\n    TbxSimpleDropdownDirective\r\n  ]\r\n} )\r\nexport class TbxDropdownModule\r\n{\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TbxDropdownDirective"],"mappings":"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"}