import * as React from "react"; interface CommonControlledStateProps { value?: T; defaultValue?: T; } export function useControlledState( props: CommonControlledStateProps & { onChange?: (value: T, ...args: Rest) => void; }, ): readonly [T, (next: T, ...args: Rest) => void] { const { value, defaultValue, onChange } = props; const [state, setInternalState] = React.useState( value ?? (defaultValue as T), ); React.useEffect(() => { if (value !== undefined) setInternalState(value); }, [value]); const setState = React.useCallback( (next: T, ...args: Rest) => { setInternalState(next); onChange?.(next, ...args); }, [onChange], ); return [state, setState] as const; }