summaryrefslogtreecommitdiff
path: root/apps/web/src
Commit message (Collapse)AuthorAgeFilesLines
* feat: freeze frame at playheadcashmere2026-07-265-9/+142
| | | | | | | | | | | Enable the timeline toolbar freeze-frame button: capture the composited canvas as PNG, add it as an image media asset, split the video element at the playhead, shift the right part by the freeze duration, and insert a 3-second image element in the gap. Adds RendererManager.captureFrame(), reused by createSnapshot(). Also adds the Nix devshell (flake.nix/flake.lock: bun + nodejs) and AGENTS.md repository guidelines.
* Merge branch 'domain-import'Maze Winther2026-05-021-27/+0
|\
| * docs: move NOTES.md fileMaze Winther2026-05-022-176/+149
| |
* | refactor: collapse mask definition registry to a single keyed registryMaze Winther2026-05-023-47/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The freeform mask was assembled on every getMaskDefinition("freeform") call, re-spreading params and injecting a wrong SquareIcon placeholder, with a type cast to suppress the structural mismatch. Root cause: MasksRegistry was keyed on BuiltinMaskType, so freeform had no entry. - Re-key MasksRegistry from BuiltinMaskType to MaskType - Register freeform alongside builtins in registerDefaultMasks, with PenToolAddIcon as its menu icon - getMaskDefinition and getMaskDefinitionsForMenu become plain registry lookups with no branching, no manual spreading, no cast - Rename RegisteredBuiltinMaskDefinition to RegisteredMaskDefinition and tighten computeParamUpdate return type to Partial<BaseMaskParams> Co-authored-by: Cursor <cursoragent@cursor.com>
* | refactor: remove dead tangent handle variantMaze Winther2026-05-023-49/+22
| | | | | | | | | | | | | | | | | | | | | | The { kind: "tangent" } MaskHandleId variant was never constructed — neither getFreeformDisplayHandles nor any other code ever produced a tangent handle object. The in/out control-arm branches in computeFreeformParamUpdate, the tangent case in maskHandleIdKey, and the CUSTOM_MASK_TANGENT_SIZE rendering path in mask-handles.tsx were all unreachable. Removed all four dead paths and removed "tangent" from MaskHandleKind. Co-authored-by: Cursor <cursoragent@cursor.com>
* | fix: address review findings in masks substrateMaze Winther2026-05-025-12/+116
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Remove dead ternary in getPreferredEdges (always returned undefined; the all-false object was never reached by Object.values().some(Boolean)) - Document why drawWithFeather descriptors zero the feather field in the compositor (analytical renderer handles softness itself; zeroing prevents a second JFA feather pass) - Remove legacyType from V30→V31 migration (not consumed anywhere; a down-migration can map type:"freeform" back to "custom" directly) - Add V30→V31 test coverage: skip-guard branches, freeform passthrough, elements without a masks array - Add snap tests for vertical-edge (bottom) and uniform-scale handle paths Co-authored-by: Cursor <cursoragent@cursor.com>
* | refactor: split builtin and freeform masksMaze Winther2026-05-0232-273/+508
| | | | | | | | Made-with: Cursor
* | refactor: type mask handle identifiersMaze Winther2026-05-0211-209/+252
| | | | | | | | Made-with: Cursor
* | refactor: make mask renderer dispatch explicitMaze Winther2026-05-0214-559/+660
| | | | | | | | Made-with: Cursor
* | refactor: split mask snap dispatchMaze Winther2026-05-024-45/+85
| | | | | | | | Made-with: Cursor
* | refactor: animate params over timeMaze Winther2026-05-0231-1085/+1397
| |
* | chore: cleanupMaze Winther2026-05-0210-272/+41
| |
* | refactor: unify element paramsMaze Winther2026-05-0253-1360/+2019
| |
* | chore: switch from biome to eslint + prettier; fix ton of lint issuesMaze Winther2026-05-02145-4475/+3092
| |
* | refactor: split animation helpers by domainMaze Winther2026-04-2655-1238/+2334
|\|
| * refactor: split animation helpers by domainMaze Winther2026-04-2643-1322/+1628
| |
| * refactor: centralize editor interaction stateMaze Winther2026-04-2535-4667/+5547
| | | | | | | | | | | | | | | | Move timeline and preview gestures into dedicated controllers so hooks stay thin around editor state and DOM events. This also routes drag and playback synchronization through manager APIs and reuses persistent wasm surfaces so scrubbing, seeking, and preview rendering stay in sync. Made-with: Cursor
| * fix: surface unsupported video codec on import, fix Input leaksMaze Winther2026-04-254-144/+165
| |
| * perf: improve rendering performance by ~20xMaze Winther2026-04-226-302/+641
| |
* | refactor: thinner hooksMaze Winther2026-04-2647-4240/+5331
| |
* | fix: linterMaze Winther2026-04-262-16/+23
| |
* | fix: follow-up to prev commitMaze Winther2026-04-261-1/+2
| |
* | fix: model editor time as wasm MediaTime ticks end-to-endMaze Winther2026-04-2679-511/+1589
|/
* chore: remove stale filesMaze Winther2026-04-224-699/+0
|
* refactor: migration run() and pure v1-to-v2 transformMaze Winther2026-04-2236-828/+990
|
* chore: formattingMaze Winther2026-04-227-37/+54
|
* fix: project loading thingMaze Winther2026-04-212-17/+43
|
* refactor: restructure files to their domains, new preview overlay system, ↵Maze Winther2026-04-20490-2371/+3564
| | | | and dep graph
* fix: WebGL frame rendering and opencut-wasm 0.2.8Maze Winther2026-04-193-36/+58
|
* fix: migrate commands to CommandResult selection contractMaze Winther2026-04-186-19/+51
|
* fix: default audio waveform color from timeline themeMaze Winther2026-04-182-2/+5
|
* feat: clip volume line and timeline waveform improvementsMaze Winther2026-04-1819-717/+1635
|
* feat: text / custom masks, fix preview pan, refactor selectionMaze Winther2026-04-1553-3634/+8080
|
* feat: history view in feedback popoverMaze Winther2026-04-151-30/+59
|
* chore: formattingMaze Winther2026-04-157-342/+357
|
* fix: audio waveform height in timelineMaze Winther2026-04-152-2/+2
|
* tests: deleteMaze Winther2026-04-151-391/+0
|
* review: fixesMaze Winther2026-04-152-39/+154
|
* feat: move/resize multiple elementsMaze Winther2026-04-1521-957/+2218
|
* fix: repair scene tracks broken by v23-to-v24 migrationMaze Winther2026-04-154-5/+161
|
* changelog: rephrasingMaze Winther2026-04-151-2/+2
|
* fix: remap split-element keybinding to splitMaze Winther2026-04-152-1/+22
|
* fix: skip unknown actions in keyboard shortcuts helpMaze Winther2026-04-151-0/+3
|
* tests: removeMaze Winther2026-04-151-144/+0
|
* fix: show changelog notice when stored version is missing or olderMaze Winther2026-04-151-12/+9
|
* feat: new-release notice and colocate changelog under domainMaze Winther2026-04-1513-9/+311
|
* fix: remove redundant "opencut" prefix from storage keyMaze Winther2026-04-151-1/+1
|
* chore: remove debugging throughout codebaseMaze Winther2026-04-1512-1106/+947
|
* feat: graph editor supports multiple properties at onceMaze Winther2026-04-153-512/+644
|
* feat: changelog now supports markdown within entriesMaze Winther2026-04-152-2/+30
|