@wordpress/interactivity
Version:
Package that provides a standard and simple way to handle the frontend interactivity of Gutenberg blocks.
42 lines (41 loc) • 1.23 kB
JavaScript
// packages/interactivity/src/init.ts
import { hydrate } from "preact";
import { toVdom, hydratedIslands } from "./vdom";
import { createRootFragment, splitTask } from "./utils";
var regionRootFragments = /* @__PURE__ */ new WeakMap();
var getRegionRootFragment = (regions) => {
const region = Array.isArray(regions) ? regions[0] : regions;
if (!region.parentElement) {
throw Error("The passed region should be an element with a parent.");
}
if (!regionRootFragments.has(region)) {
regionRootFragments.set(
region,
createRootFragment(region.parentElement, regions)
);
}
return regionRootFragments.get(region);
};
var initialVdom = /* @__PURE__ */ new WeakMap();
var init = async () => {
const nodes = document.querySelectorAll(`[data-wp-interactive]`);
await new Promise((resolve) => {
setTimeout(resolve, 0);
});
for (const node of nodes) {
if (!hydratedIslands.has(node)) {
await splitTask();
const fragment = getRegionRootFragment(node);
const vdom = toVdom(node);
initialVdom.set(node, vdom);
await splitTask();
hydrate(vdom, fragment);
}
}
};
export {
getRegionRootFragment,
init,
initialVdom
};
//# sourceMappingURL=init.js.map