{"version":3,"file":"chunk-ianv22it.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","_a","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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"}