Audited masking against the four-scope spec (groups, main timeline, clips, SVG-internal). Rule 2 was already correct; rules 1, 3, 4 needed fixes: - drawMaskedGroup now walks children bottom-up and applies each mask to the offscreen buffer immediately, so a mask only affects layers below it in the stack — layers above the mask render unmasked on top. - drawTrackGroup rewritten with an Item discriminated union collected bottom-up, then a single z-order loop renders/applies, replacing the old "collect all masks → apply at end" pattern. - Both clip-rendering sites (drawSceneFrame top-level clip path and drawTrackGroup's clip-child path) switched from drawLayers to drawMaskedGroup — previously a mask layer inside a clip was rendered as a regular shape instead of masking. - 5 new tests under "mask layers — rendering" cover the four-rule spec (group below-only, group negative below-only, clip-scoped mask, SVG-asset mask scoped to interior, clip-internal layers above mask unmasked). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
649 B
JSON
30 lines
649 B
JSON
{
|
|
"name": "ruwio",
|
|
"private": true,
|
|
"version": "1.2.4",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vue-tsc --noEmit && vite build",
|
|
"preview": "vite preview",
|
|
"type-check": "vue-tsc --noEmit",
|
|
"pack": "bash scripts/pack.sh"
|
|
},
|
|
"dependencies": {
|
|
"@phosphor-icons/vue": "^2.2.1",
|
|
"gifenc": "^1.0.3",
|
|
"konva": "^9.3.16",
|
|
"pinia": "^2.2.6",
|
|
"upng-js": "^2.1.0",
|
|
"vue": "^3.5.13",
|
|
"vue-konva": "^3.1.2"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.10.2",
|
|
"@vitejs/plugin-vue": "^5.2.1",
|
|
"typescript": "^5.6.3",
|
|
"vite": "^6.0.3",
|
|
"vue-tsc": "^2.1.10"
|
|
}
|
|
}
|