From ac465034c1954b1d6acbca7be8fe04a26356b4e7 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sun, 9 Nov 2025 07:27:58 +0000 Subject: [PATCH] Create full-screen mobile ARM switcher modal cgen-5490629d08a74bb18f7f4645c91d42d3 --- client/components/ArmSwitcherModal.tsx | 280 +++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 client/components/ArmSwitcherModal.tsx diff --git a/client/components/ArmSwitcherModal.tsx b/client/components/ArmSwitcherModal.tsx new file mode 100644 index 00000000..cf104797 --- /dev/null +++ b/client/components/ArmSwitcherModal.tsx @@ -0,0 +1,280 @@ +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { ArrowLeft } from "lucide-react"; + +interface Arm { + id: string; + name: string; + label: string; + color: string; + bgColor: string; + bgGradient: string; + textColor: string; + href: string; +} + +const ARMS: Arm[] = [ + { + id: "labs", + name: "AeThex | Labs", + label: "Labs", + color: "#FBBF24", + bgColor: "bg-yellow-500/20", + bgGradient: "from-yellow-600 to-yellow-400", + textColor: "text-yellow-400", + href: "/labs", + }, + { + id: "gameforge", + name: "AeThex | GameForge", + label: "GameForge", + color: "#22C55E", + bgColor: "bg-green-500/20", + bgGradient: "from-green-600 to-green-400", + textColor: "text-green-400", + href: "/gameforge", + }, + { + id: "corp", + name: "AeThex | Corp", + label: "Corp", + color: "#3B82F6", + bgColor: "bg-blue-500/20", + bgGradient: "from-blue-600 to-blue-400", + textColor: "text-blue-400", + href: "/corp", + }, + { + id: "foundation", + name: "AeThex | Foundation", + label: "Foundation", + color: "#EF4444", + bgColor: "bg-red-500/20", + bgGradient: "from-red-600 to-red-400", + textColor: "text-red-400", + href: "/foundation", + }, + { + id: "devlink", + name: "AeThex | Dev-Link", + label: "Dev-Link", + color: "#06B6D4", + bgColor: "bg-cyan-500/20", + bgGradient: "from-cyan-600 to-cyan-400", + textColor: "text-cyan-400", + href: "/dev-link", + }, + { + id: "nexus", + name: "AeThex | Nexus", + label: "Nexus", + color: "#A855F7", + bgColor: "bg-purple-500/20", + bgGradient: "from-purple-600 to-purple-400", + textColor: "text-purple-400", + href: "/nexus", + }, +]; + +const LOGO_URLS: Record = { + labs: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F85fe7910cff6483db1ea99c154684844?format=webp&width=800", + gameforge: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fcd3534c1caa0497abfd44224040c6059?format=webp&width=800", + corp: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fae654ecc18b241bdab273893e8231970?format=webp&width=800", + foundation: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc02cb1bf5056479bbb3ea4bd91f0d472?format=webp&width=800", + devlink: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F9a96b43cbd7b49bb9d5434580319c793?format=webp&width=800", + nexus: + "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F6df123b87a144b1fb99894d94198d97b?format=webp&width=800", +}; + +const ARM_DESCRIPTIONS: Record = { + labs: "Research & Development - Pushing the boundaries of innovation", + gameforge: + "Game Development - Shipping games at the speed of thought with monthly cycles", + corp: "Enterprise Solutions - Consulting for large-scale transformations", + foundation: "Community & Education - Building open-source and talent pipelines", + devlink: + "Professional Networking - LinkedIn for Roblox developers and creators", + nexus: "Talent Marketplace - Cross-arm collaboration and opportunities", +}; + +interface ArmSwitcherModalProps { + isOpen: boolean; + onClose: () => void; +} + +export default function ArmSwitcherModal({ + isOpen, + onClose, +}: ArmSwitcherModalProps) { + const navigate = useNavigate(); + const [selectedArm, setSelectedArm] = useState(null); + + const handleProceed = () => { + if (selectedArm) { + const arm = ARMS.find((a) => a.id === selectedArm); + if (arm) { + navigate(arm.href); + onClose(); + setSelectedArm(null); + } + } + }; + + const handleBack = () => { + setSelectedArm(null); + onClose(); + }; + + const selectedArmData = selectedArm ? ARMS.find((a) => a.id === selectedArm) : null; + + if (!isOpen) return null; + + return ( +
+ {/* Full screen background */} +
+ + {/* Content */} +
+ {/* Header */} +
+ +

Choose Your Arm

+
+
+ + {/* Body - Show selected arm details or grid */} +
+ {!selectedArm ? ( + // Grid of all arms +
+ {ARMS.map((arm) => ( + + ))} +
+ ) : selectedArmData ? ( + // Selected arm detail view +
+ {/* Large logo */} +
+
+ {selectedArmData.label} +
+
+ + {/* Title and description */} +
+

+ {selectedArmData.label} +

+

+ {ARM_DESCRIPTIONS[selectedArmData.id]} +

+
+ + {/* Features */} +
+

+ What you'll get: +

+
    +
  • + + ✨ + + + Access to exclusive opportunities + +
  • +
  • + + 🚀 + + + Connect with like-minded creators + +
  • +
  • + + 🎯 + + + Discover resources tailored to your interests + +
  • +
+
+
+ ) : null} +
+ + {/* Footer - Back/Proceed buttons */} +
+ {selectedArm ? ( + <> + + + + ) : ( + + )} +
+
+
+ ); +}