2024-01-09 14:58:13 +08:00

87 lines
1.8 KiB
TypeScript

import { createApp, onBeforeUnmount } from 'vue';
import cssStyle from 'element-plus/dist/index.css?raw';
import { editorService, Layout, propsService, uiService } from '@tmagic/editor';
import MagicForm, { type FormConfig } from '@tmagic/form';
import type StageCore from '@tmagic/stage';
import { injectStyle } from '@tmagic/utils';
import commonConfig from './form-config/common';
import App from './App.vue';
import formConfigs from './form-config';
export * from './component-group-list';
export const propsConfigs = formConfigs;
export const canSelect = (el: HTMLElement) => Boolean(el.dataset.magicId);
export const useRuntime = () => {
const render = (stage: StageCore) => {
injectStyle(stage.renderer.getDocument()!, cssStyle);
injectStyle(
stage.renderer.getDocument()!,
`
html,
body,
#app {
width: 100%;
height: 100%;
margin: 0;
}
::-webkit-scrollbar {
width: 0;
}
`,
);
const el: HTMLDivElement = globalThis.document.createElement('div');
el.id = 'app';
el.style.overflow = 'auto';
createApp(App, {
stage,
})
.use(MagicForm)
.mount(el);
setTimeout(() => {
uiService.set('showRule', false);
});
return el;
};
propsService.usePlugin({
afterFillConfig(config: FormConfig, itemConfig: FormConfig) {
return [
{
type: 'tab',
items: [
{
title: '属性',
labelWidth: '80px',
items: [...commonConfig, ...itemConfig],
},
],
},
];
},
});
editorService.usePlugin({
afterGetLayout() {
return Layout.RELATIVE;
},
});
onBeforeUnmount(() => {
propsService.removeAllPlugins();
editorService.removeAllPlugins();
});
return {
render,
};
};