Parent Issue
Part of #74 — More controls for media in lightbox
Summary
Add new lightbox-specific settings to the existing /settings page under a new "Lightbox" section on the App Settings tab, placed after "Playback & Media". All other sub-issues in #74 depend on these settings.
New AppSettings Fields
// Added to AppSettings in src/types/settings.ts
// Lightbox: Fit & Zoom
lightboxFitMode: "fitBoth" | "fitWidth" | "fitHeight";
lightboxZoomMin: number; // Minimum zoom %, e.g. 25
lightboxZoomMax: number; // Maximum zoom %, e.g. 500
lightboxZoomStep: number; // Increment per +/- click, e.g. 25
// Lightbox: Controls Visibility
lightboxAutoHideControls: boolean;
lightboxAutoHideDelay: number; // Seconds before auto-hide, e.g. 3
Proposed Defaults
| Setting |
Default |
Range / Options |
lightboxFitMode |
"fitBoth" |
"fitBoth" | "fitWidth" | "fitHeight" |
lightboxZoomMin |
25 |
10–100 |
lightboxZoomMax |
500 |
100–1000 |
lightboxZoomStep |
25 |
5–100 |
lightboxAutoHideControls |
false |
boolean |
lightboxAutoHideDelay |
3 |
1–30 (seconds) |
Settings UI
Uses the same UI patterns as existing settings: dropdowns for fit mode, number inputs with min/max validation for zoom bounds and timer, toggle switch for auto-hide (delay input disabled when auto-hide is off).
Acceptance Criteria
Parent Issue
Part of #74 — More controls for media in lightbox
Summary
Add new lightbox-specific settings to the existing
/settingspage under a new "Lightbox" section on the App Settings tab, placed after "Playback & Media". All other sub-issues in #74 depend on these settings.New
AppSettingsFieldsProposed Defaults
lightboxFitMode"fitBoth""fitBoth"|"fitWidth"|"fitHeight"lightboxZoomMin25lightboxZoomMax500lightboxZoomStep25lightboxAutoHideControlsfalselightboxAutoHideDelay3Settings UI
Uses the same UI patterns as existing settings: dropdowns for fit mode, number inputs with min/max validation for zoom bounds and timer, toggle switch for auto-hide (delay input disabled when auto-hide is off).
Acceptance Criteria
AppSettingsinterface andDEFAULT_SETTINGSsettings.jsonand are consumed byLightbox.tsxsettings.jsonvia existing shallow-merge logic ingetSettings()