import { createElement, useMemo, useLayoutEffect } from 'react';
import { bind } from 'collaborative-input';
class CollaborativeInputState {
    props;
    _unbind;
    constructor(props) {
        this.props = props;
    }
    unbind = () => {
        this._unbind?.();
        this._unbind = void 0;
    };
    stop = this.unbind;
    start = () => this.stop;
    ref = (el) => {
        if (!el)
            return this.unbind();
        const { str, polling } = this.props;
        this._unbind = bind(str, el, !!polling);
    };
}
export const CollaborativeInput = (props) => {
    const { str, polling, inp: _inp, input, ...rest } = props;
    // biome-ignore lint: hook dependency list manually managed
    const state = useMemo(() => new CollaborativeInputState(props), [str, polling]);
    // biome-ignore lint: hook dependency list manually managed
    useLayoutEffect(state.start, [state]);
    if (input)
        return input(state.ref);
    rest.ref = state.ref;
    return createElement(rest.multiline ? 'textarea' : 'input', rest);
};
//# sourceMappingURL=CollaborativeInput.js.map