@islands/hydration
Version:
Hydration utilities for îles
29 lines (28 loc) • 916 B
JavaScript
import { onDispose } from "./hydration.js";
import { h, render, toChildArray } from "preact";
//#region preact.ts
function createIsland(component, id, el, props, slots) {
render(createElement(component, props, slots), el);
if (import.meta.env.DISPOSE_ISLANDS) onDispose(id, () => render(null, el));
if (import.meta.env.DEV) window.__ILE_DEVTOOLS__?.onHydration({
id,
el,
props,
slots,
component,
framework: "preact"
});
}
/**
* Preact doesn't have an equivalent for createStaticVNode.
*/
const IslandContent = (props) => {
return h("iles-content", { dangerouslySetInnerHTML: { __html: props.content } });
};
IslandContent.shouldComponentUpdate = () => false;
function createElement(component, props, slots) {
const content = slots?.default;
return h(component, props, content ? toChildArray(h(IslandContent, { content })) : null);
}
//#endregion
export { createElement, createIsland as default };