meno-core 1.0.38 → 1.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-astro.ts +914 -0
- package/dist/build-static.js +2 -2
- package/dist/chunks/{chunk-UR7L5UZ3.js → chunk-HNAS6BSS.js} +2 -2
- package/dist/chunks/{chunk-EUCAKI5U.js → chunk-W6HDII4T.js} +8 -1
- package/dist/chunks/{chunk-EUCAKI5U.js.map → chunk-W6HDII4T.js.map} +2 -2
- package/dist/chunks/{chunk-JACS3C25.js → chunk-WK5XLASY.js} +2 -2
- package/dist/entries/server-router.js +2 -2
- package/dist/lib/client/index.js +5 -3
- package/dist/lib/client/index.js.map +2 -2
- package/dist/lib/server/index.js +1840 -5
- package/dist/lib/server/index.js.map +4 -4
- package/dist/lib/shared/index.js +5 -3
- package/dist/lib/shared/index.js.map +2 -2
- package/lib/client/theme.ts +4 -1
- package/lib/server/astro/componentEmitter.ts +208 -0
- package/lib/server/astro/cssCollector.ts +147 -0
- package/lib/server/astro/index.ts +5 -0
- package/lib/server/astro/nodeToAstro.ts +771 -0
- package/lib/server/astro/pageEmitter.ts +190 -0
- package/lib/server/astro/tailwindMapper.ts +547 -0
- package/lib/server/index.ts +3 -0
- package/lib/server/ssr/htmlGenerator.ts +3 -0
- package/lib/server/ssr/ssrRenderer.test.ts +8 -4
- package/lib/server/ssr/ssrRenderer.ts +1 -3
- package/lib/shared/themeDefaults.test.ts +1 -1
- package/lib/shared/themeDefaults.ts +4 -1
- package/package.json +1 -1
- /package/dist/chunks/{chunk-UR7L5UZ3.js.map → chunk-HNAS6BSS.js.map} +0 -0
- /package/dist/chunks/{chunk-JACS3C25.js.map → chunk-WK5XLASY.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../lib/server/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\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// 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// Runtime abstraction\nexport * from './runtime';\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EA;",
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../../../build-astro.ts", "../../../lib/server/astro/tailwindMapper.ts", "../../../lib/server/astro/nodeToAstro.ts", "../../../lib/server/astro/componentEmitter.ts", "../../../lib/server/astro/pageEmitter.ts", "../../../lib/server/astro/cssCollector.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 { collectAllMappingClasses } from \"./lib/server/astro/cssCollector\";\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 * 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 return 'z.string()';\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}\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, '"')}\"\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 // ----------------------------------------------------------\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> },\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 });\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 // ---------- 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 const items = await cmsService.queryItems({ collection: cmsSchema.id });\n if (items.length === 0) {\n console.log(` No items found in cms/${cmsSchema.id}/`);\n continue;\n }\n\n console.log(` Found ${items.length} item(s)`);\n\n for (const item of items) {\n for (const localeConfig of i18nConfig.locales) {\n const locale = localeConfig.code;\n const isDefault = locale === i18nConfig.defaultLocale;\n\n const isDevBuild = process.env.MENO_DEV_BUILD === 'true';\n if (!isDevBuild && isItemDraftForLocale(item, locale)) {\n continue;\n }\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 // Determine .astro file path: strip leading slash, add .astro\n const pathWithoutSlash = itemPath.startsWith('/') ? itemPath.substring(1) : itemPath;\n const astroFilePath = isDefault\n ? `${pathWithoutSlash}.astro`\n : `${locale}/${pathWithoutSlash}.astro`;\n const fileDepth = astroFilePath.split('/').length - 1;\n\n const urlPath = isDefault ? itemPath : `/${locale}${itemPath}`;\n\n processRenderResult(result, urlPath, astroFilePath, fileDepth, pageData, file.replace('.json', ''), true);\n console.log(` Rendered: ${urlPath}`);\n cmsPageCount++;\n }\n }\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 interactiveCSS = generateAllInteractiveCSS(allInteractiveStyles, breakpoints);\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 fontPreloads = generateFontPreloadTags();\n\n // Merge global + component libraries for the layout\n const mergedLibraries = mergeLibraries(globalLibraries, componentLibraries);\n const buildLibraries = filterLibrariesByContext(mergedLibraries, 'build');\n const libraryTags = generateLibraryTags(buildLibraries);\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);\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 const defaultTheme = themeConfig.default || 'light';\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 regular pages with page data\n // CMS template pages keep the SSR fallback approach\n if (result.pageData && !result.isCMSPage) {\n try {\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: new Map(), // SSR fallbacks for complex nodes\n pageName: result.pageName || 'index',\n breakpoints,\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 // CMS pages and 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 // Resolve i18n values to the default locale\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\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/sitemap': '^3.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 astroConfig = `import { defineConfig } from 'astro/config';\nimport sitemap from '@astrojs/sitemap';\nimport tailwind from '@astrojs/tailwind';\n\nexport default defineConfig({${siteUrl ? `\\n site: '${siteUrl}',` : ''}\n integrations: [sitemap(), 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};\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-[var(--text)]\"\n // Bare color name like \"text\" \u2192 \"text-[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}-[${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}-[var(--${strValue})]`;\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 // Font family names need quotes in arbitrary syntax for Tailwind to parse correctly\n if (property === 'fontFamily' && !sanitized.includes(',') && !sanitized.startsWith(\"'\")) {\n return `${twPrefix}-['${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 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 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} from '../../shared/types';\nimport type { ListNode } from '../../shared/registry/nodeTypes/ListNodeType';\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 } from '../../shared/nodeUtils';\nimport { NODE_TYPE } from '../../shared/constants';\nimport { extractInteractiveStyleMappings, hasInteractiveStyleMappings } from '../../shared/interactiveStyleMappings';\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}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction ind(ctx: AstroEmitContext): string {\n return ' '.repeat(ctx.indent);\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\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, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\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 entries.push(`${propRef} === ${JSON.stringify(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(`${propRef} === ${JSON.stringify(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 as any;\n if (val === 'false') return false as any;\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) => `\\${${expr.trim()}}`);\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) => `\\${${expr.trim()}}`);\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 return `{${fullMatch[1].trim()}}`;\n }\n // Mixed content: replace each {{expr}} with {expr}\n return text.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => `{${expr.trim()}}`);\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 parts.push(`${key}={${fullMatch[1].trim()}}`);\n } else {\n // Mixed content: use template literal\n const resolved = strVal.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => `\\${${expr.trim()}}`);\n parts.push(`${key}={\\`${resolved}\\`}`);\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 * 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 // Text/number\n if (typeof node === 'string') {\n if (hasTemplates(node) && ctx.isComponentDef) {\n return `${ind(ctx)}${resolveTemplate(node, ctx)}\\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\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, i];\n result += nodeToAstro(child, ctx);\n ctx.elementPath = savedPath;\n }\n return result;\n }\n\n // Dispatch by node type\n switch (node.type) {\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 emitFallback(ctx);\n case NODE_TYPE.LIST:\n case 'cms-list' as any:\n return emitFallback(ctx);\n default:\n return emitFallback(ctx);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Node type emitters\n// ---------------------------------------------------------------------------\n\nfunction emitHtmlNode(node: HtmlNode, ctx: AstroEmitContext): string {\n let tag = node.tag;\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, value] of Object.entries(node.props)) {\n if (key === 'children') continue;\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 propParts.push(`${key}={${fullMatch[1].trim()}}`);\n } else {\n const resolved = value.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => `\\${${expr.trim()}}`);\n propParts.push(`${key}={\\`${resolved}\\`}`);\n }\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 any, 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 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 // Handle href\n let hrefAttr: string;\n if (isLinkMapping(node.href)) {\n if (ctx.isComponentDef) {\n const propRef = node.href.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 node.href === 'string' ? node.href : '#';\n if (hasTemplates(href) && ctx.isComponentDef) {\n const fullMatch = href.match(/^\\{\\{(.+)\\}\\}$/);\n if (fullMatch) {\n hrefAttr = ` href={${fullMatch[1].trim()}}`;\n } else {\n const resolved = href.replace(/\\{\\{(.+?)\\}\\}/g, (_, expr) => `\\${${expr.trim()}}`);\n hrefAttr = ` href={\\`${resolved}\\`}`;\n }\n } else {\n hrefAttr = ` href=\"${escapeJSX(href)}\"`;\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 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 = (node as any).if;\n if (ifValue === undefined || ifValue === true) return '';\n\n if (typeof ifValue === 'boolean') {\n return ifValue ? '' : `${ind(ctx)}{/* hidden */}\\n`;\n }\n\n if (typeof ifValue === 'object' && ifValue._mapping && ctx.isComponentDef) {\n return `${ind(ctx)}{${ifValue.prop} && (\\n`;\n }\n\n if (typeof ifValue === 'string' && ctx.isComponentDef) {\n // Check if entire string is a single {{expression}}\n const fullMatch = ifValue.match(/^\\{\\{(.+)\\}\\}$/);\n const expr = fullMatch ? fullMatch[1].trim() : ifValue.replace(/\\{\\{(.+?)\\}\\}/g, '$1');\n return `${ind(ctx)}{${expr} && (\\n`;\n }\n\n return '';\n}\n\nfunction emitIfClose(node: ComponentNode, ctx: AstroEmitContext): string {\n const ifValue = (node as any).if;\n if (ifValue === undefined || ifValue === true) return '';\n\n if (typeof ifValue === 'boolean') return '';\n\n if (\n (typeof ifValue === 'object' && ifValue._mapping && ctx.isComponentDef) ||\n (typeof ifValue === 'string' && ctx.isComponentDef)\n ) {\n return `${ind(ctx)})}\\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 return nodeToAstro(children, innerCtx);\n }\n\n if (Array.isArray(children)) {\n return nodeToAstro(children as ComponentNode[], innerCtx);\n }\n\n // Single node\n return nodeToAstro(children, innerCtx);\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// 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): 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 };\n\n // Emit the template body\n const templateBody = nodeToAstro(structure, ctx);\n\n // Build frontmatter\n const frontmatter = buildFrontmatter(name, propDefs, ctx.imports, ctx.dynamicTags);\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<script>\\n${comp.javascript}\\n</script>\\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): 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 if (propEntries.length > 0) {\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 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 {\n destructParts.push(propName);\n }\n }\n\n if (destructParts.length > 0) {\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\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 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>\\n${comp.javascript}\\n</script>\\n`;\n return content;\n}\n", "/**\n * Page File Generator\n * Generates .astro page files that import and compose components\n */\n\nimport type { JSONPage, ComponentDefinition } from '../../shared/types';\nimport type { BreakpointConfig } from '../../shared/breakpoints';\nimport { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';\nimport { nodeToAstro, type AstroEmitContext } from './nodeToAstro';\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}\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, '&').replace(/\"/g, '"');\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 } = 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 };\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 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 return `---\n${importLines.join('\\n')}\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${templateBody}</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 * 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 * 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// 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// Runtime abstraction\nexport * from './runtime';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["writeFile", "sanitized", "isStyleMapping", "isResponsiveStyle", "mappings", "escapeTemplateLiteral", "escapeJSX", "layoutImportPath", "isStyleMapping", "isResponsiveStyle", "hashContent", "escapeTemplateLiteral", "isCMSPage", "isDevBuild", "writeFile"]
|
|
7
7
|
}
|
package/dist/lib/shared/index.js
CHANGED
|
@@ -755,7 +755,7 @@ var DEFAULT_PROPS_PANEL_COLORS = {
|
|
|
755
755
|
text: "#cccccc",
|
|
756
756
|
textSecondary: "#cccccc",
|
|
757
757
|
textMuted: "#888888",
|
|
758
|
-
codeString: "#
|
|
758
|
+
codeString: "#ffffff",
|
|
759
759
|
codeNumber: "#b5cea8",
|
|
760
760
|
codeKey: "#9cdcfe",
|
|
761
761
|
codeType: "#4ec9b0",
|
|
@@ -766,7 +766,8 @@ var DEFAULT_PROPS_PANEL_COLORS = {
|
|
|
766
766
|
buttonDangerHover: "#ff6b6b",
|
|
767
767
|
inputBackground: "#2a2a2a",
|
|
768
768
|
inputBorder: "#444444",
|
|
769
|
-
hoverBackground: "#2a2d2e"
|
|
769
|
+
hoverBackground: "#2a2d2e",
|
|
770
|
+
variableBackground: "#2a2a2a"
|
|
770
771
|
};
|
|
771
772
|
var LIGHT_PROPS_PANEL_COLORS = {
|
|
772
773
|
background: "#ffffff",
|
|
@@ -788,7 +789,8 @@ var LIGHT_PROPS_PANEL_COLORS = {
|
|
|
788
789
|
buttonDangerHover: "#a4262c",
|
|
789
790
|
inputBackground: "#f5f7fa",
|
|
790
791
|
inputBorder: "#d0d0d0",
|
|
791
|
-
hoverBackground: "#f0f0f0"
|
|
792
|
+
hoverBackground: "#f0f0f0",
|
|
793
|
+
variableBackground: "#ebedf0"
|
|
792
794
|
};
|
|
793
795
|
|
|
794
796
|
// lib/shared/colorVariableUtils.ts
|