import { addDecorator } from '@storybook/html'
import { createApp } from 'vue'
// import '../src/style/element-ui@2.13.2.css'
import '../packages/theme-chalk/src/index.scss'
import install from '../packages/element-plus'
import './demo.css'
/**
* Wraps a story into a Vue Element
* @param {JSX.Element} template - Story templates
* @param {VueElement}
*/
const Wrapper = (template) => {
return {
data() {
return {}
},
template,
}
}
/**
* Custom Addon for previewing ElementPlus component in Vue3
* Due to lacking of support for Vue3, the rendering method has to be made by ourself
* This method takes a template string as parameter returns a HTMLElement which will be inserted to the iframe root node by `@StoryBook`
* @param {Story} content
* @return {HTMLElement}
*/
function CustomDecorator(content, context) {
const templateOrComponent = content()
const app = typeof templateOrComponent === 'string'
? createApp(Wrapper(templateOrComponent))
: createApp(templateOrComponent)
install(app)
const entry = document.createElement('div')
entry.className = 'element-plus-previewer'
app.mount(entry)
return entry
}
addDecorator(CustomDecorator);