@inkline/paper
Version:
Paper is a unified interface for defining components for Vue and React using a single code base.
58 lines (46 loc) • 1.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.defineComponent = void 0;
var _vue = require("vue");
const defineComponent = definition => {
return {
name: definition.name || "",
emits: definition.emits || [],
slots: definition.slots || [],
props: definition.props || {},
setup(props, {
attrs,
slots,
emit
}) {
const slot = (name = "default") => {
return slots[name]?.();
};
const hasSlot = (name = "default") => {
return !!slots[name];
};
const provide = (identifier, value) => (0, _vue.provide)(identifier, value);
const inject = (identifier, defaultValue) => (0, _vue.inject)(identifier, defaultValue);
const setupContext = {
emit,
provide,
inject,
hasSlot
};
let state = { ...attrs,
...props
};
if (definition.setup) {
state = Object.assign(state, definition.setup(state, setupContext));
}
const renderContext = {
slot,
hasSlot
};
return () => definition.render(state, renderContext);
}
};
};
exports.defineComponent = defineComponent;