diff --git a/src/components/admin/builder/templates/TemplateConfig.tsx b/src/components/admin/builder/templates/TemplateConfig.tsx index 50b32b6..ce762ad 100644 --- a/src/components/admin/builder/templates/TemplateConfig.tsx +++ b/src/components/admin/builder/templates/TemplateConfig.tsx @@ -357,6 +357,7 @@ function ActionButtonControls({ const buttonText = value?.text || ""; const cornerRadius = value?.cornerRadius; const showPrivacyTermsConsent = value?.showPrivacyTermsConsent ?? false; + const showGradientBlur = value?.showGradientBlur ?? true; const handleToggle = (enabled: boolean) => { if (enabled) { @@ -435,6 +436,29 @@ function ActionButtonControls({ } }; + const handleGradientBlurToggle = (checked: boolean) => { + // Работает даже когда кнопка отключена (для LIST экранов) + const newValue = { + ...value, + // Если checked = true (дефолт), не сохраняем поле + // Если checked = false, сохраняем явно + showGradientBlur: checked ? undefined : false, + }; + + // Убираем undefined поля для чистоты + if ( + !newValue.text && + !newValue.cornerRadius && + newValue.show !== false && + !newValue.showPrivacyTermsConsent && + newValue.showGradientBlur !== false + ) { + onChange(undefined); + } else { + onChange(newValue); + } + }; + return (
)} + + {/* Gradient Blur - доступен даже когда кнопка отключена */} +
+ +
); } diff --git a/src/components/funnel/templates/ListTemplate/ListTemplate.tsx b/src/components/funnel/templates/ListTemplate/ListTemplate.tsx index 6b646e9..ad76b1b 100644 --- a/src/components/funnel/templates/ListTemplate/ListTemplate.tsx +++ b/src/components/funnel/templates/ListTemplate/ListTemplate.tsx @@ -20,6 +20,7 @@ export interface ListTemplateProps { skipCheckChanges?: boolean ) => void; actionButtonProps?: ActionButtonProps; + showGradientBlur?: boolean; canGoBack: boolean; onBack: () => void; screenProgress?: { current: number; total: number }; @@ -37,6 +38,7 @@ export function ListTemplate({ selectedOptionIds, onSelectionChange, actionButtonProps, + showGradientBlur, canGoBack, onBack, screenProgress, @@ -119,6 +121,7 @@ export function ListTemplate({ { preset: "left", actionButton: actionButtonOptions, + showGradientBlur, } ); diff --git a/src/components/funnel/templates/layouts/TemplateLayout.tsx b/src/components/funnel/templates/layouts/TemplateLayout.tsx index db8205f..ef56211 100644 --- a/src/components/funnel/templates/layouts/TemplateLayout.tsx +++ b/src/components/funnel/templates/layouts/TemplateLayout.tsx @@ -56,6 +56,7 @@ interface TemplateLayoutProps { disabled: boolean; onClick: () => void; }; + showGradientBlur?: boolean; // Дополнительные props для BottomActionButton childrenAboveButton?: React.ReactNode; @@ -96,6 +97,7 @@ export function TemplateLayout({ size: "lg", }, actionButtonOptions, + showGradientBlur, childrenAboveButton, childrenUnderButton, childrenAboveTitle, @@ -124,6 +126,12 @@ export function TemplateLayout({ screen, actionButtonOptions, }) + : showGradientBlur + ? // Если нет кнопки, но нужен blur (для LIST экранов) + { + actionButtonProps: undefined, + showGradientBlur: true, + } : undefined; // 🎯 Автоматически создаем PrivacyTermsConsent с фиксированными настройками diff --git a/src/components/ui/MainButton/MainButton.tsx b/src/components/ui/MainButton/MainButton.tsx index a82d121..78e0181 100644 --- a/src/components/ui/MainButton/MainButton.tsx +++ b/src/components/ui/MainButton/MainButton.tsx @@ -16,7 +16,7 @@ const buttonVariants = cva( "pl-[26px] pr-[18px] py-[18px]", "transition-[background-color,border-color,color]", "duration-200", - "disabled:opacity-30", + "disabled:opacity-20", "border-2", "[-webkit-tap-highlight-color:transparent]", "[transform:translateZ(0)]" @@ -78,7 +78,7 @@ function MainButton({