This commit is contained in:
dev.daminik00 2025-10-06 00:31:32 +02:00
parent 8333b11d25
commit d050bf7507
8 changed files with 134 additions and 91 deletions

View File

@ -48,17 +48,12 @@
}, },
"description": { "description": {
"text": "Ваш персональный портрет почти готов.", "text": "Ваш персональный портрет почти готов.",
"show": true,
"font": "manrope", "font": "manrope",
"weight": "regular", "weight": "regular",
"size": "md", "size": "md",
"align": "center", "align": "center",
"color": "default" "color": "default"
}, },
"fields": [],
"list": {
"options": []
},
"variants": [] "variants": []
}, },
{ {
@ -91,7 +86,6 @@
"defaultNextScreenId": "relationship-status", "defaultNextScreenId": "relationship-status",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -146,7 +140,6 @@
"defaultNextScreenId": "analysis-target", "defaultNextScreenId": "analysis-target",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -200,7 +193,6 @@
"defaultNextScreenId": "partner-age", "defaultNextScreenId": "partner-age",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -269,7 +261,6 @@
"defaultNextScreenId": "partner-ethnicity", "defaultNextScreenId": "partner-ethnicity",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -310,7 +301,8 @@
"current_partner" "current_partner"
] ]
} }
] ],
"overrides": {}
}, },
{ {
"conditions": [ "conditions": [
@ -397,7 +389,6 @@
"defaultNextScreenId": "partner-ethnicity", "defaultNextScreenId": "partner-ethnicity",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -446,7 +437,6 @@
"defaultNextScreenId": "partner-eye-color", "defaultNextScreenId": "partner-eye-color",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -520,7 +510,6 @@
"defaultNextScreenId": "partner-hair-length", "defaultNextScreenId": "partner-hair-length",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -598,7 +587,6 @@
"defaultNextScreenId": "burnout-support", "defaultNextScreenId": "burnout-support",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -647,7 +635,6 @@
"defaultNextScreenId": "burnout-result", "defaultNextScreenId": "burnout-result",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -720,10 +707,6 @@
"value": "/images/ac321d94-62e3-45c6-85f4-51faf6769bab.svg", "value": "/images/ac321d94-62e3-45c6-85f4-51faf6769bab.svg",
"size": "md" "size": "md"
}, },
"fields": [],
"list": {
"options": []
},
"variants": [ "variants": [
{ {
"conditions": [ "conditions": [
@ -734,7 +717,8 @@
"acknowledged_and_calmed" "acknowledged_and_calmed"
] ]
} }
] ],
"overrides": {}
}, },
{ {
"conditions": [ "conditions": [
@ -852,10 +836,6 @@
"storageKey": "userZodiac" "storageKey": "userZodiac"
} }
}, },
"fields": [],
"list": {
"options": []
},
"variants": [] "variants": []
}, },
{ {
@ -884,7 +864,6 @@
"defaultNextScreenId": "love-priority", "defaultNextScreenId": "love-priority",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -942,7 +921,6 @@
"defaultNextScreenId": "core-need", "defaultNextScreenId": "core-need",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1000,7 +978,6 @@
"defaultNextScreenId": "partner-similarity", "defaultNextScreenId": "partner-similarity",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1059,7 +1036,6 @@
"defaultNextScreenId": "partner-role", "defaultNextScreenId": "partner-role",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1103,7 +1079,6 @@
"defaultNextScreenId": "relationship-strength", "defaultNextScreenId": "relationship-strength",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1167,7 +1142,6 @@
"defaultNextScreenId": "love-expression", "defaultNextScreenId": "love-expression",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1226,7 +1200,6 @@
"defaultNextScreenId": "relationship-future", "defaultNextScreenId": "relationship-future",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1290,7 +1263,6 @@
"defaultNextScreenId": "relationship-energy", "defaultNextScreenId": "relationship-energy",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1349,7 +1321,6 @@
"defaultNextScreenId": "relationship-metaphor", "defaultNextScreenId": "relationship-metaphor",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1417,7 +1388,6 @@
"defaultNextScreenId": "portrait-generation", "defaultNextScreenId": "portrait-generation",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "multi", "selectionType": "multi",
"options": [ "options": [
@ -1492,10 +1462,6 @@
"defaultNextScreenId": "email", "defaultNextScreenId": "email",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": {
"options": []
},
"progressbars": { "progressbars": {
"items": [ "items": [
{ {
@ -1545,12 +1511,9 @@
}, },
"navigation": { "navigation": {
"rules": [], "rules": [],
"defaultNextScreenId": "screen-25",
"isEndScreen": true "isEndScreen": true
}, },
"fields": [],
"list": {
"options": []
},
"emailInput": { "emailInput": {
"label": "Email", "label": "Email",
"placeholder": "example@email.com" "placeholder": "example@email.com"

View File

@ -270,14 +270,76 @@ async function getLatestPublishedFunnels() {
} }
} }
/**
* Нормализует данные воронки перед сохранением
* Удаляет лишние поля которые не соответствуют типам TypeScript
*/
function normalizeFunnelData(funnelData) {
return {
...funnelData,
screens: funnelData.screens.map((screen) => {
const normalizedScreen = { ...screen };
// Удаляем поле 'show' из description (TypographyVariant не содержит его)
// Поле 'show' есть только у TitleDefinition и SubtitleDefinition
if (normalizedScreen.description && typeof normalizedScreen.description === 'object') {
if ('show' in normalizedScreen.description) {
delete normalizedScreen.description.show;
}
}
// Удаляем специфичные для других шаблонов поля
// Каждый шаблон должен содержать только свои поля
switch (normalizedScreen.template) {
case 'form':
// fields нужно только для form экранов
break;
case 'email':
// email имеет emailInput, а не fields
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
if ('list' in normalizedScreen) delete normalizedScreen.list;
break;
case 'list':
// list нужно только для list экранов
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
break;
case 'loaders':
// progressbars нужно только для loaders
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
if ('list' in normalizedScreen) delete normalizedScreen.list;
break;
default:
// Для остальных шаблонов (info, date, coupon, soulmate) удаляем специфичные поля
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
if ('list' in normalizedScreen) delete normalizedScreen.list;
if ('progressbars' in normalizedScreen) delete normalizedScreen.progressbars;
break;
}
// Нормализуем variants - добавляем пустой overrides если его нет
if ('variants' in normalizedScreen && Array.isArray(normalizedScreen.variants)) {
normalizedScreen.variants = normalizedScreen.variants.map((variant) => ({
conditions: variant.conditions || [],
overrides: variant.overrides || {},
}));
}
return normalizedScreen;
}),
};
}
async function saveFunnelToFile(funnel) { async function saveFunnelToFile(funnel) {
const funnelId = funnel.funnelData.meta.id; const funnelId = funnel.funnelData.meta.id;
const fileName = `${funnelId}.json`; const fileName = `${funnelId}.json`;
const filePath = path.join(funnelsDir, fileName); const filePath = path.join(funnelsDir, fileName);
try { try {
// Нормализуем данные перед сохранением (удаляем лишние поля)
const normalizedData = normalizeFunnelData(funnel.funnelData);
// Сохраняем только funnelData (структуру воронки) // Сохраняем только funnelData (структуру воронки)
const funnelContent = JSON.stringify(funnel.funnelData, null, 2); const funnelContent = JSON.stringify(normalizedData, null, 2);
await fs.writeFile(filePath, funnelContent, 'utf8'); await fs.writeFile(filePath, funnelContent, 'utf8');
console.log(`💾 Saved ${fileName} (v${funnel.version})`); console.log(`💾 Saved ${fileName} (v${funnel.version})`);
} catch (error) { } catch (error) {

View File

@ -19,7 +19,7 @@ function normalizeTypography(typography: TypographyVariant | undefined): Typogra
/** /**
* Нормализует данные воронки перед сохранением в MongoDB * Нормализует данные воронки перед сохранением в MongoDB
* Удаляет пустые текстовые поля которые не пройдут валидацию * Удаляет пустые текстовые поля и лишние поля которые не соответствуют типам
*/ */
function normalizeFunnelData(funnelData: FunnelDefinition): FunnelDefinition { function normalizeFunnelData(funnelData: FunnelDefinition): FunnelDefinition {
return { return {
@ -39,15 +39,56 @@ function normalizeFunnelData(funnelData: FunnelDefinition): FunnelDefinition {
} }
// Нормализуем description (для info и soulmate экранов) // Нормализуем description (для info и soulmate экранов)
// ⚠️ TypographyVariant НЕ содержит поле 'show', удаляем его если есть
if ('description' in normalizedScreen) { if ('description' in normalizedScreen) {
const normalized = normalizeTypography(normalizedScreen.description); const normalized = normalizeTypography(normalizedScreen.description);
if (normalized === undefined) { if (normalized === undefined) {
delete normalizedScreen.description; delete normalizedScreen.description;
} else { } else {
normalizedScreen.description = normalized; normalizedScreen.description = normalized;
// Удаляем поле 'show' если оно есть (TypographyVariant не содержит его)
if ('show' in normalizedScreen.description) {
delete normalizedScreen.description.show;
}
} }
} }
// Удаляем специфичные для других шаблонов поля
// Каждый шаблон должен содержать только свои поля
switch (normalizedScreen.template) {
case 'form':
// fields нужно только для form экранов
break;
case 'email':
// email имеет emailInput, а не fields
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
if ('list' in normalizedScreen) delete normalizedScreen.list;
break;
case 'list':
// list нужно только для list экранов
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
break;
case 'loaders':
// progressbars нужно только для loaders
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
if ('list' in normalizedScreen) delete normalizedScreen.list;
break;
default:
// Для остальных шаблонов (info, date, coupon, soulmate) удаляем специфичные поля
if ('fields' in normalizedScreen) delete normalizedScreen.fields;
if ('list' in normalizedScreen) delete normalizedScreen.list;
if ('progressbars' in normalizedScreen) delete normalizedScreen.progressbars;
break;
}
// Нормализуем variants - добавляем пустой overrides если его нет
if ('variants' in normalizedScreen && Array.isArray(normalizedScreen.variants)) {
normalizedScreen.variants = normalizedScreen.variants.map((variant: { conditions?: unknown; overrides?: unknown }) => ({
conditions: variant.conditions || [],
overrides: variant.overrides || {},
}));
}
return normalizedScreen as ScreenDefinition; return normalizedScreen as ScreenDefinition;
}), }),
}; };

View File

@ -74,8 +74,15 @@ export function BuilderPreview() {
if (!previewScreen) return null; if (!previewScreen) return null;
try { try {
// ✅ Используем мемоизированные моки // ✅ Собираем объект funnel из builderState для передачи в renderScreen
const mockFunnel = {
meta: builderState.meta,
defaultTexts: builderState.defaultTexts,
screens: builderState.screens,
};
return renderScreen({ return renderScreen({
funnel: mockFunnel,
screen: previewScreen, screen: previewScreen,
selectedOptionIds: selectedIds, selectedOptionIds: selectedIds,
onSelectionChange: handleSelectionChange, onSelectionChange: handleSelectionChange,
@ -93,7 +100,7 @@ export function BuilderPreview() {
</div> </div>
); );
} }
}, [previewScreen, selectedIds, handleSelectionChange, builderState.defaultTexts]); }, [previewScreen, selectedIds, handleSelectionChange, builderState.meta, builderState.defaultTexts, builderState.screens]);
const preview = useMemo(() => { const preview = useMemo(() => {
if (!previewScreen) { if (!previewScreen) {

View File

@ -97,6 +97,7 @@ export function DateTemplate({
as="p" as="p"
size="sm" size="sm"
color="muted" color="muted"
align="center"
className="font-medium" className="font-medium"
> >
{screen.dateInput?.selectedDateLabel || "Выбранная дата:"} {screen.dateInput?.selectedDateLabel || "Выбранная дата:"}
@ -106,6 +107,7 @@ export function DateTemplate({
size="xl" size="xl"
weight="bold" weight="bold"
color="default" color="default"
align="center"
className="font-semibold" className="font-semibold"
> >
{formattedDate} {formattedDate}
@ -124,7 +126,7 @@ export function DateTemplate({
disabled: !isFormValid, disabled: !isFormValid,
onClick: onContinue, onClick: onContinue,
}, },
childrenUnderButton: selectedDateDisplay, childrenAboveButton: selectedDateDisplay,
} }
); );

View File

@ -4,7 +4,8 @@ import {
AvatarFallback, AvatarFallback,
} from "../avatar"; } from "../avatar";
interface AvatarProps extends React.ComponentProps<typeof AvatarComponent> { export interface AvatarProps extends Omit<React.ComponentProps<typeof AvatarComponent>, never> {
className?: string;
imageProps?: React.ComponentProps<typeof AvatarImage>; imageProps?: React.ComponentProps<typeof AvatarImage>;
fallbackProps?: React.ComponentProps<typeof AvatarFallback>; fallbackProps?: React.ComponentProps<typeof AvatarFallback>;
} }

View File

@ -82,7 +82,11 @@ const BottomActionButton = forwardRef<HTMLDivElement, BottomActionButtonProps>(
{...props} {...props}
> >
<GradientBlur className="p-6 pt-11" isActiveBlur={showGradientBlur}> <GradientBlur className="p-6 pt-11" isActiveBlur={showGradientBlur}>
{childrenAboveButton} {childrenAboveButton && (
<div className="w-full flex justify-center">
{childrenAboveButton}
</div>
)}
{hasButton ? <ActionButton {...actionButtonProps} /> : null} {hasButton ? <ActionButton {...actionButtonProps} /> : null}
{childrenUnderButton} {childrenUnderButton}
</GradientBlur> </GradientBlur>

View File

@ -56,17 +56,12 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
}, },
"description": { "description": {
"text": "Ваш персональный портрет почти готов.", "text": "Ваш персональный портрет почти готов.",
"show": true,
"font": "manrope", "font": "manrope",
"weight": "regular", "weight": "regular",
"size": "md", "size": "md",
"align": "center", "align": "center",
"color": "default" "color": "default"
}, },
"fields": [],
"list": {
"options": []
},
"variants": [] "variants": []
}, },
{ {
@ -99,7 +94,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "relationship-status", "defaultNextScreenId": "relationship-status",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -154,7 +148,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "analysis-target", "defaultNextScreenId": "analysis-target",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -208,7 +201,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-age", "defaultNextScreenId": "partner-age",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -277,7 +269,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-ethnicity", "defaultNextScreenId": "partner-ethnicity",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -318,7 +309,8 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"current_partner" "current_partner"
] ]
} }
] ],
"overrides": {}
}, },
{ {
"conditions": [ "conditions": [
@ -405,7 +397,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-ethnicity", "defaultNextScreenId": "partner-ethnicity",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -454,7 +445,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-eye-color", "defaultNextScreenId": "partner-eye-color",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -528,7 +518,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-hair-length", "defaultNextScreenId": "partner-hair-length",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -606,7 +595,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "burnout-support", "defaultNextScreenId": "burnout-support",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -655,7 +643,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "burnout-result", "defaultNextScreenId": "burnout-result",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -728,10 +715,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"value": "/images/ac321d94-62e3-45c6-85f4-51faf6769bab.svg", "value": "/images/ac321d94-62e3-45c6-85f4-51faf6769bab.svg",
"size": "md" "size": "md"
}, },
"fields": [],
"list": {
"options": []
},
"variants": [ "variants": [
{ {
"conditions": [ "conditions": [
@ -742,7 +725,8 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"acknowledged_and_calmed" "acknowledged_and_calmed"
] ]
} }
] ],
"overrides": {}
}, },
{ {
"conditions": [ "conditions": [
@ -860,10 +844,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"storageKey": "userZodiac" "storageKey": "userZodiac"
} }
}, },
"fields": [],
"list": {
"options": []
},
"variants": [] "variants": []
}, },
{ {
@ -892,7 +872,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "love-priority", "defaultNextScreenId": "love-priority",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -950,7 +929,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "core-need", "defaultNextScreenId": "core-need",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1008,7 +986,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-similarity", "defaultNextScreenId": "partner-similarity",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1067,7 +1044,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "partner-role", "defaultNextScreenId": "partner-role",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1111,7 +1087,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "relationship-strength", "defaultNextScreenId": "relationship-strength",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1175,7 +1150,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "love-expression", "defaultNextScreenId": "love-expression",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1234,7 +1208,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "relationship-future", "defaultNextScreenId": "relationship-future",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1298,7 +1271,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "relationship-energy", "defaultNextScreenId": "relationship-energy",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1357,7 +1329,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "relationship-metaphor", "defaultNextScreenId": "relationship-metaphor",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "single", "selectionType": "single",
"options": [ "options": [
@ -1425,7 +1396,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "portrait-generation", "defaultNextScreenId": "portrait-generation",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": { "list": {
"selectionType": "multi", "selectionType": "multi",
"options": [ "options": [
@ -1500,10 +1470,6 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
"defaultNextScreenId": "email", "defaultNextScreenId": "email",
"isEndScreen": false "isEndScreen": false
}, },
"fields": [],
"list": {
"options": []
},
"progressbars": { "progressbars": {
"items": [ "items": [
{ {
@ -1553,12 +1519,9 @@ export const BAKED_FUNNELS: Record<string, FunnelDefinition> = {
}, },
"navigation": { "navigation": {
"rules": [], "rules": [],
"defaultNextScreenId": "screen-25",
"isEndScreen": true "isEndScreen": true
}, },
"fields": [],
"list": {
"options": []
},
"emailInput": { "emailInput": {
"label": "Email", "label": "Email",
"placeholder": "example@email.com" "placeholder": "example@email.com"