@wordpress/interactivity
Version:
Package that provides a standard and simple way to handle the frontend interactivity of Gutenberg blocks.
103 lines (102 loc) • 2.34 kB
JavaScript
// packages/interactivity/src/index.ts
import { h, cloneElement, render } from "preact";
import { batch, effect } from "@preact/signals";
import registerDirectives, { routerRegions } from "./directives.mjs";
import {
initialVdomPromise,
hydrateRegions,
getRegionRootFragment
} from "./hydration.mjs";
import { toVdom } from "./vdom.mjs";
import { directive } from "./hooks.mjs";
import { getNamespace } from "./namespaces.mjs";
import { parseServerData, populateServerData } from "./store.mjs";
import { proxifyState } from "./proxies/index.mjs";
import {
deepReadOnly,
navigationSignal,
onDOMReady,
sessionId,
warn
} from "./utils.mjs";
import {
store,
getConfig,
getServerState
} from "./store.mjs";
import { getContext, getServerContext, getElement } from "./scopes.mjs";
import {
withScope,
useWatch,
useInit,
useEffect,
useLayoutEffect,
useCallback,
useMemo,
splitTask,
withSyncEvent
} from "./utils.mjs";
import { useState, useRef } from "preact/hooks";
if (globalThis.SCRIPT_DEBUG) {
await import("preact/debug");
}
var watch = effect;
var requiredConsent = "I acknowledge that using private APIs means my theme or plugin will inevitably break in the next version of WordPress.";
var privateApis = (lock) => {
if (lock === requiredConsent) {
return {
getRegionRootFragment,
initialVdomPromise,
toVdom,
directive,
getNamespace,
h,
cloneElement,
render,
proxifyState,
parseServerData,
populateServerData,
batch,
routerRegions,
deepReadOnly,
navigationSignal,
sessionId,
warn
};
}
throw new Error("Forbidden access.");
};
populateServerData(parseServerData());
registerDirectives();
onDOMReady(hydrateRegions);
window.history.replaceState(
{ ...window.history.state, wpInteractivityId: sessionId },
""
);
window.addEventListener("popstate", (event) => {
if (event.state !== null && event.state?.wpInteractivityId !== sessionId) {
window.location.reload();
}
});
export {
getConfig,
getContext,
getElement,
getServerContext,
getServerState,
privateApis,
splitTask,
store,
useCallback,
useEffect,
useInit,
useLayoutEffect,
useMemo,
useRef,
useState,
useWatch,
watch,
withScope,
withSyncEvent
};
//# sourceMappingURL=index.mjs.map