add activities tab, make replay popup smaller and muted

This commit is contained in:
legop3
2026-06-13 21:53:12 -04:00
parent 61ace6e7c4
commit 619d334758
9 changed files with 155 additions and 134 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -12,8 +12,8 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="Roomba Rover" /> <meta name="apple-mobile-web-app-title" content="Roomba Rover" />
<title>Roomba Rover</title> <title>Roomba Rover</title>
<script type="module" crossorigin src="/assets/index-Dmdzc1Vt.js"></script> <script type="module" crossorigin src="/assets/index-D7L_pr9D.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DSZycrrG.css"> <link rel="stylesheet" crossorigin href="/assets/index-CjmiVAqR.css">
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
+8 -2
View File
@@ -126,6 +126,7 @@ function MobileFeatureTabs({
<Tabs defaultTab="chat" currentTab={activeTab} onTabChange={setActiveTab}> <Tabs defaultTab="chat" currentTab={activeTab} onTabChange={setActiveTab}>
<TabList> <TabList>
<Tab id="chat">Chat</Tab> <Tab id="chat">Chat</Tab>
<Tab id="activities">Activities</Tab>
<Tab id="vip" highlight={vipClipPlaying ? 'green' : vipMicActive ? 'pink' : 'none'}> <Tab id="vip" highlight={vipClipPlaying ? 'green' : vipMicActive ? 'pink' : 'none'}>
<span className="inline-flex items-center gap-0.5"> <span className="inline-flex items-center gap-0.5">
<span>VIP</span> <span>VIP</span>
@@ -155,6 +156,13 @@ function MobileFeatureTabs({
</div> </div>
</div> </div>
</TabPanel> </TabPanel>
{/* activities tab */}
<TabPanel id="activities">
<div className={`flex flex-col ${themeGapClass}`}>
<ButtonBoxPanel />
<KinectPanel />
</div>
</TabPanel>
<TabPanel id="vip" keepMounted> <TabPanel id="vip" keepMounted>
<VipPanel isActive={activeTab === 'vip'} /> <VipPanel isActive={activeTab === 'vip'} />
</TabPanel> </TabPanel>
@@ -162,9 +170,7 @@ function MobileFeatureTabs({
<div className={themeStackClass}> <div className={themeStackClass}>
{/* {showTelemetry ? <TelemetryPanel /> : null} */} {/* {showTelemetry ? <TelemetryPanel /> : null} */}
<HomeAssistantControls /> <HomeAssistantControls />
<ButtonBoxPanel />
<RoomCameraPanel panelId={roomPanelId} /> <RoomCameraPanel panelId={roomPanelId} />
<KinectPanel />
</div> </div>
</TabPanel> </TabPanel>
<TabPanel id="help"> <TabPanel id="help">
@@ -121,11 +121,12 @@ export default function ReplayReadyPopup({ replay, onClose, variant = 'modal' })
autoPlay autoPlay
preload="auto" preload="auto"
playsInline playsInline
muted
{...videoLifecycleProps} {...videoLifecycleProps}
// The floating panel is intentionally compact because it appears for users who // The floating panel is intentionally compact because it appears for users who
// did not ask for the replay. It still loads the video immediately, but its // did not ask for the replay. It still loads the video immediately, but its
// bounded height prevents the floating card from covering too much of the UI. // bounded height prevents the floating card from covering too much of the UI.
className="aspect-video max-h-[24rem] w-full bg-black" className="aspect-video max-h-[14rem] w-full bg-black"
/> />
</div> </div>
</CardFrame> </CardFrame>
@@ -221,7 +221,7 @@ export default function ReplaySourcesPanel({ panelId = 'replay-sources', fillHei
return ( return (
<div className={`relative ${fillHeight ? 'flex h-full min-h-0 flex-col' : ''}`}> <div className={`relative ${fillHeight ? 'flex h-full min-h-0 flex-col' : ''}`}>
{showPanelReplay ? ( {showPanelReplay ? (
<div className="absolute bottom-[calc(100%+0.125rem)] left-1/2 z-[70] w-[min(42rem,calc(100vw-1rem))] -translate-x-1/2"> <div className="absolute bottom-[calc(100%+0.125rem)] left-1/2 z-[70] w-[min(20rem,calc(100vw-1rem))] -translate-x-1/2">
<ReplayReadyPopup <ReplayReadyPopup
replay={latestReplay} replay={latestReplay}
variant="floating-panel" variant="floating-panel"
+14 -1
View File
@@ -253,6 +253,7 @@ export default function RightPaneTabs({ layout, onOpenHelpOverlay }) {
<Tabs defaultTab="telemetry" currentTab={activeTab} onTabChange={setActiveTab}> <Tabs defaultTab="telemetry" currentTab={activeTab} onTabChange={setActiveTab}>
<TabList> <TabList>
<Tab id="telemetry">Controls</Tab> <Tab id="telemetry">Controls</Tab>
<Tab id="activities">Activities</Tab>
<Tab id="vip" highlight={vipClipPlaying ? 'green' : vipMicActive ? 'pink' : 'none'}> <Tab id="vip" highlight={vipClipPlaying ? 'green' : vipMicActive ? 'pink' : 'none'}>
<span className="inline-flex items-center gap-2"> <span className="inline-flex items-center gap-2">
<span>VIP</span> <span>VIP</span>
@@ -309,17 +310,29 @@ export default function RightPaneTabs({ layout, onOpenHelpOverlay }) {
</div> </div>
</div> </div>
<HomeAssistantControls /> <HomeAssistantControls />
<ButtonBoxPanel />
<RoomCameraPanel defaultOrientation="horizontal" panelId="rightpane-telemetry" /> <RoomCameraPanel defaultOrientation="horizontal" panelId="rightpane-telemetry" />
</div>
</TabPanel>
{/* activities tab */}
<TabPanel id="activities">
<div className={`flex flex-col ${themeGapClass}`}>
<ButtonBoxPanel />
<KinectPanel /> <KinectPanel />
</div> </div>
</TabPanel> </TabPanel>
{/* VIP tab */}
<TabPanel id="vip" keepMounted> <TabPanel id="vip" keepMounted>
<VipPanel isActive={activeTab === 'vip'} /> <VipPanel isActive={activeTab === 'vip'} />
</TabPanel> </TabPanel>
{/* help tab */}
<TabPanel id="help"> <TabPanel id="help">
<HelpPanel layout={layout} onOpenOverlay={onOpenHelpOverlay} /> <HelpPanel layout={layout} onOpenOverlay={onOpenHelpOverlay} />
</TabPanel> </TabPanel>
{/* settings tab */}
<TabPanel id="settings"> <TabPanel id="settings">
<SettingsPanel /> <SettingsPanel />
</TabPanel> </TabPanel>
+1
View File
@@ -26,6 +26,7 @@ const TAB_HIGHLIGHTS = {
none: '', none: '',
pink: 'bg-pink-500 text-white border-pink-200 hover:bg-pink-400', pink: 'bg-pink-500 text-white border-pink-200 hover:bg-pink-400',
green: 'bg-emerald-500 text-white border-emerald-200 hover:bg-emerald-400', green: 'bg-emerald-500 text-white border-emerald-200 hover:bg-emerald-400',
pinkblue: 'bg-gradient-to-r from-lime-800 to-teal-800'
}; };
const DEFAULT_VARIANT = 'primary'; const DEFAULT_VARIANT = 'primary';