import BaseFoundation, { DefaultAdapter } from '../base/foundation'; import warning from '../utils/warning'; export interface SwitchAdapter

, S = Record> extends DefaultAdapter { setNativeControlChecked: (nativeControlChecked: boolean | undefined) => void; setNativeControlDisabled: (nativeControlDisabled: boolean | undefined) => void; setFocusVisible: (focusVisible: boolean) => void; notifyChange: (checked: boolean, e: any) => void } export default class SwitchFoundation

, S = Record> extends BaseFoundation, P, S> { constructor(adapter: SwitchAdapter) { super({ ...adapter }); } init(): void { const { defaultChecked, checked, disabled } = this.getProps(); this.setChecked(defaultChecked || checked); this.setDisabled(disabled); } setChecked(checked: boolean | undefined): void { this._adapter.setNativeControlChecked(checked); } setDisabled(disabled: boolean | undefined): void { this._adapter.setNativeControlDisabled(disabled); } handleChange(checked: boolean, e: any): void { const propChecked = this.getProps().checked; const isControlledComponent = typeof propChecked !== 'undefined'; if (isControlledComponent) { this._adapter.notifyChange(checked, e); } else { this._adapter.setNativeControlChecked(checked); this._adapter.notifyChange(checked, e); } } handleFocusVisible = (event: any) => { const { target } = event; try { if (target.matches(':focus-visible')) { this._adapter.setFocusVisible(true); } } catch (error){ warning(true, 'Warning: [Semi Switch] The current browser does not support the focus-visible'); } } handleBlur = () => { this._adapter.setFocusVisible(false); } // eslint-disable-next-line @typescript-eslint/no-empty-function destroy(): void {} }