mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
replay panel tweaking
This commit is contained in:
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
@@ -11,8 +11,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="Multi Roomba Rover" />
|
<meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" />
|
||||||
<title>Multi Roomba Rover</title>
|
<title>Multi Roomba Rover</title>
|
||||||
<script type="module" crossorigin src="/assets/index-FaKr6Sxz.js"></script>
|
<script type="module" crossorigin src="/assets/index-Cvk-2BVU.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/assets/index-DAAnNTU0.css">
|
<link rel="stylesheet" crossorigin href="/assets/index-DPKQJjsh.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export default function ControlSummary({ showRoster = true }) {
|
|||||||
</div>
|
</div>
|
||||||
{showRoster ? (
|
{showRoster ? (
|
||||||
<div className="grid gap-0.5 md:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)]">
|
<div className="grid gap-0.5 md:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)]">
|
||||||
<div className="aspect-square">
|
<div>
|
||||||
<ReplaySourcesPanel />
|
<ReplaySourcesPanel />
|
||||||
</div>
|
</div>
|
||||||
<RoverRosterPanel />
|
<RoverRosterPanel />
|
||||||
|
|||||||
@@ -97,31 +97,25 @@ export default function ReplaySourcesPanel({ panelId = 'replay-sources' }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="panel h-full w-full">
|
<section className="panel-section p-0.75 text-sm">
|
||||||
<div className="flex h-full flex-col gap-0.5 p-0.75 text-sm">
|
<header className="panel-muted flex items-center justify-between text-xs uppercase tracking-wide">
|
||||||
<header className="flex items-center justify-between text-slate-300">
|
<span>Replay Sources</span>
|
||||||
<span className="text-xs uppercase tracking-wide text-slate-400">Replay Sources</span>
|
<span>{sources.length}</span>
|
||||||
<span className="text-xs text-slate-500">{sources.length}</span>
|
</header>
|
||||||
</header>
|
<div className="space-y-0.5">
|
||||||
<div className="flex-1 overflow-auto pr-0.5">
|
<GroupList title="Rovers" items={grouped.rovers} selected={selected} onToggle={toggleKey} />
|
||||||
<GroupList title="Rovers" items={grouped.rovers} selected={selected} onToggle={toggleKey} />
|
<GroupList title="Room Cams" items={grouped.rooms} selected={selected} onToggle={toggleKey} />
|
||||||
<GroupList title="Room Cams" items={grouped.rooms} selected={selected} onToggle={toggleKey} />
|
</div>
|
||||||
</div>
|
<div className="space-y-0.25">
|
||||||
<div className="space-y-0.25">
|
<button
|
||||||
<button
|
type="button"
|
||||||
type="button"
|
className="button-dark w-full text-xs disabled:opacity-40"
|
||||||
className={`w-full rounded border px-1 py-0.5 text-xs ${
|
onClick={handleReplay}
|
||||||
replayDisabled
|
disabled={replayDisabled}
|
||||||
? 'border-slate-700 text-slate-500'
|
>
|
||||||
: 'border-slate-500 text-slate-200 hover:border-slate-300 hover:text-white'
|
{remainingMs > 0 ? `Replay (${Math.ceil(remainingMs / 1000)}s)` : busy ? 'Replay…' : 'Replay'}
|
||||||
}`}
|
</button>
|
||||||
onClick={handleReplay}
|
{error ? <div className="text-xs text-amber-400">{error}</div> : null}
|
||||||
disabled={replayDisabled}
|
|
||||||
>
|
|
||||||
{remainingMs > 0 ? `Replay (${Math.ceil(remainingMs / 1000)}s)` : busy ? 'Replay…' : 'Replay'}
|
|
||||||
</button>
|
|
||||||
{error ? <div className="text-xs text-amber-400">{error}</div> : null}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
@@ -130,11 +124,11 @@ export default function ReplaySourcesPanel({ panelId = 'replay-sources' }) {
|
|||||||
function GroupList({ title, items, selected, onToggle }) {
|
function GroupList({ title, items, selected, onToggle }) {
|
||||||
if (!items.length) return null;
|
if (!items.length) return null;
|
||||||
return (
|
return (
|
||||||
<div className="mb-0.5 space-y-0.25">
|
<div className="space-y-0.25">
|
||||||
<div className="text-xs uppercase text-slate-500">{title}</div>
|
<div className="panel-muted text-xs uppercase">{title}</div>
|
||||||
<div className="space-y-0.25">
|
<div className="space-y-0.25">
|
||||||
{items.map((item) => (
|
{items.map((item) => (
|
||||||
<label key={item.key} className="flex items-center gap-0.5 text-xs text-slate-200">
|
<label key={item.key} className="surface flex items-center gap-0.5 text-xs">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
checked={selected.includes(item.key)}
|
checked={selected.includes(item.key)}
|
||||||
|
|||||||
Reference in New Issue
Block a user