29 lines
856 B
TypeScript
29 lines
856 B
TypeScript
"use client";
|
|
|
|
import { useContext } from "react";
|
|
import { Slot } from "@radix-ui/react-slot";
|
|
import { NarrativeContext } from "./narrative-provider.tsx";
|
|
import cn from "@bureaudouble/outils/cn.ts";
|
|
import { gameStateToVariantState } from "./persona-styles.ts";
|
|
|
|
export const ShellProvider: React.FC<
|
|
React.BaseHTMLAttributes<HTMLDivElement> & {
|
|
variant: "classical" | "terminal";
|
|
asChild?: boolean;
|
|
}
|
|
> = (
|
|
{ asChild = false, variant, ...props },
|
|
) => {
|
|
const Comp = asChild ? Slot : "div";
|
|
const context = useContext(NarrativeContext);
|
|
const gameState = context?.gameState;
|
|
const variantState = gameState ? gameStateToVariantState(gameState) : null;
|
|
|
|
return (
|
|
<Comp
|
|
{...props}
|
|
data-arousal-peak-potential={variantState?.arousalPeakPotential}
|
|
className={cn(gameState?.personaId ?? variant)}
|
|
/>
|
|
);
|
|
};
|