{"version":3,"file":"chunk-gbwyd5bn.js","sources":["packages/design-system/ui/switch/src/switch.component.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewEncapsulation,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { rxHostPressedListener } from '@frontend/ui/rx-host-listener';\n\nexport const DS_SWITCH_VARIANT_ARRAY = ['utility', 'neutral'] as const;\nexport type DsSwitchtype = (typeof DS_SWITCH_VARIANT_ARRAY)[number];\n\n@Component({\n selector: 'ds-switch',\n template: `\n \n `,\n host: {\n 'class': 'ds-switch',\n '[class.ds-switch-disabled]': 'disabled()',\n '[class]':\n '[elTouched ? checked() ? \"animate-check\" : \"animate-uncheck\" : \"\", _variant() === \"utility\" ?\"ds-switch-utility\":\"ds-switch-neutral\"]',\n '[class.ds-switch-checked]': 'checked()',\n '[class.ds-switch-inverse]': '_inverse()',\n '[tabindex]': 'disabled() ? -1 : 0',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[attr.data-focus-visible]': 'focusVisible()',\n '[attr.data-focus]': 'focused()',\n '[attr.data-disabled]': 'disabled()',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-label]': 'null',\n '[attr.aria-describedby]': 'null',\n },\n styleUrl: 'switch.component.scss',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DsSwitch),\n multi: true,\n },\n ],\n})\nexport class DsSwitch implements ControlValueAccessor, AfterContentInit, OnDestroy {\n private _elementRef = inject(ElementRef);\n private _focusMonitor = inject(FocusMonitor);\n private _cdr = inject(ChangeDetectorRef);\n\n elTouched = false;\n\n protected focusVisible = signal(false);\n protected focused = signal(false);\n\n readonly checked = model(false);\n readonly disabled = model(false);\n readonly required = input(false);\n readonly ariaLabel = input(null);\n readonly ariaLabelledby = input(null);\n readonly ariaDescribedby = input(null);\n private _variant = signal('utility');\n private _inverse = signal(false);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars,,@typescript-eslint/no-explicit-any\n protected _onChange = (_: any) => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _onTouched = () => {};\n\n readonly dsSwitchEl = viewChild>('dsSwitch');\n\n @Input() set variant(value) {\n this._variant.set(value);\n }\n\n get variant() {\n return this._variant();\n }\n\n @Input() set inverse(value: boolean) {\n this._inverse.set(value);\n }\n\n get inverse() {\n return this._inverse();\n }\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n rxHostPressedListener()\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.handleChange());\n }\n\n ngAfterContentInit() {\n this._focusMonitor.monitor(this._elementRef, true).subscribe((focusOrigin) => {\n if (focusOrigin) this.focused.set(true);\n if (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n this.focusVisible.set(true);\n this._cdr.markForCheck();\n }\n if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state\n // change (such as a form control's ng-touched) will cause a changed-after-checked error.\n // See https://github.com/angular/angular/issues/17793. To work around this, we defer\n // telling the form control it has been touched until the next tick.\n // eslint-disable-next-line\n Promise.resolve().then(() => {\n this.focusVisible.set(false);\n this.focused.set(false);\n this._onTouched();\n this._cdr.markForCheck();\n });\n }\n });\n\n if (!this.dsSwitchEl()) return;\n this.dsSwitchEl()?.nativeElement.dispatchEvent(new Event('change'));\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n handleChange() {\n if (this.disabled()) return;\n if (!this.dsSwitchEl()?.nativeElement) return;\n\n if (this.focused() && !this.elTouched) {\n this.elTouched = true;\n }\n\n this.checked.update((x: any) => !x);\n this._onChange(this.checked());\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n this._onChange(value);\n }\n\n registerOnChange(fn: (params: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn; /* eslint-disable-line @typescript-eslint/no-unsafe-assignment*/\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n this._cdr.markForCheck();\n }\n}\n"],"names":["DsSwitch","variant","value","_variant","set","inverse","_inverse","constructor","_elementRef","inject","ElementRef","_focusMonitor","FocusMonitor","_cdr","ChangeDetectorRef","elTouched","focusVisible","signal","focused","checked","model","disabled","required","input","ariaLabel","ariaLabelledby","ariaDescribedby","_onChange","_","_onTouched","dsSwitchEl","viewChild","rxHostPressedListener","pipe","takeUntilDestroyed","subscribe","handleChange","ngAfterContentInit","monitor","focusOrigin","markForCheck","Promise","resolve","then","nativeElement","dispatchEvent","Event","ngOnDestroy","stopMonitoring","update","x","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","selectors","viewQuery","rf","ctx","ɵɵhostProperty","l","ɵɵclassMap","ɵɵpureFunction2","_c1","ɵɵclassProp","D","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","ɵɵStandaloneFeature","ngContentSelectors","_c3","decls","vars","consts","template","ɵɵtext","ɵɵelementStart","ɵɵprojection","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","_DsSwitch"],"mappings":"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"}