Skip to content

Commit c0c3b8d

Browse files
committed
feat(studio): header logo, playbar cleanup, and I/O work-area markers
- Add Hyperframes icon mark to the studio header (left of project name) - Remove m:ss toggle button — click the timecode directly to switch modes - Remove frame jump input from controls bar — moved into ⌨ shortcuts panel - Replace Loop text button with a repeat icon - Collapse J/K/L shortcut badges into a single ⌨ icon that opens a panel - Shortcuts panel: Jump to frame, Work area I/O display, shortcuts reference - Implement I/O work-area markers (closes #807): - I / Shift+I: set / clear in-point at playhead - O / Shift+O: set / clear out-point at playhead - A: jump to in-point (or start); E: jump to out-point (or end) - Loop respects in/out boundaries for both forward and backward playback - Teal work-area band + tick markers rendered on the seek bar
1 parent 7703122 commit c0c3b8d

6 files changed

Lines changed: 387 additions & 67 deletions

File tree

.filesize-allowlist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
packages/studio/src/player/hooks/useTimelinePlayer.ts
22
packages/studio/src/hooks/useManifestPersistence.ts
3+
packages/studio/src/player/components/PlayerControls.tsx

packages/studio/src/components/StudioHeader.tsx

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,52 @@ export interface StudioHeaderProps {
1818
inspectorPanelActive: boolean;
1919
}
2020

21+
function HyperframesIcon({ size = 18 }: { size?: number }) {
22+
return (
23+
<svg
24+
width={size}
25+
height={Math.round(size * (42 / 74))}
26+
viewBox="190 -2 74 44"
27+
fill="none"
28+
xmlns="http://www.w3.org/2000/svg"
29+
aria-hidden="true"
30+
>
31+
<defs>
32+
<linearGradient
33+
id="hf-icon-g0"
34+
x1="225.869"
35+
y1="0"
36+
x2="222.845"
37+
y2="37.482"
38+
gradientUnits="userSpaceOnUse"
39+
>
40+
<stop stopColor="#06E3FA" />
41+
<stop offset="1" stopColor="#4FDB5E" />
42+
</linearGradient>
43+
<linearGradient
44+
id="hf-icon-g1"
45+
x1="230.87"
46+
y1="39"
47+
x2="244.661"
48+
y2="6.303"
49+
gradientUnits="userSpaceOnUse"
50+
>
51+
<stop stopColor="#06E3FA" />
52+
<stop offset="1" stopColor="#4FDB5E" />
53+
</linearGradient>
54+
</defs>
55+
<path
56+
d="M195.219 26.1937L213.529 38.9937C216.009 40.7237 220.239 38.7637 221.009 35.5337L228.419 4.33374C229.189 1.10374 225.879 -0.856262 222.589 0.873738L198.199 13.6737C192.649 16.5837 191.059 23.2837 195.219 26.1937Z"
57+
fill="url(#hf-icon-g0)"
58+
/>
59+
<path
60+
d="M256.97 25.9638L232.58 38.7638C229.28 40.4938 225.98 38.5338 226.75 35.3038L234.16 4.10376C234.93 0.873757 239.16 -1.08624 241.64 0.643757L259.95 13.4438C264.12 16.3538 262.52 23.0538 256.97 25.9638Z"
61+
fill="url(#hf-icon-g1)"
62+
/>
63+
</svg>
64+
);
65+
}
66+
2167
export function StudioHeader({
2268
captureFrameHref,
2369
captureFrameFilename,
@@ -32,8 +78,9 @@ export function StudioHeader({
3278

3379
return (
3480
<div className="flex items-center justify-between h-10 px-3 bg-neutral-900 border-b border-neutral-800 flex-shrink-0">
35-
{/* Left: project name */}
81+
{/* Left: logo + project name */}
3682
<div className="flex items-center gap-2">
83+
<HyperframesIcon size={28} />
3784
<span className="text-[11px] font-medium text-neutral-400">{projectId}</span>
3885
</div>
3986
{/* Right: toolbar buttons */}

0 commit comments

Comments
 (0)