import React, { ChangeEventHandler, KeyboardEventHandler, useState } from 'react'; import { Box, Icon, IconButton, Icons, Input, Scroll, Switch, Text, toRem, } from 'folds'; import { isKeyHotkey } from 'is-hotkey'; import { useTranslation } from 'react-i18next'; import { Page, PageContent, PageHeader } from '../../../components/page'; import { SequenceCard } from '../../../components/sequence-card'; import { useSetting } from '../../../state/hooks/settings'; import { settingsAtom } from '../../../state/settings'; import { SettingTile } from '../../../components/setting-tile'; import { KeySymbol } from '../../../utils/key-symbol'; import { isMacOS } from '../../../utils/user-agent'; import { SequenceCardStyle } from '../styles.css'; function ThemeSelect() { // Theme switching is locked to dark while the Dawn redesign rolls out — Vojo // light is a separate plan. Kept as a read-only label so the existing // SettingTile layout in the Appearance section still renders. const { t } = useTranslation(); return ( {t('Settings.theme_dark')} ); } function PageZoomInput() { const [pageZoom, setPageZoom] = useSetting(settingsAtom, 'pageZoom'); const [currentZoom, setCurrentZoom] = useState(`${pageZoom}`); const handleZoomChange: ChangeEventHandler = (evt) => { setCurrentZoom(evt.target.value); }; const handleZoomEnter: KeyboardEventHandler = (evt) => { if (isKeyHotkey('escape', evt)) { evt.stopPropagation(); setCurrentZoom(pageZoom.toString()); } if ( isKeyHotkey('enter', evt) && 'value' in evt.target && typeof evt.target.value === 'string' ) { const newZoom = parseInt(evt.target.value, 10); if (Number.isNaN(newZoom)) return; const safeZoom = Math.max(Math.min(newZoom, 150), 75); setPageZoom(safeZoom); setCurrentZoom(safeZoom.toString()); } }; return ( %} outlined /> ); } function Appearance() { const { t } = useTranslation(); const [monochromeMode, setMonochromeMode] = useSetting(settingsAtom, 'monochromeMode'); const [twitterEmoji, setTwitterEmoji] = useSetting(settingsAtom, 'twitterEmoji'); return ( {t('Settings.appearance')} } /> } /> } /> } /> ); } function Editor() { const { t } = useTranslation(); const [enterForNewline, setEnterForNewline] = useSetting(settingsAtom, 'enterForNewline'); const [isMarkdown, setIsMarkdown] = useSetting(settingsAtom, 'isMarkdown'); const [hideActivity, setHideActivity] = useSetting(settingsAtom, 'hideActivity'); return ( {t('Settings.editor')} } /> } /> } /> ); } function Messages() { const { t } = useTranslation(); const [hideMembershipEvents, setHideMembershipEvents] = useSetting( settingsAtom, 'hideMembershipEvents' ); const [hideNickAvatarEvents, setHideNickAvatarEvents] = useSetting( settingsAtom, 'hideNickAvatarEvents' ); const [mediaAutoLoad, setMediaAutoLoad] = useSetting(settingsAtom, 'mediaAutoLoad'); const [urlPreview, setUrlPreview] = useSetting(settingsAtom, 'urlPreview'); const [encUrlPreview, setEncUrlPreview] = useSetting(settingsAtom, 'encUrlPreview'); const [showHiddenEvents, setShowHiddenEvents] = useSetting(settingsAtom, 'showHiddenEvents'); return ( {t('Settings.messages')} } /> } /> setMediaAutoLoad(!v)} /> } /> } /> } /> } /> ); } type GeneralProps = { requestClose: () => void; }; export function General({ requestClose }: GeneralProps) { const { t } = useTranslation(); return ( {t('Settings.general_title')} ); }