Compare commits

..

8 Commits

Author SHA1 Message Date
01zulfi
2b11fcea41 web: bump version to 3.3.14
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
2026-04-14 13:14:49 +05:00
Chloe Oletto
3f0c24d27b core: duplicating a note should copy all the flags (#9250)
Signed-off by: Chloe Oletto <NeedsChloesure@riseup.net>
2026-04-14 08:23:50 +05:00
01zulfi
71088fca99 editor: handle crash on inserting incorrect syntax in math nodes (#9690)
* editor: handle crash on inserting incorrect syntax in math nodes
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>

* editor: fix 'math error' text shown on newly empty math node
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
2026-04-13 20:35:57 +05:00
01zulfi
d6f7f0c0be editor: fix crash when app is unlocked after a relock (#9698)
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
2026-04-13 20:35:16 +05:00
01zulfi
4044b68701 webclipper: fix notebooks getting unselected on tag select (#9706)
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
2026-04-13 14:55:20 +05:00
Abdullah Atta
610ced00af global: whitelist postinstall packages on bootstrap (#9629)
* global: enable npm ignore scripts by default

* config: disable ignore-scripts in .npmrc

* mobile: update lockfiles

---------

Co-authored-by: Ammar Ahmed <ammarahmed6506@gmail.com>
2026-04-13 14:27:32 +05:00
Abdullah Atta
f9fecda1f1 ci: enable CSC_FOR_PULL_REQUEST for desktop preview builds (#9695) 2026-04-10 14:45:24 +05:00
Ammar Ahmed
74921ae1b3 mobile: release 3.3.19 (#9683)
* mobile: release 3.3.19

* mobile: fix ios production xcconfig
2026-04-08 09:37:56 +05:00
25 changed files with 137 additions and 1624 deletions

View File

@@ -107,6 +107,7 @@ jobs:
APPLE_API_KEY: ~/private_keys/AuthKey_${{ secrets.api_key_id }}.p8
APPLE_API_KEY_ID: ${{ secrets.api_key_id }}
APPLE_API_ISSUER: ${{ secrets.api_key_issuer_id }}
CSC_FOR_PULL_REQUEST: true
run: |
npm run tx @notesnook/desktop:release
cd apps/desktop

2
.npmrc Normal file
View File

@@ -0,0 +1,2 @@
min-release-age=7 # days
# ignore-scripts=true

View File

@@ -1,12 +1,12 @@
{
"name": "@notesnook/desktop",
"version": "3.3.13",
"version": "3.3.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@notesnook/desktop",
"version": "3.3.13",
"version": "3.3.14",
"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.3.13",
"version": "3.3.14",
"appAppleId": "1544027013",
"private": true,
"main": "./dist/cjs/index.js",

View File

@@ -27,6 +27,7 @@ import crypto from "crypto";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const root = path.join(__dirname, "..");
const RUNNING_PROCESSES = [];
const RESTARTABLE_PROCESSES = [];
let lastBundleHash = null;
@@ -36,7 +37,7 @@ const ENV = {
FORCE_COLOR: "false",
COLOR: "0"
};
process.chdir(path.join(__dirname, ".."));
process.chdir(root);
await onChange(true);
@@ -55,13 +56,16 @@ async function onChange(first) {
if (first) {
await fs.rm("./build/", { force: true, recursive: true });
await exec("npm rebuild electron --verbose --foreground-scripts");
await exec(
"npm run postinstall --verbose",
path.join(root, "node_modules", "electron")
);
await exec("yarn electron-builder install-app-deps");
await exec("yarn electron-builder install-app-deps", root);
}
await exec(`yarn run bundle`);
await exec(`yarn run build`);
await exec(`yarn run bundle`, root);
await exec(`yarn run build`, root);
if (await isBundleSame()) {
console.log("Bundle is same. Doing nothing.");
@@ -111,7 +115,7 @@ function spawnAndWaitUntil(cmd, cwd, predicate) {
async function exec(cmd, cwd) {
try {
console.log(">", cmd);
console.log(">", cmd, cwd);
return execSync(cmd, {
env: ENV,

View File

@@ -140,7 +140,7 @@ android {
if (project.hasProperty("prBuildNumber")) {
versionCode Integer.parseInt(prBuildNumber())
} else {
versionCode 3098
versionCode 3099
}
versionName getNpmVersion()
testBuildType System.getProperty('testBuildType', 'debug')

View File

@@ -1,3 +1,8 @@
- Fix clearing note title adds generated title instead of staying empty
- Improved table cell selection, table scrolling, and table cell editing on mobile
- Fixed app on launch randomly focuses editor instead of notes list
- Fixed file size check shows error but continues adding the file to editor
- Note title headline format should get content from first paragraph
- Minor bug fixes and performance improvements
Thank you for using Notesnook!

View File

@@ -1733,7 +1733,10 @@
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "$(inherited)";
OTHER_CPLUSPLUSFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited) ";
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
@@ -1799,7 +1802,10 @@
ONLY_ACTIVE_ARCH = NO;
OTHER_CFLAGS = "$(inherited)";
OTHER_CPLUSPLUSFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited) ";
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;

View File

@@ -3875,19 +3875,19 @@ SPEC CHECKSUMS:
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
callstack-repack: 3991230773c74ea49e7db6932d20e72d175faa41
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
fast_float: 914e00b8b67cb8ba184a778c7bbc2e9fe98d37b3
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
FBLazyVector: 0aa6183b9afe3c31fc65b5d1eeef1f3c19b63bfa
fmt: b85d977e8fe789fd71c77123f9f4920d88c4d170
glog: 682871fb30f4a65f657bf357581110656ea90b08
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
GZIP: 3c0abf794bfce8c7cb34ea05a1837752416c8868
hermes-engine: 1c85d2d2a4722541e6faffceb7bcc2249b5398b2
hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5
JWTDecode: 2eed97c2fa46ccaf3049a787004eedf0be474a87
MMKV: 7b5df6a8bf785c6705cc490c541b9d8a957c4a64
MMKVCore: 3f40b896e9ab522452df9df3ce983471aa2449ba
NitroCloudUploader: 62489381ed6b472d87c8c6b62629136ebd2342d1
NitroModules: f964d2f3f5b392d0c0303737085cc30e375dc43f
pop: d582054913807fd11fd50bfe6a539d91c7e1a55a
RCT-Folly: fb64616e25cfac1c3d10bfd784d68926325ae67f
RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669
RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a
RCTRequired: e2c574c1b45231f7efb0834936bd609d75072b63
RCTTypeSafety: c693294e3993056955c3010eb1ebc574f1fcded6
@@ -4005,7 +4005,7 @@ SPEC CHECKSUMS:
RNWorklets: d9c050940f140af5d8b611d937eab1cbfce5e9a5
RNZipArchive: 71befbdc20e7fbd4b64552a0b324ad0e8d0efefb
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SexyTooltip: 605cfd16ae28fd8c3afac9c29236518e156dbbd8
SexyTooltip: 5c9b4dec52bfb317938cb0488efd9da3717bb6fd
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6

View File

@@ -1,10 +1,10 @@
// Staging iOS build identifiers
IOS_CURRENT_PROJECT_VERSION = 2178
IOS_MARKETING_VERSION = 3.3.18
// Production iOS build identifiers
IOS_CURRENT_PROJECT_VERSION = 2179
IOS_MARKETING_VERSION = 3.3.19
IOS_MAIN_BUNDLE_ID = org.streetwriters.notesnook
IOS_WIDGET_BUNDLE_ID = org.streetwriters.notesnook.notewidget
IOS_SHARE_BUNDLE_ID = org.streetwriters.notesnook.share
APP_DISPLAY_NAME = Notesnook
IOS_MAIN_PROFILE = Notesnook Adhoc 2026
IOS_WIDGET_PROFILE = Notesnook Note Widget Adhoc 2026
IOS_SHARE_PROFILE = Notesnook Share Adhoc 2026
IOS_MAIN_PROFILE = Notesnook 2026
IOS_WIDGET_PROFILE = Notesnook Note Widget 2026
IOS_SHARE_PROFILE = Notesnook Share 2026

View File

@@ -1,6 +1,6 @@
// Production iOS build identifiers
IOS_CURRENT_PROJECT_VERSION = 2178
IOS_MARKETING_VERSION = 3.3.18
IOS_CURRENT_PROJECT_VERSION = 2179
IOS_MARKETING_VERSION = 3.3.19
IOS_MAIN_BUNDLE_ID = org.streetwriters.notesnook
IOS_WIDGET_BUNDLE_ID = org.streetwriters.notesnook.notewidget
IOS_SHARE_BUNDLE_ID = org.streetwriters.notesnook.share

View File

@@ -1,6 +1,6 @@
// Staging iOS build identifiers
IOS_CURRENT_PROJECT_VERSION = 2178
IOS_MARKETING_VERSION = 3.3.18
IOS_CURRENT_PROJECT_VERSION = 2179
IOS_MARKETING_VERSION = 3.3.19
IOS_MAIN_BUNDLE_ID = org.streetwriters.notesnook
IOS_WIDGET_BUNDLE_ID = org.streetwriters.notesnook.notewidget
IOS_SHARE_BUNDLE_ID = org.streetwriters.notesnook.share

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@notesnook/mobile",
"version": "3.3.18",
"version": "3.3.19",
"private": true,
"license": "GPL-3.0-or-later",
"scripts": {

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -89,22 +89,7 @@ const features: Record<FeatureKeys, Feature> = {
)
}
]
: [
{
title: "Improved UX on password reset flow",
subtitle:
"We've added some minor UX improvements to the password reset flow"
},
{
title: "Title $headline$ format change",
subtitle:
"The $headline$ format will now only be extracted from the first paragraph/heading of the note (up to 60 characters)."
},
{
title: "Various bug fixes",
subtitle: "We have squashed various bugs in this release."
}
],
: [],
cta: {
title: strings.gotIt(),
icon: Checkmark,

View File

@@ -4269,37 +4269,6 @@
"node": ">=14.16"
}
},
"node_modules/@theme-ui/color-modes": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@theme-ui/color-modes/-/color-modes-0.16.2.tgz",
"integrity": "sha512-jWEWx53lxNgWCT38i/kwLV2rsvJz8lVZgi5oImnVwYba9VejXD23q1ckbNFJHosQ8KKXY87ht0KPC6BQFIiHtQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@theme-ui/core": "^0.16.2",
"@theme-ui/css": "^0.16.2",
"deepmerge": "^4.2.2"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": ">=18"
}
},
"node_modules/@theme-ui/color-modes/node_modules/@theme-ui/core": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@theme-ui/core/-/core-0.16.2.tgz",
"integrity": "sha512-bBd/ltbwO9vIUjF1jtlOX6XN0IIOdf1vzBp2JCKsSOqdfn84m+XL8OogIe/zOhQ+aM94Nrq4+32tFJc8sFav4Q==",
"license": "MIT",
"peer": true,
"dependencies": {
"@theme-ui/css": "^0.16.2",
"deepmerge": "^4.2.2"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": ">=18"
}
},
"node_modules/@theme-ui/components": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@theme-ui/components/-/components-0.16.1.tgz",
@@ -4345,37 +4314,6 @@
"@emotion/react": "^11.11.1"
}
},
"node_modules/@theme-ui/theme-provider": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@theme-ui/theme-provider/-/theme-provider-0.16.2.tgz",
"integrity": "sha512-LRnVevODcGqO0JyLJ3wht+PV3ZoZcJ7XXLJAJWDoGeII4vZcPQKwVy4Lpz/juHsZppQxKcB3U+sQDGBnP25irQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@theme-ui/color-modes": "^0.16.2",
"@theme-ui/core": "^0.16.2",
"@theme-ui/css": "^0.16.2"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": ">=18"
}
},
"node_modules/@theme-ui/theme-provider/node_modules/@theme-ui/core": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@theme-ui/core/-/core-0.16.2.tgz",
"integrity": "sha512-bBd/ltbwO9vIUjF1jtlOX6XN0IIOdf1vzBp2JCKsSOqdfn84m+XL8OogIe/zOhQ+aM94Nrq4+32tFJc8sFav4Q==",
"license": "MIT",
"peer": true,
"dependencies": {
"@theme-ui/css": "^0.16.2",
"deepmerge": "^4.2.2"
},
"peerDependencies": {
"@emotion/react": "^11.11.1",
"react": ">=18"
}
},
"node_modules/@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -4740,7 +4678,7 @@
"version": "15.7.15",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
"integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
"devOptional": true,
"dev": true,
"license": "MIT"
},
"node_modules/@types/q": {
@@ -4765,7 +4703,7 @@
"version": "18.3.5",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz",
"integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==",
"devOptional": true,
"dev": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
@@ -5885,29 +5823,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/addons-linter/node_modules/node-fetch": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
"integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/addons-linter/node_modules/semver": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
@@ -5936,37 +5851,6 @@
"node": ">=8"
}
},
"node_modules/addons-linter/node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/addons-linter/node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true,
"license": "BSD-2-Clause",
"optional": true,
"peer": true
},
"node_modules/addons-linter/node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/addons-linter/node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -12007,7 +11891,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
"integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
"devOptional": true,
"dev": true,
"license": "MIT"
},
"node_modules/gzip-size": {
@@ -16598,7 +16482,7 @@
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz",
"integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==",
"devOptional": true,
"dev": true,
"license": "MIT",
"dependencies": {
"growly": "^1.3.0",
@@ -16613,7 +16497,7 @@
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"devOptional": true,
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -20913,7 +20797,7 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
"devOptional": true,
"dev": true,
"license": "MIT"
},
"node_modules/side-channel": {
@@ -22187,23 +22071,6 @@
"node": ">=4"
}
},
"node_modules/tailwindcss/node_modules/yaml": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
"license": "ISC",
"optional": true,
"peer": true,
"bin": {
"yaml": "bin.mjs"
},
"engines": {
"node": ">= 14.6"
},
"funding": {
"url": "https://github.com/sponsors/eemeli"
}
},
"node_modules/tapable": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz",
@@ -22898,20 +22765,6 @@
"is-typedarray": "^1.0.0"
}
},
"node_modules/typescript": {
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/unbox-primitive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",

View File

@@ -451,12 +451,22 @@ export function Main() {
)}
<NotebookPicker
selectedItems={refs?.filter((r) => r.type === "notebook") || []}
onSelected={(items) => setRefs(items)}
onSelected={(items) =>
setRefs((refs) => [
...(refs?.filter((r) => r.type === "tag") ?? []),
...(items ?? [])
])
}
/>
<Box sx={{ mt: 1 }} />
<TagPicker
selectedTags={refs?.filter((r) => r.type === "tag") || []}
onSelected={(tags) => setRefs(tags)}
onSelected={(tags) =>
setRefs((refs) => [
...(refs?.filter((r) => r.type !== "tag") ?? []),
...tags
])
}
/>
</>
)}

View File

@@ -0,0 +1,8 @@
- Fix clearing note title adds generated title instead of staying empty
- Improved table cell selection, table scrolling, and table cell editing on mobile
- Fixed app on launch randomly focuses editor instead of notes list
- Fixed file size check shows error but continues adding the file to editor
- Note title headline format should get content from first paragraph
- Minor bug fixes and performance improvements
Thank you for using Notesnook!

View File

@@ -177,6 +177,7 @@ export class Notes implements ICollection {
localOnly: item.localOnly,
conflicted: item.conflicted,
readonly: item.readonly,
archived: item.archived,
dateCreated: item.dateCreated,
dateEdited: item.dateEdited || dateEdited,
@@ -197,6 +198,7 @@ export class Notes implements ICollection {
localOnly: item.localOnly,
conflicted: item.conflicted,
readonly: item.readonly,
archived: item.archived,
dateCreated: item.dateCreated || Date.now(),
dateEdited: item.dateEdited || dateEdited || Date.now(),
@@ -432,9 +434,7 @@ export class Notes implements ICollection {
const duplicateId = await this.db.notes.add({
...clone(note),
id: undefined,
readonly: false,
favorite: false,
pinned: false,
isGeneratedTitle: false,
contentId: undefined,
title: note.title + " (Copy)",
dateEdited: undefined,

View File

@@ -276,6 +276,8 @@ export class MathView implements NodeView, ICursorPosObserver {
while (this._mathRenderElt.firstChild) {
this._mathRenderElt.firstChild.remove();
}
this._mathRenderElt.classList.remove("parse-error");
this.dom.setAttribute("title", "");
// do not render empty math
return;
} else {

View File

@@ -32,20 +32,32 @@ async function loadKatex() {
export const KatexRenderer: MathRenderer = {
inline: (text, element) => {
loadKatex().then((katex) => {
katex.render(text, element, {
displayMode: false,
globalGroup: true,
throwOnError: false
});
try {
katex.render(text, element, {
displayMode: false,
globalGroup: true,
throwOnError: false
});
} catch (err) {
console.error(err);
element.classList.add("parse-error");
element.setAttribute("title", err instanceof Error ? err.message : String(err));
}
});
},
block: (text, element) => {
loadKatex().then((katex) => {
katex.render(text, element, {
displayMode: true,
globalGroup: true,
throwOnError: false
});
try {
katex.render(text, element, {
displayMode: true,
globalGroup: true,
throwOnError: false
});
} catch (err) {
console.error(err);
element.classList.add("parse-error");
element.setAttribute("title", err instanceof Error ? err.message : String(err));
}
});
}
};

View File

@@ -121,6 +121,7 @@ export const useEditor = (
function destroyView(view: EditorView) {
// we override all the methods to prevent any further interaction with the
// editor, otherwise we'll get errors.
view.focus = () => {};
view.dispatch = () => {};
view.update = () => {};
view.updateState = () => {};

View File

@@ -40,23 +40,8 @@ const scopes = {
themes: "servers/themes",
themebuilder: "apps/theme-builder"
};
// packages that we shouldn't run npm rebuild for
const IGNORED_NATIVE_PACKAGES = [
// these get built by electron-builder automatically.
...(args.scope === "desktop"
? ["better-sqlite3-multiple-ciphers", "sodium-native"]
: []),
"electron",
// optional dependency of pdfjs-dist, we can ignore
// it because it's only needed in non-browser environments
"canvas",
// optional dependency only used on Node.js platform
"@azure/msal-node-runtime",
"react-native-quick-sqlite",
// not needed on mobile
...(args.scope === "mobile" ? ["esbuild"] : [])
];
// packages that we should run npm rebuild for
const POSTINSTALL_WHITELIST = ["esbuild", "@swc/core"];
if (args.scope && !scopes[args.scope])
throw new Error(`Scope must be one of ${Object.keys(scopes).join(", ")}`);
@@ -161,7 +146,7 @@ async function bootstrapPackage(cwd, outputs) {
}
if (await hasScript(cwd, "postinstall"))
postInstallCommands.push(`npm run postinstall `);
postInstallCommands.push(`npm run postinstall`);
for (const cmd of postInstallCommands) {
let retries = 3;
@@ -240,8 +225,8 @@ async function needsRebuild(cwd) {
if (
!pkg ||
!pkg.scripts ||
IGNORED_NATIVE_PACKAGES.includes(pkg.name) ||
!scripts.some((s) => pkg.scripts[s])
!scripts.some((s) => pkg.scripts[s]) ||
!POSTINSTALL_WHITELIST.includes(pkg.name)
)
return;