diff --git a/demo/app-root.ts b/demo/app-root.ts index 181ebed..5d018ab 100644 --- a/demo/app-root.ts +++ b/demo/app-root.ts @@ -1,26 +1,101 @@ import { html, LitElement } from 'lit'; import { customElement } from 'lit/decorators.js'; +// unsafeHTML is needed to render dynamic custom-element tag names; +// Lit's html`` tag cannot render variable tag names directly. +import { unsafeHTML } from 'lit/directives/unsafe-html.js'; -import '@src/elements/ia-button/ia-button-story'; -import '@src/labs/ia-snow/ia-snow-story'; -import '@src/elements/ia-combo-box/ia-combo-box-story'; -import '@src/elements/ia-status-indicator/ia-status-indicator-story'; +const storyModules = import.meta.glob( + ['../src/elements/**/*-story.ts', '../src/labs/**/*-story.ts'], + { eager: true } +); + +const storyEntries = Object.keys(storyModules) + .map(path => { + const labs = path.includes('/src/labs/'); + const parts = path.split('/'); + const tag = parts[parts.length - 2]; + return { tag, storyTag: `${tag}-story`, id: `elem-${tag}`, labs }; + }) + .sort((a, b) => a.tag.localeCompare(b.tag)); + +const productionEntries = storyEntries.filter(e => !e.labs); +const labsEntries = storyEntries.filter(e => e.labs); +const ALL_ENTRIES = [...productionEntries, ...labsEntries]; @customElement('app-root') export class AppRoot extends LitElement { + createRenderRoot() { return this; } + + private _observer?: IntersectionObserver; + render() { return html` -