Core Concepts
Time Representation Rules
ℹ️ Note
This is a capability invariant.
- Internal manager unit: seconds
- Fractional seconds: allowed
- Player contract I/O: seconds
- Hook/module state exchange: seconds
- UI formatting/parsing happens at edges only (e.g.,
HH:MM:SS.mmm) - Manager must never store milliseconds, frame numbers, or timecode strings
TrimRange
Represents selected media interval:
startTimeendTime- Derived:
duration = endTime - startTime
TrimState
Represents manager-owned capability state:
initialRangecurrent rangevideoDurationvalidationhistory(single-level in v1.1)
Selection Engine
Owns deterministic range transitions:
setStartTimesetEndTimemoveRangeresetundo
Validation Engine
Guarantees legal ranges:
startTime >= 0endTime <= videoDurationstartTime < endTime
⚠️ Warning
Validation failure must preserve prior valid range.
History Engine
v1.1 model:
- single previous snapshot
reset()saves current range to history before resetundo()restores the previous snapshot once
Playback Sync Engine
Ensures preview behavior respects selected range:
- at/after
endTime→ pause - seek back to
startTime
ℹ️ Note
Sync behavior is evaluated against player time updates, not UI events.