@kubuild/renderer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/renderer.tsx","../src/render-context.tsx","../src/styles.ts","../src/error-boundary.tsx","../src/prop-resolution.ts","../src/preview-adapter.tsx"],"sourcesContent":["export * from './renderer';\nexport * from './styles';\nexport * from './render-context';\nexport * from './error-boundary';\nexport * from './preview-adapter';\n","import React, { useRef, useLayoutEffect, useState, useEffect, useMemo } from 'react';\nimport { PageDocument, Node, isAssetReference, isActionBinding, isVariableBinding } from '@kubuild/schema';\nimport { ComponentRegistry, createDefaultComponentRegistry } from '@kubuild/components';\nimport {\n RenderContext,\n DEFAULT_RENDER_CONTEXT,\n RenderContextProvider,\n resolveAssetSync,\n resolveActionPayload,\n isActionRegistered,\n dispatchAction,\n Diagnostic,\n} from './render-context';\nimport { resolveBinding, sanitizeUrl, sanitizeHtml } from '@kubuild/core';\nimport { icons as lucideIcons } from 'lucide-react';\nimport { resolveNodeStyles, collectStateStylesCss } from './styles';\nimport { ComponentErrorBoundary } from './error-boundary';\nimport { resolvePropsForNode } from './prop-resolution';\n\nfunction toPascalCase(str: string): string {\n if (!str) return '';\n return str\n .replace(/[-_](\\w)/g, (_, c) => c.toUpperCase())\n .replace(/^\\w/, (c) => c.toUpperCase());\n}\n\nfunction getYouTubeId(url: string): string | null {\n if (!url || typeof url !== 'string') return null;\n const match = url.match(\n /(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\"&?\\/\\s]{11})/i,\n );\n return match ? match[1] : null;\n}\n\nfunction getVimeoId(url: string): string | null {\n if (!url || typeof url !== 'string') return null;\n const match = url.match(\n /(?:vimeo\\.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|))(\\d+)/i,\n );\n return match ? match[3] : null;\n}\n\nfunction aspectRatioToCss(ratio: unknown): string | undefined {\n if (ratio === '16:9') return '16 / 9';\n if (ratio === '4:3') return '4 / 3';\n if (ratio === '1:1') return '1 / 1';\n if (ratio === '9:16') return '9 / 16';\n if (typeof ratio === 'string' && ratio !== 'auto') return ratio.replace(':', ' / ');\n return undefined;\n}\n\nexport interface EditableTextProps {\n as?: string;\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n value: string;\n isEditable: boolean;\n nodeId: string;\n onClick?: (e: React.MouseEvent) => void;\n onChange?: (val: string, isBlur: boolean) => void;\n [key: string]: unknown;\n}\n\nexport const EditableText: React.FC<EditableTextProps> = ({\n as = 'p',\n id,\n className,\n style,\n value,\n isEditable,\n nodeId,\n onClick,\n onChange,\n ...rest\n}) => {\n const isEditingRef = useRef(false);\n\n const Tag = as as any;\n\n if (!isEditable) {\n return (\n <Tag\n id={id}\n className={className}\n style={style}\n onClick={onClick}\n data-kubuild-node={nodeId}\n {...rest}\n >\n {value}\n </Tag>\n );\n }\n\n return (\n <Tag\n id={id}\n className={className}\n style={{\n ...style,\n outline: 'none',\n cursor: 'text',\n }}\n contentEditable={true}\n suppressContentEditableWarning={true}\n data-kubuild-node={nodeId}\n onClick={(e: React.MouseEvent) => {\n onClick?.(e);\n }}\n onFocus={() => {\n isEditingRef.current = true;\n }}\n onInput={(e: React.FormEvent<HTMLElement>) => {\n const text = e.currentTarget.textContent ?? '';\n onChange?.(text, false);\n }}\n onBlur={(e: React.FocusEvent<HTMLElement>) => {\n isEditingRef.current = false;\n const text = e.currentTarget.textContent ?? '';\n onChange?.(text, true);\n }}\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n (e.currentTarget as HTMLElement).blur();\n }\n }}\n {...rest}\n >\n {value}\n </Tag>\n );\n};\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport function transformEmbedHtml(rawHtml: string): string {\n if (!rawHtml) return '';\n\n return rawHtml.replace(/<style\\b([^>]*)>([\\s\\S]*?)<\\/style>/gi, (_match, attrs, cssContent) => {\n let transformedCss = cssContent;\n // Replace \"body {\" or \"body,\" with \":host, body {\"\n transformedCss = transformedCss.replace(/(^|[\\s,{}])body(?=[\\s,{])/g, '$1:host, body');\n // Replace \"html {\" or \"html,\" with \":host, html {\"\n transformedCss = transformedCss.replace(/(^|[\\s,{}])html(?=[\\s,{])/g, '$1:host, html');\n\n return `<style${attrs}>\\n:host { display: block; }\\n${transformedCss}</style>`;\n });\n}\n\nexport interface HtmlEmbedViewProps {\n id?: string;\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n html: string;\n role?: string;\n}\n\nexport const HtmlEmbedView: React.FC<HtmlEmbedViewProps> = ({\n id,\n style,\n onClick,\n dataKubuildNode,\n html,\n role,\n}) => {\n const hostRef = useRef<HTMLDivElement>(null);\n const shadowRootRef = useRef<ShadowRoot | null>(null);\n\n const scopedHtml = useMemo(() => transformEmbedHtml(html), [html]);\n\n useIsomorphicLayoutEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n if (typeof host.attachShadow === 'function') {\n if (!shadowRootRef.current) {\n if (host.shadowRoot) {\n shadowRootRef.current = host.shadowRoot;\n } else {\n try {\n shadowRootRef.current = host.attachShadow({ mode: 'open' });\n } catch {\n shadowRootRef.current = host.shadowRoot;\n }\n }\n }\n\n if (shadowRootRef.current) {\n shadowRootRef.current.innerHTML = scopedHtml;\n return;\n }\n }\n\n host.innerHTML = scopedHtml;\n }, [scopedHtml]);\n\n return (\n <div\n ref={hostRef}\n id={id}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\n role={role}\n >\n <template\n // @ts-expect-error Declarative shadow root for SSR\n shadowrootmode=\"open\"\n dangerouslySetInnerHTML={{ __html: scopedHtml }}\n />\n </div>\n );\n};\n\nexport interface KubuildRendererProps {\n document: PageDocument;\n registry?: ComponentRegistry;\n context?: RenderContext;\n viewport?: 'desktop' | 'tablet' | 'mobile';\n mode?: 'editor' | 'runtime';\n className?: string;\n onNodeClick?: (nodeId: string, event: React.MouseEvent) => void;\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n onActionDispatch?: (actionType: string, payload: Record<string, unknown> | undefined, nodeId: string) => void;\n onNodePropChange?: (nodeId: string, propName: string, value: unknown, isBlur?: boolean) => void;\n}\n\nexport interface NodeRendererProps {\n node: Node;\n document: PageDocument;\n registry: ComponentRegistry;\n context?: RenderContext;\n viewport?: 'desktop' | 'tablet' | 'mobile';\n mode?: 'editor' | 'runtime';\n onNodeClick?: (nodeId: string, event: React.MouseEvent) => void;\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n onActionDispatch?: (actionType: string, payload: Record<string, unknown> | undefined, nodeId: string) => void;\n onNodePropChange?: (nodeId: string, propName: string, value: unknown, isBlur?: boolean) => void;\n /**\n * Suffix appended to the HTML `id` attribute (never to `data-kubuild-node`, the\n * canonical template-node reference) so a `collection` node's repeated child\n * template produces unique DOM ids per iteration instead of duplicates.\n */\n instanceSuffix?: string;\n}\n\nexport function NodeRenderer({\n node,\n document,\n registry,\n context: propContext,\n viewport = 'desktop',\n mode = 'runtime',\n onNodeClick,\n onDiagnostic,\n onActionDispatch,\n onNodePropChange,\n instanceSuffix = '',\n}: NodeRendererProps): React.ReactElement {\n const context = propContext || DEFAULT_RENDER_CONTEXT;\n const styles = resolveNodeStyles(node.styles, viewport);\n const props = node.props || {};\n const definition = registry.get(node.type);\n const domId = instanceSuffix ? `${node.id}${instanceSuffix}` : node.id;\n const { props: resolvedProps, diagnostics } = resolvePropsForNode(node, definition, context);\n diagnostics.forEach((diagnostic) => {\n onDiagnostic?.(diagnostic);\n context?.onDiagnostic?.(diagnostic);\n });\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onNodeClick) {\n onNodeClick(node.id, e);\n }\n if (props.action && !props.disabled) {\n dispatchAction({\n action: props.action,\n nodeId: node.id,\n document,\n context,\n onDiagnostic,\n });\n if (onActionDispatch && isActionBinding(props.action)) {\n onActionDispatch(props.action.type, resolveActionPayload(context, props.action.payload), node.id);\n }\n }\n };\n\n const childrenElements = node.children?.map((child: Node) => (\n <NodeRenderer\n key={`${child.id}${instanceSuffix}`}\n node={child}\n document={document}\n registry={registry}\n context={context}\n viewport={viewport}\n mode={mode}\n onNodeClick={onNodeClick}\n onDiagnostic={onDiagnostic}\n onActionDispatch={onActionDispatch}\n onNodePropChange={onNodePropChange}\n instanceSuffix={instanceSuffix}\n />\n ));\n\n const renderNodeContent = (): React.ReactElement => {\n // Check if custom component renderer is registered in ComponentRegistry\n if (definition?.renderer && typeof definition.renderer === 'function') {\n const CustomRenderer = definition.renderer as React.ComponentType<{\n node: Node;\n document: PageDocument;\n props: Record<string, unknown>;\n styles: React.CSSProperties;\n context?: RenderContext;\n children?: React.ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n }>;\n\n try {\n if (typeof CustomRenderer === 'function' && !CustomRenderer.prototype?.isReactComponent) {\n return (CustomRenderer as (p: unknown) => React.ReactElement)({\n node,\n document,\n props: resolvedProps,\n styles,\n context,\n children: childrenElements,\n onClick: handleClick,\n });\n }\n } catch (err) {\n throw err;\n }\n\n return (\n <CustomRenderer\n node={node}\n document={document}\n props={resolvedProps}\n styles={styles}\n context={context}\n onClick={handleClick}\n >\n {childrenElements}\n </CustomRenderer>\n );\n }\n\n switch (node.type) {\n case 'page':\n return (\n <div id={domId} style={styles} onClick={handleClick} data-kubuild-node={node.id}>\n {childrenElements}\n </div>\n );\n case 'section':\n return (\n <section\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n aria-label={typeof resolvedProps.ariaLabel === 'string' ? resolvedProps.ariaLabel : undefined}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {childrenElements}\n </section>\n );\n case 'container':\n return (\n <div\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {childrenElements}\n </div>\n );\n case 'columns':\n return (\n <div\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {childrenElements}\n </div>\n );\n case 'heading': {\n const rawLevel = typeof resolvedProps.level === 'number' ? resolvedProps.level : typeof props.level === 'number' ? props.level : 2;\n const clampedLevel = Math.min(Math.max(rawLevel, 1), 6);\n const text = String(resolvedProps.text ?? '');\n const Tag = `h${clampedLevel}`;\n const isEditable = mode === 'editor' && !isVariableBinding(props.text);\n return (\n <EditableText\n as={Tag}\n id={domId}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n aria-label={typeof resolvedProps.ariaLabel === 'string' ? resolvedProps.ariaLabel : undefined}\n />\n );\n }\n case 'text': {\n const content = String(resolvedProps.content ?? '');\n const isEditable = mode === 'editor' && !isVariableBinding(props.content);\n return (\n <EditableText\n as=\"p\"\n id={domId}\n style={styles}\n value={content}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'content', val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'paragraph': {\n const text = String(resolvedProps.text ?? resolvedProps.content ?? props.text ?? props.content ?? '');\n const isEditable = mode === 'editor' && !isVariableBinding(props.text) && !isVariableBinding(props.content);\n const propName = props.content !== undefined ? 'content' : 'text';\n return (\n <EditableText\n as=\"p\"\n id={domId}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, propName, val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'link': {\n const text = String(resolvedProps.text ?? props.text ?? '');\n const rawHref = typeof resolvedProps.href === 'string' ? resolvedProps.href : typeof props.href === 'string' ? props.href : undefined;\n const href = rawHref ? sanitizeUrl(rawHref, '#') : '#';\n const rawTarget = typeof resolvedProps.target === 'string' ? resolvedProps.target : undefined;\n const rawRel = typeof resolvedProps.rel === 'string' ? resolvedProps.rel : undefined;\n const rel = rawTarget === '_blank' && !rawRel ? 'noopener noreferrer' : rawRel;\n const isEditable = mode === 'editor' && !isVariableBinding(props.text);\n\n if (isEditable) {\n return (\n <EditableText\n as=\"a\"\n id={domId}\n href={undefined}\n target={rawTarget}\n rel={rel}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n\n return (\n <a\n id={domId}\n href={href}\n target={rawTarget}\n rel={rel}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {text}\n </a>\n );\n }\n case 'blockquote': {\n const text = resolvedProps.text !== undefined ? String(resolvedProps.text) : props.text !== undefined ? String(props.text) : '';\n const rawCite = typeof resolvedProps.cite === 'string' ? resolvedProps.cite : typeof props.cite === 'string' ? props.cite : undefined;\n const safeCite = rawCite ? sanitizeUrl(rawCite) : undefined;\n const hasChildren = Boolean(childrenElements && childrenElements.length > 0);\n const isEditable = mode === 'editor' && !isVariableBinding(props.text);\n\n if (hasChildren) {\n return (\n <blockquote\n id={domId}\n cite={safeCite}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {text ? (\n isEditable ? (\n <EditableText\n as=\"p\"\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n />\n ) : (\n <p>{text}</p>\n )\n ) : null}\n {childrenElements}\n </blockquote>\n );\n }\n\n return (\n <EditableText\n as=\"blockquote\"\n id={domId}\n cite={safeCite}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'badge': {\n const text = String(resolvedProps.text ?? props.text ?? 'Badge');\n const variant = typeof resolvedProps.variant === 'string' ? resolvedProps.variant : 'default';\n const isEditable = mode === 'editor' && !isVariableBinding(props.text);\n\n return (\n <EditableText\n as=\"span\"\n id={domId}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n data-variant={variant}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'code-block': {\n const code = String(resolvedProps.code ?? props.code ?? '');\n const language = typeof resolvedProps.language === 'string' ? resolvedProps.language : typeof props.language === 'string' ? props.language : undefined;\n const isEditable = mode === 'editor' && !isVariableBinding(props.code);\n\n return (\n <pre\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-language={language}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n <EditableText\n as=\"code\"\n className={language ? `language-${language}` : undefined}\n style={{ fontFamily: 'inherit', color: 'inherit', display: 'block', whiteSpace: 'pre' }}\n value={code}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'code', val, isBlur)}\n />\n </pre>\n );\n }\n case 'list': {\n const rawTag = resolvedProps.tag;\n const Tag = rawTag === 'ol' ? 'ol' : 'ul';\n const rawListStyle = resolvedProps.listStyleType as string | undefined;\n const listStyleType = rawListStyle === 'custom-icon' ? 'none' : rawListStyle;\n const listStyles: React.CSSProperties = {\n ...styles,\n ...(listStyleType ? { listStyleType } : {}),\n };\n return (\n <Tag\n id={domId}\n style={listStyles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-list-style={rawListStyle}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {childrenElements}\n </Tag>\n );\n }\n case 'list-item': {\n const text = resolvedProps.text !== undefined ? String(resolvedProps.text) : '';\n const hasChildren = Boolean(childrenElements && childrenElements.length > 0);\n const isEditable = mode === 'editor' && !isVariableBinding(props.text);\n\n if (hasChildren) {\n return (\n <li\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {text ? (\n isEditable ? (\n <EditableText\n as=\"span\"\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n />\n ) : (\n <span>{text}</span>\n )\n ) : null}\n {childrenElements}\n </li>\n );\n }\n\n return (\n <EditableText\n as=\"li\"\n id={domId}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'table': {\n const isStriped = resolvedProps.striped === true;\n const isBordered = resolvedProps.bordered !== false;\n const isCompact = resolvedProps.compact === true;\n\n const tableStyles: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'collapse',\n ...styles,\n ...(isBordered ? { border: styles.border || '1px solid #e2e8f0' } : {}),\n };\n\n return (\n <table\n id={domId}\n style={tableStyles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-striped={isStriped ? 'true' : undefined}\n data-bordered={isBordered ? 'true' : undefined}\n data-compact={isCompact ? 'true' : undefined}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n <tbody>{childrenElements}</tbody>\n </table>\n );\n }\n case 'table-row': {\n return (\n <tr\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {childrenElements}\n </tr>\n );\n }\n case 'table-cell': {\n const rawTag = resolvedProps.tag;\n const Tag = rawTag === 'th' ? 'th' : 'td';\n const colSpan =\n typeof resolvedProps.colSpan === 'number' && resolvedProps.colSpan > 1\n ? resolvedProps.colSpan\n : undefined;\n const rowSpan =\n typeof resolvedProps.rowSpan === 'number' && resolvedProps.rowSpan > 1\n ? resolvedProps.rowSpan\n : undefined;\n const text = resolvedProps.text !== undefined ? String(resolvedProps.text) : '';\n const hasChildren = Boolean(childrenElements && childrenElements.length > 0);\n const isEditable = mode === 'editor' && !isVariableBinding(props.text);\n\n const cellStyles: React.CSSProperties = {\n padding: '8px 12px',\n border: '1px solid #e2e8f0',\n textAlign: 'left',\n ...styles,\n ...(Tag === 'th'\n ? {\n fontWeight: styles.fontWeight || '600',\n backgroundColor: styles.backgroundColor || '#f8fafc',\n }\n : {}),\n };\n\n if (hasChildren) {\n return (\n <Tag\n id={domId}\n colSpan={colSpan}\n rowSpan={rowSpan}\n style={cellStyles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n {text ? (\n isEditable ? (\n <EditableText\n as=\"span\"\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n />\n ) : (\n <span>{text}</span>\n )\n ) : null}\n {childrenElements}\n </Tag>\n );\n }\n\n return (\n <EditableText\n as={Tag}\n id={domId}\n colSpan={colSpan}\n rowSpan={rowSpan}\n style={cellStyles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'image': {\n const rawSrc = typeof resolvedProps.src === 'string' && resolvedProps.src.length > 0 ? resolvedProps.src : undefined;\n const directSrc = rawSrc ?? undefined;\n const asset = isAssetReference(props.asset) ? props.asset : undefined;\n const resolvedSrc =\n !directSrc && asset && context?.assetProvider\n ? resolveAssetSync(context.assetProvider, asset.assetId)\n : undefined;\n const fallbackSrc = asset?.fallbackUrl;\n const rawUrl = directSrc || resolvedSrc || fallbackSrc;\n // blob: allowed for media — runtime-only in-memory uploads (STORA-250).\n const safeSrc = rawUrl ? sanitizeUrl(rawUrl, '', { allowBlobMedia: true }) : undefined;\n const alt = typeof resolvedProps.alt === 'string' ? resolvedProps.alt : '';\n const loading = resolvedProps.loading === 'eager' ? 'eager' : 'lazy';\n\n return (\n <img\n id={domId}\n src={safeSrc || undefined}\n alt={alt}\n role={alt.length === 0 ? 'presentation' : undefined}\n loading={loading}\n width={resolvedProps.width as number}\n height={resolvedProps.height as number}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n />\n );\n }\n case 'video': {\n const rawSrc = typeof resolvedProps.src === 'string' ? resolvedProps.src : typeof props.src === 'string' ? props.src : '';\n const provider = typeof resolvedProps.provider === 'string' ? resolvedProps.provider : typeof props.provider === 'string' ? props.provider : 'auto';\n const rawPoster = typeof resolvedProps.poster === 'string' ? resolvedProps.poster : typeof props.poster === 'string' ? props.poster : undefined;\n const poster = rawPoster ? sanitizeUrl(rawPoster) : undefined;\n const controls = resolvedProps.controls !== false && props.controls !== false;\n const autoplay = resolvedProps.autoplay === true || props.autoplay === true;\n const loop = resolvedProps.loop === true || props.loop === true;\n const muted = resolvedProps.muted === true || props.muted === true;\n const aspectRatio = aspectRatioToCss(resolvedProps.aspectRatio ?? props.aspectRatio ?? '16:9');\n\n const ytId = provider === 'youtube' ? (getYouTubeId(rawSrc) || rawSrc) : (provider === 'auto' ? getYouTubeId(rawSrc) : null);\n const vimeoId = provider === 'vimeo' ? (getVimeoId(rawSrc) || rawSrc) : (provider === 'auto' ? getVimeoId(rawSrc) : null);\n\n const videoStyles: React.CSSProperties = {\n width: '100%',\n maxWidth: '100%',\n display: 'block',\n ...(aspectRatio ? { aspectRatio } : {}),\n ...styles,\n };\n\n if (ytId) {\n const autoplayParam = autoplay ? '1' : '0';\n const loopParam = loop ? `1&playlist=${ytId}` : '0';\n const muteParam = muted ? '1' : '0';\n const controlsParam = controls ? '1' : '0';\n const embedUrl = `https://www.youtube.com/embed/${ytId}?autoplay=${autoplayParam}&loop=${loopParam}&mute=${muteParam}&controls=${controlsParam}`;\n\n return (\n <div\n id={domId}\n style={{ ...videoStyles, position: 'relative', overflow: 'hidden' }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-video-provider=\"youtube\"\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n <iframe\n src={embedUrl}\n title=\"YouTube video\"\n style={{ width: '100%', height: '100%', border: 'none', minHeight: '240px' }}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n allowFullScreen\n />\n </div>\n );\n }\n\n if (vimeoId) {\n const autoplayParam = autoplay ? '1' : '0';\n const loopParam = loop ? '1' : '0';\n const muteParam = muted ? '1' : '0';\n const embedUrl = `https://player.vimeo.com/video/${vimeoId}?autoplay=${autoplayParam}&loop=${loopParam}&muted=${muteParam}`;\n\n return (\n <div\n id={domId}\n style={{ ...videoStyles, position: 'relative', overflow: 'hidden' }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-video-provider=\"vimeo\"\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n >\n <iframe\n src={embedUrl}\n title=\"Vimeo video\"\n style={{ width: '100%', height: '100%', border: 'none', minHeight: '240px' }}\n allow=\"autoplay; fullscreen; picture-in-picture\"\n allowFullScreen\n />\n </div>\n );\n }\n\n const safeSrc = sanitizeUrl(rawSrc, '', { allowBlobMedia: true });\n\n return (\n <video\n id={domId}\n src={safeSrc || undefined}\n poster={poster || undefined}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n style={videoStyles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-video-provider=\"html5\"\n playsInline\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'icon': {\n const name = typeof resolvedProps.name === 'string' && resolvedProps.name.trim().length > 0\n ? resolvedProps.name.trim()\n : typeof props.name === 'string' && props.name.trim().length > 0\n ? props.name.trim()\n : 'star';\n const size = typeof resolvedProps.size === 'number' ? resolvedProps.size : typeof props.size === 'number' ? props.size : 24;\n const color = typeof resolvedProps.color === 'string' ? resolvedProps.color : typeof props.color === 'string' ? props.color : 'currentColor';\n const strokeWidth = typeof resolvedProps.strokeWidth === 'number' ? resolvedProps.strokeWidth : typeof props.strokeWidth === 'number' ? props.strokeWidth : 2;\n const pascalName = toPascalCase(name);\n const IconComponent = (lucideIcons as Record<string, React.ComponentType<{ size?: number; color?: string; strokeWidth?: number; className?: string; style?: React.CSSProperties }>>)[pascalName];\n\n return (\n <span\n id={domId}\n style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', color, ...styles }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-icon-name={name}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : 'img'}\n aria-label={typeof resolvedProps.ariaLabel === 'string' ? resolvedProps.ariaLabel : name}\n >\n {IconComponent ? (\n <IconComponent size={size} color={color} strokeWidth={strokeWidth} />\n ) : (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={strokeWidth} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n )}\n </span>\n );\n }\n case 'html-embed': {\n const rawHtml = typeof resolvedProps.html === 'string' ? resolvedProps.html : typeof props.html === 'string' ? props.html : '';\n const sanitized = sanitizeHtml(rawHtml);\n\n if (mode === 'editor' && !rawHtml.trim()) {\n return (\n <div\n id={domId}\n style={{\n padding: '16px',\n border: '2px dashed #94a3b8',\n borderRadius: '8px',\n backgroundColor: '#f8fafc',\n color: '#64748b',\n textAlign: 'center',\n fontSize: '13px',\n fontFamily: 'sans-serif',\n ...styles,\n }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <span style={{ fontWeight: 600 }}>&lt;/&gt; HTML Embed</span>\n <div style={{ fontSize: '11px', marginTop: '4px' }}>Click to configure HTML code in Inspector Panel</div>\n </div>\n );\n }\n\n return (\n <HtmlEmbedView\n id={domId}\n style={styles}\n onClick={handleClick}\n dataKubuildNode={node.id}\n html={sanitized}\n role={typeof resolvedProps.role === 'string' ? resolvedProps.role : undefined}\n />\n );\n }\n case 'button': {\n const label = String(resolvedProps.label ?? 'Button');\n const disabled = resolvedProps.disabled === true;\n const rawHref = typeof resolvedProps.href === 'string' ? resolvedProps.href : undefined;\n const href = rawHref ? sanitizeUrl(rawHref, '#') : undefined;\n const rawTarget = typeof resolvedProps.target === 'string' ? resolvedProps.target : undefined;\n const rawRel = typeof resolvedProps.rel === 'string' ? resolvedProps.rel : undefined;\n const rel = rawTarget === '_blank' && !rawRel ? 'noopener noreferrer' : rawRel;\n const action = isActionBinding(props.action) ? props.action : undefined;\n const actionResolved = action ? isActionRegistered(context?.actionRegistry, action.type) : undefined;\n const actionAttrs = action\n ? { 'data-kubuild-action': action.type, 'data-kubuild-action-resolved': actionResolved }\n : {};\n const ariaLabel = typeof resolvedProps.ariaLabel === 'string' ? resolvedProps.ariaLabel : undefined;\n const isEditable = mode === 'editor' && !isVariableBinding(props.label);\n\n const rawButtonType = typeof resolvedProps.buttonType === 'string' ? resolvedProps.buttonType : 'button';\n const buttonType: 'button' | 'submit' | 'reset' =\n rawButtonType === 'submit' || rawButtonType === 'reset' ? rawButtonType : 'button';\n\n if (href && !disabled) {\n if (isEditable) {\n return (\n <EditableText\n as=\"a\"\n id={domId}\n href={mode === 'editor' ? undefined : href}\n target={rawTarget}\n rel={rel}\n style={styles}\n value={label}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'label', val, isBlur)}\n aria-label={ariaLabel}\n tabIndex={0}\n {...actionAttrs}\n />\n );\n }\n return (\n <a\n id={domId}\n href={href}\n target={rawTarget}\n rel={rel}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n aria-label={ariaLabel}\n tabIndex={0}\n {...actionAttrs}\n >\n {label}\n </a>\n );\n }\n\n if (isEditable) {\n return (\n <EditableText\n as=\"button\"\n id={domId}\n type={mode === 'editor' ? 'button' : buttonType}\n disabled={disabled}\n aria-disabled={disabled ? true : undefined}\n aria-label={ariaLabel}\n tabIndex={disabled ? -1 : 0}\n style={styles}\n value={label}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={disabled ? undefined : handleClick}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'label', val, isBlur)}\n {...actionAttrs}\n />\n );\n }\n\n return (\n <button\n id={domId}\n type={mode === 'editor' ? 'button' : buttonType}\n disabled={disabled}\n aria-disabled={disabled ? true : undefined}\n aria-label={ariaLabel}\n tabIndex={disabled ? -1 : 0}\n style={styles}\n onClick={disabled ? undefined : handleClick}\n data-kubuild-node={node.id}\n {...actionAttrs}\n >\n {label}\n </button>\n );\n }\n case 'form': {\n const action = typeof resolvedProps.action === 'string' ? resolvedProps.action : undefined;\n const method = typeof resolvedProps.method === 'string' ? resolvedProps.method : 'POST';\n const target = typeof resolvedProps.target === 'string' ? resolvedProps.target : undefined;\n const autoComplete = typeof resolvedProps.autoComplete === 'string' ? resolvedProps.autoComplete : undefined;\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : undefined;\n\n const handleSubmit = (e: React.FormEvent) => {\n if (mode === 'editor') {\n e.preventDefault();\n }\n };\n\n return (\n <form\n id={domId}\n name={name}\n action={action && mode !== 'editor' ? sanitizeUrl(action, '') : undefined}\n method={method}\n target={target}\n autoComplete={autoComplete}\n style={styles}\n onClick={handleClick}\n onSubmit={handleSubmit}\n data-kubuild-node={node.id}\n role=\"form\"\n aria-label={name}\n >\n {childrenElements}\n </form>\n );\n }\n case 'input': {\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : undefined;\n const inputType = typeof resolvedProps.type === 'string' ? resolvedProps.type : 'text';\n const placeholder = typeof resolvedProps.placeholder === 'string' ? resolvedProps.placeholder : undefined;\n const defaultValue = resolvedProps.defaultValue !== undefined ? String(resolvedProps.defaultValue) : undefined;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n const readOnly = resolvedProps.readOnly === true;\n\n return (\n <input\n id={domId}\n type={inputType}\n name={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n />\n );\n }\n case 'textarea': {\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : undefined;\n const placeholder = typeof resolvedProps.placeholder === 'string' ? resolvedProps.placeholder : undefined;\n const defaultValue = resolvedProps.defaultValue !== undefined ? String(resolvedProps.defaultValue) : undefined;\n const rows = typeof resolvedProps.rows === 'number' ? resolvedProps.rows : 4;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n const readOnly = resolvedProps.readOnly === true;\n\n return (\n <textarea\n id={domId}\n name={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n rows={rows}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n />\n );\n }\n case 'select': {\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : undefined;\n const placeholder = typeof resolvedProps.placeholder === 'string' ? resolvedProps.placeholder : undefined;\n const defaultValue = resolvedProps.defaultValue !== undefined ? String(resolvedProps.defaultValue) : undefined;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n\n let optionsList: Array<{ label: string; value: string }> = [];\n const rawOptions = resolvedProps.options ?? props.options;\n if (Array.isArray(rawOptions)) {\n optionsList = rawOptions.map((opt) => {\n if (typeof opt === 'object' && opt !== null) {\n const record = opt as Record<string, unknown>;\n return {\n label: String(record.label ?? record.value ?? ''),\n value: String(record.value ?? record.label ?? ''),\n };\n }\n return { label: String(opt), value: String(opt) };\n });\n } else if (typeof rawOptions === 'string') {\n try {\n const parsed = JSON.parse(rawOptions);\n if (Array.isArray(parsed)) {\n optionsList = parsed.map((opt) => {\n if (typeof opt === 'object' && opt !== null) {\n const record = opt as Record<string, unknown>;\n return {\n label: String(record.label ?? record.value ?? ''),\n value: String(record.value ?? record.label ?? ''),\n };\n }\n return { label: String(opt), value: String(opt) };\n });\n }\n } catch {\n // Not valid JSON\n }\n }\n\n return (\n <select\n id={domId}\n name={name}\n defaultValue={defaultValue}\n required={required}\n disabled={disabled}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n {placeholder && (\n <option value=\"\" disabled={required}>\n {placeholder}\n </option>\n )}\n {optionsList.map((opt, idx) => (\n <option key={`${opt.value}-${idx}`} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n }\n case 'checkbox': {\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : undefined;\n const label = String(resolvedProps.label ?? 'Checkbox');\n const value = resolvedProps.value !== undefined ? String(resolvedProps.value) : 'yes';\n const defaultChecked = resolvedProps.defaultChecked === true;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n const isEditable = mode === 'editor' && !isVariableBinding(props.label);\n\n return (\n <label\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <input\n type=\"checkbox\"\n name={name}\n value={value}\n defaultChecked={defaultChecked}\n required={required}\n disabled={disabled}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n />\n {isEditable ? (\n <EditableText\n as=\"span\"\n value={label}\n isEditable={isEditable}\n nodeId={node.id}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'label', val, isBlur)}\n />\n ) : (\n <span>{label}</span>\n )}\n </label>\n );\n }\n case 'radio': {\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : undefined;\n const label = String(resolvedProps.label ?? 'Radio');\n const value = resolvedProps.value !== undefined ? String(resolvedProps.value) : 'option';\n const defaultChecked = resolvedProps.defaultChecked === true;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n const isEditable = mode === 'editor' && !isVariableBinding(props.label);\n\n return (\n <label\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <input\n type=\"radio\"\n name={name}\n value={value}\n defaultChecked={defaultChecked}\n required={required}\n disabled={disabled}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n />\n {isEditable ? (\n <EditableText\n as=\"span\"\n value={label}\n isEditable={isEditable}\n nodeId={node.id}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'label', val, isBlur)}\n />\n ) : (\n <span>{label}</span>\n )}\n </label>\n );\n }\n case 'collection': {\n const sourceKey = typeof props.sourceKey === 'string' ? props.sourceKey : undefined;\n const itemAlias =\n typeof props.itemAlias === 'string' && props.itemAlias.length > 0 ? props.itemAlias : 'item';\n const indexKey = `${itemAlias}Index`;\n const sourceValue = sourceKey ? resolveBinding({ key: sourceKey }, context).value : undefined;\n\n if (!Array.isArray(sourceValue)) {\n const collectionDiagnostic: Diagnostic = {\n code: 'INVALID_COLLECTION_SOURCE',\n nodeId: node.id,\n propName: 'sourceKey',\n message: `Collection node \"${node.id}\" expected an array at variable path \"${\n sourceKey ?? '(missing sourceKey)'\n }\" but found ${sourceValue === undefined ? 'nothing' : typeof sourceValue}.`,\n };\n onDiagnostic?.(collectionDiagnostic);\n context?.onDiagnostic?.(collectionDiagnostic);\n\n if (mode === 'editor') {\n return (\n <div\n id={domId}\n data-kubuild-node={node.id}\n data-kubuild-collection-invalid={node.type}\n style={{\n ...styles,\n border: '2px dashed #f59e0b',\n backgroundColor: '#fffbeb',\n color: '#92400e',\n padding: '12px',\n borderRadius: '6px',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n onClick={handleClick}\n >\n <div style={{ fontWeight: 600, fontSize: '13px' }}>\n 📦 Collection: expected an array at <code>{sourceKey ?? '(missing sourceKey)'}</code>\n </div>\n </div>\n );\n }\n\n return (\n <div id={domId} data-kubuild-node={node.id} style={styles} onClick={handleClick} aria-hidden=\"true\" />\n );\n }\n\n return (\n <div id={domId} data-kubuild-node={node.id} style={styles} onClick={handleClick}>\n {sourceValue.map((item, index) => {\n const childContext: RenderContext = {\n ...context,\n variables: { ...(context?.variables ?? {}), [itemAlias]: item, [indexKey]: index },\n };\n const itemSuffix = `${instanceSuffix}--${index}`;\n return node.children?.map((child: Node) => (\n <NodeRenderer\n key={`${child.id}${itemSuffix}`}\n node={child}\n document={document}\n registry={registry}\n context={childContext}\n viewport={viewport}\n mode={mode}\n onNodeClick={onNodeClick}\n onDiagnostic={onDiagnostic}\n onActionDispatch={onActionDispatch}\n onNodePropChange={onNodePropChange}\n instanceSuffix={itemSuffix}\n />\n ));\n })}\n </div>\n );\n }\n default:\n // Unknown component handling\n if (mode === 'editor') {\n return (\n <div\n id={domId}\n data-kubuild-node={node.id}\n data-kubuild-unknown={node.type}\n style={{\n ...styles,\n border: '2px dashed #f59e0b',\n backgroundColor: '#fffbeb',\n color: '#92400e',\n padding: '12px',\n borderRadius: '6px',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n onClick={handleClick}\n >\n <div style={{ fontWeight: 600, fontSize: '13px', marginBottom: '4px' }}>\n 🧩 Unknown Component: <code>{node.type}</code>\n </div>\n <div style={{ fontSize: '11px', color: '#b45309', marginBottom: childrenElements ? '8px' : 0 }}>\n Node ID: <code>{node.id}</code>\n </div>\n {childrenElements}\n </div>\n );\n }\n\n // Safe fallback in runtime mode\n return (\n <div\n id={domId}\n data-kubuild-node={node.id}\n data-kubuild-unknown={node.type}\n style={styles}\n onClick={handleClick}\n >\n {childrenElements}\n </div>\n );\n }\n };\n\n let content: React.ReactElement;\n try {\n content = renderNodeContent();\n } catch (error) {\n if (mode === 'editor') {\n content = (\n <div\n data-kubuild-node={node.id}\n data-kubuild-error={node.type}\n style={{\n padding: '12px 16px',\n margin: '4px 0',\n backgroundColor: '#fef2f2',\n border: '1px solid #ef4444',\n borderRadius: '6px',\n color: '#b91c1c',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '13px',\n lineHeight: '1.4',\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>\n ⚠️ Component Render Error: &lt;{node.type}&gt;\n </div>\n <div style={{ fontSize: '11px', color: '#7f1d1d', wordBreak: 'break-all' }}>\n Node ID: <code>{node.id}</code> — {error instanceof Error ? error.message : String(error)}\n </div>\n </div>\n );\n } else {\n content = (\n <div\n data-kubuild-node={node.id}\n data-kubuild-error={node.type}\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n />\n );\n }\n }\n\n return (\n <ComponentErrorBoundary nodeId={node.id} componentType={node.type} mode={mode}>\n {content}\n </ComponentErrorBoundary>\n );\n}\n\nexport const KubuildRenderer: React.FC<KubuildRendererProps> = ({\n document,\n registry = createDefaultComponentRegistry(),\n context,\n viewport = 'desktop',\n mode = 'runtime',\n className,\n onNodeClick,\n onDiagnostic,\n onActionDispatch,\n onNodePropChange,\n}) => {\n if (!document || !document.document) {\n return <div className={className}>Empty Document</div>;\n }\n\n return (\n <RenderContextProvider value={context}>\n <div className={`kubuild-canvas-root ${className || ''}`}>\n {/* Compiled pseudo-state CSS (:hover/:active/:focus) — STORA-222 */}\n {(() => {\n const css = collectStateStylesCss(document);\n return css ? <style data-kubuild-state-styles>{css}</style> : null;\n })()}\n <NodeRenderer\n node={document.document}\n document={document}\n registry={registry}\n context={context}\n viewport={viewport}\n mode={mode}\n onNodeClick={onNodeClick}\n onDiagnostic={onDiagnostic}\n onActionDispatch={onActionDispatch}\n onNodePropChange={onNodePropChange}\n />\n </div>\n </RenderContextProvider>\n );\n};\n","import React, { createContext, useContext, useMemo } from 'react';\nimport { resolveBinding, type ResolveOutcome } from '@kubuild/core';\nimport type {\n AssetProvider,\n ActionRegistry,\n ActionHandler,\n ActionExecutionContext,\n ActionDiagnostic,\n Diagnostic,\n RenderContext,\n RuntimeContext,\n} from '@kubuild/core';\nimport { isVariableBinding, isActionBinding, ActionBinding, PageDocument } from '@kubuild/schema';\n\nexport type { RenderContext, RuntimeContext, ActionDiagnostic, Diagnostic };\n\n/**\n * Empty default frozen context\n */\nexport const DEFAULT_RENDER_CONTEXT: RenderContext = Object.freeze({});\n\n/**\n * React Context for RenderContext flow\n */\nconst RenderContextReact = createContext<RenderContext>(DEFAULT_RENDER_CONTEXT);\n\n/**\n * Creates an immutable (frozen) RenderContext.\n * Guarantees that components cannot mutate the runtime context during rendering.\n */\nexport function createRenderContext(options?: {\n variables?: Record<string, unknown>;\n assetProvider?: AssetProvider;\n actionRegistry?: ActionRegistry;\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n}): RenderContext {\n if (!options) {\n return DEFAULT_RENDER_CONTEXT;\n }\n\n const frozenVariables = options.variables ? Object.freeze({ ...options.variables }) : undefined;\n\n return Object.freeze({\n variables: frozenVariables,\n ...(options.assetProvider ? { assetProvider: options.assetProvider } : {}),\n ...(options.actionRegistry ? { actionRegistry: options.actionRegistry } : {}),\n ...(options.onDiagnostic ? { onDiagnostic: options.onDiagnostic } : {}),\n });\n}\n\n/**\n * Minimal offline in-memory context factory.\n * Can be safely injected into unit tests, local mock playgrounds, or SSR without any network calls.\n */\nexport function createMinimalRenderContext(options?: {\n variables?: Record<string, unknown>;\n assets?: Record<string, string>;\n actions?: Record<string, ActionHandler>;\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n}): RenderContext {\n const assetsMap = new Map<string, string>(Object.entries(options?.assets ?? {}));\n const actionsMap = new Map<string, ActionHandler>(Object.entries(options?.actions ?? {}));\n\n const assetProvider: AssetProvider = {\n resolve: (assetIdOrUri: string) => {\n return assetsMap.get(assetIdOrUri) || assetIdOrUri;\n },\n };\n\n const actionRegistry: ActionRegistry = {\n get: (type: string) => actionsMap.get(type),\n register: (type: string, handler: ActionHandler) => {\n actionsMap.set(type, handler);\n },\n unregister: (type: string) => {\n actionsMap.delete(type);\n },\n };\n\n return createRenderContext({\n variables: options?.variables,\n assetProvider,\n actionRegistry,\n onDiagnostic: options?.onDiagnostic,\n });\n}\n\n/**\n * Provider component to make RenderContext available anywhere in the component tree\n */\nexport interface RenderContextProviderProps {\n value?: RenderContext;\n children: React.ReactNode;\n}\n\nexport const RenderContextProvider: React.FC<RenderContextProviderProps> = ({ value, children }) => {\n const contextValue = useMemo(() => value || DEFAULT_RENDER_CONTEXT, [value]);\n\n return <RenderContextReact.Provider value={contextValue}>{children}</RenderContextReact.Provider>;\n};\n\n/**\n * Hook to access the current RenderContext\n */\nexport function useRenderContext(): RenderContext {\n return useContext(RenderContextReact);\n}\n\n/**\n * Asset resolution helper.\n * Computes asset URLs synchronously for React render cycles.\n */\nexport function resolveAssetSync(assetProvider?: AssetProvider, assetIdOrUri?: string): string | undefined {\n if (!assetProvider || !assetIdOrUri) {\n return undefined;\n }\n try {\n const result = assetProvider.resolve(assetIdOrUri);\n return typeof result === 'string' ? result : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Variable resolution helper.\n * Resolves VariableBinding objects and template strings like \"{{ title }}\" using context variables.\n */\nexport function resolveVariable(context?: RenderContext, value?: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n // Handle VariableBinding object: { type: 'variable', key: '...', fallback: '...' }\n if (isVariableBinding(value)) {\n return resolveBinding(value, context).value;\n }\n\n // Handle string interpolation: \"Hello {{ site.name }}\" — resolves nested paths\n // the same way VariableBinding does, so both binding styles stay consistent.\n if (typeof value === 'string' && value.includes('{{')) {\n return value.replace(/\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g, (match, key) => {\n const outcome = resolveBinding({ key }, context);\n if (outcome.status === 'resolved') {\n return String(outcome.value);\n }\n return match;\n });\n }\n\n return value;\n}\n\n/**\n * Result of resolving an action payload: the resolved (serializable) value, plus any\n * binding paths that failed to resolve (missing key, no author-declared fallback).\n * `invalidPaths` is what lets dispatchAction refuse to run a handler with an\n * unexpected/garbage value instead of silently passing through an empty string.\n */\nexport interface ActionPayloadResolution {\n value: Record<string, unknown> | undefined;\n invalidPaths: string[];\n}\n\n/**\n * Recursively resolves variables within an action payload without mutating the input object.\n * Tracks dotted field paths (e.g. \"item.id\") whose binding resolved to the \"empty\" outcome —\n * i.e. an invalid/missing path with no fallback declared — as opposed to `fallback`, which is\n * an author-declared safe default and never treated as invalid.\n */\nexport function resolveActionPayloadDetailed(\n context: RenderContext | undefined,\n payload: Record<string, unknown> | undefined,\n): ActionPayloadResolution {\n if (!payload || typeof payload !== 'object') {\n return { value: payload, invalidPaths: [] };\n }\n\n const invalidPaths: string[] = [];\n\n const resolveValueRecursively = (val: unknown, path: string): unknown => {\n if (val === null || val === undefined) {\n return val;\n }\n if (isVariableBinding(val)) {\n const outcome: ResolveOutcome = resolveBinding(val, context);\n if (outcome.status === 'empty') {\n invalidPaths.push(path);\n }\n return outcome.value;\n }\n if (typeof val === 'string') {\n if (val.includes('{{')) {\n return val.replace(/\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g, (match, key) => {\n const outcome = resolveBinding({ key }, context);\n if (outcome.status !== 'resolved') {\n invalidPaths.push(path);\n return match;\n }\n return String(outcome.value);\n });\n }\n return val;\n }\n if (Array.isArray(val)) {\n return val.map((item, index) => resolveValueRecursively(item, `${path}[${index}]`));\n }\n if (typeof val === 'object') {\n const copy: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(val as Record<string, unknown>)) {\n copy[k] = resolveValueRecursively(v, path ? `${path}.${k}` : k);\n }\n return copy;\n }\n return val;\n };\n\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(payload)) {\n resolved[key] = resolveValueRecursively(value, key);\n }\n\n return { value: resolved, invalidPaths };\n}\n\n/**\n * Recursively resolves variables within an action payload without mutating the input object.\n * Back-compat convenience wrapper over resolveActionPayloadDetailed for callers that only\n * need the resolved value (e.g. previewing a payload) and not invalid-path enforcement.\n */\nexport function resolveActionPayload(\n context?: RenderContext,\n payload?: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n return resolveActionPayloadDetailed(context, payload).value;\n}\n\n/**\n * Action resolution helper.\n * Checks whether an action type is registered with the current action registry.\n */\nexport function isActionRegistered(actionRegistry?: ActionRegistry, actionType?: string): boolean {\n if (!actionRegistry || !actionType) {\n return false;\n }\n return Boolean(actionRegistry.get(actionType));\n}\n\n/**\n * Safe action dispatch options\n */\nexport interface DispatchActionOptions {\n action: ActionBinding | unknown;\n nodeId?: string;\n document: PageDocument;\n context?: RenderContext;\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n [key: string]: unknown;\n}\n\n/**\n * Dispatches an action safely from the renderer to registered host handlers.\n * Guarantees that:\n * 1. Payload variables are resolved safely.\n * 2. Unregistered / unknown actions are not executed and trigger diagnostics.\n * 3. No arbitrary JS code (eval, Function, script injection) from document/props is ever executed.\n */\nexport function dispatchAction(options: DispatchActionOptions): boolean {\n const { action, nodeId, document, context, onDiagnostic } = options;\n\n if (!isActionBinding(action)) {\n const diagnostic: ActionDiagnostic = {\n code: 'INVALID_ACTION_PAYLOAD',\n actionType:\n typeof (action as { type?: unknown })?.type === 'string'\n ? (action as { type: string }).type\n : 'unknown',\n nodeId,\n message: `Invalid action binding on node ${nodeId || 'unknown'}.`,\n };\n onDiagnostic?.(diagnostic);\n context?.onDiagnostic?.(diagnostic);\n return false;\n }\n\n const handler = context?.actionRegistry?.get(action.type);\n\n if (!handler) {\n const diagnostic: ActionDiagnostic = {\n code: 'UNKNOWN_ACTION',\n actionType: action.type,\n nodeId,\n message: `No action handler registered for action type \"${action.type}\".`,\n };\n onDiagnostic?.(diagnostic);\n context?.onDiagnostic?.(diagnostic);\n return false;\n }\n\n const { value: resolvedPayload, invalidPaths } = resolveActionPayloadDetailed(context, action.payload);\n\n if (invalidPaths.length > 0) {\n const diagnostic: ActionDiagnostic = {\n code: 'INVALID_ACTION_BINDING',\n actionType: action.type,\n nodeId,\n message: `Action \"${action.type}\" payload has unresolved binding path(s) [${invalidPaths.join(\n ', ',\n )}] on node ${nodeId || 'unknown'}; handler was not invoked.`,\n invalidPaths,\n };\n onDiagnostic?.(diagnostic);\n context?.onDiagnostic?.(diagnostic);\n return false;\n }\n\n const executionContext: ActionExecutionContext = {\n nodeId,\n document,\n variables: context?.variables,\n };\n\n try {\n const result = handler(resolvedPayload, executionContext);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n (result as Promise<void>).catch((error) => {\n const diagnostic: ActionDiagnostic = {\n code: 'ACTION_EXECUTION_ERROR',\n actionType: action.type,\n nodeId,\n message: `Action \"${action.type}\" handler threw an asynchronous error: ${\n error instanceof Error ? error.message : String(error)\n }`,\n error,\n };\n onDiagnostic?.(diagnostic);\n context?.onDiagnostic?.(diagnostic);\n });\n }\n return true;\n } catch (error) {\n const diagnostic: ActionDiagnostic = {\n code: 'ACTION_EXECUTION_ERROR',\n actionType: action.type,\n nodeId,\n message: `Action \"${action.type}\" handler threw a synchronous error: ${\n error instanceof Error ? error.message : String(error)\n }`,\n error,\n };\n onDiagnostic?.(diagnostic);\n context?.onDiagnostic?.(diagnostic);\n return false;\n }\n}\n","import { PageDocument, Node, ResponsiveStyles } from '@kubuild/schema';\nimport React from 'react';\n\nexport function resolveNodeStyles(\n styles?: ResponsiveStyles,\n viewport: 'desktop' | 'tablet' | 'mobile' = 'desktop',\n): React.CSSProperties {\n if (!styles) return {};\n const base = (styles.base as React.CSSProperties) || {};\n const override = (styles[viewport] as React.CSSProperties) || {};\n return { ...base, ...override };\n}\n\n/**\n * Escape a string for safe interpolation into a CSS declaration value.\n * Strips characters that could break out of the declaration context.\n */\nfunction escapeCssValue(value: unknown): string {\n return String(value).replace(/[{};]+/g, '');\n}\n\n/**\n * Escape a node id for safe interpolation into an attribute selector.\n */\nfunction escapeCssIdent(value: string): string {\n return value.replace(/[\"\\\\\\]]/g, '\\\\$&');\n}\n\n/**\n * Serialize a style definition object into CSS declarations.\n * camelCase keys are converted to kebab-case CSS properties.\n */\nexport function styleDefinitionToCssDeclarations(\n styleDefinition: Record<string, unknown> | undefined,\n): string {\n if (!styleDefinition || typeof styleDefinition !== 'object') return '';\n const declarations: string[] = [];\n for (const [key, value] of Object.entries(styleDefinition)) {\n if (value === null || value === undefined || value === '') continue;\n const property = key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n declarations.push(`${property}: ${escapeCssValue(value)};`);\n }\n return declarations.join(' ');\n}\n\n/**\n * Walk the document tree and produce scoped CSS rules for pseudo-state\n * style layers (STORA-222). Each node with `styles.states` gets rules like:\n *\n * [data-kubuild-node=\"node-1\"]:hover { background-color: #1d4ed8; }\n *\n * Scoped via the canonical `data-kubuild-node` attribute so styles never leak\n * between nodes and work identically in editor canvas and runtime preview.\n */\nexport function collectStateStylesCss(document: PageDocument | undefined | null): string {\n if (!document?.document) return '';\n const rules: string[] = [];\n\n const walk = (node: Node): void => {\n const states = node.styles?.states;\n if (states && typeof states === 'object') {\n for (const [state, styleDefinition] of Object.entries(states)) {\n const declarations = styleDefinitionToCssDeclarations(\n styleDefinition as Record<string, unknown>,\n );\n if (!declarations) continue;\n // Only accept pseudo-class-looking selectors to avoid selector injection.\n const safeState = /^::?[a-zA-Z-]+$/.test(state) ? state : null;\n if (!safeState) continue;\n rules.push(`[data-kubuild-node=\"${escapeCssIdent(node.id)}\"]${safeState} { ${declarations} }`);\n }\n }\n node.children?.forEach(walk);\n };\n\n walk(document.document);\n return rules.join('\\n');\n}\n\n/**\n * Modern baseline CSS Reset for consistent rendering across viewports and browsers.\n */\nexport const DEFAULT_CSS_RESET = `\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n* {\n margin: 0;\n}\n\nbody {\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n}\n\nimg, picture, video, canvas, svg {\n display: block;\n max-width: 100%;\n}\n\ninput, button, textarea, select {\n font: inherit;\n}\n\np, h1, h2, h3, h4, h5, h6 {\n overflow-wrap: break-word;\n}\n`.trim();\n","import React, { Component, ErrorInfo, ReactNode } from 'react';\n\nexport interface ComponentErrorBoundaryProps {\n nodeId: string;\n componentType: string;\n mode?: 'editor' | 'runtime';\n children: ReactNode;\n onError?: (error: Error, info: ErrorInfo) => void;\n}\n\ninterface ComponentErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\nexport class ComponentErrorBoundary extends Component<\n ComponentErrorBoundaryProps,\n ComponentErrorBoundaryState\n> {\n constructor(props: ComponentErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ComponentErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n if (this.props.onError) {\n this.props.onError(error, errorInfo);\n }\n }\n\n render(): ReactNode {\n if (this.state.hasError) {\n const { nodeId, componentType, mode = 'runtime' } = this.props;\n const errorMessage = this.state.error?.message || 'Unknown render error';\n\n if (mode === 'editor') {\n return (\n <div\n data-kubuild-node={nodeId}\n data-kubuild-error={componentType}\n style={{\n padding: '12px 16px',\n margin: '4px 0',\n backgroundColor: '#fef2f2',\n border: '1px solid #ef4444',\n borderRadius: '6px',\n color: '#b91c1c',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '13px',\n lineHeight: '1.4',\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>\n ⚠️ Component Render Error: &lt;{componentType}&gt;\n </div>\n <div style={{ fontSize: '11px', color: '#7f1d1d', wordBreak: 'break-all' }}>\n Node ID: <code>{nodeId}</code> — {errorMessage}\n </div>\n </div>\n );\n }\n\n // In runtime mode: render a safe invisible or minimal placeholder to avoid page crash\n return (\n <div\n data-kubuild-node={nodeId}\n data-kubuild-error={componentType}\n style={{ display: 'none' }}\n aria-hidden=\"true\"\n />\n );\n }\n\n return this.props.children;\n }\n}\n","import { Node, isVariableBinding } from '@kubuild/schema';\nimport { ComponentDefinition, ComponentFieldDefinition, primitiveTypeForField } from '@kubuild/components';\nimport { resolveBinding, Diagnostic, RenderContext } from '@kubuild/core';\nimport { resolveVariable } from './render-context';\n\nexport interface ResolvedNodeProps {\n props: Record<string, unknown>;\n diagnostics: Diagnostic[];\n}\n\nfunction emptyValueFor(primitiveType: 'string' | 'number' | 'boolean'): unknown {\n switch (primitiveType) {\n case 'string':\n return '';\n case 'number':\n return 0;\n case 'boolean':\n return false;\n }\n}\n\nfunction resolveBindableField(\n node: Node,\n field: ComponentFieldDefinition,\n definition: ComponentDefinition,\n context: RenderContext | undefined,\n diagnostics: Diagnostic[],\n): unknown {\n const rawValue = node.props?.[field.name];\n const expectedType = primitiveTypeForField(field);\n if (expectedType === undefined || rawValue === undefined) {\n return rawValue;\n }\n\n const fallbackValue = definition.defaultProps?.[field.name] ?? field.defaultValue ?? emptyValueFor(expectedType);\n\n if (isVariableBinding(rawValue)) {\n const outcome = resolveBinding(rawValue, context);\n if (typeof outcome.value === expectedType) {\n return outcome.value;\n }\n diagnostics.push({\n code: 'INCOMPATIBLE_BINDING_TYPE',\n nodeId: node.id,\n propName: field.name,\n expectedType,\n actualType: typeof outcome.value,\n message: `Prop \"${field.name}\" on node \"${node.id}\" expected a ${expectedType} but resolved binding \"${rawValue.key}\" produced a ${typeof outcome.value}.`,\n });\n return fallbackValue;\n }\n\n if (expectedType === 'string' && typeof rawValue === 'string' && rawValue.includes('{{')) {\n return resolveVariable(context, rawValue);\n }\n\n return rawValue;\n}\n\n/**\n * Resolves every binding-compatible prop on a node up front, before the component\n * receives its render props — centralizes what was previously ad hoc per-field\n * `resolveVariable` calls scattered across the renderer switch. Non-bindable\n * fields (select/image/action/json) and fields absent from `propFields` pass\n * through unchanged; validating their static shape remains `validateProps`' job.\n */\nexport function resolvePropsForNode(\n node: Node,\n definition: ComponentDefinition | undefined,\n context: RenderContext | undefined,\n): ResolvedNodeProps {\n const rawProps = node.props || {};\n if (!definition || !definition.propFields || definition.propFields.length === 0) {\n return { props: rawProps, diagnostics: [] };\n }\n\n const diagnostics: Diagnostic[] = [];\n const resolved: Record<string, unknown> = { ...rawProps };\n\n for (const field of definition.propFields) {\n if (primitiveTypeForField(field) === undefined) {\n continue;\n }\n resolved[field.name] = resolveBindableField(node, field, definition, context, diagnostics);\n }\n\n return { props: resolved, diagnostics };\n}\n","import React, { useMemo } from 'react';\nimport { PageDocument } from '@kubuild/schema';\nimport { ComponentRegistry } from '@kubuild/components';\nimport { RenderContext, Diagnostic } from './render-context';\nimport { KubuildRenderer } from './renderer';\n\n/**\n * Standard supported viewport devices\n */\nexport type ViewportDevice = 'desktop' | 'tablet' | 'mobile';\n\n/**\n * Configuration options for a specific viewport device\n */\nexport interface ViewportConfig {\n /** Width in pixels or CSS dimension (e.g. 768, '768px', '100%') */\n width: number | string;\n /** Optional fixed or min height (e.g. 1024, '1024px', '100%') */\n height?: number | string;\n /** Optional minimum width */\n minWidth?: number | string;\n /** Optional maximum width */\n maxWidth?: number | string;\n /** Optional minimum height */\n minHeight?: number | string;\n /** Optional maximum height */\n maxHeight?: number | string;\n /** User-facing label for the viewport */\n label?: string;\n /** Custom CSS aspect ratio (e.g. '16/9', '9/16') */\n aspectRatio?: string;\n /** Scale factor applied to the preview canvas (e.g. 0.8, 1) */\n scale?: number;\n /** Whether the viewport width stretches fluidly up to maxWidth */\n isFluid?: boolean;\n}\n\n/**\n * Configurable host breakpoints for responsive viewport resolution\n */\nexport interface ViewportBreakpoints {\n /** Maximum screen width considered mobile (default: 480) */\n mobile: number;\n /** Maximum screen width considered tablet (default: 768) */\n tablet: number;\n /** Screen width threshold considered desktop (default: 1024) */\n desktop: number;\n}\n\n/**\n * Default viewport device configurations\n */\nexport const DEFAULT_VIEWPORT_CONFIGS: Record<ViewportDevice, ViewportConfig> = Object.freeze({\n desktop: {\n width: '100%',\n maxWidth: '1280px',\n minHeight: '600px',\n label: 'Desktop (1280px)',\n isFluid: true,\n },\n tablet: {\n width: '768px',\n height: '1024px',\n minHeight: '600px',\n label: 'Tablet (768 × 1024)',\n isFluid: false,\n },\n mobile: {\n width: '375px',\n height: '667px',\n minHeight: '500px',\n label: 'Mobile (375 × 667)',\n isFluid: false,\n },\n});\n\n/**\n * Default breakpoint thresholds\n */\nexport const DEFAULT_BREAKPOINTS: ViewportBreakpoints = Object.freeze({\n mobile: 480,\n tablet: 768,\n desktop: 1024,\n});\n\n/**\n * Resolves active viewport device category from a numeric pixel width using host-configurable breakpoints\n */\nexport function resolveViewportFromWidth(\n width: number,\n breakpoints?: Partial<ViewportBreakpoints>,\n): ViewportDevice {\n const resolved = { ...DEFAULT_BREAKPOINTS, ...breakpoints };\n if (width <= resolved.mobile) {\n return 'mobile';\n }\n if (width <= resolved.tablet) {\n return 'tablet';\n }\n return 'desktop';\n}\n\n/**\n * Resolves combined viewport configuration merging defaults with host customizations\n */\nexport function resolveViewportDimensions(\n viewport: ViewportDevice,\n customConfigs?: Partial<Record<ViewportDevice, ViewportConfig>>,\n): ViewportConfig {\n const baseConfig = DEFAULT_VIEWPORT_CONFIGS[viewport] || DEFAULT_VIEWPORT_CONFIGS.desktop;\n const custom = customConfigs?.[viewport];\n return { ...baseConfig, ...custom };\n}\n\n/**\n * Resolves CSS properties for the preview canvas wrapper\n */\nexport function resolveViewportContainerStyle(\n viewport: ViewportDevice,\n customConfigs?: Partial<Record<ViewportDevice, ViewportConfig>>,\n customScale?: number,\n): React.CSSProperties {\n const config = resolveViewportDimensions(viewport, customConfigs);\n const scale = customScale ?? config.scale ?? 1;\n\n const toCssVal = (v?: number | string) => (typeof v === 'number' ? `${v}px` : v);\n\n const style: React.CSSProperties = {\n width: toCssVal(config.width),\n maxWidth: toCssVal(config.maxWidth),\n minWidth: toCssVal(config.minWidth),\n height: toCssVal(config.height),\n minHeight: toCssVal(config.minHeight),\n maxHeight: toCssVal(config.maxHeight),\n aspectRatio: config.aspectRatio,\n transition: 'width 0.2s ease, max-width 0.2s ease, height 0.2s ease',\n };\n\n if (scale !== 1) {\n style.transform = `scale(${scale})`;\n style.transformOrigin = 'top center';\n }\n\n return style;\n}\n\n/**\n * Props for PreviewViewportAdapter\n */\nexport interface PreviewViewportAdapterProps {\n /** The portable Page Document to render (remains immutable) */\n document: PageDocument;\n /** Active viewport device mode */\n viewport?: ViewportDevice;\n /** Callback fired when viewport is changed via built-in chrome controls */\n onViewportChange?: (viewport: ViewportDevice) => void;\n /** Host-configurable dimensions & overrides per viewport device */\n viewportConfigs?: Partial<Record<ViewportDevice, ViewportConfig>>;\n /** Host-configurable breakpoint boundaries */\n breakpoints?: Partial<ViewportBreakpoints>;\n /** Component registry providing renderers & schemas */\n registry?: ComponentRegistry;\n /** Immutable runtime context for variable, asset, & action resolution */\n context?: RenderContext;\n /** Rendering mode: 'runtime' or 'editor' */\n mode?: 'editor' | 'runtime';\n /** Whether to render device frame / chrome toolbar */\n showChrome?: boolean;\n /** Optional custom title displayed on device chrome */\n chromeTitle?: string;\n /** Non-destructive editor overlay slot (selection, bounds, grid, etc.) */\n editorOverlay?: React.ReactNode;\n /** Custom zoom/scale factor */\n scale?: number;\n /** Outer container CSS class */\n className?: string;\n /** Outer container inline styles */\n style?: React.CSSProperties;\n /** Inner canvas container CSS class */\n canvasClassName?: string;\n /** Inner canvas container inline styles */\n canvasStyle?: React.CSSProperties;\n /** Optional click handler for canvas nodes */\n onNodeClick?: (nodeId: string, event: React.MouseEvent) => void;\n /** Optional diagnostic handler for action or render issues */\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n /** Optional action dispatch handler */\n onActionDispatch?: (actionType: string, payload: Record<string, unknown> | undefined, nodeId: string) => void;\n}\n\n/**\n * Preview Viewport Adapter Component\n * \n * Provides an isolated, host-configurable desktop/tablet/mobile preview container that uses\n * the exact same KubuildRenderer and RenderContext as production runtime, differing only in\n * viewport dimensions and optional device chrome/editor overlays.\n */\nexport const PreviewViewportAdapter: React.FC<PreviewViewportAdapterProps> = ({\n document,\n viewport = 'desktop',\n onViewportChange,\n viewportConfigs,\n breakpoints,\n registry,\n context,\n mode = 'runtime',\n showChrome = false,\n chromeTitle,\n editorOverlay,\n scale,\n className,\n style,\n canvasClassName,\n canvasStyle,\n onNodeClick,\n onDiagnostic,\n onActionDispatch,\n}) => {\n const currentConfig = useMemo(\n () => resolveViewportDimensions(viewport, viewportConfigs),\n [viewport, viewportConfigs],\n );\n\n const containerStyle = useMemo(\n () => resolveViewportContainerStyle(viewport, viewportConfigs, scale),\n [viewport, viewportConfigs, scale],\n );\n\n const mergedCanvasStyle: React.CSSProperties = useMemo(\n () => ({\n ...containerStyle,\n ...canvasStyle,\n position: 'relative',\n boxSizing: 'border-box',\n }),\n [containerStyle, canvasStyle],\n );\n\n return (\n <div\n data-kubuild-preview-container\n data-viewport={viewport}\n className={`kubuild-preview-viewport-adapter ${className || ''}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n ...style,\n }}\n >\n {/* Optional Device Chrome Header */}\n {showChrome && (\n <div\n data-kubuild-preview-chrome\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n maxWidth: containerStyle.maxWidth || containerStyle.width,\n padding: '8px 12px',\n marginBottom: '8px',\n backgroundColor: '#1e293b',\n color: '#f8fafc',\n borderRadius: '8px',\n fontSize: '12px',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n boxSizing: 'border-box',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontWeight: 600 }}>\n {chromeTitle || document.metadata?.title || 'Preview'}\n </span>\n <span\n data-testid=\"viewport-badge\"\n style={{\n fontSize: '10px',\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: '#334155',\n color: '#94a3b8',\n textTransform: 'uppercase',\n fontWeight: 700,\n }}\n >\n {viewport}\n </span>\n <span style={{ fontSize: '11px', color: '#64748b' }}>\n {currentConfig.label || `${currentConfig.width} × ${currentConfig.height || 'auto'}`}\n </span>\n </div>\n\n {onViewportChange && (\n <div\n data-testid=\"viewport-switcher\"\n style={{ display: 'flex', gap: '4px', backgroundColor: '#0f172a', padding: '2px', borderRadius: '6px' }}\n >\n {(['desktop', 'tablet', 'mobile'] as ViewportDevice[]).map((device) => {\n const isActive = viewport === device;\n return (\n <button\n key={device}\n type=\"button\"\n data-testid={`viewport-btn-${device}`}\n onClick={() => onViewportChange(device)}\n style={{\n padding: '4px 10px',\n fontSize: '11px',\n fontWeight: 500,\n borderRadius: '4px',\n border: 'none',\n cursor: 'pointer',\n textTransform: 'capitalize',\n backgroundColor: isActive ? '#3b82f6' : 'transparent',\n color: isActive ? '#ffffff' : '#94a3b8',\n transition: 'all 0.15s ease',\n }}\n >\n {device}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* Responsive Canvas Frame */}\n <div\n data-kubuild-preview-canvas\n data-viewport={viewport}\n className={`kubuild-preview-canvas ${canvasClassName || ''}`}\n style={mergedCanvasStyle}\n >\n {/* Core Document Renderer */}\n <KubuildRenderer\n document={document}\n registry={registry}\n context={context}\n viewport={viewport}\n mode={mode}\n onNodeClick={onNodeClick}\n onDiagnostic={onDiagnostic}\n onActionDispatch={onActionDispatch}\n />\n\n {/* Non-destructive Editor Overlay Slot */}\n {editorOverlay && (\n <div\n data-kubuild-preview-overlay\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n zIndex: 10,\n }}\n >\n {editorOverlay}\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Alias for PreviewViewportAdapter\n */\nexport const KubuildPreviewViewport = PreviewViewportAdapter;\n"],"mappings":"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","names":["import_react","import_schema","import_components","import_core","import_react","import_jsx_runtime","import_schema","import_core","import_jsx_runtime","content","lucideIcons","import_react","import_jsx_runtime"]}
@@ -0,0 +1,6 @@
1
+ export * from './renderer';
2
+ export * from './styles';
3
+ export * from './render-context';
4
+ export * from './error-boundary';
5
+ export * from './preview-adapter';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}