{"version":3,"file":"docs-ONVKsKI9.cjs","names":["str: string","node: VNode","options: RenderOptions","htmlToJsx: Record<string, string>","attrsStr","attrIndent","formattedAttrs","childrenString","vnode: VNode","mode: RenderMode","context: Parameters<DecoratorFunction<StencilRenderer<unknown>>>[1]","SourceType","sourceDecorator: DecoratorFunction<StencilRenderer<unknown>>"],"sources":["../src/docs/render-vnode.ts","../src/docs/source-decorator.ts"],"sourcesContent":["import { type VNode } from '@stencil/core';\n\ntype RenderMode = 'html' | 'jsx';\n\ninterface RenderOptions {\n  mode: RenderMode;\n}\n\nfunction kebabToPascal(str: string): string {\n  return str\n    .split('-')\n    .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n    .join('');\n}\n\nfunction vnodeToString(node: VNode, options: RenderOptions, indentLevel = 0): string {\n  const LINE_WIDTH = 80;\n  const indent = '  '.repeat(indentLevel);\n  const { mode } = options;\n\n  if (node.$text$ !== null) {\n    return indent + node.$text$;\n  }\n\n  if (node.$tag$ === null) {\n    return '';\n  }\n\n  // Convert tag name based on mode\n  // Only convert to PascalCase if it's a custom element (has a dash)\n  const tag =\n    mode === 'jsx' && typeof node.$tag$ === 'string' && node.$tag$.includes('-')\n      ? kebabToPascal(node.$tag$)\n      : String(node.$tag$);\n\n  // Process attributes as array (without leading spaces)\n  const attrArray = node.$attrs$\n    ? Object.entries(node.$attrs$)\n        .filter(([_, value]) => value !== undefined)\n        .map(([key, value]) => {\n          // Convert HTML attributes to JSX equivalents\n          let attrName = key;\n          if (mode === 'jsx') {\n            // Common HTML to JSX attribute conversions\n            const htmlToJsx: Record<string, string> = {\n              class: 'className',\n              for: 'htmlFor',\n              tabindex: 'tabIndex',\n            };\n            attrName = htmlToJsx[key] || key;\n          }\n\n          if (typeof value === 'function') {\n            // Hide event handlers from source code\n            return '';\n          }\n\n          if (typeof value === 'boolean') {\n            return value ? attrName : '';\n          }\n\n          if (typeof value === 'string') {\n            return `${attrName}=\"${value}\"`;\n          }\n\n          // For JSX, use curly braces for non-string values\n          if (mode === 'jsx') {\n            return `${attrName}={${JSON.stringify(value)}}`;\n          }\n\n          // For HTML, convert to string\n          return `${attrName}=\"${value}\"`;\n        })\n        .filter((attr) => attr.trim())\n    : [];\n\n  const children = node.$children$ ?? [];\n\n  // Self-closing tags for JSX when no children\n  if (children.length === 0) {\n    const attrsStr = attrArray.length > 0 ? ' ' + attrArray.join(' ') : '';\n    const singleLine = mode === 'jsx'\n      ? `${indent}<${tag}${attrsStr} />`\n      : `${indent}<${tag}${attrsStr}></${tag}>`;\n\n    // If single line fits within LINE_WIDTH, use it\n    if (singleLine.length <= LINE_WIDTH) {\n      return singleLine;\n    }\n\n    // Otherwise, break attributes to multiple lines\n    const attrIndent = indent + '  ';\n    const formattedAttrs = attrArray.length > 0\n      ? '\\n' + attrArray.map((attr) => `${attrIndent}${attr}`).join('\\n') + '\\n' + indent\n      : '';\n\n    return mode === 'jsx'\n      ? `${indent}<${tag}${formattedAttrs}/>`\n      : `${indent}<${tag}${formattedAttrs}></${tag}>`;\n  }\n\n  // Tags with children\n  const attrsStr = attrArray.length > 0 ? ' ' + attrArray.join(' ') : '';\n  const openingTag = `${indent}<${tag}${attrsStr}>`;\n\n  // Check if opening tag fits on one line\n  if (openingTag.length <= LINE_WIDTH) {\n    const childrenString = children\n      .map((child) => vnodeToString(child, options, indentLevel + 1))\n      .join('\\n');\n    return `${openingTag}\\n${childrenString}\\n${indent}</${tag}>`;\n  }\n\n  // Break opening tag to multiple lines\n  const attrIndent = indent + '  ';\n  const formattedAttrs = attrArray.length > 0\n    ? '\\n' + attrArray.map((attr) => `${attrIndent}${attr}`).join('\\n') + '\\n' + indent\n    : '';\n  const childrenString = children\n    .map((child) => vnodeToString(child, options, indentLevel + 1))\n    .join('\\n');\n\n  return `${indent}<${tag}${formattedAttrs}>\\n${childrenString}\\n${indent}</${tag}>`;\n}\n\nexport const renderVNode = (vnode: VNode, mode: RenderMode) => {\n  return vnodeToString(vnode, { mode });\n};\n","import { SourceType } from 'storybook/internal/docs-tools';\nimport { emitTransformCode, useEffect } from 'storybook/internal/preview-api';\nimport type { AnnotatedStoryFn, Args, DecoratorFunction } from 'storybook/internal/types';\nimport type { StencilRenderer } from '../types';\nimport { renderVNode } from './render-vnode';\n\ntype StoryFn<TArgs = Args> = AnnotatedStoryFn<StencilRenderer<unknown>, TArgs>;\n\nconst skip = (context: Parameters<DecoratorFunction<StencilRenderer<unknown>>>[1]) => {\n  const sourceParams = context?.parameters.docs?.source;\n  const isArgsStory = context?.parameters.__isArgsStory;\n\n  if (sourceParams.type === SourceType.DYNAMIC) return false;\n\n  return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE;\n};\n\nexport const sourceDecorator: DecoratorFunction<StencilRenderer<unknown>> = (storyFn, context) => {\n  const story = storyFn();\n\n  useEffect(() => {\n    const renderedForSource = context?.parameters.docs?.source?.excludeDecorators\n      ? (context.originalStoryFn as StoryFn)(context.args, context)\n      : story;\n\n    if (skip(context)) return;\n\n    switch (context.parameters.docs.source.language) {\n      case 'html': {\n        emitTransformCode(renderVNode(renderedForSource, 'html'), context);\n        break;\n      }\n      case 'jsx':\n      case 'tsx': {\n        emitTransformCode(renderVNode(renderedForSource, 'jsx'), context);\n        break;\n      }\n    }\n  });\n\n  return story;\n};\n"],"mappings":"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"}