{"version":3,"file":"ng-doc-ui-kit-components-toggle.mjs","sources":["../../../../libs/ui-kit/components/toggle/toggle.component.ts","../../../../libs/ui-kit/components/toggle/toggle.component.html","../../../../libs/ui-kit/components/toggle/ng-doc-ui-kit-components-toggle.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  HostBinding,\n  inject,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { NgDocPositionUtils } from '@ng-doc/ui-kit/utils';\nimport { DICompareHost, DIStateControl, injectHostControl } from 'di-controls';\nimport { fromEvent } from 'rxjs';\nimport { filter, last, map, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';\n\n@Component({\n  selector: 'ng-doc-toggle',\n  templateUrl: './toggle.component.html',\n  styleUrls: ['./toggle.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class NgDocToggleComponent<T>\n  extends DIStateControl<T>\n  implements OnInit, ControlValueAccessor\n{\n  @ViewChild('wrapper', { static: true })\n  private wrapper?: ElementRef<HTMLElement>;\n\n  @ViewChild('circle', { static: true })\n  private circle?: ElementRef<HTMLElement>;\n\n  @HostBinding('attr.data-ng-doc-dragging')\n  dragging: boolean = false;\n\n  private maxPixelValue: number = 0;\n\n  constructor() {\n    super({\n      host: injectHostControl({ optional: true }),\n      compareHost: inject(DICompareHost, { optional: true }),\n      onIncomingUpdate: () => {\n        this.setState(!!this.checked());\n      },\n    });\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    if (this.wrapper && this.circle) {\n      this.maxPixelValue =\n        this.wrapper.nativeElement.offsetWidth - this.circle.nativeElement.offsetWidth - 6;\n      fromEvent(this.circle.nativeElement, 'mousedown')\n        .pipe(\n          filter(() => !this.disabled),\n          switchMap(() => {\n            const transition: string = this.circle?.nativeElement.style.transition ?? '';\n            this.renderer.setStyle(this.circle?.nativeElement, 'transition', '');\n            this.setDragging(true);\n\n            return fromEvent(document.body, 'mousemove').pipe(\n              pairwise(),\n              map(\n                ([newEvent, oldEvent]: [Event, Event]) =>\n                  [newEvent, oldEvent] as [MouseEvent, MouseEvent],\n              ),\n              map(\n                ([newEvent, oldEvent]: [MouseEvent, MouseEvent]) =>\n                  oldEvent.clientX - newEvent.clientX,\n              ),\n              filter((deltaX: number) => deltaX !== 0),\n              tap((deltaX: number) => this.changeCirclePosition(deltaX)),\n              startWith(null),\n              takeUntil(\n                fromEvent(document.body, 'mouseup').pipe(tap(() => this.setDragging(false))),\n              ),\n              last(),\n              tap(\n                () =>\n                  this.circle &&\n                  this.renderer.setStyle(this.circle.nativeElement, 'transition', transition),\n              ),\n            );\n          }),\n          takeUntilDestroyed(this['destroyRef']),\n        )\n        .subscribe((deltaX: number | null) => {\n          deltaX === null ? this.toggle() : this.detectByCoordinates();\n        });\n    }\n  }\n\n  override updateModel(value: boolean | T | null): void {\n    super.updateModel(value);\n    this.setState(!!this.checked);\n  }\n\n  protected setState(isSelected: boolean): void {\n    isSelected\n      ? this.circle &&\n        this.renderer.setStyle(\n          this.circle.nativeElement,\n          'transform',\n          `translateX(${this.maxPixelValue}px)`,\n        )\n      : this.circle &&\n        this.renderer.setStyle(this.circle.nativeElement, 'transform', `translateX(0)`);\n  }\n\n  private setDragging(value: boolean): void {\n    this.dragging = value;\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private detectByCoordinates(): void {\n    if (!this.disabled && this.wrapper && this.circle) {\n      const wrapperMiddle: number =\n        NgDocPositionUtils.getElementPosition(this.wrapper.nativeElement).x +\n        this.wrapper.nativeElement.offsetWidth / 2;\n      const circleCenterLeft: number =\n        NgDocPositionUtils.getElementPosition(this.circle.nativeElement).x +\n        this.circle.nativeElement.offsetWidth / 2;\n      circleCenterLeft > wrapperMiddle ? this.check() : this.uncheck();\n      this.setState(!!this.checked);\n    }\n  }\n\n  private changeCirclePosition(delta: number): void {\n    if (this.wrapper && this.circle) {\n      const wrapperLeft: number = NgDocPositionUtils.getElementPosition(\n        this.wrapper.nativeElement,\n      ).x;\n      const circleLeft: number = NgDocPositionUtils.getElementPosition(this.circle.nativeElement).x;\n      const newPosition: number = Math.max(\n        Math.min(circleLeft - wrapperLeft - 3 + delta, this.maxPixelValue),\n        0,\n      );\n      this.renderer.setStyle(\n        this.circle.nativeElement,\n        'transform',\n        `translateX(${newPosition}px)`,\n      );\n    }\n  }\n}\n","<div class=\"ng-doc-toggle-wrapper\" (click)=\"toggle()\" #wrapper>\n\t<div class=\"ng-doc-toggle-circle\" #circle></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}