diff --git a/packages/web/src/components/modals/instanceSettingsPanels/StreamingPanel.tsx b/packages/web/src/components/modals/instanceSettingsPanels/StreamingPanel.tsx index c38f2b5d..af677f16 100644 --- a/packages/web/src/components/modals/instanceSettingsPanels/StreamingPanel.tsx +++ b/packages/web/src/components/modals/instanceSettingsPanels/StreamingPanel.tsx @@ -1,9 +1,12 @@ import { useState, useEffect } from 'react'; import { useSettingsStore } from '../../../stores/settingsStore'; import type { InstanceStreamingLimits } from '@backspace/shared'; - -const VALID_RESOLUTIONS = [540, 720, 1080] as const; -const VALID_FRAMERATES = [30, 45, 60] as const; +import { + STANDARD_FRAMERATES, + ALL_RESOLUTIONS, RESOLUTION_LABELS, + HIGH_END_RESOLUTION_THRESHOLD, HIGH_END_FRAMERATE_THRESHOLD, + type Resolution, +} from '@backspace/shared/src/constants'; function formatKbps(kbps: number): string { return kbps >= 1000 @@ -48,7 +51,7 @@ export function StreamingPanel() { setSaveError(''); }; - const toggleResolution = (res: number) => { + const toggleResolution = (res: number | 'native') => { const current = new Set(draft.allowedResolutions); if (current.has(res)) { if (current.size <= 1) return; @@ -56,7 +59,10 @@ export function StreamingPanel() { } else { current.add(res); } - setDraft({ ...draft, allowedResolutions: Array.from(current).sort((a, b) => a - b) }); + // Sort: numbers ascending, 'native' always last + const nums: (number | 'native')[] = Array.from(current).filter((r): r is number => r !== 'native').sort((a, b) => a - b); + if (current.has('native')) nums.push('native'); + setDraft({ ...draft, allowedResolutions: nums }); }; const toggleFramerate = (fps: number) => { @@ -160,14 +166,14 @@ export function StreamingPanel() {