An element-vir
drop-in element for building, testing, and demonstrating a collection of elements (or, in other words, a design system).
npm i element-book
Define element-book pages with defineBookPage
:
import {defineBookPage} from '../data/book-entry/book-page/define-book-page.js';
export const myPage = defineBookPage({
/** Use `undefined` if your page is at the top level. */
parent: undefined,
title: 'My Page',
});
Inside of a page definition, define an element example:
import {html} from 'element-vir';
import {defineBookPage} from '../data/book-entry/book-page/define-book-page.js';
export const myPage = defineBookPage({
/** Use `undefined` if your page is at the top level. */
parent: undefined,
title: 'My Page',
defineExamples({defineExample}) {
defineExample({
title: 'My Example',
render() {
return html`
<p>Render your element here.</p>
`;
},
});
},
});
Instantiate an instance of the element book app into your app and pass in all your pages:
import {defineElementNoInputs, html} from 'element-vir';
import {ElementBookApp} from '../ui/elements/element-book-app/element-book-app.element.js';
import {myPage} from './define-page.example.js';
export const MyApp = defineElementNoInputs({
tagName: 'my-app',
render() {
return html`
<${ElementBookApp.assign({
pages: [
myPage,
],
})}></${ElementBookApp}>
`;
},
});
Because Storybook is un-composable, impossible to debug, and full of behind-the-scenes *magic* that you can't backtrack without already understanding the inner workings of Storybook itself. With element-book
, it's all just imports that you can directly follow with the TypeScript compiler.