import { defaultSettings, settingsMap, useSettings } from '../../settings.mjs'; import { themes } from '@strudel/codemirror'; import { ButtonGroup } from './Forms.jsx'; import { AudioDeviceSelector } from './AudioDeviceSelector.jsx'; function Checkbox({ label, value, onChange }) { return ( ); } function SelectInput({ value, options, onChange }) { return ( ); } function NumberSlider({ value, onChange, step = 1, ...rest }) { return (
onChange(Number(e.target.value))} {...rest} /> onChange(Number(e.target.value))} />
); } function FormItem({ label, children }) { return (
{children}
); } const themeOptions = Object.fromEntries(Object.keys(themes).map((k) => [k, k])); const fontFamilyOptions = { monospace: 'monospace', Courier: 'Courier', JetBrains: 'JetBrains', Hack: 'Hack', FiraCode: 'FiraCode', 'FiraCode-SemiBold': 'FiraCode SemiBold', teletext: 'teletext', mode7: 'mode7', BigBlueTerminal: 'BigBlueTerminal', x3270: 'x3270', Monocraft: 'Monocraft', PressStart: 'PressStart2P', 'we-come-in-peace': 'we-come-in-peace', galactico: 'galactico', }; export function SettingsTab({ started }) { const { theme, keybindings, isBracketClosingEnabled, isBracketMatchingEnabled, isLineNumbersDisplayed, isPatternHighlightingEnabled, isActiveLineHighlighted, isAutoCompletionEnabled, isTooltipEnabled, isFlashEnabled, isSyncEnabled, isLineWrappingEnabled, fontSize, fontFamily, panelPosition, audioDeviceName, } = useSettings(); return (
{AudioContext.prototype.setSinkId != null && ( settingsMap.setKey('audioDeviceName', audioDeviceName)} /> )} settingsMap.setKey('theme', theme)} />
settingsMap.setKey('fontFamily', fontFamily)} /> settingsMap.setKey('fontSize', fontSize)} min={10} max={40} step={2} />
settingsMap.setKey('keybindings', keybindings)} items={{ codemirror: 'Codemirror', vim: 'Vim', emacs: 'Emacs', vscode: 'VSCode' }} > settingsMap.setKey('panelPosition', value)} items={{ bottom: 'Bottom', right: 'Right' }} > settingsMap.setKey('isBracketMatchingEnabled', cbEvent.target.checked)} value={isBracketMatchingEnabled} /> settingsMap.setKey('isBracketClosingEnabled', cbEvent.target.checked)} value={isBracketClosingEnabled} /> settingsMap.setKey('isLineNumbersDisplayed', cbEvent.target.checked)} value={isLineNumbersDisplayed} /> settingsMap.setKey('isActiveLineHighlighted', cbEvent.target.checked)} value={isActiveLineHighlighted} /> settingsMap.setKey('isPatternHighlightingEnabled', cbEvent.target.checked)} value={isPatternHighlightingEnabled} /> settingsMap.setKey('isAutoCompletionEnabled', cbEvent.target.checked)} value={isAutoCompletionEnabled} /> settingsMap.setKey('isTooltipEnabled', cbEvent.target.checked)} value={isTooltipEnabled} /> settingsMap.setKey('isLineWrappingEnabled', cbEvent.target.checked)} value={isLineWrappingEnabled} /> settingsMap.setKey('isFlashEnabled', cbEvent.target.checked)} value={isFlashEnabled} /> { if (confirm('Changing this setting requires the window to reload itself. OK?')) { settingsMap.setKey('isSyncEnabled', cbEvent.target.checked); window.location.reload(); } }} value={isSyncEnabled} /> Try clicking the logo in the top left!
); }