@expressive/react
Version:
Use classes to define state in React!
67 lines (65 loc) • 2.13 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_chunk = require('./chunk-BE-pF4vm.js');
const require_context = require('./context-DEag_HVs.js');
let _expressive_state = require("@expressive/state");
let react = require("react");
let src_state = require("./state");
let react_jsx_runtime = require("react/jsx-runtime");
react_jsx_runtime = require_chunk.__toESM(react_jsx_runtime);
//#region src/jsx-runtime.ts
const RENDER = /* @__PURE__ */ new WeakMap();
function patch(type, ...args) {
if (_expressive_state.State.is(type)) if (RENDER.has(type)) type = RENDER.get(type);
else RENDER.set(type, type = Render.bind(type));
return this(type, ...args);
}
const jsx = patch.bind(react_jsx_runtime.default.jsx);
const jsxs = patch.bind(react_jsx_runtime.default.jsxs);
function Render(props, props2) {
const { is, ...rest } = {
...props,
...props2
};
const ambient = _expressive_state.Context.use();
const state = src_state.Pragma.useState(() => {
const instance = this.new(rest, is && ((x) => void is(x)));
const context = ambient.push(instance);
let ready;
let active;
(0, _expressive_state.watch)(instance, (current) => {
active = current;
if (ready) state[1]((x) => x.bind(null));
});
function didMount() {
ready = true;
return () => {
context.pop();
instance.set(null);
};
}
function Render(props) {
const render = _expressive_state.METHOD.get(active.render) || active.render;
return render ? render.call(active, props, active) : props.children;
}
return (props) => {
ready = false;
src_state.Pragma.useEffect(didMount, []);
Promise.resolve(instance.set(props)).finally(() => {
ready = true;
});
return require_context.provide(context, src_state.Pragma.createElement(Render, props), props.fallback || active.fallback, String(instance));
};
});
return state[0](rest);
}
//#endregion
Object.defineProperty(exports, 'Fragment', {
enumerable: true,
get: function () {
return react.Fragment;
}
});
exports.jsx = jsx;
exports.jsxs = jsxs;
exports.patch = patch;
//# sourceMappingURL=jsx-runtime.js.map