"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderCar = void 0; var tslib_1 = require("tslib"); var React = tslib_1.__importStar(require("react")); var react_1 = require("react"); function renderCar(WrappedComponent, defaults) { function State(_a) { var stateRef = _a.stateRef, props = _a.props; var renderTarget = (0, react_1.useCallback)(function SideTarget() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } (0, react_1.useLayoutEffect)(function () { stateRef.current(args); }); return null; }, []); // @ts-ignore return React.createElement(WrappedComponent, tslib_1.__assign({}, props, { children: renderTarget })); } var Children = React.memo(function (_a) { var stateRef = _a.stateRef, defaultState = _a.defaultState, children = _a.children; var _b = (0, react_1.useState)(defaultState.current), state = _b[0], setState = _b[1]; (0, react_1.useEffect)(function () { stateRef.current = setState; }, []); return children.apply(void 0, state); }, function () { return true; }); return function Combiner(props) { var defaultState = React.useRef(defaults(props)); var ref = React.useRef(function (state) { return (defaultState.current = state); }); return (React.createElement(React.Fragment, null, React.createElement(State, { stateRef: ref, props: props }), React.createElement(Children, { stateRef: ref, defaultState: defaultState, children: props.children }))); }; } exports.renderCar = renderCar;