{"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\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tHostBinding,\n\tinject,\n\tOnInit,\n\tViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { NgDocPositionUtils } from '@ng-doc/ui-kit/utils';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\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\tselector: 'ng-doc-toggle',\n\ttemplateUrl: './toggle.component.html',\n\tstyleUrls: ['./toggle.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstandalone: true,\n})\n@UntilDestroy()\nexport class NgDocToggleComponent<T>\n\textends DIStateControl<T>\n\timplements OnInit, ControlValueAccessor\n{\n\t@ViewChild('wrapper', { static: true })\n\tprivate wrapper?: ElementRef<HTMLElement>;\n\n\t@ViewChild('circle', { static: true })\n\tprivate circle?: ElementRef<HTMLElement>;\n\n\t@HostBinding('attr.data-ng-doc-dragging')\n\tdragging: boolean = false;\n\n\tprivate maxPixelValue: number = 0;\n\n\tconstructor() {\n\t\tsuper({\n\t\t\thost: injectHostControl({ optional: true }),\n\t\t\tcompareHost: inject(DICompareHost, { optional: true }),\n\t\t\tonIncomingUpdate: () => {\n\t\t\t\tthis.setState(!!this.checked());\n\t\t\t},\n\t\t});\n\t}\n\n\toverride ngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tif (this.wrapper && this.circle) {\n\t\t\tthis.maxPixelValue =\n\t\t\t\tthis.wrapper.nativeElement.offsetWidth - this.circle.nativeElement.offsetWidth - 6;\n\t\t\tfromEvent(this.circle.nativeElement, 'mousedown')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter(() => !this.disabled),\n\t\t\t\t\tswitchMap(() => {\n\t\t\t\t\t\tconst transition: string = this.circle?.nativeElement.style.transition ?? '';\n\t\t\t\t\t\tthis.renderer.setStyle(this.circle?.nativeElement, 'transition', '');\n\t\t\t\t\t\tthis.setDragging(true);\n\n\t\t\t\t\t\treturn fromEvent(document.body, 'mousemove').pipe(\n\t\t\t\t\t\t\tpairwise(),\n\t\t\t\t\t\t\tmap(\n\t\t\t\t\t\t\t\t([newEvent, oldEvent]: [Event, Event]) =>\n\t\t\t\t\t\t\t\t\t[newEvent, oldEvent] as [MouseEvent, MouseEvent],\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tmap(\n\t\t\t\t\t\t\t\t([newEvent, oldEvent]: [MouseEvent, MouseEvent]) =>\n\t\t\t\t\t\t\t\t\toldEvent.clientX - newEvent.clientX,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tfilter((deltaX: number) => deltaX !== 0),\n\t\t\t\t\t\t\ttap((deltaX: number) => this.changeCirclePosition(deltaX)),\n\t\t\t\t\t\t\tstartWith(null),\n\t\t\t\t\t\t\ttakeUntil(\n\t\t\t\t\t\t\t\tfromEvent(document.body, 'mouseup').pipe(tap(() => this.setDragging(false))),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tlast(),\n\t\t\t\t\t\t\ttap(\n\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\tthis.circle &&\n\t\t\t\t\t\t\t\t\tthis.renderer.setStyle(this.circle.nativeElement, 'transition', transition),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t\tuntilDestroyed(this),\n\t\t\t\t)\n\t\t\t\t.subscribe((deltaX: number | null) => {\n\t\t\t\t\tdeltaX === null ? this.toggle() : this.detectByCoordinates();\n\t\t\t\t});\n\t\t}\n\t}\n\n\toverride updateModel(value: boolean | T | null): void {\n\t\tsuper.updateModel(value);\n\t\tthis.setState(!!this.checked);\n\t}\n\n\tprotected setState(isSelected: boolean): void {\n\t\tisSelected\n\t\t\t? this.circle &&\n\t\t\t  this.renderer.setStyle(\n\t\t\t\t\tthis.circle.nativeElement,\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translateX(${this.maxPixelValue}px)`,\n\t\t\t  )\n\t\t\t: this.circle &&\n\t\t\t  this.renderer.setStyle(this.circle.nativeElement, 'transform', `translateX(0)`);\n\t}\n\n\tprivate setDragging(value: boolean): void {\n\t\tthis.dragging = value;\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\tprivate detectByCoordinates(): void {\n\t\tif (!this.disabled && this.wrapper && this.circle) {\n\t\t\tconst wrapperMiddle: number =\n\t\t\t\tNgDocPositionUtils.getElementPosition(this.wrapper.nativeElement).x +\n\t\t\t\tthis.wrapper.nativeElement.offsetWidth / 2;\n\t\t\tconst circleCenterLeft: number =\n\t\t\t\tNgDocPositionUtils.getElementPosition(this.circle.nativeElement).x +\n\t\t\t\tthis.circle.nativeElement.offsetWidth / 2;\n\t\t\tcircleCenterLeft > wrapperMiddle ? this.check() : this.uncheck();\n\t\t\tthis.setState(!!this.checked);\n\t\t}\n\t}\n\n\tprivate changeCirclePosition(delta: number): void {\n\t\tif (this.wrapper && this.circle) {\n\t\t\tconst wrapperLeft: number = NgDocPositionUtils.getElementPosition(\n\t\t\t\tthis.wrapper.nativeElement,\n\t\t\t).x;\n\t\t\tconst circleLeft: number = NgDocPositionUtils.getElementPosition(this.circle.nativeElement).x;\n\t\t\tconst newPosition: number = Math.max(\n\t\t\t\tMath.min(circleLeft - wrapperLeft - 3 + delta, this.maxPixelValue),\n\t\t\t\t0,\n\t\t\t);\n\t\t\tthis.renderer.setStyle(\n\t\t\t\tthis.circle.nativeElement,\n\t\t\t\t'transform',\n\t\t\t\t`translateX(${newPosition}px)`,\n\t\t\t);\n\t\t}\n\t}\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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"}