{"version":3,"file":"chunk-i06ryhe5.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 protected _onChange = (_: any) => {};\n\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 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;\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","f","selectors","viewQuery","rf","ctx","ɵɵhostProperty","ɵɵclassMap","ɵɵpureFunction2","_c1","ɵɵclassProp","D","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","ɵɵStandaloneFeature","ngContentSelectors","_c3","decls","vars","consts","template","ɵɵelementStart","ɵɵprojection","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","n","_DsSwitch"],"mappings":"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"}