@kubuild/renderer 0.0.1 → 0.2.0
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.
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/action-dispatcher.d.ts +42 -0
- package/dist/action-dispatcher.d.ts.map +1 -0
- package/dist/action-runners/api-request.d.ts +77 -0
- package/dist/action-runners/api-request.d.ts.map +1 -0
- package/dist/action-runners/index.d.ts +24 -0
- package/dist/action-runners/index.d.ts.map +1 -0
- package/dist/action-runners/modal-manager.d.ts +68 -0
- package/dist/action-runners/modal-manager.d.ts.map +1 -0
- package/dist/action-runners/navigation-utils.d.ts +49 -0
- package/dist/action-runners/navigation-utils.d.ts.map +1 -0
- package/dist/action-runners/toast-container.d.ts +20 -0
- package/dist/action-runners/toast-container.d.ts.map +1 -0
- package/dist/action-runners/toast-manager.d.ts +74 -0
- package/dist/action-runners/toast-manager.d.ts.map +1 -0
- package/dist/action-runners/ui-feedback.d.ts +33 -0
- package/dist/action-runners/ui-feedback.d.ts.map +1 -0
- package/dist/animation.d.ts +26 -0
- package/dist/animation.d.ts.map +1 -0
- package/dist/code-generator.d.ts +47 -0
- package/dist/code-generator.d.ts.map +1 -0
- package/dist/error-boundary.d.ts +2 -0
- package/dist/error-boundary.d.ts.map +1 -1
- package/dist/form-context.d.ts +114 -0
- package/dist/form-context.d.ts.map +1 -0
- package/dist/index.cjs +184 -2044
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +184 -1990
- package/dist/index.js.map +1 -1
- package/dist/nodes/editable-text.d.ts +15 -0
- package/dist/nodes/editable-text.d.ts.map +1 -0
- package/dist/nodes/form-nodes.d.ts +153 -0
- package/dist/nodes/form-nodes.d.ts.map +1 -0
- package/dist/nodes/html-embed.d.ts +15 -0
- package/dist/nodes/html-embed.d.ts.map +1 -0
- package/dist/nodes/index.d.ts +5 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/media-utils.d.ts +17 -0
- package/dist/nodes/media-utils.d.ts.map +1 -0
- package/dist/preview-adapter.d.ts +1 -1
- package/dist/preview-adapter.d.ts.map +1 -1
- package/dist/renderer.d.ts +4 -24
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderers/index.d.ts +2 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/render-node-content.d.ts +66 -0
- package/dist/renderers/render-node-content.d.ts.map +1 -0
- package/dist/styles.d.ts +8 -3
- package/dist/styles.d.ts.map +1 -1
- package/package.json +13 -14
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/renderer.tsx","../src/render-context.tsx","../src/styles.ts","../src/error-boundary.tsx","../src/prop-resolution.ts","../src/preview-adapter.tsx"],"sourcesContent":["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 }}></> 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: <{node.type}>\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: <{componentType}>\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":["useMemo","isActionBinding","isVariableBinding","resolveBinding","jsx","isVariableBinding","resolveBinding","isVariableBinding","resolveBinding","jsx","jsxs","useMemo","isActionBinding","isVariableBinding","content","resolveBinding","useMemo","jsx","jsxs","useMemo"]}
|
|
1
|
+
{"version":3,"sources":["../src/render-context.tsx","../src/styles.ts","../src/animation.ts","../src/error-boundary.tsx","../src/prop-resolution.ts","../src/action-runners/api-request.ts","../src/action-runners/toast-manager.ts","../src/action-runners/modal-manager.ts","../src/action-runners/ui-feedback.ts","../src/action-runners/toast-container.tsx","../src/action-runners/index.ts","../src/form-context.tsx","../src/nodes/editable-text.tsx","../src/nodes/html-embed.tsx","../src/nodes/form-nodes.tsx","../src/nodes/media-utils.ts","../src/renderers/render-node-content.tsx","../src/renderer.tsx","../src/preview-adapter.tsx","../src/code-generator.ts"],"names":["DEFAULT_RENDER_CONTEXT","RenderContextReact","createContext","createRenderContext","options","frozenVariables","createMinimalRenderContext","assetsMap","actionsMap","assetProvider","assetIdOrUri","actionRegistry","type","handler","RenderContextProvider","value","children","contextValue","useMemo","jsx","useRenderContext","useContext","resolveAssetSync","result","resolveVariable","context","isVariableBinding","resolveBinding","match","key","outcome","resolveActionPayloadDetailed","payload","invalidPaths","resolveValueRecursively","val","path","item","index","copy","k","v","resolved","resolveActionPayload","isActionRegistered","actionType","dispatchAction","action","nodeId","document","onDiagnostic","isActionBinding","diagnostic","resolvedPayload","executionContext","error","resolveNodeStyles","styles","viewport","base","override","escapeCssValue","escapeCssIdent","styleDefinitionToCssDeclarations","styleDefinition","declarations","suffix","property","c","collectStateStylesCss","rules","walk","node","states","state","safeState","DEFAULT_CSS_RESET","ANIMATION_KEYFRAMES_CSS","getHoverEffectCss","hoverEffect","safeId","getLoopEffectCss","loopEffect","getEntranceAnimationCss","anim","duration","delay","easing","collectAnimationStylesCss","hasAnyAnimation","replayNodeAnimation","rootElement","root","el","currentAnimation","ComponentErrorBoundary","Component","props","errorInfo","componentType","mode","errorMessage","jsxs","AlertTriangle","emptyValueFor","primitiveType","resolveBindableField","field","definition","diagnostics","rawValue","expectedType","primitiveTypeForField","fallbackValue","resolvePropsForNode","rawProps","ApiRequestError","message","details","buildApiUrl","rawUrl","queryParams","baseUrl","trimmedUrl","isSafeActionUrl","finalUrl","cleanBase","cleanPath","basePart","existingQuery","searchParams","queryString","prepareRequestBody","method","body","bodyFormat","headers","normalizedMethod","reqHeaders","contentTypeKey","existingContentType","format","formData","params","parseResponseBody","response","contentType","text","trimmed","createApiRequestHandler","defaultTimeout","defaultBaseUrl","defaultHeaders","step","signal","fetchFn","timeoutMs","url","mergedHeaders","controller","timeoutTimer","onParentAbort","ActionCancellationError","ActionTimeoutError","responseHeaders","parsedData","apiResponse","errorMsg","err","reason","errMsg","apiRequestRunner","toastCounter","ToastManager","opts","id","position","dismissible","toastItem","t","timer","prevLength","listener","current","toastManager","useToasts","manager","toasts","setToasts","useState","useEffect","nextToasts","ModalManager","modalId","cleanId","event","topModal","modalManager","useModal","isOpen","setIsOpen","open","useCallback","close","toggle","useModals","setState","nextState","showToastRunner","title","toast","openModalRunner","rawModalId","existingModals","closeModalRunner","POSITION_STYLES","TOAST_THEMES","CheckCircle2","AlertCircle","Info","ToastCard","theme","IconComponent","X","ToastContainer","className","maxVisible","groupedToasts","groups","pos","Fragment","items","visibleItems","createDefaultActionRunners","registerDefaultActionRunners","executor","runners","FormRuntimeContext","checkIsDirty","values","initialValues","allKeys","FormRuntimeProvider","propFormId","formConfig","propInitialValues","onSubmit","onSuccess","onError","actions","renderContext","formId","baseInitialValues","setInitialValues","setValuesState","errors","setErrorsState","touched","setTouchedState","isSubmitting","setIsSubmitting","fieldBindingsRef","useRef","stateRef","registerField","binding","normalized","prev","getFieldBinding","name","validateField","valueToValidate","currentValues","rawVal","applyFieldTransform","r","validateFieldValue","validateForm","valuesToValidate","targetValues","bindingsArray","coreValidateForm","setFieldError","next","setErrors","newErrors","setFieldValue","shouldValidate","transformedVal","validateTrigger","setFieldTouched","isTouched","setValues","newValues","replace","setSubmitting","submitting","resetForm","nextInitialValues","resetVals","handleFormSubmit","e","allTouched","fieldName","formValidationErrors","firstErrorField","submitPipelines","p","ActionPipelineExecutor","pipeline","execResult","isValid","dirty","useFormRuntime","useFormContext","useFormStatus","form","useFormField","unregister","isInvalid","setValue","setTouched","setError","onChange","target","num","onBlur","EditableText","as","style","isEditable","onClick","rest","isEditingRef","Tag","useIsomorphicLayoutEffect","useLayoutEffect","transformEmbedHtml","rawHtml","_match","attrs","cssContent","transformedCss","HtmlEmbedView","dataKubuildNode","html","role","hostRef","shadowRootRef","scopedHtml","host","FormContainerNode","autoComplete","formRuntime","FormInputNode","placeholder","defaultValue","required","disabled","readOnly","validateOn","transform","stringVal","FormTextareaNode","rows","FormSelectNode","optionsList","opt","idx","handleChange","handleBlur","FormCheckboxNode","label","defaultChecked","onNodePropChange","isChecked","isBlur","FormRadioNode","FormSubmitButtonNode","buttonType","ariaLabel","actionAttrs","isEffectivelyDisabled","toPascalCase","str","_","getYouTubeId","getVimeoId","aspectRatioToCss","ratio","renderCustomComponent","resolvedProps","childrenElements","handleClick","CustomRenderer","renderLayoutNode","domId","renderTypographyNode","level","asTag","href","computedRel","safeHref","sanitizeUrl","handleLinkClick","propKey","quote","cite","defaultBlockquoteStyle","variant","code","language","renderListNode","listStyle","listStyleType","combinedStyles","renderTableNode","cellPadding","cellSpacing","border","striped","bordered","hover","compact","colSpan","rowSpan","renderMediaNode","rawSrc","src","isAssetReference","alt","fit","loading","width","height","safeSrc","imgStyles","poster","controls","autoplay","loop","muted","playsInline","aspectRatio","videoWrapperStyle","youtubeId","vimeoId","embedUrl","safeEmbedUrl","safeVideoUrl","safePoster","size","color","strokeWidth","pascalName","lucideIcons","Package","finalHtml","sanitizeHtml","renderFormNode","rawButtonType","isResolved","nodeFormConfig","inputType","rawOptions","record","parsed","renderCollectionNode","renderChildNode","sourceKey","itemAlias","indexKey","sourceValue","collectionDiagnostic","templateChildren","itemContext","iterationSuffix","React","templateChild","renderFallbackNode","Puzzle","renderNodeContent","custom","layout","typography","list","table","media","collection","NodeRenderer","registry","propContext","onNodeClick","onActionDispatch","instanceSuffix","child","childInstanceSuffix","content","KubuildRenderer","createDefaultComponentRegistry","showToastContainer","css","animCss","DEFAULT_VIEWPORT_CONFIGS","DEFAULT_BREAKPOINTS","resolveViewportFromWidth","breakpoints","resolveViewportDimensions","customConfigs","baseConfig","resolveViewportContainerStyle","customScale","config","scale","toCssVal","PreviewViewportAdapter","onViewportChange","viewportConfigs","showChrome","chromeTitle","editorOverlay","canvasClassName","canvasStyle","currentConfig","containerStyle","mergedCanvasStyle","device","isActive","KubuildPreviewViewport","escapeHtml","escapeAttr","renderNodeToHtml","indentLevel","indent","innerIndent","nodeClass","buildClass","classes","idAttr","tag","cls","childHtml","rel","author","quoteHtml","authorHtml","parts","lang","langClass","ytId","vmId","videoSrc","optionIndent","optionsHtml","optVal","optLabel","selected","checked","generateSemanticHtml","docOrNode","rootNode","formatCssRule","selector","declarationsStr","indentedRules","generateDocumentCss","classPrefix","baseRules","tabletRules","mobileRules","stateRules","baseStyles","baseDecls","tabletDecls","mobileDecls","styleDef","stateDecls","sections","pageDoc","animStyles","generateStandaloneHtml","doc","description","metaDescription","metaAuthor"],"mappings":"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","file":"index.js","sourcesContent":["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 options?: { important?: boolean },\n): string {\n if (!styleDefinition || typeof styleDefinition !== 'object') return '';\n const declarations: string[] = [];\n const suffix = options?.important ? ' !important' : '';\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)}${suffix};`);\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 !important; }\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 * Uses `!important` to reliably override the component's inline base style attributes.\n */\nexport function collectStateStylesCss(\n document: PageDocument | undefined | null,\n options: { important?: boolean } = { important: true },\n): 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 { important: options.important !== false },\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 { PageDocument, Node, AnimationConfig } from '@kubuild/schema';\n\n/**\n * Standard Keyframes for Entrance, Scroll, and Continuous Loop Animations (STORA-263, STORA-264)\n */\nexport const ANIMATION_KEYFRAMES_CSS = `\n/* Entrance / AOS Keyframes */\n@keyframes kb-anim-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes kb-anim-fade-up {\n from { opacity: 0; transform: translateY(24px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes kb-anim-fade-down {\n from { opacity: 0; transform: translateY(-24px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes kb-anim-fade-left {\n from { opacity: 0; transform: translateX(24px); }\n to { opacity: 1; transform: translateX(0); }\n}\n@keyframes kb-anim-fade-right {\n from { opacity: 0; transform: translateX(-24px); }\n to { opacity: 1; transform: translateX(0); }\n}\n@keyframes kb-anim-zoom-in {\n from { opacity: 0; transform: scale(0.92); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes kb-anim-zoom-out {\n from { opacity: 0; transform: scale(1.08); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes kb-anim-slide-up {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n}\n@keyframes kb-anim-slide-down {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n}\n@keyframes kb-anim-slide-left {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n}\n@keyframes kb-anim-slide-right {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n}\n@keyframes kb-anim-flip-up {\n from { opacity: 0; transform: perspective(600px) rotateX(45deg); }\n to { opacity: 1; transform: perspective(600px) rotateX(0deg); }\n}\n@keyframes kb-anim-flip-down {\n from { opacity: 0; transform: perspective(600px) rotateX(-45deg); }\n to { opacity: 1; transform: perspective(600px) rotateX(0deg); }\n}\n\n/* Continuous Loop Keyframes */\n@keyframes kb-loop-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.05); opacity: 0.9; }\n}\n@keyframes kb-loop-bounce {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-8px); }\n}\n@keyframes kb-loop-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@keyframes kb-loop-float {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-6px); }\n}\n@keyframes kb-loop-shimmer {\n 0%, 100% { opacity: 0.75; }\n 50% { opacity: 1; }\n}\n`.trim();\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 * Generate CSS rules for Hover Micro-Interactions (STORA-264)\n */\nexport function getHoverEffectCss(nodeId: string, hoverEffect: string): string[] {\n const safeId = escapeCssIdent(nodeId);\n const rules: string[] = [];\n\n switch (hoverEffect) {\n case 'lift':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.25s ease !important; will-change: transform; }`,\n `[data-kubuild-node=\"${safeId}\"]:hover { transform: translateY(-4px) !important; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1) !important; }`,\n );\n break;\n case 'scale':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1) !important; will-change: transform; }`,\n `[data-kubuild-node=\"${safeId}\"]:hover { transform: scale(1.04) !important; }`,\n );\n break;\n case 'glow':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { transition: box-shadow 0.25s ease !important; }`,\n `[data-kubuild-node=\"${safeId}\"]:hover { box-shadow: 0 0 20px 2px rgba(59, 130, 246, 0.5) !important; }`,\n );\n break;\n case 'tilt':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1) !important; will-change: transform; }`,\n `[data-kubuild-node=\"${safeId}\"]:hover { transform: rotate(2deg) scale(1.02) !important; }`,\n );\n break;\n default:\n break;\n }\n\n return rules;\n}\n\n/**\n * Generate CSS rules for Continuous Loop Effects (STORA-264)\n */\nexport function getLoopEffectCss(nodeId: string, loopEffect: string): string[] {\n const safeId = escapeCssIdent(nodeId);\n const rules: string[] = [];\n\n switch (loopEffect) {\n case 'pulse':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { animation: kb-loop-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite !important; }`,\n );\n break;\n case 'bounce':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { animation: kb-loop-bounce 1.5s ease-in-out infinite !important; }`,\n );\n break;\n case 'spin':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { animation: kb-loop-spin 3s linear infinite !important; }`,\n );\n break;\n case 'float':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { animation: kb-loop-float 3s ease-in-out infinite !important; }`,\n );\n break;\n case 'shimmer':\n rules.push(\n `[data-kubuild-node=\"${safeId}\"] { animation: kb-loop-shimmer 2s ease-in-out infinite !important; }`,\n );\n break;\n default:\n break;\n }\n\n return rules;\n}\n\n/**\n * Generate CSS rules for Entrance / Scroll Animations (STORA-263)\n */\nexport function getEntranceAnimationCss(nodeId: string, anim: AnimationConfig): string[] {\n if (!anim.type || anim.type === 'none') return [];\n const safeId = escapeCssIdent(nodeId);\n const duration = typeof anim.duration === 'number' ? anim.duration : 600;\n const delay = typeof anim.delay === 'number' ? anim.delay : 0;\n const easing = anim.easing || 'ease-out';\n\n return [\n `[data-kubuild-node=\"${safeId}\"] { animation-name: kb-anim-${anim.type} !important; animation-duration: ${duration}ms !important; animation-delay: ${delay}ms !important; animation-timing-function: ${easing} !important; animation-fill-mode: both !important; }`,\n ];\n}\n\n/**\n * Walk the document and collect all compiled CSS rules for animations, hover micro-interactions, and loop effects.\n */\nexport function collectAnimationStylesCss(document: PageDocument | undefined | null): string {\n if (!document?.document) return '';\n const rules: string[] = [];\n let hasAnyAnimation = false;\n\n const walk = (node: Node): void => {\n const anim = node.animation;\n if (anim) {\n if (anim.hoverEffect && anim.hoverEffect !== 'none') {\n rules.push(...getHoverEffectCss(node.id, anim.hoverEffect));\n hasAnyAnimation = true;\n }\n if (anim.loopEffect && anim.loopEffect !== 'none') {\n rules.push(...getLoopEffectCss(node.id, anim.loopEffect));\n hasAnyAnimation = true;\n }\n if (anim.type && anim.type !== 'none') {\n rules.push(...getEntranceAnimationCss(node.id, anim));\n hasAnyAnimation = true;\n }\n }\n node.children?.forEach(walk);\n };\n\n walk(document.document);\n\n if (!hasAnyAnimation) return '';\n\n return `${ANIMATION_KEYFRAMES_CSS}\\n\\n${rules.join('\\n')}`;\n}\n\n/**\n * Replay CSS animation on a specific DOM element by node ID (STORA-262)\n */\nexport function replayNodeAnimation(nodeId: string, rootElement?: HTMLElement | Document | null): boolean {\n const root = rootElement || (typeof window !== 'undefined' ? window.document : null);\n if (!root) return false;\n\n const el = root.querySelector(`[data-kubuild-node=\"${escapeCssIdent(nodeId)}\"]`) as HTMLElement | null;\n if (!el) return false;\n\n const currentAnimation = el.style.animation;\n el.style.animation = 'none';\n // Force browser layout reflow to restart CSS keyframe animations\n void el.offsetWidth;\n el.style.animation = currentAnimation;\n\n // Dispatch custom event for observers\n el.dispatchEvent(new CustomEvent('kubuild:replay-animation', { bubbles: true, detail: { nodeId } }));\n return true;\n}\n","import React, { Component, ErrorInfo, ReactNode } from 'react';\nimport { AlertTriangle } from 'lucide-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', display: 'flex', alignItems: 'center', gap: '6px' }}>\n <AlertTriangle size={14} aria-hidden=\"true\" />\n <span>Component Render Error: <{componentType}></span>\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 type { ActionStep, ApiRequestStepPayload } from '@kubuild/schema';\nimport { isSafeActionUrl } from '@kubuild/schema';\nimport {\n ActionCancellationError,\n ActionTimeoutError,\n type PipelineExecutionContext,\n type PipelineStepHandler,\n} from '@kubuild/core';\n\n/**\n * Standard API Request Response representation.\n */\nexport interface ApiRequestResponse<T = unknown> {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: T;\n body: T; // Alias for data\n url: string;\n}\n\n/**\n * Details passed to ApiRequestError.\n */\nexport interface ApiRequestErrorDetails {\n status?: number;\n statusText?: string;\n url?: string;\n method?: string;\n data?: unknown;\n headers?: Record<string, string>;\n response?: ApiRequestResponse;\n isTimeout?: boolean;\n isCancelled?: boolean;\n isNetworkError?: boolean;\n stepId?: string;\n cause?: unknown;\n}\n\n/**\n * Custom Error thrown when an API request fails, times out, or returns a non-2xx status code.\n */\nexport class ApiRequestError extends Error {\n readonly status?: number;\n readonly statusText?: string;\n readonly url?: string;\n readonly method?: string;\n readonly data?: unknown;\n readonly headers?: Record<string, string>;\n readonly response?: ApiRequestResponse;\n readonly isTimeout: boolean;\n readonly isCancelled: boolean;\n readonly isNetworkError: boolean;\n readonly stepId?: string;\n readonly cause?: unknown;\n\n constructor(message: string, details?: ApiRequestErrorDetails) {\n super(message);\n this.name = 'ApiRequestError';\n this.status = details?.status;\n this.statusText = details?.statusText;\n this.url = details?.url;\n this.method = details?.method;\n this.data = details?.data;\n this.headers = details?.headers;\n this.response = details?.response;\n this.isTimeout = details?.isTimeout ?? false;\n this.isCancelled = details?.isCancelled ?? false;\n this.isNetworkError = details?.isNetworkError ?? false;\n this.stepId = details?.stepId;\n this.cause = details?.cause;\n }\n}\n\n/**\n * Options for configuring API Request Action Runner.\n */\nexport interface ApiRequestRunnerOptions {\n fetchFn?: typeof fetch;\n defaultTimeout?: number;\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\n/**\n * Builds and validates the final API request URL with query parameters.\n */\nexport function buildApiUrl(\n rawUrl: string,\n queryParams?: Record<string, unknown>,\n baseUrl?: string,\n): string {\n if (!rawUrl || typeof rawUrl !== 'string') {\n throw new ApiRequestError('API request URL is required', { url: rawUrl });\n }\n\n const trimmedUrl = rawUrl.trim();\n if (!isSafeActionUrl(trimmedUrl)) {\n throw new ApiRequestError(\n `Disallowed or unsafe protocol in API request URL: \"${trimmedUrl}\"`,\n { url: trimmedUrl },\n );\n }\n\n let finalUrl = trimmedUrl;\n if (\n baseUrl &&\n !trimmedUrl.startsWith('http://') &&\n !trimmedUrl.startsWith('https://') &&\n !trimmedUrl.startsWith('//')\n ) {\n const cleanBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n const cleanPath = trimmedUrl.startsWith('/') ? trimmedUrl : `/${trimmedUrl}`;\n finalUrl = `${cleanBase}${cleanPath}`;\n }\n\n if (queryParams && typeof queryParams === 'object' && Object.keys(queryParams).length > 0) {\n const [basePart, existingQuery] = finalUrl.split('?');\n const searchParams = new URLSearchParams(existingQuery || '');\n\n for (const [key, val] of Object.entries(queryParams)) {\n if (val === undefined || val === null) continue;\n if (Array.isArray(val)) {\n val.forEach((item) => searchParams.append(key, String(item)));\n } else {\n searchParams.set(key, String(val));\n }\n }\n\n const queryString = searchParams.toString();\n finalUrl = queryString ? `${basePart}?${queryString}` : basePart;\n }\n\n return finalUrl;\n}\n\n/**\n * Prepares the request body and normalizes headers based on body payload and body format.\n */\nexport function prepareRequestBody(\n method: string,\n body: unknown,\n bodyFormat?: string,\n headers: Record<string, string> = {},\n): {\n body: BodyInit | undefined;\n headers: Record<string, string>;\n} {\n const normalizedMethod = method.toUpperCase();\n const reqHeaders: Record<string, string> = { ...headers };\n\n // For GET, HEAD, or OPTIONS without body, omit body\n if (normalizedMethod === 'GET' || normalizedMethod === 'HEAD') {\n return { body: undefined, headers: reqHeaders };\n }\n\n if (body === undefined || body === null) {\n return { body: undefined, headers: reqHeaders };\n }\n\n // Find Content-Type header ignoring case\n const contentTypeKey = Object.keys(reqHeaders).find(\n (k) => k.toLowerCase() === 'content-type',\n );\n const existingContentType = contentTypeKey ? reqHeaders[contentTypeKey] : undefined;\n\n const format = (bodyFormat || '').toLowerCase();\n\n // 1. FormData format\n if (\n format === 'form-data' ||\n format === 'formdata' ||\n format === 'multipart' ||\n (existingContentType && existingContentType.includes('multipart/form-data'))\n ) {\n // If body is already a FormData instance\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n if (contentTypeKey) {\n delete reqHeaders[contentTypeKey];\n }\n return { body, headers: reqHeaders };\n }\n\n if (typeof FormData !== 'undefined' && typeof body === 'object' && body !== null) {\n const formData = new FormData();\n for (const [k, v] of Object.entries(body as Record<string, unknown>)) {\n if (v === undefined || v === null) continue;\n if (typeof Blob !== 'undefined' && v instanceof Blob) {\n formData.append(k, v);\n } else if (Array.isArray(v)) {\n v.forEach((item) =>\n formData.append(k, typeof item === 'object' ? JSON.stringify(item) : String(item)),\n );\n } else if (typeof v === 'object') {\n formData.append(k, JSON.stringify(v));\n } else {\n formData.append(k, String(v));\n }\n }\n\n // Remove manual content-type header so fetch will auto-generate boundary\n if (contentTypeKey) {\n delete reqHeaders[contentTypeKey];\n }\n return { body: formData, headers: reqHeaders };\n }\n }\n\n // 2. URL-encoded format\n if (\n format === 'urlencoded' ||\n format === 'url-encoded' ||\n (existingContentType && existingContentType.includes('application/x-www-form-urlencoded'))\n ) {\n if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n if (!contentTypeKey) {\n reqHeaders['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n return { body, headers: reqHeaders };\n }\n\n if (typeof body === 'object' && body !== null) {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(body as Record<string, unknown>)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v)) {\n v.forEach((item) => params.append(k, String(item)));\n } else {\n params.append(k, String(v));\n }\n }\n if (!contentTypeKey) {\n reqHeaders['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n return { body: params, headers: reqHeaders };\n }\n\n if (typeof body === 'string') {\n if (!contentTypeKey) {\n reqHeaders['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n return { body, headers: reqHeaders };\n }\n }\n\n // 3. Raw / Text format\n if (format === 'raw' || format === 'text') {\n if (!contentTypeKey) {\n reqHeaders['Content-Type'] = 'text/plain;charset=UTF-8';\n }\n return {\n body: typeof body === 'string' ? body : String(body),\n headers: reqHeaders,\n };\n }\n\n // 4. Default: JSON format for objects / arrays / numbers / booleans\n if (typeof body === 'object' && body !== null) {\n if (!contentTypeKey) {\n reqHeaders['Content-Type'] = 'application/json';\n }\n return {\n body: JSON.stringify(body),\n headers: reqHeaders,\n };\n }\n\n if (typeof body === 'string') {\n if (!contentTypeKey) {\n try {\n JSON.parse(body);\n reqHeaders['Content-Type'] = 'application/json';\n } catch {\n reqHeaders['Content-Type'] = 'text/plain;charset=UTF-8';\n }\n }\n return { body, headers: reqHeaders };\n }\n\n return {\n body: String(body),\n headers: reqHeaders,\n };\n}\n\n/**\n * Safely parses response body as JSON or text.\n */\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const contentType = response.headers.get('content-type') || '';\n const text = await response.text();\n\n if (!text || text.trim() === '') {\n return null;\n }\n\n if (contentType.includes('application/json') || contentType.includes('+json')) {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n\n const trimmed = text.trim();\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return text;\n }\n }\n\n return text;\n}\n\n/**\n * Creates an API Request Step Handler configured with custom options or default settings.\n */\nexport function createApiRequestHandler(\n options?: ApiRequestRunnerOptions,\n): PipelineStepHandler {\n const defaultTimeout = options?.defaultTimeout;\n const defaultBaseUrl = options?.baseUrl;\n const defaultHeaders = options?.headers;\n\n return async function apiRequestRunner(\n step: ActionStep,\n context: PipelineExecutionContext,\n signal?: AbortSignal,\n ): Promise<ApiRequestResponse> {\n const fetchFn =\n (context.fetchFn as typeof fetch) ||\n options?.fetchFn ||\n (typeof globalThis !== 'undefined' && typeof globalThis.fetch === 'function'\n ? globalThis.fetch\n : typeof fetch !== 'undefined'\n ? fetch\n : undefined);\n if (!fetchFn) {\n throw new ApiRequestError('No fetch implementation available for API request runner', {\n stepId: step.id,\n });\n }\n\n const payload = (step.payload || {}) as ApiRequestStepPayload & {\n bodyType?: string;\n bodyFormat?: string;\n baseUrl?: string;\n };\n\n const method = String(payload.method || 'GET').toUpperCase();\n const timeoutMs = payload.timeout ?? defaultTimeout;\n const baseUrl = payload.baseUrl ?? defaultBaseUrl;\n\n const url = buildApiUrl(\n String(payload.url || ''),\n payload.queryParams as Record<string, unknown>,\n baseUrl,\n );\n\n const mergedHeaders: Record<string, string> = {\n ...(defaultHeaders || {}),\n ...((payload.headers as Record<string, string>) || {}),\n };\n\n const { body, headers } = prepareRequestBody(\n method,\n payload.body,\n payload.bodyFormat || payload.bodyType,\n mergedHeaders,\n );\n\n const controller = new AbortController();\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined;\n\n const onParentAbort = () => {\n controller.abort(signal?.reason);\n };\n\n if (signal) {\n if (signal.aborted) {\n throw new ActionCancellationError(\n signal.reason instanceof Error ? signal.reason.message : 'API request cancelled',\n step.id,\n );\n }\n signal.addEventListener('abort', onParentAbort, { once: true });\n }\n\n if (timeoutMs !== undefined && timeoutMs > 0) {\n timeoutTimer = setTimeout(() => {\n controller.abort(\n new ActionTimeoutError(\n `API request timed out after ${timeoutMs}ms`,\n timeoutMs,\n step.id,\n ),\n );\n }, timeoutMs);\n }\n\n try {\n const response = await fetchFn(url, {\n method,\n headers,\n body,\n signal: controller.signal,\n });\n\n const responseHeaders: Record<string, string> = {};\n if (response.headers && typeof response.headers.forEach === 'function') {\n response.headers.forEach((val, key) => {\n responseHeaders[key.toLowerCase()] = val;\n });\n }\n\n const parsedData = await parseResponseBody(response);\n\n const apiResponse: ApiRequestResponse = {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n data: parsedData,\n body: parsedData,\n url: response.url || url,\n };\n\n if (!response.ok) {\n const errorMsg =\n (typeof parsedData === 'object' && parsedData !== null && 'message' in parsedData\n ? String((parsedData as { message: unknown }).message)\n : undefined) ||\n (typeof parsedData === 'string' && parsedData.length < 200 ? parsedData : undefined) ||\n `HTTP ${response.status} ${response.statusText || 'Error'}`;\n\n throw new ApiRequestError(`API request failed: ${errorMsg}`, {\n status: response.status,\n statusText: response.statusText,\n url,\n method,\n data: parsedData,\n headers: responseHeaders,\n response: apiResponse,\n stepId: step.id,\n });\n }\n\n return apiResponse;\n } catch (err: unknown) {\n if (err instanceof ApiRequestError) {\n throw err;\n }\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (\n reason instanceof ActionTimeoutError ||\n (reason instanceof Error && reason.name === 'ActionTimeoutError')\n ) {\n throw reason;\n }\n if (\n reason instanceof ActionCancellationError ||\n (reason instanceof Error && reason.name === 'ActionCancellationError')\n ) {\n throw reason;\n }\n if (err instanceof Error && (err.name === 'AbortError' || err.name === 'TimeoutError')) {\n if (timeoutTimer === undefined && signal?.aborted) {\n throw new ActionCancellationError('API request cancelled', step.id);\n }\n throw new ActionTimeoutError(\n `API request timed out after ${timeoutMs}ms`,\n timeoutMs ?? 0,\n step.id,\n );\n }\n }\n\n const errMsg = err instanceof Error ? err.message : String(err);\n throw new ApiRequestError(`Network error during API request: ${errMsg}`, {\n url,\n method,\n isNetworkError: true,\n stepId: step.id,\n cause: err,\n });\n } finally {\n if (timeoutTimer !== undefined) {\n clearTimeout(timeoutTimer);\n }\n if (signal) {\n signal.removeEventListener('abort', onParentAbort);\n }\n }\n };\n}\n\n/**\n * Default built-in API Request Runner instance.\n */\nexport const apiRequestRunner = createApiRequestHandler();\n","import { useState, useEffect } from 'react';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-center'\n | 'bottom-center';\n\n/**\n * Configuration options for spawning a toast notification.\n */\nexport interface ToastOptions {\n message: string;\n type?: ToastType;\n variant?: ToastType; // Alias for type\n title?: string;\n duration?: number;\n position?: ToastPosition;\n dismissible?: boolean;\n id?: string;\n}\n\n/**\n * Internal active toast item structure.\n */\nexport interface ToastItem {\n id: string;\n type: ToastType;\n message: string;\n title?: string;\n duration: number;\n position: ToastPosition;\n dismissible: boolean;\n createdAt: number;\n dismiss: () => void;\n}\n\ntype ToastListener = (toasts: ToastItem[]) => void;\n\nlet toastCounter = 0;\n\n/**\n * ToastManager manages reactive toast state, timers, and event subscriptions.\n */\nexport class ToastManager {\n private toasts: ToastItem[] = [];\n private listeners = new Set<ToastListener>();\n private timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n /**\n * Spawns a new toast notification.\n */\n public showToast(options: ToastOptions | string): ToastItem {\n const opts: ToastOptions =\n typeof options === 'string' ? { message: options } : options;\n\n const id = opts.id || `toast_${Date.now()}_${++toastCounter}`;\n const type: ToastType = opts.type || opts.variant || 'info';\n const duration = opts.duration !== undefined ? Math.max(0, opts.duration) : 4000;\n const position: ToastPosition = opts.position || 'top-right';\n const dismissible = opts.dismissible !== false;\n\n // Clear any existing timer with the same id\n if (this.timers.has(id)) {\n clearTimeout(this.timers.get(id));\n this.timers.delete(id);\n }\n\n const toastItem: ToastItem = {\n id,\n type,\n message: opts.message,\n title: opts.title,\n duration,\n position,\n dismissible,\n createdAt: Date.now(),\n dismiss: () => this.dismissToast(id),\n };\n\n // Remove previous instance if re-spawning with same ID\n this.toasts = this.toasts.filter((t) => t.id !== id).concat(toastItem);\n\n // Setup auto-dismiss timer if duration > 0\n if (duration > 0) {\n const timer = setTimeout(() => {\n this.dismissToast(id);\n }, duration);\n this.timers.set(id, timer);\n }\n\n this.notify();\n return toastItem;\n }\n\n /**\n * Dismisses a single toast by ID.\n */\n public dismissToast(id: string): void {\n if (this.timers.has(id)) {\n clearTimeout(this.timers.get(id));\n this.timers.delete(id);\n }\n\n const prevLength = this.toasts.length;\n this.toasts = this.toasts.filter((t) => t.id !== id);\n\n if (this.toasts.length !== prevLength) {\n this.notify();\n }\n }\n\n /**\n * Clears all active toasts.\n */\n public clearToasts(): void {\n for (const timer of this.timers.values()) {\n clearTimeout(timer);\n }\n this.timers.clear();\n this.toasts = [];\n this.notify();\n }\n\n /**\n * Returns current active toasts.\n */\n public getToasts(): ToastItem[] {\n return [...this.toasts];\n }\n\n /**\n * Subscribes a listener to toast state changes.\n */\n public subscribe(listener: ToastListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private notify(): void {\n const current = this.getToasts();\n for (const listener of this.listeners) {\n try {\n listener(current);\n } catch (err) {\n console.error('Error in toast listener callback:', err);\n }\n }\n }\n}\n\n/**\n * Singleton ToastManager instance for global toast handling.\n */\nexport const toastManager = new ToastManager();\n\n/**\n * React hook to observe and trigger toast notifications.\n */\nexport function useToasts(manager: ToastManager = toastManager): {\n toasts: ToastItem[];\n showToast: (options: ToastOptions | string) => ToastItem;\n dismissToast: (id: string) => void;\n clearToasts: () => void;\n} {\n const [toasts, setToasts] = useState<ToastItem[]>(() => manager.getToasts());\n\n useEffect(() => {\n setToasts(manager.getToasts());\n return manager.subscribe((nextToasts) => {\n setToasts(nextToasts);\n });\n }, [manager]);\n\n return {\n toasts,\n showToast: (opts) => manager.showToast(opts),\n dismissToast: (id) => manager.dismissToast(id),\n clearToasts: () => manager.clearToasts(),\n };\n}\n\n","import { useState, useEffect, useCallback } from 'react';\n\nexport type ModalState = Record<string, boolean>;\nexport type ModalListener = (modals: ModalState) => void;\n\n/**\n * ModalManager manages visibility state of modals, stack ordering, and custom events.\n */\nexport class ModalManager {\n private modals = new Map<string, boolean>();\n private activeStack: string[] = [];\n private listeners = new Set<ModalListener>();\n\n /**\n * Opens a modal dialog by ID.\n */\n public openModal(modalId: string): void {\n if (!modalId || typeof modalId !== 'string') return;\n const cleanId = modalId.trim();\n if (!cleanId) return;\n\n this.modals.set(cleanId, true);\n this.activeStack = this.activeStack.filter((id) => id !== cleanId).concat(cleanId);\n\n // Dispatch DOM event for custom modal listeners in the browser\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') {\n try {\n const event = new CustomEvent('kubuild:modal:open', {\n detail: { modalId: cleanId },\n bubbles: true,\n });\n window.dispatchEvent(event);\n } catch {\n // Ignore in non-standard environments\n }\n }\n\n this.notify();\n }\n\n /**\n * Closes a modal dialog by ID or closes the topmost modal if no ID is specified.\n */\n public closeModal(modalId?: string): void {\n if (modalId && typeof modalId === 'string') {\n const cleanId = modalId.trim();\n this.modals.set(cleanId, false);\n this.activeStack = this.activeStack.filter((id) => id !== cleanId);\n\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') {\n try {\n const event = new CustomEvent('kubuild:modal:close', {\n detail: { modalId: cleanId },\n bubbles: true,\n });\n window.dispatchEvent(event);\n } catch {\n // Ignore\n }\n }\n } else {\n // Close topmost active modal\n const topModal = this.activeStack.pop();\n if (topModal) {\n this.modals.set(topModal, false);\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') {\n try {\n const event = new CustomEvent('kubuild:modal:close', {\n detail: { modalId: topModal },\n bubbles: true,\n });\n window.dispatchEvent(event);\n } catch {\n // Ignore\n }\n }\n } else {\n // Close all if stack was empty\n for (const key of this.modals.keys()) {\n this.modals.set(key, false);\n }\n }\n }\n\n this.notify();\n }\n\n /**\n * Toggles visibility state of a modal.\n */\n public toggleModal(modalId: string): boolean {\n const isCurrentlyOpen = this.isModalOpen(modalId);\n if (isCurrentlyOpen) {\n this.closeModal(modalId);\n return false;\n } else {\n this.openModal(modalId);\n return true;\n }\n }\n\n /**\n * Checks whether a modal is currently open.\n */\n public isModalOpen(modalId: string): boolean {\n if (!modalId) return false;\n return Boolean(this.modals.get(modalId.trim()));\n }\n\n /**\n * Returns a snapshot map of all modal states.\n */\n public getState(): ModalState {\n const state: ModalState = {};\n for (const [key, value] of this.modals.entries()) {\n state[key] = value;\n }\n return state;\n }\n\n /**\n * Returns list of currently open modal IDs in stack order.\n */\n public getActiveModals(): string[] {\n return [...this.activeStack];\n }\n\n /**\n * Resets all modal states to closed.\n */\n public reset(): void {\n this.modals.clear();\n this.activeStack = [];\n this.notify();\n }\n\n /**\n * Subscribes a listener to modal state changes.\n */\n public subscribe(listener: ModalListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private notify(): void {\n const state = this.getState();\n for (const listener of this.listeners) {\n try {\n listener(state);\n } catch (err) {\n console.error('Error in modal listener callback:', err);\n }\n }\n }\n}\n\n/**\n * Singleton ModalManager instance.\n */\nexport const modalManager = new ModalManager();\n\n/**\n * React hook to observe and manipulate a single modal dialog state.\n */\nexport function useModal(\n modalId: string,\n manager: ModalManager = modalManager,\n): {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => boolean;\n} {\n const [isOpen, setIsOpen] = useState<boolean>(() => manager.isModalOpen(modalId));\n\n useEffect(() => {\n setIsOpen(manager.isModalOpen(modalId));\n return manager.subscribe((state) => {\n setIsOpen(Boolean(state[modalId]));\n });\n }, [modalId, manager]);\n\n const open = useCallback(() => manager.openModal(modalId), [modalId, manager]);\n const close = useCallback(() => manager.closeModal(modalId), [modalId, manager]);\n const toggle = useCallback(() => manager.toggleModal(modalId), [modalId, manager]);\n\n return { isOpen, open, close, toggle };\n}\n\n/**\n * React hook to observe and manage all modal dialogs.\n */\nexport function useModals(manager: ModalManager = modalManager): {\n modals: ModalState;\n activeModals: string[];\n isOpen: (modalId: string) => boolean;\n openModal: (modalId: string) => void;\n closeModal: (modalId?: string) => void;\n toggleModal: (modalId: string) => boolean;\n} {\n const [state, setState] = useState<ModalState>(() => manager.getState());\n\n useEffect(() => {\n setState(manager.getState());\n return manager.subscribe((nextState) => {\n setState(nextState);\n });\n }, [manager]);\n\n return {\n modals: state,\n activeModals: manager.getActiveModals(),\n isOpen: (id: string) => Boolean(state[id]),\n openModal: (id: string) => manager.openModal(id),\n closeModal: (id?: string) => manager.closeModal(id),\n toggleModal: (id: string) => manager.toggleModal(id),\n };\n}\n\n","import type { ActionStep, ShowToastStepPayload, OpenModalStepPayload, CloseModalStepPayload } from '@kubuild/schema';\nimport { type PipelineExecutionContext, type PipelineStepHandler } from '@kubuild/core';\nimport { toastManager, type ToastManager, type ToastType, type ToastPosition } from './toast-manager';\nimport { modalManager, type ModalManager } from './modal-manager';\n\n/**\n * Result returned by show_toast runner.\n */\nexport interface ShowToastResult {\n id: string;\n message: string;\n type: ToastType;\n title?: string;\n duration: number;\n position: ToastPosition;\n}\n\n/**\n * Result returned by open_modal or close_modal runner.\n */\nexport interface ModalActionResult {\n modalId: string;\n open: boolean;\n}\n\n/**\n * Action Runner for `show_toast`.\n */\nexport const showToastRunner: PipelineStepHandler = (\n step: ActionStep,\n context: PipelineExecutionContext,\n): ShowToastResult => {\n const payload = (step.payload || {}) as ShowToastStepPayload & {\n variant?: ToastType;\n position?: ToastPosition;\n };\n\n const message = String(payload.message || '').trim();\n if (!message) {\n throw new Error('Toast message cannot be empty');\n }\n\n const type: ToastType = payload.type || payload.variant || 'info';\n const duration = payload.duration !== undefined ? payload.duration : 4000;\n const position: ToastPosition = payload.position || 'top-right';\n const title = payload.title ? String(payload.title) : undefined;\n\n const targetManager: ToastManager = (context.toastManager as ToastManager) || toastManager;\n\n const toast = targetManager.showToast({\n message,\n type,\n duration,\n position,\n title,\n });\n\n return {\n id: toast.id,\n message: toast.message,\n type: toast.type,\n title: toast.title,\n duration: toast.duration,\n position: toast.position,\n };\n};\n\n/**\n * Action Runner for `open_modal`.\n */\nexport const openModalRunner: PipelineStepHandler = (\n step: ActionStep,\n context: PipelineExecutionContext,\n): ModalActionResult => {\n const payload = (step.payload || {}) as OpenModalStepPayload & {\n modalNodeId?: string;\n targetNodeId?: string;\n nodeId?: string;\n };\n\n const rawModalId = payload.modalId || payload.modalNodeId || payload.targetNodeId || payload.nodeId;\n const modalId = rawModalId ? String(rawModalId).trim() : '';\n\n if (!modalId) {\n throw new Error('Modal ID or Modal Node ID is required for open_modal action');\n }\n\n const targetManager: ModalManager = (context.modalManager as ModalManager) || modalManager;\n targetManager.openModal(modalId);\n\n // Sync to runtime execution context state & variables\n if (context.state && typeof context.state === 'object') {\n const existingModals = (context.state.modals as Record<string, boolean>) || {};\n context.state.modals = { ...existingModals, [modalId]: true };\n context.state[modalId] = true;\n }\n if (context.variables && typeof context.variables === 'object') {\n context.variables[`modal_${modalId}_open`] = true;\n }\n\n return {\n modalId,\n open: true,\n };\n};\n\n/**\n * Action Runner for `close_modal`.\n */\nexport const closeModalRunner: PipelineStepHandler = (\n step: ActionStep,\n context: PipelineExecutionContext,\n): ModalActionResult => {\n const payload = (step.payload || {}) as CloseModalStepPayload & {\n modalNodeId?: string;\n targetNodeId?: string;\n nodeId?: string;\n };\n\n const rawModalId = payload.modalId || payload.modalNodeId || payload.targetNodeId || payload.nodeId;\n const modalId = rawModalId ? String(rawModalId).trim() : undefined;\n\n const targetManager: ModalManager = (context.modalManager as ModalManager) || modalManager;\n targetManager.closeModal(modalId);\n\n // Sync to runtime execution context state & variables\n if (modalId) {\n if (context.state && typeof context.state === 'object') {\n const existingModals = (context.state.modals as Record<string, boolean>) || {};\n context.state.modals = { ...existingModals, [modalId]: false };\n context.state[modalId] = false;\n }\n if (context.variables && typeof context.variables === 'object') {\n context.variables[`modal_${modalId}_open`] = false;\n }\n } else {\n // If closed all / topmost\n if (context.state && typeof context.state === 'object') {\n context.state.modals = {};\n }\n }\n\n return {\n modalId: modalId || 'all',\n open: false,\n };\n};\n\n","import React, { useMemo } from 'react';\nimport {\n toastManager,\n useToasts,\n type ToastItem,\n type ToastPosition,\n type ToastType,\n type ToastManager as ToastManagerClass,\n} from './toast-manager';\nimport { CheckCircle2, AlertCircle, AlertTriangle, Info, X } from 'lucide-react';\n\nexport interface ToastContainerProps {\n manager?: ToastManagerClass;\n position?: ToastPosition;\n className?: string;\n maxVisible?: number;\n}\n\nconst POSITION_STYLES: Record<ToastPosition, React.CSSProperties> = {\n 'top-right': {\n top: '16px',\n right: '16px',\n alignItems: 'flex-end',\n },\n 'top-left': {\n top: '16px',\n left: '16px',\n alignItems: 'flex-start',\n },\n 'top-center': {\n top: '16px',\n left: '50%',\n transform: 'translateX(-50%)',\n alignItems: 'center',\n },\n 'bottom-right': {\n bottom: '16px',\n right: '16px',\n alignItems: 'flex-end',\n },\n 'bottom-left': {\n bottom: '16px',\n left: '16px',\n alignItems: 'flex-start',\n },\n 'bottom-center': {\n bottom: '16px',\n left: '50%',\n transform: 'translateX(-50%)',\n alignItems: 'center',\n },\n};\n\nconst TOAST_THEMES: Record<\n ToastType,\n {\n bg: string;\n border: string;\n text: string;\n titleText: string;\n iconColor: string;\n Icon: React.ComponentType<{ size?: number; className?: string; color?: string }>;\n }\n> = {\n success: {\n bg: '#f0fdf4',\n border: '#bbf7d0',\n text: '#166534',\n titleText: '#14532d',\n iconColor: '#16a34a',\n Icon: CheckCircle2,\n },\n error: {\n bg: '#fef2f2',\n border: '#fecaca',\n text: '#991b1b',\n titleText: '#7f1d1d',\n iconColor: '#dc2626',\n Icon: AlertCircle,\n },\n warning: {\n bg: '#fffbeb',\n border: '#fde68a',\n text: '#92400e',\n titleText: '#78350f',\n iconColor: '#d97706',\n Icon: AlertTriangle,\n },\n info: {\n bg: '#eff6ff',\n border: '#bfdbfe',\n text: '#1e40af',\n titleText: '#1e3a8a',\n iconColor: '#2563eb',\n Icon: Info,\n },\n};\n\n/**\n * Single Toast Item component rendering an alert card.\n */\nexport const ToastCard: React.FC<{ toast: ToastItem }> = ({ toast }) => {\n const theme = TOAST_THEMES[toast.type] || TOAST_THEMES.info;\n const IconComponent = theme.Icon;\n\n return (\n <div\n role=\"alert\"\n aria-live=\"polite\"\n data-testid={`toast-${toast.id}`}\n data-toast-type={toast.type}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n width: '100%',\n maxWidth: '380px',\n minWidth: '280px',\n padding: '12px 14px',\n backgroundColor: theme.bg,\n border: `1px solid ${theme.border}`,\n borderRadius: '8px',\n boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n color: theme.text,\n fontSize: '14px',\n lineHeight: '1.4',\n pointerEvents: 'auto',\n animation: 'kubuildToastIn 200ms cubic-bezier(0.16, 1, 0.3, 1)',\n wordBreak: 'break-word',\n boxSizing: 'border-box',\n transition: 'all 200ms ease',\n }}\n >\n <div style={{ flexShrink: 0, marginTop: '2px', color: theme.iconColor }}>\n <IconComponent size={18} color={theme.iconColor} />\n </div>\n\n <div style={{ flex: 1, minWidth: 0 }}>\n {toast.title && (\n <div\n style={{\n fontWeight: 600,\n fontSize: '14px',\n marginBottom: '2px',\n color: theme.titleText,\n }}\n >\n {toast.title}\n </div>\n )}\n <div style={{ color: theme.text }}>{toast.message}</div>\n </div>\n\n {toast.dismissible && (\n <button\n type=\"button\"\n aria-label=\"Close notification\"\n onClick={toast.dismiss}\n data-testid={`toast-dismiss-${toast.id}`}\n style={{\n flexShrink: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '2px',\n marginLeft: '4px',\n color: theme.text,\n opacity: 0.7,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n );\n};\n\n/**\n * Built-in responsive Toast Container component.\n * Renders floating toasts with smooth animations and auto-dismiss capabilities.\n */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n manager = toastManager,\n position,\n className,\n maxVisible = 5,\n}) => {\n const { toasts } = useToasts(manager);\n\n // Group toasts by position if position prop is not specified\n const groupedToasts = useMemo(() => {\n if (position) {\n return { [position]: toasts.filter((t) => (t.position || 'top-right') === position) };\n }\n\n const groups: Record<ToastPosition, ToastItem[]> = {\n 'top-right': [],\n 'top-left': [],\n 'top-center': [],\n 'bottom-right': [],\n 'bottom-left': [],\n 'bottom-center': [],\n };\n\n toasts.forEach((t) => {\n const pos = t.position || 'top-right';\n groups[pos].push(t);\n });\n\n return groups;\n }, [toasts, position]);\n\n if (toasts.length === 0) {\n return null;\n }\n\n return (\n <>\n <style>{`\n @keyframes kubuildToastIn {\n from {\n opacity: 0;\n transform: translateY(-8px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n `}</style>\n {(Object.entries(groupedToasts) as [ToastPosition, ToastItem[]][]).map(([pos, items]) => {\n if (!items || items.length === 0) return null;\n const visibleItems = items.slice(-maxVisible);\n\n return (\n <div\n key={pos}\n data-testid={`toast-container-${pos}`}\n className={className}\n style={{\n position: 'fixed',\n zIndex: 99999,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n maxWidth: 'calc(100vw - 32px)',\n pointerEvents: 'none',\n ...POSITION_STYLES[pos],\n }}\n >\n {visibleItems.map((toast) => (\n <ToastCard key={toast.id} toast={toast} />\n ))}\n </div>\n );\n })}\n </>\n );\n};\n\n","import type { ActionPipelineExecutor, PipelineStepHandler } from '@kubuild/core';\nimport {\n apiRequestRunner,\n createApiRequestHandler,\n type ApiRequestRunnerOptions,\n} from './api-request';\nimport { showToastRunner, openModalRunner, closeModalRunner } from './ui-feedback';\n\nexport * from './api-request';\nexport * from './toast-manager';\nexport * from './toast-container';\nexport * from './modal-manager';\nexport * from './ui-feedback';\n\n/**\n * Options for configuring built-in action runners.\n */\nexport interface ActionRunnerFactoryOptions {\n apiRequest?: ApiRequestRunnerOptions;\n handlers?: Record<string, PipelineStepHandler>;\n}\n\n/**\n * Creates a map of all default built-in action runners for `@kubuild/renderer`.\n */\nexport function createDefaultActionRunners(\n options?: ActionRunnerFactoryOptions,\n): Record<string, PipelineStepHandler> {\n const apiHandler = options?.apiRequest\n ? createApiRequestHandler(options.apiRequest)\n : apiRequestRunner;\n\n return {\n api_request: apiHandler,\n show_toast: showToastRunner,\n open_modal: openModalRunner,\n close_modal: closeModalRunner,\n ...(options?.handlers || {}),\n };\n}\n\n/**\n * Registers default built-in action runners onto an ActionPipelineExecutor instance.\n */\nexport function registerDefaultActionRunners(\n executor: ActionPipelineExecutor,\n options?: ActionRunnerFactoryOptions,\n): ActionPipelineExecutor {\n const runners = createDefaultActionRunners(options);\n for (const [type, handler] of Object.entries(runners)) {\n if (!executor.hasHandler(type) || options?.handlers?.[type] || options?.apiRequest) {\n executor.registerHandler(type, handler);\n }\n }\n return executor;\n}\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useMemo,\n useEffect,\n} from 'react';\nimport type {\n FormConfig,\n FormFieldBinding,\n ActionPipeline,\n PageDocument,\n ValidationRule,\n ValidateOnEvent,\n} from '@kubuild/schema';\nimport {\n applyFieldTransform,\n validateFieldValue,\n validateForm as coreValidateForm,\n ActionPipelineExecutor,\n type Diagnostic,\n} from '@kubuild/core';\nimport { registerDefaultActionRunners } from './action-runners';\nimport { useRenderContext } from './render-context';\n\n/**\n * Form Runtime State representation.\n */\nexport interface FormRuntimeState {\n values: Record<string, unknown>;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n isSubmitting: boolean;\n isValid: boolean;\n dirty: boolean;\n}\n\n/**\n * Partial / input structure for registering a field binding.\n */\nexport interface FormFieldBindingInput {\n name: string;\n label?: string;\n defaultValue?: unknown;\n rules?: ValidationRule[];\n validateOn?: ValidateOnEvent;\n transform?: 'trim' | 'lowercase' | 'uppercase' | 'number';\n disabled?: boolean;\n required?: boolean;\n}\n\n/**\n * Form Runtime Context Value containing state and mutation callbacks.\n */\nexport interface FormRuntimeContextValue extends FormRuntimeState {\n formId: string;\n formConfig?: FormConfig;\n initialValues: Record<string, unknown>;\n\n // Callbacks\n setFieldValue: (name: string, value: unknown, shouldValidate?: boolean) => void;\n setFieldTouched: (name: string, isTouched?: boolean, shouldValidate?: boolean) => void;\n setFieldError: (name: string, error: string | null) => void;\n setErrors: (errors: Record<string, string>) => void;\n setValues: (values: Record<string, unknown>, replace?: boolean) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n resetForm: (nextInitialValues?: Record<string, unknown>) => void;\n validateField: (name: string, value?: unknown) => string | null;\n validateForm: (valuesToValidate?: Record<string, unknown>) => Record<string, string>;\n handleFormSubmit: (e?: React.FormEvent | Event) => Promise<boolean>;\n\n // Field Registration & Meta\n registerField: (binding: FormFieldBindingInput) => () => void;\n getFieldBinding: (name: string) => FormFieldBinding | undefined;\n}\n\n/**\n * FormRuntimeContext for consuming form state across the React tree.\n */\nexport const FormRuntimeContext = createContext<FormRuntimeContextValue | null>(null);\n\n/**\n * Props for FormRuntimeProvider.\n */\nexport interface FormRuntimeProviderProps {\n formId?: string;\n formConfig?: FormConfig;\n initialValues?: Record<string, unknown>;\n onSubmit?: (\n values: Record<string, unknown>,\n helpers: {\n formId: string;\n setSubmitting: (isSubmitting: boolean) => void;\n resetForm: (nextInitialValues?: Record<string, unknown>) => void;\n setErrors: (errors: Record<string, string>) => void;\n },\n ) => Promise<void> | void;\n onSuccess?: (values: Record<string, unknown>) => void;\n onError?: (errors: Record<string, string>) => void;\n actions?: ActionPipeline[];\n nodeId?: string;\n document?: PageDocument;\n onDiagnostic?: (diagnostic: Diagnostic) => void;\n children: React.ReactNode;\n}\n\n/**\n * Helper to deep compare/check dirty state between active values and initial values.\n */\nfunction checkIsDirty(\n values: Record<string, unknown>,\n initialValues: Record<string, unknown>,\n): boolean {\n const allKeys = new Set([...Object.keys(values), ...Object.keys(initialValues)]);\n for (const key of allKeys) {\n if (values[key] !== initialValues[key]) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * FormRuntimeProvider manages local reactive form state, field validation,\n * submission handling, and action pipeline execution.\n */\nexport const FormRuntimeProvider: React.FC<FormRuntimeProviderProps> = ({\n formId: propFormId,\n formConfig,\n initialValues: propInitialValues,\n onSubmit,\n onSuccess,\n onError,\n actions,\n nodeId,\n document,\n onDiagnostic,\n children,\n}) => {\n const renderContext = useRenderContext();\n\n const formId = useMemo(() => {\n return propFormId || formConfig?.formId || nodeId || 'kubuild-form';\n }, [propFormId, formConfig?.formId, nodeId]);\n\n const baseInitialValues = useMemo<Record<string, unknown>>(() => {\n return {\n ...(formConfig?.initialValues || {}),\n ...(propInitialValues || {}),\n };\n }, [formConfig?.initialValues, propInitialValues]);\n\n const [initialValues, setInitialValues] = useState<Record<string, unknown>>(baseInitialValues);\n const [values, setValuesState] = useState<Record<string, unknown>>(baseInitialValues);\n const [errors, setErrorsState] = useState<Record<string, string>>({});\n const [touched, setTouchedState] = useState<Record<string, boolean>>({});\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n\n // Field bindings registry for dynamic validation rules & transforms\n const fieldBindingsRef = useRef<Map<string, FormFieldBinding>>(new Map());\n\n // Keep latest state in ref to avoid stale closures in callbacks\n const stateRef = useRef({\n values,\n errors,\n touched,\n initialValues,\n isSubmitting,\n formConfig,\n });\n\n useEffect(() => {\n stateRef.current = {\n values,\n errors,\n touched,\n initialValues,\n isSubmitting,\n formConfig,\n };\n });\n\n const registerField = useCallback((binding: FormFieldBindingInput) => {\n if (!binding || !binding.name) return () => {};\n const normalized: FormFieldBinding = {\n name: binding.name,\n rules: binding.rules || [],\n validateOn: binding.validateOn || 'blur',\n label: binding.label,\n defaultValue: binding.defaultValue,\n transform: binding.transform,\n disabled: binding.disabled,\n required: binding.required,\n };\n fieldBindingsRef.current.set(binding.name, normalized);\n\n // Initialize default value if field is not yet present in values\n if (binding.defaultValue !== undefined) {\n if (stateRef.current.values[binding.name] === undefined) {\n stateRef.current.values[binding.name] = binding.defaultValue;\n }\n setValuesState((prev) => {\n if (prev[binding.name] === undefined) {\n return { ...prev, [binding.name]: binding.defaultValue };\n }\n return prev;\n });\n }\n\n return () => {\n fieldBindingsRef.current.delete(binding.name);\n };\n }, []);\n\n const getFieldBinding = useCallback((name: string): FormFieldBinding | undefined => {\n return fieldBindingsRef.current.get(name);\n }, []);\n\n const validateField = useCallback(\n (name: string, valueToValidate?: unknown): string | null => {\n const binding = fieldBindingsRef.current.get(name);\n const currentValues = stateRef.current.values;\n let rawVal = valueToValidate !== undefined ? valueToValidate : currentValues[name];\n\n if (binding?.transform) {\n rawVal = applyFieldTransform(rawVal, binding.transform);\n }\n\n const rules = [...(binding?.rules || [])];\n if (binding?.required && !rules.some((r) => r.type === 'required')) {\n rules.unshift({\n type: 'required',\n message: `${binding.label || name} is required`,\n });\n }\n\n return validateFieldValue(rawVal, rules, currentValues);\n },\n [],\n );\n\n const validateForm = useCallback(\n (valuesToValidate?: Record<string, unknown>): Record<string, string> => {\n const targetValues = valuesToValidate || stateRef.current.values;\n const bindingsArray = Array.from(fieldBindingsRef.current.values());\n\n return coreValidateForm(targetValues, bindingsArray);\n },\n [],\n );\n\n const setFieldError = useCallback((name: string, error: string | null) => {\n setErrorsState((prev) => {\n if (error) {\n return { ...prev, [name]: error };\n }\n if (prev[name] === undefined) {\n return prev;\n }\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const setErrors = useCallback((newErrors: Record<string, string>) => {\n setErrorsState({ ...newErrors });\n }, []);\n\n const setFieldValue = useCallback(\n (name: string, value: unknown, shouldValidate?: boolean) => {\n const binding = fieldBindingsRef.current.get(name);\n let transformedVal = value;\n if (binding?.transform) {\n transformedVal = applyFieldTransform(value, binding.transform);\n }\n\n setValuesState((prev) => ({\n ...prev,\n [name]: transformedVal,\n }));\n\n // Determine validation timing\n const validateTrigger =\n binding?.validateOn || formConfig?.validateOn || 'blur';\n const mustValidate =\n shouldValidate !== undefined ? shouldValidate : validateTrigger === 'change';\n\n if (mustValidate) {\n const error = validateField(name, transformedVal);\n setFieldError(name, error);\n }\n },\n [formConfig?.validateOn, validateField, setFieldError],\n );\n\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean = true, shouldValidate?: boolean) => {\n setTouchedState((prev) => ({\n ...prev,\n [name]: isTouched,\n }));\n\n const binding = fieldBindingsRef.current.get(name);\n const validateTrigger =\n binding?.validateOn || formConfig?.validateOn || 'blur';\n const mustValidate =\n shouldValidate !== undefined ? shouldValidate : validateTrigger === 'blur' && isTouched;\n\n if (mustValidate) {\n const error = validateField(name);\n setFieldError(name, error);\n }\n },\n [formConfig?.validateOn, validateField, setFieldError],\n );\n\n const setValues = useCallback(\n (newValues: Record<string, unknown>, replace: boolean = false) => {\n setValuesState((prev) => (replace ? { ...newValues } : { ...prev, ...newValues }));\n },\n [],\n );\n\n const setSubmitting = useCallback((submitting: boolean) => {\n setIsSubmitting(submitting);\n }, []);\n\n const resetForm = useCallback(\n (nextInitialValues?: Record<string, unknown>) => {\n const resetVals = nextInitialValues || initialValues;\n if (nextInitialValues) {\n setInitialValues(nextInitialValues);\n }\n setValuesState({ ...resetVals });\n setErrorsState({});\n setTouchedState({});\n setIsSubmitting(false);\n },\n [initialValues],\n );\n\n const handleFormSubmit = useCallback(\n async (e?: React.FormEvent | Event): Promise<boolean> => {\n if (e && typeof (e as React.FormEvent).preventDefault === 'function') {\n (e as React.FormEvent).preventDefault();\n }\n\n if (stateRef.current.isSubmitting) {\n return false;\n }\n\n const currentValues = stateRef.current.values;\n\n // 1. Mark all registered fields as touched\n const allTouched: Record<string, boolean> = {};\n for (const fieldName of fieldBindingsRef.current.keys()) {\n allTouched[fieldName] = true;\n }\n setTouchedState(allTouched);\n\n // 2. Validate form\n const formValidationErrors = validateForm(currentValues);\n setErrorsState(formValidationErrors);\n\n const isValid = Object.keys(formValidationErrors).length === 0;\n\n if (!isValid) {\n onError?.(formValidationErrors);\n\n // Auto-scroll to first invalid input field if configured\n const shouldScroll = formConfig?.scrollToFirstError !== false;\n if (shouldScroll && typeof window !== 'undefined' && typeof document !== 'undefined') {\n const firstErrorField = Object.keys(formValidationErrors)[0];\n if (firstErrorField) {\n try {\n const el =\n window.document.querySelector<HTMLElement>(\n `[name=\"${firstErrorField}\"], [data-field=\"${firstErrorField}\"]`,\n );\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n el.focus?.();\n }\n } catch {\n // Ignore DOM query failures in non-standard test environments\n }\n }\n }\n\n return false;\n }\n\n setIsSubmitting(true);\n\n try {\n // 3. Execute submit action pipelines if attached\n if (actions && actions.length > 0) {\n const submitPipelines = actions.filter((p) => p.trigger === 'submit' && p.enabled !== false);\n if (submitPipelines.length > 0) {\n const executor = new ActionPipelineExecutor();\n registerDefaultActionRunners(executor);\n for (const pipeline of submitPipelines) {\n const execResult = await executor.execute(pipeline, {\n context: {\n form: currentValues,\n variables: renderContext?.variables ? { ...renderContext.variables } : {},\n nodeId,\n document,\n },\n });\n\n if (!execResult.success) {\n const errorMsg =\n execResult.error instanceof Error\n ? execResult.error.message\n : String(execResult.error || 'Submit pipeline failed');\n const diagnostic: Diagnostic = {\n code: 'ACTION_EXECUTION_ERROR',\n actionType: pipeline.steps[0]?.type || 'submit',\n nodeId,\n message: `Form submit pipeline failed: ${errorMsg}`,\n error: execResult.error,\n };\n onDiagnostic?.(diagnostic);\n renderContext?.onDiagnostic?.(diagnostic);\n onError?.({ _form: errorMsg });\n setIsSubmitting(false);\n return false;\n }\n }\n }\n }\n\n // 4. Custom onSubmit handler\n if (onSubmit) {\n await onSubmit(currentValues, {\n formId,\n setSubmitting,\n resetForm,\n setErrors: setErrorsState,\n });\n }\n\n onSuccess?.(currentValues);\n\n // 5. Reset form on submit if configured\n if (formConfig?.resetOnSubmit) {\n resetForm();\n }\n\n return true;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n onError?.({ _form: errorMsg });\n return false;\n } finally {\n setIsSubmitting(false);\n }\n },\n [\n formConfig,\n actions,\n nodeId,\n document,\n onDiagnostic,\n renderContext,\n onSubmit,\n onSuccess,\n onError,\n formId,\n setSubmitting,\n resetForm,\n validateForm,\n ],\n );\n\n const isValid = useMemo(() => Object.keys(errors).length === 0, [errors]);\n const dirty = useMemo(() => checkIsDirty(values, initialValues), [values, initialValues]);\n\n const contextValue = useMemo<FormRuntimeContextValue>(\n () => ({\n formId,\n formConfig,\n initialValues,\n values,\n errors,\n touched,\n isSubmitting,\n isValid,\n dirty,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n setErrors,\n setValues,\n setSubmitting,\n resetForm,\n validateField,\n validateForm,\n handleFormSubmit,\n registerField,\n getFieldBinding,\n }),\n [\n formId,\n formConfig,\n initialValues,\n values,\n errors,\n touched,\n isSubmitting,\n isValid,\n dirty,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n setErrors,\n setValues,\n setSubmitting,\n resetForm,\n validateField,\n validateForm,\n handleFormSubmit,\n registerField,\n getFieldBinding,\n ],\n );\n\n return (\n <FormRuntimeContext.Provider value={contextValue}>\n {children}\n </FormRuntimeContext.Provider>\n );\n};\n\n/**\n * Hook to access the current FormRuntimeContext.\n * Returns null if invoked outside of a FormRuntimeProvider.\n */\nexport function useFormRuntime(): FormRuntimeContextValue | null {\n return useContext(FormRuntimeContext);\n}\n\n/**\n * Hook to access the current FormRuntimeContext (alias for useFormRuntime).\n */\nexport function useFormContext(): FormRuntimeContextValue | null {\n return useContext(FormRuntimeContext);\n}\n\n/**\n * Hook providing status properties of the nearest form context.\n */\nexport function useFormStatus(): {\n isSubmitting: boolean;\n isValid: boolean;\n dirty: boolean;\n errors: Record<string, string>;\n} {\n const form = useFormRuntime();\n return {\n isSubmitting: form?.isSubmitting ?? false,\n isValid: form?.isValid ?? true,\n dirty: form?.dirty ?? false,\n errors: form?.errors ?? {},\n };\n}\n\n/**\n * Result returned by the `useFormField` hook.\n */\nexport interface UseFormFieldReturn<T = unknown> {\n value: T;\n error?: string;\n touched: boolean;\n isInvalid: boolean;\n setValue: (value: T, shouldValidate?: boolean) => void;\n setTouched: (touched?: boolean, shouldValidate?: boolean) => void;\n setError: (error: string | null) => void;\n onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement> | T) => void;\n onBlur: (e?: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n}\n\n/**\n * Hook to bind a field component to the nearest FormRuntimeContext.\n */\nexport function useFormField<T = unknown>(\n name: string,\n binding?: FormFieldBindingInput,\n): UseFormFieldReturn<T> {\n const form = useFormRuntime();\n\n if (form && name) {\n form.registerField(\n binding || {\n name,\n },\n );\n }\n\n useEffect(() => {\n if (!form || !name) return;\n const unregister = form.registerField(\n binding || {\n name,\n },\n );\n return () => {\n unregister();\n };\n }, [form, name, binding]);\n\n const value = (form?.values[name] !== undefined ? form.values[name] : binding?.defaultValue) as T;\n const error = form?.errors[name];\n const touched = Boolean(form?.touched[name]);\n const isInvalid = Boolean(error && touched);\n\n const setValue = useCallback(\n (val: T, shouldValidate?: boolean) => {\n form?.setFieldValue(name, val, shouldValidate);\n },\n [form, name],\n );\n\n const setTouched = useCallback(\n (isTouched: boolean = true, shouldValidate?: boolean) => {\n form?.setFieldTouched(name, isTouched, shouldValidate);\n },\n [form, name],\n );\n\n const setError = useCallback(\n (err: string | null) => {\n form?.setFieldError(name, err);\n },\n [form, name],\n );\n\n const onChange = useCallback(\n (\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement> | T,\n ) => {\n if (e && typeof e === 'object' && 'target' in e && e.target) {\n const target = e.target as HTMLInputElement;\n if (target.type === 'checkbox') {\n setValue(target.checked as unknown as T);\n } else if (target.type === 'number') {\n const num = target.value === '' ? '' : Number(target.value);\n setValue(num as unknown as T);\n } else {\n setValue(target.value as unknown as T);\n }\n } else {\n setValue(e as T);\n }\n },\n [setValue],\n );\n\n const onBlur = useCallback(() => {\n setTouched(true);\n }, [setTouched]);\n\n return {\n value,\n error,\n touched,\n isInvalid,\n setValue,\n setTouched,\n setError,\n onChange,\n onBlur,\n };\n}\n","import React, { useRef } from 'react';\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};\n\n","import React, { useRef, useLayoutEffect, useEffect, useMemo } from 'react';\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\n/**\n * Scopes custom CSS rules in embed HTML so body/html rules don't leak into the canvas.\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\n","import React, { useEffect } from 'react';\nimport type { ValidationRule, ValidateOnEvent } from '@kubuild/schema';\nimport { useFormRuntime } from '../form-context';\nimport { EditableText } from './editable-text';\n\nexport interface FormContainerNodeProps {\n id?: string;\n name?: string;\n action?: string;\n method?: string;\n target?: string;\n autoComplete?: string;\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n mode?: 'editor' | 'runtime';\n dataKubuildNode?: string;\n children?: React.ReactNode;\n}\n\nexport const FormContainerNode: React.FC<FormContainerNodeProps> = ({\n id,\n name,\n action,\n method = 'POST',\n target,\n autoComplete,\n style,\n onClick,\n mode,\n dataKubuildNode,\n children,\n}) => {\n const formRuntime = useFormRuntime();\n\n const handleSubmit = (e: React.FormEvent) => {\n if (mode === 'editor') {\n e.preventDefault();\n return;\n }\n if (formRuntime) {\n formRuntime.handleFormSubmit(e);\n }\n };\n\n const handleReset = () => {\n if (formRuntime) {\n formRuntime.resetForm();\n }\n };\n\n return (\n <form\n id={id}\n name={name}\n action={action}\n method={method}\n target={target}\n autoComplete={autoComplete}\n style={style}\n onClick={onClick}\n onSubmit={handleSubmit}\n onReset={handleReset}\n data-kubuild-node={dataKubuildNode}\n role=\"form\"\n aria-label={name}\n >\n {children}\n </form>\n );\n};\n\nexport interface FormInputNodeProps {\n id?: string;\n name?: string;\n type?: string;\n placeholder?: string;\n defaultValue?: unknown;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n rules?: ValidationRule[];\n validateOn?: ValidateOnEvent;\n transform?: 'trim' | 'lowercase' | 'uppercase' | 'number';\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n}\n\nexport const FormInputNode: React.FC<FormInputNodeProps> = ({\n id,\n name,\n type = 'text',\n placeholder,\n defaultValue,\n required,\n disabled,\n readOnly,\n rules,\n validateOn,\n transform,\n style,\n onClick,\n dataKubuildNode,\n}) => {\n const formRuntime = useFormRuntime();\n\n if (formRuntime && name) {\n formRuntime.registerField({\n name,\n defaultValue,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n transform,\n });\n }\n\n useEffect(() => {\n if (!formRuntime || !name) return;\n const unregister = formRuntime.registerField({\n name,\n defaultValue,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n transform,\n });\n return () => {\n unregister();\n };\n }, [formRuntime, name, defaultValue, required, disabled, rules, validateOn, transform]);\n\n if (!formRuntime || !name) {\n return (\n <input\n id={id}\n type={type}\n name={name}\n placeholder={placeholder}\n defaultValue={defaultValue !== undefined ? String(defaultValue) : undefined}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\n />\n );\n }\n\n const value = formRuntime.values[name];\n const stringVal =\n value !== undefined && value !== null\n ? String(value)\n : defaultValue !== undefined && defaultValue !== null\n ? String(defaultValue)\n : '';\n const error = formRuntime.errors[name];\n const isTouched = Boolean(formRuntime.touched[name]);\n const isInvalid = Boolean(error && isTouched);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let val: unknown = e.target.value;\n if (type === 'number') {\n val = e.target.value === '' ? '' : Number(e.target.value);\n }\n formRuntime.setFieldValue(name, val);\n };\n\n const handleBlur = () => {\n formRuntime.setFieldTouched(name, true);\n };\n\n return (\n <input\n id={id}\n type={type}\n name={name}\n placeholder={placeholder}\n value={stringVal}\n onChange={handleChange}\n onBlur={handleBlur}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\n data-field={name}\n data-invalid={isInvalid ? 'true' : undefined}\n aria-invalid={isInvalid ? true : undefined}\n aria-errormessage={error ? `${id}-error` : undefined}\n />\n );\n};\n\nexport interface FormTextareaNodeProps {\n id?: string;\n name?: string;\n placeholder?: string;\n defaultValue?: unknown;\n rows?: number;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n rules?: ValidationRule[];\n validateOn?: ValidateOnEvent;\n transform?: 'trim' | 'lowercase' | 'uppercase' | 'number';\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n}\n\nexport const FormTextareaNode: React.FC<FormTextareaNodeProps> = ({\n id,\n name,\n placeholder,\n defaultValue,\n rows = 4,\n required,\n disabled,\n readOnly,\n rules,\n validateOn,\n transform,\n style,\n onClick,\n dataKubuildNode,\n}) => {\n const formRuntime = useFormRuntime();\n\n if (formRuntime && name) {\n formRuntime.registerField({\n name,\n defaultValue,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n transform,\n });\n }\n\n useEffect(() => {\n if (!formRuntime || !name) return;\n const unregister = formRuntime.registerField({\n name,\n defaultValue,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n transform,\n });\n return () => {\n unregister();\n };\n }, [formRuntime, name, defaultValue, required, disabled, rules, validateOn, transform]);\n\n if (!formRuntime || !name) {\n return (\n <textarea\n id={id}\n name={name}\n placeholder={placeholder}\n defaultValue={defaultValue !== undefined ? String(defaultValue) : undefined}\n rows={rows}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\n />\n );\n }\n\n const value = formRuntime.values[name];\n const stringVal =\n value !== undefined && value !== null\n ? String(value)\n : defaultValue !== undefined && defaultValue !== null\n ? String(defaultValue)\n : '';\n const error = formRuntime.errors[name];\n const isTouched = Boolean(formRuntime.touched[name]);\n const isInvalid = Boolean(error && isTouched);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n formRuntime.setFieldValue(name, e.target.value);\n };\n\n const handleBlur = () => {\n formRuntime.setFieldTouched(name, true);\n };\n\n return (\n <textarea\n id={id}\n name={name}\n placeholder={placeholder}\n rows={rows}\n value={stringVal}\n onChange={handleChange}\n onBlur={handleBlur}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\n data-field={name}\n data-invalid={isInvalid ? 'true' : undefined}\n aria-invalid={isInvalid ? true : undefined}\n aria-errormessage={error ? `${id}-error` : undefined}\n />\n );\n};\n\nexport interface FormSelectNodeProps {\n id?: string;\n name?: string;\n placeholder?: string;\n defaultValue?: unknown;\n required?: boolean;\n disabled?: boolean;\n rules?: ValidationRule[];\n validateOn?: ValidateOnEvent;\n optionsList: Array<{ label: string; value: string }>;\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n}\n\nexport const FormSelectNode: React.FC<FormSelectNodeProps> = ({\n id,\n name,\n placeholder,\n defaultValue,\n required,\n disabled,\n rules,\n validateOn,\n optionsList,\n style,\n onClick,\n dataKubuildNode,\n}) => {\n const formRuntime = useFormRuntime();\n\n if (formRuntime && name) {\n formRuntime.registerField({\n name,\n defaultValue,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n });\n }\n\n useEffect(() => {\n if (!formRuntime || !name) return;\n const unregister = formRuntime.registerField({\n name,\n defaultValue,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n });\n return () => {\n unregister();\n };\n }, [formRuntime, name, defaultValue, required, disabled, rules, validateOn]);\n\n if (!formRuntime || !name) {\n return (\n <select\n id={id}\n name={name}\n defaultValue={defaultValue !== undefined ? String(defaultValue) : undefined}\n required={required}\n disabled={disabled}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\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\n const value = formRuntime.values[name];\n const stringVal =\n value !== undefined && value !== null\n ? String(value)\n : defaultValue !== undefined && defaultValue !== null\n ? String(defaultValue)\n : undefined;\n const error = formRuntime.errors[name];\n const isTouched = Boolean(formRuntime.touched[name]);\n const isInvalid = Boolean(error && isTouched);\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n formRuntime.setFieldValue(name, e.target.value);\n };\n\n const handleBlur = () => {\n formRuntime.setFieldTouched(name, true);\n };\n\n return (\n <select\n id={id}\n name={name}\n value={stringVal}\n defaultValue={stringVal === undefined ? (defaultValue !== undefined ? String(defaultValue) : undefined) : undefined}\n onChange={handleChange}\n onBlur={handleBlur}\n required={required}\n disabled={disabled}\n style={style}\n onClick={onClick}\n data-kubuild-node={dataKubuildNode}\n data-field={name}\n data-invalid={isInvalid ? 'true' : undefined}\n aria-invalid={isInvalid ? true : undefined}\n aria-errormessage={error ? `${id}-error` : undefined}\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\nexport interface FormCheckboxNodeProps {\n id?: string;\n name?: string;\n label: string;\n value: string;\n defaultChecked?: boolean;\n required?: boolean;\n disabled?: boolean;\n rules?: ValidationRule[];\n validateOn?: ValidateOnEvent;\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n isEditable?: boolean;\n onNodePropChange?: (nodeId: string, propName: string, value: unknown, isBlur?: boolean) => void;\n}\n\nexport const FormCheckboxNode: React.FC<FormCheckboxNodeProps> = ({\n id,\n name,\n label,\n value,\n defaultChecked = false,\n required,\n disabled,\n rules,\n validateOn,\n style,\n onClick,\n dataKubuildNode,\n isEditable,\n onNodePropChange,\n}) => {\n const formRuntime = useFormRuntime();\n\n if (formRuntime && name) {\n formRuntime.registerField({\n name,\n defaultValue: defaultChecked,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n });\n }\n\n useEffect(() => {\n if (!formRuntime || !name) return;\n const unregister = formRuntime.registerField({\n name,\n defaultValue: defaultChecked,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n });\n return () => {\n unregister();\n };\n }, [formRuntime, name, defaultChecked, required, disabled, rules, validateOn]);\n\n const isChecked =\n formRuntime && name\n ? formRuntime.values[name] !== undefined\n ? Boolean(formRuntime.values[name])\n : defaultChecked\n : defaultChecked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (formRuntime && name) {\n formRuntime.setFieldValue(name, e.target.checked);\n }\n };\n\n const handleBlur = () => {\n if (formRuntime && name) {\n formRuntime.setFieldTouched(name, true);\n }\n };\n\n return (\n <label id={id} style={style} onClick={onClick} data-kubuild-node={dataKubuildNode}>\n <input\n type=\"checkbox\"\n name={name}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n onBlur={handleBlur}\n required={required}\n disabled={disabled}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n data-field={name}\n />\n {isEditable ? (\n <EditableText\n as=\"span\"\n value={label}\n isEditable={isEditable}\n nodeId={dataKubuildNode || ''}\n onChange={(val, isBlur) => onNodePropChange?.(dataKubuildNode || '', 'label', val, isBlur)}\n />\n ) : (\n <span>{label}</span>\n )}\n </label>\n );\n};\n\nexport interface FormRadioNodeProps {\n id?: string;\n name?: string;\n label: string;\n value: string;\n defaultChecked?: boolean;\n required?: boolean;\n disabled?: boolean;\n rules?: ValidationRule[];\n validateOn?: ValidateOnEvent;\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n isEditable?: boolean;\n onNodePropChange?: (nodeId: string, propName: string, value: unknown, isBlur?: boolean) => void;\n}\n\nexport const FormRadioNode: React.FC<FormRadioNodeProps> = ({\n id,\n name,\n label,\n value,\n defaultChecked = false,\n required,\n disabled,\n rules,\n validateOn,\n style,\n onClick,\n dataKubuildNode,\n isEditable,\n onNodePropChange,\n}) => {\n const formRuntime = useFormRuntime();\n\n if (formRuntime && name) {\n formRuntime.registerField({\n name,\n defaultValue: defaultChecked ? value : undefined,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n });\n }\n\n useEffect(() => {\n if (!formRuntime || !name) return;\n const unregister = formRuntime.registerField({\n name,\n defaultValue: defaultChecked ? value : undefined,\n required,\n disabled,\n rules: rules || [],\n validateOn,\n });\n return () => {\n unregister();\n };\n }, [formRuntime, name, defaultChecked, value, required, disabled, rules, validateOn]);\n\n const isChecked =\n formRuntime && name\n ? formRuntime.values[name] !== undefined\n ? formRuntime.values[name] === value\n : defaultChecked\n : defaultChecked;\n\n const handleChange = () => {\n if (formRuntime && name) {\n formRuntime.setFieldValue(name, value);\n }\n };\n\n const handleBlur = () => {\n if (formRuntime && name) {\n formRuntime.setFieldTouched(name, true);\n }\n };\n\n return (\n <label id={id} style={style} onClick={onClick} data-kubuild-node={dataKubuildNode}>\n <input\n type=\"radio\"\n name={name}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n onBlur={handleBlur}\n required={required}\n disabled={disabled}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n data-field={name}\n />\n {isEditable ? (\n <EditableText\n as=\"span\"\n value={label}\n isEditable={isEditable}\n nodeId={dataKubuildNode || ''}\n onChange={(val, isBlur) => onNodePropChange?.(dataKubuildNode || '', 'label', val, isBlur)}\n />\n ) : (\n <span>{label}</span>\n )}\n </label>\n );\n};\n\nexport interface FormSubmitButtonNodeProps {\n id?: string;\n buttonType: 'submit' | 'button' | 'reset';\n disabled?: boolean;\n ariaLabel?: string;\n style?: React.CSSProperties;\n onClick?: (e: React.MouseEvent) => void;\n dataKubuildNode?: string;\n actionAttrs?: Record<string, unknown>;\n children: React.ReactNode;\n}\n\nexport const FormSubmitButtonNode: React.FC<FormSubmitButtonNodeProps> = ({\n id,\n buttonType,\n disabled,\n ariaLabel,\n style,\n onClick,\n dataKubuildNode,\n actionAttrs,\n children,\n}) => {\n const formRuntime = useFormRuntime();\n const isSubmitting = formRuntime?.isSubmitting === true;\n const isEffectivelyDisabled = disabled || (buttonType === 'submit' && isSubmitting);\n\n return (\n <button\n id={id}\n type={buttonType}\n disabled={isEffectivelyDisabled}\n aria-disabled={isEffectivelyDisabled ? true : undefined}\n aria-label={ariaLabel}\n aria-busy={buttonType === 'submit' && isSubmitting ? true : undefined}\n tabIndex={isEffectivelyDisabled ? -1 : 0}\n style={style}\n onClick={isEffectivelyDisabled ? undefined : onClick}\n data-kubuild-node={dataKubuildNode}\n {...actionAttrs}\n >\n {children}\n </button>\n );\n};\n\n","/**\n * Helper to convert strings to PascalCase (e.g. for icon names).\n */\nexport function 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\n/**\n * Extracts YouTube video ID from various YouTube URL formats.\n */\nexport function 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\n/**\n * Extracts Vimeo video ID from Vimeo URL formats.\n */\nexport function 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\n/**\n * Converts aspect ratio token to CSS aspectRatio value.\n */\nexport function 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\n","import React from 'react';\nimport {\n PageDocument,\n Node,\n isAssetReference,\n isVariableBinding,\n ValidationRule,\n ValidateOnEvent,\n FormConfig,\n} from '@kubuild/schema';\nimport { ComponentRegistry, ComponentDefinition } from '@kubuild/components';\nimport { icons as lucideIcons, Package, Puzzle, AlertTriangle } from 'lucide-react';\nimport { resolveBinding, sanitizeUrl, sanitizeHtml } from '@kubuild/core';\nimport {\n RenderContext,\n resolveAssetSync,\n isActionRegistered,\n Diagnostic,\n} from '../render-context';\nimport { FormRuntimeProvider } from '../form-context';\nimport {\n EditableText,\n HtmlEmbedView,\n FormContainerNode,\n FormInputNode,\n FormTextareaNode,\n FormSelectNode,\n FormCheckboxNode,\n FormRadioNode,\n FormSubmitButtonNode,\n toPascalCase,\n getYouTubeId,\n getVimeoId,\n aspectRatioToCss,\n} from '../nodes';\n\nexport interface RenderNodeContentOptions {\n node: Node;\n document: PageDocument;\n registry: ComponentRegistry;\n context: RenderContext;\n viewport: 'desktop' | 'tablet' | 'mobile';\n mode: 'editor' | 'runtime';\n styles: React.CSSProperties;\n props: Record<string, unknown>;\n resolvedProps: Record<string, unknown>;\n definition?: ComponentDefinition;\n domId: string;\n childrenElements?: React.ReactNode;\n handleClick: (e: React.MouseEvent) => void;\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 instanceSuffix?: string;\n renderChildNode: (child: Node, instanceSuffix?: string, itemContext?: RenderContext) => React.ReactElement;\n}\n\n/**\n * Renders custom component if registered in ComponentRegistry.\n */\nexport function renderCustomComponent(options: RenderNodeContentOptions): React.ReactElement | null {\n const { node, document, definition, resolvedProps, styles, context, childrenElements, handleClick } = options;\n\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 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\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 return null;\n}\n\n/**\n * Layout nodes: page, section, container, columns\n */\nexport function renderLayoutNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const { node, domId, styles, resolvedProps, props, handleClick, childrenElements } = options;\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 const ariaLabel =\n typeof resolvedProps.ariaLabel === 'string'\n ? resolvedProps.ariaLabel\n : typeof props.ariaLabel === 'string'\n ? props.ariaLabel\n : undefined;\n\n return (\n <section\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n aria-label={ariaLabel}\n >\n {childrenElements}\n </section>\n );\n }\n case 'container':\n return (\n <div id={domId} style={styles} onClick={handleClick} data-kubuild-node={node.id}>\n {childrenElements}\n </div>\n );\n case 'columns':\n return (\n <div id={domId} style={styles} onClick={handleClick} data-kubuild-node={node.id}>\n {childrenElements}\n </div>\n );\n default:\n return null;\n }\n}\n\n/**\n * Typography nodes: heading, text, paragraph, link, blockquote, badge, code-block\n */\nexport function renderTypographyNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const {\n node,\n domId,\n styles,\n resolvedProps,\n props,\n mode,\n handleClick,\n onNodePropChange,\n childrenElements,\n } = options;\n\n switch (node.type) {\n case 'heading': {\n const level = typeof resolvedProps.level === 'number' ? resolvedProps.level : 1;\n const Tag = (`h${Math.min(Math.max(level, 1), 6)}` as keyof React.JSX.IntrinsicElements) || 'h1';\n const text = String(resolvedProps.text ?? resolvedProps.content ?? props.text ?? props.content ?? '');\n const isEditable = mode === 'editor' && !isVariableBinding(props.text) && !isVariableBinding(props.content);\n\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 />\n );\n }\n case 'text': {\n const text = String(resolvedProps.text ?? resolvedProps.content ?? props.text ?? props.content ?? '');\n const asTag =\n typeof resolvedProps.as === 'string'\n ? resolvedProps.as\n : typeof props.as === 'string'\n ? props.as\n : typeof resolvedProps.tag === 'string'\n ? resolvedProps.tag\n : typeof props.tag === 'string'\n ? props.tag\n : (props.content !== undefined || resolvedProps.content !== undefined) && props.text === undefined && resolvedProps.text === undefined\n ? 'p'\n : 'span';\n const isEditable = mode === 'editor' && !isVariableBinding(props.text) && !isVariableBinding(props.content);\n\n return (\n <EditableText\n as={asTag}\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 />\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\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, 'text', val, isBlur)}\n />\n );\n }\n case 'link': {\n const text = String(resolvedProps.text ?? resolvedProps.label ?? resolvedProps.content ?? props.text ?? props.label ?? props.content ?? '');\n const href = typeof resolvedProps.href === 'string' ? resolvedProps.href : '#';\n const target = typeof resolvedProps.target === 'string' ? resolvedProps.target : undefined;\n const isEditable =\n mode === 'editor' &&\n !isVariableBinding(props.text) &&\n !isVariableBinding(props.label) &&\n !isVariableBinding(props.content);\n\n const computedRel =\n typeof resolvedProps.rel === 'string'\n ? resolvedProps.rel\n : target === '_blank'\n ? 'noopener noreferrer'\n : undefined;\n\n const safeHref = mode === 'editor' ? undefined : sanitizeUrl(href, '#');\n\n const handleLinkClick = (e: React.MouseEvent) => {\n if (mode === 'editor') {\n e.preventDefault();\n }\n handleClick(e);\n };\n\n if (isEditable) {\n return (\n <EditableText\n as=\"a\"\n id={domId}\n style={styles}\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onClick={handleLinkClick}\n onChange={(val, isBlur) => {\n const propKey = 'text' in props ? 'text' : 'label';\n onNodePropChange?.(node.id, propKey, val, isBlur);\n }}\n href={safeHref}\n target={target}\n rel={computedRel}\n />\n );\n }\n\n return (\n <a\n id={domId}\n style={styles}\n href={safeHref}\n target={target}\n rel={computedRel}\n onClick={handleLinkClick}\n data-kubuild-node={node.id}\n >\n {text}\n </a>\n );\n }\n case 'blockquote': {\n const quote =\n typeof resolvedProps.quote === 'string'\n ? resolvedProps.quote\n : typeof resolvedProps.text === 'string'\n ? resolvedProps.text\n : typeof props.quote === 'string'\n ? props.quote\n : typeof props.text === 'string'\n ? props.text\n : undefined;\n const cite = typeof resolvedProps.cite === 'string' ? resolvedProps.cite : (typeof props.cite === 'string' ? props.cite : undefined);\n const isEditable = mode === 'editor' && !isVariableBinding(props.quote) && !isVariableBinding(props.text);\n\n const defaultBlockquoteStyle: React.CSSProperties = {\n borderLeft: '4px solid #cbd5e1',\n paddingLeft: '1rem',\n margin: '1rem 0',\n fontStyle: 'italic',\n color: '#475569',\n ...styles,\n };\n\n return (\n <blockquote\n id={domId}\n style={defaultBlockquoteStyle}\n onClick={handleClick}\n data-kubuild-node={node.id}\n cite={cite}\n >\n {quote !== undefined ? (\n isEditable ? (\n <EditableText\n as=\"p\"\n value={quote}\n isEditable={isEditable}\n nodeId={node.id}\n onChange={(val, isBlur) => {\n const propKey = 'quote' in props ? 'quote' : 'text';\n onNodePropChange?.(node.id, propKey, val, isBlur);\n }}\n />\n ) : (\n <p>{quote}</p>\n )\n ) : null}\n {childrenElements}\n {cite && (\n <cite style={{ display: 'block', fontStyle: 'normal', fontSize: '0.875rem', marginTop: '0.5rem', color: '#64748b' }}>\n — {cite}\n </cite>\n )}\n </blockquote>\n );\n }\n case 'badge': {\n const text = String(resolvedProps.text ?? resolvedProps.label ?? props.text ?? props.label ?? '');\n const variant = typeof resolvedProps.variant === 'string' ? resolvedProps.variant : (typeof props.variant === 'string' ? props.variant : 'default');\n const isEditable = mode === 'editor' && !isVariableBinding(props.text) && !isVariableBinding(props.label);\n\n return (\n <span\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-variant={variant}\n data-badge-variant={variant}\n >\n {isEditable ? (\n <EditableText\n as=\"span\"\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onChange={(val, isBlur) => {\n const propKey = 'text' in props ? 'text' : 'label';\n onNodePropChange?.(node.id, propKey, val, isBlur);\n }}\n />\n ) : (\n text\n )}\n </span>\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 : 'plaintext');\n\n if (mode === 'editor') {\n return (\n <pre\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-language={language}\n >\n <code\n className={`language-${language}`}\n contentEditable={true}\n suppressContentEditableWarning={true}\n onBlur={(e) => onNodePropChange?.(node.id, 'code', e.currentTarget.textContent ?? '', true)}\n >\n {code}\n </code>\n </pre>\n );\n }\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 >\n <code className={`language-${language}`}>{code}</code>\n </pre>\n );\n }\n default:\n return null;\n }\n}\n\n/**\n * List nodes: list, list-item\n */\nexport function renderListNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const { node, domId, styles, resolvedProps, props, mode, handleClick, onNodePropChange, childrenElements } = options;\n\n switch (node.type) {\n case 'list': {\n const tag = resolvedProps.tag || props.tag;\n const Tag = tag === 'ol' || resolvedProps.ordered === true || props.ordered === true ? 'ol' : 'ul';\n const listStyle =\n typeof resolvedProps.listStyleType === 'string'\n ? resolvedProps.listStyleType\n : typeof resolvedProps.listStyle === 'string'\n ? resolvedProps.listStyle\n : typeof props.listStyleType === 'string'\n ? (props.listStyleType as string)\n : typeof props.listStyle === 'string'\n ? (props.listStyle as string)\n : undefined;\n const listStyleType = listStyle === 'custom-icon' || listStyle === 'none' ? 'none' : listStyle;\n\n const combinedStyles: React.CSSProperties = {\n ...styles,\n ...(listStyleType ? { listStyleType } : {}),\n };\n\n return (\n <Tag\n id={domId}\n style={combinedStyles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-list-style={listStyle}\n >\n {childrenElements}\n </Tag>\n );\n }\n case 'list-item': {\n const text =\n resolvedProps.text !== undefined\n ? String(resolvedProps.text)\n : props.text !== undefined\n ? String(props.text)\n : undefined;\n const isEditable = mode === 'editor' && !isVariableBinding(props.text) && text !== undefined;\n\n return (\n <li\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n {text !== undefined && (\n isEditable ? (\n <EditableText\n as=\"span\"\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n />\n ) : (\n text\n )\n )}\n {childrenElements}\n </li>\n );\n }\n default:\n return null;\n }\n}\n\n/**\n * Table nodes: table, table-row, table-cell\n */\nexport function renderTableNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const { node, domId, styles, resolvedProps, props, mode, handleClick, onNodePropChange, childrenElements } = options;\n\n switch (node.type) {\n case 'table': {\n const cellPadding = typeof resolvedProps.cellPadding === 'number' ? resolvedProps.cellPadding : undefined;\n const cellSpacing = typeof resolvedProps.cellSpacing === 'number' ? resolvedProps.cellSpacing : undefined;\n const border = typeof resolvedProps.border === 'number' ? resolvedProps.border : undefined;\n const striped = resolvedProps.striped === true || props.striped === true;\n const bordered = resolvedProps.bordered === true || props.bordered === true;\n const hover = resolvedProps.hover === true || props.hover === true;\n const compact = resolvedProps.compact === true || props.compact === true;\n\n return (\n <table\n id={domId}\n style={styles}\n cellPadding={cellPadding}\n cellSpacing={cellSpacing}\n border={border}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-striped={striped ? 'true' : undefined}\n data-bordered={bordered ? 'true' : undefined}\n data-hover={hover ? 'true' : undefined}\n data-compact={compact ? 'true' : 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 >\n {childrenElements}\n </tr>\n );\n }\n case 'table-cell': {\n const isHeader =\n resolvedProps.tag === 'th' ||\n props.tag === 'th' ||\n resolvedProps.isHeader === true ||\n props.isHeader === true ||\n resolvedProps.cellType === 'header' ||\n props.cellType === 'header' ||\n resolvedProps.type === 'th' ||\n props.type === 'th';\n const Tag = isHeader ? 'th' : 'td';\n const colSpan =\n typeof resolvedProps.colSpan === 'number'\n ? resolvedProps.colSpan\n : typeof props.colSpan === 'number'\n ? (props.colSpan as number)\n : undefined;\n const rowSpan =\n typeof resolvedProps.rowSpan === 'number'\n ? resolvedProps.rowSpan\n : typeof props.rowSpan === 'number'\n ? (props.rowSpan as number)\n : undefined;\n const text =\n resolvedProps.text !== undefined\n ? String(resolvedProps.text)\n : props.text !== undefined\n ? String(props.text)\n : undefined;\n const isEditable = mode === 'editor' && !isVariableBinding(props.text) && text !== undefined;\n\n return (\n <Tag\n id={domId}\n colSpan={colSpan}\n rowSpan={rowSpan}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n {text !== undefined && (\n isEditable ? (\n <EditableText\n as=\"span\"\n value={text}\n isEditable={isEditable}\n nodeId={node.id}\n onChange={(val, isBlur) => onNodePropChange?.(node.id, 'text', val, isBlur)}\n />\n ) : (\n text\n )\n )}\n {childrenElements}\n </Tag>\n );\n }\n default:\n return null;\n }\n}\n\n/**\n * Media nodes: image, video, icon, html-embed\n */\nexport function renderMediaNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const { node, domId, styles, resolvedProps, props, context, mode, handleClick } = options;\n\n switch (node.type) {\n case 'image': {\n const rawSrc =\n resolvedProps.src !== undefined\n ? resolvedProps.src\n : props.src !== undefined\n ? props.src\n : props.asset;\n let src: string | undefined;\n\n if (isAssetReference(rawSrc)) {\n src = resolveAssetSync(context?.assetProvider, rawSrc.assetId) || rawSrc.fallbackUrl;\n } else if (typeof rawSrc === 'string') {\n src = resolveAssetSync(context?.assetProvider, rawSrc) || rawSrc;\n }\n\n const alt = typeof resolvedProps.alt === 'string' ? resolvedProps.alt : (typeof props.alt === 'string' ? props.alt : '');\n const fit = typeof resolvedProps.fit === 'string' ? (resolvedProps.fit as React.CSSProperties['objectFit']) : undefined;\n const loading = resolvedProps.loading === 'eager' ? 'eager' : 'lazy';\n const width = typeof resolvedProps.width === 'number' ? resolvedProps.width : undefined;\n const height = typeof resolvedProps.height === 'number' ? resolvedProps.height : undefined;\n const safeSrc = src ? sanitizeUrl(src, '') : undefined;\n\n const imgStyles: React.CSSProperties = {\n ...styles,\n ...(fit ? { objectFit: fit } : {}),\n };\n\n const role = alt === '' ? 'presentation' : undefined;\n\n return (\n <img\n id={domId}\n src={safeSrc}\n alt={alt}\n role={role}\n loading={loading}\n width={width}\n height={height}\n style={imgStyles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n />\n );\n }\n case 'video': {\n const rawUrl = resolvedProps.src ?? resolvedProps.url ?? props.src ?? props.url;\n const url = typeof rawUrl === 'string' ? rawUrl : undefined;\n const poster = typeof resolvedProps.poster === 'string' ? resolvedProps.poster : undefined;\n const controls = resolvedProps.controls !== false;\n const autoplay = resolvedProps.autoplay === true;\n const loop = resolvedProps.loop === true;\n const muted = resolvedProps.muted === true;\n const playsInline = resolvedProps.playsInline !== false;\n const aspectRatio = resolvedProps.aspectRatio;\n\n const videoWrapperStyle: React.CSSProperties = {\n position: 'relative',\n width: styles.width || '100%',\n ...(aspectRatio ? { aspectRatio: aspectRatioToCss(aspectRatio) } : {}),\n ...styles,\n };\n\n const youtubeId = url ? getYouTubeId(url) : null;\n const vimeoId = url ? getVimeoId(url) : null;\n\n if (youtubeId) {\n const embedUrl = `https://www.youtube.com/embed/${youtubeId}?autoplay=${autoplay ? 1 : 0}&loop=${loop ? 1 : 0}&mute=${muted ? 1 : 0}&controls=${controls ? 1 : 0}`;\n const safeEmbedUrl = sanitizeUrl(embedUrl, '');\n\n return (\n <div\n id={domId}\n data-video-provider=\"youtube\"\n style={videoWrapperStyle}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <iframe\n src={safeEmbedUrl}\n title=\"YouTube video player\"\n style={{ width: '100%', height: '100%', border: 0 }}\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 embedUrl = `https://player.vimeo.com/video/${vimeoId}?autoplay=${autoplay ? 1 : 0}&loop=${loop ? 1 : 0}&muted=${muted ? 1 : 0}`;\n const safeEmbedUrl = sanitizeUrl(embedUrl, '');\n\n return (\n <div\n id={domId}\n data-video-provider=\"vimeo\"\n style={videoWrapperStyle}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <iframe\n src={safeEmbedUrl}\n title=\"Vimeo video player\"\n style={{ width: '100%', height: '100%', border: 0 }}\n allow=\"autoplay; fullscreen; picture-in-picture\"\n allowFullScreen\n />\n </div>\n );\n }\n\n const safeVideoUrl = url ? sanitizeUrl(url, '') : undefined;\n const safePoster = poster ? sanitizeUrl(poster, '') : undefined;\n\n return (\n <video\n id={domId}\n src={safeVideoUrl}\n poster={safePoster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n playsInline={playsInline}\n style={videoWrapperStyle}\n onClick={handleClick}\n data-kubuild-node={node.id}\n />\n );\n }\n case 'icon': {\n const name = typeof resolvedProps.name === 'string' ? resolvedProps.name : 'Square';\n const size = typeof resolvedProps.size === 'number' ? resolvedProps.size : 24;\n const color = typeof resolvedProps.color === 'string' ? resolvedProps.color : 'currentColor';\n const strokeWidth = typeof resolvedProps.strokeWidth === 'number' ? resolvedProps.strokeWidth : 2;\n\n const pascalName = toPascalCase(name);\n // @ts-expect-error Lucide icons indexed access\n const IconComponent = lucideIcons[pascalName] || lucideIcons[name] || Package;\n\n return (\n <span\n id={domId}\n data-icon-name={name}\n style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', ...styles }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <IconComponent size={size} color={color} strokeWidth={strokeWidth} />\n </span>\n );\n }\n case 'html-embed': {\n const rawHtml = typeof resolvedProps.html === 'string' ? resolvedProps.html : '';\n const isSanitized = resolvedProps.sanitize !== false;\n const finalHtml = isSanitized ? sanitizeHtml(rawHtml) : rawHtml;\n\n if (!finalHtml.trim() && mode === 'editor') {\n return (\n <div\n id={domId}\n style={{\n ...styles,\n minHeight: '60px',\n border: '1px dashed #94a3b8',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f8fafc',\n color: '#64748b',\n fontSize: '0.875rem',\n }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n >\n <span></> HTML Embed — Click to configure HTML code in Inspector Panel</span>\n </div>\n );\n }\n\n return (\n <HtmlEmbedView\n id={domId}\n style={styles}\n html={finalHtml}\n onClick={handleClick}\n dataKubuildNode={node.id}\n />\n );\n }\n default:\n return null;\n }\n}\n\n/**\n * Form nodes: button, form, input, textarea, select, checkbox, radio\n */\nexport function renderFormNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const {\n node,\n domId,\n styles,\n resolvedProps,\n props,\n context,\n mode,\n document,\n onDiagnostic,\n handleClick,\n onNodePropChange,\n childrenElements,\n } = options;\n\n switch (node.type) {\n case 'button': {\n const label = String(resolvedProps.label ?? resolvedProps.text ?? resolvedProps.content ?? props.label ?? props.text ?? props.content ?? 'Button');\n const href = typeof resolvedProps.href === 'string' ? resolvedProps.href : (typeof props.href === 'string' ? props.href : undefined);\n const target = typeof resolvedProps.target === 'string' ? resolvedProps.target : (typeof props.target === 'string' ? props.target : undefined);\n const rawButtonType = resolvedProps.buttonType ?? resolvedProps.type ?? props.buttonType ?? props.type;\n const buttonType =\n typeof rawButtonType === 'string' &&\n ['submit', 'reset', 'button'].includes(rawButtonType)\n ? (rawButtonType as 'submit' | 'reset' | 'button')\n : 'button';\n const disabled = resolvedProps.disabled === true || props.disabled === true;\n const ariaLabel = typeof resolvedProps.ariaLabel === 'string' ? resolvedProps.ariaLabel : undefined;\n const isEditable = mode === 'editor' && !isVariableBinding(props.label) && !isVariableBinding(props.text);\n\n const computedRel =\n typeof resolvedProps.rel === 'string'\n ? resolvedProps.rel\n : typeof props.rel === 'string'\n ? (props.rel as string)\n : target === '_blank'\n ? 'noopener noreferrer'\n : undefined;\n\n const actionAttrs: Record<string, unknown> = {};\n if (props.action && !disabled) {\n const actionType = typeof props.action === 'object' ? (props.action as any).type : props.action;\n actionAttrs['data-kubuild-action'] = actionType;\n if (context?.actionRegistry) {\n const isResolved = isActionRegistered(context.actionRegistry, actionType);\n actionAttrs['data-kubuild-action-resolved'] = isResolved ? 'true' : 'false';\n }\n }\n\n if (href && !disabled) {\n const safeHref = mode === 'editor' ? undefined : sanitizeUrl(href, '#');\n return (\n <a\n id={domId}\n href={safeHref}\n target={target}\n rel={computedRel}\n tabIndex={0}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n aria-label={ariaLabel}\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 <FormSubmitButtonNode\n id={domId}\n buttonType={mode === 'editor' ? 'button' : buttonType}\n disabled={disabled}\n ariaLabel={ariaLabel}\n style={styles}\n onClick={disabled ? undefined : handleClick}\n dataKubuildNode={node.id}\n actionAttrs={actionAttrs}\n >\n {label}\n </FormSubmitButtonNode>\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 const nodeFormConfig = node.formConfig;\n const formConfig: FormConfig = {\n formId: nodeFormConfig?.formId || (props.formId as string) || name || node.id,\n resetOnSubmit: resolvedProps.resetOnSubmit === true || (nodeFormConfig?.resetOnSubmit ?? false),\n scrollToFirstError: resolvedProps.scrollToFirstError !== false && (nodeFormConfig?.scrollToFirstError ?? true),\n validateOn: (resolvedProps.validateOn as ValidateOnEvent) || nodeFormConfig?.validateOn || 'blur',\n initialValues: (resolvedProps.initialValues as Record<string, unknown>) || nodeFormConfig?.initialValues,\n };\n\n return (\n <FormRuntimeProvider\n formId={formConfig.formId}\n formConfig={formConfig}\n initialValues={formConfig.initialValues}\n actions={node.actions}\n nodeId={node.id}\n document={document}\n onDiagnostic={onDiagnostic}\n >\n <FormContainerNode\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 mode={mode}\n dataKubuildNode={node.id}\n >\n {childrenElements}\n </FormContainerNode>\n </FormRuntimeProvider>\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 ? resolvedProps.defaultValue : undefined;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n const readOnly = resolvedProps.readOnly === true;\n const rules = (resolvedProps.rules as ValidationRule[]) || (props.rules as ValidationRule[]) || [];\n const validateOn = (resolvedProps.validateOn as ValidateOnEvent) || (props.validateOn as ValidateOnEvent);\n const transform = (resolvedProps.transform as 'trim' | 'lowercase' | 'uppercase' | 'number') || (props.transform as 'trim' | 'lowercase' | 'uppercase' | 'number');\n\n return (\n <FormInputNode\n id={domId}\n name={name}\n type={inputType}\n placeholder={placeholder}\n defaultValue={defaultValue}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n rules={rules}\n validateOn={validateOn}\n transform={transform}\n style={styles}\n onClick={handleClick}\n dataKubuildNode={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 ? 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 const rules = (resolvedProps.rules as ValidationRule[]) || (props.rules as ValidationRule[]) || [];\n const validateOn = (resolvedProps.validateOn as ValidateOnEvent) || (props.validateOn as ValidateOnEvent);\n const transform = (resolvedProps.transform as 'trim' | 'lowercase' | 'uppercase' | 'number') || (props.transform as 'trim' | 'lowercase' | 'uppercase' | 'number');\n\n return (\n <FormTextareaNode\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 rules={rules}\n validateOn={validateOn}\n transform={transform}\n style={styles}\n onClick={handleClick}\n dataKubuildNode={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 ? resolvedProps.defaultValue : undefined;\n const required = resolvedProps.required === true;\n const disabled = resolvedProps.disabled === true;\n const rules = (resolvedProps.rules as ValidationRule[]) || (props.rules as ValidationRule[]) || [];\n const validateOn = (resolvedProps.validateOn as ValidateOnEvent) || (props.validateOn as ValidateOnEvent);\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 <FormSelectNode\n id={domId}\n name={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n required={required}\n disabled={disabled}\n rules={rules}\n validateOn={validateOn}\n optionsList={optionsList}\n style={styles}\n onClick={handleClick}\n dataKubuildNode={node.id}\n />\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 rules = (resolvedProps.rules as ValidationRule[]) || (props.rules as ValidationRule[]) || [];\n const validateOn = (resolvedProps.validateOn as ValidateOnEvent) || (props.validateOn as ValidateOnEvent);\n const isEditable = mode === 'editor' && !isVariableBinding(props.label);\n\n return (\n <FormCheckboxNode\n id={domId}\n name={name}\n label={label}\n value={value}\n defaultChecked={defaultChecked}\n required={required}\n disabled={disabled}\n rules={rules}\n validateOn={validateOn}\n style={styles}\n onClick={handleClick}\n dataKubuildNode={node.id}\n isEditable={isEditable}\n onNodePropChange={onNodePropChange}\n />\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 rules = (resolvedProps.rules as ValidationRule[]) || (props.rules as ValidationRule[]) || [];\n const validateOn = (resolvedProps.validateOn as ValidateOnEvent) || (props.validateOn as ValidateOnEvent);\n const isEditable = mode === 'editor' && !isVariableBinding(props.label);\n\n return (\n <FormRadioNode\n id={domId}\n name={name}\n label={label}\n value={value}\n defaultChecked={defaultChecked}\n required={required}\n disabled={disabled}\n rules={rules}\n validateOn={validateOn}\n style={styles}\n onClick={handleClick}\n dataKubuildNode={node.id}\n isEditable={isEditable}\n onNodePropChange={onNodePropChange}\n />\n );\n }\n default:\n return null;\n }\n}\n\n/**\n * Collection node: collection\n */\nexport function renderCollectionNode(options: RenderNodeContentOptions): React.ReactElement | null {\n const { node, domId, styles, props, context, mode, handleClick, onDiagnostic, renderChildNode } = options;\n\n if (node.type !== 'collection') return null;\n\n const sourceKey = typeof props.sourceKey === 'string' ? props.sourceKey : undefined;\n const itemAlias = 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 padding: '12px',\n color: '#b45309',\n fontSize: '0.875rem',\n borderRadius: '4px',\n }}\n onClick={handleClick}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '8px' }}>\n <AlertTriangle size={16} />\n <strong>Collection: expected an array</strong>\n </div>\n <div>\n Source path <code>{sourceKey ?? '(none)'}</code> did not resolve to an array. Found{' '}\n <code>{sourceValue === undefined ? 'nothing' : typeof sourceValue}</code>.\n </div>\n </div>\n );\n }\n\n return (\n <div\n id={domId}\n data-kubuild-node={node.id}\n style={{ display: 'contents' }}\n data-kubuild-empty-collection=\"invalid-source\"\n />\n );\n }\n\n const templateChildren = node.children || [];\n if (templateChildren.length === 0 || sourceValue.length === 0) {\n return (\n <div\n id={domId}\n style={styles}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-kubuild-collection-empty={sourceValue.length === 0 ? 'true' : undefined}\n >\n {sourceValue.length === 0 && mode === 'editor' && (\n <div\n style={{\n padding: '12px',\n border: '1px dashed #cbd5e1',\n borderRadius: '4px',\n color: '#94a3b8',\n fontSize: '0.875rem',\n textAlign: 'center',\n }}\n >\n Empty Collection (<code>{sourceKey}</code> has 0 items)\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div id={domId} style={styles} onClick={handleClick} data-kubuild-node={node.id}>\n {sourceValue.map((item, index) => {\n const itemContext: RenderContext = {\n ...context,\n variables: {\n ...context.variables,\n [itemAlias]: item,\n [indexKey]: index,\n },\n };\n\n const iterationSuffix = `__iter_${index}`;\n\n return (\n <React.Fragment key={`collection-item-${index}`}>\n {templateChildren.map((templateChild) =>\n renderChildNode(templateChild, iterationSuffix, itemContext)\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n\n/**\n * Fallback node for unregistered / unknown types.\n */\nexport function renderFallbackNode(options: RenderNodeContentOptions): React.ReactElement {\n const { node, domId, styles, handleClick, mode, childrenElements } = options;\n\n if (mode === 'editor') {\n return (\n <div\n id={domId}\n style={{\n ...styles,\n border: '2px dashed #e2e8f0',\n padding: '16px',\n backgroundColor: '#f8fafc',\n }}\n onClick={handleClick}\n data-kubuild-node={node.id}\n data-kubuild-unknown={node.type}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', color: '#64748b' }}>\n <Puzzle size={16} />\n <span>Unknown Component: {node.type}</span>\n <span style={{ fontSize: '12px', color: '#94a3b8' }}>({node.id})</span>\n </div>\n {childrenElements}\n </div>\n );\n }\n\n return (\n <div id={domId} style={styles} onClick={handleClick} data-kubuild-node={node.id} data-kubuild-unknown={node.type}>\n {childrenElements}\n </div>\n );\n}\n\n/**\n * Master dispatcher function for rendering node content based on node type.\n */\nexport function renderNodeContent(options: RenderNodeContentOptions): React.ReactElement {\n // 1. Custom component registered via ComponentRegistry\n const custom = renderCustomComponent(options);\n if (custom) return custom;\n\n // 2. Layout nodes\n const layout = renderLayoutNode(options);\n if (layout) return layout;\n\n // 3. Typography nodes\n const typography = renderTypographyNode(options);\n if (typography) return typography;\n\n // 4. List nodes\n const list = renderListNode(options);\n if (list) return list;\n\n // 5. Table nodes\n const table = renderTableNode(options);\n if (table) return table;\n\n // 6. Media nodes\n const media = renderMediaNode(options);\n if (media) return media;\n\n // 7. Form nodes\n const form = renderFormNode(options);\n if (form) return form;\n\n // 8. Collection node\n const collection = renderCollectionNode(options);\n if (collection) return collection;\n\n // 9. Fallback for unknown / custom elements without custom renderers\n return renderFallbackNode(options);\n}\n","import React from 'react';\nimport {\n PageDocument,\n Node,\n isActionBinding,\n} from '@kubuild/schema';\nimport { ComponentRegistry, createDefaultComponentRegistry } from '@kubuild/components';\nimport {\n RenderContext,\n DEFAULT_RENDER_CONTEXT,\n RenderContextProvider,\n resolveActionPayload,\n dispatchAction,\n Diagnostic,\n} from './render-context';\nimport { AlertTriangle } from 'lucide-react';\nimport { resolveNodeStyles, collectStateStylesCss } from './styles';\nimport { collectAnimationStylesCss } from './animation';\nimport { ComponentErrorBoundary } from './error-boundary';\nimport { resolvePropsForNode } from './prop-resolution';\nimport { renderNodeContent } from './renderers';\nimport { ToastContainer } from './action-runners/toast-container';\n\n// Re-export all nodes and media utilities for backward compatibility\nexport * from './nodes';\nexport * from './renderers';\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 showToastContainer?: boolean;\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\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 renderChildNode = (\n child: Node,\n childInstanceSuffix: string = '',\n itemContext: RenderContext = context,\n ) => (\n <NodeRenderer\n key={`${child.id}${instanceSuffix}${childInstanceSuffix}`}\n node={child}\n document={document}\n registry={registry}\n context={itemContext}\n viewport={viewport}\n mode={mode}\n onNodeClick={onNodeClick}\n onDiagnostic={onDiagnostic}\n onActionDispatch={onActionDispatch}\n onNodePropChange={onNodePropChange}\n instanceSuffix={`${instanceSuffix}${childInstanceSuffix}`}\n />\n );\n\n let content: React.ReactElement;\n try {\n content = renderNodeContent({\n node,\n document,\n registry,\n context,\n viewport,\n mode,\n styles,\n props,\n resolvedProps,\n definition,\n domId,\n childrenElements,\n handleClick,\n onNodeClick,\n onDiagnostic,\n onActionDispatch,\n onNodePropChange,\n instanceSuffix,\n renderChildNode,\n });\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', display: 'flex', alignItems: 'center', gap: '6px' }}>\n <AlertTriangle size={14} aria-hidden=\"true\" />\n <span>Component Render Error: <{node.type}></span>\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 showToastContainer = true,\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 {/* Compiled animation & hover micro-interactions CSS — STORA-264 */}\n {(() => {\n const animCss = collectAnimationStylesCss(document);\n return animCss ? <style data-kubuild-animation-styles>{animCss}</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 {showToastContainer && <ToastContainer />}\n </div>\n </RenderContextProvider>\n );\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","import { PageDocument, Node } from '@kubuild/schema';\nimport { DEFAULT_CSS_RESET, styleDefinitionToCssDeclarations } from './styles';\nimport { collectAnimationStylesCss } from './animation';\n\nexport interface GenerateHtmlOptions {\n /**\n * Whether to include internal node ID classes (`kb-node-{id}`).\n * Defaults to true so generated CSS matches HTML elements.\n */\n includeNodeClasses?: boolean;\n /**\n * Indentation width in spaces. Defaults to 2.\n */\n indentSize?: number;\n /**\n * Root tag for the page container ('main' | 'div'). Defaults to 'main'.\n */\n rootTag?: 'main' | 'div';\n}\n\nexport interface GenerateCssOptions {\n /**\n * Whether to include the baseline CSS reset. Defaults to true.\n */\n includeReset?: boolean;\n /**\n * Custom CSS class prefix for node selectors. Defaults to 'kb-node-'.\n */\n classPrefix?: string;\n}\n\nexport interface StandaloneHtmlOptions {\n htmlOptions?: GenerateHtmlOptions;\n cssOptions?: GenerateCssOptions;\n /** Custom language attribute for <html>. Defaults to 'en'. */\n lang?: string;\n}\n\nfunction escapeHtml(str: unknown): string {\n if (str === null || str === undefined) return '';\n return String(str)\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction escapeAttr(str: unknown): string {\n return escapeHtml(str);\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\n/**\n * Recursively generates clean, indented semantic HTML markup for a node tree.\n */\nfunction renderNodeToHtml(node: Node, indentLevel: number, options: GenerateHtmlOptions): string {\n const indent = ' '.repeat(indentLevel * (options.indentSize ?? 2));\n const innerIndent = ' '.repeat((indentLevel + 1) * (options.indentSize ?? 2));\n const props = node.props || {};\n const children = node.children || [];\n const includeNodeClass = options.includeNodeClasses !== false;\n const nodeClass = includeNodeClass ? `kb-node-${node.id}` : '';\n\n const buildClass = (...classes: (string | undefined | false)[]) => {\n return classes.filter(Boolean).join(' ');\n };\n\n const idAttr = props.id ? ` id=\"${escapeAttr(props.id)}\"` : '';\n\n switch (node.type) {\n case 'page': {\n const tag = options.rootTag || 'main';\n const cls = buildClass('kb-page', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<${tag} class=\"${cls}\"${idAttr}></${tag}>`;\n }\n return `${indent}<${tag} class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</${tag}>`;\n }\n\n case 'section': {\n const ariaLabel = props.ariaLabel ? ` aria-label=\"${escapeAttr(props.ariaLabel)}\"` : '';\n const cls = buildClass('kb-section', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<section class=\"${cls}\"${idAttr}${ariaLabel}></section>`;\n }\n return `${indent}<section class=\"${cls}\"${idAttr}${ariaLabel}>\\n${childHtml}\\n${indent}</section>`;\n }\n\n case 'container': {\n const cls = buildClass('kb-container', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<div class=\"${cls}\"${idAttr}></div>`;\n }\n return `${indent}<div class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</div>`;\n }\n\n case 'columns': {\n const cls = buildClass('kb-columns', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<div class=\"${cls}\"${idAttr}></div>`;\n }\n return `${indent}<div class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</div>`;\n }\n\n case 'heading': {\n let level = 'h2';\n if (typeof props.level === 'string' && /^h[1-6]$/i.test(props.level)) {\n level = props.level.toLowerCase();\n } else if (typeof props.level === 'number' && props.level >= 1 && props.level <= 6) {\n level = `h${props.level}`;\n } else if (typeof props.tag === 'string' && /^h[1-6]$/i.test(props.tag)) {\n level = props.tag.toLowerCase();\n }\n const text = props.text ?? props.value ?? props.content ?? 'Heading';\n const cls = buildClass('kb-heading', nodeClass);\n return `${indent}<${level} class=\"${cls}\"${idAttr}>${escapeHtml(text)}</${level}>`;\n }\n\n case 'paragraph': {\n const text = props.text ?? props.value ?? props.content ?? '';\n const cls = buildClass('kb-paragraph', nodeClass);\n return `${indent}<p class=\"${cls}\"${idAttr}>${escapeHtml(text)}</p>`;\n }\n\n case 'text': {\n const tag = (props.as as string) || 'p';\n const text = props.text ?? props.value ?? props.content ?? '';\n const cls = buildClass('kb-text', nodeClass);\n return `${indent}<${tag} class=\"${cls}\"${idAttr}>${escapeHtml(text)}</${tag}>`;\n }\n\n case 'link': {\n const href = props.href ? ` href=\"${escapeAttr(props.href)}\"` : ' href=\"#\"';\n const target = props.target ? ` target=\"${escapeAttr(props.target)}\"` : '';\n const rel = props.rel ? ` rel=\"${escapeAttr(props.rel)}\"` : target.includes('_blank') ? ' rel=\"noopener noreferrer\"' : '';\n const text = props.text ?? props.label ?? props.value;\n const cls = buildClass('kb-link', nodeClass);\n\n if (children.length > 0) {\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n return `${indent}<a class=\"${cls}\"${idAttr}${href}${target}${rel}>\\n${childHtml}\\n${indent}</a>`;\n }\n return `${indent}<a class=\"${cls}\"${idAttr}${href}${target}${rel}>${escapeHtml(text ?? 'Link')}</a>`;\n }\n\n case 'blockquote': {\n const cite = props.cite ? ` cite=\"${escapeAttr(props.cite)}\"` : '';\n const quote = props.quote ?? props.text ?? props.value;\n const author = props.author ?? props.citeAuthor;\n const cls = buildClass('kb-blockquote', nodeClass);\n\n if (quote || author) {\n const quoteHtml = quote ? `${innerIndent}<p>${escapeHtml(quote)}</p>` : '';\n const authorHtml = author ? `${innerIndent}<cite>${escapeHtml(author)}</cite>` : '';\n const parts = [quoteHtml, authorHtml].filter(Boolean).join('\\n');\n return `${indent}<blockquote class=\"${cls}\"${idAttr}${cite}>\\n${parts}\\n${indent}</blockquote>`;\n }\n\n if (children.length > 0) {\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n return `${indent}<blockquote class=\"${cls}\"${idAttr}${cite}>\\n${childHtml}\\n${indent}</blockquote>`;\n }\n return `${indent}<blockquote class=\"${cls}\"${idAttr}${cite}></blockquote>`;\n }\n\n case 'badge': {\n const text = props.text ?? props.label ?? props.value ?? 'Badge';\n const cls = buildClass('kb-badge', nodeClass);\n return `${indent}<span class=\"${cls}\"${idAttr}>${escapeHtml(text)}</span>`;\n }\n\n case 'code-block': {\n const code = props.code ?? props.text ?? props.value ?? '';\n const lang = props.language || props.lang;\n const langClass = lang ? ` class=\"language-${escapeAttr(lang)}\"` : '';\n const cls = buildClass('kb-code-block', nodeClass);\n return `${indent}<pre class=\"${cls}\"${idAttr}><code${langClass}>${escapeHtml(code)}</code></pre>`;\n }\n\n case 'divider': {\n const cls = buildClass('kb-divider', nodeClass);\n const text = props.text ?? props.label;\n if (text) {\n return `${indent}<div class=\"${cls}\"${idAttr} role=\"separator\"><span>${escapeHtml(text)}</span></div>`;\n }\n return `${indent}<hr class=\"${cls}\"${idAttr} />`;\n }\n\n case 'spacer': {\n const cls = buildClass('kb-spacer', nodeClass);\n return `${indent}<div class=\"${cls}\"${idAttr} aria-hidden=\"true\"></div>`;\n }\n\n case 'image': {\n const src = props.src ? ` src=\"${escapeAttr(props.src)}\"` : ' src=\"\"';\n const alt = props.alt ? ` alt=\"${escapeAttr(props.alt)}\"` : ' alt=\"\"';\n const loading = props.loading ? ` loading=\"${escapeAttr(props.loading)}\"` : ' loading=\"lazy\"';\n const cls = buildClass('kb-image', nodeClass);\n return `${indent}<img class=\"${cls}\"${idAttr}${src}${alt}${loading} />`;\n }\n\n case 'video': {\n const src = (props.src as string) || '';\n const ytId = getYouTubeId(src);\n const vmId = getVimeoId(src);\n const cls = buildClass('kb-video', nodeClass);\n\n if (ytId) {\n return `${indent}<div class=\"kb-video-wrapper ${nodeClass}\"${idAttr}>\\n${innerIndent}<iframe src=\"https://www.youtube-nocookie.com/embed/${escapeAttr(ytId)}\" title=\"${escapeAttr(props.title || 'Video player')}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\\n${indent}</div>`;\n }\n if (vmId) {\n return `${indent}<div class=\"kb-video-wrapper ${nodeClass}\"${idAttr}>\\n${innerIndent}<iframe src=\"https://player.vimeo.com/video/${escapeAttr(vmId)}\" title=\"${escapeAttr(props.title || 'Video player')}\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen></iframe>\\n${indent}</div>`;\n }\n\n const poster = props.poster ? ` poster=\"${escapeAttr(props.poster)}\"` : '';\n const controls = props.controls !== false ? ' controls' : '';\n const autoplay = props.autoplay ? ' autoplay' : '';\n const loop = props.loop ? ' loop' : '';\n const muted = props.muted ? ' muted' : '';\n const videoSrc = src ? ` src=\"${escapeAttr(src)}\"` : '';\n return `${indent}<video class=\"${cls}\"${idAttr}${videoSrc}${poster}${controls}${autoplay}${loop}${muted}></video>`;\n }\n\n case 'icon': {\n const name = props.name || props.icon || 'star';\n const ariaLabel = props.ariaLabel ? ` aria-label=\"${escapeAttr(props.ariaLabel)}\"` : ' aria-hidden=\"true\"';\n const cls = buildClass('kb-icon', nodeClass);\n return `${indent}<span class=\"${cls}\"${idAttr}${ariaLabel} data-icon=\"${escapeAttr(name)}\"></span>`;\n }\n\n case 'html-embed': {\n const rawHtml = (props.html ?? props.content ?? '') as string;\n const cls = buildClass('kb-html-embed', nodeClass);\n if (!rawHtml) {\n return `${indent}<div class=\"${cls}\"${idAttr}></div>`;\n }\n return `${indent}<div class=\"${cls}\"${idAttr}>\\n${innerIndent}${rawHtml}\\n${indent}</div>`;\n }\n\n case 'button': {\n const label = props.label ?? props.text ?? props.value ?? 'Button';\n const type = props.type ? ` type=\"${escapeAttr(props.type)}\"` : ' type=\"button\"';\n const disabled = props.disabled ? ' disabled' : '';\n const cls = buildClass('kb-button', nodeClass);\n\n if (props.href) {\n const href = ` href=\"${escapeAttr(props.href)}\"`;\n const target = props.target ? ` target=\"${escapeAttr(props.target)}\"` : '';\n return `${indent}<a class=\"${cls}\"${idAttr}${href}${target}>${escapeHtml(label)}</a>`;\n }\n\n return `${indent}<button class=\"${cls}\"${idAttr}${type}${disabled}>${escapeHtml(label)}</button>`;\n }\n\n case 'form': {\n const action = props.action ? ` action=\"${escapeAttr(props.action)}\"` : '';\n const method = props.method ? ` method=\"${escapeAttr(props.method)}\"` : ' method=\"POST\"';\n const cls = buildClass('kb-form', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<form class=\"${cls}\"${idAttr}${action}${method}></form>`;\n }\n return `${indent}<form class=\"${cls}\"${idAttr}${action}${method}>\\n${childHtml}\\n${indent}</form>`;\n }\n\n case 'input': {\n const type = props.type ? ` type=\"${escapeAttr(props.type)}\"` : ' type=\"text\"';\n const name = props.name ? ` name=\"${escapeAttr(props.name)}\"` : '';\n const placeholder = props.placeholder ? ` placeholder=\"${escapeAttr(props.placeholder)}\"` : '';\n const value = props.value !== undefined ? ` value=\"${escapeAttr(props.value)}\"` : '';\n const required = props.required ? ' required' : '';\n const disabled = props.disabled ? ' disabled' : '';\n const cls = buildClass('kb-input', nodeClass);\n return `${indent}<input class=\"${cls}\"${idAttr}${type}${name}${placeholder}${value}${required}${disabled} />`;\n }\n\n case 'textarea': {\n const name = props.name ? ` name=\"${escapeAttr(props.name)}\"` : '';\n const placeholder = props.placeholder ? ` placeholder=\"${escapeAttr(props.placeholder)}\"` : '';\n const rows = props.rows ? ` rows=\"${escapeAttr(props.rows)}\"` : ' rows=\"4\"';\n const value = props.value ?? props.defaultValue ?? '';\n const required = props.required ? ' required' : '';\n const disabled = props.disabled ? ' disabled' : '';\n const cls = buildClass('kb-textarea', nodeClass);\n return `${indent}<textarea class=\"${cls}\"${idAttr}${name}${placeholder}${rows}${required}${disabled}>${escapeHtml(value)}</textarea>`;\n }\n\n case 'select': {\n const name = props.name ? ` name=\"${escapeAttr(props.name)}\"` : '';\n const required = props.required ? ' required' : '';\n const disabled = props.disabled ? ' disabled' : '';\n const cls = buildClass('kb-select', nodeClass);\n const optionsList = Array.isArray(props.options) ? props.options : [];\n const optionIndent = ' '.repeat((indentLevel + 1) * (options.indentSize ?? 2));\n\n const optionsHtml = optionsList\n .map((opt: any) => {\n const optVal = typeof opt === 'object' ? opt.value : opt;\n const optLabel = typeof opt === 'object' ? opt.label : opt;\n const selected = props.value === optVal || props.defaultValue === optVal ? ' selected' : '';\n return `${optionIndent}<option value=\"${escapeAttr(optVal)}\"${selected}>${escapeHtml(optLabel)}</option>`;\n })\n .join('\\n');\n\n if (!optionsHtml) {\n return `${indent}<select class=\"${cls}\"${idAttr}${name}${required}${disabled}></select>`;\n }\n return `${indent}<select class=\"${cls}\"${idAttr}${name}${required}${disabled}>\\n${optionsHtml}\\n${indent}</select>`;\n }\n\n case 'checkbox': {\n const name = props.name ? ` name=\"${escapeAttr(props.name)}\"` : '';\n const checked = props.checked || props.defaultChecked ? ' checked' : '';\n const label = props.label ?? props.text ?? '';\n const cls = buildClass('kb-checkbox-label', nodeClass);\n return `${indent}<label class=\"${cls}\"${idAttr}><input type=\"checkbox\"${name}${checked} /><span>${escapeHtml(label)}</span></label>`;\n }\n\n case 'radio': {\n const name = props.name ? ` name=\"${escapeAttr(props.name)}\"` : '';\n const value = props.value ? ` value=\"${escapeAttr(props.value)}\"` : '';\n const checked = props.checked || props.defaultChecked ? ' checked' : '';\n const label = props.label ?? props.text ?? '';\n const cls = buildClass('kb-radio-label', nodeClass);\n return `${indent}<label class=\"${cls}\"${idAttr}><input type=\"radio\"${name}${value}${checked} /><span>${escapeHtml(label)}</span></label>`;\n }\n\n case 'list': {\n const tag = props.tag === 'ol' || props.type === 'ol' || props.ordered ? 'ol' : 'ul';\n const cls = buildClass('kb-list', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<${tag} class=\"${cls}\"${idAttr}></${tag}>`;\n }\n return `${indent}<${tag} class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</${tag}>`;\n }\n\n case 'list-item': {\n const text = props.text ?? props.value;\n const cls = buildClass('kb-list-item', nodeClass);\n if (children.length > 0) {\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n return `${indent}<li class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</li>`;\n }\n return `${indent}<li class=\"${cls}\"${idAttr}>${escapeHtml(text ?? 'List item')}</li>`;\n }\n\n case 'table': {\n const cls = buildClass('kb-table', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<table class=\"${cls}\"${idAttr}></table>`;\n }\n return `${indent}<table class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</table>`;\n }\n\n case 'table-row': {\n const cls = buildClass('kb-table-row', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<tr class=\"${cls}\"${idAttr}></tr>`;\n }\n return `${indent}<tr class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</tr>`;\n }\n\n case 'table-cell': {\n const isHeader = props.isHeader || props.type === 'header' || props.tag === 'th';\n const tag = isHeader ? 'th' : 'td';\n const colSpan = props.colSpan && Number(props.colSpan) > 1 ? ` colspan=\"${escapeAttr(props.colSpan)}\"` : '';\n const rowSpan = props.rowSpan && Number(props.rowSpan) > 1 ? ` rowspan=\"${escapeAttr(props.rowSpan)}\"` : '';\n const text = props.text ?? props.value ?? '';\n const cls = buildClass('kb-table-cell', nodeClass);\n\n if (children.length > 0) {\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n return `${indent}<${tag} class=\"${cls}\"${idAttr}${colSpan}${rowSpan}>\\n${childHtml}\\n${indent}</${tag}>`;\n }\n return `${indent}<${tag} class=\"${cls}\"${idAttr}${colSpan}${rowSpan}>${escapeHtml(text)}</${tag}>`;\n }\n\n case 'collection': {\n const cls = buildClass('kb-collection', nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<div class=\"${cls}\"${idAttr}></div>`;\n }\n return `${indent}<div class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</div>`;\n }\n\n default: {\n const cls = buildClass(`kb-${node.type}`, nodeClass);\n const childHtml = children\n .map((child) => renderNodeToHtml(child, indentLevel + 1, options))\n .join('\\n');\n if (!childHtml) {\n return `${indent}<div class=\"${cls}\"${idAttr}></div>`;\n }\n return `${indent}<div class=\"${cls}\"${idAttr}>\\n${childHtml}\\n${indent}</div>`;\n }\n }\n}\n\n/**\n * Generates a clean, formatted semantic HTML string for a PageDocument or Node.\n */\nexport function generateSemanticHtml(\n docOrNode: PageDocument | Node,\n options: GenerateHtmlOptions = {},\n): string {\n const rootNode = 'document' in docOrNode ? docOrNode.document : docOrNode;\n if (!rootNode) return '';\n return renderNodeToHtml(rootNode, 0, options);\n}\n\n/**\n * Format a set of CSS property-value declarations into indented multi-line CSS block.\n */\nfunction formatCssRule(selector: string, declarationsStr: string, indent = ''): string {\n if (!declarationsStr.trim()) return '';\n const rules = declarationsStr\n .split(';')\n .map((r) => r.trim())\n .filter(Boolean);\n if (rules.length === 0) return '';\n\n const indentedRules = rules.map((r) => `${indent} ${r};`).join('\\n');\n return `${indent}${selector} {\\n${indentedRules}\\n${indent}}`;\n}\n\n/**\n * Generates structured, readable CSS for the given document, compiling\n * base styles, responsive breakpoints (tablet/mobile), and pseudo-classes.\n */\nexport function generateDocumentCss(\n docOrNode: PageDocument | Node,\n options: GenerateCssOptions = {},\n): string {\n const rootNode = 'document' in docOrNode ? docOrNode.document : docOrNode;\n if (!rootNode) return '';\n\n const classPrefix = options.classPrefix || 'kb-node-';\n const baseRules: string[] = [];\n const tabletRules: string[] = [];\n const mobileRules: string[] = [];\n const stateRules: string[] = [];\n\n const walk = (node: Node) => {\n const selector = `.${classPrefix}${node.id}`;\n\n // Base & Desktop styles\n if (node.styles) {\n const baseStyles = {\n ...(node.styles.base || {}),\n ...(node.styles.desktop || {}),\n };\n const baseDecls = styleDefinitionToCssDeclarations(baseStyles);\n if (baseDecls) {\n baseRules.push(formatCssRule(selector, baseDecls));\n }\n\n // Tablet styles\n if (node.styles.tablet) {\n const tabletDecls = styleDefinitionToCssDeclarations(node.styles.tablet);\n if (tabletDecls) {\n tabletRules.push(formatCssRule(selector, tabletDecls, ' '));\n }\n }\n\n // Mobile styles\n if (node.styles.mobile) {\n const mobileDecls = styleDefinitionToCssDeclarations(node.styles.mobile);\n if (mobileDecls) {\n mobileRules.push(formatCssRule(selector, mobileDecls, ' '));\n }\n }\n\n // Pseudo-state styles (e.g. :hover, :focus, :active)\n if (node.styles.states && typeof node.styles.states === 'object') {\n for (const [state, styleDef] of Object.entries(node.styles.states)) {\n if (!styleDef) continue;\n const safeState = /^::?[a-zA-Z-]+$/.test(state) ? state : null;\n if (!safeState) continue;\n const stateDecls = styleDefinitionToCssDeclarations(styleDef as Record<string, unknown>);\n if (stateDecls) {\n stateRules.push(formatCssRule(`${selector}${safeState}`, stateDecls));\n }\n }\n }\n }\n\n node.children?.forEach(walk);\n };\n\n walk(rootNode);\n\n const sections: string[] = [];\n\n // Reset\n if (options.includeReset !== false) {\n sections.push(`/* ==========================================================================\\n Baseline Reset & Typography Standards\\n ========================================================================== */\\n${DEFAULT_CSS_RESET}`);\n }\n\n // Base Styles\n if (baseRules.length > 0) {\n sections.push(`/* ==========================================================================\\n Component Styles\\n ========================================================================== */\\n${baseRules.join('\\n\\n')}`);\n }\n\n // Interactive / Pseudo-States\n if (stateRules.length > 0) {\n sections.push(`/* ==========================================================================\\n Interactive & Hover States\\n ========================================================================== */\\n${stateRules.join('\\n\\n')}`);\n }\n\n // Tablet Media Query\n if (tabletRules.length > 0) {\n sections.push(`/* ==========================================================================\\n Tablet Breakpoint (max-width: 1024px)\\n ========================================================================== */\\n@media (max-width: 1024px) {\\n${tabletRules.join('\\n\\n')}\\n}`);\n }\n\n // Mobile Media Query\n if (mobileRules.length > 0) {\n sections.push(`/* ==========================================================================\\n Mobile Breakpoint (max-width: 640px)\\n ========================================================================== */\\n@media (max-width: 640px) {\\n${mobileRules.join('\\n\\n')}\\n}`);\n }\n\n // Animation & Motion Styles (STORA-264)\n const pageDoc: PageDocument = 'document' in docOrNode\n ? docOrNode\n : { schema: 'stora.page', version: '1.0.0', document: rootNode as any };\n const animStyles = collectAnimationStylesCss(pageDoc);\n if (animStyles) {\n sections.push(`/* ==========================================================================\\n Animations & Motion Keyframes\\n ========================================================================== */\\n${animStyles}`);\n }\n\n return sections.join('\\n\\n');\n}\n\n/**\n * Generates a complete, standalone, production-ready HTML document string\n * with metadata, responsive viewport tags, embedded stylesheet, and semantic body markup.\n */\nexport function generateStandaloneHtml(\n doc: PageDocument,\n options: StandaloneHtmlOptions = {},\n): string {\n const title = escapeHtml(doc.metadata?.title || 'KUBUILD Page');\n const description = doc.metadata?.description ? escapeAttr(doc.metadata.description) : '';\n const author = doc.metadata?.author ? escapeAttr(doc.metadata.author) : '';\n const lang = options.lang || 'en';\n\n const css = generateDocumentCss(doc, options.cssOptions);\n const html = generateSemanticHtml(doc, options.htmlOptions);\n\n const metaDescription = description ? ` <meta name=\"description\" content=\"${description}\">\\n` : '';\n const metaAuthor = author ? ` <meta name=\"author\" content=\"${author}\">\\n` : '';\n\n return `<!DOCTYPE html>\n<html lang=\"${lang}\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${title}</title>\n${metaDescription}${metaAuthor} <style>\n${css}\n </style>\n</head>\n<body>\n${html}\n</body>\n</html>`;\n}\n"]}
|