meno-core 1.0.44 → 1.0.45
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/dist/bin/cli.js +1 -1
- package/dist/build-static.js +8 -8
- package/dist/chunks/{chunk-KPNSCQNA.js → chunk-5ZASE4IG.js} +53 -10
- package/dist/chunks/chunk-5ZASE4IG.js.map +7 -0
- package/dist/chunks/{chunk-3XXLBUYA.js → chunk-BZQKEJQY.js} +9 -8
- package/dist/chunks/{chunk-3XXLBUYA.js.map → chunk-BZQKEJQY.js.map} +2 -2
- package/dist/chunks/{chunk-OLNQMCSR.js → chunk-F7MA62WG.js} +3 -3
- package/dist/chunks/{chunk-2NBGG2LJ.js → chunk-GYF3ABI3.js} +87 -2
- package/dist/chunks/{chunk-2NBGG2LJ.js.map → chunk-GYF3ABI3.js.map} +2 -2
- package/dist/chunks/{chunk-46AVQA4V.js → chunk-IF3RATBY.js} +2 -2
- package/dist/chunks/{chunk-S2HXJTAF.js → chunk-KITQJYZV.js} +5 -1
- package/dist/chunks/chunk-KITQJYZV.js.map +7 -0
- package/dist/chunks/{chunk-BXB6AX76.js → chunk-NZTSJS5C.js} +6 -3
- package/dist/chunks/chunk-NZTSJS5C.js.map +7 -0
- package/dist/chunks/{chunk-G3WIPJN3.js → chunk-OUNJ76QM.js} +5 -5
- package/dist/chunks/{chunk-5TJA272J.js → chunk-TVH3TC2T.js} +8 -8
- package/dist/chunks/{chunk-YEJVSNVF.js → chunk-WQSG5WHC.js} +13 -2
- package/dist/chunks/chunk-WQSG5WHC.js.map +7 -0
- package/dist/chunks/{chunk-X5SH4HXS.js → chunk-XSWR3QLI.js} +33 -1
- package/dist/chunks/chunk-XSWR3QLI.js.map +7 -0
- package/dist/chunks/{configService-KYO3TXDS.js → configService-6KTT6GRT.js} +3 -3
- package/dist/chunks/{constants-34NUGHQR.js → constants-L5IKLB6U.js} +2 -2
- package/dist/entries/server-router.js +9 -9
- package/dist/lib/client/index.js +5 -5
- package/dist/lib/server/index.js +10 -10
- package/dist/lib/shared/index.js +10 -6
- package/dist/lib/shared/index.js.map +1 -1
- package/dist/lib/test-utils/index.js +1 -1
- package/lib/server/services/configService.ts +13 -0
- package/lib/server/ssr/htmlGenerator.ts +4 -1
- package/lib/shared/constants.ts +8 -2
- package/lib/shared/cssGeneration.ts +11 -0
- package/lib/shared/cssProperties.ts +97 -2
- package/lib/shared/nodeUtils.ts +28 -0
- package/lib/shared/responsiveScaling.test.ts +20 -3
- package/lib/shared/responsiveScaling.ts +55 -1
- package/lib/shared/responsiveStyleUtils.test.ts +7 -8
- package/lib/shared/responsiveStyleUtils.ts +6 -7
- package/lib/shared/types/components.ts +1 -1
- package/lib/shared/types/variables.test.ts +9 -2
- package/lib/shared/types/variables.ts +5 -1
- package/lib/shared/utilityClassMapper.ts +14 -1
- package/lib/shared/validation/propValidator.ts +6 -0
- package/lib/shared/validation/schemas.ts +2 -2
- package/package.json +1 -1
- package/dist/chunks/chunk-BXB6AX76.js.map +0 -7
- package/dist/chunks/chunk-KPNSCQNA.js.map +0 -7
- package/dist/chunks/chunk-S2HXJTAF.js.map +0 -7
- package/dist/chunks/chunk-X5SH4HXS.js.map +0 -7
- package/dist/chunks/chunk-YEJVSNVF.js.map +0 -7
- /package/dist/chunks/{chunk-OLNQMCSR.js.map → chunk-F7MA62WG.js.map} +0 -0
- /package/dist/chunks/{chunk-46AVQA4V.js.map → chunk-IF3RATBY.js.map} +0 -0
- /package/dist/chunks/{chunk-G3WIPJN3.js.map → chunk-OUNJ76QM.js.map} +0 -0
- /package/dist/chunks/{chunk-5TJA272J.js.map → chunk-TVH3TC2T.js.map} +0 -0
- /package/dist/chunks/{configService-KYO3TXDS.js.map → configService-6KTT6GRT.js.map} +0 -0
- /package/dist/chunks/{constants-34NUGHQR.js.map → constants-L5IKLB6U.js.map} +0 -0
|
@@ -18,10 +18,12 @@ export interface ResponsiveScales {
|
|
|
18
18
|
padding?: BreakpointScales;
|
|
19
19
|
margin?: BreakpointScales;
|
|
20
20
|
gap?: BreakpointScales;
|
|
21
|
+
borderRadius?: BreakpointScales;
|
|
22
|
+
size?: BreakpointScales;
|
|
21
23
|
[key: string]: boolean | number | BreakpointScales | undefined;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
export type CSSPropertyType = 'fontSize' | 'padding' | 'margin' | 'gap' | 'paddingTop' | 'paddingRight' | 'paddingBottom' | 'paddingLeft' | 'marginTop' | 'marginRight' | 'marginBottom' | 'marginLeft' | 'rowGap' | 'columnGap';
|
|
26
|
+
export type CSSPropertyType = 'fontSize' | 'padding' | 'margin' | 'gap' | 'paddingTop' | 'paddingRight' | 'paddingBottom' | 'paddingLeft' | 'marginTop' | 'marginRight' | 'marginBottom' | 'marginLeft' | 'rowGap' | 'columnGap' | 'borderRadius' | 'borderTopLeftRadius' | 'borderTopRightRadius' | 'borderBottomLeftRadius' | 'borderBottomRightRadius' | 'width' | 'height' | 'maxWidth' | 'maxHeight' | 'minWidth' | 'minHeight';
|
|
25
27
|
|
|
26
28
|
/**
|
|
27
29
|
* Map CSS property to its scale category
|
|
@@ -33,6 +35,8 @@ function getScaleCategory(property: CSSPropertyType): keyof ResponsiveScales | n
|
|
|
33
35
|
if (propertyStr.startsWith('padding')) return 'padding';
|
|
34
36
|
if (propertyStr.startsWith('margin')) return 'margin';
|
|
35
37
|
if (property === 'gap' || property === 'rowGap' || property === 'columnGap') return 'gap';
|
|
38
|
+
if (propertyStr === 'borderRadius' || (propertyStr.startsWith('border') && propertyStr.includes('Radius'))) return 'borderRadius';
|
|
39
|
+
if (property === 'width' || property === 'height' || property === 'maxWidth' || property === 'maxHeight' || property === 'minWidth' || property === 'minHeight') return 'size';
|
|
36
40
|
return null;
|
|
37
41
|
}
|
|
38
42
|
|
|
@@ -108,6 +112,12 @@ export function scaleValue(
|
|
|
108
112
|
const parsed = parseValue(valueStr);
|
|
109
113
|
if (!parsed) return null;
|
|
110
114
|
|
|
115
|
+
// `%` and `em` are already relative to their rendering context
|
|
116
|
+
// (container / local font-size), so they should not be rescaled.
|
|
117
|
+
if (parsed.unit === '%' || parsed.unit === 'em') {
|
|
118
|
+
return valueStr.trim();
|
|
119
|
+
}
|
|
120
|
+
|
|
111
121
|
const scaledValue = calculateResponsiveValue(parsed.value, baseReference, scale);
|
|
112
122
|
return `${scaledValue}${parsed.unit}`;
|
|
113
123
|
}
|
|
@@ -178,6 +188,42 @@ export function getResponsiveValues(
|
|
|
178
188
|
return result;
|
|
179
189
|
}
|
|
180
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Resolve the effective value of a CSS variable at a given breakpoint.
|
|
193
|
+
*
|
|
194
|
+
* Precedence (mirrors generateVariablesCSS in cssGenerator.ts so the editor
|
|
195
|
+
* widget stays in sync with what the browser will render):
|
|
196
|
+
* 1. `breakpoint === 'base'` → variable.value
|
|
197
|
+
* 2. explicit per-variable override → variable.scales[breakpoint]
|
|
198
|
+
* 3. globally-scaled value (ResponsiveScales multiplier for variable.type)
|
|
199
|
+
* 4. fallback → variable.value
|
|
200
|
+
*/
|
|
201
|
+
export function resolveVariableValueAtBreakpoint(
|
|
202
|
+
variable: { value: string; type: string; scales?: Record<string, string> },
|
|
203
|
+
breakpoint: string,
|
|
204
|
+
responsiveScales?: ResponsiveScales | null
|
|
205
|
+
): string {
|
|
206
|
+
if (breakpoint === 'base') return variable.value;
|
|
207
|
+
|
|
208
|
+
const override = variable.scales?.[breakpoint];
|
|
209
|
+
if (override !== undefined) return override;
|
|
210
|
+
|
|
211
|
+
if (responsiveScales?.enabled && variable.type !== 'none') {
|
|
212
|
+
const scale = getScaleMultiplier(
|
|
213
|
+
responsiveScales,
|
|
214
|
+
variable.type as CSSPropertyType,
|
|
215
|
+
breakpoint
|
|
216
|
+
);
|
|
217
|
+
if (scale !== null) {
|
|
218
|
+
const baseRef = responsiveScales.baseReference || 16;
|
|
219
|
+
const scaled = scalePropertyValue(variable.value, baseRef, scale);
|
|
220
|
+
if (scaled !== null) return scaled;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return variable.value;
|
|
225
|
+
}
|
|
226
|
+
|
|
181
227
|
/**
|
|
182
228
|
* Default responsive scales configuration
|
|
183
229
|
*/
|
|
@@ -200,4 +246,12 @@ export const DEFAULT_RESPONSIVE_SCALES: ResponsiveScales = {
|
|
|
200
246
|
tablet: 0.65,
|
|
201
247
|
mobile: 0.4,
|
|
202
248
|
},
|
|
249
|
+
borderRadius: {
|
|
250
|
+
tablet: 0.85,
|
|
251
|
+
mobile: 0.7,
|
|
252
|
+
},
|
|
253
|
+
size: {
|
|
254
|
+
tablet: 0.9,
|
|
255
|
+
mobile: 0.75,
|
|
256
|
+
},
|
|
203
257
|
};
|
|
@@ -72,21 +72,20 @@ describe('responsiveStyleUtils', () => {
|
|
|
72
72
|
|
|
73
73
|
test('should merge base + tablet for tablet viewport', () => {
|
|
74
74
|
const merged = mergeResponsiveStyles(responsiveStyle, 'viewport', 800, breakpoints);
|
|
75
|
-
// viewport 800 falls into tablet range (<=1024),
|
|
76
|
-
//
|
|
75
|
+
// viewport 800 falls into tablet range (<=1024), but NOT mobile range (<=540)
|
|
76
|
+
// Only base + tablet are applied; mobile styles don't bleed into tablet
|
|
77
77
|
expect(merged.color).toBe('red');
|
|
78
|
-
expect(merged.fontSize).toBe('16px'); // tablet overrides
|
|
79
|
-
expect(merged.padding).toBe('
|
|
78
|
+
expect(merged.fontSize).toBe('16px'); // tablet overrides base
|
|
79
|
+
expect(merged.padding).toBe('20px'); // inherits from base, mobile does NOT apply
|
|
80
80
|
expect(merged.margin).toBe('10px'); // from tablet
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
test('should merge all for mobile viewport', () => {
|
|
84
84
|
const merged = mergeResponsiveStyles(responsiveStyle, 'viewport', 480, breakpoints);
|
|
85
85
|
expect(merged.color).toBe('red');
|
|
86
|
-
expect(merged.fontSize).toBe('14px'); // mobile overrides
|
|
87
|
-
expect(merged.padding).toBe('10px'); // mobile overrides
|
|
88
|
-
|
|
89
|
-
expect(merged.margin).toBeUndefined();
|
|
86
|
+
expect(merged.fontSize).toBe('14px'); // mobile overrides tablet and base
|
|
87
|
+
expect(merged.padding).toBe('10px'); // mobile overrides base
|
|
88
|
+
expect(merged.margin).toBe('10px'); // tablet margin cascades down to mobile
|
|
90
89
|
});
|
|
91
90
|
|
|
92
91
|
test('should handle exact breakpoint values', () => {
|
|
@@ -57,16 +57,15 @@ export function mergeResponsiveStyles(
|
|
|
57
57
|
return merged;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
// Get all breakpoint names and sort by breakpoint value (
|
|
60
|
+
// Get all breakpoint names and sort by breakpoint value (descending)
|
|
61
|
+
// so larger breakpoints apply first, then smaller ones override — matching CSS cascade
|
|
61
62
|
const breakpointEntries = Object.entries(breakpointValues);
|
|
62
|
-
breakpointEntries.sort((a, b) =>
|
|
63
|
-
|
|
64
|
-
const activeBreakpointValue = breakpointValues[activeBreakpoint];
|
|
63
|
+
breakpointEntries.sort((a, b) => b[1] - a[1]); // Sort descending by value
|
|
65
64
|
|
|
66
|
-
// Apply styles for breakpoints
|
|
67
|
-
//
|
|
65
|
+
// Apply styles for breakpoints whose range includes this viewport width
|
|
66
|
+
// A breakpoint with max-width N only applies when viewportWidth <= N
|
|
68
67
|
for (const [name, value] of breakpointEntries) {
|
|
69
|
-
if (
|
|
68
|
+
if (viewportWidth <= value && responsiveStyle[name]) {
|
|
70
69
|
Object.assign(merged, responsiveStyle[name]);
|
|
71
70
|
}
|
|
72
71
|
}
|
|
@@ -9,7 +9,7 @@ import type { LibrariesConfig } from './libraries';
|
|
|
9
9
|
/**
|
|
10
10
|
* Prop type definitions
|
|
11
11
|
*/
|
|
12
|
-
export type PropType = 'string' | 'select' | 'boolean' | 'number' | 'link' | 'file' | 'rich-text' | 'list';
|
|
12
|
+
export type PropType = 'string' | 'select' | 'boolean' | 'number' | 'link' | 'file' | 'rich-text' | 'embed' | 'list';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Project-level enum configuration
|
|
@@ -10,7 +10,7 @@ import type { CSSVariable } from './variables';
|
|
|
10
10
|
describe('VARIABLE_TYPES', () => {
|
|
11
11
|
it('has all expected scaling types', () => {
|
|
12
12
|
const values = VARIABLE_TYPES.map(t => t.value);
|
|
13
|
-
expect(values).toEqual(['fontSize', 'padding', 'margin', 'gap', 'none']);
|
|
13
|
+
expect(values).toEqual(['fontSize', 'padding', 'margin', 'gap', 'borderRadius', 'size', 'none']);
|
|
14
14
|
});
|
|
15
15
|
});
|
|
16
16
|
|
|
@@ -54,9 +54,16 @@ describe('getDefaultScalingType', () => {
|
|
|
54
54
|
expect(getDefaultScalingType('gap')).toBe('gap');
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
+
it('returns borderRadius for border-radius group', () => {
|
|
58
|
+
expect(getDefaultScalingType('border-radius')).toBe('borderRadius');
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('returns size for size group', () => {
|
|
62
|
+
expect(getDefaultScalingType('size')).toBe('size');
|
|
63
|
+
});
|
|
64
|
+
|
|
57
65
|
it('returns none for other groups', () => {
|
|
58
66
|
expect(getDefaultScalingType('letter-spacing')).toBe('none');
|
|
59
|
-
expect(getDefaultScalingType('border-radius')).toBe('none');
|
|
60
67
|
expect(getDefaultScalingType('other')).toBe('none');
|
|
61
68
|
});
|
|
62
69
|
});
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Maps to responsiveScales categories for automatic responsive scaling
|
|
9
9
|
* 'none' means no responsive scaling is applied
|
|
10
10
|
*/
|
|
11
|
-
export type VariableType = 'fontSize' | 'padding' | 'margin' | 'gap' | 'none';
|
|
11
|
+
export type VariableType = 'fontSize' | 'padding' | 'margin' | 'gap' | 'borderRadius' | 'size' | 'none';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* UI filtering group for a CSS variable.
|
|
@@ -137,6 +137,8 @@ export const VARIABLE_TYPES: { value: VariableType; label: string }[] = [
|
|
|
137
137
|
{ value: 'padding', label: 'Padding' },
|
|
138
138
|
{ value: 'margin', label: 'Margin' },
|
|
139
139
|
{ value: 'gap', label: 'Gap' },
|
|
140
|
+
{ value: 'borderRadius', label: 'Border Radius' },
|
|
141
|
+
{ value: 'size', label: 'Width / Height' },
|
|
140
142
|
{ value: 'none', label: 'None' },
|
|
141
143
|
];
|
|
142
144
|
|
|
@@ -156,6 +158,8 @@ export function getDefaultScalingType(group: string, cssProperty?: string): Vari
|
|
|
156
158
|
if (group === 'margin') return 'margin';
|
|
157
159
|
if (group === 'padding') return 'padding';
|
|
158
160
|
if (group === 'gap') return 'gap';
|
|
161
|
+
if (group === 'border-radius') return 'borderRadius';
|
|
162
|
+
if (group === 'size') return 'size';
|
|
159
163
|
return 'none';
|
|
160
164
|
}
|
|
161
165
|
|
|
@@ -89,7 +89,20 @@ function propertyValueToClass(prop: string, value: string | number): string | nu
|
|
|
89
89
|
return className;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
let stringValue = String(value);
|
|
93
|
+
|
|
94
|
+
// Strip outer quotes from fontFamily values (e.g. "Space Grotesk" → Space Grotesk)
|
|
95
|
+
if (prop === 'fontFamily') {
|
|
96
|
+
stringValue = stringValue.split(',').map(font => {
|
|
97
|
+
const trimmed = font.trim();
|
|
98
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
99
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
100
|
+
return trimmed.slice(1, -1);
|
|
101
|
+
}
|
|
102
|
+
return trimmed;
|
|
103
|
+
}).join(', ');
|
|
104
|
+
}
|
|
105
|
+
|
|
93
106
|
let className: string | null = null;
|
|
94
107
|
|
|
95
108
|
// Check for special value mappings first
|
|
@@ -168,6 +168,12 @@ function validateSingleProp(
|
|
|
168
168
|
typeValid = typeof value === 'string';
|
|
169
169
|
break;
|
|
170
170
|
|
|
171
|
+
case 'embed':
|
|
172
|
+
// Embed type stores raw HTML string
|
|
173
|
+
coercedValue = value;
|
|
174
|
+
typeValid = typeof value === 'string';
|
|
175
|
+
break;
|
|
176
|
+
|
|
171
177
|
case 'list':
|
|
172
178
|
// List type accepts arrays and i18n values (i18n values will be resolved later)
|
|
173
179
|
coercedValue = value;
|
|
@@ -15,12 +15,12 @@ import { NODE_TYPE } from '../constants';
|
|
|
15
15
|
/**
|
|
16
16
|
* Prop type schema - validates PropType values (excluding list for base definition)
|
|
17
17
|
*/
|
|
18
|
-
export const BasePropTypeSchema = z.enum(['string', 'select', 'boolean', 'number', 'link', 'file', 'rich-text']);
|
|
18
|
+
export const BasePropTypeSchema = z.enum(['string', 'select', 'boolean', 'number', 'link', 'file', 'rich-text', 'embed']);
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Full prop type schema including list
|
|
22
22
|
*/
|
|
23
|
-
export const PropTypeSchema = z.enum(['string', 'select', 'boolean', 'number', 'link', 'file', 'rich-text', 'list']);
|
|
23
|
+
export const PropTypeSchema = z.enum(['string', 'select', 'boolean', 'number', 'link', 'file', 'rich-text', 'embed', 'list']);
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Base prop definition schema (for non-list props)
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../lib/shared/constants.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Shared constants used across the application\n */\n\n// Read PORT from environment variable, fallback to 3000\n// Safe for browser environments where process is not defined\nexport const SERVER_PORT = typeof process !== 'undefined' && process.env?.PORT\n ? parseInt(process.env.PORT, 10)\n : 3000;\n\n// Port for serving built static files\nexport const SERVE_PORT = 8080;\n\nexport const API_ROUTES = {\n PAGES: '/api/pages',\n COMPONENTS: '/api/components',\n PAGE_CONTENT: '/api/page-content', // Returns raw JSON text for a page\n PAGE_DATA: '/api/page-data', // Returns parsed JSON for a specific page\n COMPONENT_DATA: '/api/component-data', // Returns parsed JSON for a specific component\n SAVE_PAGE: '/api/save-page',\n SAVE_COMPONENT: '/api/save-component',\n SAVE_COMPONENT_JS: '/api/save-component-js', // Save JavaScript to .js file\n SAVE_COMPONENT_CSS: '/api/save-component-css', // Save CSS to .css file\n COMPONENT_CATEGORY: '/api/component-category', // Move component to category folder\n COMPONENT_FOLDER: '/api/component-folder', // Create component folder\n COMPONENT_FOLDERS: '/api/component-folders', // List all component folders\n COMPONENT_JS: '/api/component-js', // Get JavaScript from .js file\n CONFIG: '/api/config', // Get project config\n SAVE_CONFIG: '/api/save-config', // Save project config\n COMPONENTS_CONFIG: '/api/components-config', // Get components config\n SAVE_COMPONENTS_CONFIG: '/api/save-components-config', // Save components config\n SELECTION: '/api/selection', // Editor selection state (for AI integration)\n // CMS API routes\n CMS_COLLECTIONS: '/api/cms/collections', // List all CMS collections\n CMS_BASE: '/api/cms', // Base path for CMS item operations\n // Colors API routes\n COLORS_CONFIG: '/api/colors-config', // Get full colors config\n SAVE_COLORS: '/api/save-colors', // Save colors config\n // Page deletion\n DELETE_PAGE: '/api/delete-page', // Delete a page\n // Page folder management\n PAGE_FOLDER: '/api/page-folder', // Create page folder\n PAGE_FOLDERS: '/api/page-folders', // List all page folders\n MOVE_PAGE: '/api/move-page', // Move page to folder\n // Component preview\n COMPONENT_PREVIEW: '/api/component-preview', // Render component preview HTML\n // Website import\n IMPORT_WEBSITE: '/api/import-website', // Import external website for reference\n IMPORTED_WEBSITES: '/api/imported-websites', // List imported website folders\n ANALYZE_WEBSITE: '/api/analyze-website', // Analyze imported website into section map\n CONVERT_TO_MENO: '/api/convert-to-meno', // Convert imported HTML to flat Meno page JSON\n EXTRACT_CONTENT: '/api/extract-content', // Extract content from imported website for template mapping\n GENERATE_WIREFRAME_PROMPT: '/api/generate-wireframe-prompt', // Generate wireframe conversion prompt from extraction\n GENERATE_DESIGN_TOKEN_PROMPT: '/api/generate-design-token-prompt', // Generate design token extraction prompt\n GENERATE_CONTENT_PROMPT: '/api/generate-content-prompt', // Generate content conversion prompt using existing components\n GENERATE_SIMPLIFIED_PROMPT: '/api/generate-simplified-prompt', // Generate simplified prompt for Claude Code with Chrome extension\n // Multi-page import routes\n FETCH_SITEMAP: '/api/fetch-sitemap', // Fetch & parse sitemap.xml\n IMPORT_PAGE: '/api/import-page', // Import a single subpage\n ANALYZE_PAGE: '/api/analyze-page', // Analyze a subpage\n EXTRACT_PAGE_CONTENT: '/api/extract-page-content', // Extract content from a subpage\n GENERATE_HOMEPAGE_PROMPT: '/api/generate-homepage-prompt', // Homepage prompt with site structure\n GENERATE_PAGE_PROMPT: '/api/generate-page-prompt', // Per-page/template prompt\n LOAD_WEBSITE_IMPORT: '/api/load-website-import', // Load saved website import data from disk\n // Variables API routes\n VARIABLES_STATUS: '/api/variables-status', // Get variables config with status\n VARIABLES_CSS: '/api/variables-css', // Get generated CSS custom properties\n SAVE_VARIABLES: '/api/save-variables', // Save variables config\n // Enums API routes\n ENUMS: '/api/enums', // Get enums config\n SAVE_ENUMS: '/api/save-enums', // Save enums config\n // Component usage\n COMPONENT_USAGE: '/api/component-usage', // Get component usage across project\n} as const;\n\nexport const HMR_ROUTE = '/hmr';\n\nexport const FILE_PATTERNS = {\n PAGES: './pages',\n COMPONENTS: './components',\n} as const;\n\nexport const DEFAULT_TIMEOUT = 5000;\n\nexport const WEBSOCKET_STATES = {\n CONNECTING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n} as const;\n\n// Timeout constants\nexport const NOT_FOUND_TIMEOUT_MS = 300;\nexport const TAB_SWITCH_DELAY_MS = 100;\nexport const IFRAME_HIGHLIGHT_DELAY_MS = 100;\nexport const TREE_SCROLL_DELAY_MS = 200;\nexport const HOVER_HIGHLIGHT_DELAY_MS = 50; // Delay before highlighting tree item after expansion\n\n// Server configuration\nexport const MAX_PORT_ATTEMPTS = 10;\n\n// Message types for iframe-parent communication\nexport const IFRAME_MESSAGE_TYPES = {\n DELETE_ELEMENT: 'DELETE_ELEMENT',\n TOGGLE_SELECTING_MODE: 'TOGGLE_SELECTING_MODE',\n SET_TAB: 'SET_TAB',\n COPY_ELEMENT: 'COPY_ELEMENT',\n PASTE_ELEMENT: 'PASTE_ELEMENT',\n ARROW_UP: 'ARROW_UP',\n ARROW_DOWN: 'ARROW_DOWN',\n ARROW_LEFT: 'ARROW_LEFT',\n ARROW_RIGHT: 'ARROW_RIGHT',\n OPEN_COMMAND_PALETTE: 'OPEN_COMMAND_PALETTE',\n EDIT_COMPONENT: 'EDIT_COMPONENT',\n NAVIGATE_BACK: 'NAVIGATE_BACK',\n TOGGLE_ADDING_STYLE: 'TOGGLE_ADDING_STYLE',\n MOVE_ELEMENT_UP: 'MOVE_ELEMENT_UP',\n MOVE_ELEMENT_DOWN: 'MOVE_ELEMENT_DOWN',\n NEST_INTO_PREVIOUS_SIBLING: 'NEST_INTO_PREVIOUS_SIBLING',\n NEST_INTO_NEXT_SIBLING: 'NEST_INTO_NEXT_SIBLING',\n SELECTION_CHANGED: 'SELECTION_CHANGED',\n CMS_CONTEXT_UPDATE: 'CMS_CONTEXT_UPDATE',\n CMS_CONTEXT_REQUEST: 'CMS_CONTEXT_REQUEST',\n INTERACTIVE_CSS_UPDATE: 'INTERACTIVE_CSS_UPDATE',\n INTERACTIVE_STYLES_UPDATE: 'INTERACTIVE_STYLES_UPDATE', // Registry data from iframe to editor\n UNDO_REQUEST: 'UNDO_REQUEST',\n REDO_REQUEST: 'REDO_REQUEST',\n TOGGLE_INTERACTIVITY_EDITOR: 'TOGGLE_INTERACTIVITY_EDITOR',\n SET_BREAKPOINT: 'SET_BREAKPOINT',\n PAGE_DATA_PREVIEW: 'PAGE_DATA_PREVIEW', // Editor \u2192 Iframe for component hover preview\n PAGE_DATA_PREVIEW_REVERT: 'PAGE_DATA_PREVIEW_REVERT', // Editor \u2192 Iframe to revert preview\n PAGE_DATA_COMMITTED: 'PAGE_DATA_COMMITTED', // Editor \u2192 Iframe for committed mutations\n COMPONENT_DEFINITION_COMMITTED: 'COMPONENT_DEFINITION_COMMITTED', // Editor \u2192 Iframe for component definition updates\n CSS_VARIABLE_UPDATE: 'CSS_VARIABLE_UPDATE', // Editor \u2192 Iframe for instant CSS variable preview\n DUPLICATE_ELEMENT: 'DUPLICATE_ELEMENT',\n} as const;\n\n// Component node type constants\nexport const NODE_TYPE = {\n NODE: 'node',\n COMPONENT: 'component',\n SLOT: 'slot',\n EMBED: 'embed',\n LINK: 'link',\n LOCALE_LIST: 'locale-list',\n LIST: 'list',\n} as const;\n\nexport type NodeType = typeof NODE_TYPE[keyof typeof NODE_TYPE];\n\n// Special path identifiers for component editing\nexport const SPECIAL_PATHS = {\n COMPONENT_INTERFACE: 'component_interface',\n COMPONENT_JAVASCRIPT: 'component_javascript',\n COMPONENT_CSS: 'component_css',\n COMPONENT_LIBRARIES: 'component_libraries',\n COMPONENT_ACCEPTS_STYLES: 'component_acceptsStyles',\n STRUCTURE_STYLE: 'structure_style',\n} as const;\n\n// Component type configuration\nexport interface ComponentTypeConfig {\n id: string;\n label: string;\n color: string;\n description?: string;\n}\n\nexport const DEFAULT_COMPONENT_TYPES: ComponentTypeConfig[] = [\n { id: 'ui', label: 'UI', color: '#3b82f6' },\n { id: 'layout', label: 'Layout', color: '#10b981' },\n { id: 'content', label: 'Content', color: '#f59e0b' },\n];\n\nexport const DEFAULT_ICON_COLOR = '#6b7280';\n\n/**\n * Marker for raw HTML content that should not be escaped\n * Used by rich-text fields to signal that content should render as HTML\n */\nexport const RAW_HTML_PREFIX = '<!--MENO_RAW_HTML-->';\n\n"],
|
|
5
|
-
"mappings": ";;;;;AAAA,IAMa,aAKA,YAEA,YA8DA,WAEA,eAKA,iBAEA,kBAQA,sBACA,qBACA,2BACA,sBACA,0BAGA,mBAGA,sBAoCA,WAaA,eAiBA,yBAMA,oBAMA;AApLb;AAAA;AAMO,IAAM,cAAc,OAAO,YAAY,eAAe,QAAQ,KAAK,OACtE,SAAS,QAAQ,IAAI,MAAM,EAAE,IAC7B;AAGG,IAAM,aAAa;AAEnB,IAAM,aAAa;AAAA,MACxB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA;AAAA,MACd,WAAW;AAAA;AAAA,MACX,gBAAgB;AAAA;AAAA,MAChB,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,mBAAmB;AAAA;AAAA,MACnB,oBAAoB;AAAA;AAAA,MACpB,oBAAoB;AAAA;AAAA,MACpB,kBAAkB;AAAA;AAAA,MAClB,mBAAmB;AAAA;AAAA,MACnB,cAAc;AAAA;AAAA,MACd,QAAQ;AAAA;AAAA,MACR,aAAa;AAAA;AAAA,MACb,mBAAmB;AAAA;AAAA,MACnB,wBAAwB;AAAA;AAAA,MACxB,WAAW;AAAA;AAAA;AAAA,MAEX,iBAAiB;AAAA;AAAA,MACjB,UAAU;AAAA;AAAA;AAAA,MAEV,eAAe;AAAA;AAAA,MACf,aAAa;AAAA;AAAA;AAAA,MAEb,aAAa;AAAA;AAAA;AAAA,MAEb,aAAa;AAAA;AAAA,MACb,cAAc;AAAA;AAAA,MACd,WAAW;AAAA;AAAA;AAAA,MAEX,mBAAmB;AAAA;AAAA;AAAA,MAEnB,gBAAgB;AAAA;AAAA,MAChB,mBAAmB;AAAA;AAAA,MACnB,iBAAiB;AAAA;AAAA,MACjB,iBAAiB;AAAA;AAAA,MACjB,iBAAiB;AAAA;AAAA,MACjB,2BAA2B;AAAA;AAAA,MAC3B,8BAA8B;AAAA;AAAA,MAC9B,yBAAyB;AAAA;AAAA,MACzB,4BAA4B;AAAA;AAAA;AAAA,MAE5B,eAAe;AAAA;AAAA,MACf,aAAa;AAAA;AAAA,MACb,cAAc;AAAA;AAAA,MACd,sBAAsB;AAAA;AAAA,MACtB,0BAA0B;AAAA;AAAA,MAC1B,sBAAsB;AAAA;AAAA,MACtB,qBAAqB;AAAA;AAAA;AAAA,MAErB,kBAAkB;AAAA;AAAA,MAClB,eAAe;AAAA;AAAA,MACf,gBAAgB;AAAA;AAAA;AAAA,MAEhB,OAAO;AAAA;AAAA,MACP,YAAY;AAAA;AAAA;AAAA,MAEZ,iBAAiB;AAAA;AAAA,IACnB;AAEO,IAAM,YAAY;AAElB,IAAM,gBAAgB;AAAA,MAC3B,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAEO,IAAM,kBAAkB;AAExB,IAAM,mBAAmB;AAAA,MAC9B,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAGO,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAC5B,IAAM,4BAA4B;AAClC,IAAM,uBAAuB;AAC7B,IAAM,2BAA2B;AAGjC,IAAM,oBAAoB;AAG1B,IAAM,uBAAuB;AAAA,MAClC,gBAAgB;AAAA,MAChB,uBAAuB;AAAA,MACvB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,eAAe;AAAA,MACf,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,sBAAsB;AAAA,MACtB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,4BAA4B;AAAA,MAC5B,wBAAwB;AAAA,MACxB,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,MACrB,wBAAwB;AAAA,MACxB,2BAA2B;AAAA;AAAA,MAC3B,cAAc;AAAA,MACd,cAAc;AAAA,MACd,6BAA6B;AAAA,MAC7B,gBAAgB;AAAA,MAChB,mBAAmB;AAAA;AAAA,MACnB,0BAA0B;AAAA;AAAA,MAC1B,qBAAqB;AAAA;AAAA,MACrB,gCAAgC;AAAA;AAAA,MAChC,qBAAqB;AAAA;AAAA,MACrB,mBAAmB;AAAA,IACrB;AAGO,IAAM,YAAY;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAKO,IAAM,gBAAgB;AAAA,MAC3B,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,0BAA0B;AAAA,MAC1B,iBAAiB;AAAA,IACnB;AAUO,IAAM,0BAAiD;AAAA,MAC5D,EAAE,IAAI,MAAM,OAAO,MAAM,OAAO,UAAU;AAAA,MAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,OAAO,UAAU;AAAA,MAClD,EAAE,IAAI,WAAW,OAAO,WAAW,OAAO,UAAU;AAAA,IACtD;AAEO,IAAM,qBAAqB;AAM3B,IAAM,kBAAkB;AAAA;AAAA;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|