From d688c5890af664b83df1dc26a5e037d2087dfaa4 Mon Sep 17 00:00:00 2001 From: Oleg Proskurin Date: Thu, 4 Dec 2025 12:56:12 +0700 Subject: [PATCH] feat: working glow --- .../AnimatedGradientBorder.tsx | 0 .../_components/Emailformanimated.tsx | 98 +++++++++++++++++++ apps/landing/src/app/homepage/page.tsx | 5 +- 3 files changed, 102 insertions(+), 1 deletion(-) rename apps/landing/src/app/homepage/{components => _components}/AnimatedGradientBorder.tsx (100%) create mode 100644 apps/landing/src/app/homepage/_components/Emailformanimated.tsx diff --git a/apps/landing/src/app/homepage/components/AnimatedGradientBorder.tsx b/apps/landing/src/app/homepage/_components/AnimatedGradientBorder.tsx similarity index 100% rename from apps/landing/src/app/homepage/components/AnimatedGradientBorder.tsx rename to apps/landing/src/app/homepage/_components/AnimatedGradientBorder.tsx diff --git a/apps/landing/src/app/homepage/_components/Emailformanimated.tsx b/apps/landing/src/app/homepage/_components/Emailformanimated.tsx new file mode 100644 index 0000000..7ba9bba --- /dev/null +++ b/apps/landing/src/app/homepage/_components/Emailformanimated.tsx @@ -0,0 +1,98 @@ +import { useState, useEffect } from 'react'; + +export default function EmailFormDemo() { + const [email, setEmail] = useState(''); + const [isPropertyRegistered, setIsPropertyRegistered] = useState(false); + + // Register CSS property in component body (before render) + if (typeof window !== 'undefined' && 'CSS' in window && 'registerProperty' in CSS) { + try { + CSS.registerProperty({ + name: '--form-angle', + syntax: '', + initialValue: '0deg', + inherits: false, + }); + } catch (e) { + // Property may already be registered + } + } + + useEffect(() => { + // Trigger second render to add style tag + setIsPropertyRegistered(true); + }, []); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + alert(`Email submitted: ${email}`); + }; + + return ( + <> + {isPropertyRegistered && ( + + )} + +
+
+
+ setEmail(e.target.value)} + placeholder="your@email.com" + className="flex-1 px-4 py-3 bg-transparent border-none rounded-md text-white outline-none placeholder:text-white/40 focus:bg-white/[0.03]" + /> + +
+
+
+ + ); +} diff --git a/apps/landing/src/app/homepage/page.tsx b/apps/landing/src/app/homepage/page.tsx index 566aefc..9f5d974 100644 --- a/apps/landing/src/app/homepage/page.tsx +++ b/apps/landing/src/app/homepage/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; -import { AnimatedGradientBorder } from './components/AnimatedGradientBorder'; +import { AnimatedGradientBorder } from './_components/AnimatedGradientBorder'; import { Zap, Globe, @@ -35,6 +35,7 @@ import { Award, ArrowRight, } from 'lucide-react'; +import EmailFormDemo from './_components/Emailformanimated'; // ============================================================================ // STYLES (CSS-in-JS for custom styles not available in Tailwind) @@ -208,6 +209,8 @@ function HeroSection() {

Free early access. No credit card required.

+ + {/* Badges */}
{badges.map((badge, i) => (