| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | import BaseFoundation, { DefaultAdapter } from '../base/foundation';import warning from '../utils/warning';export interface SwitchAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {    setNativeControlChecked: (nativeControlChecked: boolean | undefined) => void;    setNativeControlDisabled: (nativeControlDisabled: boolean | undefined) => void;    setFocusVisible: (focusVisible: boolean) => void;    notifyChange: (checked: boolean, e: any) => void}export default class SwitchFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<SwitchAdapter<P, S>, P, S> {    constructor(adapter: SwitchAdapter<P, S>) {        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 {}}
 |