vuestic-ui
Version:
Vue 3 UI Framework
45 lines (44 loc) • 1.35 kB
JavaScript
import { withCtx, h, Text, isVNode, createBlock } from "vue";
const renderSlotNode = (node, ctx = null) => {
return withCtx(() => [node], ctx);
};
const makeVNode = (node) => {
if (typeof node === "string") {
return h(Text, node);
}
return isVNode(node) ? node : createBlock(node);
};
const renderSlots = (slots, ctx = null) => {
return Object.keys(slots).reduce((acc, slotName) => {
const slot = slots[slotName];
acc[slotName] = typeof slot === "function" ? slot : renderSlotNode(slot, ctx);
return acc;
}, {});
};
const createRenderFn = (component) => {
const originalRenderFn = component.render || component.ssrRender;
if (!originalRenderFn) {
return void 0;
}
const compiledRenderedFn = originalRenderFn.name === "_sfc_render" || originalRenderFn.name === "_sfc_ssrRender";
return function(...args) {
const ctx = args[0];
const slots = ctx.$.slots;
const customCtx = new Proxy(ctx, {
get(target, key) {
if (key === "$slots") {
return renderSlots(slots);
}
return target[key];
}
});
const thisArg = compiledRenderedFn ? void 0 : customCtx;
return originalRenderFn.call(thisArg, customCtx, ...args.slice(1));
};
};
export {
createRenderFn as c,
makeVNode as m,
renderSlotNode as r
};
//# sourceMappingURL=createRenderFn.mjs.map