revert macro-clips button feature (keep markers + scripts)

The button authoring ended up too far from the intended model after
three correction passes. Pulling it out entirely so we can rebuild
from a clean spec. Markers, script tracks, script frames, the Action
editor, the Script DSL and the runtime for all of the above stay —
they work.

Removed:
- types: ButtonState, StateTransition, ButtonHitArea, ButtonClip,
  ButtonInstance, setButtonState/setButtonDisabled Action variants,
  Scene.buttonClips/buttonInstances
- store: activeButtonClip* getters, all add/remove/setButton* actions,
  seedDefaultButtonClip, enterButtonEdit/setActiveButtonState/
  exitButtonEdit, button-label resolution in actionRuntime
- useButtonRuntime composable, buttonBlend helper,
  ButtonInstanceDialog, sidebar Buttons section, Timeline button
  rendering + pointer handlers, CanvasStage button rendering +
  pointer state machine, exportPlayer button runtime + hit-testing
- DSL commands state/enable/disable and their parse errors
- 35 button-related tests + helpers; stale testing doc; stale design
  doc

Re-applied three uncommitted fixes that were unrelated to the button
work:
- clicking a marker no longer jumps the playhead (only drag / dblclick
  act on it)
- script tracks get a right-click context menu (rename + delete,
  color in the existing palette)
- onTracksPointerDown excludes .script-lane / .script-frame so
  clicks on empty lanes or on frame dots reach the frame-open path
  instead of being swallowed by box-select pointer capture

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
thandClaude Opus 4.7 committed 2026-04-20 23:37:49 +02:00
1 parent 616973b0fa
commit 31604052ca
16 files changed
+84 -2809

No files matched your search

-39
View File
@@ -95,25 +95,6 @@ export const en = {
message: 'The clip and all placed instances will be removed.',
confirm: 'Delete',
},
buttons: 'Buttons',
buttonSubtitle: 'Button · 4 states',
noButtons: 'No buttons yet',
createButtonTooltip: 'Create new button',
newButtonDialog: {
title: 'New button',
message: 'Button name:',
default: 'Button',
confirm: 'Create',
},
renameButtonDialog: {
title: 'Rename button',
confirm: 'Apply',
},
deleteButtonDialog: {
title: 'Delete button?',
message: 'The button and all placed instances will be removed.',
confirm: 'Delete',
},
},
properties: {
@@ -385,7 +366,6 @@ export const en = {
moveUp: 'Move up',
moveDown: 'Move down',
noMarkers: 'No markers defined',
noButtons: 'No labeled button instances',
type: {
play: 'Play',
pause: 'Pause',
@@ -393,17 +373,12 @@ export const en = {
jumpTo: 'Jump to time',
jumpToFrame: 'Jump to frame',
jumpToMarker: 'Jump to marker',
setButtonState: 'Set button state',
setButtonDisabled: 'Set button disabled',
script: 'Run script',
},
param: {
time: 'Seconds',
frame: 'Frame',
marker: 'Marker',
button: 'Button',
state: 'State',
disabled: 'Disabled',
source: 'Script source',
},
},
@@ -415,20 +390,6 @@ export const en = {
remove: 'Delete frame',
done: 'Done',
},
buttonInstanceDialog: {
title: 'Button instance',
clipName: 'Button',
label: 'Label',
labelPlaceholder: 'e.g. playButton',
labelCollision: 'Label "{name}" is already used by another button instance.',
disabled: 'Start disabled',
onClick: 'On click',
transitions: 'Transitions',
transitionsHint: '(shared by all instances of this button)',
addTransition: 'Add transition',
remove: 'Delete instance',
done: 'Done',
},
} as const
export type Messages = typeof en