@pixi/react
Version:
Write PixiJS applications using React declarative style.
103 lines (99 loc) • 3.02 kB
JavaScript
var jsxRuntime = require('react/jsx-runtime');
var pixi_js = require('pixi.js');
var constants_js = require('react-reconciler/constants.js');
var Context = require('../components/Context.js');
var isReadOnlyProperty = require('../helpers/isReadOnlyProperty.js');
var log = require('../helpers/log.js');
var prepareInstance = require('../helpers/prepareInstance.js');
var reconciler = require('./reconciler.js');
var roots = require('./roots.js');
;
function createRoot(target, options = {}) {
let root = roots.roots.get(target);
let applicationState = root?.applicationState ?? {
isInitialised: false,
isInitialising: false
};
const internalState = root?.internalState ?? {};
if (root) {
log.log("warn", "createRoot should only be called once!");
} else {
applicationState.app = new pixi_js.Application();
internalState.rootContainer = prepareInstance.prepareInstance(applicationState.app.stage);
}
const fiber = root?.fiber ?? reconciler.reconciler.createContainer(
internalState.rootContainer,
// container
constants_js.ConcurrentRoot,
// tag
null,
// hydration callbacks
false,
// isStrictMode
null,
// concurrentUpdatesByDefaultOverride
"",
// identifierPrefix
console.error,
// onUncaughtError
console.error,
// onCaughtError
console.error,
// onRecoverableError
null
// transitionCallbacks
);
if (!root) {
let canvas;
if (target instanceof HTMLCanvasElement) {
canvas = target;
}
if (!canvas) {
canvas = document.createElement("canvas");
target.innerHTML = "";
target.appendChild(canvas);
}
internalState.canvas = canvas;
const render = async (children, applicationOptions) => {
if (!applicationState.app.renderer && !applicationState.isInitialised && !applicationState.isInitialising) {
applicationState.isInitialising = true;
await applicationState.app.init({
...applicationOptions,
canvas
});
applicationState.isInitialising = false;
applicationState.isInitialised = true;
applicationState = { ...applicationState };
options.onInit?.(applicationState.app);
}
Object.entries(applicationOptions).forEach(([key, value]) => {
const typedKey = key;
if (isReadOnlyProperty.isReadOnlyProperty(
applicationOptions,
typedKey
)) {
return;
}
applicationState.app[typedKey] = value;
});
reconciler.reconciler.updateContainer(
/* @__PURE__ */ jsxRuntime.jsx(Context.ContextProvider, { value: applicationState, children }),
fiber,
null,
() => void 0
);
return applicationState.app;
};
root = {
applicationState,
fiber,
internalState,
render
};
roots.roots.set(canvas, root);
}
return root;
}
exports.createRoot = createRoot;
//# sourceMappingURL=createRoot.js.map
;