Compare commits

..

16 Commits

Author SHA1 Message Date
01zulfi
09a0c302d9 Merge pull request #10299 from streetwriters/release/3.4.7
web: bump version to 3.4.7
2026-08-31 13:14:14 +05:00
Ammar Ahmed
a44c35af90 Merge pull request #10265 from streetwriters/fix/android-backspace-bug
editor: fix android backspace stopped working after prosemirror-view update
2026-08-31 12:50:02 +05:00
Ammar Ahmed
01e4a639a4 Merge pull request #10285 from kashaf-ansari-dev/fix-search-text-overflowing
mobile: prevent search text from overflowing search field
2026-08-31 12:45:49 +05:00
Ammar Ahmed
e7dcea395b Merge pull request #10266 from streetwriters/fix/editor-settings-apply
editor: fix some settings do not get applied automatically and need editor reload
2026-08-31 12:45:00 +05:00
Ammar Ahmed
5a179a4dfa mobile: fix dateFormat taking timeFormat value 2026-08-31 12:44:31 +05:00
Ammar Ahmed
2f3e5cb5cf mobile: fix date format not updated in editor 2026-08-31 12:44:30 +05:00
Ammar Ahmed
575cf24492 mobile: ensure line spacing & date format settings get updated live 2026-08-31 12:44:30 +05:00
Ammar Ahmed
e0dc45c6cc mobile: fix default markdownShortcuts to off 2026-08-31 12:43:17 +05:00
Ammar Ahmed
65b5652fa6 mobile: fix editor settings not applying properly on random basis 2026-08-31 12:43:17 +05:00
Ammar Ahmed
0915450830 Merge pull request #10284 from kashaf-ansari-dev/fix-10272-reminder-multi-selection-ui
mobile: show selection checkbox for reminders in multi-selection mode
2026-08-31 12:42:12 +05:00
Ammar Ahmed
549e0b202d Merge pull request #10141 from streetwriters/fix/hide-toolbar-readonly
editor: hide toolbar in readonly mode until a selection scoped tool needs to show in toolbar
2026-08-31 12:23:32 +05:00
01zulfi
81561098c7 web: bump version to 3.4.7
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
2026-08-31 10:52:59 +05:00
kashaf-ansari-dev
c3fb01c61b mobile: prevent search text from overflowing search field
Signed-off-by: kashaf-ansari-dev <kashafansari3108@gmail.com>
2026-08-25 15:58:02 +05:00
kashaf-ansari-dev
6522997e62 mobile: show selection checkbox for reminders in multi-selection mode
Signed-off-by: kashaf-ansari-dev <kashafansari3108@gmail.com>
2026-08-25 14:20:55 +05:00
Ammar Ahmed
d14da4b3d5 mobile: rerender editor on readonly toggle 2026-08-25 08:39:05 +05:00
Ammar Ahmed
bed993466a editor: hide toolbar in readonly mode until a selection scoped tool needs to show in toolbar 2026-08-24 14:27:12 +05:00
13 changed files with 82 additions and 45 deletions

View File

@@ -1,12 +1,12 @@
{
"name": "@notesnook/desktop",
"version": "3.4.6",
"version": "3.4.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@notesnook/desktop",
"version": "3.4.6",
"version": "3.4.7",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"dependencies": {

View File

@@ -2,7 +2,7 @@
"name": "@notesnook/desktop",
"productName": "Notesnook",
"description": "Your private note taking space",
"version": "3.4.6",
"version": "3.4.7",
"appAppleId": "1544027013",
"private": true,
"main": "./dist/cjs/index.js",

View File

@@ -167,7 +167,7 @@ const ReminderItem = React.memo(
</View>
</View>
{selectionMode === "note" || selectionMode === "trash" ? (
{selectionMode === "reminder" || selectionMode === "trash" ? (
<>
<View
style={{

View File

@@ -209,7 +209,6 @@ export const useEditorEvents = (
};
}, [editor, editor.commands, editor.postMessage]);
useEffect(() => {
if (loading) return;
if (typeof defaultFontFamily === "object") {
SettingsService.set({
defaultFontFamily: (defaultFontFamily as any).id
@@ -231,9 +230,9 @@ export const useEditorEvents = (
? parseInt(defaultFontSize)
: defaultFontSize,
fontFamily: SettingsService.get().defaultFontFamily,
dateFormat: db.settings?.getDateFormat(),
timeFormat: db.settings?.getTimeFormat(),
dayFormat: db.settings?.getDayFormat(),
dateFormat: dateFormat,
timeFormat: timeFormat,
dayFormat: dayFormat,
fontScale,
markdownShortcuts,
features,

View File

@@ -84,7 +84,7 @@ export const SearchBar = ({
style={{
fontSize: AppFontSize.sm,
fontFamily: "Inter-Regular",
flexGrow: 1,
flex: 1,
color: colors.primary.paragraph,
paddingTop: 0,
paddingBottom: 0

View File

@@ -206,7 +206,7 @@ export const defaultSettings: SettingStore["settings"] = {
colorScheme: "light",
lighTheme: ThemeLight,
darkTheme: ThemeDark,
markdownShortcuts: true,
markdownShortcuts: false,
biometricsAuthEnabled: false,
appLockHasPasswordSecurity: false,
backgroundSync: true,
@@ -264,7 +264,7 @@ export const useSettingStore = create<SettingStore>((set, get) => ({
set({
dayFormat: db.settings.getDayFormat(),
timeFormat: db.settings.getTimeFormat(),
dateFormat: db.settings?.getTimeFormat(),
dateFormat: db.settings?.getDateFormat(),
weekFormat: db.settings.getWeekFormat(),
vaultLockAfter: db.settings.getVaultLockAfter(),
inboxEnabled: await db.user.hasInboxKeys()

View File

@@ -1,12 +1,12 @@
{
"name": "@notesnook/web",
"version": "3.4.6",
"version": "3.4.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@notesnook/web",
"version": "3.4.6",
"version": "3.4.7",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"dependencies": {

View File

@@ -1,7 +1,7 @@
{
"name": "@notesnook/web",
"description": "Your private note taking space",
"version": "3.4.6",
"version": "3.4.7",
"private": true,
"main": "./src/app.js",
"homepage": "https://notesnook.com/",

View File

@@ -956,7 +956,15 @@ const Tiptap = ({
</div>
<TiptapEditorWrapper
key={tick + tab.id + "-editor"}
key={[
tick,
tab.id,
settings.doubleSpacedLines ? "ds" : "ss",
settings.dateFormat,
settings.timeFormat,
settings.dayFormat,
tab.session?.readonly ? "readonly" : "edit"
].join("-")}
options={tiptapOptions}
settings={settings}
onEditorUpdate={(editor) => {

View File

@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import { getDefaultPresets } from "@notesnook/editor";
import { useState } from "react";
import { useEffect, useState } from "react";
import { Settings } from "../utils";
const settingsJson = localStorage.getItem("editorSettings");
@@ -74,5 +74,14 @@ export const useSettings = (): Settings => {
});
global.settingsController.set = setSettings;
useEffect(() => {
setSettings((current) =>
JSON.stringify(current) ===
JSON.stringify(global.settingsController.previous)
? current
: { ...global.settingsController.previous }
);
}, []);
return settings;
};

View File

@@ -424,7 +424,13 @@ const useTiptap = (
timeFormat,
editorProps,
copyToClipboard,
createInternalLink
createInternalLink,
dayFormat,
doubleSpacedLines,
enableFontLigatures,
getLinkData,
downloadCsvTable,
options.placeholder
]
);

View File

@@ -399,6 +399,13 @@ export const READONLY_MOBILE_STATIC_TOOLBAR_GROUPS: ToolbarDefinition = [
]
];
export const READONLY_MOBILE_TOOLBAR_NODES = [
"image",
"attachment",
"webclip",
"link"
];
const defaultPresets: Record<"default" | "minimal", ToolbarDefinition> = {
default: [
[

View File

@@ -22,7 +22,8 @@ import {
getDefaultPresets,
STATIC_TOOLBAR_GROUPS,
MOBILE_STATIC_TOOLBAR_GROUPS,
READONLY_MOBILE_STATIC_TOOLBAR_GROUPS
READONLY_MOBILE_STATIC_TOOLBAR_GROUPS,
READONLY_MOBILE_TOOLBAR_NODES
} from "./tool-definitions.js";
import { useEffect, useMemo } from "react";
import { Editor } from "../types.js";
@@ -67,6 +68,11 @@ export function Toolbar(props: ToolbarProps) {
[tools, editor.isEditable, isMobile]
);
const isEmptyReadonlyToolbar =
isMobile &&
!editor.isEditable &&
!READONLY_MOBILE_TOOLBAR_NODES.some((node) => editor.isActive(node));
const setToolbarLocation = useToolbarStore(
(store) => store.setToolbarLocation
);
@@ -89,33 +95,35 @@ export function Toolbar(props: ToolbarProps) {
return (
<>
<Flex
className={["editor-toolbar", className].join(" ")}
sx={{
flexWrap: isMobile ? "nowrap" : "wrap",
overflowX: isMobile ? "auto" : "hidden",
bg: "background",
borderRadius: isMobile ? "0px" : "default",
...sx
}}
{...flexProps}
>
{toolbarTools.map((tools) => {
return (
<ToolbarGroup
key={tools.join("")}
tools={tools}
editor={editor}
groupId={tools.join("")}
sx={{
borderRight: "1px solid var(--separator)",
":last-of-type": { borderRight: "none" },
alignItems: "center"
}}
/>
);
})}
</Flex>
{isEmptyReadonlyToolbar ? null : (
<Flex
className={["editor-toolbar", className].join(" ")}
sx={{
flexWrap: isMobile ? "nowrap" : "wrap",
overflowX: isMobile ? "auto" : "hidden",
bg: "background",
borderRadius: isMobile ? "0px" : "default",
...sx
}}
{...flexProps}
>
{toolbarTools.map((tools) => {
return (
<ToolbarGroup
key={tools.join("")}
tools={tools}
editor={editor}
groupId={tools.join("")}
sx={{
borderRight: "1px solid var(--separator)",
":last-of-type": { borderRight: "none" },
alignItems: "center"
}}
/>
);
})}
</Flex>
)}
<EditorFloatingMenus editor={editor} />
</>
);