@ng-doc/ui-kit
Version:
<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>
1 lines • 9.65 kB
Source Map (JSON)
{"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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"}