Repository navigation
Slice 9 — Themes (Classic, Energetic, Plain) (#10) - #31
Merged
Merged
Conversation
…tings. - THEMES record and applyTheme() in timeline-core/settings - KenBurnsMode type with 'zoom-in-only' for Energetic theme - Planner selects zoom-in-only KB presets when mode is set Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Schema: themeName persisted in slideshow.json - App: tracks theme state, applies theme settings on selection - GlobalSettingsPanel: three-button theme picker with active highlight - Switching individual settings clears active theme selection Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #10
Summary
THEMESrecord intimeline-core/settings.ts): Classic (crossfade, Ken Burns, 4s), Energetic (cut, Ken Burns zoom-in-only, 2s), Plain (cut, no Ken Burns, 5s)kenBurnsMode?: 'alternate' | 'zoom-in-only'added toGlobalSettings; planner selects zoom-in-only KB presets when setapplyTheme(name)returns a fresh copy of the theme settingsGlobalSettingsPanel; active theme highlighted; manual settings edit clears active selectionthemeNamepersisted inslideshow.jsonand restored on project openAcceptance criteria
THEMESpresets (transition type, Ken Burns, pacing) and by Playwright smoke check confirming settings panel updates correctlyglobalSettings; per-slideoverridesare untouchedTHEMES.plain = { transitionType: 'cut', kenBurns: false, imageDurationSecs: 5 }; verified by unit test and planner behavior; HITL aesthetics sign-off required before mergeApproach
Themes are purely data — no special-cased code paths. A theme is a
GlobalSettingsobject; applying one callssetGlobalSettings(applyTheme(name))(full replacement, not merge), so no stale fields survive a theme switch.kenBurnsModeflows through the existingresolve()cascade.Code review verdict
APPROVE — zero blocking findings from
--effort highreview. Both candidate concerns (stalekenBurnsModeon theme switch, invalidthemeNamecrash on load) were REFUTED: theme application does a full state replacement, andapplyThemeis never called during project load.Screenshot
Theme selector visible in settings panel; Energetic active (blue highlight), Transition = Cut, Duration = 2s:
Follow-ups noted
kenBurnsModeindependently of themes (zoom-in-only is only reachable via Energetic theme); fine for v1 since it's an aesthetic preference