mirror of
https://github.com/standardnotes/app
synced 2026-09-13 00:45:26 -04:00
Compare commits
53
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74923a1f6b | ||
|
|
d02e5cab74 | ||
|
|
2459e06b19 | ||
|
|
d2d10eb747 | ||
|
|
117781bb36 | ||
|
|
07f45245a3 | ||
|
|
da22238ced | ||
|
|
44bfcb2d1b | ||
|
|
555453617d | ||
|
|
f9f069f31f | ||
|
|
f776cb30d4 | ||
|
|
c2bdff0794 | ||
|
|
becf5751b2 | ||
|
|
e06d1fcd4f | ||
|
|
44fba053b1 | ||
|
|
52b052fe84 | ||
|
|
caa8eff216 | ||
|
|
c050a2cd33 | ||
|
|
5f61500ee0 | ||
|
|
782af6ecdc | ||
|
|
c493b2c2ea | ||
|
|
9c1bb35355 | ||
|
|
ddaf52d57e | ||
|
|
b49f81bf1f | ||
|
|
125aad4b3d | ||
|
|
e2250600a8 | ||
|
|
974fcef288 | ||
|
|
7bce025efb | ||
|
|
57cb8445fd | ||
|
|
165fc695d1 | ||
|
|
6ea58ca33c | ||
|
|
f8223a884c | ||
|
|
35eb6d2410 | ||
|
|
8c7b6a694c | ||
|
|
92ecbcae30 | ||
|
|
5f6717b0c0 | ||
|
|
15c184af83 | ||
|
|
6fe8f16828 | ||
|
|
631facc10e | ||
|
|
4a6a386eda | ||
|
|
9792e16c8f | ||
|
|
1d11803f22 | ||
|
|
2a3dd79da0 | ||
|
|
a1d6a02c87 | ||
|
|
0b9b39b11c | ||
|
|
c4e0138ce3 | ||
|
|
16df4d327c | ||
|
|
bdf6be38d2 | ||
|
|
23f5ac1c19 | ||
|
|
cf3ed7cf42 | ||
|
|
b2281141f8 | ||
|
|
fd4ba26210 | ||
|
|
b32a866f33 |
@@ -13,6 +13,12 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- name: Install dependencies
|
||||
run: yarn install --immutable
|
||||
- name: Build
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
-1
@@ -68,7 +68,7 @@
|
||||
"npm-check-updates": "^16.10.17",
|
||||
"prettier": "3.0.0",
|
||||
"sass-loader": "^13.3.2",
|
||||
"typescript": "5.2.2",
|
||||
"typescript": "5.8.3",
|
||||
"webpack": "^5.88.2",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^4.15.1",
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.26.93](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.92](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.91](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.90](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.89](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-05-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/api",
|
||||
"version": "1.26.89",
|
||||
"version": "1.26.93",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,90 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.1.532](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.531](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-04)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.530](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.529](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.528](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.527](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.526](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.525](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.524](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.523](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.522](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.521](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.520](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-05)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.519](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.518](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.517](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.516](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.515](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.514](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.513](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.512](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.511](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@standardnotes/clipper",
|
||||
"description": "Web clipper browser extension for Standard Notes",
|
||||
"version": "1.1.511",
|
||||
"version": "1.1.532",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js",
|
||||
|
||||
@@ -3,6 +3,90 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.110.137](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.136](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-04)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.135](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.134](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.133](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.132](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.131](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.130](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.129](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.128](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.127](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.126](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.125](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-05)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.124](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.123](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.122](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.121](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.120](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.119](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.118](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.117](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.110.116](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@standardnotes/desktop",
|
||||
"main": "./app/dist/index.js",
|
||||
"version": "3.110.116",
|
||||
"version": "3.110.137",
|
||||
"license": "AGPL-3.0",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.21.111](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.110](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.109](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.108](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.107](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-05-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/encryption",
|
||||
"version": "1.21.107",
|
||||
"version": "1.21.111",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,28 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.28.131](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.130](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.129](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.128](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.127](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix issue where searching across formatted text would not work in Super note ([#2897](https://github.com/standardnotes/app/issues/2897)) (skip e2e) ([bdf6be3](https://github.com/standardnotes/app/commit/bdf6be38d241a5c35be56a50e239591294383f95))
|
||||
|
||||
## [1.28.126](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-01-31)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"babel-loader": "^8.2.3",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"ts-loader": "^9.2.6",
|
||||
"typescript": "^4.0.5",
|
||||
"typescript": "*",
|
||||
"typescript-eslint": "0.0.1-alpha.0",
|
||||
"webpack": "*",
|
||||
"webpack-cli": "*",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/filepicker",
|
||||
"version": "1.28.126",
|
||||
"version": "1.28.131",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.20.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.20.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.20.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.20.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.20.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-05-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/files",
|
||||
"version": "1.20.10",
|
||||
"version": "1.20.14",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,102 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.58.194](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.193](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-04)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where safe area insets were not always applying properly on iOS, causing a UI shift ([#2912](https://github.com/standardnotes/app/issues/2912)) ([117781b](https://github.com/standardnotes/app/commit/117781bb3655a2bd6b9b0ca5a4d12f7bbefd164e))
|
||||
|
||||
## [3.58.192](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.191](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.190](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.189](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with UI sometimes getting shifted up on iOS ([c050a2c](https://github.com/standardnotes/app/commit/c050a2cd339bb7a8fd482904216de1db2b8fe568))
|
||||
|
||||
## [3.58.188](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.187](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where Android app would crash on screen rotation ([#2905](https://github.com/standardnotes/app/issues/2905)) ([9c1bb35](https://github.com/standardnotes/app/commit/9c1bb353550c0256b4e6dcbee1e087cc9ffdd628))
|
||||
|
||||
## [3.58.186](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.185](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.184](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.183](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.182](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.181](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-05)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.180](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.179](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.178](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.177](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.176](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with keyboard on Android covering content ([#2899](https://github.com/standardnotes/app/issues/2899)) ([c4e0138](https://github.com/standardnotes/app/commit/c4e0138ce3ef9bc0adb75dae08aec2203473552d))
|
||||
|
||||
## [3.58.175](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.174](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.173](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.58.172](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
@@ -37,13 +37,6 @@ public class MainActivity extends ReactActivity {
|
||||
DefaultNewArchitectureEntryPoint.getFabricEnabled());
|
||||
}
|
||||
|
||||
// Fix for Dark theme subscriptions https://github.com/facebook/react-native/issues/28823#issuecomment-642032481
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
getReactInstanceManager().onConfigurationChanged(this, newConfig);
|
||||
}
|
||||
|
||||
/*
|
||||
On back button press, background app instead of quitting it
|
||||
https://github.com/facebook/react-native/issues/13775
|
||||
|
||||
@@ -1261,6 +1261,72 @@ PODS:
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- react-native-safe-area-context (5.5.1):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2024.11.18.00)
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- React-debug
|
||||
- React-Fabric
|
||||
- React-featureflags
|
||||
- React-graphics
|
||||
- React-ImageManager
|
||||
- react-native-safe-area-context/common (= 5.5.1)
|
||||
- react-native-safe-area-context/fabric (= 5.5.1)
|
||||
- React-NativeModulesApple
|
||||
- React-RCTFabric
|
||||
- React-rendererdebug
|
||||
- React-utils
|
||||
- ReactCodegen
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- react-native-safe-area-context/common (5.5.1):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2024.11.18.00)
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- React-debug
|
||||
- React-Fabric
|
||||
- React-featureflags
|
||||
- React-graphics
|
||||
- React-ImageManager
|
||||
- React-NativeModulesApple
|
||||
- React-RCTFabric
|
||||
- React-rendererdebug
|
||||
- React-utils
|
||||
- ReactCodegen
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- react-native-safe-area-context/fabric (5.5.1):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2024.11.18.00)
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- React-debug
|
||||
- React-Fabric
|
||||
- React-featureflags
|
||||
- React-graphics
|
||||
- React-ImageManager
|
||||
- react-native-safe-area-context/common
|
||||
- React-NativeModulesApple
|
||||
- React-RCTFabric
|
||||
- React-rendererdebug
|
||||
- React-utils
|
||||
- ReactCodegen
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- react-native-version-info (1.1.1):
|
||||
- React-Core
|
||||
- react-native-webview (13.13.5):
|
||||
@@ -1602,8 +1668,27 @@ PODS:
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- RNKeychain (8.1.2):
|
||||
- RNKeychain (10.0.0):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2024.11.18.00)
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- React-debug
|
||||
- React-Fabric
|
||||
- React-featureflags
|
||||
- React-graphics
|
||||
- React-ImageManager
|
||||
- React-NativeModulesApple
|
||||
- React-RCTFabric
|
||||
- React-rendererdebug
|
||||
- React-utils
|
||||
- ReactCodegen
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- RNNotifee (9.1.8):
|
||||
- React-Core
|
||||
- RNNotifee/NotifeeCore (= 9.1.8)
|
||||
@@ -1701,6 +1786,7 @@ DEPENDENCIES:
|
||||
- React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
|
||||
- react-native-fingerprint-scanner (from `../node_modules/react-native-fingerprint-scanner`)
|
||||
- react-native-mmkv (from `../node_modules/react-native-mmkv`)
|
||||
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
||||
- react-native-version-info (from `../node_modules/react-native-version-info`)
|
||||
- react-native-webview (from `../node_modules/react-native-webview`)
|
||||
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
|
||||
@@ -1829,6 +1915,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native-fingerprint-scanner"
|
||||
react-native-mmkv:
|
||||
:path: "../node_modules/react-native-mmkv"
|
||||
react-native-safe-area-context:
|
||||
:path: "../node_modules/react-native-safe-area-context"
|
||||
react-native-version-info:
|
||||
:path: "../node_modules/react-native-version-info"
|
||||
react-native-webview:
|
||||
@@ -1952,6 +2040,7 @@ SPEC CHECKSUMS:
|
||||
React-microtasksnativemodule: b740ebae7fad70aa78bc24cc0dfc15ac9637b6eb
|
||||
react-native-fingerprint-scanner: 562585260768cad51ae48e4b505d28c8731aecfa
|
||||
react-native-mmkv: 24917f0685641ccfd37c9b7004b26c00551128be
|
||||
react-native-safe-area-context: 143faa2b60b6cc3e06e966d5fa23af6b31326814
|
||||
react-native-version-info: f0b04e16111c4016749235ff6d9a757039189141
|
||||
react-native-webview: 5095dd03fc98a529e44a6bb81aed21062b5f879e
|
||||
React-NativeModulesApple: af0571ac115d09c9a669ed45ce6a4ca960598a2d
|
||||
@@ -1986,7 +2075,7 @@ SPEC CHECKSUMS:
|
||||
RNFileViewer: 4b5d83358214347e4ab2d4ca8d5c1c90d869e251
|
||||
RNFS: 89de7d7f4c0f6bafa05343c578f61118c8282ed8
|
||||
RNIap: d73cedfb73b396cad75f90f4ed7d64352d6381cf
|
||||
RNKeychain: df33ae4d27df06622fc14190b790ba8749f6be76
|
||||
RNKeychain: 455cc7002480eac3d24f67b4329ec80c7d901edc
|
||||
RNNotifee: 5e3b271e8ea7456a36eec994085543c9adca9168
|
||||
RNPrivacySnapshot: ccad3a548338c2f526bb7b1789af3fb0618b7d1d
|
||||
RNShare: 56b5431c60e1e9ee167191f4f327471af1c2941a
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/mobile",
|
||||
"version": "3.58.172",
|
||||
"version": "3.58.194",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0",
|
||||
@@ -63,7 +63,7 @@
|
||||
"react-native-flag-secure-android": "standardnotes/react-native-flag-secure-android#cb08e74583c22a5d912842459b35ebbbb4bcd852",
|
||||
"react-native-fs": "^2.20.0",
|
||||
"react-native-iap": "^12.16.2",
|
||||
"react-native-keychain": "standardnotes/react-native-keychain#4fd687461cecfa26d482d820ee43c0de61b964d4",
|
||||
"react-native-keychain": "standardnotes/react-native-keychain#618c3e1f253e6980866ee02a80c3ea66fa6f5bad",
|
||||
"react-native-mmkv": "^3.2.0",
|
||||
"react-native-privacy-snapshot": "standardnotes/react-native-privacy-snapshot#653e904c90fc6f2b578da59138f2bfe5d7f942fe",
|
||||
"react-native-share": "^12.0.9",
|
||||
@@ -76,6 +76,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@notifee/react-native": "^9.1.8",
|
||||
"react-native-safe-area-context": "^5.5.1",
|
||||
"react-native-store-review": "^0.4.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import React from 'react'
|
||||
import { MobileWebAppContainer } from './MobileWebAppContainer'
|
||||
|
||||
const AppComponent: React.FC = () => {
|
||||
return <MobileWebAppContainer />
|
||||
}
|
||||
import { SafeAreaProvider } from 'react-native-safe-area-context'
|
||||
|
||||
export const MobileWebApp = () => {
|
||||
return <AppComponent />
|
||||
return (
|
||||
<SafeAreaProvider>
|
||||
<MobileWebAppContainer />
|
||||
</SafeAreaProvider>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import { ApplicationEvent, ReactNativeToWebEvent } from '@standardnotes/snjs'
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||
import { Button, Dimensions, Keyboard, Platform, Text, View } from 'react-native'
|
||||
import { Button, Dimensions, Keyboard, KeyboardEvent, Platform, Text, View } from 'react-native'
|
||||
import VersionInfo from 'react-native-version-info'
|
||||
import { WebView, WebViewMessageEvent } from 'react-native-webview'
|
||||
import { OnShouldStartLoadWithRequest, WebViewNativeConfig } from 'react-native-webview/lib/WebViewTypes'
|
||||
@@ -15,6 +15,7 @@ import { IsDev } from './Lib/Utils'
|
||||
import { ReceivedSharedItemsHandler } from './ReceivedSharedItemsHandler'
|
||||
import { ReviewService } from './ReviewService'
|
||||
import notifee, { EventType } from '@notifee/react-native'
|
||||
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
||||
|
||||
const LoggingEnabled = IsDev
|
||||
|
||||
@@ -42,6 +43,9 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
const _reviewService = useRef(new ReviewService(device))
|
||||
|
||||
const [showAndroidWebviewUpdatePrompt, setShowAndroidWebviewUpdatePrompt] = useState(false)
|
||||
const [didLoadEnd, setDidLoadEnd] = useState(false)
|
||||
|
||||
const insets = useSafeAreaInsets()
|
||||
|
||||
useEffect(() => {
|
||||
const removeStateServiceListener = stateService.addEventObserver((event: ReactNativeToWebEvent) => {
|
||||
@@ -58,7 +62,7 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
webViewRef.current?.postMessage(JSON.stringify({ reactNativeEvent: event, messageType: 'event' }))
|
||||
})
|
||||
|
||||
const keyboardShowListener = Keyboard.addListener('keyboardWillShow', () => {
|
||||
const keyboardWillShowListener = Keyboard.addListener('keyboardWillShow', () => {
|
||||
device.reloadStatusBarStyle(false)
|
||||
webViewRef.current?.postMessage(
|
||||
JSON.stringify({
|
||||
@@ -78,45 +82,62 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
)
|
||||
})
|
||||
|
||||
const keyboardHideListener = Keyboard.addListener('keyboardDidHide', () => {
|
||||
device.reloadStatusBarStyle(false)
|
||||
})
|
||||
|
||||
const keyboardWillChangeFrame = Keyboard.addListener('keyboardWillChangeFrame', (e) => {
|
||||
const fireKeyboardSizeChangeEvent = (e: KeyboardEvent) => {
|
||||
webViewRef.current?.postMessage(
|
||||
JSON.stringify({
|
||||
reactNativeEvent: ReactNativeToWebEvent.KeyboardFrameWillChange,
|
||||
reactNativeEvent: ReactNativeToWebEvent.KeyboardSizeChanged,
|
||||
messageType: 'event',
|
||||
messageData: {
|
||||
height: e.endCoordinates.height,
|
||||
contentHeight: e.endCoordinates.screenY,
|
||||
isFloatingKeyboard: e.endCoordinates.width !== Dimensions.get('window').width,
|
||||
isFloatingKeyboard: Math.floor(e.endCoordinates.width) !== Math.floor(Dimensions.get('window').width),
|
||||
},
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
const keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', (e) => {
|
||||
// iOS handles this using the `willChangeFrame` event instead
|
||||
if (Platform.OS === 'android' && insets.bottom > 0) {
|
||||
fireKeyboardSizeChangeEvent(e)
|
||||
webViewRef.current?.postMessage(
|
||||
JSON.stringify({
|
||||
reactNativeEvent: ReactNativeToWebEvent.KeyboardDidShow,
|
||||
messageType: 'event',
|
||||
}),
|
||||
)
|
||||
}
|
||||
device.reloadStatusBarStyle(false)
|
||||
})
|
||||
|
||||
const keyboardDidChangeFrame = Keyboard.addListener('keyboardDidChangeFrame', (e) => {
|
||||
webViewRef.current?.postMessage(
|
||||
JSON.stringify({
|
||||
reactNativeEvent: ReactNativeToWebEvent.KeyboardFrameDidChange,
|
||||
messageType: 'event',
|
||||
messageData: { height: e.endCoordinates.height, contentHeight: e.endCoordinates.screenY },
|
||||
}),
|
||||
)
|
||||
const keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => {
|
||||
// iOS handles this using the `willChangeFrame` event instead
|
||||
if (Platform.OS === 'android' && insets.bottom > 0) {
|
||||
webViewRef.current?.postMessage(
|
||||
JSON.stringify({
|
||||
reactNativeEvent: ReactNativeToWebEvent.KeyboardDidHide,
|
||||
messageType: 'event',
|
||||
}),
|
||||
)
|
||||
}
|
||||
device.reloadStatusBarStyle(false)
|
||||
})
|
||||
|
||||
const keyboardWillChangeFrame = Keyboard.addListener('keyboardWillChangeFrame', (e) => {
|
||||
fireKeyboardSizeChangeEvent(e)
|
||||
})
|
||||
|
||||
return () => {
|
||||
removeStateServiceListener()
|
||||
removeBackHandlerServiceListener()
|
||||
removeColorSchemeServiceListener()
|
||||
keyboardShowListener.remove()
|
||||
keyboardHideListener.remove()
|
||||
keyboardWillChangeFrame.remove()
|
||||
keyboardDidChangeFrame.remove()
|
||||
keyboardWillShowListener.remove()
|
||||
keyboardWillHideListener.remove()
|
||||
keyboardDidShowListener.remove()
|
||||
keyboardDidHideListener.remove()
|
||||
keyboardWillChangeFrame.remove()
|
||||
}
|
||||
}, [webViewRef, stateService, device, androidBackHandlerService, colorSchemeService])
|
||||
}, [webViewRef, stateService, device, androidBackHandlerService, colorSchemeService, insets.bottom])
|
||||
|
||||
useEffect(() => {
|
||||
return notifee.onForegroundEvent(({ type, detail }) => {
|
||||
@@ -333,6 +354,7 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
receivedSharedItemsHandlerInstance.deinit()
|
||||
}
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
return device.addApplicationEventReceiver((event) => {
|
||||
if (event === ApplicationEvent.Launched) {
|
||||
@@ -341,7 +363,16 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
})
|
||||
}, [device])
|
||||
|
||||
const [didLoadEnd, setDidLoadEnd] = useState(false)
|
||||
const injectJS = `
|
||||
document.documentElement.style.setProperty('--safe-area-inset-top', '${insets.top}px');
|
||||
document.documentElement.style.setProperty('--safe-area-inset-bottom', '${insets.bottom}px');
|
||||
document.documentElement.style.setProperty('--safe-area-inset-left', '${insets.left}px');
|
||||
document.documentElement.style.setProperty('--safe-area-inset-right', '${insets.right}px');
|
||||
true;
|
||||
`
|
||||
if (Platform.OS === 'android') {
|
||||
webViewRef.current?.injectJavaScript(injectJS)
|
||||
}
|
||||
|
||||
if (showAndroidWebviewUpdatePrompt) {
|
||||
return (
|
||||
|
||||
@@ -3,6 +3,28 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.58.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Prevent setting negative item created_at_timestamp values ([#2913](https://github.com/standardnotes/app/issues/2913)) ([2459e06](https://github.com/standardnotes/app/commit/2459e06b19f54a5a35b6dde11f361dc5c60ab7f5))
|
||||
|
||||
# [1.58.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
### Features
|
||||
|
||||
* Tag search will now only show the direct tag results instead of also showing the parent and siblings ([#2906](https://github.com/standardnotes/app/issues/2906)) ([caa8eff](https://github.com/standardnotes/app/commit/caa8eff216b2d7a47f849f85f1eb2248eea10c62))
|
||||
|
||||
## [1.57.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
# [1.57.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
### Features
|
||||
|
||||
* Added image alignment options and preference in Super notes ([#2903](https://github.com/standardnotes/app/issues/2903)) ([7bce025](https://github.com/standardnotes/app/commit/7bce025efbab6d57c4dabb8354d400c87eb90032))
|
||||
|
||||
## [1.56.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-05-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/models",
|
||||
"version": "1.56.1",
|
||||
"version": "1.58.1",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
|
||||
@@ -0,0 +1,438 @@
|
||||
import { deepFreeze, useBoolean } from '@standardnotes/utils'
|
||||
import { PayloadSource } from '../Types/PayloadSource'
|
||||
import { TransferPayload } from '../../TransferPayload/Interfaces/TransferPayload'
|
||||
import { ItemContent, FillItemContent } from '../../Content/ItemContent'
|
||||
import { PurePayload } from './PurePayload'
|
||||
import { SyncResolvedParams, SyncResolvedPayload } from '../../../Runtime/Deltas/Utilities/SyncResolvedPayload'
|
||||
import { PersistentSignatureData } from '../../../Runtime/Encryption/PersistentSignatureData'
|
||||
import { ContentType } from '@standardnotes/domain-core'
|
||||
|
||||
// Mock the utils functions
|
||||
jest.mock('@standardnotes/utils', () => ({
|
||||
deepFreeze: jest.fn(),
|
||||
useBoolean: jest.fn((value, defaultValue) => value !== undefined ? !!value : defaultValue),
|
||||
}))
|
||||
|
||||
// Mock the content type encryption check
|
||||
jest.mock('../../../Runtime/Encryption/ContentTypeUsesRootKeyEncryption', () => ({
|
||||
ContentTypeUsesRootKeyEncryption: jest.fn((contentType: string) => {
|
||||
const rootKeyTypes = [
|
||||
ContentType.TYPES.RootKey,
|
||||
ContentType.TYPES.ItemsKey,
|
||||
ContentType.TYPES.EncryptedStorage,
|
||||
ContentType.TYPES.TrustedContact,
|
||||
ContentType.TYPES.KeySystemRootKey,
|
||||
]
|
||||
return rootKeyTypes.includes(contentType)
|
||||
}),
|
||||
}))
|
||||
|
||||
class TestPurePayload extends PurePayload<TransferPayload<ItemContent>, ItemContent> {
|
||||
copy(override?: Partial<TransferPayload>, source?: PayloadSource): this {
|
||||
const newPayload = {
|
||||
...this.ejected(),
|
||||
...override,
|
||||
}
|
||||
return new TestPurePayload(newPayload, source || this.source) as this
|
||||
}
|
||||
|
||||
copyAsSyncResolved(override?: Partial<TransferPayload<ItemContent>> & SyncResolvedParams, source?: PayloadSource): SyncResolvedPayload {
|
||||
const newPayload = {
|
||||
...this.ejected(),
|
||||
...override,
|
||||
}
|
||||
return new TestPurePayload(newPayload, source || this.source) as any
|
||||
}
|
||||
}
|
||||
|
||||
describe('PurePayload', () => {
|
||||
const mockDeepFreeze = deepFreeze as jest.MockedFunction<typeof deepFreeze>
|
||||
const mockUseBoolean = useBoolean as jest.MockedFunction<typeof useBoolean>
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks()
|
||||
mockDeepFreeze.mockImplementation((obj) => obj)
|
||||
mockUseBoolean.mockImplementation((value, defaultValue) => value !== undefined ? !!value : defaultValue)
|
||||
})
|
||||
|
||||
const createValidRawPayload = (overrides: Partial<TransferPayload<ItemContent>> = {}): TransferPayload<ItemContent> => ({
|
||||
uuid: '123e4567-e89b-12d3-a456-426614174000',
|
||||
content_type: ContentType.TYPES.Note,
|
||||
content: FillItemContent({}),
|
||||
deleted: false,
|
||||
updated_at: new Date('2023-01-01T12:00:00Z'),
|
||||
created_at: new Date('2023-01-01T10:00:00Z'),
|
||||
created_at_timestamp: 1672570800000,
|
||||
updated_at_timestamp: 1672578000000,
|
||||
...overrides,
|
||||
})
|
||||
|
||||
describe('constructor', () => {
|
||||
it('should throw error when uuid is null', () => {
|
||||
const rawPayload = createValidRawPayload({ uuid: null as any })
|
||||
|
||||
expect(() => new TestPurePayload(rawPayload)).toThrow(
|
||||
'Attempting to construct payload with null uuid'
|
||||
)
|
||||
})
|
||||
|
||||
it('should throw error when uuid is undefined', () => {
|
||||
const rawPayload = createValidRawPayload({ uuid: undefined as any })
|
||||
|
||||
expect(() => new TestPurePayload(rawPayload)).toThrow(
|
||||
'Attempting to construct payload with null uuid'
|
||||
)
|
||||
})
|
||||
|
||||
it('should throw error when content type uses root key encryption but has key_system_identifier', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
content_type: ContentType.TYPES.RootKey,
|
||||
key_system_identifier: 'some-key-system-id'
|
||||
})
|
||||
|
||||
expect(() => new TestPurePayload(rawPayload)).toThrow(
|
||||
'Rootkey-encrypted payload should not have a key system identifier'
|
||||
)
|
||||
})
|
||||
|
||||
it('should allow key_system_identifier for non-root-key content types', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
content_type: ContentType.TYPES.Note,
|
||||
key_system_identifier: 'some-key-system-id'
|
||||
})
|
||||
|
||||
expect(() => new TestPurePayload(rawPayload)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should set all properties correctly from raw payload', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
uuid: 'test-uuid',
|
||||
content_type: ContentType.TYPES.Note,
|
||||
content: FillItemContent({ references: [] }),
|
||||
deleted: true,
|
||||
dirty: true,
|
||||
duplicate_of: 'original-uuid',
|
||||
user_uuid: 'user-uuid',
|
||||
key_system_identifier: 'key-system-id',
|
||||
shared_vault_uuid: 'vault-uuid',
|
||||
last_edited_by_uuid: 'editor-uuid',
|
||||
dirtyIndex: 5,
|
||||
globalDirtyIndexAtLastSync: 3,
|
||||
lastSyncBegan: new Date('2023-01-01T11:00:00Z'),
|
||||
lastSyncEnd: new Date('2023-01-01T11:30:00Z'),
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload, PayloadSource.LocalDatabaseLoaded)
|
||||
|
||||
expect(payload.uuid).toBe('test-uuid')
|
||||
expect(payload.content_type).toBe(ContentType.TYPES.Note)
|
||||
expect(payload.content).toEqual(rawPayload.content)
|
||||
expect(payload.deleted).toBe(true)
|
||||
expect(payload.dirty).toBe(true)
|
||||
expect(payload.duplicate_of).toBe('original-uuid')
|
||||
expect(payload.user_uuid).toBe('user-uuid')
|
||||
expect(payload.key_system_identifier).toBe('key-system-id')
|
||||
expect(payload.shared_vault_uuid).toBe('vault-uuid')
|
||||
expect(payload.last_edited_by_uuid).toBe('editor-uuid')
|
||||
expect(payload.dirtyIndex).toBe(5)
|
||||
expect(payload.globalDirtyIndexAtLastSync).toBe(3)
|
||||
expect(payload.source).toBe(PayloadSource.LocalDatabaseLoaded)
|
||||
})
|
||||
|
||||
it('should use default PayloadSource.Constructor when source is not provided', () => {
|
||||
const rawPayload = createValidRawPayload()
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.source).toBe(PayloadSource.Constructor)
|
||||
})
|
||||
|
||||
it('should call useBoolean for deleted field', () => {
|
||||
const rawPayload = createValidRawPayload({ deleted: true })
|
||||
mockUseBoolean.mockReturnValue(true)
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(mockUseBoolean).toHaveBeenCalledWith(true, false)
|
||||
expect(payload.deleted).toBe(true)
|
||||
})
|
||||
|
||||
it('should use false as default for deleted when undefined', () => {
|
||||
const rawPayload = createValidRawPayload({ deleted: undefined })
|
||||
mockUseBoolean.mockReturnValue(false)
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(mockUseBoolean).toHaveBeenCalledWith(undefined, false)
|
||||
expect(payload.deleted).toBe(false)
|
||||
})
|
||||
|
||||
it('should handle optional properties as undefined when not provided', () => {
|
||||
const rawPayload = createValidRawPayload()
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.user_uuid).toBeUndefined()
|
||||
expect(payload.key_system_identifier).toBeUndefined()
|
||||
expect(payload.shared_vault_uuid).toBeUndefined()
|
||||
expect(payload.last_edited_by_uuid).toBeUndefined()
|
||||
expect(payload.dirty).toBeUndefined()
|
||||
expect(payload.duplicate_of).toBeUndefined()
|
||||
expect(payload.dirtyIndex).toBeUndefined()
|
||||
expect(payload.globalDirtyIndexAtLastSync).toBeUndefined()
|
||||
})
|
||||
|
||||
it('should schedule deepFreeze to be called', (done) => {
|
||||
const rawPayload = createValidRawPayload()
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
setTimeout(() => {
|
||||
expect(mockDeepFreeze).toHaveBeenCalledWith(payload)
|
||||
done()
|
||||
}, 10)
|
||||
})
|
||||
})
|
||||
|
||||
describe('date handling', () => {
|
||||
it('should handle valid dates correctly', () => {
|
||||
const createdAt = new Date('2023-01-01T10:00:00Z')
|
||||
const updatedAt = new Date('2023-01-01T12:00:00Z')
|
||||
const rawPayload = createValidRawPayload({
|
||||
created_at: createdAt,
|
||||
updated_at: updatedAt,
|
||||
created_at_timestamp: createdAt.getTime(),
|
||||
updated_at_timestamp: updatedAt.getTime(),
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.created_at).toEqual(createdAt)
|
||||
expect(payload.updated_at).toEqual(updatedAt)
|
||||
expect(payload.created_at_timestamp).toBe(createdAt.getTime())
|
||||
expect(payload.updated_at_timestamp).toBe(updatedAt.getTime())
|
||||
})
|
||||
|
||||
it('should handle negative updated_at dates by resetting to epoch', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
updated_at: new Date(-1000),
|
||||
updated_at_timestamp: -1000,
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.updated_at).toEqual(new Date(0))
|
||||
expect(payload.updated_at_timestamp).toBe(0)
|
||||
})
|
||||
|
||||
it('should handle negative created_at dates by using updated_at values', () => {
|
||||
const updatedAt = new Date('2023-01-01T12:00:00Z')
|
||||
const rawPayload = createValidRawPayload({
|
||||
created_at: new Date(-1000),
|
||||
created_at_timestamp: -1000,
|
||||
updated_at: updatedAt,
|
||||
updated_at_timestamp: updatedAt.getTime(),
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.created_at).toEqual(updatedAt)
|
||||
expect(payload.created_at_timestamp).toBe(updatedAt.getTime())
|
||||
})
|
||||
|
||||
it('should use current date for created_at when not provided', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
created_at: undefined as any,
|
||||
created_at_timestamp: undefined as any,
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.created_at).toBeInstanceOf(Date)
|
||||
expect(payload.created_at.getTime()).toBeGreaterThan(0)
|
||||
})
|
||||
|
||||
it('should use epoch date for updated_at when not provided', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
updated_at: undefined as any,
|
||||
updated_at_timestamp: undefined as any,
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.updated_at).toEqual(new Date(0))
|
||||
expect(payload.updated_at_timestamp).toBe(0)
|
||||
})
|
||||
|
||||
it('should handle sync dates correctly', () => {
|
||||
const syncBegan = new Date('2023-01-01T11:00:00Z')
|
||||
const syncEnd = new Date('2023-01-01T11:30:00Z')
|
||||
const rawPayload = createValidRawPayload({
|
||||
lastSyncBegan: syncBegan,
|
||||
lastSyncEnd: syncEnd,
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.lastSyncBegan).toEqual(syncBegan)
|
||||
expect(payload.lastSyncEnd).toEqual(syncEnd)
|
||||
})
|
||||
|
||||
it('should handle undefined sync dates', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
lastSyncBegan: undefined,
|
||||
lastSyncEnd: undefined,
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.lastSyncBegan).toBeUndefined()
|
||||
expect(payload.lastSyncEnd).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('ejected method', () => {
|
||||
it('should return comprehensive TransferPayload', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
uuid: 'test-uuid',
|
||||
content_type: ContentType.TYPES.Note,
|
||||
content: FillItemContent({ references: [] }),
|
||||
deleted: true,
|
||||
dirty: true,
|
||||
duplicate_of: 'original-uuid',
|
||||
user_uuid: 'user-uuid',
|
||||
key_system_identifier: 'key-system-id',
|
||||
shared_vault_uuid: 'vault-uuid',
|
||||
last_edited_by_uuid: 'editor-uuid',
|
||||
dirtyIndex: 5,
|
||||
globalDirtyIndexAtLastSync: 3,
|
||||
lastSyncBegan: new Date('2023-01-01T11:00:00Z'),
|
||||
lastSyncEnd: new Date('2023-01-01T11:30:00Z'),
|
||||
})
|
||||
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
const ejected = payload.ejected()
|
||||
|
||||
expect(ejected.uuid).toBe('test-uuid')
|
||||
expect(ejected.content_type).toBe(ContentType.TYPES.Note)
|
||||
expect(ejected.content).toEqual(rawPayload.content)
|
||||
expect(ejected.deleted).toBe(true)
|
||||
expect(ejected.dirty).toBe(true)
|
||||
expect(ejected.duplicate_of).toBe('original-uuid')
|
||||
expect(ejected.user_uuid).toBe('user-uuid')
|
||||
expect(ejected.key_system_identifier).toBe('key-system-id')
|
||||
expect(ejected.shared_vault_uuid).toBe('vault-uuid')
|
||||
expect(ejected.last_edited_by_uuid).toBe('editor-uuid')
|
||||
expect(ejected.dirtyIndex).toBe(5)
|
||||
expect(ejected.globalDirtyIndexAtLastSync).toBe(3)
|
||||
expect(ejected.lastSyncBegan).toEqual(new Date('2023-01-01T11:00:00Z'))
|
||||
expect(ejected.lastSyncEnd).toEqual(new Date('2023-01-01T11:30:00Z'))
|
||||
})
|
||||
|
||||
it('should include undefined values in ejected payload', () => {
|
||||
const rawPayload = createValidRawPayload()
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
const ejected = payload.ejected()
|
||||
|
||||
expect(ejected.user_uuid).toBeUndefined()
|
||||
expect(ejected.key_system_identifier).toBeUndefined()
|
||||
expect(ejected.shared_vault_uuid).toBeUndefined()
|
||||
expect(ejected.last_edited_by_uuid).toBeUndefined()
|
||||
expect(ejected.dirty).toBeUndefined()
|
||||
expect(ejected.duplicate_of).toBeUndefined()
|
||||
expect(ejected.dirtyIndex).toBeUndefined()
|
||||
expect(ejected.globalDirtyIndexAtLastSync).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('getters', () => {
|
||||
it('should return correct serverUpdatedAt', () => {
|
||||
const updatedAt = new Date('2023-01-01T12:00:00Z')
|
||||
const rawPayload = createValidRawPayload({ updated_at: updatedAt })
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.serverUpdatedAt).toEqual(updatedAt)
|
||||
})
|
||||
|
||||
it('should return correct serverUpdatedAtTimestamp', () => {
|
||||
const timestamp = 1672578000000
|
||||
const rawPayload = createValidRawPayload({ updated_at_timestamp: timestamp })
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.serverUpdatedAtTimestamp).toBe(timestamp)
|
||||
})
|
||||
})
|
||||
|
||||
describe('signature data', () => {
|
||||
it('should handle signature data correctly', () => {
|
||||
const signatureData: PersistentSignatureData = {
|
||||
signature: 'test-signature',
|
||||
publicKey: 'test-public-key',
|
||||
} as any
|
||||
|
||||
const rawPayload = createValidRawPayload({ signatureData })
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.signatureData).toEqual(signatureData)
|
||||
})
|
||||
|
||||
it('should handle undefined signature data', () => {
|
||||
const rawPayload = createValidRawPayload({ signatureData: undefined })
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.signatureData).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('error handling', () => {
|
||||
it('should include content_type in error message when uuid is null', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
uuid: null as any,
|
||||
content_type: ContentType.TYPES.Note,
|
||||
})
|
||||
|
||||
expect(() => new TestPurePayload(rawPayload)).toThrow(
|
||||
/Content type: Note/
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe('edge cases', () => {
|
||||
it('should handle empty string content', () => {
|
||||
const rawPayload = createValidRawPayload({ content: '' })
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.content).toBe('')
|
||||
})
|
||||
|
||||
it('should handle string content', () => {
|
||||
const rawPayload = createValidRawPayload({ content: 'encrypted-content' })
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.content).toBe('encrypted-content')
|
||||
})
|
||||
|
||||
it('should handle zero timestamps', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
created_at_timestamp: 0,
|
||||
updated_at_timestamp: 0,
|
||||
})
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.created_at_timestamp).toBe(0)
|
||||
expect(payload.updated_at_timestamp).toBe(0)
|
||||
})
|
||||
|
||||
it('should handle null/undefined nullish coalescing correctly', () => {
|
||||
const rawPayload = createValidRawPayload({
|
||||
user_uuid: null as any,
|
||||
key_system_identifier: null as any,
|
||||
shared_vault_uuid: null as any,
|
||||
last_edited_by_uuid: null as any,
|
||||
})
|
||||
const payload = new TestPurePayload(rawPayload)
|
||||
|
||||
expect(payload.user_uuid).toBeUndefined()
|
||||
expect(payload.key_system_identifier).toBeUndefined()
|
||||
expect(payload.shared_vault_uuid).toBeUndefined()
|
||||
expect(payload.last_edited_by_uuid).toBeUndefined()
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -65,7 +65,7 @@ export abstract class PurePayload<T extends TransferPayload<C>, C extends ItemCo
|
||||
this.updated_at = new Date(rawPayload.updated_at || 0)
|
||||
this.updated_at_timestamp = rawPayload.updated_at_timestamp || 0
|
||||
|
||||
if (this.updated_at_timestamp < 0) {
|
||||
if (this.updated_at < new Date(0) || this.updated_at_timestamp < 0) {
|
||||
this.updated_at_timestamp = 0
|
||||
this.updated_at = new Date(0)
|
||||
}
|
||||
@@ -73,7 +73,7 @@ export abstract class PurePayload<T extends TransferPayload<C>, C extends ItemCo
|
||||
this.created_at = new Date(rawPayload.created_at || new Date())
|
||||
this.created_at_timestamp = rawPayload.created_at_timestamp || 0
|
||||
|
||||
if (this.created_at_timestamp < 0) {
|
||||
if (this.created_at < new Date(0) || this.created_at_timestamp < 0) {
|
||||
this.created_at_timestamp = this.updated_at_timestamp
|
||||
this.created_at = this.updated_at
|
||||
}
|
||||
|
||||
@@ -38,8 +38,11 @@ export function itemMatchesQuery(
|
||||
searchQuery: SearchQuery,
|
||||
collection: ReferenceLookupCollection,
|
||||
): boolean {
|
||||
const shouldCheckForSomeTagMatches = searchQuery.shouldCheckForSomeTagMatches ?? true
|
||||
const itemTags = collection.elementsReferencingElement(itemToMatch, ContentType.TYPES.Tag) as SNTag[]
|
||||
const someTagsMatches = itemTags.some((tag) => matchResultForStringQuery(tag, searchQuery.query) !== MatchResult.None)
|
||||
const someTagsMatches =
|
||||
shouldCheckForSomeTagMatches &&
|
||||
itemTags.some((tag) => matchResultForStringQuery(tag, searchQuery.query) !== MatchResult.None)
|
||||
|
||||
if (itemToMatch.protected && !searchQuery.includeProtectedNoteText) {
|
||||
const match = matchResultForStringQuery(itemToMatch, searchQuery.query)
|
||||
|
||||
@@ -5,6 +5,7 @@ import { SearchableItem } from './SearchableItem'
|
||||
export type SearchQuery = {
|
||||
query: string
|
||||
includeProtectedNoteText: boolean
|
||||
shouldCheckForSomeTagMatches?: boolean
|
||||
}
|
||||
|
||||
export interface ReferenceLookupCollection {
|
||||
|
||||
@@ -43,6 +43,7 @@ export const PrefDefaults = {
|
||||
[PrefKey.SuperNoteExportEmbedBehavior]: 'reference',
|
||||
[PrefKey.SuperNoteExportUseMDFrontmatter]: true,
|
||||
[PrefKey.SuperNoteExportPDFPageSize]: 'A4',
|
||||
[PrefKey.SuperNoteImageAlignment]: 'left',
|
||||
[PrefKey.SystemViewPreferences]: {},
|
||||
[PrefKey.AuthenticatorNames]: '',
|
||||
[PrefKey.ComponentPreferences]: {},
|
||||
|
||||
@@ -36,6 +36,7 @@ export enum PrefKey {
|
||||
SuperNoteExportEmbedBehavior = 'superNoteExportEmbedBehavior',
|
||||
SuperNoteExportUseMDFrontmatter = 'superNoteExportUseMDFrontmatter',
|
||||
SuperNoteExportPDFPageSize = 'superNoteExportPDFPageSize',
|
||||
SuperNoteImageAlignment = 'superNoteImageAlignment',
|
||||
AuthenticatorNames = 'authenticatorNames',
|
||||
PaneGesturesEnabled = 'paneGesturesEnabled',
|
||||
ComponentPreferences = 'componentPreferences',
|
||||
@@ -101,4 +102,5 @@ export type PrefValue = {
|
||||
[PrefKey.AddImportsToTag]: boolean
|
||||
[PrefKey.AlwaysCreateNewTagForImports]: boolean
|
||||
[PrefKey.ExistingTagForImports]: string | undefined
|
||||
[PrefKey.SuperNoteImageAlignment]: 'left' | 'center' | 'right'
|
||||
}
|
||||
|
||||
@@ -3,6 +3,94 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.4.834](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.833](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-04)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.832](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.831](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.830](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.829](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.828](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.827](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.826](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.825](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.824](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.823](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.822](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.821](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-05)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.820](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.819](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.818](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.817](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.816](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.815](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.814](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.813](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.812](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/releases",
|
||||
"version": "1.4.812",
|
||||
"version": "1.4.834",
|
||||
"license": "AGPL-3.0",
|
||||
"main": "dist/releases.json",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -3,6 +3,28 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.71.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.71.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.71.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.71.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.71.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with keyboard on Android covering content ([#2899](https://github.com/standardnotes/app/issues/2899)) ([c4e0138](https://github.com/standardnotes/app/commit/c4e0138ce3ef9bc0adb75dae08aec2203473552d))
|
||||
|
||||
## [1.71.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-11-22)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/services",
|
||||
"version": "1.71.4",
|
||||
"version": "1.71.9",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -6,6 +6,5 @@ export enum WebAppEvent {
|
||||
PanelResized = 'PanelResized',
|
||||
WindowDidFocus = 'WindowDidFocus',
|
||||
WindowDidBlur = 'WindowDidBlur',
|
||||
MobileKeyboardDidChangeFrame = 'MobileKeyboardDidChangeFrame',
|
||||
MobileKeyboardWillChangeFrame = 'MobileKeyboardWillChangeFrame',
|
||||
}
|
||||
|
||||
@@ -3,6 +3,34 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.209.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.209.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with UI sometimes getting shifted up on iOS ([c050a2c](https://github.com/standardnotes/app/commit/c050a2cd339bb7a8fd482904216de1db2b8fe568))
|
||||
|
||||
## [2.209.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.209.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.209.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.209.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with keyboard on Android covering content ([#2899](https://github.com/standardnotes/app/issues/2899)) ([c4e0138](https://github.com/standardnotes/app/commit/c4e0138ce3ef9bc0adb75dae08aec2203473552d))
|
||||
|
||||
## [2.209.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-11-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
@@ -5,10 +5,11 @@ export enum ReactNativeToWebEvent {
|
||||
LosingFocus = 'LosingFocus',
|
||||
AndroidBackButtonPressed = 'AndroidBackButtonPressed',
|
||||
ColorSchemeChanged = 'ColorSchemeChanged',
|
||||
KeyboardFrameWillChange = 'KeyboardFrameWillChange',
|
||||
KeyboardFrameDidChange = 'KeyboardFrameDidChange',
|
||||
KeyboardSizeChanged = 'KeyboardSizeChanged',
|
||||
KeyboardWillShow = 'KeyboardWillShow',
|
||||
KeyboardWillHide = 'KeyboardWillHide',
|
||||
KeyboardDidShow = 'KeyboardDidShow',
|
||||
KeyboardDidHide = 'KeyboardDidHide',
|
||||
ReceivedFile = 'ReceivedFile',
|
||||
ReceivedLink = 'ReceivedLink',
|
||||
ReceivedText = 'ReceivedText',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/snjs",
|
||||
"version": "2.209.6",
|
||||
"version": "2.209.12",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,44 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.38.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.38.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix simplenote converter ([f776cb3](https://github.com/standardnotes/app/commit/f776cb30d488d70994afdc174bb8035cf100b810))
|
||||
|
||||
## [1.38.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with UI sometimes getting shifted up on iOS ([c050a2c](https://github.com/standardnotes/app/commit/c050a2cd339bb7a8fd482904216de1db2b8fe568))
|
||||
|
||||
## [1.38.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.38.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.38.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.38.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with keyboard on Android covering content ([#2899](https://github.com/standardnotes/app/issues/2899)) ([c4e0138](https://github.com/standardnotes/app/commit/c4e0138ce3ef9bc0adb75dae08aec2203473552d))
|
||||
|
||||
## [1.38.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.38.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-01-31)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/ui-services",
|
||||
"version": "1.38.3",
|
||||
"version": "1.38.11",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -22,7 +22,7 @@ describe('SimplenoteConverter', () => {
|
||||
it('should parse', async () => {
|
||||
const converter = new SimplenoteConverter()
|
||||
|
||||
const result = await converter.parse(data, createNote)
|
||||
const result = await converter.parse(data, createNote, (markdown) => markdown)
|
||||
|
||||
expect(result).not.toBeNull()
|
||||
expect(result?.length).toBe(3)
|
||||
|
||||
@@ -50,10 +50,10 @@ export class SimplenoteConverter implements Converter {
|
||||
return false
|
||||
}
|
||||
|
||||
convert: Converter['convert'] = async (file, { insertNote: createNote, readFileAsText }) => {
|
||||
convert: Converter['convert'] = async (file, { insertNote: createNote, convertMarkdownToSuper, readFileAsText }) => {
|
||||
const content = await readFileAsText(file)
|
||||
|
||||
const notes = await this.parse(content, createNote)
|
||||
const notes = await this.parse(content, createNote, convertMarkdownToSuper)
|
||||
|
||||
if (!notes) {
|
||||
throw new Error('Could not parse notes')
|
||||
@@ -65,13 +65,18 @@ export class SimplenoteConverter implements Converter {
|
||||
}
|
||||
}
|
||||
|
||||
createNoteFromItem(item: SimplenoteItem, trashed: boolean, createNote: InsertNoteFn): ReturnType<InsertNoteFn> {
|
||||
createNoteFromItem(
|
||||
item: SimplenoteItem,
|
||||
trashed: boolean,
|
||||
createNote: InsertNoteFn,
|
||||
convertMarkdownToSuper: (markdown: string) => string,
|
||||
): ReturnType<InsertNoteFn> {
|
||||
const createdAtDate = new Date(item.creationDate)
|
||||
const updatedAtDate = new Date(item.lastModified)
|
||||
|
||||
const splitContent = splitAtFirst(item.content, '\r\n')
|
||||
const title = splitContent[0] ?? createdAtDate.toLocaleString()
|
||||
const text = splitContent[1] ?? item.content
|
||||
const text = convertMarkdownToSuper(splitContent[1] ?? item.content)
|
||||
|
||||
return createNote({
|
||||
createdAt: createdAtDate,
|
||||
@@ -83,14 +88,18 @@ export class SimplenoteConverter implements Converter {
|
||||
})
|
||||
}
|
||||
|
||||
async parse(data: string, createNote: InsertNoteFn) {
|
||||
async parse(data: string, createNote: InsertNoteFn, convertMarkdownToSuper: (markdown: string) => string) {
|
||||
try {
|
||||
const parsed = JSON.parse(data) as SimplenoteData
|
||||
const activeNotes = await Promise.all(
|
||||
parsed.activeNotes.reverse().map((item) => this.createNoteFromItem(item, false, createNote)),
|
||||
parsed.activeNotes
|
||||
.reverse()
|
||||
.map((item) => this.createNoteFromItem(item, false, createNote, convertMarkdownToSuper)),
|
||||
)
|
||||
const trashedNotes = await Promise.all(
|
||||
parsed.trashedNotes.reverse().map((item) => this.createNoteFromItem(item, true, createNote)),
|
||||
parsed.trashedNotes
|
||||
.reverse()
|
||||
.map((item) => this.createNoteFromItem(item, true, createNote, convertMarkdownToSuper)),
|
||||
)
|
||||
|
||||
return [...activeNotes, ...trashedNotes]
|
||||
|
||||
@@ -20,7 +20,7 @@ export interface WebApplicationInterface extends ApplicationInterface {
|
||||
contentHeight: number
|
||||
isFloatingKeyboard: boolean
|
||||
}): void
|
||||
handleMobileKeyboardDidChangeFrameEvent(frame: { height: number; contentHeight: number }): void
|
||||
handleMobileKeyboardDidHideEvent(): void
|
||||
handleReceivedFileEvent(file: { name: string; mimeType: string; data: string }): void
|
||||
handleReceivedTextEvent(item: { text: string; title?: string }): Promise<void>
|
||||
handleReceivedLinkEvent(item: { link: string; title: string }): Promise<void>
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.17.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/utils
|
||||
|
||||
## [1.17.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2024-05-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/utils
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/utils",
|
||||
"version": "1.17.13",
|
||||
"version": "1.17.14",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { sanitize } from 'dompurify'
|
||||
import { find, isArray, mergeWith, remove, uniq, uniqWith } from 'lodash'
|
||||
import { escape, find, isArray, mergeWith, remove, uniq, uniqWith } from 'lodash'
|
||||
import { AnyRecord } from '@standardnotes/common'
|
||||
|
||||
const collator = typeof Intl !== 'undefined' ? new Intl.Collator('en', { numeric: true }) : undefined
|
||||
@@ -612,6 +612,10 @@ export function sanitizeHtmlString(html: string): string {
|
||||
return sanitize(html)
|
||||
}
|
||||
|
||||
export function escapeHtmlString(html: string): string {
|
||||
return escape(html)
|
||||
}
|
||||
|
||||
let sharedDateFormatter: unknown
|
||||
export function dateToLocalizedString(date: Date): string {
|
||||
if (typeof Intl !== 'undefined' && Intl.DateTimeFormat && typeof navigator !== 'undefined') {
|
||||
|
||||
@@ -3,6 +3,112 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.198.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Prevent text from hiding behind navbar in Android ([#2914](https://github.com/standardnotes/app/issues/2914)) ([d02e5ca](https://github.com/standardnotes/app/commit/d02e5cab7462ea4754a3e650be571a16f6c9c7b4))
|
||||
|
||||
## [3.198.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-04)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where safe area insets were not always applying properly on iOS, causing a UI shift ([#2912](https://github.com/standardnotes/app/issues/2912)) ([117781b](https://github.com/standardnotes/app/commit/117781bb3655a2bd6b9b0ca5a4d12f7bbefd164e))
|
||||
|
||||
## [3.198.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.198.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.198.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
# [3.198.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with UI sometimes getting shifted up on iOS ([c050a2c](https://github.com/standardnotes/app/commit/c050a2cd339bb7a8fd482904216de1db2b8fe568))
|
||||
|
||||
### Features
|
||||
|
||||
* Tag search will now only show the direct tag results instead of also showing the parent and siblings ([#2906](https://github.com/standardnotes/app/issues/2906)) ([caa8eff](https://github.com/standardnotes/app/commit/caa8eff216b2d7a47f849f85f1eb2248eea10c62))
|
||||
|
||||
## [3.197.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.197.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where Android app would crash on screen rotation ([#2905](https://github.com/standardnotes/app/issues/2905)) ([9c1bb35](https://github.com/standardnotes/app/commit/9c1bb353550c0256b4e6dcbee1e087cc9ffdd628))
|
||||
|
||||
## [3.197.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.197.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
# [3.197.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)
|
||||
|
||||
### Features
|
||||
|
||||
* Added image alignment options and preference in Super notes ([#2903](https://github.com/standardnotes/app/issues/2903)) ([7bce025](https://github.com/standardnotes/app/commit/7bce025efbab6d57c4dabb8354d400c87eb90032))
|
||||
|
||||
## [3.196.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.196.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-05)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.196.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.196.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.196.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.196.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.196.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue with keyboard on Android covering content ([#2899](https://github.com/standardnotes/app/issues/2899)) ([c4e0138](https://github.com/standardnotes/app/commit/c4e0138ce3ef9bc0adb75dae08aec2203473552d))
|
||||
|
||||
## [3.196.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix issue where searching across formatted text would not work in Super note ([#2897](https://github.com/standardnotes/app/issues/2897)) (skip e2e) ([bdf6be3](https://github.com/standardnotes/app/commit/bdf6be38d241a5c35be56a50e239591294383f95))
|
||||
|
||||
## [3.196.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Always show "note from selection" option in toolbar to prevent layout shift on smaller widths (skip e2e) ([b228114](https://github.com/standardnotes/app/commit/b2281141f825ae614dbeeb3545e21f0554fc2ebe))
|
||||
|
||||
# [3.196.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
### Features
|
||||
|
||||
* Add toolbar option to create new note from selection in a Super note ([#2896](https://github.com/standardnotes/app/issues/2896)) (skip e2e) ([b32a866](https://github.com/standardnotes/app/commit/b32a866f33c17cd46fc832a63d318767930f3b05))
|
||||
|
||||
## [3.195.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
@@ -1,5 +1,267 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "3.198.5",
|
||||
"title": "[3.198.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-15)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Prevent text from hiding behind navbar in Android ([#2914](https://github.com/standardnotes/app/issues/2914)) ([d02e5ca](https://github.com/standardnotes/app/commit/d02e5cab7462ea4754a3e650be571a16f6c9c7b4))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Prevent text from hiding behind navbar in Android (#2914) (d02e5ca)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Prevent text from hiding behind navbar in Android (#2914) (d02e5ca)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.198.4",
|
||||
"title": "[3.198.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-04)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue where safe area insets were not always applying properly on iOS, causing a UI shift ([#2912](https://github.com/standardnotes/app/issues/2912)) ([117781b](https://github.com/standardnotes/app/commit/117781bb3655a2bd6b9b0ca5a4d12f7bbefd164e))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue where safe area insets were not always applying properly on iOS, causing a UI shift (#2912) (117781b)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue where safe area insets were not always applying properly on iOS, causing a UI shift (#2912) (117781b)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.198.3",
|
||||
"title": "[3.198.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-07-01)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.198.2",
|
||||
"title": "[3.198.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-26)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.198.1",
|
||||
"title": "[3.198.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.198.0",
|
||||
"title": "[3.198.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-24)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue with UI sometimes getting shifted up on iOS ([c050a2c](https://github.com/standardnotes/app/commit/c050a2cd339bb7a8fd482904216de1db2b8fe568))\n\n### Features\n\n* Tag search will now only show the direct tag results instead of also showing the parent and siblings ([#2906](https://github.com/standardnotes/app/issues/2906)) ([caa8eff](https://github.com/standardnotes/app/commit/caa8eff216b2d7a47f849f85f1eb2248eea10c62))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue with UI sometimes getting shifted up on iOS (c050a2c)",
|
||||
"Tag search will now only show the direct tag results instead of also showing the parent and siblings (#2906) (caa8eff)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue with UI sometimes getting shifted up on iOS (c050a2c)"
|
||||
],
|
||||
"Features": [
|
||||
"Tag search will now only show the direct tag results instead of also showing the parent and siblings (#2906) (caa8eff)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.197.4",
|
||||
"title": "[3.197.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-22)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.197.3",
|
||||
"title": "[3.197.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue where Android app would crash on screen rotation ([#2905](https://github.com/standardnotes/app/issues/2905)) ([9c1bb35](https://github.com/standardnotes/app/commit/9c1bb353550c0256b4e6dcbee1e087cc9ffdd628))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue where Android app would crash on screen rotation (#2905) (9c1bb35)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue where Android app would crash on screen rotation (#2905) (9c1bb35)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.197.2",
|
||||
"title": "[3.197.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-19)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.197.1",
|
||||
"title": "[3.197.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-18)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.197.0",
|
||||
"title": "[3.197.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-16)",
|
||||
"date": null,
|
||||
"body": "### Features\n\n* Added image alignment options and preference in Super notes ([#2903](https://github.com/standardnotes/app/issues/2903)) ([7bce025](https://github.com/standardnotes/app/commit/7bce025efbab6d57c4dabb8354d400c87eb90032))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Added image alignment options and preference in Super notes (#2903) (7bce025)"
|
||||
],
|
||||
"Features": [
|
||||
"Added image alignment options and preference in Super notes (#2903) (7bce025)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.9",
|
||||
"title": "[3.196.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-12)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.8",
|
||||
"title": "[3.196.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-06-05)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.7",
|
||||
"title": "[3.196.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-22)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.6",
|
||||
"title": "[3.196.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.5",
|
||||
"title": "[3.196.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-12)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.4",
|
||||
"title": "[3.196.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.3",
|
||||
"title": "[3.196.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-05-02)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue with keyboard on Android covering content ([#2899](https://github.com/standardnotes/app/issues/2899)) ([c4e0138](https://github.com/standardnotes/app/commit/c4e0138ce3ef9bc0adb75dae08aec2203473552d))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue with keyboard on Android covering content (#2899) (c4e0138)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue with keyboard on Android covering content (#2899) (c4e0138)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.2",
|
||||
"title": "[3.196.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-25)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fix issue where searching across formatted text would not work in Super note ([#2897](https://github.com/standardnotes/app/issues/2897)) (skip e2e) ([bdf6be3](https://github.com/standardnotes/app/commit/bdf6be38d241a5c35be56a50e239591294383f95))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fix issue where searching across formatted text would not work in Super note (#2897) (skip e2e) (bdf6be3)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fix issue where searching across formatted text would not work in Super note (#2897) (skip e2e) (bdf6be3)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.1",
|
||||
"title": "[3.196.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Always show \"note from selection\" option in toolbar to prevent layout shift on smaller widths (skip e2e) ([b228114](https://github.com/standardnotes/app/commit/b2281141f825ae614dbeeb3545e21f0554fc2ebe))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Always show \"note from selection\" option in toolbar to prevent layout shift on smaller widths (skip e2e) (b228114)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Always show \"note from selection\" option in toolbar to prevent layout shift on smaller widths (skip e2e) (b228114)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.196.0",
|
||||
"title": "[3.196.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)",
|
||||
"date": null,
|
||||
"body": "### Features\n\n* Add toolbar option to create new note from selection in a Super note ([#2896](https://github.com/standardnotes/app/issues/2896)) (skip e2e) ([b32a866](https://github.com/standardnotes/app/commit/b32a866f33c17cd46fc832a63d318767930f3b05))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Add toolbar option to create new note from selection in a Super note (#2896) (skip e2e) (b32a866)"
|
||||
],
|
||||
"Features": [
|
||||
"Add toolbar option to create new note from selection in a Super note (#2896) (skip e2e) (b32a866)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.195.33",
|
||||
"title": "[3.195.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2025-04-23)",
|
||||
|
||||
+10
-10
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/web",
|
||||
"version": "3.195.33",
|
||||
"version": "3.198.5",
|
||||
"license": "AGPL-3.0",
|
||||
"main": "dist/app.js",
|
||||
"author": "Standard Notes.",
|
||||
@@ -33,7 +33,7 @@
|
||||
"@standardnotes/authenticator": "^2.4.0",
|
||||
"@standardnotes/autobiography-theme": "^1.2.7",
|
||||
"@standardnotes/bold-editor": "^1.6.4",
|
||||
"@standardnotes/classic-code-editor": "^1.5.7",
|
||||
"@standardnotes/classic-code-editor": "^1.6.2",
|
||||
"@standardnotes/dynamic-theme": "^1.2.8",
|
||||
"@standardnotes/filepicker": "workspace:*",
|
||||
"@standardnotes/focus-theme": "^1.4.6",
|
||||
@@ -108,17 +108,17 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@ariakit/react": "^0.3.9",
|
||||
"@lexical/clipboard": "0.30.0",
|
||||
"@lexical/headless": "0.30.0",
|
||||
"@lexical/link": "0.30.0",
|
||||
"@lexical/list": "0.30.0",
|
||||
"@lexical/react": "0.30.0",
|
||||
"@lexical/rich-text": "0.30.0",
|
||||
"@lexical/utils": "0.30.0",
|
||||
"@lexical/clipboard": "0.32.1",
|
||||
"@lexical/headless": "0.32.1",
|
||||
"@lexical/link": "0.32.1",
|
||||
"@lexical/list": "0.32.1",
|
||||
"@lexical/react": "0.32.1",
|
||||
"@lexical/rich-text": "0.32.1",
|
||||
"@lexical/utils": "0.32.1",
|
||||
"@radix-ui/react-slot": "^1.0.1",
|
||||
"@react-pdf/renderer": "^3.3.2",
|
||||
"comlink": "^4.4.1",
|
||||
"fast-diff": "^1.3.0",
|
||||
"lexical": "0.30.0"
|
||||
"lexical": "0.32.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,8 +357,8 @@ export class WebApplication extends SNApplication implements WebApplicationInter
|
||||
this.notifyWebEvent(WebAppEvent.MobileKeyboardWillChangeFrame, frame)
|
||||
}
|
||||
|
||||
handleMobileKeyboardDidChangeFrameEvent(frame: { height: number; contentHeight: number }): void {
|
||||
this.notifyWebEvent(WebAppEvent.MobileKeyboardDidChangeFrame, frame)
|
||||
handleMobileKeyboardDidHideEvent(): void {
|
||||
setCustomViewportHeight(100, 'vh', true)
|
||||
}
|
||||
|
||||
handleOpenFilePreviewEvent({ id }: { id: string }): void {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { FunctionComponent, MouseEventHandler } from 'react'
|
||||
import { ComponentPropsWithoutRef, ForwardedRef, forwardRef, MouseEventHandler } from 'react'
|
||||
import Icon from '@/Components/Icon/Icon'
|
||||
import { IconType } from '@standardnotes/snjs'
|
||||
|
||||
type Props = {
|
||||
interface Props extends ComponentPropsWithoutRef<'button'> {
|
||||
onClick: MouseEventHandler<HTMLButtonElement>
|
||||
className?: string
|
||||
icon: IconType
|
||||
@@ -12,32 +12,31 @@ type Props = {
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
const IconButton: FunctionComponent<Props> = ({
|
||||
onClick,
|
||||
className = '',
|
||||
icon,
|
||||
title,
|
||||
focusable,
|
||||
iconClassName = '',
|
||||
disabled = false,
|
||||
}) => {
|
||||
const click: MouseEventHandler<HTMLButtonElement> = (e) => {
|
||||
e.preventDefault()
|
||||
onClick(e)
|
||||
}
|
||||
const focusableClass = focusable ? '' : 'focus:shadow-none'
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
title={title}
|
||||
className={`no-border flex cursor-pointer flex-row items-center bg-transparent ${focusableClass} ${className}`}
|
||||
onClick={click}
|
||||
disabled={disabled}
|
||||
aria-label={title}
|
||||
>
|
||||
<Icon type={icon} className={iconClassName} />
|
||||
</button>
|
||||
)
|
||||
}
|
||||
const IconButton = forwardRef(
|
||||
(
|
||||
{ onClick, className = '', icon, title, focusable, iconClassName = '', disabled = false, ...rest }: Props,
|
||||
ref: ForwardedRef<HTMLButtonElement>,
|
||||
) => {
|
||||
const click: MouseEventHandler<HTMLButtonElement> = (e) => {
|
||||
e.preventDefault()
|
||||
onClick(e)
|
||||
}
|
||||
const focusableClass = focusable ? '' : 'focus:shadow-none'
|
||||
return (
|
||||
<button
|
||||
{...rest}
|
||||
type="button"
|
||||
title={title}
|
||||
className={`no-border flex cursor-pointer flex-row items-center bg-transparent ${focusableClass} ${className}`}
|
||||
onClick={click}
|
||||
disabled={disabled}
|
||||
aria-label={title}
|
||||
ref={ref}
|
||||
>
|
||||
<Icon type={icon} className={iconClassName} />
|
||||
</button>
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
export default IconButton
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { classNames } from '@standardnotes/snjs'
|
||||
import { ButtonStyle, getColorsForPrimaryVariant } from '../Button/Button'
|
||||
import Icon from '../Icon/Icon'
|
||||
import { useAvailableSafeAreaPadding } from '@/Hooks/useSafeAreaPadding'
|
||||
|
||||
type Props = {
|
||||
label: string
|
||||
@@ -14,12 +15,15 @@ const PropertiesRequiredForFixedPositioningToWorkOnIOSSafari: React.CSSPropertie
|
||||
|
||||
const FloatingAddButton = ({ label, style, onClick }: Props) => {
|
||||
const buttonClasses = getColorsForPrimaryVariant(style)
|
||||
const { hasBottomInset } = useAvailableSafeAreaPadding()
|
||||
|
||||
return (
|
||||
<button
|
||||
className={classNames(
|
||||
'fixed bottom-6 right-6 z-editor-title-bar ml-3 flex h-15 w-15 cursor-pointer items-center',
|
||||
'fixed right-6 z-editor-title-bar ml-3 flex h-15 w-15 cursor-pointer items-center',
|
||||
`justify-center rounded-full border border-solid border-transparent ${buttonClasses}`,
|
||||
'hover:brightness-125',
|
||||
hasBottomInset ? 'bottom-[calc(var(--safe-area-inset-bottom)+0.5rem)]' : 'bottom-6',
|
||||
)}
|
||||
title={label}
|
||||
aria-label={label}
|
||||
|
||||
@@ -13,15 +13,23 @@ import { isFileTypePreviewable } from './isFilePreviewable'
|
||||
import PreviewComponent from './PreviewComponent'
|
||||
import Button from '../Button/Button'
|
||||
import { ProtectedIllustration } from '@standardnotes/icons'
|
||||
import { ImageZoomLevelProps } from './ImageZoomLevelProps'
|
||||
import { OptionalSuperEmbeddedImageProps } from './OptionalSuperEmbeddedImageProps'
|
||||
|
||||
type Props = {
|
||||
application: WebApplication
|
||||
file: FileItem
|
||||
isEmbeddedInSuper?: boolean
|
||||
} & ImageZoomLevelProps
|
||||
} & OptionalSuperEmbeddedImageProps
|
||||
|
||||
const FilePreview = ({ file, application, isEmbeddedInSuper = false, imageZoomLevel, setImageZoomLevel }: Props) => {
|
||||
const FilePreview = ({
|
||||
file,
|
||||
application,
|
||||
isEmbeddedInSuper = false,
|
||||
imageZoomLevel,
|
||||
setImageZoomLevel,
|
||||
alignment,
|
||||
changeAlignment,
|
||||
}: Props) => {
|
||||
const [isAuthorized, setIsAuthorized] = useState(application.isAuthorizedToRenderItem(file))
|
||||
|
||||
const isFilePreviewable = useMemo(() => {
|
||||
@@ -137,6 +145,8 @@ const FilePreview = ({ file, application, isEmbeddedInSuper = false, imageZoomLe
|
||||
isEmbeddedInSuper={isEmbeddedInSuper}
|
||||
imageZoomLevel={imageZoomLevel}
|
||||
setImageZoomLevel={setImageZoomLevel}
|
||||
alignment={alignment}
|
||||
changeAlignment={changeAlignment}
|
||||
/>
|
||||
) : (
|
||||
<FilePreviewError
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
import { classNames, IconType } from '@standardnotes/snjs'
|
||||
import IconButton from '@/Components/Button/IconButton'
|
||||
import StyledTooltip from '@/Components/StyledTooltip/StyledTooltip'
|
||||
import { ElementFormatType } from 'lexical'
|
||||
|
||||
export function getCSSValueFromAlignment(format: ElementFormatType) {
|
||||
switch (format) {
|
||||
case 'start':
|
||||
case 'left':
|
||||
return 'start'
|
||||
case 'right':
|
||||
case 'end':
|
||||
return 'end'
|
||||
default:
|
||||
return 'center'
|
||||
}
|
||||
}
|
||||
|
||||
const Options = [
|
||||
{
|
||||
alignment: 'left',
|
||||
label: 'Left align',
|
||||
},
|
||||
{
|
||||
alignment: 'center',
|
||||
label: 'Center align',
|
||||
},
|
||||
{
|
||||
alignment: 'right',
|
||||
label: 'Right align',
|
||||
},
|
||||
]
|
||||
|
||||
export function ImageAlignmentOptions({
|
||||
alignment: currentAlignment,
|
||||
changeAlignment,
|
||||
}: {
|
||||
alignment: ElementFormatType
|
||||
changeAlignment: (format: ElementFormatType) => void
|
||||
}) {
|
||||
return Options.map(({ alignment, label }) => (
|
||||
<StyledTooltip label={label} key={alignment}>
|
||||
<IconButton
|
||||
className={classNames(
|
||||
alignment === currentAlignment && '!bg-info text-info-contrast',
|
||||
'rounded p-1 hover:bg-contrast',
|
||||
)}
|
||||
icon={`format-align-${alignment}` as IconType}
|
||||
title={label}
|
||||
focusable={true}
|
||||
onClick={(e) => {
|
||||
// the preventDefault and stopPropagation for these events are required
|
||||
// so that the keyboard doesn't jump when you select another option
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
changeAlignment(alignment as ElementFormatType)
|
||||
}}
|
||||
onMouseDown={(e) => {
|
||||
e.preventDefault()
|
||||
}}
|
||||
/>
|
||||
</StyledTooltip>
|
||||
))
|
||||
}
|
||||
@@ -1,12 +1,16 @@
|
||||
import { classNames, IconType } from '@standardnotes/snjs'
|
||||
import { IconType, PrefKey } from '@standardnotes/snjs'
|
||||
import { FunctionComponent, useCallback, useEffect, useState } from 'react'
|
||||
import IconButton from '../Button/IconButton'
|
||||
import { ImageZoomLevelProps } from './ImageZoomLevelProps'
|
||||
import IconButton from '@/Components/Button/IconButton'
|
||||
import { OptionalSuperEmbeddedImageProps } from './OptionalSuperEmbeddedImageProps'
|
||||
import usePreference from '@/Hooks/usePreference'
|
||||
import { getCSSValueFromAlignment, ImageAlignmentOptions } from './ImageAlignmentOptions'
|
||||
import { ElementIds } from '../../Constants/ElementIDs'
|
||||
import { getOverflows } from '@/Components/Popover/Utils/Collisions'
|
||||
|
||||
type Props = {
|
||||
objectUrl: string
|
||||
isEmbeddedInSuper: boolean
|
||||
} & ImageZoomLevelProps
|
||||
} & OptionalSuperEmbeddedImageProps
|
||||
|
||||
const MinimumZoomPercent = 10
|
||||
const DefaultZoomPercent = 100
|
||||
@@ -19,6 +23,8 @@ const ImagePreview: FunctionComponent<Props> = ({
|
||||
isEmbeddedInSuper,
|
||||
imageZoomLevel,
|
||||
setImageZoomLevel,
|
||||
alignment,
|
||||
changeAlignment,
|
||||
}) => {
|
||||
const [imageWidth, setImageWidth] = useState(0)
|
||||
const [imageHeight, setImageHeight] = useState<number>(0)
|
||||
@@ -48,8 +54,96 @@ const ImagePreview: FunctionComponent<Props> = ({
|
||||
|
||||
const widthIfEmbedded = imageWidth * (imageZoomPercent / PercentageDivisor)
|
||||
|
||||
const imageResizer = (
|
||||
<>
|
||||
<span className="mr-1.5">{isEmbeddedInSuper ? 'Size' : 'Zoom'}:</span>
|
||||
<IconButton
|
||||
className="rounded p-1 hover:bg-contrast"
|
||||
icon={'subtract' as IconType}
|
||||
title={isEmbeddedInSuper ? 'Decrease size' : 'Zoom Out'}
|
||||
focusable={true}
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
const newPercent = imageZoomPercent - ZoomPercentModifier
|
||||
if (newPercent >= ZoomPercentModifier) {
|
||||
setImageZoom(newPercent)
|
||||
} else {
|
||||
setImageZoom(imageZoomPercent)
|
||||
}
|
||||
}}
|
||||
onMouseDown={(e) => {
|
||||
e.preventDefault()
|
||||
}}
|
||||
/>
|
||||
{isZoomInputVisible ? (
|
||||
<div className="mx-2">
|
||||
<input
|
||||
type="number"
|
||||
className="w-10 bg-default text-center"
|
||||
defaultValue={imageZoomPercent}
|
||||
onKeyDown={(event) => {
|
||||
event.stopPropagation()
|
||||
if (event.key === 'Enter') {
|
||||
const value = parseInt(event.currentTarget.value)
|
||||
if (value >= MinimumZoomPercent && value <= MaximumZoomPercent) {
|
||||
setImageZoom(value)
|
||||
}
|
||||
setIsZoomInputVisible(false)
|
||||
}
|
||||
}}
|
||||
onBlur={(event) => {
|
||||
setIsZoomInputVisible(false)
|
||||
const value = parseInt(event.currentTarget.value)
|
||||
if (value >= MinimumZoomPercent && value <= MaximumZoomPercent) {
|
||||
setImageZoom(value)
|
||||
}
|
||||
}}
|
||||
/>
|
||||
%
|
||||
</div>
|
||||
) : (
|
||||
<button
|
||||
className="mx-1 rounded px-1.5 py-1 hover:bg-contrast"
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setIsZoomInputVisible((visible) => !visible)
|
||||
}}
|
||||
>
|
||||
{imageZoomPercent}%
|
||||
</button>
|
||||
)}
|
||||
<IconButton
|
||||
className="rounded p-1 hover:bg-contrast"
|
||||
icon="add"
|
||||
title={isEmbeddedInSuper ? 'Increase size' : 'Zoom In'}
|
||||
focusable={true}
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setImageZoom(imageZoomPercent + ZoomPercentModifier)
|
||||
}}
|
||||
onMouseDown={(e) => {
|
||||
e.preventDefault()
|
||||
}}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
||||
const defaultSuperImageAlignment = usePreference(PrefKey.SuperNoteImageAlignment)
|
||||
const finalAlignment = alignment || defaultSuperImageAlignment
|
||||
const justifyContent = isEmbeddedInSuper ? getCSSValueFromAlignment(finalAlignment) : 'center'
|
||||
|
||||
return (
|
||||
<div className="group relative flex h-full min-h-0 w-full items-center justify-center">
|
||||
<div
|
||||
className="group relative flex h-full min-h-0 w-full items-center"
|
||||
style={{ justifyContent }}
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className="relative flex h-full w-full items-center justify-center overflow-auto"
|
||||
style={{
|
||||
@@ -78,71 +172,37 @@ const ImagePreview: FunctionComponent<Props> = ({
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className={classNames(
|
||||
isEmbeddedInSuper ? 'hidden focus-within:flex group-hover:flex' : '',
|
||||
'absolute bottom-6 left-1/2 flex -translate-x-1/2 items-center rounded border border-solid border-border bg-default px-3 py-1',
|
||||
)}
|
||||
>
|
||||
<span className="mr-1.5">{isEmbeddedInSuper ? 'Size' : 'Zoom'}:</span>
|
||||
<IconButton
|
||||
className="rounded p-1 hover:bg-contrast"
|
||||
icon={'subtract' as IconType}
|
||||
title={isEmbeddedInSuper ? 'Decrease size' : 'Zoom Out'}
|
||||
focusable={true}
|
||||
onClick={() => {
|
||||
const newPercent = imageZoomPercent - ZoomPercentModifier
|
||||
if (newPercent >= ZoomPercentModifier) {
|
||||
setImageZoom(newPercent)
|
||||
} else {
|
||||
setImageZoom(imageZoomPercent)
|
||||
{!isEmbeddedInSuper && (
|
||||
<div className="absolute bottom-6 left-1/2 flex -translate-x-1/2 items-center rounded border border-solid border-border bg-default px-3 py-1">
|
||||
{imageResizer}
|
||||
</div>
|
||||
)}
|
||||
{isEmbeddedInSuper && (
|
||||
<div
|
||||
className="invisible absolute bottom-full left-1/2 z-10 w-max -translate-x-1/2 px-1 pb-1 focus-within:visible group-hover:visible [.embedBlockFocused_&]:visible"
|
||||
ref={(popover) => {
|
||||
const editorRoot = document.getElementById(ElementIds.SuperEditorContent)
|
||||
if (!popover || !editorRoot) {
|
||||
return
|
||||
}
|
||||
const editorRootRect = editorRoot.getBoundingClientRect()
|
||||
const popoverRect = popover.getBoundingClientRect()
|
||||
const overflows = getOverflows(popoverRect, editorRootRect)
|
||||
if (overflows.top > 0) {
|
||||
popover.style.setProperty('--tw-translate-y', `${overflows.top}px`)
|
||||
}
|
||||
}}
|
||||
/>
|
||||
{isZoomInputVisible ? (
|
||||
<div className="mx-2">
|
||||
<input
|
||||
type="number"
|
||||
className="w-10 bg-default text-center"
|
||||
defaultValue={imageZoomPercent}
|
||||
onKeyDown={(event) => {
|
||||
event.stopPropagation()
|
||||
if (event.key === 'Enter') {
|
||||
const value = parseInt(event.currentTarget.value)
|
||||
if (value >= MinimumZoomPercent && value <= MaximumZoomPercent) {
|
||||
setImageZoom(value)
|
||||
}
|
||||
setIsZoomInputVisible(false)
|
||||
}
|
||||
}}
|
||||
onBlur={(event) => {
|
||||
setIsZoomInputVisible(false)
|
||||
const value = parseInt(event.currentTarget.value)
|
||||
if (value >= MinimumZoomPercent && value <= MaximumZoomPercent) {
|
||||
setImageZoom(value)
|
||||
}
|
||||
}}
|
||||
/>
|
||||
%
|
||||
>
|
||||
<div className="flex divide-x divide-border rounded border border-border bg-default">
|
||||
{changeAlignment && (
|
||||
<div className="flex items-center gap-1 px-1 py-0.5">
|
||||
<ImageAlignmentOptions alignment={finalAlignment} changeAlignment={changeAlignment} />
|
||||
</div>
|
||||
)}
|
||||
<div className="flex items-center px-2 py-0.5 text-sm">{imageResizer}</div>
|
||||
</div>
|
||||
) : (
|
||||
<button
|
||||
className="mx-1 rounded px-1.5 py-1 hover:bg-contrast"
|
||||
onClick={() => setIsZoomInputVisible((visible) => !visible)}
|
||||
>
|
||||
{imageZoomPercent}%
|
||||
</button>
|
||||
)}
|
||||
<IconButton
|
||||
className="rounded p-1 hover:bg-contrast"
|
||||
icon="add"
|
||||
title={isEmbeddedInSuper ? 'Increase size' : 'Zoom In'}
|
||||
focusable={true}
|
||||
onClick={() => {
|
||||
setImageZoom(imageZoomPercent + ZoomPercentModifier)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user