diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-05-02 01:33:32 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-05-02 03:27:23 +0200 |
| commit | 8b8d65b5091f4158af68fbad85cc74936302b07b (patch) | |
| tree | 53c5bb4ee0ec60ed2b9d87585230014229008cea /apps/web/src/masks/builtin | |
| parent | 23187b0b6a9f179bdb68578fc4bdaa8414b8316d (diff) | |
| download | opencut-8b8d65b5091f4158af68fbad85cc74936302b07b.tar.gz | |
refactor: collapse mask definition registry to a single keyed registry
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>
Diffstat (limited to 'apps/web/src/masks/builtin')
| -rw-r--r-- | apps/web/src/masks/builtin/definitions/index.ts | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/apps/web/src/masks/builtin/definitions/index.ts b/apps/web/src/masks/builtin/definitions/index.ts index 9f722876..5deb4e3f 100644 --- a/apps/web/src/masks/builtin/definitions/index.ts +++ b/apps/web/src/masks/builtin/definitions/index.ts @@ -1,6 +1,6 @@ import { - builtinMasksRegistry, - type BuiltinMaskDefinitionForRegistration, + masksRegistry, + type MaskDefinitionForRegistration, type MaskIconProps, } from "../../registry"; import { cinematicBarsMaskDefinition } from "./cinematic-bars"; @@ -11,6 +11,7 @@ import { rectangleMaskDefinition } from "./rectangle"; import { splitMaskDefinition } from "./split"; import { starMaskDefinition } from "./star"; import { textMaskDefinition } from "./text"; +import { freeformMaskDefinition } from "../../freeform/definition"; import { MinusSignIcon, PanelRightDashedIcon, @@ -20,23 +21,24 @@ import { DiamondIcon, StarsIcon, TextFontIcon, + PenToolAddIcon, } from "@hugeicons/core-free-icons"; function registerDefaultMask({ definition, icon, }: { - definition: BuiltinMaskDefinitionForRegistration; + definition: MaskDefinitionForRegistration; icon: MaskIconProps; }) { - if (builtinMasksRegistry.has(definition.type)) { + if (masksRegistry.has(definition.type)) { return; } - builtinMasksRegistry.registerMask({ definition, icon }); + masksRegistry.registerMask({ definition, icon }); } -export function registerBuiltinMasks(): void { +export function registerDefaultMasks(): void { registerDefaultMask({ definition: splitMaskDefinition, icon: { icon: PanelRightDashedIcon, strokeWidth: 1 }, @@ -69,4 +71,8 @@ export function registerBuiltinMasks(): void { definition: textMaskDefinition, icon: { icon: TextFontIcon }, }); + registerDefaultMask({ + definition: freeformMaskDefinition, + icon: { icon: PenToolAddIcon }, + }); } |
