client/settings/disable motion: add an option to allow transitions and animations to be disabled

This commit is contained in:
Adorian Doran 2025-08-22 20:32:08 +03:00
parent 4c8da70ef3
commit 03681d23c5
6 changed files with 20 additions and 1 deletions

View file

@ -88,6 +88,7 @@ export default function AppearanceSettings() {
<ApplicationTheme />
{overrideThemeFonts === "true" && <Fonts />}
{isElectron() && <ElectronIntegration /> }
<Performance />
<MaxContentWidth />
<RelatedSettings items={[
{
@ -245,6 +246,20 @@ function ElectronIntegration() {
)
}
function Performance() {
const [ motionEnabled, setMotionEnabled ] = useTriliumOptionBool("motionEnabled", true);
return <OptionsSection title="Performance">
<FormGroup name="motion-enabled">
<FormCheckbox
label={"Use transitions and animations"}
currentValue={motionEnabled} onChange={setMotionEnabled}
/>
</FormGroup>
</OptionsSection>
}
function MaxContentWidth() {
const [ maxContentWidth, setMaxContentWidth ] = useTriliumOption("maxContentWidth");

View file

@ -9,7 +9,7 @@
<link rel="manifest" crossorigin="use-credentials" href="manifest.webmanifest">
<title>Trilium Notes</title>
</head>
<body class="desktop heading-style-<%= headingStyle %> layout-<%= layoutOrientation %> platform-<%= platform %> <%= isElectron ? 'electron' : '' %> <%= hasNativeTitleBar ? 'native-titlebar' : '' %> <%= hasBackgroundEffects ? 'background-effects' : '' %>">
<body class="desktop heading-style-<%= headingStyle %> layout-<%= layoutOrientation %> platform-<%= platform %> <%= isElectron ? 'electron' : '' %> <%= hasNativeTitleBar ? 'native-titlebar' : '' %> <%= hasBackgroundEffects ? 'background-effects' : '' %> <%= motionEnabled ? '' : 'motion-disabled' %>">
<noscript><%= t("javascript-required") %></noscript>
<script>

View file

@ -63,6 +63,7 @@ const ALLOWED_OPTIONS = new Set<OptionNames>([
"dailyBackupEnabled",
"weeklyBackupEnabled",
"monthlyBackupEnabled",
"motionEnabled",
"maxContentWidth",
"compressImages",
"downloadImagesAutomatically",

View file

@ -53,6 +53,7 @@ function index(req: Request, res: Response) {
isDev,
isMainWindow: view === "mobile" ? true : !req.query.extraWindow,
isProtectedSessionAvailable: protectedSessionService.isProtectedSessionAvailable(),
motionEnabled: options.motionEnabled === "true",
maxContentWidth: Math.max(640, parseInt(options.maxContentWidth)),
triliumVersion: packageJson.version,
assetPath: assetPath,

View file

@ -152,6 +152,7 @@ const defaultOptions: DefaultOption[] = [
},
isSynced: false
},
{ name: "motionEnabled", value: "true", isSynced: false },
// Internationalization
{ name: "locale", value: "en", isSynced: true },

View file

@ -93,6 +93,7 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions<KeyboardActi
// Appearance
splitEditorOrientation: "horziontal" | "vertical";
motionEnabled: boolean;
codeNoteTheme: string;
initialized: boolean;