import React from 'react'; import { AbsoluteFill, Easing, interpolate, useCurrentFrame } from 'remotion'; import { Card, G } from '../../_fixtures/Fixtures'; // exploded-view:整页 dashboard 带 3D 倾斜,咔地沿 Z 轴炸开——顶栏/侧栏/六卡 // 各自浮到不同深度悬停(近大而实、远略暗),层间透出投影;hold 一拍后 // 逆序咔哒合体,2f 震屏收口。 // // 节拍:0–24 静止建立(已倾斜)→ 24–59 错峰炸开(每层 14f ease-out-back) // → 悬停 → 90–123 逆序合体(每层 12f ease-in)→ 123 震屏 → 静止到 150 const EXPLODE = 24; // 炸开起始帧 const ASSEMBLE = 90; // 合体起始帧 const STAGGER = 3; // 层间错峰 const N = 8; // 可动层数(顶栏 + 侧栏 + 6 卡) const CLOSE = ASSEMBLE + (N - 1) * STAGGER + 12; // = 123,最后一层归位 // FakeDashboard variant A 的布局常量(绝对定位复刻) const SIDE_W = 220; const TOP_H = 72; const PAD = 36; const GAP = 28; const CARD_W = (1920 - SIDE_W - PAD * 2 - GAP * 2) / 3; // 524 const CARD_H = (1080 - TOP_H - PAD * 2 - GAP) / 2; // 454 type Layer = { key: string; x: number; y: number; w: number; h: number; z: number; // 炸开深度 60–320 order: number; // 错峰序 radius: number; node: React.ReactNode; }; const Sidebar: React.FC = () => (