Getting started
Installing
Add muban
to your project:
Simple component
Create your component:
import { defineComponent, bind, ref } from '@muban/muban';
const MyComponent = defineComponent({
name: 'my-component',
setup({ props, refs }) {
const content = ref('Hello World');
return [
bind(refs.self, { text: content}),
];
}
});
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Make sure to have the following HTML on the page:
<html>
...
<body>
<div data-component="my-component">Hello</div>
</body>
</html>
1
2
3
4
5
6
2
3
4
5
6
Then init your component:
import { createApp } from '@muban/muban';
createApp(MyComponent).mount(document.body)
1
2
3
2
3
Your page should now display Hello World
if your component is correctly running.
Dev template
Create our template:
import { html } from '@muban/template';
type MyComponentProps = {
welcomeText: string;
};
function myComponentTemplate({ welcomeText }: MyComponentProps) {
return html`<div data-component="my-component">${welcomeText}</div>`;
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Make sure to have the following HTML on the page:
<html>
...
<body>
<div id="app">
<div data-component="my-component">Hello</div>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Render your template:
import { createApp } from '@muban/muban';
const appRoot = document.getElementById('app');
const app = createApp(MyComponent);
app.mount(appRoot, myComponentTemplate, { welcomeText: 'Hello' });
1
2
3
4
5
2
3
4
5
Using Storybook
Add @muban/storybook
to your project:
Add these two scripts in your package.json
{
"scripts": {
"storybook": "start-storybook -p 6006",
"build-storybook": "build-storybook -o ./dist/storybook"
}
}
1
2
3
4
5
6
2
3
4
5
6
Create your .storybook/main.js
with this content:
module.exports = {
stories: [
'../src/**/*.stories.mdx',
'../src/**/*.stories.@(js|ts)'
],
addons: [
'@storybook/addon-essentials',
]
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Create your story file:
import type { Story } from '@muban/storybook';
export default {
title: 'MyComponent',
argTypes: {
welcomeText: { control: 'text' },
},
};
export const Default: Story<MyComponentProps> = () => ({
template: myComponentTemplate,
component: MyComponent,
});
Default.args = {
welcomeText: 'Hello',
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Run storybook: