UNPKG

@storybook/web-components

Version:

Storybook Web Components renderer: Develop, document, and test UI components in isolation

110 lines (106 loc) 3.88 kB
import { getCustomElements, isValidComponent, isValidMetaData } from "./_browser-chunks/chunk-XQFQKYGQ.js"; import "./_browser-chunks/chunk-UN5GYDGC.js"; import "./_browser-chunks/chunk-4BE7D4DS.js"; // src/entry-preview-argtypes.ts import { enhanceArgTypes } from "storybook/internal/docs-tools"; // src/docs/custom-elements.ts import { logger } from "storybook/internal/client-logger"; import invariant from "tiny-invariant"; function mapItem(item, category) { let type; switch (category) { case "attributes": case "properties": type = { name: item.type?.text || item.type }; break; case "slots": type = { name: "string" }; break; default: type = { name: "void" }; break; } return { name: item.name, required: !1, description: item.description, type, table: { category, type: { summary: item.type?.text || item.type }, defaultValue: { summary: item.default !== void 0 ? item.default : item.defaultValue } } }; } function mapEvent(item) { let name = item.name.replace(/(-|_|:|\.|\s)+(.)?/g, (_match, _separator, chr) => chr ? chr.toUpperCase() : "").replace(/^([A-Z])/, (match) => match.toLowerCase()); return name = `on${name.charAt(0).toUpperCase() + name.substr(1)}`, [{ name, action: { name: item.name }, table: { disable: !0 } }, mapItem(item, "events")]; } function mapData(data, category) { return data && data.filter((item) => item && item.name).reduce((acc, item) => { if (item.kind === "method") return acc; switch (category) { case "events": mapEvent(item).forEach((argType) => { invariant(argType.name, `${argType} should have a name property.`), acc[argType.name] = argType; }); break; default: acc[item.name] = mapItem(item, category); break; } return acc; }, {}); } var getMetaDataExperimental = (tagName, customElements) => { if (!isValidComponent(tagName) || !isValidMetaData(customElements)) return null; let metaData = customElements.tags.find( (tag) => tag.name.toUpperCase() === tagName.toUpperCase() ); return metaData || logger.warn(`Component not found in custom-elements.json: ${tagName}`), metaData; }, getMetaDataV1 = (tagName, customElements) => { if (!isValidComponent(tagName) || !isValidMetaData(customElements)) return null; let metadata; return customElements?.modules?.forEach((_module) => { _module?.declarations?.forEach((declaration) => { declaration.tagName === tagName && (metadata = declaration); }); }), metadata || logger.warn(`Component not found in custom-elements.json: ${tagName}`), metadata; }, getMetaData = (tagName, manifest) => manifest?.version === "experimental" ? getMetaDataExperimental(tagName, manifest) : getMetaDataV1(tagName, manifest), extractArgTypesFromElements = (tagName, customElements) => { let metaData = getMetaData(tagName, customElements); return metaData && { ...mapData(metaData.members ?? [], "properties"), ...mapData(metaData.properties ?? [], "properties"), ...mapData(metaData.attributes ?? [], "attributes"), ...mapData(metaData.events ?? [], "events"), ...mapData(metaData.slots ?? [], "slots"), ...mapData(metaData.cssProperties ?? [], "css custom properties"), ...mapData(metaData.cssParts ?? [], "css shadow parts") }; }, extractArgTypes = (tagName) => { let cem = getCustomElements(); return extractArgTypesFromElements(tagName, cem); }, extractComponentDescription = (tagName) => { let metaData = getMetaData(tagName, getCustomElements()); return metaData && metaData.description; }; // src/entry-preview-argtypes.ts var parameters = { docs: { extractArgTypes, extractComponentDescription } }, argTypesEnhancers = [enhanceArgTypes]; export { argTypesEnhancers, parameters };