diff --git a/apps/zoom-app/src/b/LookRows.jsx b/apps/zoom-app/src/b/LookRows.jsx new file mode 100644 index 0000000..716f2a9 --- /dev/null +++ b/apps/zoom-app/src/b/LookRows.jsx @@ -0,0 +1,58 @@ +import { ChevronRight, Image, Layers, Video, Volume2 } from 'lucide-react'; + +const ROW = + 'flex w-full items-center gap-2.5 rounded-[10px] border border-gray-200 bg-white px-3 py-2.5 text-left text-sm text-gray-900 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-blue-500'; + +/** Design B's names for the three display modes. */ +export const VIDEO_MODE_NOTES = Object.freeze({ + camera: 'Camera + timer', + card: 'Timer only', + stage: 'Full-screen timer', +}); + +/** + * "Look & sound" (the BLook board): one wide row per setting, each showing + * what it is set to now and opening only its own sheet. + * + * @param {{ + * video: string, + * cards: string, + * sounds: string, + * soundsLocked: boolean, + * between: string, + * onOpen: (sheet: 'video'|'cards'|'sounds'|'between') => void, + * }} props + */ +export default function LookRows({ video, cards, sounds, soundsLocked, between, onOpen }) { + const rows = [ + { id: 'video', label: 'On your video', note: video, Icon: Video }, + { id: 'cards', label: 'Cards', note: cards, Icon: Image }, + { id: 'sounds', label: 'Sounds', note: soundsLocked ? null : sounds, Icon: Volume2, pro: soundsLocked }, + { id: 'between', label: 'Between speeches', note: between, Icon: Layers }, + ]; + + return ( +
+

+ Look & sound +

+
+ {rows.map(({ id, label, note, Icon, pro }) => ( + + ))} +
+
+ ); +} diff --git a/apps/zoom-app/src/b/LookSheets.jsx b/apps/zoom-app/src/b/LookSheets.jsx new file mode 100644 index 0000000..89ecce4 --- /dev/null +++ b/apps/zoom-app/src/b/LookSheets.jsx @@ -0,0 +1,178 @@ +import { Check, Info } from 'lucide-react'; +import CardSetsPanel from '../components/CardSetsPanel'; +import SoundsPanel from '../components/SoundsPanel'; +import OwnBackgroundPicker from '../components/OwnBackgroundPicker'; +import { soundEngine } from '../hooks/useSounds'; +import Sheet from './Sheet'; + +const CHOICE = 'flex w-full items-center gap-3 rounded-xl px-3 text-left'; + +/** A 72×42 sketch of what the meeting sees, for the mode and background choices. */ +function Sketch({ kind }) { + const person = ( + <> + + + + ); + const base = 'relative h-[42px] w-[72px] flex-shrink-0 overflow-hidden rounded-md'; + if (kind === 'camera') return ; + if (kind === 'card') + return ( + + ); + if (kind === 'stage') + return ( + + ); + if (kind === 'card-idle') return ; + return ( +