Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/(verse)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { type ReactNode } from "react";
import Link from "next/link";
import { ArrowLeft, Sparkles } from "lucide-react";
import { CouncilThemeProvider } from "@/components/verse/CouncilThemeProvider";
import { HNeuronVisualizer } from "@/components/verse/HNeuronVisualizer";
import { FrictionPulseOverlay } from "@/components/verse/FrictionPulseOverlay";

export const dynamic = "force-dynamic";

Expand Down Expand Up @@ -43,7 +43,7 @@ export default function VerseLayout({ children }: { children: ReactNode }) {
</main>

{/* Global Visualizers */}
<HNeuronVisualizer />
<FrictionPulseOverlay />
</div>
</CouncilThemeProvider>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { useState, useEffect, useCallback } from "react";
import { motion, AnimatePresence } from "framer-motion";
import { usePersona } from "../providers/PersonaProvider";

interface HNeuronEvent {
interface FrictionPulseEvent {
id: string;
intensity: number;
message: string;
}

export function HNeuronVisualizer() {
const [event, setEvent] = useState<HNeuronEvent | null>(null);
export function FrictionPulseOverlay() {
const [event, setEvent] = useState<FrictionPulseEvent | null>(null);
const { persona } = usePersona();
const isExecutive = persona === "Executive";

Expand All @@ -29,8 +29,8 @@ export function HNeuronVisualizer() {
const customEvent = e as CustomEvent<{ message: string; intensity: number }>;
triggerFriction(customEvent.detail.message, customEvent.detail.intensity);
};
window.addEventListener("h-neuron-friction", handleFriction);
return () => window.removeEventListener("h-neuron-friction", handleFriction);
window.addEventListener("friction-pulse", handleFriction);
return () => window.removeEventListener("friction-pulse", handleFriction);
}, [triggerFriction]);

return (
Expand Down Expand Up @@ -110,15 +110,15 @@ export function HNeuronVisualizer() {
{/* Screen Shake (Tactical only) */}
{!isExecutive && (
<style jsx global>{`
@keyframes h-neuron-shake {
@keyframes friction-pulse-shake {
0% { transform: translate(0, 0); }
25% { transform: translate(5px, -5px); }
50% { transform: translate(-5px, 5px); }
75% { transform: translate(5px, 5px); }
100% { transform: translate(0, 0); }
}
.h-neuron-active body {
animation: h-neuron-shake 0.1s ease-in-out infinite;
.friction-pulse-active body {
animation: friction-pulse-shake 0.1s ease-in-out infinite;
}
`}</style>
)}
Expand All @@ -129,8 +129,8 @@ export function HNeuronVisualizer() {
}

// Global Trigger Helper
export const triggerHNeuron = (message: string, intensity: number = 1) => {
const event = new CustomEvent("h-neuron-friction", {
export const triggerFrictionPulse = (message: string, intensity: number = 1) => {
const event = new CustomEvent("friction-pulse", {
detail: { message, intensity },
});
window.dispatchEvent(event);
Expand Down