From f31084baa72964718909e5eb463bd77876a127bc Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Mon, 29 Dec 2025 12:31:14 +0500 Subject: [PATCH] mobile: configurable default line height setting --- .../mobile/app/screens/editor/tiptap/types.ts | 1 + .../editor/tiptap/use-editor-events.tsx | 17 +++++++++++------ .../app/screens/settings/settings-data.tsx | 12 +++++++++++- apps/mobile/app/stores/use-setting-store.ts | 6 +++++- apps/mobile/app/utils/constants.ts | 6 ++++++ apps/mobile/fonts/MaterialCommunityIcons.ttf | Bin 25552 -> 25412 bytes apps/mobile/scripts/optimize-fonts.mjs | 3 ++- .../editor-mobile/src/components/editor.tsx | 3 ++- .../editor-mobile/src/hooks/useSettings.ts | 5 +++-- packages/editor-mobile/src/utils/index.ts | 1 + packages/intl/locale/en.po | 4 ++-- packages/intl/locale/pseudo-LOCALE.po | 4 ++-- 12 files changed, 46 insertions(+), 16 deletions(-) diff --git a/apps/mobile/app/screens/editor/tiptap/types.ts b/apps/mobile/app/screens/editor/tiptap/types.ts index d40cf1dee..b373fcf37 100644 --- a/apps/mobile/app/screens/editor/tiptap/types.ts +++ b/apps/mobile/app/screens/editor/tiptap/types.ts @@ -60,6 +60,7 @@ export type Settings = { markdownShortcuts: boolean; features: Record; loggedIn: boolean; + defaultLineHeight: number; }; export type EditorProps = { diff --git a/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx b/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx index 1ff484c9c..dbb3dd44f 100644 --- a/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx +++ b/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx @@ -159,10 +159,13 @@ export const useEditorEvents = ( const fullscreen = useSettingStore((state) => state.fullscreen); const corsProxy = useSettingStore((state) => state.settings.corsProxy); const loading = useSettingStore((state) => state.isAppLoading); - const [dateFormat, timeFormat] = useSettingStore((state) => [ - state.dateFormat, - state.timeFormat - ]); + const [dateFormat, timeFormat, defaultLineHeight] = useSettingStore( + (state) => [ + state.dateFormat, + state.timeFormat, + state.settings.defaultLineHeight + ] + ); const handleBack = useRef(undefined); const loggedIn = useUserStore((state) => !!state.user); const { fontScale } = useWindowDimensions(); @@ -225,7 +228,8 @@ export const useEditorEvents = ( fontScale, markdownShortcuts, features, - loggedIn + loggedIn, + defaultLineHeight }); }, [ fullscreen, @@ -244,7 +248,8 @@ export const useEditorEvents = ( loading, fontScale, markdownShortcuts, - loggedIn + loggedIn, + defaultLineHeight ]); const onBackPress = useCallback(async () => { diff --git a/apps/mobile/app/screens/settings/settings-data.tsx b/apps/mobile/app/screens/settings/settings-data.tsx index afd94a195..8794a406e 100644 --- a/apps/mobile/app/screens/settings/settings-data.tsx +++ b/apps/mobile/app/screens/settings/settings-data.tsx @@ -71,6 +71,7 @@ import { verifyUser, verifyUserWithApplock } from "./functions"; import { logoutUser } from "./logout"; import { SettingSection } from "./types"; import { getTimeLeft } from "./user-section"; +import { EDITOR_LINE_HEIGHT } from "../../utils/constants"; export const settingsGroups: SettingSection[] = [ { @@ -811,10 +812,19 @@ export const settingsGroups: SettingSection[] = [ name: strings.defaultFontFamily(), description: strings.defaultFontFamilyDesc(), type: "component", - icon: "format-font", property: "defaultFontFamily", component: "font-selector" }, + { + id: "default-line-height", + name: strings.lineHeight(), + description: strings.lineHeightDesc(), + type: "input-selector", + property: "defaultLineHeight", + icon: "format-line-spacing", + minInputValue: EDITOR_LINE_HEIGHT.MIN, + maxInputValue: EDITOR_LINE_HEIGHT.MAX + }, { id: "title-format", name: strings.titleFormat(), diff --git a/apps/mobile/app/stores/use-setting-store.ts b/apps/mobile/app/stores/use-setting-store.ts index 232ab903d..7b0aeb382 100644 --- a/apps/mobile/app/stores/use-setting-store.ts +++ b/apps/mobile/app/stores/use-setting-store.ts @@ -25,6 +25,8 @@ import { FileType } from "react-native-scoped-storage"; import { create } from "zustand"; import { ThemeDark, ThemeLight, ThemeDefinition } from "@notesnook/theme"; import { Reminder } from "@notesnook/core"; +import { EDITOR_LINE_HEIGHT } from "../utils/constants"; + export const HostIds = [ "API_HOST", "AUTH_HOST", @@ -99,6 +101,7 @@ export type Settings = { serverUrls?: Record; defaultSidebarTab: number; checkForUpdates?: boolean; + defaultLineHeight: number; }; type DimensionsType = { @@ -199,7 +202,8 @@ export const defaultSettings: SettingStore["settings"] = { backupType: "partial", fullBackupReminder: "never", lastFullBackupDate: 0, - checkForUpdates: true + checkForUpdates: true, + defaultLineHeight: EDITOR_LINE_HEIGHT.DEFAULT }; export const useSettingStore = create((set, get) => ({ diff --git a/apps/mobile/app/utils/constants.ts b/apps/mobile/app/utils/constants.ts index e356097c3..12aa6656a 100644 --- a/apps/mobile/app/utils/constants.ts +++ b/apps/mobile/app/utils/constants.ts @@ -122,3 +122,9 @@ export const SUBSCRIPTION_PROVIDER = { icon: "web" } }; + +export const EDITOR_LINE_HEIGHT = { + DEFAULT: 1.2, + MAX: 10, + MIN: 1 +}; diff --git a/apps/mobile/fonts/MaterialCommunityIcons.ttf b/apps/mobile/fonts/MaterialCommunityIcons.ttf index 4d5c7cd97004736ef4ee3d34a7bb167016521270..52b5a4e6a0d718d313f028e44429f49181186fc5 100644 GIT binary patch delta 952 zcmW;LT}V@59LMqB*%msRJ!WD%TicG?gsw^vG`k29@ghP((Q1mcQuD&MP-ynz%A~~1 zEUnDSEPGRDCFdrH7E~B@rAFQa1renY1VPcuh5h<(eD>XQcy`Wno^fVhXwPS~ej_@z zF)ajW4j{2`UqgFc)2D(Qz`h;W8mzAk*Mxlq9Y9$dfZTc>us+kCavbA0Sl`$dv0!=TzR?tJtZiuh@Rno#-V$qRZcT2hT&Nxc zcJ1UvzfQ--H9Kd@YtXE=4BMg!xljptJkriq3E&W0OLaV+&i)X<$qHj`K?vW%FWPY>5C)u$KjJlD$jgoYT$T7eEgi7r-fY zP5`~^8v&eV-wU9R{Vaep>=IXNU*bvop_0xD;C~+q;2g`75->gMcCSo&YXEIZ6dE43)efxLdr#RYd~0!d?`>RrZMhMxfNR0Iso%0vKh#3E(8QR z|B!$QDCZslOhV~}0*IL*drp@5JO8h4v*z{eH-DA&X#?HmnFEvM-=oFO3TL--QFrM@ zdZ#|Bzj8%f4_xoua2LBf+(YgO_m_2>Jexgro`arIPuy$s7J1{|S??d8-&g7zF%pej zqsLgx*pkteG2^%S*ZV{M`9MjaCNLD32|9vR!QtS?%v5Mx;S{Ek%JP|@B)(x9J6>C? VQOEJ(!00K*TIW=oCU0DlnJ1e~~7R zWzwk_F(S^*X`HC|2i$a4XL%qRk*HDQ1ELx8!59q>{sE0X@MKW@^>~v{zvte2ZhP

TeD_gI)eVnAG^R15>KLQ{Y(& zc0~ncFs<%&;5qd{(O=B-s#Zqe1-0nF47TcFe&pANi+tEb>K~Gy;fB~ zOWsiDz?`~1tdFoxyoGJl|0(b`w&`96=CS@J2i_@l)}-3{Dm4Xj*639rOn}~LlUkkf z66sVrQRTX^DrHhPH$+V$ozU@H+8e!8+T5S = { fullscreen: false, deviceMode: "mobile", premium: false, @@ -35,7 +35,8 @@ const initialState = { fontSize: 16, timeFormat: "12-hour", dateFormat: "DD-MM-YYYY", - loggedIn: false + loggedIn: false, + defaultLineHeight: 1.2 }; global.settingsController = { diff --git a/packages/editor-mobile/src/utils/index.ts b/packages/editor-mobile/src/utils/index.ts index 6ffe87e85..5978aceba 100644 --- a/packages/editor-mobile/src/utils/index.ts +++ b/packages/editor-mobile/src/utils/index.ts @@ -54,6 +54,7 @@ export type Settings = { markdownShortcuts: boolean; features: Record; loggedIn: boolean; + defaultLineHeight: number; }; /* eslint-disable no-var */ diff --git a/packages/intl/locale/en.po b/packages/intl/locale/en.po index 6c5e89d0e..ac23020a0 100644 --- a/packages/intl/locale/en.po +++ b/packages/intl/locale/en.po @@ -751,7 +751,7 @@ msgstr "Add your first note" msgid "Add your first notebook" msgstr "Add your first notebook" -#: src/strings.ts:2614 +#: src/strings.ts:2615 msgid "Adjust the line height of the editor" msgstr "Adjust the line height of the editor" @@ -3546,7 +3546,7 @@ msgstr "Light" msgid "Line {line}, Column {column}" msgstr "Line {line}, Column {column}" -#: src/strings.ts:2613 +#: src/strings.ts:2614 msgid "Line height" msgstr "Line height" diff --git a/packages/intl/locale/pseudo-LOCALE.po b/packages/intl/locale/pseudo-LOCALE.po index ef4cb2812..f66451244 100644 --- a/packages/intl/locale/pseudo-LOCALE.po +++ b/packages/intl/locale/pseudo-LOCALE.po @@ -751,7 +751,7 @@ msgstr "" msgid "Add your first notebook" msgstr "" -#: src/strings.ts:2614 +#: src/strings.ts:2615 msgid "Adjust the line height of the editor" msgstr "" @@ -3526,7 +3526,7 @@ msgstr "" msgid "Line {line}, Column {column}" msgstr "" -#: src/strings.ts:2613 +#: src/strings.ts:2614 msgid "Line height" msgstr ""