"use client";
import * as React from "react";
import Component, { type Props, type State } from "@/components/ui/selection-context-menu";
const settings = { title: "A little less, but better." };
export const loopDuration = 6;
const ease = (x: number) => {
const n = Math.max(0, Math.min(1, x));
return n * n * (3 - 2 * n);
};
const pulse = (t: number, start: number, end: number) =>
ease((t - start) / 0.3) * (1 - ease((t - end) / 0.3));
// Pure timeline: export frame n by passing n / 60. No timers or network calls.
export function showcase(time: number): State {
const t = ((time % loopDuration) + loopDuration) % loopDuration;
const r = pulse(t, 0.6, 3.4);
return {
open: r > 0,
reveal: r,
active: 1,
selected: "Good design makes room for what matters.",
highlighted: t > 3.4 && t < 4.8,
notice: t > 3.4 && t < 4.8 ? "Passage highlighted locally." : "",
};
}
export default function Demo(props: any = {}) {
const { showcaseTime, ...incoming } = props;
const merged = { ...settings, ...incoming };
return (
<div className="w-full min-h-[460px] flex items-center justify-center p-4 sm:p-6 bg-background">
<Component
{...merged}
state={showcaseTime === undefined ? incoming.state : showcase(showcaseTime)}
seeking={showcaseTime !== undefined || incoming.seeking}
/>
</div>
);
}