@storybook/html
Version:
Storybook HTML renderer: Develop, document, and test UI components in isolation
71 lines (66 loc) • 2.33 kB
JavaScript
import {
__export
} from "./chunk-4BE7D4DS.js";
// src/entry-preview.ts
var entry_preview_exports = {};
__export(entry_preview_exports, {
argTypesEnhancers: () => argTypesEnhancers,
parameters: () => parameters,
render: () => render,
renderToCanvas: () => renderToCanvas
});
import { enhanceArgTypes } from "storybook/internal/docs-tools";
// src/render.ts
import { global } from "@storybook/global";
import { simulateDOMContentLoaded, simulatePageLoad } from "storybook/preview-api";
import { dedent } from "ts-dedent";
var { Node } = global, render = (args, context) => {
let { id, component: Component } = context;
if (typeof Component == "string") {
let output = Component;
return Object.keys(args).forEach((key) => {
output = output.replace(`{{${key}}}`, args[key]);
}), output;
}
if (Component instanceof HTMLElement) {
let output = Component.cloneNode(!0);
return Object.keys(args).forEach((key) => {
output.setAttribute(
key,
typeof args[key] == "string" ? args[key] : JSON.stringify(args[key])
);
}), output;
}
if (typeof Component == "function")
return Component(args, context);
throw console.warn(dedent`
Storybook's HTML renderer only supports rendering DOM elements and strings.
Received: ${Component}
`), new Error(`Unable to render story ${id}`);
};
function renderToCanvas({ storyFn, kind, name, showMain, showError, forceRemount }, canvasElement) {
let element = storyFn();
if (showMain(), typeof element == "string")
canvasElement.innerHTML = element, simulatePageLoad(canvasElement);
else if (element instanceof Node) {
if (canvasElement.firstChild === element && forceRemount === !1)
return;
canvasElement.innerHTML = "", canvasElement.appendChild(element), simulateDOMContentLoaded();
} else
showError({
title: `Expecting an HTML snippet or DOM node from the story: "${name}" of "${kind}".`,
description: dedent`
Did you forget to return the HTML snippet from the story?
Use "() => <your snippet or node>" or when defining the story.
`
});
}
// src/entry-preview.ts
var parameters = { renderer: "html" }, argTypesEnhancers = [enhanceArgTypes];
export {
render,
renderToCanvas,
parameters,
argTypesEnhancers,
entry_preview_exports
};