meno-core 1.0.45 → 1.0.46

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.
Files changed (56) hide show
  1. package/build-astro.ts +214 -63
  2. package/dist/bin/cli.js +2 -2
  3. package/dist/build-static.js +7 -7
  4. package/dist/chunks/{chunk-NZTSJS5C.js → chunk-2QK6U5UK.js} +3 -2
  5. package/dist/chunks/{chunk-NZTSJS5C.js.map → chunk-2QK6U5UK.js.map} +2 -2
  6. package/dist/chunks/{chunk-BZQKEJQY.js → chunk-77ZB6353.js} +29 -18
  7. package/dist/chunks/chunk-77ZB6353.js.map +7 -0
  8. package/dist/chunks/{chunk-TVH3TC2T.js → chunk-C6U5T5S5.js} +6 -6
  9. package/dist/chunks/{chunk-5ZASE4IG.js → chunk-FED5MME6.js} +234 -11
  10. package/dist/chunks/{chunk-5ZASE4IG.js.map → chunk-FED5MME6.js.map} +3 -3
  11. package/dist/chunks/{chunk-5Z5VQRTJ.js → chunk-I7YIGZXT.js} +4 -4
  12. package/dist/chunks/{chunk-5Z5VQRTJ.js.map → chunk-I7YIGZXT.js.map} +2 -2
  13. package/dist/chunks/{chunk-OUNJ76QM.js → chunk-ORN7S4AP.js} +5 -5
  14. package/dist/chunks/{chunk-GYF3ABI3.js → chunk-UUA5LEWF.js} +3 -3
  15. package/dist/chunks/{chunk-GYF3ABI3.js.map → chunk-UUA5LEWF.js.map} +2 -2
  16. package/dist/chunks/{chunk-WQSG5WHC.js → chunk-ZTKHJQ2Z.js} +2 -2
  17. package/dist/chunks/{chunk-F7MA62WG.js → chunk-ZWYDT3QJ.js} +3 -3
  18. package/dist/chunks/{configService-6KTT6GRT.js → configService-DYCUEURL.js} +3 -3
  19. package/dist/chunks/{constants-L5IKLB6U.js → constants-GWBAD66U.js} +2 -2
  20. package/dist/entries/server-router.js +7 -7
  21. package/dist/lib/client/index.js +4 -4
  22. package/dist/lib/server/index.js +586 -142
  23. package/dist/lib/server/index.js.map +3 -3
  24. package/dist/lib/shared/index.js +7 -3
  25. package/dist/lib/shared/index.js.map +2 -2
  26. package/dist/lib/test-utils/index.js +1 -1
  27. package/lib/client/templateEngine.test.ts +64 -0
  28. package/lib/server/astro/astroEmitHelpers.ts +18 -0
  29. package/lib/server/astro/cmsPageEmitter.ts +31 -1
  30. package/lib/server/astro/componentEmitter.test.ts +59 -0
  31. package/lib/server/astro/componentEmitter.ts +43 -10
  32. package/lib/server/astro/cssCollector.ts +58 -11
  33. package/lib/server/astro/nodeToAstro.test.ts +397 -5
  34. package/lib/server/astro/nodeToAstro.ts +478 -63
  35. package/lib/server/astro/pageEmitter.ts +31 -1
  36. package/lib/server/astro/tailwindMapper.test.ts +119 -0
  37. package/lib/server/astro/tailwindMapper.ts +67 -1
  38. package/lib/server/runtime/httpServer.ts +12 -4
  39. package/lib/server/ssr/htmlGenerator.ts +1 -1
  40. package/lib/server/ssr/jsCollector.ts +2 -2
  41. package/lib/server/ssr/ssrRenderer.test.ts +32 -0
  42. package/lib/server/ssr/ssrRenderer.ts +26 -11
  43. package/lib/shared/constants.ts +1 -0
  44. package/lib/shared/cssGeneration.test.ts +109 -3
  45. package/lib/shared/cssGeneration.ts +98 -13
  46. package/lib/shared/cssNamedColors.ts +47 -0
  47. package/lib/shared/cssProperties.ts +2 -2
  48. package/lib/shared/index.ts +1 -0
  49. package/package.json +1 -1
  50. package/dist/chunks/chunk-BZQKEJQY.js.map +0 -7
  51. /package/dist/chunks/{chunk-TVH3TC2T.js.map → chunk-C6U5T5S5.js.map} +0 -0
  52. /package/dist/chunks/{chunk-OUNJ76QM.js.map → chunk-ORN7S4AP.js.map} +0 -0
  53. /package/dist/chunks/{chunk-WQSG5WHC.js.map → chunk-ZTKHJQ2Z.js.map} +0 -0
  54. /package/dist/chunks/{chunk-F7MA62WG.js.map → chunk-ZWYDT3QJ.js.map} +0 -0
  55. /package/dist/chunks/{configService-6KTT6GRT.js.map → configService-DYCUEURL.js.map} +0 -0
  56. /package/dist/chunks/{constants-L5IKLB6U.js.map → constants-GWBAD66U.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../build-astro.ts", "../../../lib/server/astro/tailwindMapper.ts", "../../../lib/server/astro/nodeToAstro.ts", "../../../lib/server/astro/templateTransformer.ts", "../../../lib/server/astro/componentEmitter.ts", "../../../lib/server/astro/pageEmitter.ts", "../../../lib/server/astro/cmsPageEmitter.ts", "../../../lib/server/astro/cssCollector.ts", "../../../lib/server/webflow/buildWebflow.ts", "../../../lib/server/webflow/types.ts", "../../../lib/server/webflow/nodeToWebflow.ts", "../../../lib/server/webflow/styleMapper.ts", "../../../lib/server/index.ts"],
4
- "sourcesContent": ["/**\n * Astro Export Build Script\n * Renders all pages via the SSR pipeline, then wraps them as Astro page files\n * with a shared layout, global CSS, and optional CMS content collections.\n */\n\nimport { existsSync, readdirSync, mkdirSync, rmSync, statSync, copyFileSync, writeFileSync } from \"fs\";\nimport { writeFile, readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { createHash } from \"crypto\";\nimport { inspect, minifyJS as runtimeMinifyJS } from './lib/server/runtime';\nimport {\n loadJSONFile,\n loadComponentDirectory,\n mapPageNameToPath,\n parseJSON,\n loadI18nConfig\n} from \"./lib/server/jsonLoader\";\nimport { generateSSRHTML } from \"./lib/server/ssrRenderer\";\nimport type { SSRHTMLResult } from \"./lib/server/ssr/htmlGenerator\";\nimport { projectPaths } from \"./lib/server/projectContext\";\nimport { loadProjectConfig, generateFontCSS, generateFontPreloadTags } from \"./lib/shared/fontLoader\";\nimport { FileSystemCMSProvider } from \"./lib/server/providers/fileSystemCMSProvider\";\nimport { CMSService } from \"./lib/server/services/cmsService\";\nimport { isI18nValue, resolveI18nValue } from \"./lib/shared/i18n\";\nimport type { ComponentDefinition, JSONPage, CMSSchema, CMSItem, I18nConfig } from \"./lib/shared/types\";\nimport type { CMSFieldDefinition } from \"./lib/shared/types/cms\";\nimport { isItemDraftForLocale } from \"./lib/shared/types\";\nimport type { SlugMap } from \"./lib/shared/slugTranslator\";\nimport { renderPageSSR } from \"./lib/server/ssr/ssrRenderer\";\nimport { generateThemeColorVariablesCSS, generateVariablesCSS } from \"./lib/server/cssGenerator\";\nimport { generateAllInteractiveCSS } from \"./lib/shared/cssGeneration\";\nimport { colorService } from \"./lib/server/services/ColorService\";\nimport { variableService } from \"./lib/server/services/VariableService\";\nimport { configService } from \"./lib/server/services/configService\";\nimport { loadBreakpointConfig, loadResponsiveScalesConfig } from \"./lib/server/jsonLoader\";\nimport type { InteractiveStyles } from \"./lib/shared/types/styles\";\nimport { collectComponentLibraries, filterLibrariesByContext, mergeLibraries, generateLibraryTags } from \"./lib/shared/libraryLoader\";\nimport { migrateTemplatesDirectory } from \"./lib/server/migrateTemplates\";\nimport { emitAstroComponent } from \"./lib/server/astro/componentEmitter\";\nimport { emitAstroPage } from \"./lib/server/astro/pageEmitter\";\nimport { emitCMSPage } from './lib/server/astro/cmsPageEmitter';\nimport { collectAllMappingClasses } from \"./lib/server/astro/cssCollector\";\nimport { buildImageMetadataMap } from \"./lib/server/ssr/imageMetadata\";\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction hashContent(content: string): string {\n return createHash('sha256').update(content).digest('hex').slice(0, 8);\n}\n\nfunction copyDirectory(src: string, dest: string): void {\n if (!existsSync(src)) return;\n if (!existsSync(dest)) mkdirSync(dest, { recursive: true });\n const files = readdirSync(src);\n for (const file of files) {\n const srcPath = join(src, file);\n const destPath = join(dest, file);\n const stat = statSync(srcPath);\n if (stat.isDirectory()) copyDirectory(srcPath, destPath);\n else copyFileSync(srcPath, destPath);\n }\n}\n\nfunction isCMSPage(pageData: JSONPage): boolean {\n return pageData.meta?.source === 'cms' && !!pageData.meta?.cms;\n}\n\n/**\n * Build URL path for a CMS item based on the URL pattern\n */\nfunction buildCMSItemPath(\n urlPattern: string,\n item: CMSItem,\n slugField: string,\n locale: string,\n i18nConfig: I18nConfig\n): string {\n let slug = item[slugField] ?? item._slug ?? item._id;\n if (isI18nValue(slug)) {\n slug = resolveI18nValue(slug, locale, i18nConfig) as string;\n }\n return urlPattern.replace('{{slug}}', String(slug));\n}\n\n/**\n * Recursively scan a directory for .json files, returning relative paths.\n */\nfunction scanJSONFiles(dir: string, prefix: string = ''): string[] {\n const results: string[] = [];\n if (!existsSync(dir)) return results;\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.json')) {\n results.push(prefix ? `${prefix}/${entry.name}` : entry.name);\n } else if (entry.isDirectory()) {\n results.push(...scanJSONFiles(join(dir, entry.name), prefix ? `${prefix}/${entry.name}` : entry.name));\n }\n }\n return results;\n}\n\n/**\n * Compute the relative import path from a file at `fromDepth` levels under src/pages/\n * back to src/layouts/BaseLayout.astro.\n */\nfunction layoutImportPath(fileDepth: number): string {\n // fileDepth = 0 means file is at src/pages/index.astro -> ../layouts/BaseLayout.astro\n // fileDepth = 1 means src/pages/en/index.astro -> ../../layouts/BaseLayout.astro\n const ups = '../'.repeat(fileDepth + 1);\n return `${ups}layouts/BaseLayout.astro`;\n}\n\n/**\n * Escape a string for use inside a JS template literal (backtick string).\n */\nfunction escapeTemplateLiteral(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n\n/**\n * Compute locale \u2192 URL path map for a page's slug translations.\n * Used by locale list rendering to generate correct links.\n */\nfunction computePageSlugMap(\n slugs: Record<string, string>,\n i18nConfig: I18nConfig\n): Record<string, string> {\n const map: Record<string, string> = {};\n for (const localeConfig of i18nConfig.locales) {\n const code = localeConfig.code;\n const isDefault = code === i18nConfig.defaultLocale;\n const slug = slugs[code] || '';\n if (isDefault) {\n map[code] = slug === '' ? '/' : `/${slug}`;\n } else {\n map[code] = slug === '' ? `/${code}` : `/${code}/${slug}`;\n }\n }\n return map;\n}\n\n/**\n * Map a CMS field type to a Zod schema string for the Astro content config.\n */\nfunction cmsFieldToZod(field: CMSFieldDefinition): string {\n switch (field.type) {\n case 'string':\n case 'text':\n case 'rich-text':\n // Support both plain strings and i18n objects { _i18n: true, en: \"...\", pl: \"...\" }\n return 'z.union([z.string(), z.object({ _i18n: z.literal(true) }).passthrough()])';\n case 'number':\n return 'z.number()';\n case 'boolean':\n return 'z.boolean()';\n case 'date':\n return 'z.coerce.date()';\n case 'select':\n if (field.options && field.options.length > 0) {\n const opts = field.options.map(o => `'${o.replace(/'/g, \"\\\\'\")}'`).join(', ');\n return `z.enum([${opts}])`;\n }\n return 'z.string()';\n case 'image':\n case 'file':\n return 'z.string()';\n case 'reference':\n return 'z.string()';\n default:\n return 'z.string()';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface PageRenderResult {\n /** Body HTML (inner content, no DOCTYPE wrapper) */\n html: string;\n /** Head meta tags HTML string */\n meta: string;\n /** Page title */\n title: string;\n /** Extracted JavaScript (if any) */\n javascript: string;\n /** Per-component CSS */\n componentCSS?: string;\n /** Locale used */\n locale: string;\n /** Interactive styles (hover, focus, etc.) */\n interactiveStylesMap: Map<string, InteractiveStyles>;\n /** The URL path this page will live at */\n urlPath: string;\n /** File depth relative to src/pages/ (0 = root, 1 = one dir deep, etc.) */\n fileDepth: number;\n /** Relative file path within src/pages/ */\n astroFilePath: string;\n /** Original page data (for Pass 2 component-structured emission) */\n pageData?: JSONPage;\n /** Page name without extension */\n pageName?: string;\n /** Whether this is a CMS template page */\n isCMSPage?: boolean;\n /** SSR fallback HTML for complex nodes (list, locale-list) keyed by element path */\n ssrFallbackCollector?: Map<string, string>;\n}\n\ninterface AstroBuildStats {\n pages: number;\n cmsPages: number;\n collections: number;\n errors: number;\n}\n\n// ---------------------------------------------------------------------------\n// SSR Fallback page builder (used for CMS pages and error fallback)\n// ---------------------------------------------------------------------------\n\nfunction buildSSRFallbackPage(\n result: PageRenderResult,\n importPath: string,\n fontPreloads: string,\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string },\n defaultTheme: string,\n scriptPaths: string[]\n): string {\n const escapedMeta = escapeTemplateLiteral(result.meta);\n const escapedHTML = escapeTemplateLiteral(result.html);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map(s => `\"${s}\"`).join(', ')}]`\n : '[]';\n\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n return `---\nimport BaseLayout from '${importPath}';\n---\n<BaseLayout\n title=\"${result.title.replace(/\"/g, '&quot;')}\"\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${result.locale}\"\n theme=\"${defaultTheme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n <Fragment set:html={\\`<div id=\"root\">${escapedHTML}</div>\\`} />\n</BaseLayout>\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nexport async function buildAstroProject(\n projectRoot?: string,\n outputDir?: string\n): Promise<AstroBuildStats> {\n const startTime = Date.now();\n\n console.log('\uD83C\uDFD7\uFE0F Building Astro export...\\n');\n\n // ----------------------------------------------------------\n // 1. Setup: load project configuration\n // ----------------------------------------------------------\n configService.reset();\n\n const projectConfig = await loadProjectConfig();\n const siteUrl = (projectConfig as { siteUrl?: string }).siteUrl?.replace(/\\/$/, '') || '';\n\n const i18nConfig = await loadI18nConfig();\n console.log(`\uD83C\uDF10 Locales: ${i18nConfig.locales.map(l => l.code).join(', ')} (default: ${i18nConfig.defaultLocale})\\n`);\n\n await migrateTemplatesDirectory();\n\n const { components, warnings, errors: compErrors } = await loadComponentDirectory(projectPaths.components());\n const globalComponents: Record<string, ComponentDefinition> = {};\n components.forEach((value, key) => { globalComponents[key] = value; });\n for (const w of warnings) console.warn(` Warning: ${w}`);\n for (const e of compErrors) console.error(` Error: ${e}`);\n console.log(`Loaded ${components.size} global component(s)\\n`);\n\n const cmsProvider = new FileSystemCMSProvider(projectPaths.templates(), projectPaths.cms());\n const cmsService = new CMSService(cmsProvider);\n await cmsService.initialize();\n console.log('CMS service initialized\\n');\n\n const themeConfig = await colorService.loadThemeConfig();\n const variablesConfig = await variableService.loadConfig();\n const breakpoints = await loadBreakpointConfig();\n const responsiveScales = await loadResponsiveScalesConfig();\n\n // Libraries (global + component)\n await configService.load();\n const globalLibraries = configService.getLibraries();\n const componentLibraries = collectComponentLibraries(globalComponents);\n\n // Build image metadata map for responsive image generation\n const imageMetadataMap = await buildImageMetadataMap();\n if (imageMetadataMap.size > 0) {\n console.log(`Loaded image metadata for ${imageMetadataMap.size} image(s)\\n`);\n }\n\n // ----------------------------------------------------------\n // 2. Clean and create output directory\n // ----------------------------------------------------------\n const outDir = outputDir || join(projectPaths.project, 'astro-export');\n\n if (existsSync(outDir)) {\n rmSync(outDir, { recursive: true, force: true });\n }\n mkdirSync(outDir, { recursive: true });\n\n // Create directory structure\n const srcDir = join(outDir, 'src');\n const pagesOutDir = join(srcDir, 'pages');\n const layoutsDir = join(srcDir, 'layouts');\n const stylesDir = join(srcDir, 'styles');\n const componentsOutDir = join(srcDir, 'components');\n const publicDir = join(outDir, 'public');\n const scriptsDir = join(publicDir, '_scripts');\n for (const d of [srcDir, pagesOutDir, layoutsDir, stylesDir, componentsOutDir, publicDir]) {\n mkdirSync(d, { recursive: true });\n }\n\n // ----------------------------------------------------------\n // 3. Scan pages\n // ----------------------------------------------------------\n const pagesDir = projectPaths.pages();\n if (!existsSync(pagesDir)) {\n console.error('Pages directory not found!');\n return { pages: 0, cmsPages: 0, collections: 0, errors: 1 };\n }\n\n const pageFiles = scanJSONFiles(pagesDir);\n if (pageFiles.length === 0) {\n console.warn('No pages found in ./pages directory');\n return { pages: 0, cmsPages: 0, collections: 0, errors: 0 };\n }\n\n console.log(`Found ${pageFiles.length} page(s) to process\\n`);\n\n // Collect slug mappings (first pass)\n const slugMappings: SlugMap[] = [];\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n if (!pageContent) continue;\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n if (pageData.meta?.slugs) {\n const pageId = basePath === '/' ? 'index' : basePath.substring(1);\n slugMappings.push({ pageId, slugs: pageData.meta.slugs });\n }\n } catch { /* ignore parse errors in first pass */ }\n }\n\n // ----------------------------------------------------------\n // 4 & 5. Render all pages (regular + CMS templates)\n // ----------------------------------------------------------\n const allResults: PageRenderResult[] = [];\n const allInteractiveStyles = new Map<string, InteractiveStyles>();\n const allComponentCSS = new Set<string>();\n const jsContents = new Map<string, string>(); // hash -> JS content\n let errorCount = 0;\n\n // Helper to merge interactive styles maps\n function mergeInteractiveStyles(source: Map<string, InteractiveStyles>): void {\n for (const [key, value] of source) {\n if (!allInteractiveStyles.has(key)) {\n allInteractiveStyles.set(key, value);\n }\n }\n }\n\n // Helper to process a render result\n function processRenderResult(\n result: { html: string; meta: string; title: string; javascript: string; componentCSS?: string; locale: string; interactiveStylesMap: Map<string, InteractiveStyles>; preloadImages: any[]; neededCollections: Set<string>; ssrFallbackCollector?: Map<string, string> },\n urlPath: string,\n astroFilePath: string,\n fileDepth: number,\n pageData?: JSONPage,\n pageName?: string,\n isCMSPage?: boolean\n ): void {\n // Collect interactive styles\n mergeInteractiveStyles(result.interactiveStylesMap);\n\n // Collect component CSS\n if (result.componentCSS) {\n allComponentCSS.add(result.componentCSS);\n }\n\n // Deduplicate JavaScript by content hash\n if (result.javascript) {\n const hash = hashContent(result.javascript);\n if (!jsContents.has(hash)) {\n jsContents.set(hash, result.javascript);\n }\n }\n\n allResults.push({\n html: result.html,\n meta: result.meta,\n title: result.title,\n javascript: result.javascript,\n componentCSS: result.componentCSS,\n locale: result.locale,\n interactiveStylesMap: result.interactiveStylesMap,\n urlPath,\n fileDepth,\n astroFilePath,\n pageData,\n pageName,\n isCMSPage,\n ssrFallbackCollector: result.ssrFallbackCollector,\n });\n }\n\n // ---------- Regular pages ----------\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n\n if (!pageContent) {\n console.warn(` Skipping ${basePath} (empty file)`);\n errorCount++;\n continue;\n }\n\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n\n // Skip draft pages in production\n const isDevBuild = process.env.MENO_DEV_BUILD === 'true';\n if (pageData.meta?.draft === true && !isDevBuild) {\n console.log(` Skipping draft: ${basePath}`);\n continue;\n }\n\n const slugs = pageData.meta?.slugs;\n\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n const isDefault = locale === i18nConfig.defaultLocale;\n\n // Compute URL path\n let slug: string;\n if (slugs && slugs[locale]) {\n slug = slugs[locale];\n } else if (basePath === '/') {\n slug = '';\n } else {\n slug = basePath.substring(1);\n }\n\n const urlPath = isDefault\n ? (slug === '' ? '/' : `/${slug}`)\n : (slug === '' ? `/${locale}` : `/${locale}/${slug}`);\n\n // Determine .astro file path relative to src/pages/\n const astroFileName = slug === '' ? 'index.astro' : `${slug}.astro`;\n const astroFilePath = isDefault ? astroFileName : `${locale}/${astroFileName}`;\n const fileDepth = astroFilePath.split('/').length - 1;\n\n const result = await renderPageSSR(\n pageData,\n globalComponents,\n urlPath,\n siteUrl,\n locale,\n i18nConfig,\n slugMappings,\n undefined, // cmsContext\n cmsService,\n true // isProductionBuild\n );\n\n processRenderResult(result, urlPath, astroFilePath, fileDepth, pageData, pageName, false);\n console.log(` Rendered: ${urlPath}`);\n }\n } catch (error: any) {\n console.error(` Error rendering ${basePath}:`, error?.message || error);\n errorCount++;\n }\n }\n\n // Pre-compute layout dependencies needed by both CMS and regular page emission\n const fontPreloads = generateFontPreloadTags();\n const mergedLibraries = mergeLibraries(globalLibraries, componentLibraries);\n const buildLibraries = filterLibrariesByContext(mergedLibraries, 'build');\n const libraryTags = generateLibraryTags(buildLibraries);\n const defaultTheme = themeConfig.default || 'light';\n\n // ---------- CMS template pages ----------\n const templatesDir = projectPaths.templates();\n const templateSchemas: CMSSchema[] = [];\n let cmsPageCount = 0;\n\n if (existsSync(templatesDir)) {\n const templateFiles = readdirSync(templatesDir).filter(f => f.endsWith('.json'));\n\n if (templateFiles.length > 0) {\n console.log(`\\nProcessing ${templateFiles.length} CMS template(s)...\\n`);\n }\n\n for (const file of templateFiles) {\n const templateContent = await loadJSONFile(join(templatesDir, file));\n if (!templateContent) continue;\n\n try {\n const pageData = parseJSON<JSONPage>(templateContent);\n\n const isDevBuild = process.env.MENO_DEV_BUILD === 'true';\n if (pageData.meta?.draft === true && !isDevBuild) {\n console.log(` Skipping draft template: ${file}`);\n continue;\n }\n\n if (!isCMSPage(pageData)) {\n console.warn(` ${file} is in templates/ but missing meta.source: \"cms\"`);\n continue;\n }\n\n const cmsSchema = pageData.meta!.cms as CMSSchema;\n templateSchemas.push(cmsSchema);\n console.log(` CMS Collection: ${cmsSchema.id}`);\n\n // Count items for stats\n const items = await cmsService.queryItems({ collection: cmsSchema.id });\n const itemCount = items.length;\n\n if (itemCount === 0) {\n console.log(` No items found in cms/${cmsSchema.id}/`);\n } else {\n console.log(` Found ${itemCount} item(s)`);\n }\n\n // Render SSR once for metadata collection (interactive styles, component CSS, JS)\n const defaultLocale = i18nConfig.defaultLocale;\n const dummyPath = cmsSchema.urlPattern.replace('{{slug}}', '__placeholder__');\n\n const metaResult = await renderPageSSR(\n pageData,\n globalComponents,\n dummyPath,\n siteUrl,\n defaultLocale,\n i18nConfig,\n slugMappings,\n undefined, // no CMS context - just collecting metadata\n cmsService,\n true\n );\n\n // Collect interactive styles and component CSS\n mergeInteractiveStyles(metaResult.interactiveStylesMap);\n if (metaResult.componentCSS) {\n allComponentCSS.add(metaResult.componentCSS);\n }\n\n // Deduplicate JavaScript by content hash\n const scriptPaths: string[] = [];\n if (metaResult.javascript) {\n const hash = hashContent(metaResult.javascript);\n if (!jsContents.has(hash)) {\n jsContents.set(hash, metaResult.javascript);\n }\n scriptPaths.push(`/_scripts/${hash}.js`);\n }\n\n // Determine route file path from urlPattern\n const isMultiLocale = i18nConfig.locales.length > 1;\n const urlPatternWithoutSlash = cmsSchema.urlPattern.replace(/^\\//, '');\n const slugPlaceholderIdx = urlPatternWithoutSlash.indexOf('{{');\n const pathPrefix = slugPlaceholderIdx > 0 ? urlPatternWithoutSlash.substring(0, slugPlaceholderIdx) : '';\n\n // Generate CMS page with getStaticPaths()\n const ssrFallbacks = metaResult.ssrFallbackCollector ?? new Map<string, string>();\n\n // For each locale (or just default), generate a route file\n const localesToEmit = isMultiLocale ? i18nConfig.locales : [{ code: i18nConfig.defaultLocale }];\n\n for (const localeEntry of localesToEmit) {\n const localeCode = localeEntry.code;\n const isDefault = localeCode === i18nConfig.defaultLocale;\n\n // Route file path: blog/[slug].astro for default, pl/blog/[slug].astro for non-default\n let astroFilePath: string;\n if (pathPrefix) {\n astroFilePath = isDefault\n ? `${pathPrefix}[slug].astro`\n : `${localeCode}/${pathPrefix}[slug].astro`;\n } else {\n astroFilePath = isDefault\n ? '[slug].astro'\n : `${localeCode}/[slug].astro`;\n }\n\n const fileDepth = astroFilePath.split('/').length - 1;\n const importPath = layoutImportPath(fileDepth);\n\n const astroContent = emitCMSPage({\n pageData,\n globalComponents,\n cmsSchema,\n title: String(pageData.meta?.title || cmsSchema.name),\n meta: metaResult.meta,\n locale: localeCode,\n theme: defaultTheme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath: importPath,\n fileDepth,\n ssrFallbacks,\n pageName: file.replace('.json', ''),\n breakpoints,\n imageMetadataMap,\n i18nConfig,\n isMultiLocale: false, // Each file handles one locale\n slugMappings,\n imageFormat: configService.getImageFormat(),\n });\n\n const astroFileFull = join(pagesOutDir, astroFilePath);\n const astroFileDir = astroFileFull.substring(0, astroFileFull.lastIndexOf('/'));\n if (!existsSync(astroFileDir)) {\n mkdirSync(astroFileDir, { recursive: true });\n }\n\n await writeFile(astroFileFull, astroContent, 'utf-8');\n }\n\n console.log(` Generated: ${pathPrefix}[slug].astro (${itemCount} items \u00D7 ${localesToEmit.length} locale(s))`);\n\n cmsPageCount += itemCount * i18nConfig.locales.length;\n } catch (error: any) {\n console.error(` Error processing template ${file}:`, error?.message || error);\n errorCount++;\n }\n }\n }\n\n // ----------------------------------------------------------\n // 6. Generate global CSS (Tailwind + theme + interactive styles)\n // ----------------------------------------------------------\n // Collect Tailwind safelist classes from mapping variants\n const mappingClasses = collectAllMappingClasses(globalComponents, breakpoints);\n\n const fontCSS = generateFontCSS();\n const themeColorCSS = generateThemeColorVariablesCSS(themeConfig);\n const variablesCSS = generateVariablesCSS(variablesConfig, breakpoints, responsiveScales);\n const remConversionConfig = configService.getRemConversion();\n const interactiveCSS = generateAllInteractiveCSS(allInteractiveStyles, breakpoints, remConversionConfig);\n const componentCSSCombined = Array.from(allComponentCSS).join('\\n');\n\n const baseCSS = `@layer base {\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif; }\n button { background: none; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit; }\n img { display: block; width: 100%; height: 100%; }\n picture { display: block; }\n .olink { text-decoration: none; display: block; }\n .oem { display: inline-block; }\n}`;\n\n const tailwindDirectives = `@tailwind base;\n@tailwind components;\n@tailwind utilities;`;\n\n const globalCSS = [tailwindDirectives, fontCSS, themeColorCSS, variablesCSS, baseCSS, componentCSSCombined, interactiveCSS]\n .filter(Boolean)\n .join('\\n\\n');\n\n await writeFile(join(stylesDir, 'global.css'), globalCSS, 'utf-8');\n console.log(`\\nGenerated global.css (${(globalCSS.length / 1024).toFixed(1)} KB)`);\n\n // ----------------------------------------------------------\n // 7. Generate BaseLayout.astro\n // ----------------------------------------------------------\n const baseLayoutContent = `---\nimport '../styles/global.css';\n\ninterface Props {\n title: string;\n meta?: string;\n scripts?: string[];\n locale?: string;\n theme?: string;\n fontPreloads?: string;\n libraryTags?: { headCSS?: string; headJS?: string; bodyEndJS?: string };\n}\n\nconst { title, meta = '', scripts = [], locale = 'en', theme = '${themeConfig.default || 'light'}', fontPreloads = '', libraryTags = {} } = Astro.props;\n---\n<!DOCTYPE html>\n<html lang={locale} data-theme={theme}>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <Fragment set:html={fontPreloads} />\n <Fragment set:html={libraryTags.headCSS || ''} />\n <Fragment set:html={libraryTags.headJS || ''} />\n <Fragment set:html={meta} />\n <title>{title}</title>\n</head>\n<body>\n <slot />\n {scripts.map((s) => <script src={s} />)}\n <Fragment set:html={libraryTags.bodyEndJS || ''} />\n</body>\n</html>\n`;\n\n await writeFile(join(layoutsDir, 'BaseLayout.astro'), baseLayoutContent, 'utf-8');\n console.log('Generated BaseLayout.astro');\n\n // ----------------------------------------------------------\n // 7.5. Generate component .astro files\n // ----------------------------------------------------------\n let componentFileCount = 0;\n for (const [compName, compDef] of Object.entries(globalComponents)) {\n try {\n const astroContent = emitAstroComponent(compName, compDef, globalComponents, breakpoints, i18nConfig.defaultLocale);\n await writeFile(join(componentsOutDir, `${compName}.astro`), astroContent, 'utf-8');\n componentFileCount++;\n } catch (error: any) {\n console.warn(` Warning: could not generate component ${compName}: ${error?.message}`);\n }\n }\n console.log(`Generated ${componentFileCount} component .astro file(s)`);\n\n // ----------------------------------------------------------\n // 8. Generate .astro page files (component-structured)\n // ----------------------------------------------------------\n for (const result of allResults) {\n const importPath = layoutImportPath(result.fileDepth);\n\n // Write JavaScript to public/_scripts/ if present\n const scriptPaths: string[] = [];\n if (result.javascript) {\n const hash = hashContent(result.javascript);\n const scriptFile = `${hash}.js`;\n const scriptPublicPath = `/_scripts/${scriptFile}`;\n\n if (!existsSync(scriptsDir)) {\n mkdirSync(scriptsDir, { recursive: true });\n }\n\n const fullScriptPath = join(scriptsDir, scriptFile);\n if (!existsSync(fullScriptPath)) {\n await writeFile(fullScriptPath, result.javascript, 'utf-8');\n }\n scriptPaths.push(scriptPublicPath);\n }\n\n let astroContent: string;\n\n // Use component-structured emission for pages with page data\n if (result.pageData) {\n try {\n // Use SSR fallback collector from the initial render (paths already match nodeToAstro convention)\n const ssrFallbacks = result.ssrFallbackCollector ?? new Map<string, string>();\n\n // Compute slug map for locale list rendering\n const pageSlugMap: Record<string, string> | undefined =\n result.pageData.meta?.slugs\n ? computePageSlugMap(result.pageData.meta.slugs, i18nConfig)\n : undefined;\n\n astroContent = emitAstroPage({\n pageData: result.pageData,\n globalComponents,\n title: result.title,\n meta: result.meta,\n locale: result.locale,\n theme: defaultTheme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath: importPath,\n fileDepth: result.fileDepth,\n ssrFallbacks,\n pageName: result.pageName || 'index',\n breakpoints,\n imageMetadataMap,\n i18nConfig: i18nConfig.locales.length > 1 ? i18nConfig : undefined,\n currentPageSlugMap: pageSlugMap,\n slugMappings: i18nConfig.locales.length > 1 ? slugMappings : undefined,\n imageFormat: configService.getImageFormat(),\n });\n } catch (error: any) {\n // Fallback to SSR HTML if component emission fails\n console.warn(` Warning: component emission failed for ${result.urlPath}, using SSR fallback: ${error?.message}`);\n astroContent = buildSSRFallbackPage(result, importPath, fontPreloads, libraryTags, defaultTheme, scriptPaths);\n }\n } else {\n // Pages without pageData: use SSR fallback\n astroContent = buildSSRFallbackPage(result, importPath, fontPreloads, libraryTags, defaultTheme, scriptPaths);\n }\n\n const astroFileFull = join(pagesOutDir, result.astroFilePath);\n const astroFileDir = astroFileFull.substring(0, astroFileFull.lastIndexOf('/'));\n if (!existsSync(astroFileDir)) {\n mkdirSync(astroFileDir, { recursive: true });\n }\n\n await writeFile(astroFileFull, astroContent, 'utf-8');\n }\n\n console.log(`Generated ${allResults.length} .astro page file(s)`);\n\n // ----------------------------------------------------------\n // 9. Generate CMS content collections (if templates exist)\n // ----------------------------------------------------------\n let collectionCount = 0;\n\n if (templateSchemas.length > 0) {\n const contentDir = join(srcDir, 'content');\n mkdirSync(contentDir, { recursive: true });\n\n const collectionDefs: string[] = [];\n\n for (const schema of templateSchemas) {\n const collectionDir = join(contentDir, schema.id);\n mkdirSync(collectionDir, { recursive: true });\n\n // Copy CMS item JSON files, resolving i18n values to default locale\n const cmsItemsDir = join(projectPaths.cms(), schema.id);\n if (existsSync(cmsItemsDir)) {\n const itemFiles = readdirSync(cmsItemsDir).filter(f => f.endsWith('.json'));\n\n for (const itemFile of itemFiles) {\n try {\n const rawContent = await readFile(join(cmsItemsDir, itemFile), 'utf-8');\n const item = JSON.parse(rawContent) as CMSItem;\n\n // Keep i18n values as-is so getStaticPaths() can resolve per-locale\n const resolved: Record<string, unknown> = { ...item };\n\n await writeFile(\n join(collectionDir, itemFile),\n JSON.stringify(resolved, null, 2),\n 'utf-8'\n );\n } catch (err: any) {\n console.warn(` Warning: could not process CMS item ${itemFile}: ${err?.message}`);\n }\n }\n }\n\n // Build Zod schema for this collection\n const fieldDefs: string[] = [];\n if (schema.fields) {\n for (const [fieldName, fieldDef] of Object.entries(schema.fields)) {\n const zodType = cmsFieldToZod(fieldDef);\n const optional = fieldDef.required ? '' : '.optional()';\n fieldDefs.push(` ${fieldName}: ${zodType}${optional}`);\n }\n }\n\n collectionDefs.push(` '${schema.id}': defineCollection({\n type: 'data',\n schema: z.object({\n${fieldDefs.join(',\\n')}\n })\n })`);\n\n collectionCount++;\n }\n\n // Write src/content/config.ts\n const configContent = `import { z, defineCollection } from 'astro:content';\n\nconst collections = {\n${collectionDefs.join(',\\n')}\n};\n\nexport { collections };\n`;\n\n await writeFile(join(contentDir, 'config.ts'), configContent, 'utf-8');\n console.log(`Generated ${collectionCount} content collection(s) with config.ts`);\n }\n\n // ----------------------------------------------------------\n // 10. Copy assets to public/\n // ----------------------------------------------------------\n const assetDirs = ['fonts', 'images', 'icons', 'videos', 'assets'];\n let copiedAssets = 0;\n\n for (const dir of assetDirs) {\n const srcAssetDir = join(projectPaths.project, dir);\n if (existsSync(srcAssetDir)) {\n copyDirectory(srcAssetDir, join(publicDir, dir));\n copiedAssets++;\n }\n }\n\n // Copy libraries folder if it exists\n const librariesDir = join(projectPaths.project, 'libraries');\n if (existsSync(librariesDir)) {\n copyDirectory(librariesDir, join(publicDir, 'libraries'));\n copiedAssets++;\n }\n\n if (copiedAssets > 0) {\n console.log(`Copied ${copiedAssets} asset director${copiedAssets === 1 ? 'y' : 'ies'} to public/`);\n }\n\n // ----------------------------------------------------------\n // 11. Generate scaffold files\n // ----------------------------------------------------------\n\n // package.json\n const packageJson = {\n name: 'astro-export',\n type: 'module',\n version: '0.0.1',\n private: true,\n scripts: {\n dev: 'astro dev',\n start: 'astro dev',\n build: 'astro build',\n preview: 'astro preview',\n },\n dependencies: {\n 'astro': '^4.0.0',\n '@astrojs/tailwind': '^5.0.0',\n 'tailwindcss': '^3.4.0',\n },\n };\n\n await writeFile(join(outDir, 'package.json'), JSON.stringify(packageJson, null, 2), 'utf-8');\n\n // astro.config.mjs\n const localeCodes = i18nConfig.locales.map(l => l.code);\n const i18nBlock = i18nConfig.locales.length > 1\n ? `\\n i18n: {\\n defaultLocale: '${i18nConfig.defaultLocale}',\\n locales: [${localeCodes.map(c => `'${c}'`).join(', ')}],\\n routing: { prefixDefaultLocale: false },\\n },`\n : '';\n\n const astroConfig = `import { defineConfig } from 'astro/config';\nimport tailwind from '@astrojs/tailwind';\n\nexport default defineConfig({${siteUrl ? `\\n site: '${siteUrl}',` : ''}${i18nBlock}\n integrations: [tailwind({ applyBaseStyles: false })],\n});\n`;\n\n // tailwind.config.mjs\n const safelistArray = Array.from(mappingClasses);\n const safelistLiteral = safelistArray.length > 0\n ? `\\n safelist: [\\n${safelistArray.map(c => ` '${c}'`).join(',\\n')}\\n ],`\n : '';\n\n const tailwindConfig = `/** @type {import('tailwindcss').Config} */\nexport default {\n content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],${safelistLiteral}\n theme: {\n extend: {},\n },\n plugins: [],\n};\n`;\n\n await writeFile(join(outDir, 'tailwind.config.mjs'), tailwindConfig, 'utf-8');\n\n await writeFile(join(outDir, 'astro.config.mjs'), astroConfig, 'utf-8');\n\n // tsconfig.json\n const tsConfig = {\n extends: 'astro/tsconfigs/strict',\n };\n\n await writeFile(join(outDir, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2), 'utf-8');\n\n console.log('Generated package.json, astro.config.mjs, tailwind.config.mjs, tsconfig.json');\n\n // ----------------------------------------------------------\n // 12. Summary\n // ----------------------------------------------------------\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n const totalPages = allResults.length;\n\n console.log('\\n' + '='.repeat(50));\n console.log('Astro export complete!');\n console.log(` Pages: ${totalPages - cmsPageCount}`);\n if (cmsPageCount > 0) {\n console.log(` CMS pages: ${cmsPageCount}`);\n }\n if (collectionCount > 0) {\n console.log(` Content collections: ${collectionCount}`);\n }\n if (errorCount > 0) {\n console.log(` Errors: ${errorCount}`);\n }\n console.log(` Time: ${elapsed}s`);\n console.log(` Output: ${outDir}`);\n console.log('');\n\n return {\n pages: totalPages - cmsPageCount,\n cmsPages: cmsPageCount,\n collections: collectionCount,\n errors: errorCount,\n };\n}\n", "/**\n * Tailwind CSS Class Mapper for Astro Export\n * Converts CSS property:value pairs to Tailwind utility classes.\n * Uses exact-match table for common values, arbitrary value fallback for the rest.\n */\n\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction hasTemplateExpression(value: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(value);\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n// ---------------------------------------------------------------------------\n// Exact match table: property+value \u2192 Tailwind class\n// ---------------------------------------------------------------------------\n\nconst exactMatches: Record<string, Record<string, string>> = {\n display: {\n flex: 'flex',\n grid: 'grid',\n block: 'block',\n none: 'hidden',\n inline: 'inline',\n 'inline-block': 'inline-block',\n 'inline-flex': 'inline-flex',\n 'inline-grid': 'inline-grid',\n },\n flexDirection: {\n column: 'flex-col',\n row: 'flex-row',\n 'column-reverse': 'flex-col-reverse',\n 'row-reverse': 'flex-row-reverse',\n },\n justifyContent: {\n center: 'justify-center',\n 'flex-start': 'justify-start',\n 'flex-end': 'justify-end',\n 'space-between': 'justify-between',\n 'space-around': 'justify-around',\n 'space-evenly': 'justify-evenly',\n // camelCase aliases (component data uses camelCase)\n spaceBetween: 'justify-between',\n spaceAround: 'justify-around',\n spaceEvenly: 'justify-evenly',\n flexStart: 'justify-start',\n flexEnd: 'justify-end',\n },\n alignItems: {\n center: 'items-center',\n 'flex-start': 'items-start',\n 'flex-end': 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n // camelCase aliases\n flexStart: 'items-start',\n flexEnd: 'items-end',\n },\n alignContent: {\n center: 'content-center',\n 'flex-start': 'content-start',\n 'flex-end': 'content-end',\n 'space-between': 'content-between',\n 'space-around': 'content-around',\n stretch: 'content-stretch',\n },\n alignSelf: {\n auto: 'self-auto',\n center: 'self-center',\n 'flex-start': 'self-start',\n 'flex-end': 'self-end',\n stretch: 'self-stretch',\n },\n position: {\n relative: 'relative',\n absolute: 'absolute',\n fixed: 'fixed',\n sticky: 'sticky',\n static: 'static',\n },\n overflow: {\n hidden: 'overflow-hidden',\n auto: 'overflow-auto',\n scroll: 'overflow-scroll',\n visible: 'overflow-visible',\n },\n overflowX: {\n hidden: 'overflow-x-hidden',\n auto: 'overflow-x-auto',\n scroll: 'overflow-x-scroll',\n visible: 'overflow-x-visible',\n },\n overflowY: {\n hidden: 'overflow-y-hidden',\n auto: 'overflow-y-auto',\n scroll: 'overflow-y-scroll',\n visible: 'overflow-y-visible',\n },\n cursor: {\n pointer: 'cursor-pointer',\n default: 'cursor-default',\n 'not-allowed': 'cursor-not-allowed',\n grab: 'cursor-grab',\n grabbing: 'cursor-grabbing',\n text: 'cursor-text',\n move: 'cursor-move',\n wait: 'cursor-wait',\n },\n textAlign: {\n center: 'text-center',\n left: 'text-left',\n right: 'text-right',\n justify: 'text-justify',\n },\n textDecoration: {\n none: 'no-underline',\n underline: 'underline',\n 'line-through': 'line-through',\n overline: 'overline',\n },\n textTransform: {\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n none: 'normal-case',\n },\n objectFit: {\n cover: 'object-cover',\n contain: 'object-contain',\n fill: 'object-fill',\n none: 'object-none',\n 'scale-down': 'object-scale-down',\n },\n objectPosition: {\n center: 'object-center',\n top: 'object-top',\n bottom: 'object-bottom',\n left: 'object-left',\n right: 'object-right',\n },\n flexWrap: {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n },\n pointerEvents: {\n none: 'pointer-events-none',\n auto: 'pointer-events-auto',\n },\n userSelect: {\n none: 'select-none',\n auto: 'select-auto',\n text: 'select-text',\n all: 'select-all',\n },\n visibility: {\n hidden: 'invisible',\n visible: 'visible',\n },\n whiteSpace: {\n normal: 'whitespace-normal',\n nowrap: 'whitespace-nowrap',\n pre: 'whitespace-pre',\n 'pre-wrap': 'whitespace-pre-wrap',\n 'pre-line': 'whitespace-pre-line',\n },\n wordBreak: {\n 'break-all': 'break-all',\n 'break-word': 'break-words',\n normal: 'break-normal',\n },\n listStyleType: {\n none: 'list-none',\n disc: 'list-disc',\n decimal: 'list-decimal',\n },\n listStylePosition: {\n inside: 'list-inside',\n outside: 'list-outside',\n },\n boxSizing: {\n 'border-box': 'box-border',\n 'content-box': 'box-content',\n },\n gridAutoFlow: {\n row: 'grid-flow-row',\n column: 'grid-flow-col',\n dense: 'grid-flow-dense',\n 'row dense': 'grid-flow-row-dense',\n 'column dense': 'grid-flow-col-dense',\n },\n};\n\n// Single-value exact matches (property \u2192 class when value matches)\nconst singleValueMatches: Record<string, string> = {\n // width/height 100%\n 'width:100%': 'w-full',\n 'height:100%': 'h-full',\n 'width:100vw': 'w-screen',\n 'height:100vh': 'h-screen',\n 'width:auto': 'w-auto',\n 'height:auto': 'h-auto',\n 'width:fit-content': 'w-fit',\n 'height:fit-content': 'h-fit',\n 'width:min-content': 'w-min',\n 'height:min-content': 'h-min',\n 'width:max-content': 'w-max',\n 'height:max-content': 'h-max',\n 'maxWidth:100%': 'max-w-full',\n 'maxWidth:none': 'max-w-none',\n 'maxHeight:100%': 'max-h-full',\n 'maxHeight:none': 'max-h-none',\n 'minWidth:0': 'min-w-0',\n 'minHeight:0': 'min-h-0',\n 'margin:auto': 'm-auto',\n 'margin:0 auto': 'mx-auto',\n 'marginLeft:auto': 'ml-auto',\n 'marginRight:auto': 'mr-auto',\n 'marginInline:auto': 'mx-auto',\n 'borderRadius:50%': 'rounded-full',\n 'borderRadius:9999px': 'rounded-full',\n 'borderRadius:0': 'rounded-none',\n 'flex:1': 'flex-1',\n 'flex:none': 'flex-none',\n 'flex:auto': 'flex-auto',\n 'flexGrow:0': 'grow-0',\n 'flexGrow:1': 'grow',\n 'flexShrink:0': 'shrink-0',\n 'flexShrink:1': 'shrink',\n 'opacity:0': 'opacity-0',\n 'opacity:1': 'opacity-100',\n 'zIndex:0': 'z-0',\n 'zIndex:10': 'z-10',\n 'zIndex:20': 'z-20',\n 'zIndex:30': 'z-30',\n 'zIndex:40': 'z-40',\n 'zIndex:50': 'z-50',\n 'inset:0': 'inset-0',\n 'top:0': 'top-0',\n 'right:0': 'right-0',\n 'bottom:0': 'bottom-0',\n 'left:0': 'left-0',\n 'outline:none': '[outline:none]',\n 'background:none': '[background:none]',\n 'background:transparent': '[background:transparent]',\n 'backgroundColor:transparent': 'bg-transparent',\n};\n\n// ---------------------------------------------------------------------------\n// Arbitrary value prefix map: CSS property \u2192 Tailwind prefix\n// ---------------------------------------------------------------------------\n\nconst arbitraryPrefixMap: Record<string, string> = {\n // Spacing\n padding: 'p',\n paddingTop: 'pt',\n paddingRight: 'pr',\n paddingBottom: 'pb',\n paddingLeft: 'pl',\n paddingInline: 'px',\n paddingBlock: 'py',\n margin: 'm',\n marginTop: 'mt',\n marginRight: 'mr',\n marginBottom: 'mb',\n marginLeft: 'ml',\n marginInline: 'mx',\n marginBlock: 'my',\n gap: 'gap',\n rowGap: 'gap-y',\n columnGap: 'gap-x',\n\n // Sizing\n width: 'w',\n height: 'h',\n maxWidth: 'max-w',\n maxHeight: 'max-h',\n minWidth: 'min-w',\n minHeight: 'min-h',\n\n // Typography\n fontSize: 'text',\n fontWeight: 'font',\n fontFamily: 'font',\n lineHeight: 'leading',\n letterSpacing: 'tracking',\n\n // Borders\n borderRadius: 'rounded',\n borderTopLeftRadius: 'rounded-tl',\n borderTopRightRadius: 'rounded-tr',\n borderBottomLeftRadius: 'rounded-bl',\n borderBottomRightRadius: 'rounded-br',\n border: 'border',\n borderTop: 'border-t',\n borderRight: 'border-r',\n borderBottom: 'border-b',\n borderLeft: 'border-l',\n borderColor: 'border',\n\n // Colors\n color: 'text',\n backgroundColor: 'bg',\n background: 'bg',\n backgroundImage: 'bg',\n\n // Effects\n opacity: 'opacity',\n boxShadow: 'shadow',\n textShadow: '[text-shadow]',\n filter: '[filter]',\n backdropFilter: 'backdrop',\n transform: '[transform]',\n transformOrigin: 'origin',\n transition: '[transition]',\n mixBlendMode: 'mix-blend',\n clipPath: '[clip-path]',\n\n // Positioning\n top: 'top',\n right: 'right',\n bottom: 'bottom',\n left: 'left',\n inset: 'inset',\n zIndex: 'z',\n\n // Grid\n gridTemplateColumns: 'grid-cols',\n gridTemplateRows: 'grid-rows',\n gridColumn: 'col',\n gridRow: 'row',\n gridAutoRows: 'auto-rows',\n gridAutoColumns: 'auto-cols',\n\n // Flexbox extras\n flexGrow: 'grow',\n flexShrink: 'shrink',\n flexBasis: 'basis',\n order: 'order',\n flex: 'flex',\n\n // Aspect ratio\n aspectRatio: 'aspect',\n\n // Outline\n outline: 'outline',\n outlineWidth: 'outline',\n outlineOffset: 'outline-offset',\n outlineColor: 'outline',\n\n // Other\n accentColor: 'accent',\n textIndent: '[text-indent]',\n verticalAlign: 'align',\n overflowWrap: '[overflow-wrap]',\n scrollBehavior: 'scroll',\n resize: 'resize',\n};\n\n// ---------------------------------------------------------------------------\n// Core conversion functions\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single CSS property:value pair to a Tailwind class.\n * Returns null if the value should be skipped (mappings, templates).\n */\nexport function propertyToTailwind(\n property: string,\n value: string | number\n): string | null {\n const strValue = String(value);\n\n // Skip empty values \u2014 they produce broken classes like gap-[], mt-[]\n if (strValue === '') return null;\n\n // Skip template expressions \u2014 these must be handled via inline style\n if (hasTemplateExpression(strValue)) return null;\n\n // Check single-value exact matches first\n const singleKey = `${property}:${strValue}`;\n if (singleValueMatches[singleKey]) {\n return singleValueMatches[singleKey];\n }\n\n // Check exact match table\n if (exactMatches[property]?.[strValue]) {\n return exactMatches[property][strValue];\n }\n\n // Color variable handling:\n // \"var(--text)\" \u2192 \"text-[color:var(--text)]\" (type hint avoids ambiguity with font-size)\n // Bare color name like \"text\" \u2192 \"text-[color:var(--text)]\"\n if (property === 'color' || property === 'backgroundColor' || property === 'borderColor') {\n const prefix = property === 'color' ? 'text' : property === 'backgroundColor' ? 'bg' : 'border';\n if (strValue.includes('var(')) {\n return `${prefix}-[color:${strValue}]`;\n }\n // Bare name (not a hex, rgb, or number-starting value)\n if (!strValue.match(/^[#\\d]/) && !strValue.includes('rgb') && !strValue.includes('hsl')) {\n return `${prefix}-[color:var(--${strValue})]`;\n }\n }\n\n // Color properties with actual color values need type hints to avoid ambiguity\n if (property === 'borderColor' || property === 'color') {\n const prefix = property === 'color' ? 'text' : 'border';\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `${prefix}-[color:${sanitized}]`;\n }\n\n // Border shorthand (e.g., \"1px solid\", \"2px solid var(--border)\") needs arbitrary property syntax\n // because Tailwind's border-[...] only accepts width values, not compound shorthands\n if (property === 'border' || property === 'borderTop' || property === 'borderRight' ||\n property === 'borderBottom' || property === 'borderLeft') {\n if (strValue.includes('solid') || strValue.includes('dashed') || strValue.includes('dotted') || strValue.includes('none')) {\n const cssProp = property.replace(/([A-Z])/g, '-$1').toLowerCase();\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `[${cssProp}:${sanitized}]`;\n }\n }\n\n // `background` is a CSS shorthand \u2014 Tailwind's bg-[...] maps to background-color, not background.\n // For non-color values (none, transparent, gradients, etc.), use arbitrary property syntax.\n if (property === 'background') {\n const isSimpleColor = /^(#[0-9a-fA-F]{3,8}|rgb|hsl|var\\()/.test(strValue);\n if (!isSimpleColor) {\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `[background:${sanitized}]`;\n }\n }\n\n // Arbitrary value fallback\n const twPrefix = arbitraryPrefixMap[property];\n if (!twPrefix) {\n // Unknown property: use arbitrary property syntax\n const cssProp = property.replace(/([A-Z])/g, '-$1').toLowerCase();\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `[${cssProp}:${sanitized}]`;\n }\n\n // For prefixes that start with '[' it's an arbitrary property\n if (twPrefix.startsWith('[')) {\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `${twPrefix.slice(0, -1)}:${sanitized}]`;\n }\n\n // Standard arbitrary value: prefix-[value]\n const sanitized = strValue.replace(/\\s+/g, '_');\n\n // Disambiguate properties that share a Tailwind prefix with another CSS property.\n // Without type hints, Tailwind guesses wrong (e.g., text-[var(--x)] \u2192 color instead of font-size).\n if (property === 'fontSize') {\n return `text-[length:${sanitized}]`;\n }\n if (property === 'fontFamily') {\n return `font-[family-name:${sanitized}]`;\n }\n if (property === 'fontWeight') {\n return `font-[number:${sanitized}]`;\n }\n\n return `${twPrefix}-[${sanitized}]`;\n}\n\n/**\n * Convert a flat style object to an array of Tailwind classes.\n * Skips StyleMapping values (handled separately via class:list).\n * Returns { classes, dynamicStyles } where dynamicStyles are template-expression\n * styles that need inline style attributes.\n */\nexport function stylesToTailwind(\n style: StyleObject | Record<string, string | number>\n): { classes: string[]; dynamicStyles: Record<string, string> } {\n const classes: string[] = [];\n const dynamicStyles: Record<string, string> = {};\n\n // When borderColor is present alongside a border shorthand, Tailwind's CSS\n // ordering can cause the shorthand's arbitrary property `[border:...]` to\n // override the longhand `border-[color:...]`. To avoid this, decompose\n // border shorthands into width + style only (dropping the color part) so\n // borderColor can take effect without conflicts.\n const hasBorderColor = 'borderColor' in style && !isStyleMapping(style.borderColor);\n const borderShorthands = new Set([\n 'border', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft',\n ]);\n\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) continue;\n\n const strValue = String(value);\n\n // Template expressions go to dynamic/inline styles\n if (hasTemplateExpression(strValue)) {\n const cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n dynamicStyles[cssProp] = strValue;\n continue;\n }\n\n // Decompose border shorthands when borderColor is separately specified\n if (hasBorderColor && borderShorthands.has(prop)) {\n const parts = strValue.split(/\\s+/);\n // Parse width and style from shorthand (e.g. \"1px solid #ccc\" \u2192 \"1px\", \"solid\")\n const width = parts.find(p => /^\\d/.test(p) || p === '0');\n const borderStyle = parts.find(p => /^(solid|dashed|dotted|double|groove|ridge|inset|outset|none|hidden)$/.test(p));\n const cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n if (width) classes.push(`[${cssProp}-width:${width}]`);\n if (borderStyle) classes.push(`[${cssProp}-style:${borderStyle}]`);\n continue;\n }\n\n const twClass = propertyToTailwind(prop, value);\n if (twClass) {\n classes.push(twClass);\n }\n }\n\n return { classes, dynamicStyles };\n}\n\n/**\n * Convert a responsive style object to Tailwind classes with responsive prefixes.\n * Uses desktop-first max-width breakpoints.\n *\n * - base styles \u2192 no prefix (desktop default)\n * - tablet styles \u2192 max-[{breakpoint}px]: prefix\n * - mobile styles \u2192 max-[{breakpoint}px]: prefix\n */\nexport function responsiveStylesToTailwind(\n style: StyleObject | ResponsiveStyleObject | null | undefined,\n breakpoints: BreakpointConfig\n): { classes: string[]; dynamicStyles: Record<string, string> } {\n if (!style) return { classes: [], dynamicStyles: {} };\n\n const allClasses: string[] = [];\n const allDynamicStyles: Record<string, string> = {};\n\n if (isResponsiveStyle(style)) {\n const responsive = style as ResponsiveStyleObject;\n\n // Base styles (no prefix)\n if (responsive.base) {\n const { classes, dynamicStyles } = stylesToTailwind(responsive.base);\n allClasses.push(...classes);\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Tablet styles\n if (responsive.tablet) {\n const bpValue = breakpoints.tablet?.breakpoint ?? 1024;\n const prefix = `max-[${bpValue}px]:`;\n const { classes, dynamicStyles } = stylesToTailwind(responsive.tablet);\n allClasses.push(...classes.map(cls => `${prefix}${cls}`));\n // Dynamic styles for tablet \u2014 just merge (can't do responsive inline styles easily)\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Mobile styles\n if (responsive.mobile) {\n const bpValue = breakpoints.mobile?.breakpoint ?? 540;\n const prefix = `max-[${bpValue}px]:`;\n const { classes, dynamicStyles } = stylesToTailwind(responsive.mobile);\n allClasses.push(...classes.map(cls => `${prefix}${cls}`));\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Handle any other custom breakpoints\n for (const [bpName, bpStyle] of Object.entries(responsive)) {\n if (bpName === 'base' || bpName === 'tablet' || bpName === 'mobile' || !bpStyle) continue;\n const bpValue = breakpoints[bpName]?.breakpoint;\n if (!bpValue) continue;\n const prefix = `max-[${bpValue}px]:`;\n const { classes, dynamicStyles } = stylesToTailwind(bpStyle);\n allClasses.push(...classes.map(cls => `${prefix}${cls}`));\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n } else {\n // Flat style object \u2014 treat as base\n const { classes, dynamicStyles } = stylesToTailwind(style as StyleObject);\n allClasses.push(...classes);\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n return { classes: allClasses, dynamicStyles: allDynamicStyles };\n}\n", "/**\n * Core converter: ComponentNode \u2192 Astro template markup\n * Recursively walks JSON node trees and emits Astro template syntax.\n */\n\nimport type {\n ComponentNode,\n ComponentDefinition,\n StructuredComponentDefinition,\n PropDefinition,\n HtmlNode,\n ComponentInstanceNode,\n SlotMarker,\n EmbedNode,\n LinkNode,\n LocaleListNode,\n I18nConfig,\n CMSSchema,\n ListNode,\n} from '../../shared/types';\nimport { singularize } from '../../shared/types';\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n InteractiveStyles,\n LinkMapping,\n HtmlMapping,\n} from '../../shared/types/styles';\nimport { responsiveStylesToTailwind, propertyToTailwind } from './tailwindMapper';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { generateElementClassName, type ElementClassContext } from '../../shared/elementClassName';\nimport { isVoidElement, hasIf, hasChildren, isSlotContent as isSlotContentNode } from '../../shared/nodeUtils';\nimport { NODE_TYPE, RAW_HTML_PREFIX } from '../../shared/constants';\nimport { extractInteractiveStyleMappings, hasInteractiveStyleMappings } from '../../shared/interactiveStyleMappings';\nimport type { ImageMetadataMap } from '../ssr/imageMetadata';\nimport { isI18nValue, resolveI18nValue, DEFAULT_I18N_CONFIG, buildLocalizedPath } from '../../shared/i18n';\nimport { transformCMSTemplate, isTemplateExpression, transformItemTemplate, replaceItemMetaVars, rewriteItemVar } from './templateTransformer';\nimport type { SlugMap } from '../../shared/slugTranslator';\nimport { buildSlugIndex, translatePath } from '../../shared/slugTranslator';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface AstroEmitContext {\n /** Component names collected for import statements */\n imports: Set<string>;\n /** true = inside component definition (use prop refs) */\n isComponentDef: boolean;\n /** Available props when in component */\n componentProps: Record<string, PropDefinition>;\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** Current indentation level */\n indent: number;\n /** node path \u2192 SSR HTML for complex nodes */\n ssrFallbacks: Map<string, string>;\n /** Current element path for element class generation */\n elementPath: number[];\n /** File type for element class context */\n fileType: 'component' | 'page';\n /** File name for element class context */\n fileName: string;\n /** Breakpoint config for responsive Tailwind classes */\n breakpoints: BreakpointConfig;\n /** Dynamic tag definitions collected during traversal (for frontmatter) */\n dynamicTags?: Map<string, string>;\n /** Image metadata map for responsive image generation */\n imageMetadataMap?: ImageMetadataMap;\n /** Page locale for resolving i18n values */\n locale?: string;\n /** CMS mode: transform {{cms.field}} to entry data expressions */\n cmsMode?: boolean;\n /** Variable name bound to the CMS entry (default: 'entry') */\n cmsEntryBinding?: string;\n /** Rich-text field names for CMS mode (use Fragment set:html) */\n cmsRichTextFields?: Set<string>;\n /** Current list item iteration variable name */\n listItemBinding?: string;\n /** Extra frontmatter code lines collected during emission */\n frontmatterLines?: string[];\n /** Astro API imports needed (e.g., 'getCollection') */\n astroImports?: Set<string>;\n /** Full i18n config for locale list emission */\n i18nConfig?: I18nConfig;\n /** locale\u2192slug for current page (for locale list links) */\n currentPageSlugMap?: Record<string, string>;\n /** CMS schema for rich-text field detection */\n cmsSchema?: CMSSchema;\n /** Wrap function name for i18n resolution (e.g., 'r') */\n cmsWrapFn?: string;\n /** Default locale for i18n resolver (used in component defs) */\n defaultLocale?: string;\n /** Set to true during emission when an i18n object is encountered in a component def */\n needsI18nResolver?: boolean;\n /** Index variable name for current list .map() callback (e.g., \"itemIndex\") */\n listIndexVar?: string;\n /** Source array expression for current list (e.g., \"items\"), used for itemLast */\n listSourceVar?: string;\n /** Slug mappings for translating internal links */\n slugMappings?: SlugMap[];\n /** I18n default locale (for slug translation) */\n i18nDefaultLocale?: string;\n /** Image format: 'webp' uses plain <img>, 'avif' uses <picture> with AVIF+WebP sources */\n imageFormat?: 'webp' | 'avif';\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction ind(ctx: AstroEmitContext): string {\n return ' '.repeat(ctx.indent);\n}\n\nfunction localizeHref(href: string, ctx: AstroEmitContext): string {\n if (!href.startsWith('/') || href.startsWith('//')) return href;\n const { locale, i18nDefaultLocale, slugMappings } = ctx;\n if (!locale || !i18nDefaultLocale) return href;\n if (slugMappings && slugMappings.length > 0) {\n const slugIndex = buildSlugIndex(slugMappings);\n return translatePath(href, locale, i18nDefaultLocale, i18nDefaultLocale, slugIndex);\n } else if (locale !== i18nDefaultLocale) {\n return buildLocalizedPath(href, locale);\n }\n return href;\n}\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction isLinkMapping(value: unknown): value is LinkMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as LinkMapping)._mapping === true\n );\n}\n\n/**\n * Emit a single attribute key=value, applying CMS/list template transformation if needed.\n */\nfunction emitAttrValue(key: string, value: string, ctx: AstroEmitContext): string {\n if (ctx.cmsMode && /\\{\\{cms\\./.test(value)) {\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = value.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n return `${key}={${w(`${b}.data.${fullMatch[1].trim()}`)}}`;\n }\n const replaced = value.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fp) =>\n `\\${${w(`${b}.data.${fp.trim()}`)}}`\n );\n return `${key}={\\`${replaced}\\`}`;\n }\n if (ctx.listItemBinding && /\\{\\{/.test(value)) {\n const fullMatch = value.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n return `${key}={${expr}}`;\n }\n const replaced = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n trimmed = rewriteItemVar(trimmed, ctx.listItemBinding!);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n return `${key}={\\`${replaced}\\`}`;\n }\n return `${key}=\"${escapeJSX(value)}\"`;\n}\n\nfunction isHtmlMapping(value: unknown): value is HtmlMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as HtmlMapping)._mapping === true\n );\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n/**\n * Escape a string for use in Astro JSX attribute\n */\nfunction escapeJSX(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n/**\n * Escape a string for use inside a JS template literal\n */\nfunction escapeTemplateLiteral(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n\n/**\n * Get all style mappings from a style value, collecting { prop, property, values } tuples\n */\nfunction collectStyleMappings(\n style: StyleObject | ResponsiveStyleObject | undefined\n): Array<{ property: string; mapping: StyleMapping; breakpoint?: string }> {\n if (!style) return [];\n const result: Array<{ property: string; mapping: StyleMapping; breakpoint?: string }> = [];\n\n if (isResponsiveStyle(style)) {\n const responsive = style as ResponsiveStyleObject;\n for (const [bp, bpStyle] of Object.entries(responsive)) {\n if (!bpStyle) continue;\n for (const [prop, value] of Object.entries(bpStyle)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value, breakpoint: bp });\n }\n }\n }\n } else {\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value });\n }\n }\n }\n return result;\n}\n\n/**\n * Convert a style mapping to class:list conditional entries.\n * For each value in the mapping, generates the utility class name and a ternary.\n */\nfunction mappingToClassListEntries(\n mapping: StyleMapping,\n property: string,\n breakpointPrefix: string,\n ctx: AstroEmitContext\n): string[] {\n const entries: string[] = [];\n const values = Object.entries(mapping.values);\n if (values.length === 0) return entries;\n\n // Generate utility class for each possible value\n const propRef = ctx.isComponentDef ? mapping.prop : mapping.prop;\n\n if (values.length === 2) {\n const [[val1, css1], [val2, css2]] = values;\n // Generate Tailwind classes for each possible mapping value\n const cls1 = getClassForValue(property, css1, breakpointPrefix);\n const cls2 = getClassForValue(property, css2, breakpointPrefix);\n if (cls1 && cls2) {\n // Use String() coercion so number props match string mapping keys (e.g., size=2 matches \"2\")\n entries.push(`String(${propRef}) === ${JSON.stringify(String(coerceValue(val1)))} ? '${cls1}' : '${cls2}'`);\n }\n } else {\n // Multiple values: use a lookup object or multiple ternaries\n for (const [val, cssValue] of values) {\n const cls = getClassForValue(property, cssValue, breakpointPrefix);\n if (cls) {\n entries.push(`String(${propRef}) === ${JSON.stringify(String(coerceValue(val)))} && '${cls}'`);\n }\n }\n }\n\n return entries;\n}\n\n/**\n * Convert a mapping key to the right JS type (booleans stay booleans)\n */\nfunction coerceValue(val: string): string | boolean {\n if (val === 'true') return true;\n if (val === 'false') return false;\n return val;\n}\n\n/**\n * Generate a Tailwind class name for a single property:value pair\n */\nfunction getClassForValue(\n property: string,\n value: string | number,\n breakpointPrefix: string\n): string | null {\n const twClass = propertyToTailwind(property, value);\n if (!twClass) return null;\n return breakpointPrefix ? `${breakpointPrefix}${twClass}` : twClass;\n}\n\n/**\n * Build the class list for a node, handling static Tailwind classes and mapping-based conditionals.\n * Also returns a style attribute string for dynamic (template-expression) styles.\n */\nfunction buildClassAndStyleExpression(\n style: StyleObject | ResponsiveStyleObject | undefined,\n interactiveStyles: InteractiveStyles | undefined,\n elementClass: string | null,\n ctx: AstroEmitContext\n): { classExpr: string; styleAttr: string } {\n // Static Tailwind classes from non-mapping styles\n const result = style\n ? responsiveStylesToTailwind(style, ctx.breakpoints)\n : { classes: [], dynamicStyles: {} };\n const staticClasses = result.classes;\n const dynamicStyles = result.dynamicStyles;\n\n // Add element class for interactive styles\n if (elementClass) {\n staticClasses.unshift(elementClass);\n }\n\n // Collect mapping-based conditionals\n const conditionals: string[] = [];\n const mappings = collectStyleMappings(style);\n\n for (const { property, mapping, breakpoint } of mappings) {\n const bpValue = breakpoint === 'tablet'\n ? ctx.breakpoints.tablet?.breakpoint ?? 1024\n : breakpoint === 'mobile'\n ? ctx.breakpoints.mobile?.breakpoint ?? 540\n : 0;\n const prefix = bpValue ? `max-[${bpValue}px]:` : '';\n const entries = mappingToClassListEntries(mapping, property, prefix, ctx);\n conditionals.push(...entries);\n }\n\n // Build style attribute for dynamic (template expression) styles\n let styleAttr = '';\n if (Object.keys(dynamicStyles).length > 0 && ctx.isComponentDef) {\n const styleParts: string[] = [];\n for (const [cssProp, value] of Object.entries(dynamicStyles)) {\n // Convert {{propName}} to Astro expression in style\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n styleParts.push(`${cssProp}: \\${${resolved.includes('${') ? resolved.replace(/\\$\\{(.+?)\\}/g, '$1') : `'${resolved}'`}}`);\n }\n // Build as template literal style attribute\n const entries: string[] = [];\n for (const [cssProp, value] of Object.entries(dynamicStyles)) {\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n entries.push(`${cssProp}: ${resolved}`);\n }\n styleAttr = ` style={\\`${entries.join('; ')}\\`}`;\n }\n\n // Handle interactive style mappings: emit --is-N CSS variables as inline style\n if (interactiveStyles && interactiveStyles.length > 0 && ctx.isComponentDef && hasInteractiveStyleMappings(interactiveStyles)) {\n const { mappings } = extractInteractiveStyleMappings(interactiveStyles);\n if (mappings.length > 0) {\n // Group mappings by prop for efficient ternary generation\n const varParts: string[] = [];\n for (const extracted of mappings) {\n const { mapping, variableIndex } = extracted;\n const varName = `--is-${variableIndex}`;\n const entries = Object.entries(mapping.values);\n\n if (entries.length === 2) {\n const [[val1, css1], [val2, css2]] = entries;\n varParts.push(`'${varName}': ${mapping.prop} === ${JSON.stringify(coerceValue(val1))} ? '${css1}' : '${css2}'`);\n } else {\n // Build a lookup object inline\n const lookupEntries = entries\n .filter(([, v]) => v !== '')\n .map(([k, v]) => `${JSON.stringify(coerceValue(k))}: '${v}'`)\n .join(', ');\n varParts.push(`'${varName}': ({${lookupEntries}})[${mapping.prop}] || ''`);\n }\n }\n\n // Merge with existing dynamic styles\n if (varParts.length > 0) {\n const existingStyleParts = styleAttr\n ? styleAttr.replace(/^ style=\\{`/, '').replace(/`\\}$/, '')\n : '';\n const varStyleExpr = varParts.join(', ');\n if (existingStyleParts) {\n styleAttr = ` style={\\`${existingStyleParts}; \\${ Object.entries({${varStyleExpr}}).map(([k,v]) => \\`\\${k}:\\${v}\\`).join(';') }\\`}`;\n } else {\n styleAttr = ` style={Object.entries({${varStyleExpr}}).map(([k,v]) => \\`\\${k}:\\${v}\\`).join(';')}`;\n }\n }\n }\n }\n\n let classExpr: string;\n if (conditionals.length === 0) {\n // Pure static classes\n if (staticClasses.length === 0) {\n classExpr = '';\n } else {\n classExpr = ` class=\"${staticClasses.join(' ')}\"`;\n }\n } else {\n // Use class:list with both static and dynamic\n const parts: string[] = [];\n if (staticClasses.length > 0) {\n parts.push(`'${staticClasses.join(' ')}'`);\n }\n parts.push(...conditionals);\n classExpr = ` class:list={[${parts.join(', ')}]}`;\n }\n\n return { classExpr, styleAttr };\n}\n\n/**\n * Convert {{propName}} template to Astro expression\n */\nfunction resolveTemplate(text: string, ctx: AstroEmitContext): string {\n if (!ctx.isComponentDef) {\n // In page context, templates can't be resolved - return literal\n return text;\n }\n // Check if entire text is a single {{expression}}\n const fullMatch = text.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let propName = fullMatch[1].trim();\n if (ctx.listItemBinding) propName = rewriteItemVar(propName, ctx.listItemBinding);\n if (ctx.listIndexVar) propName = replaceItemMetaVars(propName, ctx.listIndexVar, ctx.listSourceVar);\n // Rich-text props contain HTML - render unescaped via set:html\n if (ctx.componentProps[propName]?.type === 'rich-text') {\n return `<Fragment set:html={${propName}} />`;\n }\n return `{${propName}}`;\n }\n // Mixed content: replace each {{expr}} with {expr}\n return text.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `{${trimmed}}`;\n });\n}\n\n/**\n * Check if text contains template expressions\n */\nfunction hasTemplates(text: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(text);\n}\n\n/**\n * Build element class name for interactive styles\n */\nfunction buildElementClass(\n ctx: AstroEmitContext,\n label: string | undefined\n): string {\n return generateElementClassName({\n fileType: ctx.fileType,\n fileName: ctx.fileName,\n label,\n path: ctx.elementPath,\n });\n}\n\n/**\n * Build HTML attributes string from node attributes\n */\nfunction buildAttributesString(\n attributes: Record<string, string | number | boolean> | undefined,\n ctx: AstroEmitContext\n): string {\n if (!attributes) return '';\n const parts: string[] = [];\n for (const [key, value] of Object.entries(attributes)) {\n if (typeof value === 'boolean') {\n if (value) parts.push(key);\n } else {\n const strVal = String(value);\n if (hasTemplates(strVal) && ctx.isComponentDef) {\n // Check if entire value is a single {{expression}}\n const fullMatch = strVal.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n const propDef = ctx.componentProps[expr];\n if (propDef && propDef.type === 'link') {\n parts.push(`${key}={${expr}?.href ?? \"#\"}`);\n } else {\n parts.push(`${key}={${expr} || undefined}`);\n }\n } else {\n // Mixed content: use template literal\n const resolved = strVal.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n const pd = ctx.componentProps[trimmed];\n return pd?.type === 'link' ? `\\${${trimmed}?.href ?? \"#\"}` : `\\${${trimmed}}`;\n });\n parts.push(`${key}={\\`${resolved}\\`}`);\n }\n } else if (ctx.listItemBinding && hasTemplates(strVal)) {\n // List item binding: transform {{item.field}} in attributes\n const fullMatch = strVal.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n parts.push(`${key}={${expr} || undefined}`);\n } else {\n const resolved = strVal.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n trimmed = rewriteItemVar(trimmed, ctx.listItemBinding!);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n parts.push(`${key}={\\`${resolved}\\`}`);\n }\n } else if (ctx.cmsMode && /\\{\\{cms\\./.test(strVal)) {\n // CMS mode: transform {{cms.field}} in attributes\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = strVal.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n parts.push(`${key}={${w(`${b}.data.${fullMatch[1].trim()}`)}}`);\n } else {\n const replaced = strVal.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${b}.data.${fieldPath.trim()}`)}}`;\n });\n parts.push(`${key}={\\`${replaced}\\`}`);\n }\n } else {\n parts.push(`${key}=\"${escapeJSX(strVal)}\"`);\n }\n }\n }\n return parts.length > 0 ? ' ' + parts.join(' ') : '';\n}\n\n/**\n * Format a prop value for Astro template usage\n */\nfunction formatPropValue(value: unknown): string {\n if (typeof value === 'string') return `\"${escapeJSX(value)}\"`;\n if (typeof value === 'number') return `{${value}}`;\n if (typeof value === 'boolean') return `{${value}}`;\n if (value === null || value === undefined) return `{undefined}`;\n // Objects/arrays\n return `{${JSON.stringify(value)}}`;\n}\n\n// ---------------------------------------------------------------------------\n// Main recursive converter\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve an i18n value to a locale string using the context locale.\n * Returns the original value unchanged if it's not an i18n object or no locale is set.\n */\nfunction resolveI18n(value: unknown, ctx: AstroEmitContext): unknown {\n if (ctx.locale && isI18nValue(value)) {\n return resolveI18nValue(value, ctx.locale, DEFAULT_I18N_CONFIG);\n }\n return value;\n}\n\n/**\n * Convert a ComponentNode tree to Astro template markup\n */\nexport function nodeToAstro(\n node: ComponentNode | ComponentNode[] | string | number | null | undefined,\n ctx: AstroEmitContext\n): string {\n if (node === null || node === undefined) return '';\n\n // Resolve i18n objects to locale strings before further processing\n if (typeof node === 'object' && !Array.isArray(node) && isI18nValue(node)) {\n const resolved = resolveI18n(node, ctx);\n if (typeof resolved === 'string') {\n return `${ind(ctx)}${escapeJSX(resolved)}\\n`;\n }\n // In component def without locale: wrap with r() resolver\n if (ctx.isComponentDef && isI18nValue(resolved)) {\n ctx.needsI18nResolver = true;\n return `${ind(ctx)}{r(${JSON.stringify(resolved)})}\\n`;\n }\n // If resolution returned a non-string (e.g. array), stringify it\n return `${ind(ctx)}${String(resolved ?? '')}\\n`;\n }\n\n // Text/number\n if (typeof node === 'string') {\n // CMS mode: transform {{cms.field}} expressions to entry data access\n if (ctx.cmsMode && isTemplateExpression(node) && /\\{\\{cms\\./.test(node)) {\n const transformed = transformCMSTemplate(node, ctx.cmsEntryBinding || 'entry', ctx.cmsRichTextFields, ctx.cmsWrapFn);\n return `${ind(ctx)}${transformed}\\n`;\n }\n // List item binding: transform {{item.field}} expressions\n if (ctx.listItemBinding && isTemplateExpression(node)) {\n const transformed = transformItemTemplate(node, ctx.listItemBinding, ctx.listIndexVar, ctx.listSourceVar);\n return `${ind(ctx)}${transformed}\\n`;\n }\n if (hasTemplates(node) && ctx.isComponentDef) {\n return `${ind(ctx)}${resolveTemplate(node, ctx)}\\n`;\n }\n // Raw HTML marker (from rich-text fields) - render unescaped via set:html\n if (node.startsWith(RAW_HTML_PREFIX)) {\n const rawHtml = node.slice(RAW_HTML_PREFIX.length);\n return `${ind(ctx)}<Fragment set:html={\\`${escapeTemplateLiteral(rawHtml)}\\`} />\\n`;\n }\n return `${ind(ctx)}${escapeJSX(node)}\\n`;\n }\n if (typeof node === 'number') {\n return `${ind(ctx)}${node}\\n`;\n }\n\n // Array of nodes \u2013 replace the last path segment (matches SSR renderer's top-level array convention)\n if (Array.isArray(node)) {\n let result = '';\n for (let i = 0; i < node.length; i++) {\n const child = node[i];\n const savedPath = [...ctx.elementPath];\n ctx.elementPath = [...ctx.elementPath.slice(0, -1), i];\n result += nodeToAstro(child, ctx);\n ctx.elementPath = savedPath;\n }\n return result;\n }\n\n // Dispatch by node type (cast to string for legacy type values like 'cms-list', 'image')\n switch (node.type as string) {\n case NODE_TYPE.NODE:\n return emitHtmlNode(node as HtmlNode, ctx);\n case NODE_TYPE.COMPONENT:\n return emitComponentInstance(node as ComponentInstanceNode, ctx);\n case NODE_TYPE.SLOT:\n return emitSlotMarker(node as SlotMarker, ctx);\n case NODE_TYPE.EMBED:\n return emitEmbedNode(node as EmbedNode, ctx);\n case NODE_TYPE.LINK:\n return emitLinkNode(node as LinkNode, ctx);\n case NODE_TYPE.LOCALE_LIST:\n return emitLocaleListNode(node as LocaleListNode, ctx);\n case NODE_TYPE.LIST:\n case 'cms-list':\n return emitListNode(node as ListNode, ctx);\n case 'image':\n return emitImageTypeNode(node, ctx);\n default:\n return emitFallback(ctx);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Node type emitters\n// ---------------------------------------------------------------------------\n\n/**\n * Tailwind class prefixes that belong on the <img> element (not the <picture> wrapper).\n * These correspond to image-specific visual properties.\n */\nconst IMG_TAILWIND_PREFIXES = ['object-', 'rounded', 'border', 'shadow', '[filter', '[transform', 'mix-blend'];\nconst IMG_OPACITY_PATTERN = /^opacity-/;\n\n/**\n * Default sizes attribute for responsive images\n */\nconst DEFAULT_SIZES = '100vw';\n\n/**\n * Split Tailwind classes into picture (layout) and img (visual) groups.\n * Layout classes go on <picture>, image-specific classes go on <img>.\n */\nfunction splitImageClasses(allClasses: string[]): { pictureClasses: string[]; imgClasses: string[] } {\n const imgClasses: string[] = [];\n const pictureClasses: string[] = [];\n\n for (const cls of allClasses) {\n // Strip responsive prefix (e.g., \"md:object-cover\" -> \"object-cover\") for matching\n const baseCls = cls.includes(':') ? cls.split(':').pop()! : cls;\n if (IMG_TAILWIND_PREFIXES.some(p => baseCls.startsWith(p)) || IMG_OPACITY_PATTERN.test(baseCls)) {\n imgClasses.push(cls);\n } else {\n pictureClasses.push(cls);\n }\n }\n\n return { pictureClasses, imgClasses };\n}\n\n/**\n * Emit an <img> node as a <picture> element with AVIF/WebP sources when\n * image metadata is available, or as a plain <img> with srcset otherwise.\n */\nfunction emitImageNode(node: HtmlNode, ctx: AstroEmitContext): string {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n // Element class for interactive styles\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(\n style,\n node.interactiveStyles as InteractiveStyles | undefined,\n elementClass,\n ctx\n );\n\n // Extract image-specific attributes\n const attrs = node.attributes || {};\n const src = attrs.src as string | undefined;\n const alt = attrs.alt as string | undefined;\n const loading = attrs.loading as string | undefined;\n const fetchpriority = attrs.fetchpriority as string | undefined;\n let width = attrs.width as string | number | undefined;\n let height = attrs.height as string | number | undefined;\n const sizes = attrs.sizes as string | undefined;\n\n // Look up image metadata\n const metadata = src ? ctx.imageMetadataMap?.get(String(src)) : undefined;\n\n // Use dimensions from metadata if not explicitly set\n if (metadata) {\n if (width === undefined && metadata.width) width = metadata.width;\n if (height === undefined && metadata.height) height = metadata.height;\n }\n\n const sizesValue = sizes || DEFAULT_SIZES;\n\n // Build remaining attributes (exclude image-specific ones we handle manually)\n const imageSpecificKeys = new Set(['src', 'alt', 'loading', 'width', 'height', 'sizes', 'srcset', 'fetchpriority']);\n const otherAttrs: Record<string, string | number | boolean> = {};\n if (node.attributes) {\n for (const [k, v] of Object.entries(node.attributes)) {\n if (!imageSpecificKeys.has(k)) otherAttrs[k] = v;\n }\n }\n const otherAttrsStr = buildAttributesString(otherAttrs, ctx);\n\n // Build core img attributes (with CMS/list template support)\n let imgAttrs = '';\n if (src) imgAttrs += ` ${emitAttrValue('src', String(src), ctx)}`;\n if (alt !== undefined) imgAttrs += ` ${emitAttrValue('alt', String(alt), ctx)}`;\n if (fetchpriority) imgAttrs += ` fetchpriority=\"${escapeJSX(String(fetchpriority))}\"`;\n if (loading) imgAttrs += ` loading=\"${escapeJSX(String(loading))}\"`;\n if (width !== undefined) imgAttrs += ` width=\"${escapeJSX(String(width))}\"`;\n if (height !== undefined) imgAttrs += ` height=\"${escapeJSX(String(height))}\"`;\n\n // Blur placeholder style\n let blurStyle = '';\n if (metadata?.blurHash) {\n blurStyle = ` style=\"background-image: url(${escapeJSX(metadata.blurHash)}); background-size: cover;\" onload=\"this.style.backgroundImage=''\"`;\n }\n\n // Conditional rendering\n const ifExpr = emitIfOpen(node, ctx);\n const ifClose = emitIfClose(node, ctx);\n\n // If we have AVIF srcset and format allows, render as <picture> with split classes\n if (metadata?.avifSrcset && ctx.imageFormat !== 'webp') {\n // Extract static classes from classExpr for splitting\n const classMatch = classExpr.match(/class=\"([^\"]*)\"/);\n const classListMatch = classExpr.match(/class:list={\\[(.+)\\]}/);\n\n if (classListMatch) {\n // Dynamic class:list - put it all on the picture, img gets none\n // (splitting dynamic classes is too complex; layout on picture is the safer default)\n return (\n `${ifExpr}${ind(ctx)}<picture${classExpr}${styleAttr}>\\n` +\n `${ind(ctx)} <source type=\"image/avif\" srcset=\"${escapeJSX(metadata.avifSrcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <source type=\"image/webp\" srcset=\"${escapeJSX(metadata.srcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <img${imgAttrs}${blurStyle}${otherAttrsStr} />\\n` +\n `${ind(ctx)}</picture>\\n${ifClose}`\n );\n }\n\n const allClasses = classMatch ? classMatch[1].split(/\\s+/).filter(Boolean) : [];\n const { pictureClasses, imgClasses } = splitImageClasses(allClasses);\n\n const pictureClassAttr = pictureClasses.length > 0 ? ` class=\"${pictureClasses.join(' ')}\"` : '';\n const imgClassAttr = imgClasses.length > 0 ? ` class=\"${imgClasses.join(' ')}\"` : '';\n\n return (\n `${ifExpr}${ind(ctx)}<picture${pictureClassAttr}${styleAttr}>\\n` +\n `${ind(ctx)} <source type=\"image/avif\" srcset=\"${escapeJSX(metadata.avifSrcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <source type=\"image/webp\" srcset=\"${escapeJSX(metadata.srcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <img${imgClassAttr}${imgAttrs}${blurStyle}${otherAttrsStr} />\\n` +\n `${ind(ctx)}</picture>\\n${ifClose}`\n );\n }\n\n // Fallback: regular img with WebP srcset if available\n if (metadata?.srcset) {\n imgAttrs += ` srcset=\"${escapeJSX(metadata.srcset)}\"`;\n imgAttrs += ` sizes=\"${escapeJSX(sizesValue)}\"`;\n }\n\n return `${ifExpr}${ind(ctx)}<img${classExpr}${styleAttr}${imgAttrs}${blurStyle}${otherAttrsStr} />\\n${ifClose}`;\n}\n\nfunction emitHtmlNode(node: HtmlNode, ctx: AstroEmitContext): string {\n let tag = node.tag;\n\n // Astro treats capitalized tags as component imports \u2014 lowercase custom tags to avoid this\n if (tag && /^[A-Z]/.test(tag)) {\n tag = tag.toLowerCase();\n }\n\n // Delegate img tags to the image-specific emitter when metadata is available\n if (tag === 'img' && ctx.imageMetadataMap) {\n return emitImageNode(node, ctx);\n }\n\n const label = node.label;\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n // Handle dynamic tags: <h{{size}}> \u2192 define Tag variable in frontmatter, use <Tag> in template\n let isDynamic = false;\n let dynamicTagVar = '';\n if (hasTemplates(tag) && ctx.isComponentDef) {\n isDynamic = true;\n // Generate a unique variable name based on element path\n dynamicTagVar = `Tag_${ctx.elementPath.join('_')}`;\n const resolved = tag.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => `\\${${expr.trim()}}`);\n // Register dynamic tag for frontmatter emission\n if (!ctx.dynamicTags) ctx.dynamicTags = new Map();\n ctx.dynamicTags.set(dynamicTagVar, resolved);\n tag = dynamicTagVar;\n }\n\n // Conditional rendering\n const ifExpr = emitIfOpen(node, ctx);\n\n // Element class for interactive styles\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, label);\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(style, node.interactiveStyles as InteractiveStyles | undefined, elementClass, ctx);\n const attrs = buildAttributesString(node.attributes, ctx);\n\n // Dynamic tags use the variable name directly (capitalized, defined in frontmatter)\n const openClose = isDynamic ? dynamicTagVar : tag;\n\n if (!isDynamic && isVoidElement(tag)) {\n return `${ifExpr}${ind(ctx)}<${tag}${classExpr}${styleAttr}${attrs} />\\n${emitIfClose(node, ctx)}`;\n }\n\n const children = emitChildren(node.children, ctx);\n\n if (!children.trim() && !isDynamic) {\n return `${ifExpr}${ind(ctx)}<${tag}${classExpr}${styleAttr}${attrs} />\\n${emitIfClose(node, ctx)}`;\n }\n\n return (\n `${ifExpr}${ind(ctx)}<${openClose}${classExpr}${styleAttr}${attrs}>\\n` +\n children +\n `${ind(ctx)}</${openClose}>\\n${emitIfClose(node, ctx)}`\n );\n}\n\nfunction emitComponentInstance(node: ComponentInstanceNode, ctx: AstroEmitContext): string {\n const name = node.component;\n ctx.imports.add(name);\n\n const ifExpr = emitIfOpen(node, ctx);\n\n // Build prop expressions\n const propParts: string[] = [];\n if (node.props) {\n for (const [key, rawValue] of Object.entries(node.props)) {\n if (key === 'children') continue;\n\n // Resolve i18n values to the page locale\n const value = resolveI18n(rawValue, ctx);\n\n // Resolve template expressions in string props when inside component def\n if (typeof value === 'string' && hasTemplates(value) && ctx.isComponentDef) {\n const fullMatch = value.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n propParts.push(`${key}={${expr}}`);\n } else {\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n propParts.push(`${key}={\\`${resolved}\\`}`);\n }\n } else if (typeof value === 'string' && ctx.cmsMode && /\\{\\{cms\\./.test(value)) {\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = value.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n propParts.push(`${key}={${w(`${b}.data.${fullMatch[1].trim()}`)}}`);\n } else {\n const replaced = value.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${b}.data.${fieldPath.trim()}`)}}`;\n });\n propParts.push(`${key}={\\`${replaced}\\`}`);\n }\n } else if (ctx.isComponentDef && isI18nValue(value)) {\n // i18n object in component def \u2014 wrap with r() resolver (resolved at runtime via Astro.currentLocale)\n ctx.needsI18nResolver = true;\n propParts.push(`${key}={r(${JSON.stringify(value)})}`);\n } else {\n propParts.push(`${key}=${formatPropValue(value)}`);\n }\n }\n }\n\n // Instance-level style overrides as className (Tailwind)\n if (node.style) {\n const { classes: instanceClasses } = responsiveStylesToTailwind(node.style as StyleObject | ResponsiveStyleObject, ctx.breakpoints);\n if (instanceClasses.length > 0) {\n propParts.push(`class=\"${instanceClasses.join(' ')}\"`);\n }\n }\n\n const propsStr = propParts.length > 0 ? ' ' + propParts.join(' ') : '';\n\n const children = emitChildren(node.children, ctx);\n\n if (!children.trim()) {\n return `${ifExpr}${ind(ctx)}<${name}${propsStr} />\\n${emitIfClose(node, ctx)}`;\n }\n\n return (\n `${ifExpr}${ind(ctx)}<${name}${propsStr}>\\n` +\n children +\n `${ind(ctx)}</${name}>\\n${emitIfClose(node, ctx)}`\n );\n}\n\nfunction emitSlotMarker(node: SlotMarker, ctx: AstroEmitContext): string {\n if (node.default) {\n const defaultContent = emitChildren(node.default as (ComponentNode | string)[] | string | undefined, ctx);\n if (defaultContent.trim()) {\n return (\n `${ind(ctx)}<slot>\\n` +\n defaultContent +\n `${ind(ctx)}</slot>\\n`\n );\n }\n }\n return `${ind(ctx)}<slot />\\n`;\n}\n\nfunction emitEmbedNode(node: EmbedNode, ctx: AstroEmitContext): string {\n const ifExpr = emitIfOpen(node, ctx);\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(style, node.interactiveStyles as InteractiveStyles | undefined, elementClass, ctx);\n const attrs = buildAttributesString(node.attributes, ctx);\n\n // Handle HTML mapping (prop-dependent content)\n if (isHtmlMapping(node.html)) {\n if (ctx.isComponentDef) {\n const propRef = node.html.prop;\n return (\n `${ifExpr}${ind(ctx)}<div${classExpr.replace('\"', '\"oem ') || ' class=\"oem\"'}${attrs}>\\n` +\n `${ind(ctx)} <Fragment set:html={${propRef}} />\\n` +\n `${ind(ctx)}</div>\\n${emitIfClose(node, ctx)}`\n );\n }\n }\n\n // Handle template expressions in HTML string (e.g., \"{{icon}}\")\n if (typeof node.html === 'string' && hasTemplates(node.html) && ctx.isComponentDef) {\n const fullMatch = node.html.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let propRef = fullMatch[1].trim();\n if (ctx.listItemBinding) propRef = rewriteItemVar(propRef, ctx.listItemBinding);\n if (ctx.listIndexVar) propRef = replaceItemMetaVars(propRef, ctx.listIndexVar, ctx.listSourceVar);\n\n let tplClassExpr = classExpr;\n if (!classExpr.includes('oem')) {\n if (classExpr) {\n tplClassExpr = classExpr.replace(/class=\"/, 'class=\"oem ').replace(/class:list={\\['/, \"class:list={['oem \");\n } else {\n tplClassExpr = ' class=\"oem\"';\n }\n }\n\n return (\n `${ifExpr}${ind(ctx)}<div${tplClassExpr}${attrs}>\\n` +\n `${ind(ctx)} <Fragment set:html={${propRef}} />\\n` +\n `${ind(ctx)}</div>\\n${emitIfClose(node, ctx)}`\n );\n }\n }\n\n const htmlStr = typeof node.html === 'string' ? node.html : '';\n const escapedHtml = escapeTemplateLiteral(htmlStr);\n\n // Ensure oem class is present\n let finalClassExpr = classExpr;\n if (!classExpr.includes('oem')) {\n if (classExpr) {\n finalClassExpr = classExpr.replace(/class=\"/, 'class=\"oem ').replace(/class:list={\\['/, \"class:list={['oem \");\n } else {\n finalClassExpr = ' class=\"oem\"';\n }\n }\n\n return (\n `${ifExpr}${ind(ctx)}<div${finalClassExpr}${attrs}>\\n` +\n `${ind(ctx)} <Fragment set:html={\\`${escapedHtml}\\`} />\\n` +\n `${ind(ctx)}</div>\\n${emitIfClose(node, ctx)}`\n );\n}\n\nfunction emitLinkNode(node: LinkNode, ctx: AstroEmitContext): string {\n const ifExpr = emitIfOpen(node, ctx);\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n }\n\n // Build class expression with olink base class\n const { classExpr, styleAttr } = buildClassAndStyleExpression(style, node.interactiveStyles as InteractiveStyles | undefined, elementClass, ctx);\n let finalClassExpr = classExpr;\n if (!classExpr.includes('olink')) {\n if (classExpr) {\n finalClassExpr = classExpr.replace(/class=\"/, 'class=\"olink ').replace(/class:list={\\['/, \"class:list={['olink \");\n } else {\n finalClassExpr = ' class=\"olink\"';\n }\n }\n\n // Resolve i18n on href before processing\n const resolvedHref = resolveI18n(node.href, ctx);\n const nodeHref = resolvedHref as typeof node.href;\n\n // Handle href\n let hrefAttr: string;\n if (isLinkMapping(nodeHref)) {\n if (ctx.isComponentDef) {\n const propRef = (nodeHref as LinkMapping).prop;\n // Link props are objects with {href, target?}\n hrefAttr = ` href={${propRef}?.href ?? \"#\"}`;\n } else {\n hrefAttr = ' href=\"#\"';\n }\n } else {\n const href = typeof nodeHref === 'string' ? nodeHref : '#';\n if (hasTemplates(href) && ctx.isComponentDef) {\n const fullMatch = href.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n const propDef = ctx.componentProps[expr];\n if (propDef && propDef.type === 'link') {\n hrefAttr = ` href={${expr}?.href ?? \"#\"}`;\n } else {\n hrefAttr = ` href={${expr}}`;\n }\n } else {\n const resolved = href.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n const pd = ctx.componentProps[trimmed];\n return pd?.type === 'link' ? `\\${${trimmed}?.href ?? \"#\"}` : `\\${${trimmed}}`;\n });\n hrefAttr = ` href={\\`${resolved}\\`}`;\n }\n } else if (ctx.cmsMode && /\\{\\{cms\\./.test(href)) {\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = href.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n hrefAttr = ` href={${w(`${b}.data.${fullMatch[1].trim()}`)}}`;\n } else {\n const replaced = href.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${b}.data.${fieldPath.trim()}`)}}`;\n });\n hrefAttr = ` href={\\`${replaced}\\`}`;\n }\n } else {\n const localizedHref = localizeHref(href, ctx);\n hrefAttr = ` href=\"${escapeJSX(localizedHref)}\"`;\n }\n }\n\n const attrs = buildAttributesString(node.attributes, ctx);\n const children = emitChildren(node.children, ctx);\n\n if (!children.trim()) {\n return `${ifExpr}${ind(ctx)}<a${hrefAttr}${finalClassExpr}${styleAttr}${attrs} />\\n${emitIfClose(node, ctx)}`;\n }\n\n return (\n `${ifExpr}${ind(ctx)}<a${hrefAttr}${finalClassExpr}${styleAttr}${attrs}>\\n` +\n children +\n `${ind(ctx)}</a>\\n${emitIfClose(node, ctx)}`\n );\n}\n\n/**\n * Emit an \"image\" type node (standalone image, not an HTML img tag)\n * These have src, alt, style directly on the node.\n */\nfunction emitImageTypeNode(node: any, ctx: AstroEmitContext): string {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(\n style,\n node.interactiveStyles as InteractiveStyles | undefined,\n elementClass,\n ctx\n );\n\n const src = node.src as string | undefined;\n const alt = node.alt as string | undefined;\n\n let imgAttrs = '';\n if (src) imgAttrs += ` src=\"${escapeJSX(String(src))}\"`;\n if (alt !== undefined) imgAttrs += ` alt=\"${escapeJSX(String(alt))}\"`;\n\n // Check for image metadata for responsive images\n const metadata = src ? ctx.imageMetadataMap?.get(String(src)) : undefined;\n\n if (metadata) {\n let width = metadata.width;\n let height = metadata.height;\n if (width !== undefined) imgAttrs += ` width=\"${width}\"`;\n if (height !== undefined) imgAttrs += ` height=\"${height}\"`;\n\n let blurStyle = '';\n if (metadata.blurHash) {\n blurStyle = ` style=\"background-image: url(${escapeJSX(metadata.blurHash)}); background-size: cover;\" onload=\"this.style.backgroundImage=''\"`;\n }\n\n const sizesValue = DEFAULT_SIZES;\n\n if (metadata.avifSrcset && ctx.imageFormat !== 'webp') {\n const classMatch = classExpr.match(/class=\"([^\"]*)\"/);\n const allClasses = classMatch ? classMatch[1].split(/\\s+/).filter(Boolean) : [];\n const { pictureClasses, imgClasses } = splitImageClasses(allClasses);\n\n const pictureClassAttr = pictureClasses.length > 0 ? ` class=\"${pictureClasses.join(' ')}\"` : '';\n const imgClassAttr = imgClasses.length > 0 ? ` class=\"${imgClasses.join(' ')}\"` : '';\n\n return (\n `${ind(ctx)}<picture${pictureClassAttr}${styleAttr}>\\n` +\n `${ind(ctx)} <source type=\"image/avif\" srcset=\"${escapeJSX(metadata.avifSrcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <source type=\"image/webp\" srcset=\"${escapeJSX(metadata.srcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <img${imgClassAttr}${imgAttrs}${blurStyle} />\\n` +\n `${ind(ctx)}</picture>\\n`\n );\n }\n\n if (metadata.srcset) {\n imgAttrs += ` srcset=\"${escapeJSX(metadata.srcset)}\"`;\n imgAttrs += ` sizes=\"${escapeJSX(sizesValue)}\"`;\n }\n }\n\n return `${ind(ctx)}<img${classExpr}${styleAttr}${imgAttrs} />\\n`;\n}\n\n/**\n * Emit a list node as native Astro .map() call\n */\nfunction emitListNode(node: ListNode, ctx: AstroEmitContext): string {\n const sourceType = node.sourceType || 'prop';\n const itemAs = node.itemAs || 'item';\n\n if (sourceType === 'collection') {\n return emitCollectionListNode(node, ctx);\n }\n\n // Prop lists only work inside component definitions where the prop is available\n // On pages, the data source doesn't exist at template level - use SSR fallback\n if (!ctx.isComponentDef && !ctx.listItemBinding) {\n return emitFallback(ctx);\n }\n\n // Prop list: emit {items.map((item, index) => (...))}\n // Resolve source: \"{{features}}\" \u2192 \"features\"\n let source = node.source || 'items';\n const templateMatch = source.match(/^\\{\\{(.+)\\}\\}$/);\n if (templateMatch) {\n source = templateMatch[1].trim();\n }\n\n // Build the .map() source expression (compute before children so ctx has it)\n let mapSource = source;\n if (node.offset && node.limit) {\n mapSource = `${source}.slice(${node.offset}, ${node.offset + node.limit})`;\n } else if (node.offset) {\n mapSource = `${source}.slice(${node.offset})`;\n } else if (node.limit) {\n mapSource = `${source}.slice(0, ${node.limit})`;\n }\n\n // Build children with list item binding context\n const indexVar = `${itemAs}Index`;\n const innerCtx: AstroEmitContext = {\n ...ctx,\n indent: ctx.indent + 1,\n listItemBinding: itemAs,\n listIndexVar: indexVar,\n listSourceVar: mapSource,\n elementPath: [...ctx.elementPath, 0],\n };\n\n const children = node.children\n ? (node.children as (ComponentNode | string)[]).map((child, i) => {\n const childCtx = { ...innerCtx, elementPath: [...ctx.elementPath, i] };\n const out = nodeToAstro(child, childCtx);\n if (childCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n }).join('')\n : '';\n\n return (\n `${ind(ctx)}{${mapSource}.map((${itemAs}, ${indexVar}) => (\\n` +\n children +\n `${ind(ctx)}))}\\n`\n );\n}\n\n/**\n * Emit a collection-sourced list node using getCollection() in frontmatter\n */\nfunction emitCollectionListNode(node: ListNode, ctx: AstroEmitContext): string {\n // For collection lists, the data fetching happens in frontmatter\n const source = node.source || '';\n const itemAs = node.itemAs || singularize(source);\n\n // Add frontmatter lines and imports\n if (!ctx.frontmatterLines) ctx.frontmatterLines = [];\n if (!ctx.astroImports) ctx.astroImports = new Set();\n\n ctx.astroImports.add('getCollection');\n\n // Variable name for the collection data\n const collectionVar = `${source}List`;\n\n // Build the collection query with filter/sort/limit\n let queryChain = `await getCollection('${source}')`;\n\n if (node.filter) {\n // Simple filter support\n if (typeof node.filter === 'object' && !Array.isArray(node.filter) && 'field' in node.filter) {\n const f = node.filter as { field: string; operator?: string; value: unknown };\n const op = f.operator || 'eq';\n if (op === 'eq') {\n queryChain += `.then(items => items.filter(e => e.data.${f.field} === ${JSON.stringify(f.value)}))`;\n }\n }\n }\n\n if (node.sort) {\n const sortConfig = Array.isArray(node.sort) ? node.sort[0] : node.sort;\n if (sortConfig) {\n const order = sortConfig.order === 'desc' ? -1 : 1;\n queryChain += `.then(items => items.sort((a, b) => a.data.${sortConfig.field} > b.data.${sortConfig.field} ? ${order} : ${-order}))`;\n }\n }\n\n if (node.offset || node.limit) {\n const start = node.offset || 0;\n const end = node.limit ? start + node.limit : undefined;\n queryChain += `.then(items => items.slice(${start}${end !== undefined ? `, ${end}` : ''}))`;\n }\n\n ctx.frontmatterLines.push(`const ${collectionVar} = ${queryChain};`);\n\n // Build children with item binding\n const indexVar = `${itemAs}Index`;\n const innerCtx: AstroEmitContext = {\n ...ctx,\n indent: ctx.indent + 1,\n listItemBinding: itemAs,\n listIndexVar: indexVar,\n listSourceVar: collectionVar,\n cmsMode: true,\n cmsEntryBinding: itemAs,\n elementPath: [...ctx.elementPath, 0],\n };\n\n const children = node.children\n ? (node.children as (ComponentNode | string)[]).map((child, i) => {\n const childCtx = { ...innerCtx, elementPath: [...ctx.elementPath, i] };\n const out = nodeToAstro(child, childCtx);\n if (childCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n }).join('')\n : '';\n\n return (\n `${ind(ctx)}{${collectionVar}.map((${itemAs}, ${indexVar}) => (\\n` +\n children +\n `${ind(ctx)}))}\\n`\n );\n}\n\n/**\n * Emit a locale list node with static locale links\n * Since locales are known at build time, we emit static HTML\n */\nfunction emitLocaleListNode(node: LocaleListNode, ctx: AstroEmitContext): string {\n // If we don't have i18n config or slug map, fall back to SSR\n if (!ctx.i18nConfig || !ctx.currentPageSlugMap) {\n return emitFallback(ctx);\n }\n\n const i18nConfig = ctx.i18nConfig;\n const slugMap = ctx.currentPageSlugMap;\n const showCurrent = node.showCurrent !== false;\n const showSeparator = node.showSeparator !== false;\n const showFlag = node.showFlag !== false;\n const displayType = node.displayType || 'nativeName';\n\n // Build container classes from style\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if ((node.interactiveStyles && (node.interactiveStyles as InteractiveStyles).length > 0) || node.generateElementClass) {\n elementClass = buildElementClass(ctx, node.label);\n }\n\n const { classExpr: containerClassExpr, styleAttr: containerStyleAttr } = buildClassAndStyleExpression(\n style,\n node.interactiveStyles as InteractiveStyles | undefined,\n elementClass,\n ctx\n );\n\n // Build item classes\n const itemStyle = node.itemStyle as StyleObject | ResponsiveStyleObject | undefined;\n const itemResult = itemStyle ? responsiveStylesToTailwind(itemStyle, ctx.breakpoints) : { classes: [], dynamicStyles: {} };\n const itemClasses = itemResult.classes;\n\n // Build active item classes (item + active combined)\n const activeItemStyle = node.activeItemStyle as StyleObject | ResponsiveStyleObject | undefined;\n const activeResult = activeItemStyle ? responsiveStylesToTailwind(activeItemStyle, ctx.breakpoints) : { classes: [], dynamicStyles: {} };\n const activeItemClasses = [...itemClasses, ...activeResult.classes];\n\n // Build separator classes\n const separatorStyle = node.separatorStyle as StyleObject | ResponsiveStyleObject | undefined;\n const sepResult = separatorStyle ? responsiveStylesToTailwind(separatorStyle, ctx.breakpoints) : { classes: [], dynamicStyles: {} };\n const separatorClasses = sepResult.classes;\n\n // Build locale icon map\n const localeIconMap = new Map<string, string>();\n for (const localeConfig of i18nConfig.locales) {\n if (localeConfig.icon) {\n localeIconMap.set(localeConfig.code, localeConfig.icon);\n }\n }\n\n // Flag classes\n const flagStyle = node.flagStyle as StyleObject | ResponsiveStyleObject | undefined;\n const flagResult = flagStyle ? responsiveStylesToTailwind(flagStyle, ctx.breakpoints) : { classes: [], dynamicStyles: {} };\n const flagClasses = flagResult.classes;\n\n // Build links\n const links: string[] = [];\n const currentLocale = ctx.locale || i18nConfig.defaultLocale;\n\n for (const localeConfig of i18nConfig.locales) {\n const code = localeConfig.code;\n const isCurrent = code === currentLocale;\n\n if (!showCurrent && isCurrent) continue;\n\n const path = slugMap[code] || '/';\n const classes = isCurrent ? activeItemClasses : itemClasses;\n const classAttr = classes.length > 0 ? ` class=\"${classes.join(' ')}\"` : '';\n const currentAttr = isCurrent ? ' data-current=\"true\"' : ' data-current=\"false\"';\n const hreflangAttr = ` hreflang=\"${localeConfig.langTag}\"`;\n\n // Display text\n let displayText: string;\n switch (displayType) {\n case 'code': displayText = code.toUpperCase(); break;\n case 'name': displayText = localeConfig.name; break;\n case 'nativeName': default: displayText = localeConfig.nativeName; break;\n }\n\n // Build link content\n let linkContent = '';\n const localeIcon = localeIconMap.get(code);\n if (showFlag && localeIcon) {\n const flagClassAttr = flagClasses.length > 0 ? ` class=\"${flagClasses.join(' ')}\"` : '';\n linkContent += `<img src=\"${escapeJSX(localeIcon)}\" alt=\"${escapeJSX(localeConfig.nativeName)} flag\"${flagClassAttr}>`;\n }\n linkContent += `<div>${escapeJSX(displayText)}</div>`;\n\n links.push(`${ind(ctx)} <a href=\"${escapeJSX(path)}\"${hreflangAttr}${currentAttr} data-locale=\"${escapeJSX(code)}\"${classAttr}>${linkContent}</a>`);\n }\n\n // Join with separator\n let linksContent: string;\n if (showSeparator && links.length > 1) {\n const sepClassAttr = separatorClasses.length > 0 ? ` class=\"${separatorClasses.join(' ')}\"` : '';\n linksContent = links.join(`\\n${ind(ctx)} <span${sepClassAttr}></span>\\n`);\n } else {\n linksContent = links.join('\\n');\n }\n\n const attrs = buildAttributesString(node.attributes, ctx);\n\n return (\n `${ind(ctx)}<div data-locale-list=\"true\"${containerClassExpr}${containerStyleAttr}${attrs}>\\n` +\n linksContent + '\\n' +\n `${ind(ctx)}</div>\\n`\n );\n}\n\n/**\n * Emit SSR fallback for complex nodes (list, locale-list)\n */\nfunction emitFallback(ctx: AstroEmitContext): string {\n const pathKey = ctx.elementPath.join('.');\n const ssrHtml = ctx.ssrFallbacks.get(pathKey);\n if (ssrHtml) {\n const escaped = escapeTemplateLiteral(ssrHtml);\n return `${ind(ctx)}<Fragment set:html={\\`${escaped}\\`} />\\n`;\n }\n return `${ind(ctx)}{/* Complex node - SSR fallback not available */}\\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Conditional rendering helpers\n// ---------------------------------------------------------------------------\n\nfunction emitIfOpen(node: ComponentNode, ctx: AstroEmitContext): string {\n const ifValue = hasIf(node) ? node.if : undefined;\n if (ifValue === undefined || ifValue === true) return '';\n\n if (typeof ifValue === 'boolean') {\n return ifValue ? '' : `${ind(ctx)}{/* hidden */}\\n`;\n }\n\n // BooleanMapping \u2192 generate conditional from values map\n if (typeof ifValue === 'object' && ifValue._mapping && ctx.isComponentDef) {\n const trueValues = Object.entries(ifValue.values)\n .filter(([, v]) => v === true)\n .map(([k]) => `'${k}'`);\n if (trueValues.length === 0) return `${ind(ctx)}{/* hidden */}\\n`;\n if (trueValues.length === 1) {\n return `${ind(ctx)}{${ifValue.prop} === ${trueValues[0]} && (\\n`;\n }\n return `${ind(ctx)}{[${trueValues.join(', ')}].includes(${ifValue.prop}) && (\\n`;\n }\n\n // String template\n if (typeof ifValue === 'string') {\n // CMS mode: {{cms.field}} \u2192 entry.data.field\n if (ctx.cmsMode && ifValue.includes('{{cms.')) {\n const match = ifValue.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (match) {\n const binding = ctx.cmsEntryBinding || 'entry';\n return `${ind(ctx)}{${binding}.data.${match[1].trim()} && (\\n`;\n }\n }\n\n // List item context: {{item.field}} or {{!itemLast}} etc.\n if (ctx.listItemBinding && /\\{\\{/.test(ifValue)) {\n const match = ifValue.match(/^\\{\\{([^}]+)\\}\\}$/);\n if (match) {\n let expr = match[1].trim();\n expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n return `${ind(ctx)}{${expr} && (\\n`;\n }\n }\n\n // Component prop context\n if (ctx.isComponentDef) {\n const fullMatch = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n if (!fullMatch && !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(ifValue)) {\n // Plain string without template syntax and not a valid identifier \u2014 always truthy, skip conditional\n return '';\n }\n let expr = fullMatch ? fullMatch[1].trim() : ifValue.replace(/\\{\\{(.+?)\\}\\}/g, '$1');\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n return `${ind(ctx)}{${expr} && (\\n`;\n }\n }\n\n return '';\n}\n\nfunction emitIfClose(node: ComponentNode, ctx: AstroEmitContext): string {\n const ifValue = hasIf(node) ? node.if : undefined;\n if (ifValue === undefined || ifValue === true) return '';\n\n if (typeof ifValue === 'boolean') return '';\n\n if (typeof ifValue === 'object' && ifValue._mapping && ctx.isComponentDef) {\n return `${ind(ctx)})}\\n`;\n }\n\n if (typeof ifValue === 'string') {\n const hasCmsCondition = ctx.cmsMode && ifValue.includes('{{cms.');\n const hasItemCondition = ctx.listItemBinding && /\\{\\{/.test(ifValue);\n if (hasCmsCondition || hasItemCondition) {\n return `${ind(ctx)})}\\n`;\n }\n if (ctx.isComponentDef) {\n const fullMatch = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n if (!fullMatch && !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(ifValue)) {\n // Matches the skip in emitIfOpen \u2014 no open brace was emitted\n return '';\n }\n return `${ind(ctx)})}\\n`;\n }\n }\n\n return '';\n}\n\n// ---------------------------------------------------------------------------\n// Children helper\n// ---------------------------------------------------------------------------\n\nfunction emitChildren(\n children: (ComponentNode | string)[] | string | ComponentNode | null | undefined,\n ctx: AstroEmitContext\n): string {\n if (!children) return '';\n\n const innerCtx = { ...ctx, indent: ctx.indent + 1, elementPath: [...ctx.elementPath] };\n\n if (typeof children === 'string') {\n const out = nodeToAstro(children, innerCtx);\n if (innerCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n }\n\n // Iterate children arrays inline with appended index (matches SSR renderer's\n // children iteration which uses [...parentPath, index] for each child)\n if (Array.isArray(children)) {\n let result = '';\n for (let i = 0; i < children.length; i++) {\n const childCtx = { ...innerCtx, elementPath: [...ctx.elementPath, i] };\n result += nodeToAstro(children[i], childCtx);\n if (childCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n }\n return result;\n }\n\n // Single node\n const out = nodeToAstro(children, innerCtx);\n if (innerCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n}\n", "/**\n * CMS Template Expression Transformer for Astro Export\n * Converts {{cms.field}} and {{item.field}} template expressions to Astro expressions\n */\n\n// CMS template pattern (from cmsSSRProcessor.ts)\nconst CMS_TEMPLATE_PATTERN = /\\{\\{cms\\.([^}]+)\\}\\}/g;\n// Item template pattern for list iteration\nconst ITEM_TEMPLATE_PATTERN = /\\{\\{([^}]+)\\}\\}/g;\n\nexport function isTemplateExpression(text: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(text);\n}\n\nexport function transformCMSTemplate(\n text: string,\n binding: string = 'entry',\n richTextFields?: Set<string>,\n wrapFn?: string\n): string {\n const w = (expr: string) => wrapFn ? `${wrapFn}(${expr})` : expr;\n\n // Check if entire text is a single {{cms.field}} expression\n const fullMatch = text.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n const fieldPath = fullMatch[1].trim();\n const topLevelField = fieldPath.split('.')[0];\n\n // Rich-text fields use Fragment set:html\n if (richTextFields?.has(topLevelField)) {\n return `<Fragment set:html={${w(`${binding}.data.${fieldPath}`)}} />`;\n }\n\n return `{${w(`${binding}.data.${fieldPath}`)}}`;\n }\n\n // Mixed content: \"Hello {{cms.name}}\" \u2192 {`Hello ${entry.data.name}`}\n if (CMS_TEMPLATE_PATTERN.test(text)) {\n CMS_TEMPLATE_PATTERN.lastIndex = 0;\n const replaced = text.replace(CMS_TEMPLATE_PATTERN, (_, fieldPath) => {\n return `\\${${w(`${binding}.data.${fieldPath.trim()}`)}}`;\n });\n return `{\\`${replaced}\\`}`;\n }\n\n return text;\n}\n\n/**\n * Replace legacy itemIndex/itemFirst/itemLast meta-variables with\n * the actual .map() callback index parameter name.\n */\n/**\n * Rewrite the default `item.` prefix to the actual .map() parameter name\n * when itemAs differs from 'item' (e.g., itemAs='link' \u2192 item.text \u2192 link.text).\n */\nexport function rewriteItemVar(expr: string, itemVar: string): string {\n if (itemVar === 'item') return expr;\n return expr.replace(/\\bitem\\./g, `${itemVar}.`);\n}\n\nexport function replaceItemMetaVars(expr: string, indexVar: string, sourceVar?: string, itemVar?: string): string {\n const lastExpr = sourceVar\n ? `(${indexVar} === ${sourceVar}.length - 1)`\n : `false /* itemLast not supported */`;\n let result = expr\n .replace(/\\bitemIndex\\b/g, indexVar)\n .replace(/\\bitemFirst\\b/g, `(${indexVar} === 0)`)\n .replace(/\\bitemLast\\b/g, lastExpr);\n if (itemVar) result = rewriteItemVar(result, itemVar);\n return result;\n}\n\nexport function transformItemTemplate(\n text: string,\n itemVar: string = 'item',\n indexVar?: string,\n sourceVar?: string\n): string {\n // Check if entire text is a single {{expression}}\n const fullMatch = text.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n expr = rewriteItemVar(expr, itemVar);\n if (indexVar) expr = replaceItemMetaVars(expr, indexVar, sourceVar);\n // If it contains a dot, it's item.field\n if (expr.startsWith(`${itemVar}.`)) {\n return `{${expr}}`;\n }\n // Bare expression like {{features}} - keep as prop reference\n return `{${expr}}`;\n }\n\n // Mixed content: replace each {{expr}}\n if (ITEM_TEMPLATE_PATTERN.test(text)) {\n ITEM_TEMPLATE_PATTERN.lastIndex = 0;\n const replaced = text.replace(ITEM_TEMPLATE_PATTERN, (_, expr) => {\n let trimmed = expr.trim();\n trimmed = rewriteItemVar(trimmed, itemVar);\n if (indexVar) trimmed = replaceItemMetaVars(trimmed, indexVar, sourceVar);\n return `\\${${trimmed}}`;\n });\n return `{\\`${replaced}\\`}`;\n }\n\n return text;\n}\n", "/**\n * Component File Generator\n * Generates .astro files from StructuredComponentDefinitions\n */\n\nimport type {\n ComponentDefinition,\n StructuredComponentDefinition,\n PropDefinition,\n} from '../../shared/types';\nimport type { BasePropDefinition, ListPropDefinition, LinkPropValue } from '../../shared/types/components';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a PropDefinition to a TypeScript type string\n */\nfunction propDefToTSType(def: PropDefinition): string {\n switch (def.type) {\n case 'string':\n case 'rich-text':\n case 'file':\n return 'string';\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'select':\n if ('options' in def && def.options && def.options.length > 0) {\n return def.options.map((o) => `'${o}'`).join(' | ');\n }\n return 'string';\n case 'link':\n return '{ href: string; target?: string }';\n case 'list':\n return 'any[]';\n default:\n return 'any';\n }\n}\n\n/**\n * Format a default value for destructuring\n */\nfunction formatDefault(def: PropDefinition): string | null {\n if (!('default' in def) || def.default === undefined) return null;\n const val = def.default;\n\n if (typeof val === 'string') return JSON.stringify(val);\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n\n // I18nValue\n if (typeof val === 'object' && val !== null && '_i18n' in val) {\n // Use the first available locale value\n for (const [key, v] of Object.entries(val)) {\n if (key !== '_i18n' && typeof v === 'string') return JSON.stringify(v);\n }\n return null;\n }\n\n // Link value\n if (typeof val === 'object' && val !== null && 'href' in val) {\n return JSON.stringify(val);\n }\n\n // Arrays\n if (Array.isArray(val)) {\n return JSON.stringify(val);\n }\n\n return JSON.stringify(val);\n}\n\n/**\n * Merge the `className` variable onto the root element's class attribute.\n * Handles: class=\"existing\", class:list={[...]}, class={expr}, or no class at all.\n */\nfunction mergeClassNameOntoRoot(template: string): string {\n // Find the first opening tag (skip whitespace/newlines)\n const tagMatch = template.match(/^(\\s*<)(\\w[\\w-]*)([\\s\\S]*?)(\\/?>)/);\n if (!tagMatch) return template;\n\n const [fullMatch, prefix, tagName, attrs, close] = tagMatch;\n\n // Check for existing class:list\n const classListMatch = attrs.match(/\\s+class:list=\\{(\\[[\\s\\S]*?\\])\\}/);\n if (classListMatch) {\n const existingList = classListMatch[1];\n // Append className to the array\n const newList = existingList.replace(/\\]$/, `, className]`);\n const newAttrs = attrs.replace(classListMatch[0], ` class:list={${newList}}`);\n return prefix + tagName + newAttrs + close + template.slice(fullMatch.length);\n }\n\n // Check for existing class=\"...\" (static)\n const classStaticMatch = attrs.match(/\\s+class=\"([^\"]*)\"/);\n if (classStaticMatch) {\n const existing = classStaticMatch[1];\n const newAttrs = attrs.replace(classStaticMatch[0], ` class:list={[\"${existing}\", className]}`);\n return prefix + tagName + newAttrs + close + template.slice(fullMatch.length);\n }\n\n // Check for existing class={expr} (dynamic)\n const classDynMatch = attrs.match(/\\s+class=\\{([^}]+)\\}/);\n if (classDynMatch) {\n const expr = classDynMatch[1];\n const newAttrs = attrs.replace(classDynMatch[0], ` class:list={[${expr}, className]}`);\n return prefix + tagName + newAttrs + close + template.slice(fullMatch.length);\n }\n\n // No existing class \u2014 add class={className}\n return prefix + tagName + ` class={className}` + attrs + close + template.slice(fullMatch.length);\n}\n\n// ---------------------------------------------------------------------------\n// Main emitter\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a .astro file string from a component definition\n */\nexport function emitAstroComponent(\n name: string,\n def: ComponentDefinition,\n allComponents: Record<string, ComponentDefinition>,\n breakpoints: BreakpointConfig = DEFAULT_BREAKPOINTS,\n defaultLocale: string = 'en'\n): string {\n const comp = def.component;\n const propDefs = comp.interface || {};\n const structure = comp.structure;\n\n if (!structure) {\n // Component with no structure - just CSS/JS\n return buildNoStructureComponent(name, comp);\n }\n\n // Build the Astro context for template emission\n const ctx: AstroEmitContext = {\n imports: new Set<string>(),\n isComponentDef: true,\n componentProps: propDefs,\n globalComponents: allComponents,\n indent: 0,\n ssrFallbacks: new Map(),\n elementPath: [0],\n fileType: 'component',\n fileName: name,\n breakpoints,\n defaultLocale,\n };\n\n // Emit the template body\n let templateBody = nodeToAstro(structure, ctx);\n\n // Merge instance className onto the root element (for acceptsStyles support)\n templateBody = mergeClassNameOntoRoot(templateBody);\n\n // Build frontmatter (includes class prop for instance style support)\n const frontmatter = buildFrontmatter(name, propDefs, ctx.imports, ctx.dynamicTags, ctx.needsI18nResolver ? defaultLocale : undefined);\n\n // Build style/script sections\n const styleSection = comp.css ? `\\n<style>\\n${comp.css}\\n</style>\\n` : '';\n const scriptSection = comp.javascript\n ? buildScriptSection(comp.javascript, comp, propDefs)\n : '';\n\n return `---\\n${frontmatter}---\\n${templateBody}${styleSection}${scriptSection}`;\n}\n\n/**\n * Build the frontmatter section (imports, Props interface, destructuring)\n */\nfunction buildFrontmatter(\n componentName: string,\n propDefs: Record<string, PropDefinition>,\n imports: Set<string>,\n dynamicTags?: Map<string, string>,\n i18nDefaultLocale?: string\n): string {\n const lines: string[] = [];\n\n // Component imports\n for (const imp of Array.from(imports).sort()) {\n lines.push(`import ${imp} from './${imp}.astro';`);\n }\n\n if (lines.length > 0) lines.push('');\n\n const propEntries = Object.entries(propDefs);\n\n // Always generate Props interface and destructuring (at minimum for class prop)\n {\n // Interface\n lines.push('interface Props {');\n for (const [propName, propDef] of propEntries) {\n if (propName === 'children') continue;\n const tsType = propDefToTSType(propDef);\n const optional = 'default' in propDef && propDef.default !== undefined;\n lines.push(` ${propName}${optional ? '?' : ''}: ${tsType};`);\n }\n // Always include class prop for instance style support\n lines.push(' class?: string;');\n lines.push('}');\n lines.push('');\n\n // Destructuring with defaults\n const destructParts: string[] = [];\n for (const [propName, propDef] of propEntries) {\n if (propName === 'children') continue;\n const defaultVal = formatDefault(propDef);\n if (defaultVal !== null) {\n destructParts.push(`${propName} = ${defaultVal}`);\n } else if (propDef.type === 'link') {\n destructParts.push(`${propName} = { href: \"#\" }`);\n } else {\n destructParts.push(propName);\n }\n }\n\n // Always include class prop (renamed to className to avoid reserved word)\n destructParts.push('class: className = \"\"');\n\n if (destructParts.length <= 3 && destructParts.join(', ').length < 80) {\n lines.push(`const { ${destructParts.join(', ')} } = Astro.props;`);\n } else {\n lines.push('const {');\n for (const part of destructParts) {\n lines.push(` ${part},`);\n }\n lines.push('} = Astro.props;');\n }\n }\n\n // Dynamic tag definitions (e.g., const Tag_0_0 = `h${size}`)\n if (dynamicTags && dynamicTags.size > 0) {\n lines.push('');\n for (const [varName, templateExpr] of dynamicTags) {\n lines.push(`const ${varName} = \\`${templateExpr}\\`;`);\n }\n }\n\n // i18n resolver helper \u2014 resolves { _i18n: true, en: \"...\", pl: \"...\" } at runtime\n if (i18nDefaultLocale) {\n lines.push('');\n lines.push(`const r = (v: any) => {`);\n lines.push(` if (v && typeof v === 'object' && v._i18n) {`);\n lines.push(` const locale = Astro.currentLocale ?? '${i18nDefaultLocale}';`);\n lines.push(` return v[locale] ?? v['${i18nDefaultLocale}'] ?? Object.values(v).find((s: any) => typeof s === 'string' && s !== '') ?? '';`);\n lines.push(` }`);\n lines.push(` return v ?? '';`);\n lines.push(`};`);\n }\n\n if (lines.length > 0) lines.push('');\n return lines.join('\\n');\n}\n\n/**\n * Build a component with no structure (CSS/JS only)\n */\nfunction buildNoStructureComponent(\n name: string,\n comp: StructuredComponentDefinition\n): string {\n let content = '---\\n---\\n<slot />\\n';\n if (comp.css) content += `\\n<style>\\n${comp.css}\\n</style>\\n`;\n if (comp.javascript) content += `\\n<script is:inline>\\n${comp.javascript}\\n</script>\\n`;\n return content;\n}\n\n/**\n * Transform JS for define:vars compatibility.\n * Astro's define:vars injects each prop as a script-scope variable, not a `props` object.\n * This function:\n * 1. Removes `const/let/var { x, y } = props;` destructuring lines\n * 2. Replaces `props.X` references with direct `X` variable access\n * 3. Drops `var/let/const` from redeclarations of define:vars variables\n */\nfunction transformDefineVarsJS(js: string, varNames: string[]): string {\n let result = js;\n\n // 1. Remove destructuring from props: `const { x, y } = props;`\n result = result.replace(\n /^\\s*(const|let|var)\\s+\\{([^}]+)\\}\\s*=\\s*props\\s*;?\\s*$/gm,\n (match, _keyword, inner) => {\n const names = inner.split(',').map((s: string) => s.trim()).filter(Boolean);\n if (names.every((n: string) => varNames.includes(n))) return '';\n return match;\n }\n );\n\n // 2. Replace `props.X` with `X` (longest names first to avoid substring conflicts)\n const sorted = [...varNames].sort((a, b) => b.length - a.length);\n for (const name of sorted) {\n result = result.replace(new RegExp(`props\\\\.${name}\\\\b`, 'g'), name);\n }\n\n // 3. Remove redeclarations of define:vars variables (already injected as const by Astro)\n for (const name of varNames) {\n result = result.replace(\n new RegExp(`^\\\\s*(var|let|const)\\\\s+${name}\\\\s*=[^;]*;?\\\\s*$`, 'gm'),\n ''\n );\n }\n\n return result;\n}\n\n/**\n * Build the script section with proper el/props initialization.\n * - defineVars components: use Astro's define:vars to pass props into inline script\n * - other components: use is:inline to avoid module bundling\n * Both cases use document.currentScript.previousElementSibling to get el.\n */\nfunction buildScriptSection(\n js: string,\n comp: StructuredComponentDefinition,\n propDefs: Record<string, PropDefinition>\n): string {\n const elInit = 'const el = document.currentScript.previousElementSibling;';\n\n if (comp.defineVars) {\n const vars = comp.defineVars === true\n ? Object.keys(propDefs).filter(k => k !== 'children')\n : comp.defineVars;\n\n if (vars.length > 0) {\n const transformedJS = transformDefineVarsJS(js, vars);\n const defineVarsObj = `{ ${vars.join(', ')} }`;\n return `\\n<script define:vars={${defineVarsObj}}>\\n${elInit}\\n${transformedJS}\\n</script>\\n`;\n }\n }\n\n return `\\n<script is:inline>\\n${elInit}\\n${js}\\n</script>\\n`;\n}\n", "/**\n * Page File Generator\n * Generates .astro page files that import and compose components\n */\n\nimport type { JSONPage, ComponentDefinition, I18nConfig } from '../../shared/types';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\nimport type { ImageMetadataMap } from '../ssr/imageMetadata';\nimport type { SlugMap } from '../../shared/slugTranslator';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PageEmitOptions {\n /** Page data */\n pageData: JSONPage;\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** Page title */\n title: string;\n /** Page meta HTML */\n meta: string;\n /** Locale */\n locale: string;\n /** Default theme */\n theme: string;\n /** Font preloads HTML */\n fontPreloads: string;\n /** Library tags */\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string };\n /** Script paths */\n scriptPaths: string[];\n /** Import path to BaseLayout */\n layoutImportPath: string;\n /** File depth relative to src/pages */\n fileDepth: number;\n /** SSR HTML fallbacks: node path \u2192 rendered HTML (for ListNode, LocaleListNode) */\n ssrFallbacks: Map<string, string>;\n /** Page name (without extension) */\n pageName: string;\n /** Breakpoint config for responsive Tailwind classes */\n breakpoints?: BreakpointConfig;\n /** Image metadata map for responsive image generation */\n imageMetadataMap?: ImageMetadataMap;\n /** I18n config for locale list rendering */\n i18nConfig?: I18nConfig;\n /** Locale\u2192slug map for current page (for locale list links) */\n currentPageSlugMap?: Record<string, string>;\n /** Slug mappings for translating internal link hrefs */\n slugMappings?: SlugMap[];\n /** Image format: 'webp' uses plain <img>, 'avif' uses <picture> */\n imageFormat?: 'webp' | 'avif';\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction escapeTemplateLiteral(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n\nfunction escapeJSX(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n}\n\n/**\n * Compute relative import path from page to components directory\n */\nfunction componentImportPath(fileDepth: number, componentName: string): string {\n // fileDepth 0 = src/pages/index.astro \u2192 ../components/X.astro\n // fileDepth 1 = src/pages/en/index.astro \u2192 ../../components/X.astro\n const ups = '../'.repeat(fileDepth + 1);\n return `${ups}components/${componentName}.astro`;\n}\n\n// ---------------------------------------------------------------------------\n// Main emitter\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a page .astro file from page data with component imports\n */\nexport function emitAstroPage(options: PageEmitOptions): string {\n const {\n pageData,\n globalComponents,\n title,\n meta,\n locale,\n theme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath,\n fileDepth,\n ssrFallbacks,\n pageName,\n breakpoints: breakpointsOpt,\n imageMetadataMap,\n i18nConfig,\n currentPageSlugMap,\n slugMappings,\n imageFormat,\n } = options;\n\n const breakpoints = breakpointsOpt ?? DEFAULT_BREAKPOINTS;\n\n const root = pageData.root;\n if (!root) {\n // Empty page - just layout wrapper\n return buildEmptyPage(layoutImportPath, title, meta, locale, theme, fontPreloads, libraryTags, scriptPaths);\n }\n\n // Build the Astro emit context\n const ctx: AstroEmitContext = {\n imports: new Set<string>(),\n isComponentDef: false,\n componentProps: {},\n globalComponents,\n indent: 1, // inside BaseLayout\n ssrFallbacks,\n elementPath: [0],\n fileType: 'page',\n fileName: pageName,\n breakpoints,\n imageMetadataMap,\n locale,\n i18nConfig,\n currentPageSlugMap,\n frontmatterLines: [],\n astroImports: new Set<string>(),\n slugMappings,\n i18nDefaultLocale: i18nConfig?.defaultLocale,\n imageFormat,\n };\n\n // Emit the template body\n const templateBody = nodeToAstro(root, ctx);\n\n // Build frontmatter with imports\n const importLines: string[] = [];\n\n // Add Astro API imports (e.g., getCollection) if collected during emission\n if (ctx.astroImports && ctx.astroImports.size > 0) {\n const astroImports = Array.from(ctx.astroImports);\n importLines.push(`import { ${astroImports.join(', ')} } from 'astro:content';`);\n }\n\n importLines.push(`import BaseLayout from '${layoutImportPath}';`);\n\n // Sort component imports alphabetically\n const componentImports = Array.from(ctx.imports).sort();\n for (const comp of componentImports) {\n const path = componentImportPath(fileDepth, comp);\n importLines.push(`import ${comp} from '${path}';`);\n }\n\n // Build script paths array\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n\n // Build library tags literal\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n const escapedMeta = escapeTemplateLiteral(meta);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n\n // Collect frontmatter lines from list emission (e.g., getCollection calls)\n const extraFrontmatter = ctx.frontmatterLines && ctx.frontmatterLines.length > 0\n ? '\\n' + ctx.frontmatterLines.join('\\n')\n : '';\n\n return `---\n${importLines.join('\\n')}${extraFrontmatter}\n---\n<BaseLayout\n title=\"${escapeJSX(title)}\"\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n <div id=\"root\">\n${templateBody} </div>\n</BaseLayout>\n`;\n}\n\n/**\n * Build an empty page with just the layout wrapper\n */\nfunction buildEmptyPage(\n layoutImport: string,\n title: string,\n meta: string,\n locale: string,\n theme: string,\n fontPreloads: string,\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string },\n scriptPaths: string[]\n): string {\n const escapedMeta = escapeTemplateLiteral(meta);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n return `---\nimport BaseLayout from '${layoutImport}';\n---\n<BaseLayout\n title=\"${escapeJSX(title)}\"\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n</BaseLayout>\n`;\n}\n", "/**\n * CMS Page File Generator\n * Generates .astro page files for CMS template pages with getStaticPaths()\n */\n\nimport type { JSONPage, ComponentDefinition, CMSSchema, I18nConfig } from '../../shared/types';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\nimport { transformCMSTemplate } from './templateTransformer';\nimport type { ImageMetadataMap } from '../ssr/imageMetadata';\nimport type { SlugMap } from '../../shared/slugTranslator';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface CMSPageEmitOptions {\n /** Page data */\n pageData: JSONPage;\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** CMS collection schema */\n cmsSchema: CMSSchema;\n /** Page title (may contain {{cms.field}}) */\n title: string;\n /** Page meta HTML */\n meta: string;\n /** Locale */\n locale: string;\n /** Default theme */\n theme: string;\n /** Font preloads HTML */\n fontPreloads: string;\n /** Library tags */\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string };\n /** Script paths */\n scriptPaths: string[];\n /** Import path to BaseLayout */\n layoutImportPath: string;\n /** File depth relative to src/pages */\n fileDepth: number;\n /** SSR HTML fallbacks: node path -> rendered HTML (for ListNode, LocaleListNode) */\n ssrFallbacks: Map<string, string>;\n /** Page name (without extension) */\n pageName: string;\n /** Breakpoint config for responsive Tailwind classes */\n breakpoints?: BreakpointConfig;\n /** Image metadata map for responsive image generation */\n imageMetadataMap?: ImageMetadataMap;\n /** Internationalization config */\n i18nConfig: I18nConfig;\n /** Whether site has multiple locales */\n isMultiLocale: boolean;\n /** Slug mappings for translating internal link hrefs */\n slugMappings?: SlugMap[];\n /** Image format: 'webp' uses plain <img>, 'avif' uses <picture> */\n imageFormat?: 'webp' | 'avif';\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction escapeTemplateLiteral(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n\nfunction escapeJSX(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n}\n\nfunction componentImportPath(fileDepth: number, componentName: string): string {\n const ups = '../'.repeat(fileDepth + 1);\n return `${ups}components/${componentName}.astro`;\n}\n\n/**\n * Collect rich-text field names from CMS schema\n */\nfunction collectRichTextFields(schema: CMSSchema): Set<string> {\n const richTextFields = new Set<string>();\n for (const [fieldName, fieldDef] of Object.entries(schema.fields)) {\n if (fieldDef.type === 'rich-text') {\n richTextFields.add(fieldName);\n }\n }\n return richTextFields;\n}\n\n/**\n * Transform a title string that may contain {{cms.field}} to an Astro expression.\n * Returns the transformed title suitable for use in a JSX attribute.\n */\nfunction transformTitleExpression(\n title: string,\n binding: string,\n richTextFields: Set<string>,\n wrapFn?: string\n): string {\n if (!/\\{\\{cms\\./.test(title)) {\n return `\"${escapeJSX(title)}\"`;\n }\n\n const w = (expr: string) => wrapFn ? `${wrapFn}(${expr})` : expr;\n\n // Full match: entire title is a single {{cms.field}}\n const fullMatch = title.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n return `{${w(`${binding}.data.${fullMatch[1].trim()}`)}}`;\n }\n\n // Mixed content: \"Page - {{cms.title}}\" -> {`Page - ${entry.data.title}`}\n const replaced = title.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${binding}.data.${fieldPath.trim()}`)}}`;\n });\n return `{\\`${replaced}\\`}`;\n}\n\n/**\n * Extract the path prefix from a URL pattern.\n * E.g., \"/blog/{{slug}}\" -> \"blog/\"\n * E.g., \"/posts/{{slug}}\" -> \"posts/\"\n */\nfunction extractPathPrefix(urlPattern: string): string {\n // Remove leading slash, then remove the slug placeholder and everything after\n const withoutLeading = urlPattern.replace(/^\\//, '');\n const idx = withoutLeading.indexOf('{{');\n if (idx <= 0) return '';\n return withoutLeading.substring(0, idx);\n}\n\n// ---------------------------------------------------------------------------\n// getStaticPaths generator\n// ---------------------------------------------------------------------------\n\nfunction buildGetStaticPaths(\n schema: CMSSchema,\n isMultiLocale: boolean,\n i18nConfig: I18nConfig,\n locale?: string\n): string {\n const collectionId = schema.id;\n const slugField = schema.slugField || 'slug';\n const pathPrefix = extractPathPrefix(schema.urlPattern);\n const targetLocale = locale || i18nConfig.defaultLocale;\n\n if (!isMultiLocale) {\n // Single-locale version: resolve slug for this specific locale\n // Route file is at blog/[slug].astro (or pl/blog/[slug].astro for non-default)\n // If i18n values exist, resolve for the target locale\n const slugExpr = i18nConfig.locales.length > 1\n ? `entry.data.${slugField}?.${targetLocale} || entry.data.${slugField} || entry.id`\n : `entry.data.${slugField} || entry.id`;\n\n return [\n `export async function getStaticPaths() {`,\n ` const entries = await getCollection('${collectionId}');`,\n ` return entries.map(entry => ({`,\n ` params: { slug: ${slugExpr} },`,\n ` props: { entry },`,\n ` }));`,\n `}`,\n ``,\n `const { entry } = Astro.props;`,\n ].join('\\n');\n }\n\n // Multi-locale version: enumerate items x locales\n // Route file is at [...slug].astro (top level), so slug includes full path\n const defaultLocale = i18nConfig.defaultLocale;\n const locales = i18nConfig.locales;\n\n const lines: string[] = [\n `export async function getStaticPaths() {`,\n ` const entries = await getCollection('${collectionId}');`,\n ` const paths = [];`,\n ` for (const entry of entries) {`,\n ];\n\n for (const locale of locales) {\n const code = locale.code;\n const slugExpr = `entry.data.${slugField}?.${code} || entry.data.${slugField} || entry.id`;\n\n if (code === defaultLocale) {\n // Default locale: include path prefix but no locale prefix\n // e.g., /blog/{{slug}} \u2192 slug = \"blog/hello\"\n if (pathPrefix) {\n lines.push(\n ` paths.push({`,\n ` params: { slug: \\`${pathPrefix}\\${${slugExpr}}\\` },`,\n ` props: { entry, locale: '${code}' },`,\n ` });`\n );\n } else {\n lines.push(\n ` paths.push({`,\n ` params: { slug: ${slugExpr} },`,\n ` props: { entry, locale: '${code}' },`,\n ` });`\n );\n }\n } else {\n // Non-default locale: locale prefix + path prefix + slug\n // e.g., slug = \"pl/blog/witaj\"\n lines.push(\n ` paths.push({`,\n ` params: { slug: \\`${code}/${pathPrefix}\\${${slugExpr}}\\` },`,\n ` props: { entry, locale: '${code}' },`,\n ` });`\n );\n }\n }\n\n lines.push(\n ` }`,\n ` return paths;`,\n `}`,\n ``,\n `const { entry, locale = '${defaultLocale}' } = Astro.props;`\n );\n\n return lines.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Main emitter\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a CMS template .astro page file with getStaticPaths()\n */\nexport function emitCMSPage(options: CMSPageEmitOptions): string {\n const {\n pageData,\n globalComponents,\n cmsSchema,\n title,\n meta,\n locale,\n theme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath,\n fileDepth,\n ssrFallbacks,\n pageName,\n breakpoints: breakpointsOpt,\n imageMetadataMap,\n i18nConfig,\n isMultiLocale,\n slugMappings,\n } = options;\n\n const breakpoints = breakpointsOpt ?? DEFAULT_BREAKPOINTS;\n const binding = 'entry';\n const richTextFields = collectRichTextFields(cmsSchema);\n const wrapFn = 'r';\n\n const root = pageData.root;\n if (!root) {\n return buildEmptyCMSPage(\n layoutImportPath,\n title,\n meta,\n locale,\n theme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n cmsSchema,\n isMultiLocale,\n i18nConfig,\n binding,\n richTextFields\n );\n }\n\n // Build the Astro emit context with CMS mode enabled\n const ctx: AstroEmitContext = {\n imports: new Set<string>(),\n isComponentDef: false,\n componentProps: {},\n globalComponents,\n indent: 1, // inside BaseLayout\n ssrFallbacks,\n elementPath: [0],\n fileType: 'page',\n fileName: pageName,\n breakpoints,\n imageMetadataMap,\n locale,\n cmsMode: true,\n cmsEntryBinding: binding,\n cmsRichTextFields: richTextFields,\n cmsWrapFn: wrapFn,\n slugMappings,\n i18nDefaultLocale: i18nConfig.defaultLocale,\n imageFormat: options.imageFormat,\n };\n\n // Emit the template body\n const templateBody = nodeToAstro(root, ctx);\n\n // Build frontmatter with imports\n const importLines: string[] = [];\n importLines.push(`import { getCollection } from 'astro:content';`);\n importLines.push(`import BaseLayout from '${layoutImportPath}';`);\n\n // Sort component imports alphabetically\n const componentImports = Array.from(ctx.imports).sort();\n for (const comp of componentImports) {\n const path = componentImportPath(fileDepth, comp);\n importLines.push(`import ${comp} from '${path}';`);\n }\n\n // Build getStaticPaths\n const staticPaths = buildGetStaticPaths(cmsSchema, isMultiLocale, i18nConfig, locale);\n\n // Build script paths array\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n\n // Build library tags literal\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n // Escape meta first, then transform CMS templates ({{cms.X}} survives escaping intact)\n const escapedMeta = escapeTemplateLiteral(meta).replace(\n /\\{\\{cms\\.([^}]+)\\}\\}/g,\n (_, fieldPath) => `\\${${wrapFn}(${binding}.data.${fieldPath.trim()})}`\n );\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n\n // Transform title for CMS entry data\n const titleExpr = transformTitleExpression(title, binding, richTextFields, wrapFn);\n\n // i18n resolver helper \u2014 resolves {_i18n: true, en: \"...\", pl: \"...\"} to the correct locale string\n const resolverHelper = `function r(v) {\n if (v && typeof v === 'object' && v._i18n) return v['${locale}'] ?? v['${i18nConfig.defaultLocale}'] ?? Object.values(v).find(x => x !== true && x !== undefined) ?? '';\n return v ?? '';\n}`;\n\n return `---\n${importLines.join('\\n')}\n\n${staticPaths}\n\n${resolverHelper}\n---\n<BaseLayout\n title=${titleExpr}\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n <div id=\"root\">\n${templateBody} </div>\n</BaseLayout>\n`;\n}\n\n/**\n * Build an empty CMS page with just the layout wrapper and getStaticPaths\n */\nfunction buildEmptyCMSPage(\n layoutImport: string,\n title: string,\n meta: string,\n locale: string,\n theme: string,\n fontPreloads: string,\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string },\n scriptPaths: string[],\n cmsSchema: CMSSchema,\n isMultiLocale: boolean,\n i18nConfig: I18nConfig,\n binding: string,\n richTextFields: Set<string>\n): string {\n const escapedMeta = escapeTemplateLiteral(meta);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n const wrapFn = 'r';\n const staticPaths = buildGetStaticPaths(cmsSchema, isMultiLocale, i18nConfig, locale);\n const titleExpr = transformTitleExpression(title, binding, richTextFields, wrapFn);\n\n const resolverHelper = `function r(v) {\n if (v && typeof v === 'object' && v._i18n) return v['${locale}'] ?? v['${i18nConfig.defaultLocale}'] ?? Object.values(v).find(x => x !== true && x !== undefined) ?? '';\n return v ?? '';\n}`;\n\n return `---\nimport { getCollection } from 'astro:content';\nimport BaseLayout from '${layoutImport}';\n\n${staticPaths}\n\n${resolverHelper}\n---\n<BaseLayout\n title=${titleExpr}\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n</BaseLayout>\n`;\n}\n", "/**\n * Mapping Variant CSS Collector (Tailwind)\n * Walks all component definitions to find StyleMapping objects,\n * generates Tailwind classes for every possible value, ensuring\n * the Tailwind safelist covers all prop variants.\n */\n\nimport type { ComponentDefinition, ComponentNode } from '../../shared/types';\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { propertyToTailwind } from './tailwindMapper';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n/**\n * Walk a style object and collect Tailwind classes for every possible mapping value\n */\nfunction collectFromStyle(\n style: StyleObject | ResponsiveStyleObject | undefined,\n classes: Set<string>,\n breakpoints: BreakpointConfig\n): void {\n if (!style) return;\n\n if (isResponsiveStyle(style)) {\n for (const [bp, bpStyle] of Object.entries(style)) {\n if (!bpStyle) continue;\n let prefix = '';\n if (bp !== 'base') {\n const bpValue = breakpoints[bp]?.breakpoint;\n if (bpValue) {\n prefix = `max-[${bpValue}px]:`;\n }\n }\n collectFromFlatStyle(bpStyle, prefix, classes);\n }\n } else {\n collectFromFlatStyle(style, '', classes);\n }\n}\n\nfunction collectFromFlatStyle(\n style: StyleObject,\n prefix: string,\n classes: Set<string>\n): void {\n for (const [property, value] of Object.entries(style)) {\n if (!isStyleMapping(value)) continue;\n\n // Generate a Tailwind class for each possible value in the mapping\n for (const [, cssValue] of Object.entries(value.values)) {\n const twClass = propertyToTailwind(property, cssValue);\n if (twClass) {\n classes.add(prefix ? `${prefix}${twClass}` : twClass);\n }\n }\n }\n}\n\n/**\n * Recursively walk a component node tree to collect mapping classes\n */\nfunction walkNode(\n node: ComponentNode | ComponentNode[] | string | number | null | undefined,\n classes: Set<string>,\n breakpoints: BreakpointConfig\n): void {\n if (!node || typeof node === 'string' || typeof node === 'number') return;\n\n if (Array.isArray(node)) {\n for (const child of node) {\n walkNode(child, classes, breakpoints);\n }\n return;\n }\n\n // Collect from style\n if ('style' in node && node.style) {\n collectFromStyle(node.style as StyleObject | ResponsiveStyleObject, classes, breakpoints);\n }\n\n // Collect from interactive styles\n if ('interactiveStyles' in node && Array.isArray((node as any).interactiveStyles)) {\n for (const rule of (node as any).interactiveStyles) {\n if (rule.style) {\n collectFromStyle(rule.style, classes, breakpoints);\n }\n }\n }\n\n // Recurse into children\n if ('children' in node && node.children) {\n if (Array.isArray(node.children)) {\n for (const child of node.children) {\n walkNode(child as ComponentNode, classes, breakpoints);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Walk all component definitions, find all StyleMapping objects,\n * and generate Tailwind classes for every value.\n *\n * @returns Set of Tailwind class names for the safelist\n */\nexport function collectAllMappingClasses(\n componentDefs: Record<string, ComponentDefinition>,\n breakpoints: BreakpointConfig = DEFAULT_BREAKPOINTS\n): Set<string> {\n const classes = new Set<string>();\n\n for (const def of Object.values(componentDefs)) {\n const structure = def.component?.structure;\n if (structure) {\n walkNode(structure, classes, breakpoints);\n }\n }\n\n return classes;\n}\n", "/**\n * Webflow Export Build Orchestrator\n * Loads the project, renders all pages, and converts to Webflow payload.\n * Mirrors the pattern of build-astro.ts.\n */\n\nimport { existsSync, readdirSync } from 'fs';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport {\n loadJSONFile,\n loadComponentDirectory,\n mapPageNameToPath,\n parseJSON,\n loadI18nConfig,\n loadBreakpointConfig,\n loadResponsiveScalesConfig,\n} from '../jsonLoader';\nimport { renderPageSSR } from '../ssr/ssrRenderer';\nimport { projectPaths } from '../projectContext';\nimport { loadProjectConfig } from '../../shared/fontLoader';\nimport { FileSystemCMSProvider } from '../providers/fileSystemCMSProvider';\nimport { CMSService } from '../services/cmsService';\nimport { isI18nValue, resolveI18nValue } from '../../shared/i18n';\nimport { configService } from '../services/configService';\nimport { colorService } from '../services/ColorService';\nimport { variableService } from '../services/VariableService';\nimport { migrateTemplatesDirectory } from '../migrateTemplates';\nimport type {\n ComponentDefinition,\n JSONPage,\n CMSSchema,\n CMSItem,\n I18nConfig,\n} from '../../shared/types';\nimport { isItemDraftForLocale } from '../../shared/types';\nimport type { SlugMap } from '../../shared/slugTranslator';\nimport type {\n WebflowExportPayload,\n WebflowPage,\n WebflowStyleClass,\n WebflowCMSCollection,\n WebflowCMSField,\n WebflowAssetRef,\n} from './types';\nimport { mapCMSFieldType } from './types';\nimport { nodeToWebflow, type WebflowEmitContext } from './nodeToWebflow';\nimport { generateThemeColorVariablesCSS, generateVariablesCSS } from '../cssGenerator';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction scanJSONFiles(dir: string, prefix: string = ''): string[] {\n const results: string[] = [];\n if (!existsSync(dir)) return results;\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.json')) {\n results.push(prefix ? `${prefix}/${entry.name}` : entry.name);\n } else if (entry.isDirectory()) {\n results.push(...scanJSONFiles(join(dir, entry.name), prefix ? `${prefix}/${entry.name}` : entry.name));\n }\n }\n return results;\n}\n\nfunction isCMSPage(pageData: JSONPage): boolean {\n return pageData.meta?.source === 'cms' && !!pageData.meta?.cms;\n}\n\nfunction buildCMSItemPath(\n urlPattern: string,\n item: CMSItem,\n slugField: string,\n locale: string,\n i18nConfig: I18nConfig\n): string {\n let slug = item[slugField] ?? item._slug ?? item._id;\n if (isI18nValue(slug)) {\n slug = resolveI18nValue(slug, locale, i18nConfig) as string;\n }\n return urlPattern.replace('{{slug}}', String(slug));\n}\n\nfunction scanAssets(projectRoot: string): WebflowAssetRef[] {\n const assets: WebflowAssetRef[] = [];\n const assetDirs: Array<{ dir: string; type: WebflowAssetRef['type'] }> = [\n { dir: 'images', type: 'image' },\n { dir: 'fonts', type: 'font' },\n { dir: 'videos', type: 'video' },\n { dir: 'assets', type: 'file' },\n ];\n\n for (const { dir, type } of assetDirs) {\n const fullDir = join(projectRoot, dir);\n if (!existsSync(fullDir)) continue;\n const files = scanJSONFiles(fullDir).map(f => f.replace('.json', '')); // scanJSONFiles works for any extension\n // Re-scan properly for all file types\n const allFiles = scanAllFiles(fullDir);\n for (const file of allFiles) {\n assets.push({\n localPath: `${dir}/${file}`,\n type,\n fileName: file.split('/').pop()!,\n });\n }\n }\n\n return assets;\n}\n\nfunction scanAllFiles(dir: string, prefix: string = ''): string[] {\n const results: string[] = [];\n if (!existsSync(dir)) return results;\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isFile()) {\n results.push(relativePath);\n } else if (entry.isDirectory()) {\n results.push(...scanAllFiles(join(dir, entry.name), relativePath));\n }\n }\n return results;\n}\n\n/**\n * Extract CSS variables from theme and variables config\n */\nfunction extractCSSVariables(\n themeColorCSS: string,\n variablesCSS: string\n): Record<string, string> {\n const vars: Record<string, string> = {};\n const regex = /--([\\w-]+)\\s*:\\s*([^;]+)/g;\n\n for (const css of [themeColorCSS, variablesCSS]) {\n let match;\n while ((match = regex.exec(css)) !== null) {\n vars[`--${match[1]}`] = match[2].trim();\n }\n }\n\n return vars;\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nexport async function buildWebflowPayload(\n projectRoot?: string\n): Promise<WebflowExportPayload> {\n // 1. Setup: load project configuration\n configService.reset();\n\n const projectConfig = await loadProjectConfig();\n const siteUrl = (projectConfig as { siteUrl?: string }).siteUrl?.replace(/\\/$/, '') || '';\n const i18nConfig = await loadI18nConfig();\n\n await migrateTemplatesDirectory();\n\n const { components } = await loadComponentDirectory(projectPaths.components());\n const globalComponents: Record<string, ComponentDefinition> = {};\n components.forEach((value, key) => { globalComponents[key] = value; });\n\n const cmsProvider = new FileSystemCMSProvider(projectPaths.templates(), projectPaths.cms());\n const cmsService = new CMSService(cmsProvider);\n await cmsService.initialize();\n\n const themeConfig = await colorService.loadThemeConfig();\n const variablesConfig = await variableService.loadConfig();\n const breakpoints = await loadBreakpointConfig();\n const responsiveScales = await loadResponsiveScalesConfig();\n\n await configService.load();\n\n // 2. Scan pages\n const pagesDir = projectPaths.pages();\n if (!existsSync(pagesDir)) {\n return emptyPayload();\n }\n\n const pageFiles = scanJSONFiles(pagesDir);\n if (pageFiles.length === 0) {\n return emptyPayload();\n }\n\n // Collect slug mappings\n const slugMappings: SlugMap[] = [];\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n if (!pageContent) continue;\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n if (pageData.meta?.slugs) {\n const pageId = basePath === '/' ? 'index' : basePath.substring(1);\n slugMappings.push({ pageId, slugs: pageData.meta.slugs });\n }\n } catch { /* ignore */ }\n }\n\n // 3. Render and convert pages\n const allPages: WebflowPage[] = [];\n const allStyleClasses = new Map<string, WebflowStyleClass>();\n\n // Regular pages\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n if (!pageContent) continue;\n\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n if (pageData.meta?.draft === true) continue;\n\n const slugs = pageData.meta?.slugs;\n\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n const isDefault = locale === i18nConfig.defaultLocale;\n\n let slug: string;\n if (slugs && slugs[locale]) {\n slug = slugs[locale];\n } else if (basePath === '/') {\n slug = '';\n } else {\n slug = basePath.substring(1);\n }\n\n const urlPath = isDefault\n ? (slug === '' ? '/' : `/${slug}`)\n : (slug === '' ? `/${locale}` : `/${locale}/${slug}`);\n\n // Render via SSR to resolve all props\n const result = await renderPageSSR(\n pageData,\n globalComponents,\n urlPath,\n siteUrl,\n locale,\n i18nConfig,\n slugMappings,\n undefined,\n cmsService,\n true\n );\n\n // Convert node tree to Webflow elements\n const ctx: WebflowEmitContext = {\n globalComponents,\n elementPath: [0],\n fileType: 'page',\n fileName: pageName,\n breakpoints,\n styleClasses: allStyleClasses,\n };\n\n const body = pageData.root || (pageData as any).node;\n const elements = body ? nodeToWebflow(body, ctx) : [];\n\n allPages.push({\n title: result.title,\n slug: slug || 'index',\n metaDescription: typeof pageData.meta?.description === 'string' ? pageData.meta.description : undefined,\n elements,\n locale,\n });\n }\n } catch (error: any) {\n console.error(`Error processing ${basePath}:`, error?.message);\n }\n }\n\n // CMS template pages\n const templatesDir = projectPaths.templates();\n const cmsCollections: WebflowCMSCollection[] = [];\n\n if (existsSync(templatesDir)) {\n const templateFiles = readdirSync(templatesDir).filter(f => f.endsWith('.json'));\n\n for (const file of templateFiles) {\n const templateContent = await loadJSONFile(join(templatesDir, file));\n if (!templateContent) continue;\n\n try {\n const pageData = parseJSON<JSONPage>(templateContent);\n if (pageData.meta?.draft === true) continue;\n if (!isCMSPage(pageData)) continue;\n\n const cmsSchema = pageData.meta!.cms as CMSSchema;\n const items = await cmsService.queryItems({ collection: cmsSchema.id });\n\n // Build Webflow CMS collection\n const fields: WebflowCMSField[] = [];\n if (cmsSchema.fields) {\n for (const [fieldName, fieldDef] of Object.entries(cmsSchema.fields)) {\n fields.push({\n name: fieldDef.label || fieldName,\n slug: fieldName,\n type: mapCMSFieldType(fieldDef.type),\n required: fieldDef.required,\n options: fieldDef.options,\n });\n }\n }\n\n // Resolve i18n values in items for default locale\n const resolvedItems: Record<string, unknown>[] = [];\n for (const item of items) {\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(item)) {\n if (isI18nValue(value)) {\n resolved[key] = resolveI18nValue(value, i18nConfig.defaultLocale, i18nConfig);\n } else {\n resolved[key] = value;\n }\n }\n resolvedItems.push(resolved);\n }\n\n cmsCollections.push({\n name: cmsSchema.id,\n slug: cmsSchema.id,\n urlPattern: cmsSchema.urlPattern,\n fields,\n items: resolvedItems,\n });\n\n // Render CMS item pages\n for (const item of items) {\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n if (isItemDraftForLocale(item, locale)) continue;\n\n const itemPath = buildCMSItemPath(cmsSchema.urlPattern, item, cmsSchema.slugField, locale, i18nConfig);\n const itemWithUrl: CMSItem = { ...item, _url: itemPath };\n\n const result = await renderPageSSR(\n pageData,\n globalComponents,\n itemPath,\n siteUrl,\n locale,\n i18nConfig,\n slugMappings,\n { cms: itemWithUrl },\n cmsService,\n true\n );\n\n const ctx: WebflowEmitContext = {\n globalComponents,\n elementPath: [0],\n fileType: 'page',\n fileName: file.replace('.json', ''),\n breakpoints,\n styleClasses: allStyleClasses,\n };\n\n const body = pageData.root || (pageData as any).node;\n // Pass CMS item data as props so {{cms.field}} templates resolve\n const cmsProps = { cms: itemWithUrl };\n const elements = body ? nodeToWebflow(body, ctx, cmsProps) : [];\n\n const slug = itemPath.startsWith('/') ? itemPath.substring(1) : itemPath;\n allPages.push({\n title: result.title,\n slug,\n elements,\n locale,\n });\n }\n }\n } catch (error: any) {\n console.error(`Error processing template ${file}:`, error?.message);\n }\n }\n }\n\n // 4. Collect CSS variables\n const themeColorCSS = generateThemeColorVariablesCSS(themeConfig);\n const variablesCSS = generateVariablesCSS(variablesConfig, breakpoints, responsiveScales);\n const cssVariables = extractCSSVariables(themeColorCSS, variablesCSS);\n\n // 5. Scan assets\n const assets = scanAssets(projectPaths.project);\n\n return {\n version: 1,\n exportedAt: new Date().toISOString(),\n pages: allPages,\n styles: Array.from(allStyleClasses.values()),\n cms: cmsCollections,\n assets,\n cssVariables: Object.keys(cssVariables).length > 0 ? cssVariables : undefined,\n };\n}\n\nfunction emptyPayload(): WebflowExportPayload {\n return {\n version: 1,\n exportedAt: new Date().toISOString(),\n pages: [],\n styles: [],\n cms: [],\n assets: [],\n };\n}\n\n", "/**\n * Webflow Export Types\n * Defines the payload structure for Webflow Designer API consumption.\n */\n\nimport type { CMSFieldType } from '../../shared/types/cms';\n\n// ---------------------------------------------------------------------------\n// Style Classes\n// ---------------------------------------------------------------------------\n\n/** Webflow breakpoint identifiers */\nexport type WebflowBreakpoint = 'Desktop' | 'Tablet' | 'MobilePortrait';\n\n/** Webflow pseudo-state identifiers */\nexport type WebflowPseudoState = 'hover' | 'focus' | 'active' | 'visited' | 'focus-visible';\n\n/** CSS properties as a flat record */\nexport type CSSProperties = Record<string, string>;\n\n/** A named Webflow style class with responsive + pseudo-state overrides */\nexport interface WebflowStyleClass {\n /** Unique class name (e.g., \"c-navigation-hamburger\") */\n name: string;\n /** Base (Desktop) CSS properties */\n base: CSSProperties;\n /** Breakpoint overrides */\n breakpoints?: Partial<Record<WebflowBreakpoint, CSSProperties>>;\n /** Pseudo-state overrides */\n pseudoStates?: Partial<Record<WebflowPseudoState, CSSProperties>>;\n /** Combo class parent (if this is a variant class) */\n comboParent?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Elements\n// ---------------------------------------------------------------------------\n\n/** A Webflow element (DOM node) */\nexport interface WebflowElement {\n /** HTML tag (div, section, h1, a, img, etc.) */\n tag: string;\n /** Primary class name applied to this element */\n className?: string;\n /** Additional combo class names (for StyleMapping variants) */\n comboClasses?: string[];\n /** Inline text content (for text nodes) */\n textContent?: string;\n /** Child elements */\n children?: WebflowElement[];\n /** HTML attributes (src, alt, href, target, etc.) */\n attributes?: Record<string, string | number | boolean>;\n /** Raw HTML content (for embed nodes) */\n rawHtml?: string;\n /** Whether this element is conditionally rendered */\n conditional?: {\n prop: string;\n condition: 'truthy' | 'equals';\n value?: string;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Pages\n// ---------------------------------------------------------------------------\n\n/** A Webflow page */\nexport interface WebflowPage {\n /** Page title */\n title: string;\n /** URL slug (e.g., \"about\", \"blog/post-1\") */\n slug: string;\n /** Meta description */\n metaDescription?: string;\n /** Open Graph title */\n ogTitle?: string;\n /** Open Graph description */\n ogDescription?: string;\n /** Open Graph image URL */\n ogImage?: string;\n /** Root elements of the page body */\n elements: WebflowElement[];\n /** Locale code */\n locale?: string;\n}\n\n// ---------------------------------------------------------------------------\n// CMS\n// ---------------------------------------------------------------------------\n\n/** Webflow CMS field type mapping */\nexport type WebflowFieldType =\n | 'PlainText'\n | 'RichText'\n | 'Number'\n | 'Switch'\n | 'Image'\n | 'Date'\n | 'Option'\n | 'File'\n | 'Reference';\n\n/** A field in a Webflow CMS collection */\nexport interface WebflowCMSField {\n /** Field display name */\n name: string;\n /** Field slug (machine name) */\n slug: string;\n /** Webflow field type */\n type: WebflowFieldType;\n /** Whether this field is required */\n required?: boolean;\n /** Options for Option type fields */\n options?: string[];\n}\n\n/** A Webflow CMS collection definition */\nexport interface WebflowCMSCollection {\n /** Collection display name */\n name: string;\n /** Collection slug */\n slug: string;\n /** URL pattern for detail pages */\n urlPattern?: string;\n /** Field definitions */\n fields: WebflowCMSField[];\n /** Collection items */\n items: Record<string, unknown>[];\n}\n\n// ---------------------------------------------------------------------------\n// Assets\n// ---------------------------------------------------------------------------\n\n/** Reference to an asset that needs uploading to Webflow */\nexport interface WebflowAssetRef {\n /** Local file path relative to project root */\n localPath: string;\n /** Asset type */\n type: 'image' | 'font' | 'video' | 'file';\n /** File name */\n fileName: string;\n}\n\n// ---------------------------------------------------------------------------\n// Export Payload\n// ---------------------------------------------------------------------------\n\n/** Complete Webflow export payload */\nexport interface WebflowExportPayload {\n /** Export format version */\n version: 1;\n /** Timestamp of export */\n exportedAt: string;\n /** All pages with their element trees */\n pages: WebflowPage[];\n /** All style class definitions */\n styles: WebflowStyleClass[];\n /** CMS collection definitions (if any) */\n cms: WebflowCMSCollection[];\n /** Asset references (images, fonts, etc.) */\n assets: WebflowAssetRef[];\n /** CSS variables used in styles (for global embed) */\n cssVariables?: Record<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Map Meno CMS field type \u2192 Webflow field type */\nexport function mapCMSFieldType(menoType: CMSFieldType): WebflowFieldType {\n switch (menoType) {\n case 'string':\n return 'PlainText';\n case 'text':\n case 'rich-text':\n return 'RichText';\n case 'number':\n return 'Number';\n case 'boolean':\n return 'Switch';\n case 'image':\n return 'Image';\n case 'date':\n return 'Date';\n case 'select':\n return 'Option';\n case 'file':\n return 'File';\n case 'reference':\n return 'Reference';\n default:\n return 'PlainText';\n }\n}\n", "/**\n * Node-to-Webflow Converter\n * Recursively converts Meno's ComponentNode tree into Webflow element tree.\n * Follows the same traversal pattern as nodeToAstro.ts.\n */\n\nimport type {\n ComponentNode,\n ComponentDefinition,\n StructuredComponentDefinition,\n HtmlNode,\n ComponentInstanceNode,\n SlotMarker,\n EmbedNode,\n LinkNode,\n} from '../../shared/types';\nimport type { ListNode } from '../../shared/registry/nodeTypes/ListNodeType';\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n InteractiveStyles,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { generateElementClassName } from '../../shared/elementClassName';\nimport { isVoidElement } from '../../shared/nodeUtils';\nimport { NODE_TYPE } from '../../shared/constants';\nimport type { WebflowElement, WebflowStyleClass } from './types';\nimport { mapStylesToWebflow } from './styleMapper';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nexport interface WebflowEmitContext {\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** Current element path for class name generation */\n elementPath: number[];\n /** File type for element class context */\n fileType: 'component' | 'page';\n /** File name for element class context */\n fileName: string;\n /** Breakpoint config */\n breakpoints: BreakpointConfig;\n /** Collected style classes (side output) */\n styleClasses: Map<string, WebflowStyleClass>;\n /** Children passed from a component instance to fill slot markers */\n slotChildren?: (ComponentNode | string)[] | ComponentNode | string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildElementClass(ctx: WebflowEmitContext, label: string | undefined): string {\n return generateElementClassName({\n fileType: ctx.fileType,\n fileName: ctx.fileName,\n label,\n path: ctx.elementPath,\n });\n}\n\nfunction resolveTemplate(text: string, props?: Record<string, unknown>): string {\n if (!props) return text;\n return text.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n const trimmed = expr.trim();\n\n // Support \"expr || 'fallback'\" pattern\n const orMatch = trimmed.match(/^(.+?)\\s*\\|\\|\\s*['\"](.+?)['\"]$/);\n if (orMatch) {\n const value = resolveNestedProp(props, orMatch[1].trim());\n return (value !== undefined && value !== '' && value !== null)\n ? String(value)\n : orMatch[2];\n }\n\n // Support \"expr ? 'a' : 'b'\" ternary pattern\n const ternaryMatch = trimmed.match(/^(.+?)\\s*\\?\\s*['\"](.+?)['\"]\\s*:\\s*['\"](.+?)['\"]$/);\n if (ternaryMatch) {\n const value = resolveNestedProp(props, ternaryMatch[1].trim());\n return value ? ternaryMatch[2] : ternaryMatch[3];\n }\n\n // Simple prop lookup with dot-notation\n const value = resolveNestedProp(props, trimmed);\n return value !== undefined ? String(value) : '';\n });\n}\n\nfunction resolveNestedProp(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction hasTemplates(text: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(text);\n}\n\n// ---------------------------------------------------------------------------\n// Main recursive converter\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a ComponentNode tree to Webflow element tree.\n * Also collects WebflowStyleClass definitions as a side effect in ctx.styleClasses.\n */\nexport function nodeToWebflow(\n node: ComponentNode | ComponentNode[] | string | number | null | undefined,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement[] {\n if (node === null || node === undefined) return [];\n\n // Text/number\n if (typeof node === 'string') {\n const text = instanceProps ? resolveTemplate(node, instanceProps) : node;\n return [{ tag: 'span', textContent: text }];\n }\n if (typeof node === 'number') {\n return [{ tag: 'span', textContent: String(node) }];\n }\n\n // Array of nodes\n if (Array.isArray(node)) {\n const results: WebflowElement[] = [];\n for (let i = 0; i < node.length; i++) {\n const child = node[i];\n const savedPath = [...ctx.elementPath];\n ctx.elementPath = [...ctx.elementPath, i];\n results.push(...nodeToWebflow(child, ctx, instanceProps));\n ctx.elementPath = savedPath;\n }\n return results;\n }\n\n // Dispatch by node type\n switch (node.type) {\n case NODE_TYPE.NODE:\n return [emitHtmlNode(node as HtmlNode, ctx, instanceProps)];\n case NODE_TYPE.COMPONENT:\n return emitComponentInstance(node as ComponentInstanceNode, ctx, instanceProps);\n case NODE_TYPE.SLOT:\n return emitSlotMarker(node as SlotMarker, ctx, instanceProps);\n case NODE_TYPE.EMBED:\n return [emitEmbedNode(node as EmbedNode, ctx, instanceProps)];\n case NODE_TYPE.LINK:\n return [emitLinkNode(node as LinkNode, ctx, instanceProps)];\n case NODE_TYPE.LIST:\n case 'cms-list' as any:\n case NODE_TYPE.LOCALE_LIST:\n // Complex nodes \u2014 emit a placeholder div\n return [{ tag: 'div', attributes: { 'data-meno-type': node.type } }];\n default:\n return [];\n }\n}\n\n// ---------------------------------------------------------------------------\n// Node type emitters\n// ---------------------------------------------------------------------------\n\nfunction emitHtmlNode(\n node: HtmlNode,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement {\n const tag = hasTemplates(node.tag) && instanceProps\n ? resolveTemplate(node.tag, instanceProps)\n : node.tag;\n\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n const interactiveStyles = node.interactiveStyles as InteractiveStyles | undefined;\n\n // Generate element class and map styles\n const needsClass = style || (interactiveStyles && interactiveStyles.length > 0) || node.generateElementClass;\n let className: string | undefined;\n let comboClassNames: string[] | undefined;\n\n if (needsClass) {\n const elementClass = buildElementClass(ctx, node.label);\n const { primaryClass, comboClasses } = mapStylesToWebflow(\n elementClass, style, interactiveStyles, ctx.breakpoints\n );\n\n className = primaryClass.name;\n ctx.styleClasses.set(primaryClass.name, primaryClass);\n\n if (comboClasses.length > 0) {\n comboClassNames = [];\n for (const combo of comboClasses) {\n ctx.styleClasses.set(combo.name, combo);\n comboClassNames.push(combo.name);\n }\n }\n }\n\n // Build attributes\n const attributes: Record<string, string | number | boolean> = {};\n if (node.attributes) {\n for (const [key, value] of Object.entries(node.attributes)) {\n if (instanceProps && typeof value === 'string' && hasTemplates(value)) {\n attributes[key] = resolveTemplate(value, instanceProps);\n } else {\n attributes[key] = value;\n }\n }\n }\n\n // Build children\n let children: WebflowElement[] | undefined;\n let textContent: string | undefined;\n if (!isVoidElement(tag) && node.children) {\n // Optimize: single string child becomes textContent instead of child element\n if (typeof node.children === 'string') {\n textContent = instanceProps ? resolveTemplate(node.children, instanceProps) : node.children;\n } else if (\n Array.isArray(node.children) &&\n node.children.length === 1 &&\n typeof node.children[0] === 'string'\n ) {\n const text = node.children[0] as string;\n textContent = instanceProps ? resolveTemplate(text, instanceProps) : text;\n } else {\n const innerCtx = { ...ctx, elementPath: [...ctx.elementPath] };\n children = convertChildren(node.children, innerCtx, instanceProps);\n if (children.length === 0) children = undefined;\n }\n }\n\n // Handle conditional rendering\n let conditional: WebflowElement['conditional'];\n const ifValue = (node as any).if;\n if (ifValue !== undefined && ifValue !== true) {\n if (typeof ifValue === 'object' && ifValue._mapping) {\n conditional = { prop: ifValue.prop, condition: 'truthy' };\n } else if (typeof ifValue === 'string') {\n const match = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n conditional = { prop: match ? match[1].trim() : ifValue, condition: 'truthy' };\n }\n }\n\n const element: WebflowElement = { tag };\n if (className) element.className = className;\n if (comboClassNames) element.comboClasses = comboClassNames;\n if (textContent) element.textContent = textContent;\n if (children) element.children = children;\n if (Object.keys(attributes).length > 0) element.attributes = attributes;\n if (conditional) element.conditional = conditional;\n\n return element;\n}\n\nfunction emitComponentInstance(\n node: ComponentInstanceNode,\n ctx: WebflowEmitContext,\n parentProps?: Record<string, unknown>\n): WebflowElement[] {\n const compDef = ctx.globalComponents[node.component];\n if (!compDef) {\n // Unknown component \u2014 emit placeholder\n return [{ tag: 'div', attributes: { 'data-component': node.component } }];\n }\n\n // Resolve props: merge defaults with instance props\n const resolvedProps: Record<string, unknown> = {};\n const structured = compDef.component;\n\n if (structured?.interface) {\n for (const [key, propDef] of Object.entries(structured.interface)) {\n resolvedProps[key] = propDef.default;\n }\n }\n\n if (node.props) {\n for (const [key, value] of Object.entries(node.props)) {\n if (key === 'children') continue;\n if (typeof value === 'string' && hasTemplates(value) && parentProps) {\n resolvedProps[key] = resolveTemplate(value, parentProps);\n } else {\n resolvedProps[key] = value;\n }\n }\n }\n\n // Inline-expand the component's node tree\n const body = structured?.structure || (compDef as any).node;\n if (!body) return [];\n\n const compCtx: WebflowEmitContext = {\n ...ctx,\n fileType: 'component',\n fileName: node.component,\n elementPath: [0],\n slotChildren: node.children,\n };\n\n return nodeToWebflow(body, compCtx, resolvedProps);\n}\n\nfunction emitSlotMarker(\n node: SlotMarker,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement[] {\n // Use instance children passed via context to fill the slot\n if (ctx.slotChildren) {\n // Switch back to parent context (page-level) for slot children\n const parentCtx: WebflowEmitContext = {\n ...ctx,\n slotChildren: undefined, // prevent infinite slot nesting\n };\n return convertChildren(ctx.slotChildren as any, parentCtx, instanceProps);\n }\n // Fall back to slot defaults\n if (node.default) {\n return convertChildren(node.default as any, ctx, instanceProps);\n }\n return [];\n}\n\nfunction emitEmbedNode(\n node: EmbedNode,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n const interactiveStyles = node.interactiveStyles as InteractiveStyles | undefined;\n\n let className: string | undefined;\n if (style || (interactiveStyles && interactiveStyles.length > 0)) {\n const elementClass = buildElementClass(ctx, node.label);\n const { primaryClass } = mapStylesToWebflow(\n elementClass, style, interactiveStyles, ctx.breakpoints\n );\n className = primaryClass.name;\n ctx.styleClasses.set(primaryClass.name, primaryClass);\n }\n\n const htmlStr = typeof node.html === 'string' ? node.html : '';\n\n const element: WebflowElement = {\n tag: 'div',\n rawHtml: htmlStr,\n };\n if (className) element.className = className;\n\n return element;\n}\n\nfunction emitLinkNode(\n node: LinkNode,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n const interactiveStyles = node.interactiveStyles as InteractiveStyles | undefined;\n\n let className: string | undefined;\n if (style || (interactiveStyles && interactiveStyles.length > 0)) {\n const elementClass = buildElementClass(ctx, node.label);\n const { primaryClass } = mapStylesToWebflow(\n elementClass, style, interactiveStyles, ctx.breakpoints\n );\n className = primaryClass.name;\n ctx.styleClasses.set(primaryClass.name, primaryClass);\n }\n\n // Resolve href\n let href = '#';\n if (typeof node.href === 'string') {\n href = instanceProps && hasTemplates(node.href)\n ? resolveTemplate(node.href, instanceProps)\n : node.href;\n }\n\n const attributes: Record<string, string | number | boolean> = { href };\n if (node.attributes) {\n for (const [key, value] of Object.entries(node.attributes)) {\n attributes[key] = value;\n }\n }\n\n let children: WebflowElement[] | undefined;\n if (node.children) {\n children = convertChildren(node.children, ctx, instanceProps);\n if (children.length === 0) children = undefined;\n }\n\n const element: WebflowElement = { tag: 'a', attributes };\n if (className) element.className = className;\n if (children) element.children = children;\n\n return element;\n}\n\n// ---------------------------------------------------------------------------\n// Children helper\n// ---------------------------------------------------------------------------\n\nfunction convertChildren(\n children: (ComponentNode | string)[] | string | ComponentNode | null | undefined,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement[] {\n if (!children) return [];\n\n if (typeof children === 'string') {\n return nodeToWebflow(children, ctx, instanceProps);\n }\n\n if (Array.isArray(children)) {\n return nodeToWebflow(children as ComponentNode[], ctx, instanceProps);\n }\n\n // Single node\n return nodeToWebflow(children, ctx, instanceProps);\n}\n", "/**\n * Webflow Style Mapper\n * Converts Meno styles (ResponsiveStyleObject + InteractiveStyles) into\n * Webflow named style classes with breakpoint and pseudo-state overrides.\n */\n\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n InteractiveStyles,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport type { WebflowStyleClass, WebflowBreakpoint, WebflowPseudoState, CSSProperties } from './types';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** CSS properties that accept unitless numeric values */\nconst UNITLESS_PROPERTIES = new Set([\n 'opacity', 'z-index', 'flex-grow', 'flex-shrink', 'flex',\n 'order', 'orphans', 'widows', 'column-count', 'font-weight',\n 'tab-size',\n]);\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n/**\n * Convert a camelCase CSS property to kebab-case\n */\nfunction toKebabCase(prop: string): string {\n return prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n\n/**\n * Convert a flat StyleObject to CSS properties, skipping StyleMappings\n */\nfunction styleObjectToCSS(style: StyleObject): CSSProperties {\n const css: CSSProperties = {};\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) continue;\n if (value === '' || value === undefined || value === null) continue;\n if (typeof value === 'boolean' || typeof value === 'object') continue;\n const cssProp = toKebabCase(prop);\n if (typeof value === 'number') {\n if (isNaN(value)) continue;\n css[cssProp] = UNITLESS_PROPERTIES.has(cssProp) ? String(value) : `${value}px`;\n } else {\n css[cssProp] = String(value);\n }\n }\n return css;\n}\n\n/**\n * Extract all StyleMappings from a style object (flat or responsive)\n */\nfunction collectStyleMappings(\n style: StyleObject | ResponsiveStyleObject | undefined\n): Array<{ property: string; mapping: StyleMapping }> {\n if (!style) return [];\n const result: Array<{ property: string; mapping: StyleMapping }> = [];\n\n if (isResponsiveStyle(style)) {\n // Only collect from base \u2014 mappings apply across breakpoints\n const base = (style as ResponsiveStyleObject).base;\n if (base) {\n for (const [prop, value] of Object.entries(base)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value });\n }\n }\n }\n } else {\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value });\n }\n }\n }\n return result;\n}\n\n/**\n * Map interactive style postfix to Webflow pseudo-state\n */\nfunction postfixToPseudoState(postfix: string): WebflowPseudoState | null {\n if (postfix.includes(':hover')) return 'hover';\n if (postfix.includes(':focus-visible')) return 'focus-visible';\n if (postfix.includes(':focus')) return 'focus';\n if (postfix.includes(':active')) return 'active';\n if (postfix.includes(':visited')) return 'visited';\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Main Mapper\n// ---------------------------------------------------------------------------\n\nexport interface StyleMapperResult {\n /** The primary style class for this element */\n primaryClass: WebflowStyleClass;\n /** Combo classes for StyleMapping variants */\n comboClasses: WebflowStyleClass[];\n}\n\n/**\n * Convert Meno element styles to Webflow style classes.\n *\n * @param className - Element class name (e.g., \"c_navigation_hamburger\")\n * @param style - Element's responsive style object\n * @param interactiveStyles - Element's interactive (hover/focus/etc.) styles\n * @param breakpoints - Project breakpoint configuration\n */\nexport function mapStylesToWebflow(\n className: string,\n style: StyleObject | ResponsiveStyleObject | undefined,\n interactiveStyles: InteractiveStyles | undefined,\n breakpoints: BreakpointConfig\n): StyleMapperResult {\n // Convert underscores to dashes for Webflow class naming convention\n const webflowClassName = className.replace(/_/g, '-');\n\n const primaryClass: WebflowStyleClass = {\n name: webflowClassName,\n base: {},\n };\n\n // --- Base + breakpoint styles ---\n if (style) {\n if (isResponsiveStyle(style)) {\n const responsive = style as ResponsiveStyleObject;\n\n if (responsive.base) {\n primaryClass.base = styleObjectToCSS(responsive.base);\n }\n\n if (responsive.tablet) {\n if (!primaryClass.breakpoints) primaryClass.breakpoints = {};\n primaryClass.breakpoints.Tablet = styleObjectToCSS(responsive.tablet);\n }\n\n if (responsive.mobile) {\n if (!primaryClass.breakpoints) primaryClass.breakpoints = {};\n primaryClass.breakpoints.MobilePortrait = styleObjectToCSS(responsive.mobile);\n }\n\n // Handle additional custom breakpoints (map to closest Webflow breakpoint)\n for (const [bpName, bpStyle] of Object.entries(responsive)) {\n if (!bpStyle || bpName === 'base' || bpName === 'tablet' || bpName === 'mobile') continue;\n // Custom breakpoints map to Tablet as closest approximation\n if (!primaryClass.breakpoints) primaryClass.breakpoints = {};\n primaryClass.breakpoints.Tablet = {\n ...primaryClass.breakpoints.Tablet,\n ...styleObjectToCSS(bpStyle),\n };\n }\n } else {\n // Flat style object \u2014 treat as base/Desktop\n primaryClass.base = styleObjectToCSS(style as StyleObject);\n }\n }\n\n // --- Interactive styles (hover, focus, etc.) ---\n if (interactiveStyles && interactiveStyles.length > 0) {\n for (const rule of interactiveStyles) {\n if (!rule.postfix) continue;\n\n const pseudoState = postfixToPseudoState(rule.postfix);\n if (!pseudoState) continue;\n\n const ruleStyle = rule.style;\n if (!primaryClass.pseudoStates) primaryClass.pseudoStates = {};\n\n if (isResponsiveStyle(ruleStyle)) {\n const responsive = ruleStyle as ResponsiveStyleObject;\n // Merge base styles into the pseudo-state\n if (responsive.base) {\n primaryClass.pseudoStates[pseudoState] = {\n ...primaryClass.pseudoStates[pseudoState],\n ...styleObjectToCSS(responsive.base),\n };\n }\n } else {\n primaryClass.pseudoStates[pseudoState] = {\n ...primaryClass.pseudoStates[pseudoState],\n ...styleObjectToCSS(ruleStyle as StyleObject),\n };\n }\n }\n }\n\n // --- Combo classes for StyleMappings ---\n const comboClasses: WebflowStyleClass[] = [];\n const mappings = collectStyleMappings(style);\n\n for (const { property, mapping } of mappings) {\n for (const [value, cssValue] of Object.entries(mapping.values)) {\n if (cssValue === '' || cssValue === undefined) continue;\n\n const comboName = `is-${sanitizeClassName(mapping.prop)}-${sanitizeClassName(String(value))}`;\n const comboClass: WebflowStyleClass = {\n name: comboName,\n base: {\n [toKebabCase(property)]: typeof cssValue === 'number'\n ? (UNITLESS_PROPERTIES.has(toKebabCase(property)) ? String(cssValue) : `${cssValue}px`)\n : String(cssValue),\n },\n comboParent: webflowClassName,\n };\n comboClasses.push(comboClass);\n }\n }\n\n return { primaryClass, comboClasses };\n}\n\n/**\n * Sanitize a string for use as a CSS class name segment\n */\nfunction sanitizeClassName(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n", "/**\n * meno-core/server exports\n * Core server-side utilities for SSR and read APIs\n * Does NOT include editor-specific routes (that's in @meno/studio)\n */\n\n// Server factory\nexport { createServer, type ServerConfig } from './createServer';\n\n// SSR Rendering\nexport * from './ssrRenderer';\n\n// Build error overlay for static server\nexport { generateBuildErrorPage, type BuildError, type BuildErrorsData } from './ssr/buildErrorOverlay';\n\n// Services\nexport { PageService } from './services/pageService';\nexport { ComponentService, type ComponentInfo } from './services/componentService';\nexport { CMSService, type ReferenceLocation } from './services/cmsService';\nexport { configService, ConfigService } from './services/configService';\nexport { ColorService, colorService } from './services/ColorService';\nexport { VariableService, variableService } from './services/VariableService';\nexport { EnumService, enumService } from './services/EnumService';\n\n// Providers\nexport { FileSystemPageProvider } from './providers/fileSystemPageProvider';\nexport { FileSystemCMSProvider } from './providers/fileSystemCMSProvider';\n\n// CMS interfaces\nexport type { CMSProvider, CMSSchemaInfo } from '../shared/interfaces/contentProvider';\n\n// Core routes\nexport { handleCoreApiRoutes, type CoreRouteContext } from './routes/api/core-routes';\n\n// CMS read routes (GET handlers)\nexport { handleCollectionsRoute, handleCollectionSchemaRoute, handleItemsRoute, handleItemRoute } from './routes/api/cms';\n\n// Route utilities\nexport { jsonResponse, errorResponse } from './routes/api/shared';\n\n// Note: Write route handlers moved to @meno/studio:\n// - handleSavePageRoute\n// - handleSaveComponentRoute, handleSaveComponentJavaScriptRoute, handleSaveComponentCSSRoute\n// - handleSaveConfigRoute, handleSaveColorsRoute\n// - handleCreateCollectionRoute, handleCreateItemRoute, handleUpdateItemRoute, handleDeleteItemRoute\n\n// WebSocket\nexport { WebSocketManager } from './websocketManager';\n\n// Page cache\nexport { PageCache } from './pageCache';\n\n// Project context\nexport * from './projectContext';\n\n// File watcher\nexport { FileWatcherService } from './services/fileWatcherService';\n\n// Migration\nexport { migrateTemplatesDirectory } from './migrateTemplates';\n\n// Static build\nexport { buildStaticPages } from '../../build-static';\n\n// Astro export\nexport { buildAstroProject } from '../../build-astro';\n\n// Webflow export\nexport { buildWebflowPayload } from './webflow';\nexport type {\n WebflowExportPayload,\n WebflowPage,\n WebflowElement,\n WebflowStyleClass,\n} from './webflow';\n\n// Utilities\nexport * from './utils';\n\n// Middleware\nexport * from './middleware';\n\n// Font loader (legacy config loader for server entry points)\nexport { loadProjectConfig, resetFontConfig } from '../shared/fontLoader';\n\n// Constants\nexport { SERVE_PORT, SERVER_PORT, HMR_ROUTE, MAX_PORT_ATTEMPTS } from '../shared/constants';\n\n// CSS generators\nexport { generateVariablesCSS } from './cssGenerator';\n\n// Runtime abstraction\nexport * from './runtime';\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../build-astro.ts", "../../../lib/server/astro/tailwindMapper.ts", "../../../lib/server/astro/nodeToAstro.ts", "../../../lib/server/astro/templateTransformer.ts", "../../../lib/server/astro/astroEmitHelpers.ts", "../../../lib/server/astro/componentEmitter.ts", "../../../lib/server/astro/pageEmitter.ts", "../../../lib/server/astro/cmsPageEmitter.ts", "../../../lib/server/astro/cssCollector.ts", "../../../lib/server/webflow/buildWebflow.ts", "../../../lib/server/webflow/types.ts", "../../../lib/server/webflow/nodeToWebflow.ts", "../../../lib/server/webflow/styleMapper.ts", "../../../lib/server/index.ts"],
4
+ "sourcesContent": ["/**\n * Astro Export Build Script\n * Renders all pages via the SSR pipeline, then wraps them as Astro page files\n * with a shared layout, global CSS, and optional CMS content collections.\n */\n\nimport { existsSync, readdirSync, mkdirSync, rmSync, statSync, copyFileSync, writeFileSync } from \"fs\";\nimport { writeFile, readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { createHash } from \"crypto\";\nimport { inspect, minifyJS as runtimeMinifyJS } from './lib/server/runtime';\nimport {\n loadJSONFile,\n loadComponentDirectory,\n mapPageNameToPath,\n parseJSON,\n loadI18nConfig\n} from \"./lib/server/jsonLoader\";\nimport { generateSSRHTML } from \"./lib/server/ssrRenderer\";\nimport type { SSRHTMLResult } from \"./lib/server/ssr/htmlGenerator\";\nimport { projectPaths } from \"./lib/server/projectContext\";\nimport { loadProjectConfig, generateFontCSS, generateFontPreloadTags } from \"./lib/shared/fontLoader\";\nimport { FileSystemCMSProvider } from \"./lib/server/providers/fileSystemCMSProvider\";\nimport { CMSService } from \"./lib/server/services/cmsService\";\nimport { isI18nValue, resolveI18nValue } from \"./lib/shared/i18n\";\nimport type { ComponentDefinition, JSONPage, CMSSchema, CMSItem, I18nConfig } from \"./lib/shared/types\";\nimport type { CMSFieldDefinition } from \"./lib/shared/types/cms\";\nimport { isItemDraftForLocale } from \"./lib/shared/types\";\nimport type { SlugMap } from \"./lib/shared/slugTranslator\";\nimport { renderPageSSR } from \"./lib/server/ssr/ssrRenderer\";\nimport { generateThemeColorVariablesCSS, generateVariablesCSS } from \"./lib/server/cssGenerator\";\nimport { generateAllInteractiveCSS } from \"./lib/shared/cssGeneration\";\nimport { colorService } from \"./lib/server/services/ColorService\";\nimport { variableService } from \"./lib/server/services/VariableService\";\nimport { configService } from \"./lib/server/services/configService\";\nimport { loadBreakpointConfig, loadResponsiveScalesConfig, loadIconsConfig } from \"./lib/server/jsonLoader\";\nimport type { InteractiveStyles } from \"./lib/shared/types/styles\";\nimport { collectComponentLibraries, filterLibrariesByContext, mergeLibraries, generateLibraryTags } from \"./lib/shared/libraryLoader\";\nimport { migrateTemplatesDirectory } from \"./lib/server/migrateTemplates\";\nimport { emitAstroComponent } from \"./lib/server/astro/componentEmitter\";\nimport { emitAstroPage } from \"./lib/server/astro/pageEmitter\";\nimport { emitCMSPage } from './lib/server/astro/cmsPageEmitter';\nimport { collectAllMappingClasses } from \"./lib/server/astro/cssCollector\";\nimport { buildImageMetadataMap, RESPONSIVE_WIDTHS } from \"./lib/server/ssr/imageMetadata\";\nimport { needsFormHandler, formHandlerScript } from \"./lib/client/scripts/formHandler\";\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction hashContent(content: string): string {\n return createHash('sha256').update(content).digest('hex').slice(0, 8);\n}\n\nfunction writePageScript(javascript: string | undefined, scriptsDir: string): string[] {\n if (!javascript) return [];\n const hash = hashContent(javascript);\n const scriptFile = `${hash}.js`;\n if (!existsSync(scriptsDir)) {\n mkdirSync(scriptsDir, { recursive: true });\n }\n const fullScriptPath = join(scriptsDir, scriptFile);\n if (!existsSync(fullScriptPath)) {\n writeFileSync(fullScriptPath, javascript, 'utf-8');\n }\n return [`/_scripts/${scriptFile}`];\n}\n\nfunction copyDirectory(\n src: string,\n dest: string,\n filter?: (filename: string) => boolean,\n): void {\n if (!existsSync(src)) return;\n if (!existsSync(dest)) mkdirSync(dest, { recursive: true });\n const files = readdirSync(src);\n for (const file of files) {\n if (filter && !filter(file)) continue;\n const srcPath = join(src, file);\n const destPath = join(dest, file);\n const stat = statSync(srcPath);\n if (stat.isDirectory()) copyDirectory(srcPath, destPath, filter);\n else copyFileSync(srcPath, destPath);\n }\n}\n\n// Astro's <Picture> re-derives responsive variants from originals at build\n// time, so the pre-baked -{width}.webp/.avif files and the SSR-only\n// manifest.json are dead weight in the exported project.\nconst imageVariantSuffixRe = new RegExp(\n `-(${RESPONSIVE_WIDTHS.join('|')})\\\\.(webp|avif)$`,\n);\nfunction shouldCopyImageForAstro(filename: string): boolean {\n if (filename === 'manifest.json') return false;\n if (imageVariantSuffixRe.test(filename)) return false;\n return true;\n}\n\nfunction isCMSPage(pageData: JSONPage): boolean {\n return pageData.meta?.source === 'cms' && !!pageData.meta?.cms;\n}\n\n/**\n * Build URL path for a CMS item based on the URL pattern\n */\nfunction buildCMSItemPath(\n urlPattern: string,\n item: CMSItem,\n slugField: string,\n locale: string,\n i18nConfig: I18nConfig\n): string {\n let slug = item[slugField] ?? item._slug ?? item._id;\n if (isI18nValue(slug)) {\n slug = resolveI18nValue(slug, locale, i18nConfig) as string;\n }\n return urlPattern.replace('{{slug}}', String(slug));\n}\n\n/**\n * Recursively scan a directory for .json files, returning relative paths.\n */\nfunction scanJSONFiles(dir: string, prefix: string = ''): string[] {\n const results: string[] = [];\n if (!existsSync(dir)) return results;\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.json')) {\n results.push(prefix ? `${prefix}/${entry.name}` : entry.name);\n } else if (entry.isDirectory()) {\n results.push(...scanJSONFiles(join(dir, entry.name), prefix ? `${prefix}/${entry.name}` : entry.name));\n }\n }\n return results;\n}\n\n/**\n * Compute the relative import path from a file at `fromDepth` levels under src/pages/\n * back to src/layouts/BaseLayout.astro.\n */\nfunction layoutImportPath(fileDepth: number): string {\n // fileDepth = 0 means file is at src/pages/index.astro -> ../layouts/BaseLayout.astro\n // fileDepth = 1 means src/pages/en/index.astro -> ../../layouts/BaseLayout.astro\n const ups = '../'.repeat(fileDepth + 1);\n return `${ups}layouts/BaseLayout.astro`;\n}\n\n/**\n * Escape a string for use inside a JS template literal (backtick string).\n */\nfunction escapeTemplateLiteral(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n\n/**\n * Compute locale \u2192 URL path map for a page's slug translations.\n * Used by locale list rendering to generate correct links.\n */\nfunction computePageSlugMap(\n slugs: Record<string, string>,\n i18nConfig: I18nConfig\n): Record<string, string> {\n const map: Record<string, string> = {};\n for (const localeConfig of i18nConfig.locales) {\n const code = localeConfig.code;\n const isDefault = code === i18nConfig.defaultLocale;\n const slug = slugs[code] || '';\n if (isDefault) {\n map[code] = slug === '' ? '/' : `/${slug}`;\n } else {\n map[code] = slug === '' ? `/${code}` : `/${code}/${slug}`;\n }\n }\n return map;\n}\n\n/**\n * Map a CMS field type to a Zod schema string for the Astro content config.\n */\nfunction cmsFieldToZod(field: CMSFieldDefinition): string {\n switch (field.type) {\n case 'string':\n case 'text':\n case 'rich-text':\n // Support both plain strings and i18n objects { _i18n: true, en: \"...\", pl: \"...\" }\n return 'z.union([z.string(), z.object({ _i18n: z.literal(true) }).passthrough()])';\n case 'number':\n return 'z.number()';\n case 'boolean':\n return 'z.boolean()';\n case 'date':\n return 'z.coerce.date()';\n case 'select':\n if (field.options && field.options.length > 0) {\n const opts = field.options.map(o => `'${o.replace(/'/g, \"\\\\'\")}'`).join(', ');\n return `z.enum([${opts}])`;\n }\n return 'z.string()';\n case 'image':\n case 'file':\n return 'z.string()';\n case 'reference':\n return 'z.string()';\n default:\n return 'z.string()';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface PageRenderResult {\n /** Body HTML (inner content, no DOCTYPE wrapper) */\n html: string;\n /** Head meta tags HTML string */\n meta: string;\n /** Page title */\n title: string;\n /** Extracted JavaScript (if any) */\n javascript: string;\n /** Per-component CSS */\n componentCSS?: string;\n /** Locale used */\n locale: string;\n /** Interactive styles (hover, focus, etc.) */\n interactiveStylesMap: Map<string, InteractiveStyles>;\n /** The URL path this page will live at */\n urlPath: string;\n /** File depth relative to src/pages/ (0 = root, 1 = one dir deep, etc.) */\n fileDepth: number;\n /** Relative file path within src/pages/ */\n astroFilePath: string;\n /** Original page data (for Pass 2 component-structured emission) */\n pageData?: JSONPage;\n /** Page name without extension */\n pageName?: string;\n /** Whether this is a CMS template page */\n isCMSPage?: boolean;\n /** SSR fallback HTML for complex nodes (list, locale-list) keyed by element path */\n ssrFallbackCollector?: Map<string, string>;\n /** Raw-HTML slice \u2192 processed HTML captured during SSR (for Astro exporter parity) */\n processedRawHtmlCollector?: Map<string, string>;\n}\n\ninterface AstroBuildStats {\n pages: number;\n cmsPages: number;\n collections: number;\n errors: number;\n}\n\n// ---------------------------------------------------------------------------\n// SSR Fallback page builder (used for CMS pages and error fallback)\n// ---------------------------------------------------------------------------\n\nfunction buildSSRFallbackPage(\n result: PageRenderResult,\n importPath: string,\n fontPreloads: string,\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string },\n defaultTheme: string,\n scriptPaths: string[]\n): string {\n const escapedMeta = escapeTemplateLiteral(result.meta);\n const escapedHTML = escapeTemplateLiteral(result.html);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map(s => `\"${s}\"`).join(', ')}]`\n : '[]';\n\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n return `---\nimport BaseLayout from '${importPath}';\n---\n<BaseLayout\n title=\"${result.title.replace(/\"/g, '&quot;')}\"\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${result.locale}\"\n theme=\"${defaultTheme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n <Fragment set:html={\\`<div id=\"root\">${escapedHTML}</div>\\`} />\n</BaseLayout>\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nexport async function buildAstroProject(\n projectRoot?: string,\n outputDir?: string\n): Promise<AstroBuildStats> {\n const startTime = Date.now();\n\n console.log('\uD83C\uDFD7\uFE0F Building Astro export...\\n');\n\n // ----------------------------------------------------------\n // 1. Setup: load project configuration\n // ----------------------------------------------------------\n configService.reset();\n\n const projectConfig = await loadProjectConfig();\n const siteUrl = (projectConfig as { siteUrl?: string }).siteUrl?.replace(/\\/$/, '') || '';\n\n const i18nConfig = await loadI18nConfig();\n console.log(`\uD83C\uDF10 Locales: ${i18nConfig.locales.map(l => l.code).join(', ')} (default: ${i18nConfig.defaultLocale})\\n`);\n\n await migrateTemplatesDirectory();\n\n const { components, warnings, errors: compErrors } = await loadComponentDirectory(projectPaths.components());\n const globalComponents: Record<string, ComponentDefinition> = {};\n components.forEach((value, key) => { globalComponents[key] = value; });\n for (const w of warnings) console.warn(` Warning: ${w}`);\n for (const e of compErrors) console.error(` Error: ${e}`);\n console.log(`Loaded ${components.size} global component(s)\\n`);\n\n const cmsProvider = new FileSystemCMSProvider(projectPaths.templates(), projectPaths.cms());\n const cmsService = new CMSService(cmsProvider);\n await cmsService.initialize();\n console.log('CMS service initialized\\n');\n\n const themeConfig = await colorService.loadThemeConfig();\n const variablesConfig = await variableService.loadConfig();\n const breakpoints = await loadBreakpointConfig();\n const responsiveScales = await loadResponsiveScalesConfig();\n\n // Libraries (global + component)\n await configService.load();\n const globalLibraries = configService.getLibraries();\n const componentLibraries = collectComponentLibraries(globalComponents);\n\n // Build image metadata map for responsive image generation\n const imageMetadataMap = await buildImageMetadataMap();\n if (imageMetadataMap.size > 0) {\n console.log(`Loaded image metadata for ${imageMetadataMap.size} image(s)\\n`);\n }\n\n // ----------------------------------------------------------\n // 2. Clean and create output directory\n // ----------------------------------------------------------\n const outDir = outputDir || join(projectPaths.project, 'astro-export');\n\n if (existsSync(outDir)) {\n rmSync(outDir, { recursive: true, force: true });\n }\n mkdirSync(outDir, { recursive: true });\n\n // Create directory structure\n const srcDir = join(outDir, 'src');\n const pagesOutDir = join(srcDir, 'pages');\n const layoutsDir = join(srcDir, 'layouts');\n const stylesDir = join(srcDir, 'styles');\n const componentsOutDir = join(srcDir, 'components');\n const publicDir = join(outDir, 'public');\n const scriptsDir = join(publicDir, '_scripts');\n for (const d of [srcDir, pagesOutDir, layoutsDir, stylesDir, componentsOutDir, publicDir]) {\n mkdirSync(d, { recursive: true });\n }\n\n // ----------------------------------------------------------\n // 3. Scan pages\n // ----------------------------------------------------------\n const pagesDir = projectPaths.pages();\n if (!existsSync(pagesDir)) {\n console.error('Pages directory not found!');\n return { pages: 0, cmsPages: 0, collections: 0, errors: 1 };\n }\n\n const pageFiles = scanJSONFiles(pagesDir);\n if (pageFiles.length === 0) {\n console.warn('No pages found in ./pages directory');\n return { pages: 0, cmsPages: 0, collections: 0, errors: 0 };\n }\n\n console.log(`Found ${pageFiles.length} page(s) to process\\n`);\n\n // Collect slug mappings (first pass)\n const slugMappings: SlugMap[] = [];\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n if (!pageContent) continue;\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n if (pageData.meta?.slugs) {\n const pageId = basePath === '/' ? 'index' : basePath.substring(1);\n slugMappings.push({ pageId, slugs: pageData.meta.slugs });\n }\n } catch { /* ignore parse errors in first pass */ }\n }\n\n // ----------------------------------------------------------\n // 4 & 5. Render all pages (regular + CMS templates)\n // ----------------------------------------------------------\n const allResults: PageRenderResult[] = [];\n const allInteractiveStyles = new Map<string, InteractiveStyles>();\n const allComponentCSS = new Set<string>();\n const jsContents = new Map<string, string>(); // hash -> JS content\n let errorCount = 0;\n let projectNeedsFormHandler = false;\n\n // Helper to merge interactive styles maps\n function mergeInteractiveStyles(source: Map<string, InteractiveStyles>): void {\n for (const [key, value] of source) {\n if (!allInteractiveStyles.has(key)) {\n allInteractiveStyles.set(key, value);\n }\n }\n }\n\n // Helper to process a render result\n function processRenderResult(\n result: { html: string; meta: string; title: string; javascript: string; componentCSS?: string; locale: string; interactiveStylesMap: Map<string, InteractiveStyles>; preloadImages: any[]; neededCollections: Set<string>; ssrFallbackCollector?: Map<string, string>; processedRawHtmlCollector?: Map<string, string> },\n urlPath: string,\n astroFilePath: string,\n fileDepth: number,\n pageData?: JSONPage,\n pageName?: string,\n isCMSPage?: boolean\n ): void {\n // Collect interactive styles\n mergeInteractiveStyles(result.interactiveStylesMap);\n\n // Collect component CSS\n if (result.componentCSS) {\n allComponentCSS.add(result.componentCSS);\n }\n\n // Deduplicate JavaScript by content hash\n if (result.javascript) {\n const hash = hashContent(result.javascript);\n if (!jsContents.has(hash)) {\n jsContents.set(hash, result.javascript);\n }\n }\n\n // Detect forms that need the fetch handler\n if (!projectNeedsFormHandler && needsFormHandler(result.html)) {\n projectNeedsFormHandler = true;\n }\n\n allResults.push({\n html: result.html,\n meta: result.meta,\n title: result.title,\n javascript: result.javascript,\n componentCSS: result.componentCSS,\n locale: result.locale,\n interactiveStylesMap: result.interactiveStylesMap,\n urlPath,\n fileDepth,\n astroFilePath,\n pageData,\n pageName,\n isCMSPage,\n ssrFallbackCollector: result.ssrFallbackCollector,\n processedRawHtmlCollector: result.processedRawHtmlCollector,\n });\n }\n\n // ---------- Regular pages ----------\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n\n if (!pageContent) {\n console.warn(` Skipping ${basePath} (empty file)`);\n errorCount++;\n continue;\n }\n\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n\n // Skip draft pages in production\n const isDevBuild = process.env.MENO_DEV_BUILD === 'true';\n if (pageData.meta?.draft === true && !isDevBuild) {\n console.log(` Skipping draft: ${basePath}`);\n continue;\n }\n\n const slugs = pageData.meta?.slugs;\n\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n const isDefault = locale === i18nConfig.defaultLocale;\n\n // Compute URL path\n let slug: string;\n if (slugs && slugs[locale]) {\n slug = slugs[locale];\n } else if (basePath === '/') {\n slug = '';\n } else {\n slug = basePath.substring(1);\n }\n\n const urlPath = isDefault\n ? (slug === '' ? '/' : `/${slug}`)\n : (slug === '' ? `/${locale}` : `/${locale}/${slug}`);\n\n // Determine .astro file path relative to src/pages/\n const astroFileName = slug === '' ? 'index.astro' : `${slug}.astro`;\n const astroFilePath = isDefault ? astroFileName : `${locale}/${astroFileName}`;\n const fileDepth = astroFilePath.split('/').length - 1;\n\n const result = await renderPageSSR(\n pageData,\n globalComponents,\n urlPath,\n siteUrl,\n locale,\n i18nConfig,\n slugMappings,\n undefined, // cmsContext\n cmsService,\n true // isProductionBuild\n );\n\n processRenderResult(result, urlPath, astroFilePath, fileDepth, pageData, pageName, false);\n console.log(` Rendered: ${urlPath}`);\n }\n } catch (error: any) {\n console.error(` Error rendering ${basePath}:`, error?.message || error);\n errorCount++;\n }\n }\n\n // Pre-compute layout dependencies needed by both CMS and regular page emission\n const fontPreloads = generateFontPreloadTags();\n const mergedLibraries = mergeLibraries(globalLibraries, componentLibraries);\n const buildLibraries = filterLibrariesByContext(mergedLibraries, 'build');\n\n // Mirror htmlGenerator.ts: local CSS libraries with `inline !== false` are inlined\n // into a <style> tag, otherwise the file is copied to public/ so the <link href>\n // resolves. This keeps any `/some-file.css` referenced in project.config.json\n // libraries working, not just the special `custom.css` case.\n const inlineContents = new Map<string, string>();\n const localLibsToCopy: string[] = [];\n for (const css of buildLibraries.css || []) {\n if (!css.url.startsWith('/')) continue;\n const shouldInline = css.inline !== false;\n const relPath = css.url.slice(1);\n const srcPath = join(projectPaths.project, relPath);\n if (!existsSync(srcPath)) continue;\n if (shouldInline) {\n try {\n inlineContents.set(css.url, await readFile(srcPath, 'utf-8'));\n } catch {\n localLibsToCopy.push(relPath);\n }\n } else {\n localLibsToCopy.push(relPath);\n }\n }\n for (const js of buildLibraries.js || []) {\n if (js.url.startsWith('/')) {\n const relPath = js.url.slice(1);\n if (existsSync(join(projectPaths.project, relPath))) {\n localLibsToCopy.push(relPath);\n }\n }\n }\n const libraryTags = generateLibraryTags(buildLibraries, inlineContents);\n const defaultTheme = themeConfig.default || 'light';\n\n // Global customCode (head/bodyStart/bodyEnd) and icons from project.config.json\n // are page-independent, so we bake them directly into BaseLayout.astro rather\n // than plumbing them through every page's props. Mirrors htmlGenerator.ts's\n // SSR output (htmlGenerator.ts:269-507 for customCode, 368-473 for icons).\n const customCode = configService.getCustomCode();\n const iconsConfig = await loadIconsConfig();\n const faviconTag = iconsConfig.favicon\n ? `<link rel=\"icon\" href=\"${iconsConfig.favicon.replace(/\"/g, '&quot;')}\" />`\n : '';\n const appleTouchIconTag = iconsConfig.appleTouchIcon\n ? `<link rel=\"apple-touch-icon\" href=\"${iconsConfig.appleTouchIcon.replace(/\"/g, '&quot;')}\" />`\n : '';\n const iconTagsHtml = [faviconTag, appleTouchIconTag].filter(Boolean).join('\\n ');\n\n // ---------- CMS template pages ----------\n const templatesDir = projectPaths.templates();\n const templateSchemas: CMSSchema[] = [];\n let cmsPageCount = 0;\n\n if (existsSync(templatesDir)) {\n const templateFiles = readdirSync(templatesDir).filter(f => f.endsWith('.json'));\n\n if (templateFiles.length > 0) {\n console.log(`\\nProcessing ${templateFiles.length} CMS template(s)...\\n`);\n }\n\n for (const file of templateFiles) {\n const templateContent = await loadJSONFile(join(templatesDir, file));\n if (!templateContent) continue;\n\n try {\n const pageData = parseJSON<JSONPage>(templateContent);\n\n const isDevBuild = process.env.MENO_DEV_BUILD === 'true';\n if (pageData.meta?.draft === true && !isDevBuild) {\n console.log(` Skipping draft template: ${file}`);\n continue;\n }\n\n if (!isCMSPage(pageData)) {\n console.warn(` ${file} is in templates/ but missing meta.source: \"cms\"`);\n continue;\n }\n\n const cmsSchema = pageData.meta!.cms as CMSSchema;\n templateSchemas.push(cmsSchema);\n console.log(` CMS Collection: ${cmsSchema.id}`);\n\n // Count items for stats\n const items = await cmsService.queryItems({ collection: cmsSchema.id });\n const itemCount = items.length;\n\n if (itemCount === 0) {\n console.log(` No items found in cms/${cmsSchema.id}/`);\n } else {\n console.log(` Found ${itemCount} item(s)`);\n }\n\n // Render SSR once for metadata collection (interactive styles, component CSS, JS)\n const defaultLocale = i18nConfig.defaultLocale;\n const dummyPath = cmsSchema.urlPattern.replace('{{slug}}', '__placeholder__');\n\n const metaResult = await renderPageSSR(\n pageData,\n globalComponents,\n dummyPath,\n siteUrl,\n defaultLocale,\n i18nConfig,\n slugMappings,\n undefined, // no CMS context - just collecting metadata\n cmsService,\n true\n );\n\n // Collect interactive styles and component CSS\n mergeInteractiveStyles(metaResult.interactiveStylesMap);\n if (metaResult.componentCSS) {\n allComponentCSS.add(metaResult.componentCSS);\n }\n\n // Deduplicate JavaScript by content hash\n const scriptPaths: string[] = [];\n if (metaResult.javascript) {\n const hash = hashContent(metaResult.javascript);\n if (!jsContents.has(hash)) {\n jsContents.set(hash, metaResult.javascript);\n }\n scriptPaths.push(`/_scripts/${hash}.js`);\n }\n\n // Determine route file path from urlPattern\n const isMultiLocale = i18nConfig.locales.length > 1;\n const urlPatternWithoutSlash = cmsSchema.urlPattern.replace(/^\\//, '');\n const slugPlaceholderIdx = urlPatternWithoutSlash.indexOf('{{');\n const pathPrefix = slugPlaceholderIdx > 0 ? urlPatternWithoutSlash.substring(0, slugPlaceholderIdx) : '';\n\n // Generate CMS page with getStaticPaths()\n const ssrFallbacks = metaResult.ssrFallbackCollector ?? new Map<string, string>();\n\n // For each locale (or just default), generate a route file\n const localesToEmit = isMultiLocale ? i18nConfig.locales : [{ code: i18nConfig.defaultLocale }];\n\n for (const localeEntry of localesToEmit) {\n const localeCode = localeEntry.code;\n const isDefault = localeCode === i18nConfig.defaultLocale;\n\n // Route file path: blog/[slug].astro for default, pl/blog/[slug].astro for non-default\n let astroFilePath: string;\n if (pathPrefix) {\n astroFilePath = isDefault\n ? `${pathPrefix}[slug].astro`\n : `${localeCode}/${pathPrefix}[slug].astro`;\n } else {\n astroFilePath = isDefault\n ? '[slug].astro'\n : `${localeCode}/[slug].astro`;\n }\n\n const fileDepth = astroFilePath.split('/').length - 1;\n const importPath = layoutImportPath(fileDepth);\n\n const astroContent = emitCMSPage({\n pageData,\n globalComponents,\n cmsSchema,\n title: String(pageData.meta?.title || cmsSchema.name),\n meta: metaResult.meta,\n locale: localeCode,\n theme: defaultTheme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath: importPath,\n fileDepth,\n ssrFallbacks,\n pageName: file.replace('.json', ''),\n breakpoints,\n responsiveScales,\n imageMetadataMap,\n i18nConfig,\n isMultiLocale: false, // Each file handles one locale\n slugMappings,\n imageFormat: configService.getImageFormat(),\n processedRawHtml: metaResult.processedRawHtmlCollector,\n });\n\n const astroFileFull = join(pagesOutDir, astroFilePath);\n const astroFileDir = astroFileFull.substring(0, astroFileFull.lastIndexOf('/'));\n if (!existsSync(astroFileDir)) {\n mkdirSync(astroFileDir, { recursive: true });\n }\n\n await writeFile(astroFileFull, astroContent, 'utf-8');\n }\n\n console.log(` Generated: ${pathPrefix}[slug].astro (${itemCount} items \u00D7 ${localesToEmit.length} locale(s))`);\n\n cmsPageCount += itemCount * i18nConfig.locales.length;\n } catch (error: any) {\n console.error(` Error processing template ${file}:`, error?.message || error);\n errorCount++;\n }\n }\n }\n\n // ----------------------------------------------------------\n // 6. Generate global CSS (Tailwind + theme + interactive styles)\n // ----------------------------------------------------------\n // Collect Tailwind safelist classes from mapping variants\n const mappingClasses = collectAllMappingClasses(globalComponents, breakpoints, responsiveScales);\n\n const fontCSS = generateFontCSS();\n const themeColorCSS = generateThemeColorVariablesCSS(themeConfig);\n const variablesCSS = generateVariablesCSS(variablesConfig, breakpoints, responsiveScales);\n const remConversionConfig = configService.getRemConversion();\n const interactiveCSS = generateAllInteractiveCSS(allInteractiveStyles, breakpoints, remConversionConfig, responsiveScales);\n const componentCSSCombined = Array.from(allComponentCSS).join('\\n');\n\n const baseCSS = `@layer base {\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif; }\n button { background: none; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit; }\n img { display: block; width: 100%; height: 100%; }\n picture { display: block; }\n .olink { text-decoration: none; display: block; }\n .oem { display: inline-block; }\n}`;\n\n const safelistClasses = Array.from(mappingClasses);\n const safelistDirectives = safelistClasses\n .map(c => `@source inline(\"${c}\");`)\n .join('\\n');\n const tailwindDirectives = safelistDirectives\n ? `@import \"tailwindcss\";\\n\\n${safelistDirectives}`\n : `@import \"tailwindcss\";`;\n\n const globalCSS = [tailwindDirectives, fontCSS, themeColorCSS, variablesCSS, baseCSS, componentCSSCombined, interactiveCSS]\n .filter(Boolean)\n .join('\\n\\n');\n\n await writeFile(join(stylesDir, 'global.css'), globalCSS, 'utf-8');\n console.log(`\\nGenerated global.css (${(globalCSS.length / 1024).toFixed(1)} KB)`);\n\n // ----------------------------------------------------------\n // 7. Generate BaseLayout.astro\n // ----------------------------------------------------------\n // Escape for embedding inside Astro <Fragment set:html={`...`}> template\n // literals in the generated BaseLayout file.\n const escForTemplateLiteral = (s: string) => s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/\\$\\{/g, '\\\\${');\n\n const customHeadLiteral = escForTemplateLiteral(customCode.head || '');\n const customBodyStartLiteral = escForTemplateLiteral(customCode.bodyStart || '');\n const customBodyEndLiteral = escForTemplateLiteral(customCode.bodyEnd || '');\n const iconTagsLiteral = escForTemplateLiteral(iconTagsHtml);\n\n const formHandlerBlock = projectNeedsFormHandler\n ? `\\n <script is:inline>\\n${formHandlerScript}\\n </script>`\n : '';\n\n const baseLayoutContent = `---\nimport '../styles/global.css';\n\ninterface Props {\n title: string;\n meta?: string;\n scripts?: string[];\n locale?: string;\n theme?: string;\n fontPreloads?: string;\n libraryTags?: { headCSS?: string; headJS?: string; bodyEndJS?: string };\n}\n\nconst { title, meta = '', scripts = [], locale = 'en', theme = '${themeConfig.default || 'light'}', fontPreloads = '', libraryTags = {} } = Astro.props;\n---\n<!DOCTYPE html>\n<html lang={locale} data-theme={theme}>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <Fragment set:html={\\`${iconTagsLiteral}\\`} />\n <Fragment set:html={fontPreloads} />\n <Fragment set:html={libraryTags.headCSS || ''} />\n <Fragment set:html={libraryTags.headJS || ''} />\n <Fragment set:html={meta} />\n <Fragment set:html={\\`${customHeadLiteral}\\`} />\n <title>{title}</title>\n</head>\n<body>\n <Fragment set:html={\\`${customBodyStartLiteral}\\`} />\n <slot />\n {scripts.map((s) => <script src={s} />)}\n <Fragment set:html={libraryTags.bodyEndJS || ''} />\n <Fragment set:html={\\`${customBodyEndLiteral}\\`} />${formHandlerBlock}\n</body>\n</html>\n`;\n\n await writeFile(join(layoutsDir, 'BaseLayout.astro'), baseLayoutContent, 'utf-8');\n console.log('Generated BaseLayout.astro');\n\n // ----------------------------------------------------------\n // 7.5. Generate component .astro files\n // ----------------------------------------------------------\n let componentFileCount = 0;\n for (const [compName, compDef] of Object.entries(globalComponents)) {\n try {\n const astroContent = emitAstroComponent(compName, compDef, globalComponents, breakpoints, i18nConfig.defaultLocale, responsiveScales);\n await writeFile(join(componentsOutDir, `${compName}.astro`), astroContent, 'utf-8');\n componentFileCount++;\n } catch (error: any) {\n console.warn(` Warning: could not generate component ${compName}: ${error?.message}`);\n }\n }\n console.log(`Generated ${componentFileCount} component .astro file(s)`);\n\n // ----------------------------------------------------------\n // 8. Generate .astro page files (component-structured)\n // ----------------------------------------------------------\n for (const result of allResults) {\n const importPath = layoutImportPath(result.fileDepth);\n\n // Write JavaScript to public/_scripts/ if present (only needed for SSR fallback pages)\n let scriptPaths: string[] = [];\n\n let astroContent: string;\n\n // Use component-structured emission for pages with page data\n if (result.pageData) {\n try {\n // Use SSR fallback collector from the initial render (paths already match nodeToAstro convention)\n const ssrFallbacks = result.ssrFallbackCollector ?? new Map<string, string>();\n\n // Compute slug map for locale list rendering\n const pageSlugMap: Record<string, string> | undefined =\n result.pageData.meta?.slugs\n ? computePageSlugMap(result.pageData.meta.slugs, i18nConfig)\n : undefined;\n\n // Component-structured pages don't need page-level _scripts/*.js\n // because each .astro component already has its own inline <script>\n astroContent = emitAstroPage({\n pageData: result.pageData,\n globalComponents,\n title: result.title,\n meta: result.meta,\n locale: result.locale,\n theme: defaultTheme,\n fontPreloads,\n libraryTags,\n scriptPaths: [],\n layoutImportPath: importPath,\n fileDepth: result.fileDepth,\n ssrFallbacks,\n pageName: result.pageName || 'index',\n breakpoints,\n responsiveScales,\n imageMetadataMap,\n i18nConfig: i18nConfig.locales.length > 1 ? i18nConfig : undefined,\n currentPageSlugMap: pageSlugMap,\n slugMappings: i18nConfig.locales.length > 1 ? slugMappings : undefined,\n imageFormat: configService.getImageFormat(),\n processedRawHtml: result.processedRawHtmlCollector,\n });\n } catch (error: any) {\n // Fallback to SSR HTML if component emission fails \u2014 needs page-level script\n console.warn(` Warning: component emission failed for ${result.urlPath}, using SSR fallback: ${error?.message}`);\n scriptPaths = writePageScript(result.javascript, scriptsDir);\n astroContent = buildSSRFallbackPage(result, importPath, fontPreloads, libraryTags, defaultTheme, scriptPaths);\n }\n } else {\n // Pages without pageData: use SSR fallback \u2014 needs page-level script\n scriptPaths = writePageScript(result.javascript, scriptsDir);\n astroContent = buildSSRFallbackPage(result, importPath, fontPreloads, libraryTags, defaultTheme, scriptPaths);\n }\n\n const astroFileFull = join(pagesOutDir, result.astroFilePath);\n const astroFileDir = astroFileFull.substring(0, astroFileFull.lastIndexOf('/'));\n if (!existsSync(astroFileDir)) {\n mkdirSync(astroFileDir, { recursive: true });\n }\n\n await writeFile(astroFileFull, astroContent, 'utf-8');\n }\n\n console.log(`Generated ${allResults.length} .astro page file(s)`);\n\n // ----------------------------------------------------------\n // 8.5. Generate robots.txt endpoint\n // ----------------------------------------------------------\n const robotsTsContent = `import type { APIRoute } from 'astro';\n\nexport const GET: APIRoute = () => {\n const siteUrl = import.meta.env.SITE;\n const robotsTxt = [\n 'User-agent: *',\n 'Allow: /',\n '',\n siteUrl ? \\`Sitemap: \\${siteUrl}/sitemap-index.xml\\` : '',\n ].filter(Boolean).join('\\\\n');\n\n return new Response(robotsTxt, {\n headers: { 'Content-Type': 'text/plain; charset=utf-8' },\n });\n};\n`;\n await writeFile(join(pagesOutDir, 'robots.txt.ts'), robotsTsContent, 'utf-8');\n console.log('Generated robots.txt.ts endpoint');\n\n // ----------------------------------------------------------\n // 9. Generate CMS content collections (if templates exist)\n // ----------------------------------------------------------\n let collectionCount = 0;\n\n if (templateSchemas.length > 0) {\n const contentDir = join(srcDir, 'content');\n mkdirSync(contentDir, { recursive: true });\n\n const collectionDefs: string[] = [];\n\n for (const schema of templateSchemas) {\n const collectionDir = join(contentDir, schema.id);\n mkdirSync(collectionDir, { recursive: true });\n\n // Copy CMS item JSON files, resolving i18n values to default locale\n const cmsItemsDir = join(projectPaths.cms(), schema.id);\n if (existsSync(cmsItemsDir)) {\n const itemFiles = readdirSync(cmsItemsDir).filter(f => f.endsWith('.json'));\n\n for (const itemFile of itemFiles) {\n try {\n const rawContent = await readFile(join(cmsItemsDir, itemFile), 'utf-8');\n const item = JSON.parse(rawContent) as CMSItem;\n\n // Keep i18n values as-is so getStaticPaths() can resolve per-locale\n const resolved: Record<string, unknown> = { ...item };\n\n await writeFile(\n join(collectionDir, itemFile),\n JSON.stringify(resolved, null, 2),\n 'utf-8'\n );\n } catch (err: any) {\n console.warn(` Warning: could not process CMS item ${itemFile}: ${err?.message}`);\n }\n }\n }\n\n // Build Zod schema for this collection\n const fieldDefs: string[] = [];\n if (schema.fields) {\n for (const [fieldName, fieldDef] of Object.entries(schema.fields)) {\n const zodType = cmsFieldToZod(fieldDef);\n const optional = fieldDef.required ? '' : '.optional()';\n fieldDefs.push(` ${fieldName}: ${zodType}${optional}`);\n }\n }\n\n collectionDefs.push(` '${schema.id}': defineCollection({\n loader: glob({ pattern: '**/*.json', base: './src/content/${schema.id}' }),\n schema: z.object({\n${fieldDefs.join(',\\n')}\n })\n })`);\n\n collectionCount++;\n }\n\n // Write src/content.config.ts (Astro 6 location \u2014 legacy src/content/config.ts is rejected)\n const configContent = `import { z, defineCollection } from 'astro:content';\nimport { glob } from 'astro/loaders';\n\nconst collections = {\n${collectionDefs.join(',\\n')}\n};\n\nexport { collections };\n`;\n\n await writeFile(join(srcDir, 'content.config.ts'), configContent, 'utf-8');\n console.log(`Generated ${collectionCount} content collection(s) with content.config.ts`);\n }\n\n // ----------------------------------------------------------\n // 10. Copy assets\n // ----------------------------------------------------------\n // Images go to src/assets/images so Astro's asset pipeline can process\n // them via astro:assets `<Picture>` (hashing, on-edit reprocessing).\n // Everything else stays in public/ \u2014 fonts/icons/videos need stable URLs.\n let copiedAssets = 0;\n\n const imagesSrcDir = join(projectPaths.project, 'images');\n if (existsSync(imagesSrcDir)) {\n // src/assets/images: used by static <Picture> via ESM imports + Vite asset\n // pipeline. Pre-baked responsive variants and manifest.json are excluded \u2014\n // Astro regenerates those from the originals.\n copyDirectory(imagesSrcDir, join(srcDir, 'assets', 'images'), shouldCopyImageForAstro);\n // public/images: used by the legacy <img>/<picture> srcset path and\n // rich-text image rewrites, which emit plain `/images/...` URLs pointing at\n // the pre-built variants. Without this mirror, any image not routed through\n // the static Picture path (variants referenced directly in a srcset,\n // CMS/template-bound images, component-prop images) 404s in `astro dev`.\n copyDirectory(imagesSrcDir, join(publicDir, 'images'));\n copiedAssets++;\n }\n\n const publicAssetDirs = ['fonts', 'icons', 'videos', 'assets'];\n for (const dir of publicAssetDirs) {\n const srcAssetDir = join(projectPaths.project, dir);\n if (existsSync(srcAssetDir)) {\n copyDirectory(srcAssetDir, join(publicDir, dir));\n copiedAssets++;\n }\n }\n\n // Copy libraries folder if it exists\n const librariesDir = join(projectPaths.project, 'libraries');\n if (existsSync(librariesDir)) {\n copyDirectory(librariesDir, join(publicDir, 'libraries'));\n copiedAssets++;\n }\n\n // Copy any project-root library files referenced by absolute URL in\n // project.config.json (e.g. `/custom.css`). Only copies entries we already\n // validated exist on disk during library tag generation above.\n for (const relPath of localLibsToCopy) {\n const srcPath = join(projectPaths.project, relPath);\n const destPath = join(publicDir, relPath);\n const destDir = destPath.substring(0, destPath.lastIndexOf('/'));\n if (destDir && !existsSync(destDir)) mkdirSync(destDir, { recursive: true });\n copyFileSync(srcPath, destPath);\n copiedAssets++;\n }\n\n if (copiedAssets > 0) {\n console.log(`Copied ${copiedAssets} asset director${copiedAssets === 1 ? 'y' : 'ies'} to public/`);\n }\n\n // ----------------------------------------------------------\n // 11. Generate scaffold files\n // ----------------------------------------------------------\n\n // package.json\n const packageJson = {\n name: 'astro-export',\n type: 'module',\n version: '0.0.1',\n private: true,\n scripts: {\n dev: 'astro dev',\n start: 'astro dev',\n build: 'astro build',\n preview: 'astro preview',\n },\n dependencies: {\n 'astro': '^6.0.0',\n '@astrojs/sitemap': '^3.0.0',\n '@tailwindcss/vite': '^4.0.0',\n 'tailwindcss': '^4.0.0',\n },\n // Astro 6 expects Vite 7; pin it so npm doesn't pull Vite 8+ and warn.\n overrides: {\n 'vite': '^7.0.0',\n },\n };\n\n await writeFile(join(outDir, 'package.json'), JSON.stringify(packageJson, null, 2), 'utf-8');\n\n // astro.config.mjs\n const localeCodes = i18nConfig.locales.map(l => l.code);\n const i18nBlock = i18nConfig.locales.length > 1\n ? `\\n i18n: {\\n defaultLocale: '${i18nConfig.defaultLocale}',\\n locales: [${localeCodes.map(c => `'${c}'`).join(', ')}],\\n routing: { prefixDefaultLocale: false },\\n },`\n : '';\n\n const astroConfig = `import { defineConfig } from 'astro/config';\nimport tailwindcss from '@tailwindcss/vite';\nimport sitemap from '@astrojs/sitemap';\n\nexport default defineConfig({${siteUrl ? `\\n site: '${siteUrl}',` : ''}${i18nBlock}\n integrations: [sitemap()],\n vite: {\n plugins: [tailwindcss()],\n },\n});\n`;\n\n await writeFile(join(outDir, 'astro.config.mjs'), astroConfig, 'utf-8');\n\n // tsconfig.json\n const tsConfig = {\n extends: 'astro/tsconfigs/strict',\n };\n\n await writeFile(join(outDir, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2), 'utf-8');\n\n console.log('Generated package.json, astro.config.mjs, tsconfig.json');\n\n // ----------------------------------------------------------\n // 12. Summary\n // ----------------------------------------------------------\n const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\n const totalPages = allResults.length;\n\n console.log('\\n' + '='.repeat(50));\n console.log('Astro export complete!');\n console.log(` Pages: ${totalPages - cmsPageCount}`);\n if (cmsPageCount > 0) {\n console.log(` CMS pages: ${cmsPageCount}`);\n }\n if (collectionCount > 0) {\n console.log(` Content collections: ${collectionCount}`);\n }\n if (errorCount > 0) {\n console.log(` Errors: ${errorCount}`);\n }\n console.log(` SEO: sitemap (@astrojs/sitemap), robots.txt`);\n if (projectNeedsFormHandler) {\n console.log(` Forms: fetch handler injected`);\n }\n console.log(` Time: ${elapsed}s`);\n console.log(` Output: ${outDir}`);\n console.log('');\n\n return {\n pages: totalPages - cmsPageCount,\n cmsPages: cmsPageCount,\n collections: collectionCount,\n errors: errorCount,\n };\n}\n", "/**\n * Tailwind CSS Class Mapper for Astro Export\n * Converts CSS property:value pairs to Tailwind utility classes.\n * Uses exact-match table for common values, arbitrary value fallback for the rest.\n */\n\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport type { ResponsiveScales, CSSPropertyType } from '../../shared/responsiveScaling';\nimport { getScaleMultiplier, scalePropertyValue } from '../../shared/responsiveScaling';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction hasTemplateExpression(value: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(value);\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n// ---------------------------------------------------------------------------\n// Exact match table: property+value \u2192 Tailwind class\n// ---------------------------------------------------------------------------\n\nconst exactMatches: Record<string, Record<string, string>> = {\n display: {\n flex: 'flex',\n grid: 'grid',\n block: 'block',\n none: 'hidden',\n inline: 'inline',\n 'inline-block': 'inline-block',\n 'inline-flex': 'inline-flex',\n 'inline-grid': 'inline-grid',\n },\n flexDirection: {\n column: 'flex-col',\n row: 'flex-row',\n 'column-reverse': 'flex-col-reverse',\n 'row-reverse': 'flex-row-reverse',\n },\n justifyContent: {\n center: 'justify-center',\n 'flex-start': 'justify-start',\n 'flex-end': 'justify-end',\n 'space-between': 'justify-between',\n 'space-around': 'justify-around',\n 'space-evenly': 'justify-evenly',\n // camelCase aliases (component data uses camelCase)\n spaceBetween: 'justify-between',\n spaceAround: 'justify-around',\n spaceEvenly: 'justify-evenly',\n flexStart: 'justify-start',\n flexEnd: 'justify-end',\n },\n alignItems: {\n center: 'items-center',\n 'flex-start': 'items-start',\n 'flex-end': 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n // camelCase aliases\n flexStart: 'items-start',\n flexEnd: 'items-end',\n },\n alignContent: {\n center: 'content-center',\n 'flex-start': 'content-start',\n 'flex-end': 'content-end',\n 'space-between': 'content-between',\n 'space-around': 'content-around',\n stretch: 'content-stretch',\n },\n alignSelf: {\n auto: 'self-auto',\n center: 'self-center',\n 'flex-start': 'self-start',\n 'flex-end': 'self-end',\n stretch: 'self-stretch',\n },\n position: {\n relative: 'relative',\n absolute: 'absolute',\n fixed: 'fixed',\n sticky: 'sticky',\n static: 'static',\n },\n overflow: {\n hidden: 'overflow-hidden',\n auto: 'overflow-auto',\n scroll: 'overflow-scroll',\n visible: 'overflow-visible',\n },\n overflowX: {\n hidden: 'overflow-x-hidden',\n auto: 'overflow-x-auto',\n scroll: 'overflow-x-scroll',\n visible: 'overflow-x-visible',\n },\n overflowY: {\n hidden: 'overflow-y-hidden',\n auto: 'overflow-y-auto',\n scroll: 'overflow-y-scroll',\n visible: 'overflow-y-visible',\n },\n cursor: {\n pointer: 'cursor-pointer',\n default: 'cursor-default',\n 'not-allowed': 'cursor-not-allowed',\n grab: 'cursor-grab',\n grabbing: 'cursor-grabbing',\n text: 'cursor-text',\n move: 'cursor-move',\n wait: 'cursor-wait',\n },\n textAlign: {\n center: 'text-center',\n left: 'text-left',\n right: 'text-right',\n justify: 'text-justify',\n },\n textDecoration: {\n none: 'no-underline',\n underline: 'underline',\n 'line-through': 'line-through',\n overline: 'overline',\n },\n textTransform: {\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n none: 'normal-case',\n },\n objectFit: {\n cover: 'object-cover',\n contain: 'object-contain',\n fill: 'object-fill',\n none: 'object-none',\n 'scale-down': 'object-scale-down',\n },\n objectPosition: {\n center: 'object-center',\n top: 'object-top',\n bottom: 'object-bottom',\n left: 'object-left',\n right: 'object-right',\n },\n flexWrap: {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n },\n pointerEvents: {\n none: 'pointer-events-none',\n auto: 'pointer-events-auto',\n },\n userSelect: {\n none: 'select-none',\n auto: 'select-auto',\n text: 'select-text',\n all: 'select-all',\n },\n visibility: {\n hidden: 'invisible',\n visible: 'visible',\n },\n whiteSpace: {\n normal: 'whitespace-normal',\n nowrap: 'whitespace-nowrap',\n pre: 'whitespace-pre',\n 'pre-wrap': 'whitespace-pre-wrap',\n 'pre-line': 'whitespace-pre-line',\n },\n wordBreak: {\n 'break-all': 'break-all',\n 'break-word': 'break-words',\n normal: 'break-normal',\n },\n listStyleType: {\n none: 'list-none',\n disc: 'list-disc',\n decimal: 'list-decimal',\n },\n listStylePosition: {\n inside: 'list-inside',\n outside: 'list-outside',\n },\n boxSizing: {\n 'border-box': 'box-border',\n 'content-box': 'box-content',\n },\n gridAutoFlow: {\n row: 'grid-flow-row',\n column: 'grid-flow-col',\n dense: 'grid-flow-dense',\n 'row dense': 'grid-flow-row-dense',\n 'column dense': 'grid-flow-col-dense',\n },\n};\n\n// Single-value exact matches (property \u2192 class when value matches)\nconst singleValueMatches: Record<string, string> = {\n // width/height 100%\n 'width:100%': 'w-full',\n 'height:100%': 'h-full',\n 'width:100vw': 'w-screen',\n 'height:100vh': 'h-screen',\n 'width:auto': 'w-auto',\n 'height:auto': 'h-auto',\n 'width:fit-content': 'w-fit',\n 'height:fit-content': 'h-fit',\n 'width:min-content': 'w-min',\n 'height:min-content': 'h-min',\n 'width:max-content': 'w-max',\n 'height:max-content': 'h-max',\n 'maxWidth:100%': 'max-w-full',\n 'maxWidth:none': 'max-w-none',\n 'maxHeight:100%': 'max-h-full',\n 'maxHeight:none': 'max-h-none',\n 'minWidth:0': 'min-w-0',\n 'minHeight:0': 'min-h-0',\n 'margin:auto': 'm-auto',\n 'margin:0 auto': 'mx-auto',\n 'marginLeft:auto': 'ml-auto',\n 'marginRight:auto': 'mr-auto',\n 'marginInline:auto': 'mx-auto',\n 'borderRadius:50%': 'rounded-full',\n 'borderRadius:9999px': 'rounded-full',\n 'borderRadius:0': 'rounded-none',\n 'flex:1': 'flex-1',\n 'flex:none': 'flex-none',\n 'flex:auto': 'flex-auto',\n 'flexGrow:0': 'grow-0',\n 'flexGrow:1': 'grow',\n 'flexShrink:0': 'shrink-0',\n 'flexShrink:1': 'shrink',\n 'opacity:0': 'opacity-0',\n 'opacity:1': 'opacity-100',\n 'zIndex:0': 'z-0',\n 'zIndex:10': 'z-10',\n 'zIndex:20': 'z-20',\n 'zIndex:30': 'z-30',\n 'zIndex:40': 'z-40',\n 'zIndex:50': 'z-50',\n 'inset:0': 'inset-0',\n 'top:0': 'top-0',\n 'right:0': 'right-0',\n 'bottom:0': 'bottom-0',\n 'left:0': 'left-0',\n 'outline:none': '[outline:none]',\n 'background:none': '[background:none]',\n 'background:transparent': '[background:transparent]',\n 'backgroundColor:transparent': 'bg-transparent',\n};\n\n// ---------------------------------------------------------------------------\n// Arbitrary value prefix map: CSS property \u2192 Tailwind prefix\n// ---------------------------------------------------------------------------\n\nconst arbitraryPrefixMap: Record<string, string> = {\n // Spacing\n padding: 'p',\n paddingTop: 'pt',\n paddingRight: 'pr',\n paddingBottom: 'pb',\n paddingLeft: 'pl',\n paddingInline: 'px',\n paddingBlock: 'py',\n margin: 'm',\n marginTop: 'mt',\n marginRight: 'mr',\n marginBottom: 'mb',\n marginLeft: 'ml',\n marginInline: 'mx',\n marginBlock: 'my',\n gap: 'gap',\n rowGap: 'gap-y',\n columnGap: 'gap-x',\n\n // Sizing\n width: 'w',\n height: 'h',\n maxWidth: 'max-w',\n maxHeight: 'max-h',\n minWidth: 'min-w',\n minHeight: 'min-h',\n\n // Typography\n fontSize: 'text',\n fontWeight: 'font',\n fontFamily: 'font',\n lineHeight: 'leading',\n letterSpacing: 'tracking',\n\n // Borders\n borderRadius: 'rounded',\n borderTopLeftRadius: 'rounded-tl',\n borderTopRightRadius: 'rounded-tr',\n borderBottomLeftRadius: 'rounded-bl',\n borderBottomRightRadius: 'rounded-br',\n border: 'border',\n borderTop: 'border-t',\n borderRight: 'border-r',\n borderBottom: 'border-b',\n borderLeft: 'border-l',\n borderColor: 'border',\n\n // Colors\n color: 'text',\n backgroundColor: 'bg',\n background: 'bg',\n backgroundImage: 'bg',\n\n // Effects\n opacity: 'opacity',\n boxShadow: 'shadow',\n textShadow: '[text-shadow]',\n filter: '[filter]',\n backdropFilter: 'backdrop',\n transform: '[transform]',\n transformOrigin: 'origin',\n transition: '[transition]',\n mixBlendMode: 'mix-blend',\n clipPath: '[clip-path]',\n\n // Positioning\n top: 'top',\n right: 'right',\n bottom: 'bottom',\n left: 'left',\n inset: 'inset',\n zIndex: 'z',\n\n // Grid\n gridTemplateColumns: 'grid-cols',\n gridTemplateRows: 'grid-rows',\n gridColumn: 'col',\n gridRow: 'row',\n gridAutoRows: 'auto-rows',\n gridAutoColumns: 'auto-cols',\n\n // Flexbox extras\n flexGrow: 'grow',\n flexShrink: 'shrink',\n flexBasis: 'basis',\n order: 'order',\n flex: 'flex',\n\n // Aspect ratio\n aspectRatio: 'aspect',\n\n // Outline\n outline: 'outline',\n outlineWidth: 'outline',\n outlineOffset: 'outline-offset',\n outlineColor: 'outline',\n\n // Other\n accentColor: 'accent',\n textIndent: '[text-indent]',\n verticalAlign: 'align',\n overflowWrap: '[overflow-wrap]',\n scrollBehavior: 'scroll',\n resize: 'resize',\n};\n\n// ---------------------------------------------------------------------------\n// Core conversion functions\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single CSS property:value pair to a Tailwind class.\n * Returns null if the value should be skipped (mappings, templates).\n */\nexport function propertyToTailwind(\n property: string,\n value: string | number\n): string | null {\n const strValue = String(value);\n\n // Skip empty values \u2014 they produce broken classes like gap-[], mt-[]\n if (strValue === '') return null;\n\n // Skip template expressions \u2014 these must be handled via inline style\n if (hasTemplateExpression(strValue)) return null;\n\n // Check single-value exact matches first\n const singleKey = `${property}:${strValue}`;\n if (singleValueMatches[singleKey]) {\n return singleValueMatches[singleKey];\n }\n\n // Check exact match table\n if (exactMatches[property]?.[strValue]) {\n return exactMatches[property][strValue];\n }\n\n // Color variable handling:\n // \"var(--text)\" \u2192 \"text-[color:var(--text)]\" (type hint avoids ambiguity with font-size)\n // Bare color name like \"text\" \u2192 \"text-[color:var(--text)]\"\n if (property === 'color' || property === 'backgroundColor' || property === 'borderColor') {\n const prefix = property === 'color' ? 'text' : property === 'backgroundColor' ? 'bg' : 'border';\n if (strValue.includes('var(')) {\n return `${prefix}-[color:${strValue}]`;\n }\n // Bare name (not a hex, rgb, or number-starting value)\n if (!strValue.match(/^[#\\d]/) && !strValue.includes('rgb') && !strValue.includes('hsl')) {\n return `${prefix}-[color:var(--${strValue})]`;\n }\n }\n\n // Color properties with actual color values need type hints to avoid ambiguity\n if (property === 'borderColor' || property === 'color') {\n const prefix = property === 'color' ? 'text' : 'border';\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `${prefix}-[color:${sanitized}]`;\n }\n\n // Border shorthand (e.g., \"1px solid\", \"2px solid var(--border)\") needs arbitrary property syntax\n // because Tailwind's border-[...] only accepts width values, not compound shorthands\n if (property === 'border' || property === 'borderTop' || property === 'borderRight' ||\n property === 'borderBottom' || property === 'borderLeft') {\n if (strValue.includes('solid') || strValue.includes('dashed') || strValue.includes('dotted') || strValue.includes('none')) {\n const cssProp = property.replace(/([A-Z])/g, '-$1').toLowerCase();\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `[${cssProp}:${sanitized}]`;\n }\n }\n\n // `background` is a CSS shorthand \u2014 Tailwind's bg-[...] maps to background-color, not background.\n // For non-color values (none, transparent, gradients, etc.), use arbitrary property syntax.\n if (property === 'background') {\n const isSimpleColor = /^(#[0-9a-fA-F]{3,8}|rgb|hsl|var\\()/.test(strValue);\n if (!isSimpleColor) {\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `[background:${sanitized}]`;\n }\n }\n\n // Arbitrary value fallback\n const twPrefix = arbitraryPrefixMap[property];\n if (!twPrefix) {\n // Unknown property: use arbitrary property syntax\n const cssProp = property.replace(/([A-Z])/g, '-$1').toLowerCase();\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `[${cssProp}:${sanitized}]`;\n }\n\n // For prefixes that start with '[' it's an arbitrary property\n if (twPrefix.startsWith('[')) {\n const sanitized = strValue.replace(/\\s+/g, '_');\n return `${twPrefix.slice(0, -1)}:${sanitized}]`;\n }\n\n // Standard arbitrary value: prefix-[value]\n const sanitized = strValue.replace(/\\s+/g, '_');\n\n // Disambiguate properties that share a Tailwind prefix with another CSS property.\n // Without type hints, Tailwind guesses wrong (e.g., text-[var(--x)] \u2192 color instead of font-size).\n if (property === 'fontSize') {\n return `text-[length:${sanitized}]`;\n }\n if (property === 'fontFamily') {\n return `font-[family-name:${sanitized}]`;\n }\n if (property === 'fontWeight') {\n return `font-[number:${sanitized}]`;\n }\n\n return `${twPrefix}-[${sanitized}]`;\n}\n\n/**\n * Convert a flat style object to an array of Tailwind classes.\n * Skips StyleMapping values (handled separately via class:list).\n * Returns { classes, dynamicStyles } where dynamicStyles are template-expression\n * styles that need inline style attributes.\n */\nexport function stylesToTailwind(\n style: StyleObject | Record<string, string | number>\n): { classes: string[]; dynamicStyles: Record<string, string> } {\n const classes: string[] = [];\n const dynamicStyles: Record<string, string> = {};\n\n // When borderColor is present alongside a border shorthand, Tailwind's CSS\n // ordering can cause the shorthand's arbitrary property `[border:...]` to\n // override the longhand `border-[color:...]`. To avoid this, decompose\n // border shorthands into width + style only (dropping the color part) so\n // borderColor can take effect without conflicts.\n const hasBorderColor = 'borderColor' in style && !isStyleMapping(style.borderColor);\n const borderShorthands = new Set([\n 'border', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft',\n ]);\n\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) continue;\n\n const strValue = String(value);\n\n // Template expressions go to dynamic/inline styles\n if (hasTemplateExpression(strValue)) {\n const cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n dynamicStyles[cssProp] = strValue;\n continue;\n }\n\n // Decompose border shorthands when borderColor is separately specified\n if (hasBorderColor && borderShorthands.has(prop)) {\n const parts = strValue.split(/\\s+/);\n // Parse width and style from shorthand (e.g. \"1px solid #ccc\" \u2192 \"1px\", \"solid\")\n const width = parts.find(p => /^\\d/.test(p) || p === '0');\n const borderStyle = parts.find(p => /^(solid|dashed|dotted|double|groove|ridge|inset|outset|none|hidden)$/.test(p));\n const cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n if (width) classes.push(`[${cssProp}-width:${width}]`);\n if (borderStyle) classes.push(`[${cssProp}-style:${borderStyle}]`);\n continue;\n }\n\n const twClass = propertyToTailwind(prop, value);\n if (twClass) {\n classes.push(twClass);\n }\n }\n\n return { classes, dynamicStyles };\n}\n\n/**\n * Convert a responsive style object to Tailwind classes with responsive prefixes.\n * Uses desktop-first max-width breakpoints.\n *\n * - base styles \u2192 no prefix (desktop default)\n * - tablet styles \u2192 max-[{breakpoint}px]: prefix\n * - mobile styles \u2192 max-[{breakpoint}px]: prefix\n */\nexport function responsiveStylesToTailwind(\n style: StyleObject | ResponsiveStyleObject | null | undefined,\n breakpoints: BreakpointConfig,\n responsiveScales?: ResponsiveScales\n): { classes: string[]; dynamicStyles: Record<string, string> } {\n if (!style) return { classes: [], dynamicStyles: {} };\n\n const allClasses: string[] = [];\n const allDynamicStyles: Record<string, string> = {};\n\n if (isResponsiveStyle(style)) {\n const responsive = style as ResponsiveStyleObject;\n\n // Base styles (no prefix)\n if (responsive.base) {\n const { classes, dynamicStyles } = stylesToTailwind(responsive.base);\n allClasses.push(...classes);\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Tablet styles\n if (responsive.tablet) {\n const bpValue = breakpoints.tablet?.breakpoint ?? 1024;\n const prefix = `max-[${bpValue}px]:`;\n const { classes, dynamicStyles } = stylesToTailwind(responsive.tablet);\n allClasses.push(...classes.map(cls => `${prefix}${cls}`));\n // Dynamic styles for tablet \u2014 just merge (can't do responsive inline styles easily)\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Mobile styles\n if (responsive.mobile) {\n const bpValue = breakpoints.mobile?.breakpoint ?? 540;\n const prefix = `max-[${bpValue}px]:`;\n const { classes, dynamicStyles } = stylesToTailwind(responsive.mobile);\n allClasses.push(...classes.map(cls => `${prefix}${cls}`));\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Handle any other custom breakpoints\n for (const [bpName, bpStyle] of Object.entries(responsive)) {\n if (bpName === 'base' || bpName === 'tablet' || bpName === 'mobile' || !bpStyle) continue;\n const bpValue = breakpoints[bpName]?.breakpoint;\n if (!bpValue) continue;\n const prefix = `max-[${bpValue}px]:`;\n const { classes, dynamicStyles } = stylesToTailwind(bpStyle);\n allClasses.push(...classes.map(cls => `${prefix}${cls}`));\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n // Auto-responsive scaling: for each scalable base property, emit scaled\n // max-[Npx]: variants for every enabled breakpoint that doesn't already\n // have an explicit override for that property.\n if (responsiveScales?.enabled === true && responsive.base) {\n appendAutoScaledClasses(responsive, breakpoints, responsiveScales, allClasses);\n }\n } else {\n // Flat style object \u2014 treat as base\n const { classes, dynamicStyles } = stylesToTailwind(style as StyleObject);\n allClasses.push(...classes);\n Object.assign(allDynamicStyles, dynamicStyles);\n }\n\n return { classes: allClasses, dynamicStyles: allDynamicStyles };\n}\n\n/**\n * Emit `max-[Npx]:` class variants with pre-scaled values for every base\n * property in a scale category, skipping breakpoints where the author set\n * an explicit override for the same property.\n *\n * Breakpoints are processed in descending pixel order so the emitted class\n * order matches the cascade order Tailwind's variant compiler expects.\n */\nfunction appendAutoScaledClasses(\n responsive: ResponsiveStyleObject,\n breakpoints: BreakpointConfig,\n responsiveScales: ResponsiveScales,\n out: string[]\n): void {\n const base = responsive.base;\n if (!base) return;\n\n const baseRef = responsiveScales.baseReference ?? 16;\n\n const sortedBps = Object.entries(breakpoints)\n .map(([name, cfg]) => ({ name, value: cfg?.breakpoint }))\n .filter((bp): bp is { name: string; value: number } =>\n typeof bp.value === 'number' && bp.value > 0\n )\n .sort((a, b) => b.value - a.value);\n\n for (const [property, value] of Object.entries(base)) {\n if (isStyleMapping(value)) continue;\n if (value == null) continue;\n\n const strValue = String(value);\n if (strValue === '' || hasTemplateExpression(strValue)) continue;\n\n for (const { name: bpName, value: bpPixels } of sortedBps) {\n // Explicit override at this breakpoint wins \u2014 skip auto-scaling.\n const bpBranch = responsive[bpName] as StyleObject | undefined;\n if (bpBranch && property in bpBranch) continue;\n\n const scale = getScaleMultiplier(\n responsiveScales,\n property as CSSPropertyType,\n bpName\n );\n if (scale == null) continue;\n\n const scaledValue = scalePropertyValue(strValue, baseRef, scale);\n if (scaledValue == null || scaledValue === strValue) continue;\n\n const scaledClass = propertyToTailwind(property, scaledValue);\n if (!scaledClass) continue;\n\n out.push(`max-[${bpPixels}px]:${scaledClass}`);\n }\n }\n}\n", "/**\n * Core converter: ComponentNode \u2192 Astro template markup\n * Recursively walks JSON node trees and emits Astro template syntax.\n */\n\nimport type {\n ComponentNode,\n ComponentDefinition,\n StructuredComponentDefinition,\n PropDefinition,\n HtmlNode,\n ComponentInstanceNode,\n SlotMarker,\n EmbedNode,\n LinkNode,\n LocaleListNode,\n I18nConfig,\n CMSSchema,\n ListNode,\n} from '../../shared/types';\nimport { singularize } from '../../shared/types';\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n InteractiveStyles,\n LinkMapping,\n HtmlMapping,\n} from '../../shared/types/styles';\nimport { responsiveStylesToTailwind, propertyToTailwind } from './tailwindMapper';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport type { ResponsiveScales } from '../../shared/responsiveScaling';\nimport { generateElementClassName, type ElementClassContext } from '../../shared/elementClassName';\nimport { isVoidElement, hasIf, hasChildren, isSlotContent as isSlotContentNode } from '../../shared/nodeUtils';\nimport { NODE_TYPE, RAW_HTML_PREFIX } from '../../shared/constants';\nimport { extractInteractiveStyleMappings, hasInteractiveStyleMappings } from '../../shared/interactiveStyleMappings';\nimport type { ImageMetadataMap } from '../ssr/imageMetadata';\nimport { isI18nValue, resolveI18nValue, DEFAULT_I18N_CONFIG, buildLocalizedPath } from '../../shared/i18n';\nimport { transformCMSTemplate, isTemplateExpression, transformItemTemplate, replaceItemMetaVars, rewriteItemVar } from './templateTransformer';\nimport type { SlugMap } from '../../shared/slugTranslator';\nimport { buildSlugIndex, translatePath } from '../../shared/slugTranslator';\nimport { stripRawHtmlPrefixDeep } from './astroEmitHelpers';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface AstroEmitContext {\n /** Component names collected for import statements */\n imports: Set<string>;\n /** true = inside component definition (use prop refs) */\n isComponentDef: boolean;\n /** Available props when in component */\n componentProps: Record<string, PropDefinition>;\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** Current indentation level */\n indent: number;\n /** node path \u2192 SSR HTML for complex nodes */\n ssrFallbacks: Map<string, string>;\n /** Current element path for element class generation */\n elementPath: number[];\n /** File type for element class context */\n fileType: 'component' | 'page';\n /** File name for element class context */\n fileName: string;\n /** Breakpoint config for responsive Tailwind classes */\n breakpoints: BreakpointConfig;\n /** Responsive scales config for auto-scaling spacing/typography/sizing */\n responsiveScales?: ResponsiveScales;\n /** Dynamic tag definitions collected during traversal (for frontmatter) */\n dynamicTags?: Map<string, string>;\n /** Image metadata map for responsive image generation */\n imageMetadataMap?: ImageMetadataMap;\n /** Page locale for resolving i18n values */\n locale?: string;\n /** CMS mode: transform {{cms.field}} to entry data expressions */\n cmsMode?: boolean;\n /** Variable name bound to the CMS entry (default: 'entry') */\n cmsEntryBinding?: string;\n /** Rich-text field names for CMS mode (use Fragment set:html) */\n cmsRichTextFields?: Set<string>;\n /** Current list item iteration variable name */\n listItemBinding?: string;\n /** Extra frontmatter code lines collected during emission */\n frontmatterLines?: string[];\n /** Astro API imports needed (e.g., 'getCollection') */\n astroImports?: Set<string>;\n /** Full i18n config for locale list emission */\n i18nConfig?: I18nConfig;\n /** locale\u2192slug for current page (for locale list links) */\n currentPageSlugMap?: Record<string, string>;\n /** CMS schema for rich-text field detection */\n cmsSchema?: CMSSchema;\n /** Wrap function name for i18n resolution (e.g., 'r') */\n cmsWrapFn?: string;\n /** Default locale for i18n resolver (used in component defs) */\n defaultLocale?: string;\n /** Set to true during emission when an i18n object is encountered in a component def */\n needsI18nResolver?: boolean;\n /** Index variable name for current list .map() callback (e.g., \"itemIndex\") */\n listIndexVar?: string;\n /** Source array expression for current list (e.g., \"items\"), used for itemLast */\n listSourceVar?: string;\n /** Slug mappings for translating internal links */\n slugMappings?: SlugMap[];\n /** I18n default locale (for slug translation) */\n i18nDefaultLocale?: string;\n /**\n * Raw-HTML slice \u2192 processed HTML captured during the SSR pass for this page.\n * Used by the RAW_HTML_PREFIX branch to emit rich-text content that has had\n * image rewriting, component expansion, and link localization applied.\n */\n processedRawHtml?: Map<string, string>;\n /** Image format: 'webp' uses plain <img>, 'avif' uses <picture> with AVIF+WebP sources */\n imageFormat?: 'webp' | 'avif';\n /**\n * Static image imports collected during emission: varName \u2192 import path\n * relative to the emitting file. Drives `import foo from '...'` in\n * frontmatter and unlocks astro:assets <Picture> for static local images.\n *\n * Note: this is a Map (ref-shared across child ctx spreads), so mutations\n * inside list/dynamic inner contexts remain visible to the parent. A\n * separate boolean flag would be dropped by `{ ...ctx }` shallow copies \u2014\n * the presence of any entry here implies `import { Picture } from 'astro:assets'`.\n */\n imageImports?: Map<string, string>;\n /** File depth (relative to src/pages or src/components) for import path computation */\n fileDepth?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction ind(ctx: AstroEmitContext): string {\n return ' '.repeat(ctx.indent);\n}\n\nfunction localizeHref(href: string, ctx: AstroEmitContext): string {\n if (!href.startsWith('/') || href.startsWith('//')) return href;\n const { locale, i18nDefaultLocale, slugMappings } = ctx;\n if (!locale || !i18nDefaultLocale) return href;\n if (slugMappings && slugMappings.length > 0) {\n const slugIndex = buildSlugIndex(slugMappings);\n return translatePath(href, locale, i18nDefaultLocale, i18nDefaultLocale, slugIndex);\n } else if (locale !== i18nDefaultLocale) {\n return buildLocalizedPath(href, locale);\n }\n return href;\n}\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction isLinkMapping(value: unknown): value is LinkMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as LinkMapping)._mapping === true\n );\n}\n\n/**\n * Emit a single attribute key=value, applying CMS/list template transformation if needed.\n */\nfunction emitAttrValue(key: string, value: string, ctx: AstroEmitContext): string {\n if (ctx.cmsMode && /\\{\\{cms\\./.test(value)) {\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = value.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n return `${key}={${w(`${b}.data.${fullMatch[1].trim()}`)}}`;\n }\n const replaced = value.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fp) =>\n `\\${${w(`${b}.data.${fp.trim()}`)}}`\n );\n return `${key}={\\`${replaced}\\`}`;\n }\n if (ctx.listItemBinding && /\\{\\{/.test(value)) {\n const fullMatch = value.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n return `${key}={${expr}}`;\n }\n const replaced = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n trimmed = rewriteItemVar(trimmed, ctx.listItemBinding!);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n return `${key}={\\`${replaced}\\`}`;\n }\n return `${key}=\"${escapeJSX(value)}\"`;\n}\n\nfunction isHtmlMapping(value: unknown): value is HtmlMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as HtmlMapping)._mapping === true\n );\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n/**\n * Escape a string for use in Astro JSX attribute\n */\nfunction escapeJSX(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n/**\n * Escape a string for use inside a JS template literal\n */\nfunction escapeTemplateLiteral(s: string): string {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/\\$\\{/g, '\\\\${')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\n/**\n * Get all style mappings from a style value, collecting { prop, property, values } tuples\n */\nfunction collectStyleMappings(\n style: StyleObject | ResponsiveStyleObject | undefined\n): Array<{ property: string; mapping: StyleMapping; breakpoint?: string }> {\n if (!style) return [];\n const result: Array<{ property: string; mapping: StyleMapping; breakpoint?: string }> = [];\n\n if (isResponsiveStyle(style)) {\n const responsive = style as ResponsiveStyleObject;\n for (const [bp, bpStyle] of Object.entries(responsive)) {\n if (!bpStyle) continue;\n for (const [prop, value] of Object.entries(bpStyle)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value, breakpoint: bp });\n }\n }\n }\n } else {\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value });\n }\n }\n }\n return result;\n}\n\n/**\n * Convert a style mapping to class:list conditional entries.\n * For each value in the mapping, generates the utility class name and a ternary.\n */\nfunction mappingToClassListEntries(\n mapping: StyleMapping,\n property: string,\n breakpointPrefix: string,\n ctx: AstroEmitContext\n): string[] {\n const entries: string[] = [];\n const values = Object.entries(mapping.values);\n if (values.length === 0) return entries;\n\n // Generate utility class for each possible value\n const propRef = ctx.isComponentDef ? mapping.prop : mapping.prop;\n\n if (values.length === 2) {\n const [[val1, css1], [val2, css2]] = values;\n // Generate Tailwind classes for each possible mapping value\n const cls1 = getClassForValue(property, css1, breakpointPrefix);\n const cls2 = getClassForValue(property, css2, breakpointPrefix);\n if (cls1 && cls2) {\n // Use String() coercion so number props match string mapping keys (e.g., size=2 matches \"2\")\n entries.push(`String(${propRef}) === ${JSON.stringify(String(coerceValue(val1)))} ? '${cls1}' : '${cls2}'`);\n }\n } else {\n // Multiple values: use a lookup object or multiple ternaries\n for (const [val, cssValue] of values) {\n const cls = getClassForValue(property, cssValue, breakpointPrefix);\n if (cls) {\n entries.push(`String(${propRef}) === ${JSON.stringify(String(coerceValue(val)))} && '${cls}'`);\n }\n }\n }\n\n return entries;\n}\n\n/**\n * Convert a mapping key to the right JS type (booleans stay booleans)\n */\nfunction coerceValue(val: string): string | boolean {\n if (val === 'true') return true;\n if (val === 'false') return false;\n return val;\n}\n\n/**\n * Generate a Tailwind class name for a single property:value pair\n */\nfunction getClassForValue(\n property: string,\n value: string | number,\n breakpointPrefix: string\n): string | null {\n const twClass = propertyToTailwind(property, value);\n if (!twClass) return null;\n return breakpointPrefix ? `${breakpointPrefix}${twClass}` : twClass;\n}\n\n/**\n * Build the class list for a node, handling static Tailwind classes and mapping-based conditionals.\n * Also returns a style attribute string for dynamic (template-expression) styles.\n */\nfunction buildClassAndStyleExpression(\n style: StyleObject | ResponsiveStyleObject | undefined,\n interactiveStyles: InteractiveStyles | undefined,\n elementClass: string | null,\n ctx: AstroEmitContext\n): { classExpr: string; styleAttr: string } {\n // Static Tailwind classes from non-mapping styles\n const result = style\n ? responsiveStylesToTailwind(style, ctx.breakpoints, ctx.responsiveScales)\n : { classes: [], dynamicStyles: {} };\n const staticClasses = result.classes;\n const dynamicStyles = result.dynamicStyles;\n\n // Add element class for interactive styles\n if (elementClass) {\n staticClasses.unshift(elementClass);\n }\n\n // Collect mapping-based conditionals\n const conditionals: string[] = [];\n const mappings = collectStyleMappings(style);\n\n for (const { property, mapping, breakpoint } of mappings) {\n const bpValue = breakpoint === 'tablet'\n ? ctx.breakpoints.tablet?.breakpoint ?? 1024\n : breakpoint === 'mobile'\n ? ctx.breakpoints.mobile?.breakpoint ?? 540\n : 0;\n const prefix = bpValue ? `max-[${bpValue}px]:` : '';\n const entries = mappingToClassListEntries(mapping, property, prefix, ctx);\n conditionals.push(...entries);\n }\n\n // Build style attribute for dynamic (template expression) styles\n let styleAttr = '';\n if (Object.keys(dynamicStyles).length > 0 && ctx.isComponentDef) {\n const styleParts: string[] = [];\n for (const [cssProp, value] of Object.entries(dynamicStyles)) {\n // Convert {{propName}} to Astro expression in style\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n styleParts.push(`${cssProp}: \\${${resolved.includes('${') ? resolved.replace(/\\$\\{(.+?)\\}/g, '$1') : `'${resolved}'`}}`);\n }\n // Build as template literal style attribute\n const entries: string[] = [];\n for (const [cssProp, value] of Object.entries(dynamicStyles)) {\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n entries.push(`${cssProp}: ${resolved}`);\n }\n styleAttr = ` style={\\`${entries.join('; ')}\\`}`;\n }\n\n // Handle interactive style mappings: emit --is-N CSS variables as inline style\n if (interactiveStyles && interactiveStyles.length > 0 && ctx.isComponentDef && hasInteractiveStyleMappings(interactiveStyles)) {\n const { mappings } = extractInteractiveStyleMappings(interactiveStyles);\n if (mappings.length > 0) {\n // Group mappings by prop for efficient ternary generation\n const varParts: string[] = [];\n for (const extracted of mappings) {\n const { mapping, variableIndex } = extracted;\n const varName = `--is-${variableIndex}`;\n const entries = Object.entries(mapping.values);\n\n if (entries.length === 2) {\n const [[val1, css1], [val2, css2]] = entries;\n varParts.push(`'${varName}': ${mapping.prop} === ${JSON.stringify(coerceValue(val1))} ? '${css1}' : '${css2}'`);\n } else {\n // Build a lookup object inline\n const lookupEntries = entries\n .filter(([, v]) => v !== '')\n .map(([k, v]) => `${JSON.stringify(coerceValue(k))}: '${v}'`)\n .join(', ');\n varParts.push(`'${varName}': ({${lookupEntries}})[${mapping.prop}] || ''`);\n }\n }\n\n // Merge with existing dynamic styles\n if (varParts.length > 0) {\n const existingStyleParts = styleAttr\n ? styleAttr.replace(/^ style=\\{`/, '').replace(/`\\}$/, '')\n : '';\n const varStyleExpr = varParts.join(', ');\n if (existingStyleParts) {\n styleAttr = ` style={\\`${existingStyleParts}; \\${ Object.entries({${varStyleExpr}}).map(([k,v]) => \\`\\${k}:\\${v}\\`).join(';') }\\`}`;\n } else {\n styleAttr = ` style={Object.entries({${varStyleExpr}}).map(([k,v]) => \\`\\${k}:\\${v}\\`).join(';')}`;\n }\n }\n }\n }\n\n let classExpr: string;\n if (conditionals.length === 0) {\n // Pure static classes\n if (staticClasses.length === 0) {\n classExpr = '';\n } else {\n classExpr = ` class=\"${staticClasses.join(' ')}\"`;\n }\n } else {\n // Use class:list with both static and dynamic\n const parts: string[] = [];\n if (staticClasses.length > 0) {\n parts.push(`'${staticClasses.join(' ')}'`);\n }\n parts.push(...conditionals);\n classExpr = ` class:list={[${parts.join(', ')}]}`;\n }\n\n return { classExpr, styleAttr };\n}\n\n/**\n * Convert {{propName}} template to Astro expression\n */\nfunction resolveTemplate(text: string, ctx: AstroEmitContext): string {\n if (!ctx.isComponentDef) {\n // In page context, templates can't be resolved - return literal\n return text;\n }\n // Check if entire text is a single {{expression}}\n const fullMatch = text.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let propName = fullMatch[1].trim();\n if (ctx.listItemBinding) propName = rewriteItemVar(propName, ctx.listItemBinding);\n if (ctx.listIndexVar) propName = replaceItemMetaVars(propName, ctx.listIndexVar, ctx.listSourceVar);\n // Rich-text props contain HTML - render unescaped via set:html\n if (ctx.componentProps[propName]?.type === 'rich-text' || ctx.componentProps[propName]?.type === 'embed') {\n return `<Fragment set:html={${propName}} />`;\n }\n return `{${propName}}`;\n }\n // Mixed content: replace each {{expr}} with {expr}\n return text.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `{${trimmed}}`;\n });\n}\n\n/**\n * Check if text contains template expressions\n */\nfunction hasTemplates(text: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(text);\n}\n\n/**\n * Build element class name for interactive styles\n */\nfunction buildElementClass(\n ctx: AstroEmitContext,\n label: string | undefined\n): string {\n return generateElementClassName({\n fileType: ctx.fileType,\n fileName: ctx.fileName,\n label,\n path: ctx.elementPath,\n });\n}\n\n\n/**\n * Build HTML attributes string from node attributes\n */\nfunction buildAttributesString(\n attributes: Record<string, string | number | boolean> | undefined,\n ctx: AstroEmitContext\n): string {\n if (!attributes) return '';\n const parts: string[] = [];\n for (const [key, value] of Object.entries(attributes)) {\n if (typeof value === 'boolean') {\n if (value) parts.push(key);\n } else {\n const strVal = String(value);\n if (hasTemplates(strVal) && ctx.isComponentDef) {\n // Check if entire value is a single {{expression}}\n const fullMatch = strVal.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n const propDef = ctx.componentProps[expr];\n if (propDef && propDef.type === 'link') {\n parts.push(`${key}={${expr}?.href ?? \"#\"}`);\n } else {\n parts.push(`${key}={${expr} || undefined}`);\n }\n } else {\n // Mixed content: use template literal\n const resolved = strVal.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n const pd = ctx.componentProps[trimmed];\n return pd?.type === 'link' ? `\\${${trimmed}?.href ?? \"#\"}` : `\\${${trimmed}}`;\n });\n parts.push(`${key}={\\`${resolved}\\`}`);\n }\n } else if (ctx.listItemBinding && hasTemplates(strVal)) {\n // List item binding: transform {{item.field}} in attributes\n const fullMatch = strVal.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n parts.push(`${key}={${expr} || undefined}`);\n } else {\n const resolved = strVal.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n trimmed = rewriteItemVar(trimmed, ctx.listItemBinding!);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n parts.push(`${key}={\\`${resolved}\\`}`);\n }\n } else if (ctx.cmsMode && /\\{\\{cms\\./.test(strVal)) {\n // CMS mode: transform {{cms.field}} in attributes\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = strVal.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n parts.push(`${key}={${w(`${b}.data.${fullMatch[1].trim()}`)}}`);\n } else {\n const replaced = strVal.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${b}.data.${fieldPath.trim()}`)}}`;\n });\n parts.push(`${key}={\\`${replaced}\\`}`);\n }\n } else {\n parts.push(`${key}=\"${escapeJSX(strVal)}\"`);\n }\n }\n }\n return parts.length > 0 ? ' ' + parts.join(' ') : '';\n}\n\n/**\n * Format a prop value for Astro template usage\n */\nfunction formatPropValue(value: unknown): string {\n value = stripRawHtmlPrefixDeep(value);\n if (typeof value === 'string') return `\"${escapeJSX(value)}\"`;\n if (typeof value === 'number') return `{${value}}`;\n if (typeof value === 'boolean') return `{${value}}`;\n if (value === null || value === undefined) return `{undefined}`;\n // Objects/arrays\n return `{${JSON.stringify(value)}}`;\n}\n\n// ---------------------------------------------------------------------------\n// Main recursive converter\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve an i18n value to a locale string using the context locale.\n * Returns the original value unchanged if it's not an i18n object or no locale is set.\n */\nfunction resolveI18n(value: unknown, ctx: AstroEmitContext): unknown {\n if (ctx.locale && isI18nValue(value)) {\n return resolveI18nValue(value, ctx.locale, DEFAULT_I18N_CONFIG);\n }\n return value;\n}\n\n/**\n * Convert a ComponentNode tree to Astro template markup\n */\nexport function nodeToAstro(\n node: ComponentNode | ComponentNode[] | string | number | null | undefined,\n ctx: AstroEmitContext\n): string {\n if (node === null || node === undefined) return '';\n\n // Resolve i18n objects to locale strings before further processing\n if (typeof node === 'object' && !Array.isArray(node) && isI18nValue(node)) {\n const resolved = resolveI18n(node, ctx);\n if (typeof resolved === 'string') {\n // Delegate to the text-node path so RAW_HTML_PREFIX gets emitted via <Fragment set:html>.\n return nodeToAstro(resolved, ctx);\n }\n // In component def without locale: wrap with r() resolver\n if (ctx.isComponentDef && isI18nValue(resolved)) {\n ctx.needsI18nResolver = true;\n return `${ind(ctx)}{r(${JSON.stringify(stripRawHtmlPrefixDeep(resolved))})}\\n`;\n }\n // If resolution returned a non-string (e.g. array), stringify it\n return `${ind(ctx)}${String(resolved ?? '')}\\n`;\n }\n\n // Text/number\n if (typeof node === 'string') {\n // CMS mode: transform {{cms.field}} expressions to entry data access\n if (ctx.cmsMode && isTemplateExpression(node) && /\\{\\{cms\\./.test(node)) {\n const transformed = transformCMSTemplate(node, ctx.cmsEntryBinding || 'entry', ctx.cmsRichTextFields, ctx.cmsWrapFn);\n return `${ind(ctx)}${transformed}\\n`;\n }\n // List item binding: transform {{item.field}} expressions\n if (ctx.listItemBinding && isTemplateExpression(node)) {\n const transformed = transformItemTemplate(node, ctx.listItemBinding, ctx.listIndexVar, ctx.listSourceVar);\n return `${ind(ctx)}${transformed}\\n`;\n }\n if (hasTemplates(node) && ctx.isComponentDef) {\n return `${ind(ctx)}${resolveTemplate(node, ctx)}\\n`;\n }\n // Raw HTML marker (from rich-text fields) - render unescaped via set:html.\n // Prefer the SSR-processed HTML when available so image rewriting, component\n // expansion, and link localization match what meno-core renders at runtime.\n if (node.startsWith(RAW_HTML_PREFIX)) {\n const rawSlice = node.slice(RAW_HTML_PREFIX.length);\n const rawHtml = ctx.processedRawHtml?.get(rawSlice) ?? rawSlice;\n return `${ind(ctx)}<Fragment set:html={\\`${escapeTemplateLiteral(rawHtml)}\\`} />\\n`;\n }\n return `${ind(ctx)}${escapeJSX(node)}\\n`;\n }\n if (typeof node === 'number') {\n return `${ind(ctx)}${node}\\n`;\n }\n\n // Array of nodes \u2013 replace the last path segment (matches SSR renderer's top-level array convention)\n if (Array.isArray(node)) {\n let result = '';\n for (let i = 0; i < node.length; i++) {\n const child = node[i];\n const savedPath = [...ctx.elementPath];\n ctx.elementPath = [...ctx.elementPath.slice(0, -1), i];\n result += nodeToAstro(child, ctx);\n ctx.elementPath = savedPath;\n }\n return result;\n }\n\n // Dispatch by node type (cast to string for legacy type values like 'cms-list', 'image')\n switch (node.type as string) {\n case NODE_TYPE.NODE:\n return emitHtmlNode(node as HtmlNode, ctx);\n case NODE_TYPE.COMPONENT:\n return emitComponentInstance(node as ComponentInstanceNode, ctx);\n case NODE_TYPE.SLOT:\n return emitSlotMarker(node as SlotMarker, ctx);\n case NODE_TYPE.EMBED:\n return emitEmbedNode(node as EmbedNode, ctx);\n case NODE_TYPE.LINK:\n return emitLinkNode(node as LinkNode, ctx);\n case NODE_TYPE.LOCALE_LIST:\n return emitLocaleListNode(node as LocaleListNode, ctx);\n case NODE_TYPE.LIST:\n case 'cms-list':\n return emitListNode(node as ListNode, ctx);\n case 'image':\n return emitImageTypeNode(node, ctx);\n default:\n return emitFallback(ctx);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Node type emitters\n// ---------------------------------------------------------------------------\n\n/**\n * Tailwind class prefixes that belong on the <img> element (not the <picture> wrapper).\n * These correspond to image-specific visual properties.\n */\nconst IMG_TAILWIND_PREFIXES = ['object-', 'rounded', 'border', 'shadow', '[filter', '[transform', 'mix-blend'];\nconst IMG_OPACITY_PATTERN = /^opacity-/;\n\n/**\n * Default sizes attribute for responsive images\n */\nconst DEFAULT_SIZES = '100vw';\n\n/**\n * Tailwind classes applied to the inner <img> so it fills its wrapper (<picture>)\n * when a responsive/blurred image wraps the element.\n */\nconst IMG_FILL_CLASSES = ['block', 'w-full', 'h-full'];\n\n/**\n * Split Tailwind classes into picture (layout) and img (visual) groups.\n * Layout classes go on <picture>, image-specific classes go on <img>.\n */\nfunction splitImageClasses(allClasses: string[]): { pictureClasses: string[]; imgClasses: string[] } {\n const imgClasses: string[] = [];\n const pictureClasses: string[] = [];\n\n for (const cls of allClasses) {\n // Strip responsive prefix (e.g., \"md:object-cover\" -> \"object-cover\") for matching\n const baseCls = cls.includes(':') ? cls.split(':').pop()! : cls;\n if (IMG_TAILWIND_PREFIXES.some(p => baseCls.startsWith(p)) || IMG_OPACITY_PATTERN.test(baseCls)) {\n imgClasses.push(cls);\n } else {\n pictureClasses.push(cls);\n }\n }\n\n return { pictureClasses, imgClasses };\n}\n\n/**\n * Extract a pixel width from a style value. Returns null for %, vw, auto,\n * or any other non-px value we can't translate into a sizes hint.\n */\nfunction extractPxWidth(val: unknown): number | null {\n if (typeof val === 'number' && Number.isFinite(val) && val > 0) return val;\n if (typeof val !== 'string') return null;\n const match = val.trim().match(/^(\\d+(?:\\.\\d+)?)px$/);\n if (!match) return null;\n const n = parseFloat(match[1]);\n return n > 0 ? n : null;\n}\n\n/**\n * Compute a `sizes` attribute from a node's responsive style + breakpoint config.\n * Produces something like `(max-width: 540px) 400px, (max-width: 1024px) 500px, 700px`\n * so the browser can pick the smallest srcset variant that covers the rendered width\n * at each viewport. Falls back to `100vw` when no usable px width is available.\n */\nfunction computeSizesAttribute(\n style: StyleObject | ResponsiveStyleObject | undefined,\n breakpoints: BreakpointConfig\n): string {\n if (!style) return DEFAULT_SIZES;\n\n const responsive = isResponsiveStyle(style as any);\n const baseStyle: StyleObject | undefined = responsive\n ? (style as ResponsiveStyleObject).base\n : (style as StyleObject);\n\n // Base (desktop) width \u2014 the biggest viewport\n const baseWidth = baseStyle ? extractPxWidth((baseStyle as StyleObject).width) : null;\n // If even the base width is unknown, nothing we can do \u2014 use 100vw.\n if (baseWidth == null) return DEFAULT_SIZES;\n\n // Walk breakpoints from smallest to largest so the emitted media queries\n // are ordered from narrowest to widest, with the unconditional base last.\n const bpEntries = Object.entries(breakpoints).sort(\n (a, b) => a[1].breakpoint - b[1].breakpoint\n );\n\n const parts: string[] = [];\n // Track the \"effective\" width as we walk up: if a breakpoint doesn't set its\n // own width, it inherits from the next step up, and ultimately from base.\n // We walk ascending, so we need to resolve by looking from smallest bp up to base.\n for (const [name, entry] of bpEntries) {\n let effective: number | null = null;\n if (responsive) {\n // Look at this bp, then larger bps, then base\n const bpStyle = (style as ResponsiveStyleObject)[name];\n effective = bpStyle ? extractPxWidth((bpStyle as StyleObject).width) : null;\n if (effective == null) {\n // Inherit from next-larger breakpoint(s)\n for (const [largerName, largerEntry] of bpEntries) {\n if (largerEntry.breakpoint <= entry.breakpoint) continue;\n const largerStyle = (style as ResponsiveStyleObject)[largerName];\n const larger = largerStyle ? extractPxWidth((largerStyle as StyleObject).width) : null;\n if (larger != null) {\n effective = larger;\n break;\n }\n }\n }\n if (effective == null) effective = baseWidth;\n } else {\n effective = baseWidth;\n }\n parts.push(`(max-width: ${entry.breakpoint}px) ${effective}px`);\n }\n parts.push(`${baseWidth}px`);\n return parts.join(', ');\n}\n\n/**\n * Merge additional CSS declarations into an existing ` style=\"...\"` attribute\n * string. If no style attribute exists yet, builds one. The inputs are raw CSS\n * already escaped for HTML attribute context.\n */\nfunction injectInlineStyle(styleAttr: string, extraCss: string): string {\n if (!extraCss) return styleAttr;\n if (!styleAttr) return ` style=\"${extraCss}\"`;\n return styleAttr.replace(/style=\"([^\"]*)\"/, (_, existing: string) => {\n const trimmed = existing.trimEnd();\n const sep = trimmed.length > 0 && !trimmed.endsWith(';') ? ';' : '';\n return `style=\"${existing}${sep}${extraCss}\"`;\n });\n}\n\n/**\n * Emit an <img> node as a <picture> element with AVIF/WebP sources when\n * image metadata is available, or as a plain <img> with srcset otherwise.\n */\n// Widths used for <Picture> srcset generation. Mirrors\n// RESPONSIVE_WIDTHS in imageMetadata.ts.\nconst PICTURE_WIDTHS = [500, 800, 1080, 1600, 2400];\n\n/**\n * Turn an image path like `/images/sub/hero-photo.jpg` into a stable JS\n * identifier (`imgSubHeroPhoto`) for use as an ESM import variable.\n */\nfunction imagePathToVarName(srcPath: string): string {\n const stripped = srcPath.replace(/^\\/+/, '').replace(/^images\\//, '').replace(/\\.[^.]+$/, '');\n const parts = stripped.split(/[/_\\-\\s.]+/).filter(Boolean);\n if (parts.length === 0) return 'imgAsset';\n const camel = parts\n .map((p, i) => {\n const clean = p.replace(/[^a-zA-Z0-9]/g, '');\n if (!clean) return '';\n if (i === 0) return clean.toLowerCase();\n return clean[0].toUpperCase() + clean.slice(1).toLowerCase();\n })\n .join('');\n if (!camel) return 'imgAsset';\n return 'img' + camel[0].toUpperCase() + camel.slice(1);\n}\n\n/**\n * Compute an ESM import path relative to the emitting file for a Meno image\n * URL. For file depth N (e.g. `src/pages/en/about.astro` is depth 1), the\n * path is `'../'.repeat(N + 1) + 'assets/images/<rest>'`.\n */\nfunction imageImportPath(srcPath: string, fileDepth: number): string {\n const rest = srcPath.replace(/^\\/+/, '').replace(/^images\\//, '');\n const ups = '../'.repeat(Math.max(0, fileDepth) + 1);\n return `${ups}assets/images/${rest}`;\n}\n\n/**\n * Decide whether an image src can be switched to <Picture>. Only plain\n * literal local paths (`/images/...`) with known metadata qualify \u2014 CMS\n * templates, list-item bindings, component props, and remote URLs take the\n * legacy <img>/<picture> path.\n */\nfunction isStaticImageSrc(src: string | undefined, ctx: AstroEmitContext): src is string {\n if (!src) return false;\n if (typeof src !== 'string') return false;\n if (hasTemplates(src)) return false;\n if (!src.startsWith('/images/')) return false;\n if (!ctx.imageMetadataMap?.has(src)) return false;\n return true;\n}\n\n/**\n * Register (or reuse) an ESM image import on the emit context. Returns the\n * JS variable name to reference in the generated template.\n */\nfunction registerStaticImageImport(src: string, ctx: AstroEmitContext): string {\n if (!ctx.imageImports) ctx.imageImports = new Map();\n const depth = ctx.fileDepth ?? 0;\n const importPath = imageImportPath(src, depth);\n\n for (const [existingName, existingPath] of ctx.imageImports) {\n if (existingPath === importPath) return existingName;\n }\n\n const base = imagePathToVarName(src);\n let name = base;\n let counter = 2;\n while (ctx.imageImports.has(name)) {\n name = `${base}${counter++}`;\n }\n ctx.imageImports.set(name, importPath);\n return name;\n}\n\n/**\n * Split a static `classExpr` into the outer layout classes (for <picture> /\n * wrapper) and the inner image classes (for the emitted <img> inside\n * <Picture>). Mirrors `splitImageClasses()` used by the legacy emitter so\n * object-cover / opacity-* keep landing on the <img>. Returns null when the\n * class expression is dynamic (class:list) \u2014 callers fall back to div wrap.\n */\nfunction splitStaticClassExpr(\n classExpr: string\n): { outerClasses: string[]; innerClasses: string[] } | null {\n if (classExpr.includes('class:list=')) return null;\n const classMatch = classExpr.match(/class=\"([^\"]*)\"/);\n if (!classMatch) return { outerClasses: [], innerClasses: [] };\n const all = classMatch[1].split(/\\s+/).filter(Boolean);\n const { pictureClasses, imgClasses } = splitImageClasses(all);\n return { outerClasses: pictureClasses, innerClasses: imgClasses };\n}\n\n/**\n * Format a static class+style pair as an Astro `pictureAttributes={{...}}`\n * prop. `classValue` comes pre-split (outer layout classes only).\n */\nfunction formatPictureAttributesProp(\n classValue: string,\n styleAttr: string\n): string {\n const styleMatch = styleAttr.match(/style=\"([^\"]*)\"/);\n const parts: string[] = [];\n if (classValue) parts.push(`class: ${JSON.stringify(classValue)}`);\n if (styleMatch) parts.push(`style: ${JSON.stringify(styleMatch[1])}`);\n if (parts.length === 0) return '';\n return ` pictureAttributes={{${parts.join(', ')}}}`;\n}\n\n/**\n * Emit a static local image as an astro:assets <Picture>. Called only after\n * isStaticImageSrc() has passed. Non-static paths should never reach here.\n */\nfunction emitStaticPictureImage(\n src: string,\n alt: string | undefined,\n loading: string | undefined,\n fetchpriority: string | undefined,\n sizesValue: string,\n classExpr: string,\n styleAttr: string,\n ifExpr: string,\n ifClose: string,\n blurHash: string | undefined,\n ctx: AstroEmitContext\n): string {\n const varName = registerStaticImageImport(src, ctx);\n\n const widthsLiteral = `[${PICTURE_WIDTHS.join(', ')}]`;\n const altAttr = alt !== undefined ? ` alt=\"${escapeJSX(String(alt))}\"` : ' alt=\"\"';\n const loadingAttr = loading ? ` loading=\"${escapeJSX(loading)}\"` : '';\n const fetchpriorityAttr = fetchpriority ? ` fetchpriority=\"${escapeJSX(fetchpriority)}\"` : '';\n\n // Split classes so object-cover / opacity land on the <img>, not the\n // outer <picture>/wrapper. splitStaticClassExpr returns null for dynamic\n // class:list \u2014 callers fall back to a <div> wrapper without splitting.\n const split = splitStaticClassExpr(classExpr);\n\n if (blurHash) {\n // Blur placeholder: put the blur background-image + layout classes on\n // the <picture> element via pictureAttributes. This mirrors the legacy\n // path where <picture> was both the blur host and layout container.\n // The inner <img> gets fill + img-specific classes and clears the blur\n // on load via this.parentElement (direct parent = <picture>).\n const blurCss = `background-image:url(${escapeJSX(blurHash)});background-size:cover`;\n const blurStyleAttr = injectInlineStyle(styleAttr, blurCss);\n const onloadAttr = ` onload=\"this.parentElement.style.backgroundImage=''\"`;\n\n if (split) {\n const outerClassValue = split.outerClasses.join(' ');\n const pictureAttrs = formatPictureAttributesProp(outerClassValue, blurStyleAttr);\n const innerClasses = [...split.innerClasses, ...IMG_FILL_CLASSES];\n const innerClassAttr = ` class=\"${innerClasses.join(' ')}\"`;\n return `${ifExpr}${ind(ctx)}<Picture${pictureAttrs} src={${varName}}${altAttr}${innerClassAttr} formats={['avif','webp']} widths={${widthsLiteral}} sizes=\"${escapeJSX(sizesValue)}\"${loadingAttr}${fetchpriorityAttr}${onloadAttr} />\\n${ifClose}`;\n }\n\n // Dynamic class:list: fall back to a <div> wrapper since we can't\n // convert class:list to a pictureAttributes JS object.\n const wrapperClassExpr = classExpr;\n const wrapperStyleAttr = injectInlineStyle(styleAttr, blurCss);\n const fillClassAttr = ` class=\"${IMG_FILL_CLASSES.join(' ')}\"`;\n return (\n `${ifExpr}${ind(ctx)}<div${wrapperClassExpr}${wrapperStyleAttr}>\\n` +\n `${ind(ctx)} <Picture pictureAttributes={{class: \"${IMG_FILL_CLASSES.join(' ')}\"}} src={${varName}}${altAttr}${fillClassAttr} formats={['avif','webp']} widths={${widthsLiteral}} sizes=\"${escapeJSX(sizesValue)}\"${loadingAttr}${fetchpriorityAttr} onload=\"this.parentElement.parentElement.style.backgroundImage=''\" />\\n` +\n `${ind(ctx)}</div>\\n${ifClose}`\n );\n }\n\n // Non-blur case: forward outer classes via pictureAttributes so they land\n // on the <picture>, inner img-specific classes as `class` on <Picture>.\n if (split) {\n const outerClassValue = split.outerClasses.join(' ');\n const innerClassAttr = split.innerClasses.length > 0\n ? ` class=\"${split.innerClasses.join(' ')}\"`\n : '';\n const pictureAttrs = formatPictureAttributesProp(outerClassValue, styleAttr);\n return `${ifExpr}${ind(ctx)}<Picture${pictureAttrs} src={${varName}}${altAttr}${innerClassAttr} formats={['avif','webp']} widths={${widthsLiteral}} sizes=\"${escapeJSX(sizesValue)}\"${loadingAttr}${fetchpriorityAttr} />\\n${ifClose}`;\n }\n\n // Dynamic class:list: wrap in a <div> so the dynamic expression survives.\n return (\n `${ifExpr}${ind(ctx)}<div${classExpr}${styleAttr}>\\n` +\n `${ind(ctx)} <Picture src={${varName}}${altAttr} formats={['avif','webp']} widths={${widthsLiteral}} sizes=\"${escapeJSX(sizesValue)}\"${loadingAttr}${fetchpriorityAttr} />\\n` +\n `${ind(ctx)}</div>\\n${ifClose}`\n );\n}\n\nfunction emitImageNode(node: HtmlNode, ctx: AstroEmitContext): string {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n // Element class for interactive styles\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(\n style,\n node.interactiveStyles as InteractiveStyles | undefined,\n elementClass,\n ctx\n );\n\n // Extract image-specific attributes\n const attrs = node.attributes || {};\n const src = attrs.src as string | undefined;\n const alt = attrs.alt as string | undefined;\n const loading = attrs.loading as string | undefined;\n const fetchpriority = attrs.fetchpriority as string | undefined;\n let width = attrs.width as string | number | undefined;\n let height = attrs.height as string | number | undefined;\n const sizes = attrs.sizes as string | undefined;\n\n // Look up image metadata\n const metadata = src ? ctx.imageMetadataMap?.get(String(src)) : undefined;\n\n // Use dimensions from metadata if not explicitly set\n if (metadata) {\n if (width === undefined && metadata.width) width = metadata.width;\n if (height === undefined && metadata.height) height = metadata.height;\n }\n\n // Compute real sizes from responsive style widths; user override wins.\n const sizesValue = sizes || computeSizesAttribute(style, ctx.breakpoints);\n\n // Static local image \u2192 astro:assets <Picture> (ESM import, Astro-managed\n // optimization). Predicate rejects CMS/list/template/remote src.\n if (isStaticImageSrc(src, ctx)) {\n return emitStaticPictureImage(\n src,\n alt,\n loading,\n fetchpriority,\n sizesValue,\n classExpr,\n styleAttr,\n emitIfOpen(node, ctx),\n emitIfClose(node, ctx),\n metadata?.blurHash,\n ctx\n );\n }\n\n // Build remaining attributes (exclude image-specific ones we handle manually)\n const imageSpecificKeys = new Set(['src', 'alt', 'loading', 'width', 'height', 'sizes', 'srcset', 'fetchpriority']);\n const otherAttrs: Record<string, string | number | boolean> = {};\n if (node.attributes) {\n for (const [k, v] of Object.entries(node.attributes)) {\n if (!imageSpecificKeys.has(k)) otherAttrs[k] = v;\n }\n }\n const otherAttrsStr = buildAttributesString(otherAttrs, ctx);\n\n // Build core img attributes (with CMS/list template support)\n let imgAttrs = '';\n if (src) imgAttrs += ` ${emitAttrValue('src', String(src), ctx)}`;\n if (alt !== undefined) imgAttrs += ` ${emitAttrValue('alt', String(alt), ctx)}`;\n if (fetchpriority) imgAttrs += ` fetchpriority=\"${escapeJSX(String(fetchpriority))}\"`;\n if (loading) imgAttrs += ` loading=\"${escapeJSX(String(loading))}\"`;\n if (width !== undefined) imgAttrs += ` width=\"${escapeJSX(String(width))}\"`;\n if (height !== undefined) imgAttrs += ` height=\"${escapeJSX(String(height))}\"`;\n\n const hasAvif = !!(metadata?.avifSrcset && ctx.imageFormat !== 'webp');\n const hasBlur = !!metadata?.blurHash;\n // Any time we need a wrapper to host the blur placeholder or <source> tags.\n const useWrapper = hasAvif || hasBlur;\n\n // Blur placeholder is painted on the wrapper element (NOT the <img>, which\n // is a replaced element and doesn't paint CSS backgrounds reliably).\n // Once the real image loads we clear the background on the wrapper so the\n // low-quality placeholder disappears.\n const blurWrapperCss = hasBlur\n ? `background-image:url(${escapeJSX(metadata!.blurHash!)});background-size:cover`\n : '';\n const blurOnload = hasBlur\n ? ` onload=\"this.parentElement.style.backgroundImage=''\"`\n : '';\n\n // Conditional rendering\n const ifExpr = emitIfOpen(node, ctx);\n const ifClose = emitIfClose(node, ctx);\n\n if (useWrapper) {\n // The inner <img> must fill the picture wrapper; otherwise it renders at\n // its intrinsic size and the wrapper's layout (w/h/position) is wasted.\n const imgFillClasses = IMG_FILL_CLASSES.slice();\n\n const classListMatch = classExpr.match(/class:list={\\[(.+)\\]}/);\n const classMatch = classExpr.match(/class=\"([^\"]*)\"/);\n\n let pictureClassExpr = '';\n let imgClassAttr = '';\n if (classListMatch) {\n // Dynamic class:list - put it all on the picture. The inner img only\n // needs fill classes (splitting dynamic class lists isn't worth it).\n pictureClassExpr = classExpr;\n imgClassAttr = ` class=\"${imgFillClasses.join(' ')}\"`;\n } else {\n const allClasses = classMatch ? classMatch[1].split(/\\s+/).filter(Boolean) : [];\n const { pictureClasses, imgClasses } = splitImageClasses(allClasses);\n const fullImgClasses = [...imgClasses, ...imgFillClasses];\n pictureClassExpr = pictureClasses.length > 0 ? ` class=\"${pictureClasses.join(' ')}\"` : '';\n imgClassAttr = fullImgClasses.length > 0 ? ` class=\"${fullImgClasses.join(' ')}\"` : '';\n }\n\n const wrapperStyleAttr = injectInlineStyle(styleAttr, blurWrapperCss);\n\n // With AVIF: full <picture> + <source> elements\n if (hasAvif) {\n return (\n `${ifExpr}${ind(ctx)}<picture${pictureClassExpr}${wrapperStyleAttr}>\\n` +\n `${ind(ctx)} <source type=\"image/avif\" srcset=\"${escapeJSX(metadata!.avifSrcset!)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <source type=\"image/webp\" srcset=\"${escapeJSX(metadata!.srcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <img${imgClassAttr}${imgAttrs}${blurOnload}${otherAttrsStr} />\\n` +\n `${ind(ctx)}</picture>\\n${ifClose}`\n );\n }\n\n // No AVIF, but we still need the wrapper for blur. Put srcset on the <img>\n // itself since we're not using <source>.\n if (metadata?.srcset) {\n imgAttrs += ` srcset=\"${escapeJSX(metadata.srcset)}\"`;\n imgAttrs += ` sizes=\"${escapeJSX(sizesValue)}\"`;\n }\n return (\n `${ifExpr}${ind(ctx)}<picture${pictureClassExpr}${wrapperStyleAttr}>\\n` +\n `${ind(ctx)} <img${imgClassAttr}${imgAttrs}${blurOnload}${otherAttrsStr} />\\n` +\n `${ind(ctx)}</picture>\\n${ifClose}`\n );\n }\n\n // No wrapper needed: plain <img> with optional srcset/sizes\n if (metadata?.srcset) {\n imgAttrs += ` srcset=\"${escapeJSX(metadata.srcset)}\"`;\n imgAttrs += ` sizes=\"${escapeJSX(sizesValue)}\"`;\n }\n\n return `${ifExpr}${ind(ctx)}<img${classExpr}${styleAttr}${imgAttrs}${otherAttrsStr} />\\n${ifClose}`;\n}\n\nfunction emitHtmlNode(node: HtmlNode, ctx: AstroEmitContext): string {\n let tag = node.tag;\n\n // Astro treats capitalized tags as component imports \u2014 lowercase custom tags to avoid this\n if (tag && /^[A-Z]/.test(tag)) {\n tag = tag.toLowerCase();\n }\n\n // Delegate img tags to the image-specific emitter when metadata is available\n if (tag === 'img' && ctx.imageMetadataMap) {\n return emitImageNode(node, ctx);\n }\n\n const label = node.label;\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n // Handle dynamic tags: <h{{size}}> \u2192 define Tag variable in frontmatter, use <Tag> in template\n let isDynamic = false;\n let dynamicTagVar = '';\n if (hasTemplates(tag) && ctx.isComponentDef) {\n isDynamic = true;\n // Generate a unique variable name based on element path\n dynamicTagVar = `Tag_${ctx.elementPath.join('_')}`;\n const resolved = tag.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => `\\${${expr.trim()}}`);\n // Register dynamic tag for frontmatter emission\n if (!ctx.dynamicTags) ctx.dynamicTags = new Map();\n ctx.dynamicTags.set(dynamicTagVar, resolved);\n tag = dynamicTagVar;\n }\n\n // Conditional rendering\n const ifExpr = emitIfOpen(node, ctx);\n\n // Element class for interactive styles\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, label);\n\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(style, node.interactiveStyles as InteractiveStyles | undefined, elementClass, ctx);\n const attrs = buildAttributesString(node.attributes, ctx);\n\n // Dynamic tags use the variable name directly (capitalized, defined in frontmatter)\n const openClose = isDynamic ? dynamicTagVar : tag;\n\n if (!isDynamic && isVoidElement(tag)) {\n return `${ifExpr}${ind(ctx)}<${tag}${classExpr}${styleAttr}${attrs} />\\n${emitIfClose(node, ctx)}`;\n }\n\n const children = emitChildren(node.children, ctx);\n\n if (!children.trim() && !isDynamic) {\n return `${ifExpr}${ind(ctx)}<${tag}${classExpr}${styleAttr}${attrs} />\\n${emitIfClose(node, ctx)}`;\n }\n\n return (\n `${ifExpr}${ind(ctx)}<${openClose}${classExpr}${styleAttr}${attrs}>\\n` +\n children +\n `${ind(ctx)}</${openClose}>\\n${emitIfClose(node, ctx)}`\n );\n}\n\nfunction emitComponentInstance(node: ComponentInstanceNode, ctx: AstroEmitContext): string {\n const name = node.component;\n ctx.imports.add(name);\n\n const ifExpr = emitIfOpen(node, ctx);\n\n // Build prop expressions\n const propParts: string[] = [];\n if (node.props) {\n for (const [key, rawValue] of Object.entries(node.props)) {\n if (key === 'children') continue;\n\n // Resolve i18n values to the page locale\n const value = resolveI18n(rawValue, ctx);\n\n // Resolve template expressions in string props when inside component def\n if (typeof value === 'string' && hasTemplates(value) && ctx.isComponentDef) {\n const fullMatch = value.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n propParts.push(`${key}={${expr}}`);\n } else {\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n return `\\${${trimmed}}`;\n });\n propParts.push(`${key}={\\`${resolved}\\`}`);\n }\n } else if (typeof value === 'string' && ctx.cmsMode && /\\{\\{cms\\./.test(value)) {\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = value.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n propParts.push(`${key}={${w(`${b}.data.${fullMatch[1].trim()}`)}}`);\n } else {\n const replaced = value.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${b}.data.${fieldPath.trim()}`)}}`;\n });\n propParts.push(`${key}={\\`${replaced}\\`}`);\n }\n } else if (ctx.isComponentDef && isI18nValue(value)) {\n // i18n object in component def \u2014 wrap with r() resolver (resolved at runtime via Astro.currentLocale)\n ctx.needsI18nResolver = true;\n propParts.push(`${key}={r(${JSON.stringify(stripRawHtmlPrefixDeep(value))})}`);\n } else {\n // Rich-text / embed props contain HTML/SVG \u2014 pass as template literal\n // so the component can render via set:html without entity escaping\n const targetInterface = ctx.globalComponents[name]?.component?.interface;\n const propDef = targetInterface?.[key];\n if (typeof value === 'string' && (propDef?.type === 'rich-text' || propDef?.type === 'embed')) {\n propParts.push(`${key}={\\`${escapeTemplateLiteral(stripRawHtmlPrefixDeep(value) as string)}\\`}`);\n } else {\n propParts.push(`${key}=${formatPropValue(value)}`);\n }\n }\n }\n }\n\n // Instance-level style overrides as className (Tailwind)\n if (node.style) {\n const { classes: instanceClasses } = responsiveStylesToTailwind(node.style as StyleObject | ResponsiveStyleObject, ctx.breakpoints, ctx.responsiveScales);\n if (instanceClasses.length > 0) {\n propParts.push(`class=\"${instanceClasses.join(' ')}\"`);\n }\n }\n\n const propsStr = propParts.length > 0 ? ' ' + propParts.join(' ') : '';\n\n // Reset elementPath to [0] when entering a component instance, matching SSR's\n // renderComponent behavior. This ensures hash-based element class names for\n // slot content are identical between SSR (CSS) and Astro (HTML).\n const childCtx = { ...ctx, elementPath: [0] };\n const children = emitChildren(node.children, childCtx);\n\n if (!children.trim()) {\n return `${ifExpr}${ind(ctx)}<${name}${propsStr} />\\n${emitIfClose(node, ctx)}`;\n }\n\n return (\n `${ifExpr}${ind(ctx)}<${name}${propsStr}>\\n` +\n children +\n `${ind(ctx)}</${name}>\\n${emitIfClose(node, ctx)}`\n );\n}\n\nfunction emitSlotMarker(node: SlotMarker, ctx: AstroEmitContext): string {\n if (node.default) {\n const defaultContent = emitChildren(node.default as (ComponentNode | string)[] | string | undefined, ctx);\n if (defaultContent.trim()) {\n return (\n `${ind(ctx)}<slot>\\n` +\n defaultContent +\n `${ind(ctx)}</slot>\\n`\n );\n }\n }\n return `${ind(ctx)}<slot />\\n`;\n}\n\nfunction emitEmbedNode(node: EmbedNode, ctx: AstroEmitContext): string {\n const ifExpr = emitIfOpen(node, ctx);\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(style, node.interactiveStyles as InteractiveStyles | undefined, elementClass, ctx);\n const attrs = buildAttributesString(node.attributes, ctx);\n\n // Handle HTML mapping (prop-dependent content)\n if (isHtmlMapping(node.html)) {\n if (ctx.isComponentDef) {\n const propRef = node.html.prop;\n return (\n `${ifExpr}${ind(ctx)}<div${classExpr.replace('\"', '\"oem ') || ' class=\"oem\"'}${attrs}>\\n` +\n `${ind(ctx)} <Fragment set:html={${propRef}} />\\n` +\n `${ind(ctx)}</div>\\n${emitIfClose(node, ctx)}`\n );\n }\n }\n\n // Handle template expressions in HTML string (e.g., \"{{icon}}\")\n if (typeof node.html === 'string' && hasTemplates(node.html) && ctx.isComponentDef) {\n const fullMatch = node.html.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let propRef = fullMatch[1].trim();\n if (ctx.listItemBinding) propRef = rewriteItemVar(propRef, ctx.listItemBinding);\n if (ctx.listIndexVar) propRef = replaceItemMetaVars(propRef, ctx.listIndexVar, ctx.listSourceVar);\n\n let tplClassExpr = classExpr;\n if (!classExpr.includes('oem')) {\n if (classExpr) {\n tplClassExpr = classExpr.replace(/class=\"/, 'class=\"oem ').replace(/class:list={\\['/, \"class:list={['oem \");\n } else {\n tplClassExpr = ' class=\"oem\"';\n }\n }\n\n return (\n `${ifExpr}${ind(ctx)}<div${tplClassExpr}${attrs}>\\n` +\n `${ind(ctx)} <Fragment set:html={${propRef}} />\\n` +\n `${ind(ctx)}</div>\\n${emitIfClose(node, ctx)}`\n );\n }\n }\n\n const htmlStr = typeof node.html === 'string' ? node.html : '';\n const escapedHtml = escapeTemplateLiteral(htmlStr);\n\n // Ensure oem class is present\n let finalClassExpr = classExpr;\n if (!classExpr.includes('oem')) {\n if (classExpr) {\n finalClassExpr = classExpr.replace(/class=\"/, 'class=\"oem ').replace(/class:list={\\['/, \"class:list={['oem \");\n } else {\n finalClassExpr = ' class=\"oem\"';\n }\n }\n\n return (\n `${ifExpr}${ind(ctx)}<div${finalClassExpr}${attrs}>\\n` +\n `${ind(ctx)} <Fragment set:html={\\`${escapedHtml}\\`} />\\n` +\n `${ind(ctx)}</div>\\n${emitIfClose(node, ctx)}`\n );\n}\n\nfunction emitLinkNode(node: LinkNode, ctx: AstroEmitContext): string {\n const ifExpr = emitIfOpen(node, ctx);\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n\n }\n\n // Build class expression with olink base class\n const { classExpr, styleAttr } = buildClassAndStyleExpression(style, node.interactiveStyles as InteractiveStyles | undefined, elementClass, ctx);\n let finalClassExpr = classExpr;\n if (!classExpr.includes('olink')) {\n if (classExpr) {\n finalClassExpr = classExpr.replace(/class=\"/, 'class=\"olink ').replace(/class:list={\\['/, \"class:list={['olink \");\n } else {\n finalClassExpr = ' class=\"olink\"';\n }\n }\n\n // Resolve i18n on href before processing\n const resolvedHref = resolveI18n(node.href, ctx);\n const nodeHref = resolvedHref as typeof node.href;\n\n // Handle href\n let hrefAttr: string;\n if (isLinkMapping(nodeHref)) {\n if (ctx.isComponentDef) {\n const propRef = (nodeHref as LinkMapping).prop;\n // Link props are objects with {href, target?}\n hrefAttr = ` href={${propRef}?.href ?? \"#\"}`;\n } else {\n hrefAttr = ' href=\"#\"';\n }\n } else {\n const href = typeof nodeHref === 'string' ? nodeHref : '#';\n if (hasTemplates(href) && ctx.isComponentDef) {\n const fullMatch = href.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n const propDef = ctx.componentProps[expr];\n if (propDef && propDef.type === 'link') {\n hrefAttr = ` href={${expr}?.href ?? \"#\"}`;\n } else {\n hrefAttr = ` href={${expr}}`;\n }\n } else {\n const resolved = href.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n let trimmed = expr.trim();\n if (ctx.listItemBinding) trimmed = rewriteItemVar(trimmed, ctx.listItemBinding);\n if (ctx.listIndexVar) trimmed = replaceItemMetaVars(trimmed, ctx.listIndexVar, ctx.listSourceVar);\n const pd = ctx.componentProps[trimmed];\n return pd?.type === 'link' ? `\\${${trimmed}?.href ?? \"#\"}` : `\\${${trimmed}}`;\n });\n hrefAttr = ` href={\\`${resolved}\\`}`;\n }\n } else if (ctx.cmsMode && /\\{\\{cms\\./.test(href)) {\n const b = ctx.cmsEntryBinding || 'entry';\n const w = (expr: string) => ctx.cmsWrapFn ? `${ctx.cmsWrapFn}(${expr})` : expr;\n const fullMatch = href.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n hrefAttr = ` href={${w(`${b}.data.${fullMatch[1].trim()}`)}}`;\n } else {\n const replaced = href.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${b}.data.${fieldPath.trim()}`)}}`;\n });\n hrefAttr = ` href={\\`${replaced}\\`}`;\n }\n } else {\n const localizedHref = localizeHref(href, ctx);\n hrefAttr = ` href=\"${escapeJSX(localizedHref)}\"`;\n }\n }\n\n const attrs = buildAttributesString(node.attributes, ctx);\n const children = emitChildren(node.children, ctx);\n\n if (!children.trim()) {\n return `${ifExpr}${ind(ctx)}<a${hrefAttr}${finalClassExpr}${styleAttr}${attrs} />\\n${emitIfClose(node, ctx)}`;\n }\n\n return (\n `${ifExpr}${ind(ctx)}<a${hrefAttr}${finalClassExpr}${styleAttr}${attrs}>\\n` +\n children +\n `${ind(ctx)}</a>\\n${emitIfClose(node, ctx)}`\n );\n}\n\n/**\n * Emit an \"image\" type node (standalone image, not an HTML img tag)\n * These have src, alt, style directly on the node.\n */\nfunction emitImageTypeNode(node: any, ctx: AstroEmitContext): string {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if (\n (node.interactiveStyles && node.interactiveStyles.length > 0) ||\n node.generateElementClass\n ) {\n elementClass = buildElementClass(ctx, node.label);\n\n }\n\n const { classExpr, styleAttr } = buildClassAndStyleExpression(\n style,\n node.interactiveStyles as InteractiveStyles | undefined,\n elementClass,\n ctx\n );\n\n const src = node.src as string | undefined;\n const alt = node.alt as string | undefined;\n\n // Static local image \u2192 astro:assets <Picture>\n if (isStaticImageSrc(src, ctx)) {\n const staticMeta = ctx.imageMetadataMap!.get(src)!;\n return emitStaticPictureImage(\n src,\n alt,\n undefined,\n undefined,\n computeSizesAttribute(style, ctx.breakpoints),\n classExpr,\n styleAttr,\n '',\n '',\n staticMeta.blurHash,\n ctx\n );\n }\n\n let imgAttrs = '';\n if (src) imgAttrs += ` src=\"${escapeJSX(String(src))}\"`;\n if (alt !== undefined) imgAttrs += ` alt=\"${escapeJSX(String(alt))}\"`;\n\n // Check for image metadata for responsive images\n const metadata = src ? ctx.imageMetadataMap?.get(String(src)) : undefined;\n\n if (!metadata) {\n return `${ind(ctx)}<img${classExpr}${styleAttr}${imgAttrs} />\\n`;\n }\n\n if (metadata.width !== undefined) imgAttrs += ` width=\"${metadata.width}\"`;\n if (metadata.height !== undefined) imgAttrs += ` height=\"${metadata.height}\"`;\n\n const sizesValue = computeSizesAttribute(style, ctx.breakpoints);\n\n const hasAvif = !!(metadata.avifSrcset && ctx.imageFormat !== 'webp');\n const hasBlur = !!metadata.blurHash;\n const useWrapper = hasAvif || hasBlur;\n\n const blurWrapperCss = hasBlur\n ? `background-image:url(${escapeJSX(metadata.blurHash!)});background-size:cover`\n : '';\n const blurOnload = hasBlur\n ? ` onload=\"this.parentElement.style.backgroundImage=''\"`\n : '';\n\n if (useWrapper) {\n const imgFillClasses = IMG_FILL_CLASSES.slice();\n const classMatch = classExpr.match(/class=\"([^\"]*)\"/);\n const allClasses = classMatch ? classMatch[1].split(/\\s+/).filter(Boolean) : [];\n const { pictureClasses, imgClasses } = splitImageClasses(allClasses);\n const fullImgClasses = [...imgClasses, ...imgFillClasses];\n\n const pictureClassAttr = pictureClasses.length > 0 ? ` class=\"${pictureClasses.join(' ')}\"` : '';\n const imgClassAttr = fullImgClasses.length > 0 ? ` class=\"${fullImgClasses.join(' ')}\"` : '';\n const wrapperStyleAttr = injectInlineStyle(styleAttr, blurWrapperCss);\n\n if (hasAvif) {\n return (\n `${ind(ctx)}<picture${pictureClassAttr}${wrapperStyleAttr}>\\n` +\n `${ind(ctx)} <source type=\"image/avif\" srcset=\"${escapeJSX(metadata.avifSrcset!)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <source type=\"image/webp\" srcset=\"${escapeJSX(metadata.srcset)}\" sizes=\"${escapeJSX(sizesValue)}\" />\\n` +\n `${ind(ctx)} <img${imgClassAttr}${imgAttrs}${blurOnload} />\\n` +\n `${ind(ctx)}</picture>\\n`\n );\n }\n\n if (metadata.srcset) {\n imgAttrs += ` srcset=\"${escapeJSX(metadata.srcset)}\"`;\n imgAttrs += ` sizes=\"${escapeJSX(sizesValue)}\"`;\n }\n return (\n `${ind(ctx)}<picture${pictureClassAttr}${wrapperStyleAttr}>\\n` +\n `${ind(ctx)} <img${imgClassAttr}${imgAttrs}${blurOnload} />\\n` +\n `${ind(ctx)}</picture>\\n`\n );\n }\n\n if (metadata.srcset) {\n imgAttrs += ` srcset=\"${escapeJSX(metadata.srcset)}\"`;\n imgAttrs += ` sizes=\"${escapeJSX(sizesValue)}\"`;\n }\n\n return `${ind(ctx)}<img${classExpr}${styleAttr}${imgAttrs} />\\n`;\n}\n\n/**\n * Emit a list node as native Astro .map() call\n */\nfunction emitListNode(node: ListNode, ctx: AstroEmitContext): string {\n const sourceType = node.sourceType || 'prop';\n const itemAs = node.itemAs || 'item';\n\n if (sourceType === 'collection') {\n return emitCollectionListNode(node, ctx);\n }\n\n // Prop lists only work inside component definitions where the prop is available\n // On pages, the data source doesn't exist at template level - use SSR fallback\n if (!ctx.isComponentDef && !ctx.listItemBinding) {\n return emitFallback(ctx);\n }\n\n // Prop list: emit {items.map((item, index) => (...))}\n // Resolve source: \"{{features}}\" \u2192 \"features\"\n let source = node.source || 'items';\n const templateMatch = source.match(/^\\{\\{(.+)\\}\\}$/);\n if (templateMatch) {\n source = templateMatch[1].trim();\n }\n\n // Build the .map() source expression (compute before children so ctx has it)\n let mapSource = source;\n if (node.offset && node.limit) {\n mapSource = `${source}.slice(${node.offset}, ${node.offset + node.limit})`;\n } else if (node.offset) {\n mapSource = `${source}.slice(${node.offset})`;\n } else if (node.limit) {\n mapSource = `${source}.slice(0, ${node.limit})`;\n }\n\n // Build children with list item binding context\n const indexVar = `${itemAs}Index`;\n const innerCtx: AstroEmitContext = {\n ...ctx,\n indent: ctx.indent + 1,\n listItemBinding: itemAs,\n listIndexVar: indexVar,\n listSourceVar: mapSource,\n elementPath: [...ctx.elementPath, 0],\n };\n\n const children = node.children\n ? (node.children as (ComponentNode | string)[]).map((child, i) => {\n const childCtx = { ...innerCtx, elementPath: [...ctx.elementPath, i] };\n const out = nodeToAstro(child, childCtx);\n if (childCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n }).join('')\n : '';\n\n return (\n `${ind(ctx)}{${mapSource}.map((${itemAs}, ${indexVar}) => (\\n` +\n children +\n `${ind(ctx)}))}\\n`\n );\n}\n\n/**\n * Emit a collection-sourced list node using getCollection() in frontmatter\n */\nfunction emitCollectionListNode(node: ListNode, ctx: AstroEmitContext): string {\n // For collection lists, the data fetching happens in frontmatter\n const source = node.source || '';\n const itemAs = node.itemAs || singularize(source);\n\n // Add frontmatter lines and imports\n if (!ctx.frontmatterLines) ctx.frontmatterLines = [];\n if (!ctx.astroImports) ctx.astroImports = new Set();\n\n ctx.astroImports.add('getCollection');\n\n // Variable name for the collection data\n const collectionVar = `${source}List`;\n\n // Build the collection query with filter/sort/limit\n let queryChain = `await getCollection('${source}')`;\n\n if (node.filter) {\n // Simple filter support\n if (typeof node.filter === 'object' && !Array.isArray(node.filter) && 'field' in node.filter) {\n const f = node.filter as { field: string; operator?: string; value: unknown };\n const op = f.operator || 'eq';\n if (op === 'eq') {\n queryChain += `.then(items => items.filter(e => e.data.${f.field} === ${JSON.stringify(f.value)}))`;\n }\n }\n }\n\n if (node.sort) {\n const sortConfig = Array.isArray(node.sort) ? node.sort[0] : node.sort;\n if (sortConfig) {\n const order = sortConfig.order === 'desc' ? -1 : 1;\n queryChain += `.then(items => items.sort((a, b) => a.data.${sortConfig.field} > b.data.${sortConfig.field} ? ${order} : ${-order}))`;\n }\n }\n\n if (node.offset || node.limit) {\n const start = node.offset || 0;\n const end = node.limit ? start + node.limit : undefined;\n queryChain += `.then(items => items.slice(${start}${end !== undefined ? `, ${end}` : ''}))`;\n }\n\n ctx.frontmatterLines.push(`const ${collectionVar} = ${queryChain};`);\n\n // Build children with item binding\n const indexVar = `${itemAs}Index`;\n const innerCtx: AstroEmitContext = {\n ...ctx,\n indent: ctx.indent + 1,\n listItemBinding: itemAs,\n listIndexVar: indexVar,\n listSourceVar: collectionVar,\n cmsMode: true,\n cmsEntryBinding: itemAs,\n elementPath: [...ctx.elementPath, 0],\n };\n\n const children = node.children\n ? (node.children as (ComponentNode | string)[]).map((child, i) => {\n const childCtx = { ...innerCtx, elementPath: [...ctx.elementPath, i] };\n const out = nodeToAstro(child, childCtx);\n if (childCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n }).join('')\n : '';\n\n return (\n `${ind(ctx)}{${collectionVar}.map((${itemAs}, ${indexVar}) => (\\n` +\n children +\n `${ind(ctx)}))}\\n`\n );\n}\n\n/**\n * Emit a locale list node with static locale links\n * Since locales are known at build time, we emit static HTML\n */\nfunction emitLocaleListNode(node: LocaleListNode, ctx: AstroEmitContext): string {\n // If we don't have i18n config or slug map, fall back to SSR\n if (!ctx.i18nConfig || !ctx.currentPageSlugMap) {\n return emitFallback(ctx);\n }\n\n const i18nConfig = ctx.i18nConfig;\n const slugMap = ctx.currentPageSlugMap;\n const showCurrent = node.showCurrent !== false;\n const showSeparator = node.showSeparator !== false;\n const showFlag = node.showFlag !== false;\n const displayType = node.displayType || 'nativeName';\n\n // Build container classes from style\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n\n let elementClass: string | null = null;\n if ((node.interactiveStyles && (node.interactiveStyles as InteractiveStyles).length > 0) || node.generateElementClass) {\n elementClass = buildElementClass(ctx, node.label);\n\n }\n\n const { classExpr: containerClassExpr, styleAttr: containerStyleAttr } = buildClassAndStyleExpression(\n style,\n node.interactiveStyles as InteractiveStyles | undefined,\n elementClass,\n ctx\n );\n\n // Build item classes\n const itemStyle = node.itemStyle as StyleObject | ResponsiveStyleObject | undefined;\n const itemResult = itemStyle ? responsiveStylesToTailwind(itemStyle, ctx.breakpoints, ctx.responsiveScales) : { classes: [], dynamicStyles: {} };\n const itemClasses = itemResult.classes;\n\n // Build active item classes (item + active combined)\n const activeItemStyle = node.activeItemStyle as StyleObject | ResponsiveStyleObject | undefined;\n const activeResult = activeItemStyle ? responsiveStylesToTailwind(activeItemStyle, ctx.breakpoints, ctx.responsiveScales) : { classes: [], dynamicStyles: {} };\n const activeItemClasses = [...itemClasses, ...activeResult.classes];\n\n // Build separator classes\n const separatorStyle = node.separatorStyle as StyleObject | ResponsiveStyleObject | undefined;\n const sepResult = separatorStyle ? responsiveStylesToTailwind(separatorStyle, ctx.breakpoints, ctx.responsiveScales) : { classes: [], dynamicStyles: {} };\n const separatorClasses = sepResult.classes;\n\n // Build locale icon map\n const localeIconMap = new Map<string, string>();\n for (const localeConfig of i18nConfig.locales) {\n if (localeConfig.icon) {\n localeIconMap.set(localeConfig.code, localeConfig.icon);\n }\n }\n\n // Flag classes\n const flagStyle = node.flagStyle as StyleObject | ResponsiveStyleObject | undefined;\n const flagResult = flagStyle ? responsiveStylesToTailwind(flagStyle, ctx.breakpoints, ctx.responsiveScales) : { classes: [], dynamicStyles: {} };\n const flagClasses = flagResult.classes;\n\n // Build links\n const links: string[] = [];\n const currentLocale = ctx.locale || i18nConfig.defaultLocale;\n\n for (const localeConfig of i18nConfig.locales) {\n const code = localeConfig.code;\n const isCurrent = code === currentLocale;\n\n if (!showCurrent && isCurrent) continue;\n\n const path = slugMap[code] || '/';\n const classes = isCurrent ? activeItemClasses : itemClasses;\n const classAttr = classes.length > 0 ? ` class=\"${classes.join(' ')}\"` : '';\n const currentAttr = isCurrent ? ' data-current=\"true\"' : ' data-current=\"false\"';\n const hreflangAttr = ` hreflang=\"${localeConfig.langTag}\"`;\n\n // Display text\n let displayText: string;\n switch (displayType) {\n case 'code': displayText = code.toUpperCase(); break;\n case 'name': displayText = localeConfig.name; break;\n case 'nativeName': default: displayText = localeConfig.nativeName; break;\n }\n\n // Build link content\n let linkContent = '';\n const localeIcon = localeIconMap.get(code);\n if (showFlag && localeIcon) {\n const flagClassAttr = flagClasses.length > 0 ? ` class=\"${flagClasses.join(' ')}\"` : '';\n linkContent += `<img src=\"${escapeJSX(localeIcon)}\" alt=\"${escapeJSX(localeConfig.nativeName)} flag\"${flagClassAttr}>`;\n }\n linkContent += `<div>${escapeJSX(displayText)}</div>`;\n\n links.push(`${ind(ctx)} <a href=\"${escapeJSX(path)}\"${hreflangAttr}${currentAttr} data-locale=\"${escapeJSX(code)}\"${classAttr}>${linkContent}</a>`);\n }\n\n // Join with separator\n let linksContent: string;\n if (showSeparator && links.length > 1) {\n const sepClassAttr = separatorClasses.length > 0 ? ` class=\"${separatorClasses.join(' ')}\"` : '';\n linksContent = links.join(`\\n${ind(ctx)} <span${sepClassAttr}></span>\\n`);\n } else {\n linksContent = links.join('\\n');\n }\n\n const attrs = buildAttributesString(node.attributes, ctx);\n\n return (\n `${ind(ctx)}<div data-locale-list=\"true\"${containerClassExpr}${containerStyleAttr}${attrs}>\\n` +\n linksContent + '\\n' +\n `${ind(ctx)}</div>\\n`\n );\n}\n\n/**\n * Emit SSR fallback for complex nodes (list, locale-list)\n */\nfunction emitFallback(ctx: AstroEmitContext): string {\n const pathKey = ctx.elementPath.join('.');\n const ssrHtml = ctx.ssrFallbacks.get(pathKey);\n if (ssrHtml) {\n const escaped = escapeTemplateLiteral(ssrHtml);\n return `${ind(ctx)}<Fragment set:html={\\`${escaped}\\`} />\\n`;\n }\n return `${ind(ctx)}{/* Complex node - SSR fallback not available */}\\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Conditional rendering helpers\n// ---------------------------------------------------------------------------\n\nfunction emitIfOpen(node: ComponentNode, ctx: AstroEmitContext): string {\n const ifValue = hasIf(node) ? node.if : undefined;\n if (ifValue === undefined || ifValue === true) return '';\n\n if (typeof ifValue === 'boolean') {\n return ifValue ? '' : `${ind(ctx)}{/* hidden */}\\n`;\n }\n\n // BooleanMapping \u2192 generate conditional from values map\n if (typeof ifValue === 'object' && ifValue._mapping && ctx.isComponentDef) {\n const trueValues = Object.entries(ifValue.values)\n .filter(([, v]) => v === true)\n .map(([k]) => `'${k}'`);\n if (trueValues.length === 0) return `${ind(ctx)}{/* hidden */}\\n`;\n if (trueValues.length === 1) {\n return `${ind(ctx)}{${ifValue.prop} === ${trueValues[0]} && (\\n`;\n }\n return `${ind(ctx)}{[${trueValues.join(', ')}].includes(${ifValue.prop}) && (\\n`;\n }\n\n // String template\n if (typeof ifValue === 'string') {\n // CMS mode: {{cms.field}} \u2192 entry.data.field\n if (ctx.cmsMode && ifValue.includes('{{cms.')) {\n const match = ifValue.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (match) {\n const binding = ctx.cmsEntryBinding || 'entry';\n return `${ind(ctx)}{${binding}.data.${match[1].trim()} && (\\n`;\n }\n }\n\n // List item context: {{item.field}} or {{!itemLast}} etc.\n if (ctx.listItemBinding && /\\{\\{/.test(ifValue)) {\n const match = ifValue.match(/^\\{\\{([^}]+)\\}\\}$/);\n if (match) {\n let expr = match[1].trim();\n expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n return `${ind(ctx)}{${expr} && (\\n`;\n }\n }\n\n // Component prop context\n if (ctx.isComponentDef) {\n const fullMatch = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n if (!fullMatch && !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(ifValue)) {\n // Plain string without template syntax and not a valid identifier \u2014 always truthy, skip conditional\n return '';\n }\n let expr = fullMatch ? fullMatch[1].trim() : ifValue.replace(/\\{\\{(.+?)\\}\\}/g, '$1');\n if (ctx.listItemBinding) expr = rewriteItemVar(expr, ctx.listItemBinding);\n if (ctx.listIndexVar) expr = replaceItemMetaVars(expr, ctx.listIndexVar, ctx.listSourceVar);\n return `${ind(ctx)}{${expr} && (\\n`;\n }\n }\n\n return '';\n}\n\nfunction emitIfClose(node: ComponentNode, ctx: AstroEmitContext): string {\n const ifValue = hasIf(node) ? node.if : undefined;\n if (ifValue === undefined || ifValue === true) return '';\n\n if (typeof ifValue === 'boolean') return '';\n\n if (typeof ifValue === 'object' && ifValue._mapping && ctx.isComponentDef) {\n return `${ind(ctx)})}\\n`;\n }\n\n if (typeof ifValue === 'string') {\n const hasCmsCondition = ctx.cmsMode && ifValue.includes('{{cms.');\n const hasItemCondition = ctx.listItemBinding && /\\{\\{/.test(ifValue);\n if (hasCmsCondition || hasItemCondition) {\n return `${ind(ctx)})}\\n`;\n }\n if (ctx.isComponentDef) {\n const fullMatch = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n if (!fullMatch && !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(ifValue)) {\n // Matches the skip in emitIfOpen \u2014 no open brace was emitted\n return '';\n }\n return `${ind(ctx)})}\\n`;\n }\n }\n\n return '';\n}\n\n// ---------------------------------------------------------------------------\n// Children helper\n// ---------------------------------------------------------------------------\n\nfunction emitChildren(\n children: (ComponentNode | string)[] | string | ComponentNode | null | undefined,\n ctx: AstroEmitContext\n): string {\n if (!children) return '';\n\n const innerCtx = { ...ctx, indent: ctx.indent + 1, elementPath: [...ctx.elementPath] };\n\n if (typeof children === 'string') {\n const out = nodeToAstro(children, innerCtx);\n if (innerCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n }\n\n // Iterate children arrays inline with appended index (matches SSR renderer's\n // children iteration which uses [...parentPath, index] for each child)\n if (Array.isArray(children)) {\n let result = '';\n for (let i = 0; i < children.length; i++) {\n const childCtx = { ...innerCtx, elementPath: [...ctx.elementPath, i] };\n result += nodeToAstro(children[i], childCtx);\n if (childCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n }\n return result;\n }\n\n // Single node\n const out = nodeToAstro(children, innerCtx);\n if (innerCtx.needsI18nResolver) ctx.needsI18nResolver = true;\n return out;\n}\n", "/**\n * CMS Template Expression Transformer for Astro Export\n * Converts {{cms.field}} and {{item.field}} template expressions to Astro expressions\n */\n\n// CMS template pattern (from cmsSSRProcessor.ts)\nconst CMS_TEMPLATE_PATTERN = /\\{\\{cms\\.([^}]+)\\}\\}/g;\n// Item template pattern for list iteration\nconst ITEM_TEMPLATE_PATTERN = /\\{\\{([^}]+)\\}\\}/g;\n\nexport function isTemplateExpression(text: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(text);\n}\n\nexport function transformCMSTemplate(\n text: string,\n binding: string = 'entry',\n richTextFields?: Set<string>,\n wrapFn?: string\n): string {\n const w = (expr: string) => wrapFn ? `${wrapFn}(${expr})` : expr;\n\n // Check if entire text is a single {{cms.field}} expression\n const fullMatch = text.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n const fieldPath = fullMatch[1].trim();\n const topLevelField = fieldPath.split('.')[0];\n\n // Rich-text fields use Fragment set:html\n if (richTextFields?.has(topLevelField)) {\n return `<Fragment set:html={${w(`${binding}.data.${fieldPath}`)}} />`;\n }\n\n return `{${w(`${binding}.data.${fieldPath}`)}}`;\n }\n\n // Mixed content: \"Hello {{cms.name}}\" \u2192 {`Hello ${entry.data.name}`}\n if (CMS_TEMPLATE_PATTERN.test(text)) {\n CMS_TEMPLATE_PATTERN.lastIndex = 0;\n const replaced = text.replace(CMS_TEMPLATE_PATTERN, (_, fieldPath) => {\n return `\\${${w(`${binding}.data.${fieldPath.trim()}`)}}`;\n });\n return `{\\`${replaced}\\`}`;\n }\n\n return text;\n}\n\n/**\n * Replace legacy itemIndex/itemFirst/itemLast meta-variables with\n * the actual .map() callback index parameter name.\n */\n/**\n * Rewrite the default `item.` prefix to the actual .map() parameter name\n * when itemAs differs from 'item' (e.g., itemAs='link' \u2192 item.text \u2192 link.text).\n */\nexport function rewriteItemVar(expr: string, itemVar: string): string {\n if (itemVar === 'item') return expr;\n return expr.replace(/\\bitem\\./g, `${itemVar}.`);\n}\n\nexport function replaceItemMetaVars(expr: string, indexVar: string, sourceVar?: string, itemVar?: string): string {\n const lastExpr = sourceVar\n ? `(${indexVar} === ${sourceVar}.length - 1)`\n : `false /* itemLast not supported */`;\n let result = expr\n .replace(/\\bitemIndex\\b/g, indexVar)\n .replace(/\\bitemFirst\\b/g, `(${indexVar} === 0)`)\n .replace(/\\bitemLast\\b/g, lastExpr);\n if (itemVar) result = rewriteItemVar(result, itemVar);\n return result;\n}\n\nexport function transformItemTemplate(\n text: string,\n itemVar: string = 'item',\n indexVar?: string,\n sourceVar?: string\n): string {\n // Check if entire text is a single {{expression}}\n const fullMatch = text.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n let expr = fullMatch[1].trim();\n expr = rewriteItemVar(expr, itemVar);\n if (indexVar) expr = replaceItemMetaVars(expr, indexVar, sourceVar);\n // If it contains a dot, it's item.field\n if (expr.startsWith(`${itemVar}.`)) {\n return `{${expr}}`;\n }\n // Bare expression like {{features}} - keep as prop reference\n return `{${expr}}`;\n }\n\n // Mixed content: replace each {{expr}}\n if (ITEM_TEMPLATE_PATTERN.test(text)) {\n ITEM_TEMPLATE_PATTERN.lastIndex = 0;\n const replaced = text.replace(ITEM_TEMPLATE_PATTERN, (_, expr) => {\n let trimmed = expr.trim();\n trimmed = rewriteItemVar(trimmed, itemVar);\n if (indexVar) trimmed = replaceItemMetaVars(trimmed, indexVar, sourceVar);\n return `\\${${trimmed}}`;\n });\n return `{\\`${replaced}\\`}`;\n }\n\n return text;\n}\n", "import { RAW_HTML_PREFIX } from '../../shared/constants';\n\nexport function stripRawHtmlPrefixDeep<T>(value: T): T {\n if (typeof value === 'string') {\n return (value.startsWith(RAW_HTML_PREFIX) ? value.slice(RAW_HTML_PREFIX.length) : value) as T;\n }\n if (Array.isArray(value)) {\n return value.map((item) => stripRawHtmlPrefixDeep(item)) as unknown as T;\n }\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = stripRawHtmlPrefixDeep(v);\n }\n return out as T;\n }\n return value;\n}\n", "/**\n * Component File Generator\n * Generates .astro files from StructuredComponentDefinitions\n */\n\nimport type {\n ComponentDefinition,\n StructuredComponentDefinition,\n PropDefinition,\n} from '../../shared/types';\nimport type { BasePropDefinition, ListPropDefinition, LinkPropValue } from '../../shared/types/components';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\nimport type { ResponsiveScales } from '../../shared/responsiveScaling';\nimport { stripRawHtmlPrefixDeep } from './astroEmitHelpers';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a PropDefinition to a TypeScript type string\n */\nfunction propDefToTSType(def: PropDefinition): string {\n switch (def.type) {\n case 'string':\n case 'rich-text':\n case 'file':\n return 'string';\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'select':\n if ('options' in def && def.options && def.options.length > 0) {\n return def.options.map((o) => `'${o}'`).join(' | ');\n }\n return 'string';\n case 'link':\n return '{ href: string; target?: string }';\n case 'list':\n return 'any[]';\n default:\n return 'any';\n }\n}\n\n/**\n * Format a default value for destructuring\n */\nfunction formatDefault(def: PropDefinition): string | null {\n if (!('default' in def) || def.default === undefined) return null;\n const val = stripRawHtmlPrefixDeep(def.default);\n\n if (typeof val === 'string') return JSON.stringify(val);\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n\n // I18nValue\n if (typeof val === 'object' && val !== null && '_i18n' in val) {\n // Use the first available locale value\n for (const [key, v] of Object.entries(val)) {\n if (key !== '_i18n' && typeof v === 'string') return JSON.stringify(v);\n }\n return null;\n }\n\n // Link value\n if (typeof val === 'object' && val !== null && 'href' in val) {\n return JSON.stringify(val);\n }\n\n // Arrays\n if (Array.isArray(val)) {\n return JSON.stringify(val);\n }\n\n return JSON.stringify(val);\n}\n\n/**\n * Merge the `className` variable onto the root element's class attribute.\n * Handles: class=\"existing\", class:list={[...]}, class={expr}, or no class at all.\n */\nfunction mergeClassNameOntoRoot(template: string): string {\n // Find the first opening tag (skip whitespace/newlines)\n const tagMatch = template.match(/^(\\s*<)(\\w[\\w-]*)([\\s\\S]*?)(\\/?>)/);\n if (!tagMatch) return template;\n\n const [fullMatch, prefix, tagName, attrs, close] = tagMatch;\n\n // Check for existing class:list\n const classListMatch = attrs.match(/\\s+class:list=\\{(\\[[\\s\\S]*?\\])\\}/);\n if (classListMatch) {\n const existingList = classListMatch[1];\n // Append className to the array\n const newList = existingList.replace(/\\]$/, `, className]`);\n const newAttrs = attrs.replace(classListMatch[0], ` class:list={${newList}}`);\n return prefix + tagName + newAttrs + close + template.slice(fullMatch.length);\n }\n\n // Check for existing class=\"...\" (static)\n const classStaticMatch = attrs.match(/\\s+class=\"([^\"]*)\"/);\n if (classStaticMatch) {\n const existing = classStaticMatch[1];\n const newAttrs = attrs.replace(classStaticMatch[0], ` class:list={[\"${existing}\", className]}`);\n return prefix + tagName + newAttrs + close + template.slice(fullMatch.length);\n }\n\n // Check for existing class={expr} (dynamic)\n const classDynMatch = attrs.match(/\\s+class=\\{([^}]+)\\}/);\n if (classDynMatch) {\n const expr = classDynMatch[1];\n const newAttrs = attrs.replace(classDynMatch[0], ` class:list={[${expr}, className]}`);\n return prefix + tagName + newAttrs + close + template.slice(fullMatch.length);\n }\n\n // No existing class \u2014 add class={className}\n return prefix + tagName + ` class={className}` + attrs + close + template.slice(fullMatch.length);\n}\n\n// ---------------------------------------------------------------------------\n// Main emitter\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a .astro file string from a component definition\n */\nexport function emitAstroComponent(\n name: string,\n def: ComponentDefinition,\n allComponents: Record<string, ComponentDefinition>,\n breakpoints: BreakpointConfig = DEFAULT_BREAKPOINTS,\n defaultLocale: string = 'en',\n responsiveScales?: ResponsiveScales\n): string {\n const comp = def.component;\n const propDefs = comp.interface || {};\n const structure = comp.structure;\n\n if (!structure) {\n // Component with no structure - just CSS/JS\n return buildNoStructureComponent(name, comp);\n }\n\n // Build the Astro context for template emission\n const ctx: AstroEmitContext = {\n imports: new Set<string>(),\n isComponentDef: true,\n componentProps: propDefs,\n globalComponents: allComponents,\n indent: 0,\n ssrFallbacks: new Map(),\n elementPath: [0],\n fileType: 'component',\n fileName: name,\n breakpoints,\n responsiveScales,\n defaultLocale,\n imageImports: new Map<string, string>(),\n fileDepth: 0, // components live at src/components/\n };\n\n // Emit the template body\n let templateBody = nodeToAstro(structure, ctx);\n\n // Merge instance className onto the root element (for acceptsStyles support)\n templateBody = mergeClassNameOntoRoot(templateBody);\n\n // Build frontmatter (includes class prop for instance style support)\n const frontmatter = buildFrontmatter(\n name,\n propDefs,\n ctx.imports,\n ctx.dynamicTags,\n ctx.needsI18nResolver ? defaultLocale : undefined,\n ctx.imageImports\n );\n\n // Build style/script sections\n const styleSection = comp.css ? `\\n<style>\\n${comp.css}\\n</style>\\n` : '';\n const scriptSection = comp.javascript\n ? buildScriptSection(comp.javascript, comp, propDefs)\n : '';\n\n return `---\\n${frontmatter}---\\n${templateBody}${styleSection}${scriptSection}`;\n}\n\n/**\n * Build the frontmatter section (imports, Props interface, destructuring)\n */\nfunction buildFrontmatter(\n componentName: string,\n propDefs: Record<string, PropDefinition>,\n imports: Set<string>,\n dynamicTags?: Map<string, string>,\n i18nDefaultLocale?: string,\n imageImports?: Map<string, string>\n): string {\n const lines: string[] = [];\n\n // Component imports\n for (const imp of Array.from(imports).sort()) {\n lines.push(`import ${imp} from './${imp}.astro';`);\n }\n\n // Static image imports (astro:assets <Picture>). Map size is the single\n // source of truth \u2014 a separate boolean would be lost by child-ctx spreads.\n if (imageImports && imageImports.size > 0) {\n lines.push(`import { Picture } from 'astro:assets';`);\n const sortedImages = Array.from(imageImports.entries()).sort(([a], [b]) => a.localeCompare(b));\n for (const [varName, importPath] of sortedImages) {\n lines.push(`import ${varName} from '${importPath}';`);\n }\n }\n\n if (lines.length > 0) lines.push('');\n\n const propEntries = Object.entries(propDefs);\n\n // Always generate Props interface and destructuring (at minimum for class prop)\n {\n // Interface\n lines.push('interface Props {');\n for (const [propName, propDef] of propEntries) {\n if (propName === 'children') continue;\n const tsType = propDefToTSType(propDef);\n const optional = 'default' in propDef && propDef.default !== undefined;\n lines.push(` ${propName}${optional ? '?' : ''}: ${tsType};`);\n }\n // Always include class prop for instance style support\n lines.push(' class?: string;');\n lines.push('}');\n lines.push('');\n\n // Destructuring with defaults\n const destructParts: string[] = [];\n for (const [propName, propDef] of propEntries) {\n if (propName === 'children') continue;\n const defaultVal = formatDefault(propDef);\n if (defaultVal !== null) {\n destructParts.push(`${propName} = ${defaultVal}`);\n } else if (propDef.type === 'link') {\n destructParts.push(`${propName} = { href: \"#\" }`);\n } else {\n destructParts.push(propName);\n }\n }\n\n // Always include class prop (renamed to className to avoid reserved word)\n destructParts.push('class: className = \"\"');\n\n if (destructParts.length <= 3 && destructParts.join(', ').length < 80) {\n lines.push(`const { ${destructParts.join(', ')} } = Astro.props;`);\n } else {\n lines.push('const {');\n for (const part of destructParts) {\n lines.push(` ${part},`);\n }\n lines.push('} = Astro.props;');\n }\n }\n\n // Dynamic tag definitions (e.g., const Tag_0_0 = `h${size}`)\n if (dynamicTags && dynamicTags.size > 0) {\n lines.push('');\n for (const [varName, templateExpr] of dynamicTags) {\n lines.push(`const ${varName} = \\`${templateExpr}\\`;`);\n }\n }\n\n // i18n resolver helper \u2014 resolves { _i18n: true, en: \"...\", pl: \"...\" } at runtime\n if (i18nDefaultLocale) {\n lines.push('');\n lines.push(`const r = (v: any) => {`);\n lines.push(` if (v && typeof v === 'object' && v._i18n) {`);\n lines.push(` const locale = Astro.currentLocale ?? '${i18nDefaultLocale}';`);\n lines.push(` return v[locale] ?? v['${i18nDefaultLocale}'] ?? Object.values(v).find((s: any) => typeof s === 'string' && s !== '') ?? '';`);\n lines.push(` }`);\n lines.push(` return v ?? '';`);\n lines.push(`};`);\n }\n\n if (lines.length > 0) lines.push('');\n return lines.join('\\n');\n}\n\n/**\n * Build a component with no structure (CSS/JS only)\n */\nfunction buildNoStructureComponent(\n name: string,\n comp: StructuredComponentDefinition\n): string {\n let content = '---\\n---\\n<slot />\\n';\n if (comp.css) content += `\\n<style>\\n${comp.css}\\n</style>\\n`;\n if (comp.javascript) content += `\\n<script is:inline>\\n${comp.javascript}\\n</script>\\n`;\n return content;\n}\n\n/**\n * Transform JS for define:vars compatibility.\n * Astro's define:vars injects each prop as a script-scope variable, not a `props` object.\n * This function:\n * 1. Removes `const/let/var { x, y } = props;` destructuring lines\n * 2. Replaces `props.X` references with direct `X` variable access\n * 3. Drops `var/let/const` from redeclarations of define:vars variables\n */\nfunction transformDefineVarsJS(js: string, varNames: string[]): string {\n let result = js;\n\n // 1. Remove destructuring from props: `const { x, y } = props;`\n result = result.replace(\n /^\\s*(const|let|var)\\s+\\{([^}]+)\\}\\s*=\\s*props\\s*;?\\s*$/gm,\n (match, _keyword, inner) => {\n const names = inner.split(',').map((s: string) => s.trim()).filter(Boolean);\n if (names.every((n: string) => varNames.includes(n))) return '';\n return match;\n }\n );\n\n // 2. Replace `props.X` with `X` (longest names first to avoid substring conflicts)\n const sorted = [...varNames].sort((a, b) => b.length - a.length);\n for (const name of sorted) {\n result = result.replace(new RegExp(`props\\\\.${name}\\\\b`, 'g'), name);\n }\n\n // 3. Remove redeclarations of define:vars variables (already injected as const by Astro)\n for (const name of varNames) {\n result = result.replace(\n new RegExp(`^\\\\s*(var|let|const)\\\\s+${name}\\\\s*=[^;]*;?\\\\s*$`, 'gm'),\n ''\n );\n }\n\n return result;\n}\n\n/**\n * Build the script section with proper el/props initialization.\n * Captures el immediately via document.currentScript.previousElementSibling,\n * then defers actual JS execution until DOMContentLoaded so that external\n * libraries (e.g. Swiper loaded with defer) are available.\n */\nfunction buildScriptSection(\n js: string,\n comp: StructuredComponentDefinition,\n propDefs: Record<string, PropDefinition>\n): string {\n // Capture el immediately (document.currentScript is only valid during script execution)\n // but defer the component init until DOMContentLoaded so deferred libraries are ready\n // Remove whitespace-only text nodes so Astro's formatted HTML matches SSR's minified output.\n // Without this, scripts that use firstChild/childNodes pick up whitespace between elements.\n const cleanTextNodes = `(function _w(n){var c=n.firstChild,x;while(c){x=c.nextSibling;if(c.nodeType===3){if(!c.textContent.trim())n.removeChild(c)}else if(c.nodeType===1)_w(c);c=x}})(el);`;\n\n const deferWrapper = (innerJS: string) =>\n `var el = document.currentScript.previousElementSibling;\\n` +\n `function __init__() {\\n${cleanTextNodes}\\n${innerJS}\\n}\\n` +\n `if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', __init__); } else { __init__(); }`;\n\n if (comp.defineVars) {\n const vars = comp.defineVars === true\n ? Object.keys(propDefs).filter(k => k !== 'children')\n : comp.defineVars;\n\n if (vars.length > 0) {\n const transformedJS = transformDefineVarsJS(js, vars);\n const defineVarsObj = `{ ${vars.join(', ')} }`;\n return `\\n<script define:vars={${defineVarsObj}}>\\n(function(){\\n${deferWrapper(transformedJS)}\\n})();\\n</script>\\n`;\n }\n }\n\n return `\\n<script is:inline>\\n(function(){\\n${deferWrapper(js)}\\n})();\\n</script>\\n`;\n}\n", "/**\n * Page File Generator\n * Generates .astro page files that import and compose components\n */\n\nimport type { JSONPage, ComponentDefinition, I18nConfig } from '../../shared/types';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\nimport type { ImageMetadataMap } from '../ssr/imageMetadata';\nimport type { SlugMap } from '../../shared/slugTranslator';\nimport type { ResponsiveScales } from '../../shared/responsiveScaling';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PageEmitOptions {\n /** Page data */\n pageData: JSONPage;\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** Page title */\n title: string;\n /** Page meta HTML */\n meta: string;\n /** Locale */\n locale: string;\n /** Default theme */\n theme: string;\n /** Font preloads HTML */\n fontPreloads: string;\n /** Library tags */\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string };\n /** Script paths */\n scriptPaths: string[];\n /** Import path to BaseLayout */\n layoutImportPath: string;\n /** File depth relative to src/pages */\n fileDepth: number;\n /** SSR HTML fallbacks: node path \u2192 rendered HTML (for ListNode, LocaleListNode) */\n ssrFallbacks: Map<string, string>;\n /** Page name (without extension) */\n pageName: string;\n /** Breakpoint config for responsive Tailwind classes */\n breakpoints?: BreakpointConfig;\n /** Responsive scales config for auto-scaling at breakpoints */\n responsiveScales?: ResponsiveScales;\n /** Image metadata map for responsive image generation */\n imageMetadataMap?: ImageMetadataMap;\n /** I18n config for locale list rendering */\n i18nConfig?: I18nConfig;\n /** Locale\u2192slug map for current page (for locale list links) */\n currentPageSlugMap?: Record<string, string>;\n /** Slug mappings for translating internal link hrefs */\n slugMappings?: SlugMap[];\n /** Image format: 'webp' uses plain <img>, 'avif' uses <picture> */\n imageFormat?: 'webp' | 'avif';\n /**\n * Raw-HTML slice \u2192 processed HTML captured during the page's SSR pass.\n * Ensures `<Fragment set:html>` matches SSR output for rich-text content\n * (image rewriting, component expansion, link localization).\n */\n processedRawHtml?: Map<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction escapeTemplateLiteral(s: string): string {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/\\$\\{/g, '\\\\${')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction escapeJSX(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n}\n\n/**\n * Compute relative import path from page to components directory\n */\nfunction componentImportPath(fileDepth: number, componentName: string): string {\n // fileDepth 0 = src/pages/index.astro \u2192 ../components/X.astro\n // fileDepth 1 = src/pages/en/index.astro \u2192 ../../components/X.astro\n const ups = '../'.repeat(fileDepth + 1);\n return `${ups}components/${componentName}.astro`;\n}\n\n// ---------------------------------------------------------------------------\n// Main emitter\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a page .astro file from page data with component imports\n */\nexport function emitAstroPage(options: PageEmitOptions): string {\n const {\n pageData,\n globalComponents,\n title,\n meta,\n locale,\n theme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath,\n fileDepth,\n ssrFallbacks,\n pageName,\n breakpoints: breakpointsOpt,\n responsiveScales,\n imageMetadataMap,\n i18nConfig,\n currentPageSlugMap,\n slugMappings,\n imageFormat,\n processedRawHtml,\n } = options;\n\n const breakpoints = breakpointsOpt ?? DEFAULT_BREAKPOINTS;\n\n const root = pageData.root;\n if (!root) {\n // Empty page - just layout wrapper\n return buildEmptyPage(layoutImportPath, title, meta, locale, theme, fontPreloads, libraryTags, scriptPaths);\n }\n\n // Build the Astro emit context\n const ctx: AstroEmitContext = {\n imports: new Set<string>(),\n isComponentDef: false,\n componentProps: {},\n globalComponents,\n indent: 1, // inside BaseLayout\n ssrFallbacks,\n elementPath: [0],\n fileType: 'page',\n fileName: pageName,\n breakpoints,\n responsiveScales,\n imageMetadataMap,\n locale,\n i18nConfig,\n currentPageSlugMap,\n frontmatterLines: [],\n astroImports: new Set<string>(),\n slugMappings,\n i18nDefaultLocale: i18nConfig?.defaultLocale,\n imageFormat,\n processedRawHtml,\n imageImports: new Map<string, string>(),\n fileDepth,\n };\n\n // Emit the template body\n const templateBody = nodeToAstro(root, ctx);\n\n // Build frontmatter with imports\n const importLines: string[] = [];\n\n // Add Astro API imports (e.g., getCollection) if collected during emission\n if (ctx.astroImports && ctx.astroImports.size > 0) {\n const astroImports = Array.from(ctx.astroImports);\n importLines.push(`import { ${astroImports.join(', ')} } from 'astro:content';`);\n }\n\n importLines.push(`import BaseLayout from '${layoutImportPath}';`);\n\n // Static image imports (astro:assets <Picture>). Map size is the single\n // source of truth \u2014 a separate boolean would be lost by child-ctx spreads.\n if (ctx.imageImports && ctx.imageImports.size > 0) {\n importLines.push(`import { Picture } from 'astro:assets';`);\n const sortedImages = Array.from(ctx.imageImports.entries()).sort(([a], [b]) => a.localeCompare(b));\n for (const [varName, importPath] of sortedImages) {\n importLines.push(`import ${varName} from '${importPath}';`);\n }\n }\n\n // Sort component imports alphabetically\n const componentImports = Array.from(ctx.imports).sort();\n for (const comp of componentImports) {\n const path = componentImportPath(fileDepth, comp);\n importLines.push(`import ${comp} from '${path}';`);\n }\n\n // Build script paths array\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n\n // Build library tags literal\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n const escapedMeta = escapeTemplateLiteral(meta);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n\n // Collect frontmatter lines from list emission (e.g., getCollection calls)\n const extraFrontmatter = ctx.frontmatterLines && ctx.frontmatterLines.length > 0\n ? '\\n' + ctx.frontmatterLines.join('\\n')\n : '';\n\n return `---\n${importLines.join('\\n')}${extraFrontmatter}\n---\n<BaseLayout\n title=\"${escapeJSX(title)}\"\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n <div id=\"root\">\n${templateBody} </div>\n</BaseLayout>\n`;\n}\n\n/**\n * Build an empty page with just the layout wrapper\n */\nfunction buildEmptyPage(\n layoutImport: string,\n title: string,\n meta: string,\n locale: string,\n theme: string,\n fontPreloads: string,\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string },\n scriptPaths: string[]\n): string {\n const escapedMeta = escapeTemplateLiteral(meta);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n return `---\nimport BaseLayout from '${layoutImport}';\n---\n<BaseLayout\n title=\"${escapeJSX(title)}\"\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n</BaseLayout>\n`;\n}\n", "/**\n * CMS Page File Generator\n * Generates .astro page files for CMS template pages with getStaticPaths()\n */\n\nimport type { JSONPage, ComponentDefinition, CMSSchema, I18nConfig } from '../../shared/types';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\nimport { transformCMSTemplate } from './templateTransformer';\nimport type { ImageMetadataMap } from '../ssr/imageMetadata';\nimport type { SlugMap } from '../../shared/slugTranslator';\nimport type { ResponsiveScales } from '../../shared/responsiveScaling';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface CMSPageEmitOptions {\n /** Page data */\n pageData: JSONPage;\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** CMS collection schema */\n cmsSchema: CMSSchema;\n /** Page title (may contain {{cms.field}}) */\n title: string;\n /** Page meta HTML */\n meta: string;\n /** Locale */\n locale: string;\n /** Default theme */\n theme: string;\n /** Font preloads HTML */\n fontPreloads: string;\n /** Library tags */\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string };\n /** Script paths */\n scriptPaths: string[];\n /** Import path to BaseLayout */\n layoutImportPath: string;\n /** File depth relative to src/pages */\n fileDepth: number;\n /** SSR HTML fallbacks: node path -> rendered HTML (for ListNode, LocaleListNode) */\n ssrFallbacks: Map<string, string>;\n /** Page name (without extension) */\n pageName: string;\n /** Breakpoint config for responsive Tailwind classes */\n breakpoints?: BreakpointConfig;\n /** Responsive scales config for auto-scaling at breakpoints */\n responsiveScales?: ResponsiveScales;\n /** Image metadata map for responsive image generation */\n imageMetadataMap?: ImageMetadataMap;\n /** Internationalization config */\n i18nConfig: I18nConfig;\n /** Whether site has multiple locales */\n isMultiLocale: boolean;\n /** Slug mappings for translating internal link hrefs */\n slugMappings?: SlugMap[];\n /** Image format: 'webp' uses plain <img>, 'avif' uses <picture> */\n imageFormat?: 'webp' | 'avif';\n /**\n * Raw-HTML slice \u2192 processed HTML captured during the template's SSR pass.\n * Ensures `<Fragment set:html>` matches SSR output for rich-text content\n * (image rewriting, component expansion, link localization).\n */\n processedRawHtml?: Map<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction escapeTemplateLiteral(s: string): string {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/\\$\\{/g, '\\\\${')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction escapeJSX(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n}\n\nfunction componentImportPath(fileDepth: number, componentName: string): string {\n const ups = '../'.repeat(fileDepth + 1);\n return `${ups}components/${componentName}.astro`;\n}\n\n/**\n * Collect rich-text field names from CMS schema\n */\nfunction collectRichTextFields(schema: CMSSchema): Set<string> {\n const richTextFields = new Set<string>();\n for (const [fieldName, fieldDef] of Object.entries(schema.fields)) {\n if (fieldDef.type === 'rich-text') {\n richTextFields.add(fieldName);\n }\n }\n return richTextFields;\n}\n\n/**\n * Transform a title string that may contain {{cms.field}} to an Astro expression.\n * Returns the transformed title suitable for use in a JSX attribute.\n */\nfunction transformTitleExpression(\n title: string,\n binding: string,\n richTextFields: Set<string>,\n wrapFn?: string\n): string {\n if (!/\\{\\{cms\\./.test(title)) {\n return `\"${escapeJSX(title)}\"`;\n }\n\n const w = (expr: string) => wrapFn ? `${wrapFn}(${expr})` : expr;\n\n // Full match: entire title is a single {{cms.field}}\n const fullMatch = title.match(/^\\{\\{cms\\.([^}]+)\\}\\}$/);\n if (fullMatch) {\n return `{${w(`${binding}.data.${fullMatch[1].trim()}`)}}`;\n }\n\n // Mixed content: \"Page - {{cms.title}}\" -> {`Page - ${entry.data.title}`}\n const replaced = title.replace(/\\{\\{cms\\.([^}]+)\\}\\}/g, (_, fieldPath) => {\n return `\\${${w(`${binding}.data.${fieldPath.trim()}`)}}`;\n });\n return `{\\`${replaced}\\`}`;\n}\n\n/**\n * Extract the path prefix from a URL pattern.\n * E.g., \"/blog/{{slug}}\" -> \"blog/\"\n * E.g., \"/posts/{{slug}}\" -> \"posts/\"\n */\nfunction extractPathPrefix(urlPattern: string): string {\n // Remove leading slash, then remove the slug placeholder and everything after\n const withoutLeading = urlPattern.replace(/^\\//, '');\n const idx = withoutLeading.indexOf('{{');\n if (idx <= 0) return '';\n return withoutLeading.substring(0, idx);\n}\n\n// ---------------------------------------------------------------------------\n// getStaticPaths generator\n// ---------------------------------------------------------------------------\n\nfunction buildGetStaticPaths(\n schema: CMSSchema,\n isMultiLocale: boolean,\n i18nConfig: I18nConfig,\n locale?: string\n): string {\n const collectionId = schema.id;\n const slugField = schema.slugField || 'slug';\n const pathPrefix = extractPathPrefix(schema.urlPattern);\n const targetLocale = locale || i18nConfig.defaultLocale;\n\n if (!isMultiLocale) {\n // Single-locale version: resolve slug for this specific locale\n // Route file is at blog/[slug].astro (or pl/blog/[slug].astro for non-default)\n // If i18n values exist, resolve for the target locale\n const slugExpr = i18nConfig.locales.length > 1\n ? `entry.data.${slugField}?.${targetLocale} || entry.data.${slugField} || entry.id`\n : `entry.data.${slugField} || entry.id`;\n\n return [\n `export async function getStaticPaths() {`,\n ` const entries = await getCollection('${collectionId}');`,\n ` return entries.map(entry => ({`,\n ` params: { slug: ${slugExpr} },`,\n ` props: { entry },`,\n ` }));`,\n `}`,\n ``,\n `const { entry } = Astro.props;`,\n ].join('\\n');\n }\n\n // Multi-locale version: enumerate items x locales\n // Route file is at [...slug].astro (top level), so slug includes full path\n const defaultLocale = i18nConfig.defaultLocale;\n const locales = i18nConfig.locales;\n\n const lines: string[] = [\n `export async function getStaticPaths() {`,\n ` const entries = await getCollection('${collectionId}');`,\n ` const paths = [];`,\n ` for (const entry of entries) {`,\n ];\n\n for (const locale of locales) {\n const code = locale.code;\n const slugExpr = `entry.data.${slugField}?.${code} || entry.data.${slugField} || entry.id`;\n\n if (code === defaultLocale) {\n // Default locale: include path prefix but no locale prefix\n // e.g., /blog/{{slug}} \u2192 slug = \"blog/hello\"\n if (pathPrefix) {\n lines.push(\n ` paths.push({`,\n ` params: { slug: \\`${pathPrefix}\\${${slugExpr}}\\` },`,\n ` props: { entry, locale: '${code}' },`,\n ` });`\n );\n } else {\n lines.push(\n ` paths.push({`,\n ` params: { slug: ${slugExpr} },`,\n ` props: { entry, locale: '${code}' },`,\n ` });`\n );\n }\n } else {\n // Non-default locale: locale prefix + path prefix + slug\n // e.g., slug = \"pl/blog/witaj\"\n lines.push(\n ` paths.push({`,\n ` params: { slug: \\`${code}/${pathPrefix}\\${${slugExpr}}\\` },`,\n ` props: { entry, locale: '${code}' },`,\n ` });`\n );\n }\n }\n\n lines.push(\n ` }`,\n ` return paths;`,\n `}`,\n ``,\n `const { entry, locale = '${defaultLocale}' } = Astro.props;`\n );\n\n return lines.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Main emitter\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a CMS template .astro page file with getStaticPaths()\n */\nexport function emitCMSPage(options: CMSPageEmitOptions): string {\n const {\n pageData,\n globalComponents,\n cmsSchema,\n title,\n meta,\n locale,\n theme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n layoutImportPath,\n fileDepth,\n ssrFallbacks,\n pageName,\n breakpoints: breakpointsOpt,\n responsiveScales,\n imageMetadataMap,\n i18nConfig,\n isMultiLocale,\n slugMappings,\n processedRawHtml,\n } = options;\n\n const breakpoints = breakpointsOpt ?? DEFAULT_BREAKPOINTS;\n const binding = 'entry';\n const richTextFields = collectRichTextFields(cmsSchema);\n const wrapFn = 'r';\n\n const root = pageData.root;\n if (!root) {\n return buildEmptyCMSPage(\n layoutImportPath,\n title,\n meta,\n locale,\n theme,\n fontPreloads,\n libraryTags,\n scriptPaths,\n cmsSchema,\n isMultiLocale,\n i18nConfig,\n binding,\n richTextFields\n );\n }\n\n // Build the Astro emit context with CMS mode enabled\n const ctx: AstroEmitContext = {\n imports: new Set<string>(),\n isComponentDef: false,\n componentProps: {},\n globalComponents,\n indent: 1, // inside BaseLayout\n ssrFallbacks,\n elementPath: [0],\n fileType: 'page',\n fileName: pageName,\n breakpoints,\n responsiveScales,\n imageMetadataMap,\n locale,\n cmsMode: true,\n cmsEntryBinding: binding,\n cmsRichTextFields: richTextFields,\n cmsWrapFn: wrapFn,\n slugMappings,\n i18nDefaultLocale: i18nConfig.defaultLocale,\n imageFormat: options.imageFormat,\n processedRawHtml,\n imageImports: new Map<string, string>(),\n fileDepth,\n };\n\n // Emit the template body\n const templateBody = nodeToAstro(root, ctx);\n\n // Build frontmatter with imports\n const importLines: string[] = [];\n importLines.push(`import { getCollection } from 'astro:content';`);\n importLines.push(`import BaseLayout from '${layoutImportPath}';`);\n\n // Static image imports (astro:assets <Picture>). Map size is the single\n // source of truth \u2014 a separate boolean would be lost by child-ctx spreads.\n if (ctx.imageImports && ctx.imageImports.size > 0) {\n importLines.push(`import { Picture } from 'astro:assets';`);\n const sortedImages = Array.from(ctx.imageImports.entries()).sort(([a], [b]) => a.localeCompare(b));\n for (const [varName, importPath] of sortedImages) {\n importLines.push(`import ${varName} from '${importPath}';`);\n }\n }\n\n // Sort component imports alphabetically\n const componentImports = Array.from(ctx.imports).sort();\n for (const comp of componentImports) {\n const path = componentImportPath(fileDepth, comp);\n importLines.push(`import ${comp} from '${path}';`);\n }\n\n // Build getStaticPaths\n const staticPaths = buildGetStaticPaths(cmsSchema, isMultiLocale, i18nConfig, locale);\n\n // Build script paths array\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n\n // Build library tags literal\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n // Escape meta first, then transform CMS templates ({{cms.X}} survives escaping intact)\n const escapedMeta = escapeTemplateLiteral(meta).replace(\n /\\{\\{cms\\.([^}]+)\\}\\}/g,\n (_, fieldPath) => `\\${${wrapFn}(${binding}.data.${fieldPath.trim()})}`\n );\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n\n // Transform title for CMS entry data\n const titleExpr = transformTitleExpression(title, binding, richTextFields, wrapFn);\n\n // i18n resolver helper \u2014 resolves {_i18n: true, en: \"...\", pl: \"...\"} to the correct locale string\n const resolverHelper = `function r(v) {\n if (v && typeof v === 'object' && v._i18n) return v['${locale}'] ?? v['${i18nConfig.defaultLocale}'] ?? Object.values(v).find(x => x !== true && x !== undefined) ?? '';\n return v ?? '';\n}`;\n\n return `---\n${importLines.join('\\n')}\n\n${staticPaths}\n\n${resolverHelper}\n---\n<BaseLayout\n title=${titleExpr}\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n <div id=\"root\">\n${templateBody} </div>\n</BaseLayout>\n`;\n}\n\n/**\n * Build an empty CMS page with just the layout wrapper and getStaticPaths\n */\nfunction buildEmptyCMSPage(\n layoutImport: string,\n title: string,\n meta: string,\n locale: string,\n theme: string,\n fontPreloads: string,\n libraryTags: { headCSS?: string; headJS?: string; bodyEndJS?: string },\n scriptPaths: string[],\n cmsSchema: CMSSchema,\n isMultiLocale: boolean,\n i18nConfig: I18nConfig,\n binding: string,\n richTextFields: Set<string>\n): string {\n const escapedMeta = escapeTemplateLiteral(meta);\n const escapedFontPreloads = escapeTemplateLiteral(fontPreloads);\n const scriptsArrayLiteral = scriptPaths.length > 0\n ? `[${scriptPaths.map((s) => `\"${s}\"`).join(', ')}]`\n : '[]';\n const libraryTagsLiteral = `{ headCSS: \\`${escapeTemplateLiteral(libraryTags.headCSS || '')}\\`, headJS: \\`${escapeTemplateLiteral(libraryTags.headJS || '')}\\`, bodyEndJS: \\`${escapeTemplateLiteral(libraryTags.bodyEndJS || '')}\\` }`;\n\n const wrapFn = 'r';\n const staticPaths = buildGetStaticPaths(cmsSchema, isMultiLocale, i18nConfig, locale);\n const titleExpr = transformTitleExpression(title, binding, richTextFields, wrapFn);\n\n const resolverHelper = `function r(v) {\n if (v && typeof v === 'object' && v._i18n) return v['${locale}'] ?? v['${i18nConfig.defaultLocale}'] ?? Object.values(v).find(x => x !== true && x !== undefined) ?? '';\n return v ?? '';\n}`;\n\n return `---\nimport { getCollection } from 'astro:content';\nimport BaseLayout from '${layoutImport}';\n\n${staticPaths}\n\n${resolverHelper}\n---\n<BaseLayout\n title=${titleExpr}\n meta={\\`${escapedMeta}\\`}\n scripts={${scriptsArrayLiteral}}\n locale=\"${locale}\"\n theme=\"${theme}\"\n fontPreloads={\\`${escapedFontPreloads}\\`}\n libraryTags={${libraryTagsLiteral}}\n>\n</BaseLayout>\n`;\n}\n", "/**\n * Mapping Variant CSS Collector (Tailwind)\n * Walks all component definitions to find StyleMapping objects,\n * generates Tailwind classes for every possible value, ensuring\n * the Tailwind safelist covers all prop variants.\n */\n\nimport type { ComponentDefinition, ComponentNode } from '../../shared/types';\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { propertyToTailwind } from './tailwindMapper';\nimport type { ResponsiveScales, CSSPropertyType } from '../../shared/responsiveScaling';\nimport { getScaleMultiplier, scalePropertyValue } from '../../shared/responsiveScaling';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n/**\n * Walk a style object and collect Tailwind classes for every possible mapping value\n */\nfunction collectFromStyle(\n style: StyleObject | ResponsiveStyleObject | undefined,\n classes: Set<string>,\n breakpoints: BreakpointConfig,\n responsiveScales?: ResponsiveScales\n): void {\n if (!style) return;\n\n if (isResponsiveStyle(style)) {\n for (const [bp, bpStyle] of Object.entries(style)) {\n if (!bpStyle) continue;\n let prefix = '';\n let bpName: string | undefined;\n if (bp !== 'base') {\n const bpValue = breakpoints[bp]?.breakpoint;\n if (bpValue) {\n prefix = `max-[${bpValue}px]:`;\n bpName = bp;\n }\n }\n collectFromFlatStyle(bpStyle, prefix, classes, breakpoints, responsiveScales, bpName);\n }\n } else {\n collectFromFlatStyle(style, '', classes, breakpoints, responsiveScales);\n }\n}\n\nfunction collectFromFlatStyle(\n style: StyleObject,\n prefix: string,\n classes: Set<string>,\n breakpoints: BreakpointConfig,\n responsiveScales?: ResponsiveScales,\n sourceBreakpoint?: string\n): void {\n // Only auto-scale when mapping value lives in the base branch (or a flat\n // top-level style). Mappings inside an explicit breakpoint branch already\n // describe the override the author wants \u2014 don't re-scale them.\n const shouldAutoScale =\n responsiveScales?.enabled === true && sourceBreakpoint === undefined;\n\n const scaleBreakpoints = shouldAutoScale\n ? Object.entries(breakpoints)\n .map(([name, cfg]) => ({ name, value: cfg?.breakpoint }))\n .filter((bp): bp is { name: string; value: number } =>\n typeof bp.value === 'number' && bp.value > 0\n )\n .sort((a, b) => b.value - a.value)\n : [];\n\n const baseRef = responsiveScales?.baseReference ?? 16;\n\n for (const [property, value] of Object.entries(style)) {\n if (!isStyleMapping(value)) continue;\n\n // Generate a Tailwind class for each possible value in the mapping\n for (const [, cssValue] of Object.entries(value.values)) {\n const twClass = propertyToTailwind(property, cssValue);\n if (twClass) {\n classes.add(prefix ? `${prefix}${twClass}` : twClass);\n }\n\n // Safelist auto-scaled `max-[Npx]:` variants so Tailwind generates\n // CSS for each breakpoint-scaled class the runtime might produce.\n if (shouldAutoScale && responsiveScales) {\n const strValue = String(cssValue);\n if (strValue === '') continue;\n for (const { name: bpName, value: bpPixels } of scaleBreakpoints) {\n const scale = getScaleMultiplier(\n responsiveScales,\n property as CSSPropertyType,\n bpName\n );\n if (scale == null) continue;\n const scaledValue = scalePropertyValue(strValue, baseRef, scale);\n if (scaledValue == null || scaledValue === strValue) continue;\n const scaledClass = propertyToTailwind(property, scaledValue);\n if (!scaledClass) continue;\n classes.add(`max-[${bpPixels}px]:${scaledClass}`);\n }\n }\n }\n }\n}\n\n/**\n * Recursively walk a component node tree to collect mapping classes\n */\nfunction walkNode(\n node: ComponentNode | ComponentNode[] | string | number | null | undefined,\n classes: Set<string>,\n breakpoints: BreakpointConfig,\n responsiveScales?: ResponsiveScales\n): void {\n if (!node || typeof node === 'string' || typeof node === 'number') return;\n\n if (Array.isArray(node)) {\n for (const child of node) {\n walkNode(child, classes, breakpoints, responsiveScales);\n }\n return;\n }\n\n // Collect from style\n if ('style' in node && node.style) {\n collectFromStyle(node.style as StyleObject | ResponsiveStyleObject, classes, breakpoints, responsiveScales);\n }\n\n // Collect from interactive styles\n if ('interactiveStyles' in node && Array.isArray((node as any).interactiveStyles)) {\n for (const rule of (node as any).interactiveStyles) {\n if (rule.style) {\n collectFromStyle(rule.style, classes, breakpoints, responsiveScales);\n }\n }\n }\n\n // Recurse into children\n if ('children' in node && node.children) {\n if (Array.isArray(node.children)) {\n for (const child of node.children) {\n walkNode(child as ComponentNode, classes, breakpoints, responsiveScales);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Walk all component definitions, find all StyleMapping objects,\n * and generate Tailwind classes for every value.\n *\n * @returns Set of Tailwind class names for the safelist\n */\nexport function collectAllMappingClasses(\n componentDefs: Record<string, ComponentDefinition>,\n breakpoints: BreakpointConfig = DEFAULT_BREAKPOINTS,\n responsiveScales?: ResponsiveScales\n): Set<string> {\n const classes = new Set<string>();\n\n for (const def of Object.values(componentDefs)) {\n const structure = def.component?.structure;\n if (structure) {\n walkNode(structure, classes, breakpoints, responsiveScales);\n }\n }\n\n return classes;\n}\n", "/**\n * Webflow Export Build Orchestrator\n * Loads the project, renders all pages, and converts to Webflow payload.\n * Mirrors the pattern of build-astro.ts.\n */\n\nimport { existsSync, readdirSync } from 'fs';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport {\n loadJSONFile,\n loadComponentDirectory,\n mapPageNameToPath,\n parseJSON,\n loadI18nConfig,\n loadBreakpointConfig,\n loadResponsiveScalesConfig,\n} from '../jsonLoader';\nimport { renderPageSSR } from '../ssr/ssrRenderer';\nimport { projectPaths } from '../projectContext';\nimport { loadProjectConfig } from '../../shared/fontLoader';\nimport { FileSystemCMSProvider } from '../providers/fileSystemCMSProvider';\nimport { CMSService } from '../services/cmsService';\nimport { isI18nValue, resolveI18nValue } from '../../shared/i18n';\nimport { configService } from '../services/configService';\nimport { colorService } from '../services/ColorService';\nimport { variableService } from '../services/VariableService';\nimport { migrateTemplatesDirectory } from '../migrateTemplates';\nimport type {\n ComponentDefinition,\n JSONPage,\n CMSSchema,\n CMSItem,\n I18nConfig,\n} from '../../shared/types';\nimport { isItemDraftForLocale } from '../../shared/types';\nimport type { SlugMap } from '../../shared/slugTranslator';\nimport type {\n WebflowExportPayload,\n WebflowPage,\n WebflowStyleClass,\n WebflowCMSCollection,\n WebflowCMSField,\n WebflowAssetRef,\n} from './types';\nimport { mapCMSFieldType } from './types';\nimport { nodeToWebflow, type WebflowEmitContext } from './nodeToWebflow';\nimport { generateThemeColorVariablesCSS, generateVariablesCSS } from '../cssGenerator';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction scanJSONFiles(dir: string, prefix: string = ''): string[] {\n const results: string[] = [];\n if (!existsSync(dir)) return results;\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.json')) {\n results.push(prefix ? `${prefix}/${entry.name}` : entry.name);\n } else if (entry.isDirectory()) {\n results.push(...scanJSONFiles(join(dir, entry.name), prefix ? `${prefix}/${entry.name}` : entry.name));\n }\n }\n return results;\n}\n\nfunction isCMSPage(pageData: JSONPage): boolean {\n return pageData.meta?.source === 'cms' && !!pageData.meta?.cms;\n}\n\nfunction buildCMSItemPath(\n urlPattern: string,\n item: CMSItem,\n slugField: string,\n locale: string,\n i18nConfig: I18nConfig\n): string {\n let slug = item[slugField] ?? item._slug ?? item._id;\n if (isI18nValue(slug)) {\n slug = resolveI18nValue(slug, locale, i18nConfig) as string;\n }\n return urlPattern.replace('{{slug}}', String(slug));\n}\n\nfunction scanAssets(projectRoot: string): WebflowAssetRef[] {\n const assets: WebflowAssetRef[] = [];\n const assetDirs: Array<{ dir: string; type: WebflowAssetRef['type'] }> = [\n { dir: 'images', type: 'image' },\n { dir: 'fonts', type: 'font' },\n { dir: 'videos', type: 'video' },\n { dir: 'assets', type: 'file' },\n ];\n\n for (const { dir, type } of assetDirs) {\n const fullDir = join(projectRoot, dir);\n if (!existsSync(fullDir)) continue;\n const files = scanJSONFiles(fullDir).map(f => f.replace('.json', '')); // scanJSONFiles works for any extension\n // Re-scan properly for all file types\n const allFiles = scanAllFiles(fullDir);\n for (const file of allFiles) {\n assets.push({\n localPath: `${dir}/${file}`,\n type,\n fileName: file.split('/').pop()!,\n });\n }\n }\n\n return assets;\n}\n\nfunction scanAllFiles(dir: string, prefix: string = ''): string[] {\n const results: string[] = [];\n if (!existsSync(dir)) return results;\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isFile()) {\n results.push(relativePath);\n } else if (entry.isDirectory()) {\n results.push(...scanAllFiles(join(dir, entry.name), relativePath));\n }\n }\n return results;\n}\n\n/**\n * Extract CSS variables from theme and variables config\n */\nfunction extractCSSVariables(\n themeColorCSS: string,\n variablesCSS: string\n): Record<string, string> {\n const vars: Record<string, string> = {};\n const regex = /--([\\w-]+)\\s*:\\s*([^;]+)/g;\n\n for (const css of [themeColorCSS, variablesCSS]) {\n let match;\n while ((match = regex.exec(css)) !== null) {\n vars[`--${match[1]}`] = match[2].trim();\n }\n }\n\n return vars;\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nexport async function buildWebflowPayload(\n projectRoot?: string\n): Promise<WebflowExportPayload> {\n // 1. Setup: load project configuration\n configService.reset();\n\n const projectConfig = await loadProjectConfig();\n const siteUrl = (projectConfig as { siteUrl?: string }).siteUrl?.replace(/\\/$/, '') || '';\n const i18nConfig = await loadI18nConfig();\n\n await migrateTemplatesDirectory();\n\n const { components } = await loadComponentDirectory(projectPaths.components());\n const globalComponents: Record<string, ComponentDefinition> = {};\n components.forEach((value, key) => { globalComponents[key] = value; });\n\n const cmsProvider = new FileSystemCMSProvider(projectPaths.templates(), projectPaths.cms());\n const cmsService = new CMSService(cmsProvider);\n await cmsService.initialize();\n\n const themeConfig = await colorService.loadThemeConfig();\n const variablesConfig = await variableService.loadConfig();\n const breakpoints = await loadBreakpointConfig();\n const responsiveScales = await loadResponsiveScalesConfig();\n\n await configService.load();\n\n // 2. Scan pages\n const pagesDir = projectPaths.pages();\n if (!existsSync(pagesDir)) {\n return emptyPayload();\n }\n\n const pageFiles = scanJSONFiles(pagesDir);\n if (pageFiles.length === 0) {\n return emptyPayload();\n }\n\n // Collect slug mappings\n const slugMappings: SlugMap[] = [];\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n if (!pageContent) continue;\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n if (pageData.meta?.slugs) {\n const pageId = basePath === '/' ? 'index' : basePath.substring(1);\n slugMappings.push({ pageId, slugs: pageData.meta.slugs });\n }\n } catch { /* ignore */ }\n }\n\n // 3. Render and convert pages\n const allPages: WebflowPage[] = [];\n const allStyleClasses = new Map<string, WebflowStyleClass>();\n\n // Regular pages\n for (const file of pageFiles) {\n const pageName = file.replace('.json', '');\n const basePath = mapPageNameToPath(pageName);\n const pageContent = await loadJSONFile(join(pagesDir, file));\n if (!pageContent) continue;\n\n try {\n const pageData = parseJSON<JSONPage>(pageContent);\n if (pageData.meta?.draft === true) continue;\n\n const slugs = pageData.meta?.slugs;\n\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n const isDefault = locale === i18nConfig.defaultLocale;\n\n let slug: string;\n if (slugs && slugs[locale]) {\n slug = slugs[locale];\n } else if (basePath === '/') {\n slug = '';\n } else {\n slug = basePath.substring(1);\n }\n\n const urlPath = isDefault\n ? (slug === '' ? '/' : `/${slug}`)\n : (slug === '' ? `/${locale}` : `/${locale}/${slug}`);\n\n // Render via SSR to resolve all props\n const result = await renderPageSSR(\n pageData,\n globalComponents,\n urlPath,\n siteUrl,\n locale,\n i18nConfig,\n slugMappings,\n undefined,\n cmsService,\n true\n );\n\n // Convert node tree to Webflow elements\n const ctx: WebflowEmitContext = {\n globalComponents,\n elementPath: [0],\n fileType: 'page',\n fileName: pageName,\n breakpoints,\n styleClasses: allStyleClasses,\n };\n\n const body = pageData.root || (pageData as any).node;\n const elements = body ? nodeToWebflow(body, ctx) : [];\n\n allPages.push({\n title: result.title,\n slug: slug || 'index',\n metaDescription: typeof pageData.meta?.description === 'string' ? pageData.meta.description : undefined,\n elements,\n locale,\n });\n }\n } catch (error: any) {\n console.error(`Error processing ${basePath}:`, error?.message);\n }\n }\n\n // CMS template pages\n const templatesDir = projectPaths.templates();\n const cmsCollections: WebflowCMSCollection[] = [];\n\n if (existsSync(templatesDir)) {\n const templateFiles = readdirSync(templatesDir).filter(f => f.endsWith('.json'));\n\n for (const file of templateFiles) {\n const templateContent = await loadJSONFile(join(templatesDir, file));\n if (!templateContent) continue;\n\n try {\n const pageData = parseJSON<JSONPage>(templateContent);\n if (pageData.meta?.draft === true) continue;\n if (!isCMSPage(pageData)) continue;\n\n const cmsSchema = pageData.meta!.cms as CMSSchema;\n const items = await cmsService.queryItems({ collection: cmsSchema.id });\n\n // Build Webflow CMS collection\n const fields: WebflowCMSField[] = [];\n if (cmsSchema.fields) {\n for (const [fieldName, fieldDef] of Object.entries(cmsSchema.fields)) {\n fields.push({\n name: fieldDef.label || fieldName,\n slug: fieldName,\n type: mapCMSFieldType(fieldDef.type),\n required: fieldDef.required,\n options: fieldDef.options,\n });\n }\n }\n\n // Resolve i18n values in items for default locale\n const resolvedItems: Record<string, unknown>[] = [];\n for (const item of items) {\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(item)) {\n if (isI18nValue(value)) {\n resolved[key] = resolveI18nValue(value, i18nConfig.defaultLocale, i18nConfig);\n } else {\n resolved[key] = value;\n }\n }\n resolvedItems.push(resolved);\n }\n\n cmsCollections.push({\n name: cmsSchema.id,\n slug: cmsSchema.id,\n urlPattern: cmsSchema.urlPattern,\n fields,\n items: resolvedItems,\n });\n\n // Render CMS item pages\n for (const item of items) {\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n if (isItemDraftForLocale(item, locale)) continue;\n\n const itemPath = buildCMSItemPath(cmsSchema.urlPattern, item, cmsSchema.slugField, locale, i18nConfig);\n const itemWithUrl: CMSItem = { ...item, _url: itemPath };\n\n const result = await renderPageSSR(\n pageData,\n globalComponents,\n itemPath,\n siteUrl,\n locale,\n i18nConfig,\n slugMappings,\n { cms: itemWithUrl },\n cmsService,\n true\n );\n\n const ctx: WebflowEmitContext = {\n globalComponents,\n elementPath: [0],\n fileType: 'page',\n fileName: file.replace('.json', ''),\n breakpoints,\n styleClasses: allStyleClasses,\n };\n\n const body = pageData.root || (pageData as any).node;\n // Pass CMS item data as props so {{cms.field}} templates resolve\n const cmsProps = { cms: itemWithUrl };\n const elements = body ? nodeToWebflow(body, ctx, cmsProps) : [];\n\n const slug = itemPath.startsWith('/') ? itemPath.substring(1) : itemPath;\n allPages.push({\n title: result.title,\n slug,\n elements,\n locale,\n });\n }\n }\n } catch (error: any) {\n console.error(`Error processing template ${file}:`, error?.message);\n }\n }\n }\n\n // 4. Collect CSS variables\n const themeColorCSS = generateThemeColorVariablesCSS(themeConfig);\n const variablesCSS = generateVariablesCSS(variablesConfig, breakpoints, responsiveScales);\n const cssVariables = extractCSSVariables(themeColorCSS, variablesCSS);\n\n // 5. Scan assets\n const assets = scanAssets(projectPaths.project);\n\n return {\n version: 1,\n exportedAt: new Date().toISOString(),\n pages: allPages,\n styles: Array.from(allStyleClasses.values()),\n cms: cmsCollections,\n assets,\n cssVariables: Object.keys(cssVariables).length > 0 ? cssVariables : undefined,\n };\n}\n\nfunction emptyPayload(): WebflowExportPayload {\n return {\n version: 1,\n exportedAt: new Date().toISOString(),\n pages: [],\n styles: [],\n cms: [],\n assets: [],\n };\n}\n\n", "/**\n * Webflow Export Types\n * Defines the payload structure for Webflow Designer API consumption.\n */\n\nimport type { CMSFieldType } from '../../shared/types/cms';\n\n// ---------------------------------------------------------------------------\n// Style Classes\n// ---------------------------------------------------------------------------\n\n/** Webflow breakpoint identifiers */\nexport type WebflowBreakpoint = 'Desktop' | 'Tablet' | 'MobilePortrait';\n\n/** Webflow pseudo-state identifiers */\nexport type WebflowPseudoState = 'hover' | 'focus' | 'active' | 'visited' | 'focus-visible';\n\n/** CSS properties as a flat record */\nexport type CSSProperties = Record<string, string>;\n\n/** A named Webflow style class with responsive + pseudo-state overrides */\nexport interface WebflowStyleClass {\n /** Unique class name (e.g., \"c-navigation-hamburger\") */\n name: string;\n /** Base (Desktop) CSS properties */\n base: CSSProperties;\n /** Breakpoint overrides */\n breakpoints?: Partial<Record<WebflowBreakpoint, CSSProperties>>;\n /** Pseudo-state overrides */\n pseudoStates?: Partial<Record<WebflowPseudoState, CSSProperties>>;\n /** Combo class parent (if this is a variant class) */\n comboParent?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Elements\n// ---------------------------------------------------------------------------\n\n/** A Webflow element (DOM node) */\nexport interface WebflowElement {\n /** HTML tag (div, section, h1, a, img, etc.) */\n tag: string;\n /** Primary class name applied to this element */\n className?: string;\n /** Additional combo class names (for StyleMapping variants) */\n comboClasses?: string[];\n /** Inline text content (for text nodes) */\n textContent?: string;\n /** Child elements */\n children?: WebflowElement[];\n /** HTML attributes (src, alt, href, target, etc.) */\n attributes?: Record<string, string | number | boolean>;\n /** Raw HTML content (for embed nodes) */\n rawHtml?: string;\n /** Whether this element is conditionally rendered */\n conditional?: {\n prop: string;\n condition: 'truthy' | 'equals';\n value?: string;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Pages\n// ---------------------------------------------------------------------------\n\n/** A Webflow page */\nexport interface WebflowPage {\n /** Page title */\n title: string;\n /** URL slug (e.g., \"about\", \"blog/post-1\") */\n slug: string;\n /** Meta description */\n metaDescription?: string;\n /** Open Graph title */\n ogTitle?: string;\n /** Open Graph description */\n ogDescription?: string;\n /** Open Graph image URL */\n ogImage?: string;\n /** Root elements of the page body */\n elements: WebflowElement[];\n /** Locale code */\n locale?: string;\n}\n\n// ---------------------------------------------------------------------------\n// CMS\n// ---------------------------------------------------------------------------\n\n/** Webflow CMS field type mapping */\nexport type WebflowFieldType =\n | 'PlainText'\n | 'RichText'\n | 'Number'\n | 'Switch'\n | 'Image'\n | 'Date'\n | 'Option'\n | 'File'\n | 'Reference';\n\n/** A field in a Webflow CMS collection */\nexport interface WebflowCMSField {\n /** Field display name */\n name: string;\n /** Field slug (machine name) */\n slug: string;\n /** Webflow field type */\n type: WebflowFieldType;\n /** Whether this field is required */\n required?: boolean;\n /** Options for Option type fields */\n options?: string[];\n}\n\n/** A Webflow CMS collection definition */\nexport interface WebflowCMSCollection {\n /** Collection display name */\n name: string;\n /** Collection slug */\n slug: string;\n /** URL pattern for detail pages */\n urlPattern?: string;\n /** Field definitions */\n fields: WebflowCMSField[];\n /** Collection items */\n items: Record<string, unknown>[];\n}\n\n// ---------------------------------------------------------------------------\n// Assets\n// ---------------------------------------------------------------------------\n\n/** Reference to an asset that needs uploading to Webflow */\nexport interface WebflowAssetRef {\n /** Local file path relative to project root */\n localPath: string;\n /** Asset type */\n type: 'image' | 'font' | 'video' | 'file';\n /** File name */\n fileName: string;\n}\n\n// ---------------------------------------------------------------------------\n// Export Payload\n// ---------------------------------------------------------------------------\n\n/** Complete Webflow export payload */\nexport interface WebflowExportPayload {\n /** Export format version */\n version: 1;\n /** Timestamp of export */\n exportedAt: string;\n /** All pages with their element trees */\n pages: WebflowPage[];\n /** All style class definitions */\n styles: WebflowStyleClass[];\n /** CMS collection definitions (if any) */\n cms: WebflowCMSCollection[];\n /** Asset references (images, fonts, etc.) */\n assets: WebflowAssetRef[];\n /** CSS variables used in styles (for global embed) */\n cssVariables?: Record<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Map Meno CMS field type \u2192 Webflow field type */\nexport function mapCMSFieldType(menoType: CMSFieldType): WebflowFieldType {\n switch (menoType) {\n case 'string':\n return 'PlainText';\n case 'text':\n case 'rich-text':\n return 'RichText';\n case 'number':\n return 'Number';\n case 'boolean':\n return 'Switch';\n case 'image':\n return 'Image';\n case 'date':\n return 'Date';\n case 'select':\n return 'Option';\n case 'file':\n return 'File';\n case 'reference':\n return 'Reference';\n default:\n return 'PlainText';\n }\n}\n", "/**\n * Node-to-Webflow Converter\n * Recursively converts Meno's ComponentNode tree into Webflow element tree.\n * Follows the same traversal pattern as nodeToAstro.ts.\n */\n\nimport type {\n ComponentNode,\n ComponentDefinition,\n StructuredComponentDefinition,\n HtmlNode,\n ComponentInstanceNode,\n SlotMarker,\n EmbedNode,\n LinkNode,\n} from '../../shared/types';\nimport type { ListNode } from '../../shared/registry/nodeTypes/ListNodeType';\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n InteractiveStyles,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { generateElementClassName } from '../../shared/elementClassName';\nimport { isVoidElement } from '../../shared/nodeUtils';\nimport { NODE_TYPE } from '../../shared/constants';\nimport type { WebflowElement, WebflowStyleClass } from './types';\nimport { mapStylesToWebflow } from './styleMapper';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nexport interface WebflowEmitContext {\n /** All global components */\n globalComponents: Record<string, ComponentDefinition>;\n /** Current element path for class name generation */\n elementPath: number[];\n /** File type for element class context */\n fileType: 'component' | 'page';\n /** File name for element class context */\n fileName: string;\n /** Breakpoint config */\n breakpoints: BreakpointConfig;\n /** Collected style classes (side output) */\n styleClasses: Map<string, WebflowStyleClass>;\n /** Children passed from a component instance to fill slot markers */\n slotChildren?: (ComponentNode | string)[] | ComponentNode | string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildElementClass(ctx: WebflowEmitContext, label: string | undefined): string {\n return generateElementClassName({\n fileType: ctx.fileType,\n fileName: ctx.fileName,\n label,\n path: ctx.elementPath,\n });\n}\n\nfunction resolveTemplate(text: string, props?: Record<string, unknown>): string {\n if (!props) return text;\n return text.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => {\n const trimmed = expr.trim();\n\n // Support \"expr || 'fallback'\" pattern\n const orMatch = trimmed.match(/^(.+?)\\s*\\|\\|\\s*['\"](.+?)['\"]$/);\n if (orMatch) {\n const value = resolveNestedProp(props, orMatch[1].trim());\n return (value !== undefined && value !== '' && value !== null)\n ? String(value)\n : orMatch[2];\n }\n\n // Support \"expr ? 'a' : 'b'\" ternary pattern\n const ternaryMatch = trimmed.match(/^(.+?)\\s*\\?\\s*['\"](.+?)['\"]\\s*:\\s*['\"](.+?)['\"]$/);\n if (ternaryMatch) {\n const value = resolveNestedProp(props, ternaryMatch[1].trim());\n return value ? ternaryMatch[2] : ternaryMatch[3];\n }\n\n // Simple prop lookup with dot-notation\n const value = resolveNestedProp(props, trimmed);\n return value !== undefined ? String(value) : '';\n });\n}\n\nfunction resolveNestedProp(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction hasTemplates(text: string): boolean {\n return /\\{\\{.+?\\}\\}/.test(text);\n}\n\n// ---------------------------------------------------------------------------\n// Main recursive converter\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a ComponentNode tree to Webflow element tree.\n * Also collects WebflowStyleClass definitions as a side effect in ctx.styleClasses.\n */\nexport function nodeToWebflow(\n node: ComponentNode | ComponentNode[] | string | number | null | undefined,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement[] {\n if (node === null || node === undefined) return [];\n\n // Text/number\n if (typeof node === 'string') {\n const text = instanceProps ? resolveTemplate(node, instanceProps) : node;\n return [{ tag: 'span', textContent: text }];\n }\n if (typeof node === 'number') {\n return [{ tag: 'span', textContent: String(node) }];\n }\n\n // Array of nodes\n if (Array.isArray(node)) {\n const results: WebflowElement[] = [];\n for (let i = 0; i < node.length; i++) {\n const child = node[i];\n const savedPath = [...ctx.elementPath];\n ctx.elementPath = [...ctx.elementPath, i];\n results.push(...nodeToWebflow(child, ctx, instanceProps));\n ctx.elementPath = savedPath;\n }\n return results;\n }\n\n // Dispatch by node type\n switch (node.type) {\n case NODE_TYPE.NODE:\n return [emitHtmlNode(node as HtmlNode, ctx, instanceProps)];\n case NODE_TYPE.COMPONENT:\n return emitComponentInstance(node as ComponentInstanceNode, ctx, instanceProps);\n case NODE_TYPE.SLOT:\n return emitSlotMarker(node as SlotMarker, ctx, instanceProps);\n case NODE_TYPE.EMBED:\n return [emitEmbedNode(node as EmbedNode, ctx, instanceProps)];\n case NODE_TYPE.LINK:\n return [emitLinkNode(node as LinkNode, ctx, instanceProps)];\n case NODE_TYPE.LIST:\n case 'cms-list' as any:\n case NODE_TYPE.LOCALE_LIST:\n // Complex nodes \u2014 emit a placeholder div\n return [{ tag: 'div', attributes: { 'data-meno-type': node.type } }];\n default:\n return [];\n }\n}\n\n// ---------------------------------------------------------------------------\n// Node type emitters\n// ---------------------------------------------------------------------------\n\nfunction emitHtmlNode(\n node: HtmlNode,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement {\n const tag = hasTemplates(node.tag) && instanceProps\n ? resolveTemplate(node.tag, instanceProps)\n : node.tag;\n\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n const interactiveStyles = node.interactiveStyles as InteractiveStyles | undefined;\n\n // Generate element class and map styles\n const needsClass = style || (interactiveStyles && interactiveStyles.length > 0) || node.generateElementClass;\n let className: string | undefined;\n let comboClassNames: string[] | undefined;\n\n if (needsClass) {\n const elementClass = buildElementClass(ctx, node.label);\n const { primaryClass, comboClasses } = mapStylesToWebflow(\n elementClass, style, interactiveStyles, ctx.breakpoints\n );\n\n className = primaryClass.name;\n ctx.styleClasses.set(primaryClass.name, primaryClass);\n\n if (comboClasses.length > 0) {\n comboClassNames = [];\n for (const combo of comboClasses) {\n ctx.styleClasses.set(combo.name, combo);\n comboClassNames.push(combo.name);\n }\n }\n }\n\n // Build attributes\n const attributes: Record<string, string | number | boolean> = {};\n if (node.attributes) {\n for (const [key, value] of Object.entries(node.attributes)) {\n if (instanceProps && typeof value === 'string' && hasTemplates(value)) {\n attributes[key] = resolveTemplate(value, instanceProps);\n } else {\n attributes[key] = value;\n }\n }\n }\n\n // Build children\n let children: WebflowElement[] | undefined;\n let textContent: string | undefined;\n if (!isVoidElement(tag) && node.children) {\n // Optimize: single string child becomes textContent instead of child element\n if (typeof node.children === 'string') {\n textContent = instanceProps ? resolveTemplate(node.children, instanceProps) : node.children;\n } else if (\n Array.isArray(node.children) &&\n node.children.length === 1 &&\n typeof node.children[0] === 'string'\n ) {\n const text = node.children[0] as string;\n textContent = instanceProps ? resolveTemplate(text, instanceProps) : text;\n } else {\n const innerCtx = { ...ctx, elementPath: [...ctx.elementPath] };\n children = convertChildren(node.children, innerCtx, instanceProps);\n if (children.length === 0) children = undefined;\n }\n }\n\n // Handle conditional rendering\n let conditional: WebflowElement['conditional'];\n const ifValue = (node as any).if;\n if (ifValue !== undefined && ifValue !== true) {\n if (typeof ifValue === 'object' && ifValue._mapping) {\n conditional = { prop: ifValue.prop, condition: 'truthy' };\n } else if (typeof ifValue === 'string') {\n const match = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n conditional = { prop: match ? match[1].trim() : ifValue, condition: 'truthy' };\n }\n }\n\n const element: WebflowElement = { tag };\n if (className) element.className = className;\n if (comboClassNames) element.comboClasses = comboClassNames;\n if (textContent) element.textContent = textContent;\n if (children) element.children = children;\n if (Object.keys(attributes).length > 0) element.attributes = attributes;\n if (conditional) element.conditional = conditional;\n\n return element;\n}\n\nfunction emitComponentInstance(\n node: ComponentInstanceNode,\n ctx: WebflowEmitContext,\n parentProps?: Record<string, unknown>\n): WebflowElement[] {\n const compDef = ctx.globalComponents[node.component];\n if (!compDef) {\n // Unknown component \u2014 emit placeholder\n return [{ tag: 'div', attributes: { 'data-component': node.component } }];\n }\n\n // Resolve props: merge defaults with instance props\n const resolvedProps: Record<string, unknown> = {};\n const structured = compDef.component;\n\n if (structured?.interface) {\n for (const [key, propDef] of Object.entries(structured.interface)) {\n resolvedProps[key] = propDef.default;\n }\n }\n\n if (node.props) {\n for (const [key, value] of Object.entries(node.props)) {\n if (key === 'children') continue;\n if (typeof value === 'string' && hasTemplates(value) && parentProps) {\n resolvedProps[key] = resolveTemplate(value, parentProps);\n } else {\n resolvedProps[key] = value;\n }\n }\n }\n\n // Inline-expand the component's node tree\n const body = structured?.structure || (compDef as any).node;\n if (!body) return [];\n\n const compCtx: WebflowEmitContext = {\n ...ctx,\n fileType: 'component',\n fileName: node.component,\n elementPath: [0],\n slotChildren: node.children,\n };\n\n return nodeToWebflow(body, compCtx, resolvedProps);\n}\n\nfunction emitSlotMarker(\n node: SlotMarker,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement[] {\n // Use instance children passed via context to fill the slot\n if (ctx.slotChildren) {\n // Switch back to parent context (page-level) for slot children\n const parentCtx: WebflowEmitContext = {\n ...ctx,\n slotChildren: undefined, // prevent infinite slot nesting\n };\n return convertChildren(ctx.slotChildren as any, parentCtx, instanceProps);\n }\n // Fall back to slot defaults\n if (node.default) {\n return convertChildren(node.default as any, ctx, instanceProps);\n }\n return [];\n}\n\nfunction emitEmbedNode(\n node: EmbedNode,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n const interactiveStyles = node.interactiveStyles as InteractiveStyles | undefined;\n\n let className: string | undefined;\n if (style || (interactiveStyles && interactiveStyles.length > 0)) {\n const elementClass = buildElementClass(ctx, node.label);\n const { primaryClass } = mapStylesToWebflow(\n elementClass, style, interactiveStyles, ctx.breakpoints\n );\n className = primaryClass.name;\n ctx.styleClasses.set(primaryClass.name, primaryClass);\n }\n\n const htmlStr = typeof node.html === 'string' ? node.html : '';\n\n const element: WebflowElement = {\n tag: 'div',\n rawHtml: htmlStr,\n };\n if (className) element.className = className;\n\n return element;\n}\n\nfunction emitLinkNode(\n node: LinkNode,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement {\n const style = node.style as StyleObject | ResponsiveStyleObject | undefined;\n const interactiveStyles = node.interactiveStyles as InteractiveStyles | undefined;\n\n let className: string | undefined;\n if (style || (interactiveStyles && interactiveStyles.length > 0)) {\n const elementClass = buildElementClass(ctx, node.label);\n const { primaryClass } = mapStylesToWebflow(\n elementClass, style, interactiveStyles, ctx.breakpoints\n );\n className = primaryClass.name;\n ctx.styleClasses.set(primaryClass.name, primaryClass);\n }\n\n // Resolve href\n let href = '#';\n if (typeof node.href === 'string') {\n href = instanceProps && hasTemplates(node.href)\n ? resolveTemplate(node.href, instanceProps)\n : node.href;\n }\n\n const attributes: Record<string, string | number | boolean> = { href };\n if (node.attributes) {\n for (const [key, value] of Object.entries(node.attributes)) {\n attributes[key] = value;\n }\n }\n\n let children: WebflowElement[] | undefined;\n if (node.children) {\n children = convertChildren(node.children, ctx, instanceProps);\n if (children.length === 0) children = undefined;\n }\n\n const element: WebflowElement = { tag: 'a', attributes };\n if (className) element.className = className;\n if (children) element.children = children;\n\n return element;\n}\n\n// ---------------------------------------------------------------------------\n// Children helper\n// ---------------------------------------------------------------------------\n\nfunction convertChildren(\n children: (ComponentNode | string)[] | string | ComponentNode | null | undefined,\n ctx: WebflowEmitContext,\n instanceProps?: Record<string, unknown>\n): WebflowElement[] {\n if (!children) return [];\n\n if (typeof children === 'string') {\n return nodeToWebflow(children, ctx, instanceProps);\n }\n\n if (Array.isArray(children)) {\n return nodeToWebflow(children as ComponentNode[], ctx, instanceProps);\n }\n\n // Single node\n return nodeToWebflow(children, ctx, instanceProps);\n}\n", "/**\n * Webflow Style Mapper\n * Converts Meno styles (ResponsiveStyleObject + InteractiveStyles) into\n * Webflow named style classes with breakpoint and pseudo-state overrides.\n */\n\nimport type {\n StyleObject,\n ResponsiveStyleObject,\n StyleMapping,\n InteractiveStyles,\n} from '../../shared/types/styles';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport type { WebflowStyleClass, WebflowBreakpoint, WebflowPseudoState, CSSProperties } from './types';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** CSS properties that accept unitless numeric values */\nconst UNITLESS_PROPERTIES = new Set([\n 'opacity', 'z-index', 'flex-grow', 'flex-shrink', 'flex',\n 'order', 'orphans', 'widows', 'column-count', 'font-weight',\n 'tab-size',\n]);\n\nfunction isStyleMapping(value: unknown): value is StyleMapping {\n return (\n typeof value === 'object' &&\n value !== null &&\n '_mapping' in value &&\n (value as StyleMapping)._mapping === true\n );\n}\n\nfunction isResponsiveStyle(\n style: StyleObject | ResponsiveStyleObject\n): style is ResponsiveStyleObject {\n return 'base' in style || 'tablet' in style || 'mobile' in style;\n}\n\n/**\n * Convert a camelCase CSS property to kebab-case\n */\nfunction toKebabCase(prop: string): string {\n return prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n\n/**\n * Convert a flat StyleObject to CSS properties, skipping StyleMappings\n */\nfunction styleObjectToCSS(style: StyleObject): CSSProperties {\n const css: CSSProperties = {};\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) continue;\n if (value === '' || value === undefined || value === null) continue;\n if (typeof value === 'boolean' || typeof value === 'object') continue;\n const cssProp = toKebabCase(prop);\n if (typeof value === 'number') {\n if (isNaN(value)) continue;\n css[cssProp] = UNITLESS_PROPERTIES.has(cssProp) ? String(value) : `${value}px`;\n } else {\n css[cssProp] = String(value);\n }\n }\n return css;\n}\n\n/**\n * Extract all StyleMappings from a style object (flat or responsive)\n */\nfunction collectStyleMappings(\n style: StyleObject | ResponsiveStyleObject | undefined\n): Array<{ property: string; mapping: StyleMapping }> {\n if (!style) return [];\n const result: Array<{ property: string; mapping: StyleMapping }> = [];\n\n if (isResponsiveStyle(style)) {\n // Only collect from base \u2014 mappings apply across breakpoints\n const base = (style as ResponsiveStyleObject).base;\n if (base) {\n for (const [prop, value] of Object.entries(base)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value });\n }\n }\n }\n } else {\n for (const [prop, value] of Object.entries(style)) {\n if (isStyleMapping(value)) {\n result.push({ property: prop, mapping: value });\n }\n }\n }\n return result;\n}\n\n/**\n * Map interactive style postfix to Webflow pseudo-state\n */\nfunction postfixToPseudoState(postfix: string): WebflowPseudoState | null {\n if (postfix.includes(':hover')) return 'hover';\n if (postfix.includes(':focus-visible')) return 'focus-visible';\n if (postfix.includes(':focus')) return 'focus';\n if (postfix.includes(':active')) return 'active';\n if (postfix.includes(':visited')) return 'visited';\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Main Mapper\n// ---------------------------------------------------------------------------\n\nexport interface StyleMapperResult {\n /** The primary style class for this element */\n primaryClass: WebflowStyleClass;\n /** Combo classes for StyleMapping variants */\n comboClasses: WebflowStyleClass[];\n}\n\n/**\n * Convert Meno element styles to Webflow style classes.\n *\n * @param className - Element class name (e.g., \"c_navigation_hamburger\")\n * @param style - Element's responsive style object\n * @param interactiveStyles - Element's interactive (hover/focus/etc.) styles\n * @param breakpoints - Project breakpoint configuration\n */\nexport function mapStylesToWebflow(\n className: string,\n style: StyleObject | ResponsiveStyleObject | undefined,\n interactiveStyles: InteractiveStyles | undefined,\n breakpoints: BreakpointConfig\n): StyleMapperResult {\n // Convert underscores to dashes for Webflow class naming convention\n const webflowClassName = className.replace(/_/g, '-');\n\n const primaryClass: WebflowStyleClass = {\n name: webflowClassName,\n base: {},\n };\n\n // --- Base + breakpoint styles ---\n if (style) {\n if (isResponsiveStyle(style)) {\n const responsive = style as ResponsiveStyleObject;\n\n if (responsive.base) {\n primaryClass.base = styleObjectToCSS(responsive.base);\n }\n\n if (responsive.tablet) {\n if (!primaryClass.breakpoints) primaryClass.breakpoints = {};\n primaryClass.breakpoints.Tablet = styleObjectToCSS(responsive.tablet);\n }\n\n if (responsive.mobile) {\n if (!primaryClass.breakpoints) primaryClass.breakpoints = {};\n primaryClass.breakpoints.MobilePortrait = styleObjectToCSS(responsive.mobile);\n }\n\n // Handle additional custom breakpoints (map to closest Webflow breakpoint)\n for (const [bpName, bpStyle] of Object.entries(responsive)) {\n if (!bpStyle || bpName === 'base' || bpName === 'tablet' || bpName === 'mobile') continue;\n // Custom breakpoints map to Tablet as closest approximation\n if (!primaryClass.breakpoints) primaryClass.breakpoints = {};\n primaryClass.breakpoints.Tablet = {\n ...primaryClass.breakpoints.Tablet,\n ...styleObjectToCSS(bpStyle),\n };\n }\n } else {\n // Flat style object \u2014 treat as base/Desktop\n primaryClass.base = styleObjectToCSS(style as StyleObject);\n }\n }\n\n // --- Interactive styles (hover, focus, etc.) ---\n if (interactiveStyles && interactiveStyles.length > 0) {\n for (const rule of interactiveStyles) {\n if (!rule.postfix) continue;\n\n const pseudoState = postfixToPseudoState(rule.postfix);\n if (!pseudoState) continue;\n\n const ruleStyle = rule.style;\n if (!primaryClass.pseudoStates) primaryClass.pseudoStates = {};\n\n if (isResponsiveStyle(ruleStyle)) {\n const responsive = ruleStyle as ResponsiveStyleObject;\n // Merge base styles into the pseudo-state\n if (responsive.base) {\n primaryClass.pseudoStates[pseudoState] = {\n ...primaryClass.pseudoStates[pseudoState],\n ...styleObjectToCSS(responsive.base),\n };\n }\n } else {\n primaryClass.pseudoStates[pseudoState] = {\n ...primaryClass.pseudoStates[pseudoState],\n ...styleObjectToCSS(ruleStyle as StyleObject),\n };\n }\n }\n }\n\n // --- Combo classes for StyleMappings ---\n const comboClasses: WebflowStyleClass[] = [];\n const mappings = collectStyleMappings(style);\n\n for (const { property, mapping } of mappings) {\n for (const [value, cssValue] of Object.entries(mapping.values)) {\n if (cssValue === '' || cssValue === undefined) continue;\n\n const comboName = `is-${sanitizeClassName(mapping.prop)}-${sanitizeClassName(String(value))}`;\n const comboClass: WebflowStyleClass = {\n name: comboName,\n base: {\n [toKebabCase(property)]: typeof cssValue === 'number'\n ? (UNITLESS_PROPERTIES.has(toKebabCase(property)) ? String(cssValue) : `${cssValue}px`)\n : String(cssValue),\n },\n comboParent: webflowClassName,\n };\n comboClasses.push(comboClass);\n }\n }\n\n return { primaryClass, comboClasses };\n}\n\n/**\n * Sanitize a string for use as a CSS class name segment\n */\nfunction sanitizeClassName(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n", "/**\n * meno-core/server exports\n * Core server-side utilities for SSR and read APIs\n * Does NOT include editor-specific routes (that's in @meno/studio)\n */\n\n// Server factory\nexport { createServer, type ServerConfig } from './createServer';\n\n// SSR Rendering\nexport * from './ssrRenderer';\n\n// Build error overlay for static server\nexport { generateBuildErrorPage, type BuildError, type BuildErrorsData } from './ssr/buildErrorOverlay';\n\n// Services\nexport { PageService } from './services/pageService';\nexport { ComponentService, type ComponentInfo } from './services/componentService';\nexport { CMSService, type ReferenceLocation } from './services/cmsService';\nexport { configService, ConfigService } from './services/configService';\nexport { ColorService, colorService } from './services/ColorService';\nexport { VariableService, variableService } from './services/VariableService';\nexport { EnumService, enumService } from './services/EnumService';\n\n// Providers\nexport { FileSystemPageProvider } from './providers/fileSystemPageProvider';\nexport { FileSystemCMSProvider } from './providers/fileSystemCMSProvider';\n\n// CMS interfaces\nexport type { CMSProvider, CMSSchemaInfo } from '../shared/interfaces/contentProvider';\n\n// Core routes\nexport { handleCoreApiRoutes, type CoreRouteContext } from './routes/api/core-routes';\n\n// CMS read routes (GET handlers)\nexport { handleCollectionsRoute, handleCollectionSchemaRoute, handleItemsRoute, handleItemRoute } from './routes/api/cms';\n\n// Route utilities\nexport { jsonResponse, errorResponse } from './routes/api/shared';\n\n// Note: Write route handlers moved to @meno/studio:\n// - handleSavePageRoute\n// - handleSaveComponentRoute, handleSaveComponentJavaScriptRoute, handleSaveComponentCSSRoute\n// - handleSaveConfigRoute, handleSaveColorsRoute\n// - handleCreateCollectionRoute, handleCreateItemRoute, handleUpdateItemRoute, handleDeleteItemRoute\n\n// WebSocket\nexport { WebSocketManager } from './websocketManager';\n\n// Page cache\nexport { PageCache } from './pageCache';\n\n// Project context\nexport * from './projectContext';\n\n// File watcher\nexport { FileWatcherService } from './services/fileWatcherService';\n\n// Migration\nexport { migrateTemplatesDirectory } from './migrateTemplates';\n\n// Static build\nexport { buildStaticPages } from '../../build-static';\n\n// Astro export\nexport { buildAstroProject } from '../../build-astro';\n\n// Webflow export\nexport { buildWebflowPayload } from './webflow';\nexport type {\n WebflowExportPayload,\n WebflowPage,\n WebflowElement,\n WebflowStyleClass,\n} from './webflow';\n\n// Utilities\nexport * from './utils';\n\n// Middleware\nexport * from './middleware';\n\n// Font loader (legacy config loader for server entry points)\nexport { loadProjectConfig, resetFontConfig } from '../shared/fontLoader';\n\n// Constants\nexport { SERVE_PORT, SERVER_PORT, HMR_ROUTE, MAX_PORT_ATTEMPTS } from '../shared/constants';\n\n// CSS generators\nexport { generateVariablesCSS } from './cssGenerator';\n\n// Runtime abstraction\nexport * from './runtime';\n"],
5
+ "mappings": "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",
6
6
  "names": ["writeFile", "sanitized", "isStyleMapping", "isResponsiveStyle", "mappings", "DEFAULT_SIZES", "out", "escapeTemplateLiteral", "escapeJSX", "layoutImportPath", "escapeTemplateLiteral", "escapeJSX", "componentImportPath", "locale", "layoutImportPath", "isStyleMapping", "isResponsiveStyle", "hashContent", "escapeTemplateLiteral", "isCMSPage", "hashContent", "writeFile", "existsSync", "readdirSync", "join", "isStyleMapping", "isResponsiveStyle", "collectStyleMappings", "buildElementClass", "resolveTemplate", "value", "hasTemplates", "emitHtmlNode", "emitComponentInstance", "emitSlotMarker", "emitEmbedNode", "emitLinkNode", "scanJSONFiles", "existsSync", "readdirSync", "join", "isCMSPage"]
7
7
  }