feat(slideshow): gate behind a feature flag + move globals to a Settings tab

- New `slideshow` feature flag (backend KNOWN_FLAGS/DEFAULT_FLAGS, frontend
  FeatureKey + context default, a toggle card under Settings -> Features -> Core).
  Default off; strictly opt-in.
- Move the global watermark defaults off the Event Types page into a dedicated
  Settings -> Slideshow tab (new SlideshowSettingsPage), shown only when the flag
  is on.
- Gate the per-event Live Slideshow card and the per-event-type preset section
  behind the flag too (and stop writing a type preset when it's off).
- en/de strings for the feature card + settings tab.
This commit is contained in:
Luca
2026-06-20 03:08:04 +02:00
parent db8388c79e
commit 69367b45be
10 changed files with 94 additions and 12 deletions
@@ -22,6 +22,7 @@ import {
ScanLine,
Wallet,
FolderKanban,
MonitorPlay,
} from 'lucide-react';
import { useTranslation } from 'react-i18next';
import { Button, Card } from '../../../components/common';
@@ -116,6 +117,21 @@ export const FeaturesTab: React.FC = () => {
"Galleries are the foundation of PicPeak and can't be turned off.",
)}
/>
<FeatureCard
icon={MonitorPlay}
title={t('settings.features.slideshow.title', 'Live Slideshow')}
description={t(
'settings.features.slideshow.description',
'A separate fullscreen "Diashow" link per event for projectors at live events — auto-picks-up new uploads, with per-event-type presets and global watermark defaults under Settings → Slideshow.',
)}
status="new"
statusLabel={statusLabel('new')}
sidebarHidden
sidebarHiddenLabel={sidebarHiddenLabel}
enabled={staged.slideshow}
onToggle={(next) => setFlag('slideshow', next)}
/>
</Section>
{/* Clients (#354 follow-up). Visual grouping for the CRM-area