mirror of
https://github.com/standardnotes/app
synced 2026-09-20 12:13:48 -04:00
Compare commits
49
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06d6f3b481 | ||
|
|
0ab9006c52 | ||
|
|
4d9c9d597b | ||
|
|
40179bba06 | ||
|
|
8c548d40c4 | ||
|
|
a4cfd603d2 | ||
|
|
27ab5449f6 | ||
|
|
4740e43d1c | ||
|
|
b8f78eb4fd | ||
|
|
7c1ded30c7 | ||
|
|
247ff62422 | ||
|
|
420cb4d945 | ||
|
|
7b6e5f95d5 | ||
|
|
beddb3cc6c | ||
|
|
725b49568a | ||
|
|
6b89a6615f | ||
|
|
13d56082d8 | ||
|
|
91b3978e14 | ||
|
|
b34ab6ab28 | ||
|
|
07ec2be5ee | ||
|
|
d1009e368a | ||
|
|
b0cf179a90 | ||
|
|
2c4b574bd4 | ||
|
|
d658769531 | ||
|
|
a10d5a6728 | ||
|
|
67d3f149b2 | ||
|
|
0baf500616 | ||
|
|
ef27a21fb1 | ||
|
|
76bd995c9a | ||
|
|
3ada748522 | ||
|
|
f45a639a72 | ||
|
|
8bb5bb6f9f | ||
|
|
1925d8a9c2 | ||
|
|
93a1402088 | ||
|
|
cb15d183ca | ||
|
|
e686aa29e8 | ||
|
|
96905fe980 | ||
|
|
bd3fabcaa7 | ||
|
|
c6dcbf2cc9 | ||
|
|
a5d24fa526 | ||
|
|
aa16a287fa | ||
|
|
c41f686fd0 | ||
|
|
ec358d6b07 | ||
|
|
af1e18b47e | ||
|
|
681f717072 | ||
|
|
af84d09b7a | ||
|
|
ccac1494c2 | ||
|
|
51b2d8b115 | ||
|
|
d501ae4410 |
@@ -66,12 +66,10 @@ jobs:
|
||||
packages/mobile/android/app/build/outputs/apk/prod/release/app-prod-release.apk
|
||||
|
||||
ios:
|
||||
env:
|
||||
ITMSTRANSPORTER_FORCE_ITMS_PACKAGE_UPLOAD: true
|
||||
defaults:
|
||||
run:
|
||||
working-directory: packages/mobile
|
||||
runs-on: macos-11
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 90
|
||||
steps:
|
||||
- name: Checkout code
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
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.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
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.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -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.26.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/api",
|
||||
"version": "1.26.3",
|
||||
"version": "1.26.4",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.0.34](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.28](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.27](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.26](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.25](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.0.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**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.0.23",
|
||||
"version": "1.0.34",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js",
|
||||
|
||||
@@ -3,6 +3,52 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.105.83](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.82](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.81](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.80](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.79](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.78](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.77](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **desktop:** Fixed issue where preferences header & tooltips are overlapped by custom titlebar ([ef27a21](https://github.com/standardnotes/app/commit/ef27a21fb141c4ef1a760cf6fb550e4b713f8f98))
|
||||
|
||||
## [3.105.76](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.75](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.74](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.73](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.72](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
@@ -156,7 +156,7 @@ export function createSpellcheckerManager(
|
||||
const firstOutlier = session.availableSpellCheckerLanguages.find(
|
||||
(language, index) => availableSpellCheckerLanguages[index] !== language,
|
||||
)
|
||||
throw new Error(`Found unsupported language code: ${firstOutlier}`)
|
||||
console.error(`Found unsupported language code: ${firstOutlier}`)
|
||||
}
|
||||
|
||||
setSpellcheckerLanguages()
|
||||
|
||||
@@ -114,6 +114,17 @@ async function configureWindow(remoteBridge: CrossProcessBridge) {
|
||||
if (isMacOS || useSystemMenuBar) {
|
||||
// !important is important here because #desktop-title-bar has display: flex.
|
||||
sheet.insertRule('#desktop-title-bar { display: none !important; }', sheet.cssRules.length)
|
||||
} else {
|
||||
/* Use custom title bar. Take the sn-titlebar-height off of
|
||||
the app content height so its not overflowing */
|
||||
sheet.insertRule(
|
||||
'[data-dialog] { position: relative; height: calc(100vh - var(--sn-desktop-titlebar-height)) !important; margin-top: var(--sn-desktop-titlebar-height) !important; }',
|
||||
sheet.cssRules.length,
|
||||
)
|
||||
sheet.insertRule(
|
||||
'[data-mobile-popover] { padding-top: var(--sn-desktop-titlebar-height) !important; }',
|
||||
sheet.cssRules.length,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@standardnotes/desktop",
|
||||
"main": "./app/dist/index.js",
|
||||
"version": "3.105.72",
|
||||
"version": "3.105.83",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
|
||||
@@ -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.21.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/encryption",
|
||||
"version": "1.21.31",
|
||||
"version": "1.21.32",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -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.59.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
## [1.59.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/features",
|
||||
"version": "1.59.2",
|
||||
"version": "1.59.3",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
export enum FeatureIdentifier {
|
||||
CloudLink = 'org.standardnotes.cloudlink',
|
||||
DailyDropboxBackup = 'org.standardnotes.daily-dropbox-backup',
|
||||
DailyEmailBackup = 'org.standardnotes.daily-email-backup',
|
||||
DailyGDriveBackup = 'org.standardnotes.daily-gdrive-backup',
|
||||
DailyOneDriveBackup = 'org.standardnotes.daily-onedrive-backup',
|
||||
Files = 'org.standardnotes.files',
|
||||
FilesLowStorageTier = 'org.standardnotes.files-low-storage-tier',
|
||||
FilesMaximumStorageTier = 'org.standardnotes.files-max-storage-tier',
|
||||
|
||||
@@ -41,21 +41,6 @@ export function serverFeatures(): ServerFeatureDescription[] {
|
||||
identifier: FeatureIdentifier.SignInAlerts,
|
||||
permission_name: PermissionName.SignInAlerts,
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
identifier: FeatureIdentifier.DailyDropboxBackup,
|
||||
permission_name: PermissionName.DailyDropboxBackup,
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
identifier: FeatureIdentifier.DailyGDriveBackup,
|
||||
permission_name: PermissionName.DailyGDriveBackup,
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
identifier: FeatureIdentifier.DailyOneDriveBackup,
|
||||
permission_name: PermissionName.DailyOneDriveBackup,
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
identifier: FeatureIdentifier.FilesMaximumStorageTier,
|
||||
|
||||
@@ -2,14 +2,10 @@ export enum PermissionName {
|
||||
AccountSwitcher = 'app:account-switcher',
|
||||
AutobiographyTheme = 'theme:autobiography',
|
||||
BoldEditor = 'editor:bold',
|
||||
CloudLink = 'component:cloud-link',
|
||||
CodeEditor = 'editor:code-editor',
|
||||
ComponentFilesafe = 'component:filesafe',
|
||||
ComponentFolders = 'component:folders',
|
||||
DailyDropboxBackup = 'server:daily-dropbox-backup',
|
||||
DailyEmailBackup = 'server:daily-email-backup',
|
||||
DailyGDriveBackup = 'server:daily-gdrive-backup',
|
||||
DailyOneDriveBackup = 'server:daily-onedrive-backup',
|
||||
Files = 'app:files',
|
||||
FilesMaximumStorageTier = 'server:files-max-storage-tier',
|
||||
FilesLowStorageTier = 'server:files-low-storage-tier',
|
||||
|
||||
@@ -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.28.37](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.36](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/filepicker",
|
||||
"version": "1.28.36",
|
||||
"version": "1.28.37",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -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.14.47](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.14.46](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/files",
|
||||
"version": "1.14.46",
|
||||
"version": "1.14.47",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,58 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.52.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.28](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.27](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.26](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.25](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.22](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.21](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.20](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.52.19](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.5)
|
||||
CFPropertyList (3.0.6)
|
||||
rexml
|
||||
activesupport (6.1.5)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
@@ -9,28 +9,28 @@ GEM
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
addressable (2.8.4)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
algoliasearch (1.27.5)
|
||||
httpclient (~> 2.8, >= 2.8.3)
|
||||
json (>= 1.5.1)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.603.0)
|
||||
aws-sdk-core (3.131.2)
|
||||
aws-partitions (1.755.0)
|
||||
aws-sdk-core (3.171.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.525.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.57.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-kms (1.63.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.114.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-s3 (1.121.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.0)
|
||||
aws-sigv4 (1.5.2)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.0.3)
|
||||
@@ -81,13 +81,13 @@ GEM
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
escape (0.0.4)
|
||||
ethon (0.15.0)
|
||||
ffi (>= 1.15.0)
|
||||
excon (0.92.3)
|
||||
faraday (1.10.0)
|
||||
excon (0.99.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
@@ -116,7 +116,7 @@ GEM
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.207.0)
|
||||
fastlane (2.212.2)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -160,9 +160,9 @@ GEM
|
||||
fourflusher (2.3.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.24.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-core (0.7.0)
|
||||
google-apis-androidpublisher_v3 (0.40.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@@ -171,27 +171,27 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.13.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.10.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-storage_v1 (0.17.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-iamcredentials_v1 (0.17.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.19.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.2.0)
|
||||
google-cloud-storage (1.37.0)
|
||||
google-cloud-errors (1.3.1)
|
||||
google-cloud-storage (1.44.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.19.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.2.0)
|
||||
googleauth (1.5.2)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -204,11 +204,11 @@ GEM
|
||||
httpclient (2.8.3)
|
||||
i18n (1.10.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jmespath (1.6.1)
|
||||
json (2.6.2)
|
||||
jwt (2.4.1)
|
||||
jmespath (1.6.2)
|
||||
json (2.6.3)
|
||||
jwt (2.7.0)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
minitest (5.15.0)
|
||||
molinillo (0.8.0)
|
||||
@@ -220,7 +220,7 @@ GEM
|
||||
netrc (0.11.0)
|
||||
optparse (0.1.1)
|
||||
os (1.1.4)
|
||||
plist (3.6.0)
|
||||
plist (3.7.0)
|
||||
public_suffix (4.0.7)
|
||||
rake (13.0.6)
|
||||
representable (3.2.0)
|
||||
@@ -239,7 +239,7 @@ GEM
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.8)
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
terminal-notifier (2.0.0)
|
||||
@@ -259,7 +259,7 @@ GEM
|
||||
unf_ext
|
||||
unf_ext (0.0.8.2)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
webrick (1.8.1)
|
||||
word_wrap (1.0.0)
|
||||
xcode-install (2.8.0)
|
||||
claide (>= 0.9.1, < 1.1.0)
|
||||
@@ -291,4 +291,4 @@ RUBY VERSION
|
||||
ruby 2.7.6p219
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.25
|
||||
2.3.15
|
||||
|
||||
@@ -16,7 +16,14 @@
|
||||
window.plansUrl = "https://standardnotes.com/plans";
|
||||
window.dashboardUrl = "https://standardnotes.com/dashboard";
|
||||
</script>
|
||||
|
||||
<script>
|
||||
window.onerror = function (message, source, lineno, colno, error) {
|
||||
if (document.readyState === "complete") {
|
||||
return
|
||||
}
|
||||
window.ReactNativeWebView.postMessage("appLoadError");
|
||||
};
|
||||
</script>
|
||||
<script src="web-src/app.js"></script>
|
||||
</head>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/mobile",
|
||||
"version": "3.52.19",
|
||||
"version": "3.52.32",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0-or-later",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ReactNativeToWebEvent } from '@standardnotes/snjs'
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||
import { Keyboard, Platform } from 'react-native'
|
||||
import { Button, Keyboard, Platform, Text, View } from 'react-native'
|
||||
import VersionInfo from 'react-native-version-info'
|
||||
import { WebView, WebViewMessageEvent } from 'react-native-webview'
|
||||
import { OnShouldStartLoadWithRequest } from 'react-native-webview/lib/WebViewTypes'
|
||||
@@ -34,6 +34,8 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
[androidBackHandlerService, colorSchemeService, stateService],
|
||||
)
|
||||
|
||||
const [showAndroidWebviewUpdatePrompt, setShowAndroidWebviewUpdatePrompt] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const removeStateServiceListener = stateService.addEventObserver((event: ReactNativeToWebEvent) => {
|
||||
webViewRef.current?.postMessage(JSON.stringify({ reactNativeEvent: event, messageType: 'event' }))
|
||||
@@ -228,6 +230,10 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
|
||||
const onMessage = (event: WebViewMessageEvent) => {
|
||||
const message = event.nativeEvent.data
|
||||
if (message === 'appLoadError' && Platform.OS === 'android') {
|
||||
setShowAndroidWebviewUpdatePrompt(true)
|
||||
return
|
||||
}
|
||||
try {
|
||||
const functionData = JSON.parse(message)
|
||||
void onFunctionMessage(functionData.functionName, functionData.messageId, functionData.args)
|
||||
@@ -277,6 +283,47 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo
|
||||
const requireInlineMediaPlaybackForMomentsFeature = true
|
||||
const requireMediaUserInteractionForMomentsFeature = false
|
||||
|
||||
if (showAndroidWebviewUpdatePrompt) {
|
||||
return (
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: 'black',
|
||||
}}
|
||||
>
|
||||
<Text
|
||||
style={{
|
||||
color: 'white',
|
||||
fontSize: 20,
|
||||
fontWeight: 'bold',
|
||||
marginBottom: 20,
|
||||
}}
|
||||
>
|
||||
Could not load app
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
color: 'white',
|
||||
fontSize: 16,
|
||||
marginBottom: 20,
|
||||
textAlign: 'center',
|
||||
}}
|
||||
>
|
||||
Please make sure your Android System Webview is updated to the latest version
|
||||
</Text>
|
||||
<Button
|
||||
title={'Update'}
|
||||
onPress={() => {
|
||||
setShowAndroidWebviewUpdatePrompt(false)
|
||||
device.openUrl('https://play.google.com/store/apps/details?id=com.google.android.webview')
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<WebView
|
||||
ref={webViewRef}
|
||||
|
||||
@@ -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.44.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
## [1.44.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/models",
|
||||
"version": "1.44.2",
|
||||
"version": "1.44.3",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,58 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.4.263](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.262](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.261](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.260](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.259](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.258](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.257](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.256](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.255](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.254](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.253](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.252](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.251](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.250](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/releases",
|
||||
"version": "1.4.250",
|
||||
"version": "1.4.263",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "dist/releases.json",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -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.13.21](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
## [1.13.20](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/responses",
|
||||
"version": "1.13.20",
|
||||
"version": "1.13.21",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -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.58.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.58.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/services",
|
||||
"version": "1.58.4",
|
||||
"version": "1.58.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -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.
|
||||
|
||||
## [2.167.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.167.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
@@ -29,7 +29,6 @@ import * as Models from '@standardnotes/models'
|
||||
import * as Responses from '@standardnotes/responses'
|
||||
import * as InternalServices from '../Services'
|
||||
import * as Utils from '@standardnotes/utils'
|
||||
import * as Settings from '@standardnotes/settings'
|
||||
import { Subscription } from '@standardnotes/security'
|
||||
import { UuidString, ApplicationEventPayload } from '../Types'
|
||||
import { applicationEventForSyncEvent } from '@Lib/Application/Event'
|
||||
@@ -1154,10 +1153,6 @@ export class SNApplication implements ApplicationInterface, AppGroupManagedAppli
|
||||
return this.apiService.isThirdPartyHostUsed()
|
||||
}
|
||||
|
||||
public getCloudProviderIntegrationUrl(cloudProviderName: Settings.CloudProvider): string {
|
||||
return this.settingsService.getCloudProviderIntegrationUrl(cloudProviderName)
|
||||
}
|
||||
|
||||
private constructServices() {
|
||||
this.createMappers()
|
||||
this.createPayloadManager()
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { SNApiService } from '../Api/ApiService'
|
||||
import { SettingsGateway } from './SettingsGateway'
|
||||
import { SNSessionManager } from '../Session/SessionManager'
|
||||
import { CloudProvider, EmailBackupFrequency, SettingName } from '@standardnotes/settings'
|
||||
import { ExtensionsServerURL } from '@Lib/Hosts'
|
||||
import { EmailBackupFrequency, SettingName } from '@standardnotes/settings'
|
||||
import { AbstractService, InternalEventBusInterface } from '@standardnotes/services'
|
||||
import { SettingsClientInterface } from './SettingsClientInterface'
|
||||
|
||||
@@ -14,12 +13,6 @@ export class SNSettingsService extends AbstractService implements SettingsClient
|
||||
[EmailBackupFrequency.Weekly]: 'Weekly',
|
||||
}
|
||||
|
||||
private cloudProviderIntegrationUrlEndpoints = {
|
||||
[CloudProvider.Dropbox]: 'dropbox',
|
||||
[CloudProvider.Google]: 'gdrive',
|
||||
[CloudProvider.OneDrive]: 'onedrive',
|
||||
}
|
||||
|
||||
constructor(
|
||||
private readonly sessionManager: SNSessionManager,
|
||||
private readonly apiService: SNApiService,
|
||||
@@ -60,11 +53,6 @@ export class SNSettingsService extends AbstractService implements SettingsClient
|
||||
return this.frequencyOptionsLabels[frequency]
|
||||
}
|
||||
|
||||
getCloudProviderIntegrationUrl(cloudProviderName: CloudProvider): string {
|
||||
const { Prod } = ExtensionsServerURL
|
||||
return `${Prod}/${this.cloudProviderIntegrationUrlEndpoints[cloudProviderName]}?redirect_url=${Prod}/components/cloudlink?`
|
||||
}
|
||||
|
||||
override deinit(): void {
|
||||
this.provider?.deinit()
|
||||
;(this.provider as unknown) = undefined
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
import { SettingData } from '@standardnotes/responses'
|
||||
import {
|
||||
OneDriveBackupFrequency,
|
||||
MuteSignInEmailsOption,
|
||||
MuteFailedCloudBackupsEmailsOption,
|
||||
MuteFailedBackupsEmailsOption,
|
||||
CloudProvider,
|
||||
DropboxBackupFrequency,
|
||||
EmailBackupFrequency,
|
||||
GoogleDriveBackupFrequency,
|
||||
ListedAuthorSecretsData,
|
||||
LogSessionUserAgentOption,
|
||||
SettingName,
|
||||
@@ -15,17 +11,13 @@ import {
|
||||
} from '@standardnotes/settings'
|
||||
|
||||
type SettingType =
|
||||
| CloudProvider
|
||||
| DropboxBackupFrequency
|
||||
| EmailBackupFrequency
|
||||
| GoogleDriveBackupFrequency
|
||||
| ListedAuthorSecretsData
|
||||
| LogSessionUserAgentOption
|
||||
| MuteFailedBackupsEmailsOption
|
||||
| MuteFailedCloudBackupsEmailsOption
|
||||
| MuteSignInEmailsOption
|
||||
| MuteMarketingEmailsOption
|
||||
| OneDriveBackupFrequency
|
||||
|
||||
export class SettingsList {
|
||||
private map: Partial<Record<string, SettingData>> = {}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/snjs",
|
||||
"version": "2.167.4",
|
||||
"version": "2.167.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -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.25.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.25.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/ui-services",
|
||||
"version": "1.25.4",
|
||||
"version": "1.25.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -10,7 +10,6 @@ const PREFERENCE_IDS = [
|
||||
'get-free-month',
|
||||
'help-feedback',
|
||||
'whats-new',
|
||||
'filesend',
|
||||
] as const
|
||||
|
||||
export type PreferenceId = typeof PREFERENCE_IDS[number]
|
||||
|
||||
@@ -3,6 +3,56 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.153.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where removing a collapsible block would unwrap the contents in reverse order ([40179bb](https://github.com/standardnotes/app/commit/40179bba06228acf4015ca1efc552b800ee5da7e))
|
||||
|
||||
## [3.153.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **desktop:** Fixed issue on Mac desktop app where multiple files could not be downloaded ([247ff62](https://github.com/standardnotes/app/commit/247ff6242279f878c01161817038a37c6fbfa4cc))
|
||||
|
||||
## [3.153.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **desktop:** Fixed issue where preferences header & tooltips are overlapped by custom titlebar ([ef27a21](https://github.com/standardnotes/app/commit/ef27a21fb141c4ef1a760cf6fb550e4b713f8f98))
|
||||
|
||||
## [3.153.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.153.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
@@ -1,5 +1,135 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "3.153.13",
|
||||
"title": "[3.153.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue where removing a collapsible block would unwrap the contents in reverse order ([40179bb](https://github.com/standardnotes/app/commit/40179bba06228acf4015ca1efc552b800ee5da7e))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue where removing a collapsible block would unwrap the contents in reverse order (40179bb)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue where removing a collapsible block would unwrap the contents in reverse order (40179bb)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.12",
|
||||
"title": "[3.153.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-28)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.11",
|
||||
"title": "[3.153.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* **desktop:** Fixed issue on Mac desktop app where multiple files could not be downloaded ([247ff62](https://github.com/standardnotes/app/commit/247ff6242279f878c01161817038a37c6fbfa4cc))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"desktop: Fixed issue on Mac desktop app where multiple files could not be downloaded (247ff62)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"desktop: Fixed issue on Mac desktop app where multiple files could not be downloaded (247ff62)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.10",
|
||||
"title": "[3.153.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.9",
|
||||
"title": "[3.153.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.8",
|
||||
"title": "[3.153.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.7",
|
||||
"title": "[3.153.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* **desktop:** Fixed issue where preferences header & tooltips are overlapped by custom titlebar ([ef27a21](https://github.com/standardnotes/app/commit/ef27a21fb141c4ef1a760cf6fb550e4b713f8f98))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"desktop: Fixed issue where preferences header & tooltips are overlapped by custom titlebar (ef27a21)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"desktop: Fixed issue where preferences header & tooltips are overlapped by custom titlebar (ef27a21)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.6",
|
||||
"title": "[3.153.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.5",
|
||||
"title": "[3.153.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-27)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.4",
|
||||
"title": "[3.153.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.3",
|
||||
"title": "[3.153.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.153.2",
|
||||
"title": "[3.153.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-26)",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "@standardnotes/web",
|
||||
"version": "3.153.2",
|
||||
"version": "3.153.13",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "dist/app.js",
|
||||
"author": "Standard Notes.",
|
||||
"author": "Standard Notes",
|
||||
"private": true,
|
||||
"files": [
|
||||
"dist"
|
||||
@@ -28,7 +28,7 @@
|
||||
"@babel/plugin-transform-react-jsx": "^7.19.0",
|
||||
"@babel/preset-env": "*",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@lexical/react": "0.9.2",
|
||||
"@lexical/react": "0.10.0",
|
||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
|
||||
"@simplewebauthn/browser": "^7.1.0",
|
||||
"@standardnotes/authenticator": "^2.3.9",
|
||||
@@ -75,7 +75,7 @@
|
||||
"identity-obj-proxy": "^3.0.0",
|
||||
"jest": "^29.3.1",
|
||||
"jest-environment-jsdom": "^29.3.1",
|
||||
"lexical": "0.9.2",
|
||||
"lexical": "0.10.0",
|
||||
"lint-staged": ">=13",
|
||||
"mini-css-extract-plugin": "^2.7.2",
|
||||
"minimatch": "^5.1.1",
|
||||
@@ -108,7 +108,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@ariakit/react": "^0.1.2",
|
||||
"@lexical/headless": "0.9.2",
|
||||
"@lexical/headless": "0.10.0",
|
||||
"@radix-ui/react-slot": "^1.0.1",
|
||||
"contactjs": "2.1.5"
|
||||
}
|
||||
|
||||
@@ -37,10 +37,6 @@ const ChangeEditorButton: FunctionComponent<Props> = ({ viewControllerManager, o
|
||||
setIsOpen(willMenuOpen)
|
||||
}, [onClickPreprocessing, isOpen])
|
||||
|
||||
const disableClickOutside = useCallback(() => {
|
||||
setIsClickOutsideDisabled(true)
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
return application.keyboardService.addCommandHandler({
|
||||
command: CHANGE_EDITOR_COMMAND,
|
||||
@@ -76,7 +72,7 @@ const ChangeEditorButton: FunctionComponent<Props> = ({ viewControllerManager, o
|
||||
application={application}
|
||||
isVisible={isOpen}
|
||||
note={note}
|
||||
handleDisableClickoutsideRequest={disableClickOutside}
|
||||
setDisableClickOutside={setIsClickOutsideDisabled}
|
||||
closeMenu={() => {
|
||||
setIsOpen(false)
|
||||
}}
|
||||
|
||||
@@ -22,7 +22,7 @@ type ChangeEditorMenuProps = {
|
||||
isVisible: boolean
|
||||
note: SNNote | undefined
|
||||
onSelect?: (component: SNComponent | undefined) => void
|
||||
handleDisableClickoutsideRequest?: () => void
|
||||
setDisableClickOutside?: (value: boolean) => void
|
||||
}
|
||||
|
||||
const getGroupId = (group: EditorMenuGroup) => group.title.toLowerCase().replace(/\s/, '-')
|
||||
@@ -33,7 +33,7 @@ const ChangeEditorMenu: FunctionComponent<ChangeEditorMenuProps> = ({
|
||||
isVisible,
|
||||
note,
|
||||
onSelect,
|
||||
handleDisableClickoutsideRequest,
|
||||
setDisableClickOutside,
|
||||
}) => {
|
||||
const editors = useMemo(
|
||||
() =>
|
||||
@@ -134,13 +134,13 @@ const ChangeEditorMenu: FunctionComponent<ChangeEditorMenuProps> = ({
|
||||
}
|
||||
|
||||
setPendingConversionItem(itemToBeSelected)
|
||||
handleDisableClickoutsideRequest?.()
|
||||
setDisableClickOutside?.(true)
|
||||
return
|
||||
}
|
||||
|
||||
if (note.noteType === NoteType.Super) {
|
||||
if (note.noteType === NoteType.Super && note.text.length > 0) {
|
||||
setPendingConversionItem(itemToBeSelected)
|
||||
handleDisableClickoutsideRequest?.()
|
||||
setDisableClickOutside?.(true)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -172,15 +172,16 @@ const ChangeEditorMenu: FunctionComponent<ChangeEditorMenuProps> = ({
|
||||
}
|
||||
},
|
||||
[
|
||||
application,
|
||||
closeMenu,
|
||||
currentComponent,
|
||||
note,
|
||||
closeMenu,
|
||||
onSelect,
|
||||
premiumModal,
|
||||
application.alertService,
|
||||
application.componentManager,
|
||||
setDisableClickOutside,
|
||||
currentComponent,
|
||||
selectComponent,
|
||||
selectNonComponent,
|
||||
handleDisableClickoutsideRequest,
|
||||
],
|
||||
)
|
||||
|
||||
@@ -199,8 +200,14 @@ const ChangeEditorMenu: FunctionComponent<ChangeEditorMenuProps> = ({
|
||||
closeMenu()
|
||||
}, [pendingConversionItem, note, selectNonComponent, closeMenu, selectComponent])
|
||||
|
||||
const closeSuperNoteImporter = () => setPendingConversionItem(null)
|
||||
const closeSuperNoteConverter = () => setPendingConversionItem(null)
|
||||
const closeSuperNoteImporter = () => {
|
||||
setPendingConversionItem(null)
|
||||
setDisableClickOutside?.(false)
|
||||
}
|
||||
const closeSuperNoteConverter = () => {
|
||||
setPendingConversionItem(null)
|
||||
setDisableClickOutside?.(false)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -43,6 +43,10 @@ const Dropdown = ({ label, value, onChange, items, disabled, fullWidth, classNam
|
||||
|
||||
const currentItem = items.find((item) => item.value === selectedValue)
|
||||
|
||||
useEffect(() => {
|
||||
select.setValue(value)
|
||||
}, [select, value])
|
||||
|
||||
useEffect(() => {
|
||||
return select.subscribe(
|
||||
(state) => {
|
||||
|
||||
@@ -109,6 +109,7 @@ const FileMenuOptions: FunctionComponent<Props> = ({
|
||||
<MenuItem
|
||||
onClick={() => {
|
||||
void filesController.downloadFiles(selectedFiles)
|
||||
closeMenu()
|
||||
}}
|
||||
>
|
||||
<Icon type="download" className={`mr-2 text-neutral ${MenuItemIconSize}`} />
|
||||
|
||||
@@ -61,7 +61,7 @@ export const LinkedItemsSectionItem = ({
|
||||
<div className="flex flex-grow items-center gap-4 py-2 pl-3 pr-12">
|
||||
<Icon type={icon} className={classNames('flex-shrink-0', className)} />
|
||||
<input
|
||||
className="min-w-0 flex-grow text-sm"
|
||||
className="min-w-0 flex-grow bg-default text-sm"
|
||||
defaultValue={title}
|
||||
onKeyDown={(event) => {
|
||||
if (event.key === KeyboardKey.Escape) {
|
||||
|
||||
@@ -41,6 +41,7 @@ type Options = {
|
||||
side: PopoverSide
|
||||
disableMobileFullscreenTakeover?: boolean
|
||||
maxHeightFunction?: (calculatedMaxHeight: number) => number
|
||||
offset?: number
|
||||
}
|
||||
|
||||
export const getPositionedPopoverStyles = ({
|
||||
@@ -51,6 +52,7 @@ export const getPositionedPopoverStyles = ({
|
||||
side,
|
||||
disableMobileFullscreenTakeover,
|
||||
maxHeightFunction,
|
||||
offset,
|
||||
}: Options): CSSProperties | null => {
|
||||
if (!popoverRect || !anchorRect) {
|
||||
return null
|
||||
@@ -71,12 +73,21 @@ export const getPositionedPopoverStyles = ({
|
||||
const oppositeSideOverflows = getOverflows(rectForOppositeSide, documentRect)
|
||||
|
||||
const sideWithLessOverflows = preferredSideOverflows[side] < oppositeSideOverflows[oppositeSide] ? side : oppositeSide
|
||||
const finalAlignment = getNonCollidingAlignment(sideWithLessOverflows, align, preferredSideRectCollisions, {
|
||||
const finalAlignment = getNonCollidingAlignment({
|
||||
finalSide: sideWithLessOverflows,
|
||||
preferredAlignment: align,
|
||||
collisions: preferredSideRectCollisions,
|
||||
popoverRect,
|
||||
buttonRect: anchorRect,
|
||||
documentRect,
|
||||
})
|
||||
const finalPositionedRect = getPositionedPopoverRect(popoverRect, anchorRect, sideWithLessOverflows, finalAlignment)
|
||||
const finalPositionedRect = getPositionedPopoverRect(
|
||||
popoverRect,
|
||||
anchorRect,
|
||||
sideWithLessOverflows,
|
||||
finalAlignment,
|
||||
offset,
|
||||
)
|
||||
|
||||
let maxHeight = getPopoverMaxHeight(
|
||||
getAppRect(),
|
||||
|
||||
@@ -45,20 +45,21 @@ const OppositeAlignment: Record<Exclude<PopoverAlignment, 'center'>, PopoverAlig
|
||||
end: 'start',
|
||||
}
|
||||
|
||||
export const getNonCollidingAlignment = (
|
||||
finalSide: PopoverSide,
|
||||
preferredAlignment: PopoverAlignment,
|
||||
collisions: RectCollisions,
|
||||
{
|
||||
popoverRect,
|
||||
buttonRect,
|
||||
documentRect,
|
||||
}: {
|
||||
popoverRect: DOMRect
|
||||
buttonRect: DOMRect
|
||||
documentRect: DOMRect
|
||||
},
|
||||
): PopoverAlignment => {
|
||||
export const getNonCollidingAlignment = ({
|
||||
finalSide,
|
||||
preferredAlignment,
|
||||
collisions,
|
||||
popoverRect,
|
||||
buttonRect,
|
||||
documentRect,
|
||||
}: {
|
||||
finalSide: PopoverSide
|
||||
preferredAlignment: PopoverAlignment
|
||||
collisions: RectCollisions
|
||||
popoverRect: DOMRect
|
||||
buttonRect: DOMRect
|
||||
documentRect: DOMRect
|
||||
}): PopoverAlignment => {
|
||||
const isHorizontalSide = finalSide === 'top' || finalSide === 'bottom'
|
||||
const boundToCheckForStart = isHorizontalSide ? 'right' : 'bottom'
|
||||
const boundToCheckForEnd = isHorizontalSide ? 'left' : 'top'
|
||||
|
||||
@@ -68,49 +68,52 @@ export const getPositionedPopoverRect = (
|
||||
buttonRect: DOMRect,
|
||||
side: PopoverSide,
|
||||
align: PopoverAlignment,
|
||||
offset?: number,
|
||||
): DOMRect => {
|
||||
const { width, height } = popoverRect
|
||||
|
||||
const positionPopoverRect = DOMRect.fromRect(popoverRect)
|
||||
|
||||
const finalOffset = offset ? offset : 0
|
||||
|
||||
switch (side) {
|
||||
case 'top': {
|
||||
positionPopoverRect.y = buttonRect.top - height
|
||||
positionPopoverRect.y = buttonRect.top - height - finalOffset
|
||||
break
|
||||
}
|
||||
case 'bottom':
|
||||
positionPopoverRect.y = buttonRect.bottom
|
||||
positionPopoverRect.y = buttonRect.bottom + finalOffset
|
||||
break
|
||||
case 'left':
|
||||
positionPopoverRect.x = buttonRect.left - width
|
||||
positionPopoverRect.x = buttonRect.left - width - finalOffset
|
||||
break
|
||||
case 'right':
|
||||
positionPopoverRect.x = buttonRect.right
|
||||
positionPopoverRect.x = buttonRect.right + finalOffset
|
||||
break
|
||||
}
|
||||
|
||||
if (side === 'top' || side === 'bottom') {
|
||||
switch (align) {
|
||||
case 'start':
|
||||
positionPopoverRect.x = buttonRect.left
|
||||
positionPopoverRect.x = buttonRect.left - finalOffset
|
||||
break
|
||||
case 'center':
|
||||
positionPopoverRect.x = buttonRect.left - width / 2 + buttonRect.width / 2
|
||||
positionPopoverRect.x = buttonRect.left - width / 2 + buttonRect.width / 2 - finalOffset
|
||||
break
|
||||
case 'end':
|
||||
positionPopoverRect.x = buttonRect.right - width
|
||||
positionPopoverRect.x = buttonRect.right - width + finalOffset
|
||||
break
|
||||
}
|
||||
} else {
|
||||
switch (align) {
|
||||
case 'start':
|
||||
positionPopoverRect.y = buttonRect.top
|
||||
positionPopoverRect.y = buttonRect.top - finalOffset
|
||||
break
|
||||
case 'center':
|
||||
positionPopoverRect.y = buttonRect.top - height / 2 + buttonRect.height / 2
|
||||
positionPopoverRect.y = buttonRect.top - height / 2 + buttonRect.height / 2 - finalOffset
|
||||
break
|
||||
case 'end':
|
||||
positionPopoverRect.y = buttonRect.bottom - height
|
||||
positionPopoverRect.y = buttonRect.bottom - height + finalOffset
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ import { WebApplication } from '@/Application/Application'
|
||||
import { ViewControllerManager } from '@/Controllers/ViewControllerManager'
|
||||
import { FunctionComponent } from 'react'
|
||||
import PreferencesPane from '@/Components/Preferences/PreferencesComponents/PreferencesPane'
|
||||
import CloudLink from './CloudBackups/CloudBackups'
|
||||
import DataBackups from './DataBackups'
|
||||
import EmailBackups from './EmailBackups'
|
||||
import FileBackupsCrossPlatform from './Files/FileBackupsCrossPlatform'
|
||||
@@ -19,7 +18,6 @@ const Backups: FunctionComponent<Props> = ({ application, viewControllerManager
|
||||
<DataBackups application={application} viewControllerManager={viewControllerManager} />
|
||||
<FileBackupsCrossPlatform application={application} />
|
||||
<EmailBackups application={application} />
|
||||
<CloudLink application={application} />
|
||||
</PreferencesPane>
|
||||
)
|
||||
}
|
||||
|
||||
-220
@@ -1,220 +0,0 @@
|
||||
import {
|
||||
useCallback,
|
||||
useEffect,
|
||||
useState,
|
||||
FunctionComponent,
|
||||
KeyboardEventHandler,
|
||||
ChangeEventHandler,
|
||||
MouseEventHandler,
|
||||
} from 'react'
|
||||
import {
|
||||
ButtonType,
|
||||
SettingName,
|
||||
CloudProvider,
|
||||
DropboxBackupFrequency,
|
||||
GoogleDriveBackupFrequency,
|
||||
OneDriveBackupFrequency,
|
||||
} from '@standardnotes/snjs'
|
||||
import { WebApplication } from '@/Application/Application'
|
||||
import Button from '@/Components/Button/Button'
|
||||
import { openInNewTab } from '@/Utils'
|
||||
import { Subtitle } from '@/Components/Preferences/PreferencesComponents/Content'
|
||||
import { KeyboardKey } from '@standardnotes/ui-services'
|
||||
|
||||
type Props = {
|
||||
application: WebApplication
|
||||
providerName: CloudProvider
|
||||
isEntitledToCloudBackups: boolean
|
||||
}
|
||||
|
||||
const CloudBackupProvider: FunctionComponent<Props> = ({ application, providerName, isEntitledToCloudBackups }) => {
|
||||
const [authBegan, setAuthBegan] = useState(false)
|
||||
const [successfullyInstalled, setSuccessfullyInstalled] = useState(false)
|
||||
const [backupFrequency, setBackupFrequency] = useState<string | undefined>(undefined)
|
||||
const [confirmation, setConfirmation] = useState('')
|
||||
|
||||
const disable: MouseEventHandler = async (event) => {
|
||||
event.stopPropagation()
|
||||
|
||||
try {
|
||||
const shouldDisable = await application.alertService.confirm(
|
||||
'Are you sure you want to disable this integration?',
|
||||
'Disable?',
|
||||
'Disable',
|
||||
ButtonType.Danger,
|
||||
'Cancel',
|
||||
)
|
||||
if (shouldDisable) {
|
||||
await application.settings.deleteSetting(backupFrequencySettingName)
|
||||
await application.settings.deleteSetting(backupTokenSettingName)
|
||||
|
||||
setBackupFrequency(undefined)
|
||||
}
|
||||
} catch (error) {
|
||||
application.alertService.alert(error as string).catch(console.error)
|
||||
}
|
||||
}
|
||||
|
||||
const installIntegration: MouseEventHandler = (event) => {
|
||||
if (!isEntitledToCloudBackups) {
|
||||
return
|
||||
}
|
||||
event.stopPropagation()
|
||||
|
||||
const authUrl = application.getCloudProviderIntegrationUrl(providerName)
|
||||
openInNewTab(authUrl)
|
||||
setAuthBegan(true)
|
||||
}
|
||||
|
||||
const performBackupNow = async () => {
|
||||
// A backup is performed anytime the setting is updated with the integration token, so just update it here
|
||||
try {
|
||||
await application.settings.updateSetting(backupFrequencySettingName, backupFrequency as string)
|
||||
void application.alertService.alert(
|
||||
'A backup has been triggered for this provider. Please allow a couple minutes for your backup to be processed.',
|
||||
)
|
||||
} catch (err) {
|
||||
application.alertService
|
||||
.alert('There was an error while trying to trigger a backup for this provider. Please try again.')
|
||||
.catch(console.error)
|
||||
}
|
||||
}
|
||||
|
||||
const backupSettingsData = {
|
||||
[CloudProvider.Dropbox]: {
|
||||
backupTokenSettingName: SettingName.create(SettingName.NAMES.DropboxBackupToken).getValue(),
|
||||
backupFrequencySettingName: SettingName.create(SettingName.NAMES.DropboxBackupFrequency).getValue(),
|
||||
defaultBackupFrequency: DropboxBackupFrequency.Daily,
|
||||
},
|
||||
[CloudProvider.Google]: {
|
||||
backupTokenSettingName: SettingName.create(SettingName.NAMES.GoogleDriveBackupToken).getValue(),
|
||||
backupFrequencySettingName: SettingName.create(SettingName.NAMES.GoogleDriveBackupFrequency).getValue(),
|
||||
defaultBackupFrequency: GoogleDriveBackupFrequency.Daily,
|
||||
},
|
||||
[CloudProvider.OneDrive]: {
|
||||
backupTokenSettingName: SettingName.create(SettingName.NAMES.OneDriveBackupToken).getValue(),
|
||||
backupFrequencySettingName: SettingName.create(SettingName.NAMES.OneDriveBackupFrequency).getValue(),
|
||||
defaultBackupFrequency: OneDriveBackupFrequency.Daily,
|
||||
},
|
||||
}
|
||||
const { backupTokenSettingName, backupFrequencySettingName, defaultBackupFrequency } =
|
||||
backupSettingsData[providerName]
|
||||
|
||||
const getCloudProviderIntegrationTokenFromUrl = (url: URL) => {
|
||||
const urlSearchParams = new URLSearchParams(url.search)
|
||||
let integrationTokenKeyInUrl = ''
|
||||
|
||||
switch (providerName) {
|
||||
case CloudProvider.Dropbox:
|
||||
integrationTokenKeyInUrl = 'dbt'
|
||||
break
|
||||
case CloudProvider.Google:
|
||||
integrationTokenKeyInUrl = 'key'
|
||||
break
|
||||
case CloudProvider.OneDrive:
|
||||
integrationTokenKeyInUrl = 'key'
|
||||
break
|
||||
default:
|
||||
throw new Error('Invalid Cloud Provider name')
|
||||
}
|
||||
return urlSearchParams.get(integrationTokenKeyInUrl)
|
||||
}
|
||||
|
||||
const handleKeyPress: KeyboardEventHandler = async (event) => {
|
||||
if (event.key === KeyboardKey.Enter) {
|
||||
try {
|
||||
const decryptedCode = atob(confirmation)
|
||||
const urlFromDecryptedCode = new URL(decryptedCode)
|
||||
const cloudProviderToken = getCloudProviderIntegrationTokenFromUrl(urlFromDecryptedCode)
|
||||
|
||||
if (!cloudProviderToken) {
|
||||
throw new Error()
|
||||
}
|
||||
await application.settings.updateSetting(backupTokenSettingName, cloudProviderToken)
|
||||
await application.settings.updateSetting(backupFrequencySettingName, defaultBackupFrequency)
|
||||
|
||||
setBackupFrequency(defaultBackupFrequency)
|
||||
|
||||
setAuthBegan(false)
|
||||
setSuccessfullyInstalled(true)
|
||||
setConfirmation('')
|
||||
|
||||
await application.alertService.alert(
|
||||
`${providerName} has been successfully installed. Your first backup has also been queued and should be reflected in your external cloud's folder within the next few minutes.`,
|
||||
)
|
||||
} catch (e) {
|
||||
await application.alertService.alert('Invalid code. Please try again.')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {
|
||||
setConfirmation(event.target.value)
|
||||
}
|
||||
|
||||
const getIntegrationStatus = useCallback(async () => {
|
||||
if (!application.getUser()) {
|
||||
return
|
||||
}
|
||||
const frequency = await application.settings.getSetting(backupFrequencySettingName)
|
||||
setBackupFrequency(frequency)
|
||||
}, [application, backupFrequencySettingName])
|
||||
|
||||
useEffect(() => {
|
||||
getIntegrationStatus().catch(console.error)
|
||||
}, [getIntegrationStatus])
|
||||
|
||||
const isExpanded = authBegan || successfullyInstalled
|
||||
const shouldShowEnableButton = !backupFrequency && !authBegan
|
||||
const additionalClass = isEntitledToCloudBackups ? '' : 'opacity-50 cursor-default pointer-events-none'
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`mr-1 ${isExpanded ? 'expanded' : ' '} ${
|
||||
shouldShowEnableButton || backupFrequency ? 'flex items-center justify-between' : ''
|
||||
}`}
|
||||
>
|
||||
<div>
|
||||
<Subtitle className={additionalClass}>{providerName}</Subtitle>
|
||||
|
||||
{successfullyInstalled && <p>{providerName} has been successfully enabled.</p>}
|
||||
</div>
|
||||
{authBegan && (
|
||||
<div>
|
||||
<p className="sk-panel-row">
|
||||
Complete authentication from the newly opened window. Upon completion, a confirmation code will be
|
||||
displayed. Enter this code below:
|
||||
</p>
|
||||
<div className={'mt-1'}>
|
||||
<input
|
||||
className="sk-input sk-base center-text"
|
||||
placeholder="Enter confirmation code"
|
||||
value={confirmation}
|
||||
onKeyPress={handleKeyPress}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{shouldShowEnableButton && (
|
||||
<div>
|
||||
<Button
|
||||
label="Enable"
|
||||
className={`min-w-40 px-1 text-xs ${additionalClass}`}
|
||||
onClick={installIntegration}
|
||||
disabled={!isEntitledToCloudBackups}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{backupFrequency && (
|
||||
<div className={'flex flex-col items-end'}>
|
||||
<Button className={`mb-2 min-w-40 ${additionalClass}`} label="Perform Backup" onClick={performBackupNow} />
|
||||
<Button className="min-w-40" label="Disable" onClick={disable} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default CloudBackupProvider
|
||||
-155
@@ -1,155 +0,0 @@
|
||||
import CloudBackupProvider from './CloudBackupProvider'
|
||||
import { useCallback, useEffect, useState, FunctionComponent, Fragment } from 'react'
|
||||
import { WebApplication } from '@/Application/Application'
|
||||
import { Subtitle, Text, Title } from '@/Components/Preferences/PreferencesComponents/Content'
|
||||
import HorizontalSeparator from '@/Components/Shared/HorizontalSeparator'
|
||||
import {
|
||||
FeatureStatus,
|
||||
FeatureIdentifier,
|
||||
CloudProvider,
|
||||
MuteFailedCloudBackupsEmailsOption,
|
||||
SettingName,
|
||||
} from '@standardnotes/snjs'
|
||||
|
||||
import Switch from '@/Components/Switch/Switch'
|
||||
import { convertStringifiedBooleanToBoolean } from '@/Utils'
|
||||
import { STRING_FAILED_TO_UPDATE_USER_SETTING } from '@/Constants/Strings'
|
||||
import PreferencesGroup from '@/Components/Preferences/PreferencesComponents/PreferencesGroup'
|
||||
import PreferencesSegment from '@/Components/Preferences/PreferencesComponents/PreferencesSegment'
|
||||
import Spinner from '@/Components/Spinner/Spinner'
|
||||
|
||||
const providerData = [{ name: CloudProvider.Dropbox }, { name: CloudProvider.Google }, { name: CloudProvider.OneDrive }]
|
||||
|
||||
type Props = {
|
||||
application: WebApplication
|
||||
}
|
||||
|
||||
const CloudLink: FunctionComponent<Props> = ({ application }) => {
|
||||
const [isEntitledToCloudBackups, setIsEntitledToCloudBackups] = useState(false)
|
||||
const [isFailedCloudBackupEmailMuted, setIsFailedCloudBackupEmailMuted] = useState(true)
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
const additionalClass = isEntitledToCloudBackups ? '' : 'opacity-50 cursor-default pointer-events-none'
|
||||
|
||||
const loadIsFailedCloudBackupEmailMutedSetting = useCallback(async () => {
|
||||
if (!application.getUser()) {
|
||||
return
|
||||
}
|
||||
setIsLoading(true)
|
||||
|
||||
try {
|
||||
const userSettings = await application.settings.listSettings()
|
||||
setIsFailedCloudBackupEmailMuted(
|
||||
convertStringifiedBooleanToBoolean(
|
||||
userSettings.getSettingValue(
|
||||
SettingName.create(SettingName.NAMES.MuteFailedCloudBackupsEmails).getValue(),
|
||||
MuteFailedCloudBackupsEmailsOption.NotMuted,
|
||||
),
|
||||
),
|
||||
)
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
} finally {
|
||||
setIsLoading(false)
|
||||
}
|
||||
}, [application])
|
||||
|
||||
useEffect(() => {
|
||||
const dailyDropboxBackupStatus = application.features.getFeatureStatus(FeatureIdentifier.DailyDropboxBackup)
|
||||
const dailyGdriveBackupStatus = application.features.getFeatureStatus(FeatureIdentifier.DailyGDriveBackup)
|
||||
const dailyOneDriveBackupStatus = application.features.getFeatureStatus(FeatureIdentifier.DailyOneDriveBackup)
|
||||
const isCloudBackupsAllowed = [dailyDropboxBackupStatus, dailyGdriveBackupStatus, dailyOneDriveBackupStatus].every(
|
||||
(status) => status === FeatureStatus.Entitled,
|
||||
)
|
||||
|
||||
setIsEntitledToCloudBackups(isCloudBackupsAllowed)
|
||||
loadIsFailedCloudBackupEmailMutedSetting().catch(console.error)
|
||||
}, [application, loadIsFailedCloudBackupEmailMutedSetting])
|
||||
|
||||
const updateSetting = async (settingName: SettingName, payload: string): Promise<boolean> => {
|
||||
try {
|
||||
await application.settings.updateSetting(settingName, payload)
|
||||
return true
|
||||
} catch (e) {
|
||||
application.alertService.alert(STRING_FAILED_TO_UPDATE_USER_SETTING).catch(console.error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const toggleMuteFailedCloudBackupEmails = async () => {
|
||||
if (!isEntitledToCloudBackups) {
|
||||
return
|
||||
}
|
||||
const previousValue = isFailedCloudBackupEmailMuted
|
||||
setIsFailedCloudBackupEmailMuted(!isFailedCloudBackupEmailMuted)
|
||||
|
||||
const updateResult = await updateSetting(
|
||||
SettingName.create(SettingName.NAMES.MuteFailedCloudBackupsEmails).getValue(),
|
||||
`${!isFailedCloudBackupEmailMuted}`,
|
||||
)
|
||||
if (!updateResult) {
|
||||
setIsFailedCloudBackupEmailMuted(previousValue)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<Title>Cloud Backups</Title>
|
||||
{!isEntitledToCloudBackups && (
|
||||
<>
|
||||
<Text>
|
||||
A <span className={'font-bold'}>Plus</span> or <span className={'font-bold'}>Pro</span> subscription plan
|
||||
is required to enable Cloud Backups.{' '}
|
||||
<a target="_blank" href="https://standardnotes.com/features">
|
||||
Learn more
|
||||
</a>
|
||||
.
|
||||
</Text>
|
||||
<HorizontalSeparator classes="mt-3 mb-3" />
|
||||
</>
|
||||
)}
|
||||
<div>
|
||||
<Text className={additionalClass}>
|
||||
Configure the integrations below to enable automatic daily backups of your encrypted data set to your
|
||||
third-party cloud provider.
|
||||
</Text>
|
||||
<div>
|
||||
<HorizontalSeparator classes={`mt-3 mb-3 ${additionalClass}`} />
|
||||
<div>
|
||||
{providerData.map(({ name }) => (
|
||||
<Fragment key={name}>
|
||||
<CloudBackupProvider
|
||||
application={application}
|
||||
providerName={name}
|
||||
isEntitledToCloudBackups={isEntitledToCloudBackups}
|
||||
/>
|
||||
<HorizontalSeparator classes={`mt-3 mb-3 ${additionalClass}`} />
|
||||
</Fragment>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={additionalClass}>
|
||||
<Subtitle>Email preferences</Subtitle>
|
||||
<div className="mt-1 flex items-center justify-between">
|
||||
<div className="flex flex-col">
|
||||
<Text>Receive a notification email if a cloud backup fails.</Text>
|
||||
</div>
|
||||
{isLoading ? (
|
||||
<Spinner className="h-4 w-4" />
|
||||
) : (
|
||||
<Switch
|
||||
onChange={toggleMuteFailedCloudBackupEmails}
|
||||
checked={!isFailedCloudBackupEmailMuted}
|
||||
disabled={!isEntitledToCloudBackups}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
)
|
||||
}
|
||||
|
||||
export default CloudLink
|
||||
@@ -1,81 +0,0 @@
|
||||
import { FunctionComponent } from 'react'
|
||||
import { Title, Subtitle, Text, LinkButton } from '@/Components/Preferences/PreferencesComponents/Content'
|
||||
import PreferencesPane from '../PreferencesComponents/PreferencesPane'
|
||||
import PreferencesGroup from '../PreferencesComponents/PreferencesGroup'
|
||||
import PreferencesSegment from '../PreferencesComponents/PreferencesSegment'
|
||||
|
||||
const CloudLink: FunctionComponent = () => (
|
||||
<PreferencesPane>
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<Title>Frequently asked questions</Title>
|
||||
<div className="h-2 w-full" />
|
||||
<Subtitle>Who can read my private notes?</Subtitle>
|
||||
<Text>
|
||||
Quite simply: no one but you. Not us, not your ISP, not a hacker, and not a government agency. As long as you
|
||||
keep your password safe, and your password is reasonably strong, then you are the only person in the world
|
||||
with the ability to decrypt your notes. For more on how we handle your privacy and security, check out our
|
||||
easy to read{' '}
|
||||
<a target="_blank" href="https://standardnotes.com/privacy">
|
||||
Privacy Manifesto.
|
||||
</a>
|
||||
</Text>
|
||||
</PreferencesSegment>
|
||||
<PreferencesSegment>
|
||||
<Subtitle>Can I collaborate with others on a note?</Subtitle>
|
||||
<Text>
|
||||
Because of our encrypted architecture, Standard Notes does not currently provide a real-time collaboration
|
||||
solution. Multiple users can share the same account however, but editing at the same time may result in sync
|
||||
conflicts, which may result in the duplication of notes.
|
||||
</Text>
|
||||
</PreferencesSegment>
|
||||
<PreferencesSegment>
|
||||
<Subtitle>Can I use Standard Notes totally offline?</Subtitle>
|
||||
<Text>
|
||||
Standard Notes can be used totally offline without an account, and without an internet connection. You can
|
||||
find{' '}
|
||||
<a target="_blank" href="https://standardnotes.com/help/59/can-i-use-standard-notes-totally-offline">
|
||||
more details here.
|
||||
</a>
|
||||
</Text>
|
||||
</PreferencesSegment>
|
||||
<PreferencesSegment>
|
||||
<Subtitle>Can’t find your question here?</Subtitle>
|
||||
<LinkButton className="mt-3" label="Open FAQ" link="https://standardnotes.com/help" />
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<Title>Community forum</Title>
|
||||
<Text>
|
||||
If you have an issue, found a bug or want to suggest a feature, you can browse or post to the forum. It’s
|
||||
recommended for non-account related issues. Please read our{' '}
|
||||
<a target="_blank" href="https://standardnotes.com/longevity/">
|
||||
Longevity statement
|
||||
</a>{' '}
|
||||
before advocating for a feature request.
|
||||
</Text>
|
||||
<LinkButton className="mt-3" label="Go to the forum" link="https://forum.standardnotes.org/" />
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<Title>Community groups</Title>
|
||||
<Text>
|
||||
Want to meet other passionate note-takers and privacy enthusiasts? Want to share your feedback with us? Join
|
||||
the Standard Notes community groups for discussions on security, themes, editors and more.
|
||||
</Text>
|
||||
<LinkButton className="mt-3" link="https://standardnotes.com/discord" label="Join our Discord" />
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<Title>Account related issue?</Title>
|
||||
<Text>Send an email to help@standardnotes.com and we’ll sort it out.</Text>
|
||||
<LinkButton className="mt-3" link="mailto: [email protected]" label="Email us" />
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
</PreferencesPane>
|
||||
)
|
||||
|
||||
export default CloudLink
|
||||
@@ -42,7 +42,6 @@ const READY_PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [
|
||||
{ id: 'appearance', label: 'Appearance', icon: 'themes' },
|
||||
{ id: 'listed', label: 'Listed', icon: 'listed' },
|
||||
{ id: 'help-feedback', label: 'Help & feedback', icon: 'help' },
|
||||
{ id: 'filesend', label: 'FileSend', icon: 'open-in' },
|
||||
]
|
||||
|
||||
export class PreferencesMenu {
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { observer } from 'mobx-react-lite'
|
||||
import { FunctionComponent, useCallback, useMemo } from 'react'
|
||||
import { FunctionComponent, useMemo } from 'react'
|
||||
import Dropdown from '../Dropdown/Dropdown'
|
||||
import { DropdownItem } from '../Dropdown/DropdownItem'
|
||||
import PreferencesMenuItem from './PreferencesComponents/MenuItem'
|
||||
import { PreferencesMenu } from './PreferencesMenu'
|
||||
import { PreferenceId } from '@standardnotes/ui-services'
|
||||
import { useApplication } from '../ApplicationProvider'
|
||||
import { classNames, Environment } from '@standardnotes/snjs'
|
||||
import { classNames } from '@standardnotes/snjs'
|
||||
import { isIOS } from '@/Utils'
|
||||
|
||||
type Props = {
|
||||
@@ -14,35 +13,18 @@ type Props = {
|
||||
}
|
||||
|
||||
const PreferencesMenuView: FunctionComponent<Props> = ({ menu }) => {
|
||||
const application = useApplication()
|
||||
const { selectedPaneId, selectPane, menuItems } = menu
|
||||
|
||||
const dropdownMenuItems: DropdownItem[] = useMemo(
|
||||
() =>
|
||||
menuItems
|
||||
.filter((pref) => pref.id !== 'filesend')
|
||||
.map((menuItem) => ({
|
||||
icon: menuItem.icon,
|
||||
label: menuItem.label,
|
||||
value: menuItem.id,
|
||||
})),
|
||||
menuItems.map((menuItem) => ({
|
||||
icon: menuItem.icon,
|
||||
label: menuItem.label,
|
||||
value: menuItem.id,
|
||||
})),
|
||||
[menuItems],
|
||||
)
|
||||
|
||||
const openFileSend = useCallback(() => {
|
||||
const link = 'https://filesend.standardnotes.com/'
|
||||
|
||||
if (application.isNativeMobileWeb()) {
|
||||
application.mobileDevice().openUrl(link)
|
||||
return
|
||||
} else if (application.environment === Environment.Desktop) {
|
||||
application.desktopDevice?.openUrl(link)
|
||||
return
|
||||
}
|
||||
|
||||
window.open(link, '_blank')
|
||||
}, [application])
|
||||
|
||||
return (
|
||||
<div
|
||||
className={classNames(
|
||||
@@ -59,10 +41,6 @@ const PreferencesMenuView: FunctionComponent<Props> = ({ menu }) => {
|
||||
selected={pref.selected}
|
||||
hasBubble={pref.hasBubble}
|
||||
onClick={() => {
|
||||
if (pref.id === 'filesend') {
|
||||
openFileSend()
|
||||
return
|
||||
}
|
||||
selectPane(pref.id)
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -2,6 +2,8 @@ import { classNames } from '@standardnotes/snjs'
|
||||
import { ReactNode } from 'react'
|
||||
import { Tooltip, TooltipAnchor, TooltipStoreProps, useTooltipStore } from '@ariakit/react'
|
||||
import { Slot } from '@radix-ui/react-slot'
|
||||
import { MutuallyExclusiveMediaQueryBreakpoints, useMediaQuery } from '@/Hooks/useMediaQuery'
|
||||
import { getPositionedPopoverStyles } from '../Popover/GetPositionedPopoverStyles'
|
||||
|
||||
const StyledTooltip = ({
|
||||
children,
|
||||
@@ -13,7 +15,40 @@ const StyledTooltip = ({
|
||||
className?: string
|
||||
label: string
|
||||
} & Partial<TooltipStoreProps>) => {
|
||||
const tooltip = useTooltipStore(props)
|
||||
const tooltip = useTooltipStore({
|
||||
timeout: 350,
|
||||
renderCallback(props) {
|
||||
const { popoverElement, anchorElement } = props
|
||||
|
||||
const documentElement = document.querySelector('.main-ui-view')
|
||||
|
||||
if (!popoverElement || !anchorElement || !documentElement) {
|
||||
return
|
||||
}
|
||||
|
||||
const anchorRect = anchorElement.getBoundingClientRect()
|
||||
const popoverRect = popoverElement.getBoundingClientRect()
|
||||
const documentRect = documentElement.getBoundingClientRect()
|
||||
|
||||
const styles = getPositionedPopoverStyles({
|
||||
align: 'center',
|
||||
side: 'bottom',
|
||||
anchorRect,
|
||||
popoverRect,
|
||||
documentRect,
|
||||
disableMobileFullscreenTakeover: true,
|
||||
offset: 6,
|
||||
})
|
||||
|
||||
Object.assign(popoverElement.style, styles)
|
||||
},
|
||||
...props,
|
||||
})
|
||||
const isMobile = useMediaQuery(MutuallyExclusiveMediaQueryBreakpoints.sm)
|
||||
|
||||
if (isMobile) {
|
||||
return <>{children}</>
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -23,7 +58,7 @@ const StyledTooltip = ({
|
||||
<Tooltip
|
||||
store={tooltip}
|
||||
className={classNames(
|
||||
'z-tooltip rounded border border-border bg-contrast py-1.5 px-3 text-sm text-foreground shadow',
|
||||
'z-tooltip max-w-max rounded border border-border bg-contrast py-1.5 px-3 text-sm text-foreground shadow',
|
||||
className,
|
||||
)}
|
||||
>
|
||||
|
||||
+65
-36
@@ -9,7 +9,7 @@
|
||||
import './Collapsible.css'
|
||||
|
||||
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
|
||||
import { $findMatchingParent, mergeRegister } from '@lexical/utils'
|
||||
import { $findMatchingParent, mergeRegister, $insertNodeToNearestRoot } from '@lexical/utils'
|
||||
import {
|
||||
$createParagraphNode,
|
||||
$getNodeByKey,
|
||||
@@ -24,6 +24,9 @@ import {
|
||||
DELETE_CHARACTER_COMMAND,
|
||||
INSERT_PARAGRAPH_COMMAND,
|
||||
KEY_ARROW_DOWN_COMMAND,
|
||||
KEY_ARROW_LEFT_COMMAND,
|
||||
KEY_ARROW_RIGHT_COMMAND,
|
||||
KEY_ARROW_UP_COMMAND,
|
||||
NodeKey,
|
||||
} from 'lexical'
|
||||
import { useEffect } from 'react'
|
||||
@@ -52,6 +55,49 @@ export default function CollapsiblePlugin(): JSX.Element | null {
|
||||
)
|
||||
}
|
||||
|
||||
const onEscapeUp = () => {
|
||||
const selection = $getSelection()
|
||||
if ($isRangeSelection(selection) && selection.isCollapsed() && selection.anchor.offset === 0) {
|
||||
const container = $findMatchingParent(selection.anchor.getNode(), $isCollapsibleContainerNode)
|
||||
|
||||
if ($isCollapsibleContainerNode(container)) {
|
||||
const parent = container.getParent()
|
||||
if (
|
||||
parent !== null &&
|
||||
parent.getFirstChild() === container &&
|
||||
selection.anchor.key === container.getFirstDescendant()?.getKey()
|
||||
) {
|
||||
container.insertBefore($createParagraphNode())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
const onEscapeDown = () => {
|
||||
const selection = $getSelection()
|
||||
if ($isRangeSelection(selection) && selection.isCollapsed()) {
|
||||
const container = $findMatchingParent(selection.anchor.getNode(), $isCollapsibleContainerNode)
|
||||
|
||||
if ($isCollapsibleContainerNode(container)) {
|
||||
const parent = container.getParent()
|
||||
if (parent !== null && parent.getLastChild() === container) {
|
||||
const lastDescendant = container.getLastDescendant()
|
||||
if (
|
||||
lastDescendant !== null &&
|
||||
selection.anchor.key === lastDescendant.getKey() &&
|
||||
selection.anchor.offset === lastDescendant.getTextContentSize()
|
||||
) {
|
||||
container.insertAfter($createParagraphNode())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
return mergeRegister(
|
||||
// Structure enforcing transformers for each node type. In case nesting structure is not
|
||||
// "Container > Title + Content" it'll unwrap nodes and convert it back
|
||||
@@ -61,7 +107,7 @@ export default function CollapsiblePlugin(): JSX.Element | null {
|
||||
if (!$isCollapsibleContainerNode(parent)) {
|
||||
const children = node.getChildren()
|
||||
for (const child of children) {
|
||||
node.insertAfter(child)
|
||||
node.insertBefore(child)
|
||||
}
|
||||
node.remove()
|
||||
}
|
||||
@@ -76,7 +122,7 @@ export default function CollapsiblePlugin(): JSX.Element | null {
|
||||
const children = node.getChildren()
|
||||
if (children.length !== 2 || !$isCollapsibleTitleNode(children[0]) || !$isCollapsibleContentNode(children[1])) {
|
||||
for (const child of children) {
|
||||
node.insertAfter(child)
|
||||
node.insertBefore(child)
|
||||
}
|
||||
node.remove()
|
||||
}
|
||||
@@ -109,32 +155,18 @@ export default function CollapsiblePlugin(): JSX.Element | null {
|
||||
},
|
||||
COMMAND_PRIORITY_LOW,
|
||||
),
|
||||
// When collapsible is the last child pressing down arrow will insert paragraph
|
||||
// When collapsible is the last child pressing down/right arrow will insert paragraph
|
||||
// below it to allow adding more content. It's similar what $insertBlockNode
|
||||
// (mainly for decorators), except it'll always be possible to continue adding
|
||||
// new content even if trailing paragraph is accidentally deleted
|
||||
editor.registerCommand(
|
||||
KEY_ARROW_DOWN_COMMAND,
|
||||
() => {
|
||||
const selection = $getSelection()
|
||||
if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
|
||||
return false
|
||||
}
|
||||
|
||||
const container = $findMatchingParent(selection.anchor.getNode(), $isCollapsibleContainerNode)
|
||||
|
||||
if (container === null) {
|
||||
return false
|
||||
}
|
||||
|
||||
const parent = container.getParent()
|
||||
if (parent !== null && parent.getLastChild() === container) {
|
||||
parent.append($createParagraphNode())
|
||||
}
|
||||
return false
|
||||
},
|
||||
COMMAND_PRIORITY_LOW,
|
||||
),
|
||||
editor.registerCommand(KEY_ARROW_DOWN_COMMAND, onEscapeDown, COMMAND_PRIORITY_LOW),
|
||||
editor.registerCommand(KEY_ARROW_RIGHT_COMMAND, onEscapeDown, COMMAND_PRIORITY_LOW),
|
||||
// When collapsible is the first child pressing up/left arrow will insert paragraph
|
||||
// above it to allow adding more content. It's similar what $insertBlockNode
|
||||
// (mainly for decorators), except it'll always be possible to continue adding
|
||||
// new content even if leading paragraph is accidentally deleted
|
||||
editor.registerCommand(KEY_ARROW_UP_COMMAND, onEscapeUp, COMMAND_PRIORITY_LOW),
|
||||
editor.registerCommand(KEY_ARROW_LEFT_COMMAND, onEscapeUp, COMMAND_PRIORITY_LOW),
|
||||
// Handling CMD+Enter to toggle collapsible element collapsed state
|
||||
editor.registerCommand(
|
||||
INSERT_PARAGRAPH_COMMAND,
|
||||
@@ -170,17 +202,14 @@ export default function CollapsiblePlugin(): JSX.Element | null {
|
||||
INSERT_COLLAPSIBLE_COMMAND,
|
||||
() => {
|
||||
editor.update(() => {
|
||||
const selection = $getSelection()
|
||||
|
||||
if (!$isRangeSelection(selection)) {
|
||||
return
|
||||
}
|
||||
|
||||
const title = $createCollapsibleTitleNode()
|
||||
const content = $createCollapsibleContentNode().append($createParagraphNode())
|
||||
const container = $createCollapsibleContainerNode(true).append(title, content)
|
||||
selection.insertNodes([container])
|
||||
title.selectStart()
|
||||
$insertNodeToNearestRoot(
|
||||
$createCollapsibleContainerNode(true).append(
|
||||
title,
|
||||
$createCollapsibleContentNode().append($createParagraphNode()),
|
||||
),
|
||||
)
|
||||
title.select()
|
||||
})
|
||||
|
||||
return true
|
||||
|
||||
@@ -43,6 +43,10 @@ const SuperNoteConverter = ({
|
||||
}, [component, noteType])
|
||||
|
||||
const convertedContent = useMemo(() => {
|
||||
if (note.text.length === 0) {
|
||||
return note.text
|
||||
}
|
||||
|
||||
return exportSuperNote(note, format)
|
||||
}, [format, note])
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
FileItem,
|
||||
InternalEventBus,
|
||||
isFile,
|
||||
Platform,
|
||||
} from '@standardnotes/snjs'
|
||||
import { addToast, dismissToast, ToastType, updateToast } from '@standardnotes/toast'
|
||||
import { action, makeObservable, observable, reaction } from 'mobx'
|
||||
@@ -498,6 +499,18 @@ export class FilesController extends AbstractViewController<FilesControllerEvent
|
||||
}
|
||||
|
||||
downloadFiles = async (files: FileItem[]) => {
|
||||
if (this.application.platform === Platform.MacDesktop) {
|
||||
for (const file of files) {
|
||||
await this.handleFileAction({
|
||||
type: FileItemActionType.DownloadFile,
|
||||
payload: {
|
||||
file,
|
||||
},
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
await Promise.all(
|
||||
files.map((file) =>
|
||||
this.handleFileAction({
|
||||
|
||||
@@ -15,7 +15,7 @@ export const getPlaintextFontSize = (key: EditorFontSize): string => {
|
||||
Small: 'text-editor',
|
||||
Normal: 'text-lg',
|
||||
Medium: 'text-xl',
|
||||
Large: 'text-xl2',
|
||||
Large: 'text-2xl',
|
||||
}
|
||||
|
||||
const tabletMapping: Record<EditorFontSize, string> = {
|
||||
@@ -23,7 +23,7 @@ export const getPlaintextFontSize = (key: EditorFontSize): string => {
|
||||
Small: 'text-editor',
|
||||
Normal: 'text-base',
|
||||
Medium: 'text-xl',
|
||||
Large: 'text-xl2',
|
||||
Large: 'text-2xl',
|
||||
}
|
||||
|
||||
if (isTabletScreen()) {
|
||||
|
||||
@@ -3316,255 +3316,255 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/clipboard@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/clipboard@npm:0.9.2"
|
||||
"@lexical/clipboard@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/clipboard@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/html": 0.9.2
|
||||
"@lexical/list": 0.9.2
|
||||
"@lexical/selection": 0.9.2
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/html": 0.10.0
|
||||
"@lexical/list": 0.10.0
|
||||
"@lexical/selection": 0.10.0
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: af109727f926aa9de43d8bbf747405f41b5817f558769bfa6f48e5ca779c3ff510e9e37a55468458353c7f1eced35c02e51e338bc502282136505f233fe0eced
|
||||
lexical: 0.10.0
|
||||
checksum: a38d9731ca4e6ce34ad1834f8d52ff9af5e9dff9e3642d483a465de333d1752c65d51f7b74bc8ba7685184b9981fdf089627d9411694c2518f816e4e305b3255
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/code@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/code@npm:0.9.2"
|
||||
"@lexical/code@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/code@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
prismjs: ^1.27.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: 55fb16794a2c2b9f42d0747fbc67f9b4be6973f3f05957104bd4dbf55ee30cf4d6b1853e01c47ce338089bcad709421aca0d258169eb7e33493caefcb22116d3
|
||||
lexical: 0.10.0
|
||||
checksum: b677fabfe11d5c90207e073727f968d34040885c21a2b707f5632c8f1483ddd89873522fdc4bfe3913f09789107f460064ae00cf361fb198fc46ed17276400a3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/dragon@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/dragon@npm:0.9.2"
|
||||
"@lexical/dragon@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/dragon@npm:0.10.0"
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: ac9877d14b9d17213c1416a400252ccaacf38bf9da6e989437dccac04f6eba5ad93f8bb0a0549b0a1127634c4453d285f9a9c54f38857ee01144ef9d09286aa8
|
||||
lexical: 0.10.0
|
||||
checksum: d66c660bcaca0a8806aa18acd4c42ecdbab9663949d2c9f084d4e928bc66152a4f11cb8ee025221f011a69bd6cfbca1aee3c9e76b1898e57540a26362f479158
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/hashtag@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/hashtag@npm:0.9.2"
|
||||
"@lexical/hashtag@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/hashtag@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: 6159f51cb35187f79b3025c21e828ada83fad9017487ce3c6e8ecb62c7185453a5bfe4c408146eddd6e4a17d3a92cbaa55a1b31aae6e254907ba34f2d5ab2c50
|
||||
lexical: 0.10.0
|
||||
checksum: aa25d64365e2b42dac462f9cee6e6db029c573dc3966175a6fb9da91a5308ce16ec3bc2bb9a8dd1e544dae63672280a065250eab881ff04ede9bc46f2724bb1e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/headless@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/headless@npm:0.9.2"
|
||||
"@lexical/headless@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/headless@npm:0.10.0"
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: b5e4cd8fc9204f17c08c2b97eac92b426e7ae9bd3f07ca02abaf470be8863f3aba525b1b5ac6cf4504970fdbcc3de00f5e02e9658faa0aad843a296518d2887d
|
||||
lexical: 0.10.0
|
||||
checksum: 108a0d4cb03e9cd6fa5e8e69e019a08e92010b06a39161ae21c0886abd4aeace14eafdb39f8f98749bbf09e4134df2d1824c05946b8f723b5ad1dd97a60bf693
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/history@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/history@npm:0.9.2"
|
||||
"@lexical/history@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/history@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: 0de0a9686efc6e416b01ddeb4a92930777ff89caff73a400780578670c78fd093c14d376335946cbef27810a365c00c5927053c0475889c77b652747aac54581
|
||||
lexical: 0.10.0
|
||||
checksum: 0c4c9b9f0258ef47c695e45513b649c0e73dce922e17d7dd3113caeadf74611a43ac1ca5cfe68294ca68ece5aee2f8bc49912b9066b2092887fe8adfd0b5ba08
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/html@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/html@npm:0.9.2"
|
||||
"@lexical/html@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/html@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/selection": 0.9.2
|
||||
"@lexical/selection": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: bf9ec588eed4cf3aa2a5ff1cb7c4c3bcb855c9b1c6c238d8c7a6034159d6a6d6b6c327c9ea437e2a3a8a7c6eaac7e5dff4977832ceefd13637d33cbfc6d2bd6f
|
||||
lexical: 0.10.0
|
||||
checksum: edc917aed0b2a0a82319ea077b4234708cf697be78e5e486b8eef693e4734aa93ab84c3aa5cc074c7cb90ecf576fa96173819ac6b4dfbe49921d0a8fbe32026b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/link@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/link@npm:0.9.2"
|
||||
"@lexical/link@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/link@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: e733b2f667efefe6aa603799af93a96a4d791bdfd68736ba5fe29611744e37b9cc88c819d13e8935e64dcf932e575141238903c6d8b66ad7e0273301e9336f5a
|
||||
lexical: 0.10.0
|
||||
checksum: 95a80d115a53a2464d0903a1dbebdbbb47eb731851340be49cf48d95e857c07fe1e2133c948ead438d15cdaec0dc9c05fd5d9e66d4820b4b0fc8e82e87729c7a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/list@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/list@npm:0.9.2"
|
||||
"@lexical/list@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/list@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: ada7c8c70721857e66782e284d457698fb774d74e147902b0087129eaed495c86ed3b7f7e77b222528060481f44a76e6f0ea0d9cdc812c2492ea588f2acc12da
|
||||
lexical: 0.10.0
|
||||
checksum: 27bcd138eae4f17bb40c313989158c34e1ba789982c84639c5e3c2bdf7f532b1b18c35366af886a4bcccf21df1d86de457bb8111d59218a83850fa40ced6ae2f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/mark@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/mark@npm:0.9.2"
|
||||
"@lexical/mark@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/mark@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: 5280882a5a58d4aa7c6df16007db621a0b62701621be7e4ccc1bf2c85f209b8ffdd86f1db1f8715e2503b8e2ffad0c4393d7e7ab3df8e4ae198005ab9180b3c0
|
||||
lexical: 0.10.0
|
||||
checksum: ad6bed6dbcd60afd8187d7f42febf010736ab9064e541d55e2a8ed3fde50c0b799305b7922160a7b6c1cb20b4566ffc5293153b5d815bd396e4140d89598c902
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/markdown@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/markdown@npm:0.9.2"
|
||||
"@lexical/markdown@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/markdown@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/code": 0.9.2
|
||||
"@lexical/link": 0.9.2
|
||||
"@lexical/list": 0.9.2
|
||||
"@lexical/rich-text": 0.9.2
|
||||
"@lexical/text": 0.9.2
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/code": 0.10.0
|
||||
"@lexical/link": 0.10.0
|
||||
"@lexical/list": 0.10.0
|
||||
"@lexical/rich-text": 0.10.0
|
||||
"@lexical/text": 0.10.0
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: e0866f8408edabb0b0625167ccaaf5f6f85e0b8c86824f2beed62054c8e6b6b0803c163a2808ce38dda7c4d9fa7b2b4fe0a577f2b2e48f3617a92372fe08e01e
|
||||
lexical: 0.10.0
|
||||
checksum: 37f89f42c17f0910a1f9b909d2d54bbca4ecf3748819c43c59820493911f253e0de8cc044e655060db4bbaf67d3e8e44bf21fcb233f70e1ec725699575c41857
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/offset@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/offset@npm:0.9.2"
|
||||
"@lexical/offset@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/offset@npm:0.10.0"
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: f4b69858def24b5cbfdb991837b7d3547dc10764dcfbda76f94406ea2e73c2c30da9078a724257ce17d4425e7a10daed817a0ab5c80e54ccb0251235eaee2c31
|
||||
lexical: 0.10.0
|
||||
checksum: b7a971144294ae7169eae37e8c458a931da79d92fd0f74d9971d96ab165c406e004d00854deb20d39959b67dfc24517e037324252ac2b17dd9470ee476ae1aa0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/overflow@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/overflow@npm:0.9.2"
|
||||
"@lexical/overflow@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/overflow@npm:0.10.0"
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: 97c6846b989e97a0aa57375416ec08980dd8018ce85d059e9022cc5472f0b783625f357ba82f0275f6686e5adfdf9f04a50ba9810402e523fb27caead710eb2b
|
||||
lexical: 0.10.0
|
||||
checksum: 1832501cfa25f4b5582f9c86e5eeabdf34e75299cdc8183658c05c221f4a2c77ddd639fe88a4b6b231e27983e55c232824245e98811fb74f4a221879eb470553
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/plain-text@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/plain-text@npm:0.9.2"
|
||||
"@lexical/plain-text@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/plain-text@npm:0.10.0"
|
||||
peerDependencies:
|
||||
"@lexical/clipboard": 0.9.2
|
||||
"@lexical/selection": 0.9.2
|
||||
"@lexical/utils": 0.9.2
|
||||
lexical: 0.9.2
|
||||
checksum: d554aab0feb1240e99d72f640caa706df3c9dd2f2e6e84b1c55a97ca08016c79190414fdd065564d244510b13821738a495986cb67804669d79ec76167ef69d0
|
||||
"@lexical/clipboard": 0.10.0
|
||||
"@lexical/selection": 0.10.0
|
||||
"@lexical/utils": 0.10.0
|
||||
lexical: 0.10.0
|
||||
checksum: e4b2acd53eb03f90808ab5c5aa04a12c7e7754e331b6cff0b61de4751ed337f349fb6840761e63f81b55034a383d158a6d19ea646dfb6325fdeb8cd65f8d7f11
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/react@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/react@npm:0.9.2"
|
||||
"@lexical/react@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/react@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/clipboard": 0.9.2
|
||||
"@lexical/code": 0.9.2
|
||||
"@lexical/dragon": 0.9.2
|
||||
"@lexical/hashtag": 0.9.2
|
||||
"@lexical/history": 0.9.2
|
||||
"@lexical/link": 0.9.2
|
||||
"@lexical/list": 0.9.2
|
||||
"@lexical/mark": 0.9.2
|
||||
"@lexical/markdown": 0.9.2
|
||||
"@lexical/overflow": 0.9.2
|
||||
"@lexical/plain-text": 0.9.2
|
||||
"@lexical/rich-text": 0.9.2
|
||||
"@lexical/selection": 0.9.2
|
||||
"@lexical/table": 0.9.2
|
||||
"@lexical/text": 0.9.2
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/yjs": 0.9.2
|
||||
"@lexical/clipboard": 0.10.0
|
||||
"@lexical/code": 0.10.0
|
||||
"@lexical/dragon": 0.10.0
|
||||
"@lexical/hashtag": 0.10.0
|
||||
"@lexical/history": 0.10.0
|
||||
"@lexical/link": 0.10.0
|
||||
"@lexical/list": 0.10.0
|
||||
"@lexical/mark": 0.10.0
|
||||
"@lexical/markdown": 0.10.0
|
||||
"@lexical/overflow": 0.10.0
|
||||
"@lexical/plain-text": 0.10.0
|
||||
"@lexical/rich-text": 0.10.0
|
||||
"@lexical/selection": 0.10.0
|
||||
"@lexical/table": 0.10.0
|
||||
"@lexical/text": 0.10.0
|
||||
"@lexical/utils": 0.10.0
|
||||
"@lexical/yjs": 0.10.0
|
||||
react-error-boundary: ^3.1.4
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
lexical: 0.10.0
|
||||
react: ">=17.x"
|
||||
react-dom: ">=17.x"
|
||||
checksum: 58a3532e313bfd89f8a7513183d0a38c8921c9cc619c1343700e34539102710258826b602371de2b230f0cff15f1e0705b8c1db56db51afa59003d0d2f97bd2f
|
||||
checksum: 76c6004e32f23e1388814e667d4b0adfe1c9698bccbf5c6503c1d52c7a3bddff13263a7e67d6c7f6c6484579f16e9b2d996df4d371476189750b98675d9f6ce7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/rich-text@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/rich-text@npm:0.9.2"
|
||||
"@lexical/rich-text@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/rich-text@npm:0.10.0"
|
||||
peerDependencies:
|
||||
"@lexical/clipboard": 0.9.2
|
||||
"@lexical/selection": 0.9.2
|
||||
"@lexical/utils": 0.9.2
|
||||
lexical: 0.9.2
|
||||
checksum: d71761fe76cfbf6139b593f0d2bd3f2a52875a68f0e6fff380ed1ca2703fc1d9aaa46c336df5a2f4e67abb4e0580c13523e59b55a86fa3303ce69047d392fbaa
|
||||
"@lexical/clipboard": 0.10.0
|
||||
"@lexical/selection": 0.10.0
|
||||
"@lexical/utils": 0.10.0
|
||||
lexical: 0.10.0
|
||||
checksum: 8d3b35ab18c88298724e076f851530ae061ca3765494bb7a48a8efac2edcf7e114efecf806d9ba1795d8d649261ceb5da585cc7ec66597faef7c5700ba1faa4b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/selection@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/selection@npm:0.9.2"
|
||||
"@lexical/selection@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/selection@npm:0.10.0"
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: bd2483d0ee3ae4c5fbcac432eaae3b0e0a0943dbcbe0a8b9dc095f71c09ad292457ce435be36eb6469cfc57fc9f7a629a7e652509a7c9c5577d9a48cb7c7590d
|
||||
lexical: 0.10.0
|
||||
checksum: 6a0d6af76c8572c148c7f5d5017ec044a1caf634afdacd5c9d651202ccc8fa7911dd15590f917f4573f503ddcf1ec2892acf8f3fc35fb3b207e75f39aca91f86
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/table@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/table@npm:0.9.2"
|
||||
"@lexical/table@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/table@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/utils": 0.9.2
|
||||
"@lexical/utils": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: b99747af530f39ecbf1583cfaaaf22214d2d5a365527f67da283ab6f1252e1c94f66fb3f32566bebcb9d14c2ae2aa0ce7f00bb5c07be37072a0e02df557c3dbf
|
||||
lexical: 0.10.0
|
||||
checksum: 9cd018ce3f67e524f6e02c7ccae70993d24742788fa02fac3ac5939b25e7918fe854b6dd820ff3b3a9ed315f099d94aed1060f7d634064c744c3da6fea54252d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/text@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/text@npm:0.9.2"
|
||||
"@lexical/text@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/text@npm:0.10.0"
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: c52abddf4b16ead17979ef4f756ea35ac69b5bc6a06425c1d8b2f400ea2e09ac91f4130b41288f9f99cff65ddbf5acd6e7f766472f647d6b1dd2fb0c6c54092c
|
||||
lexical: 0.10.0
|
||||
checksum: 42033da09baf938587a19bfc1f9f0c93b4983fd3a6e102110242e1403a0163b7f1ed8a2122608d2f8adc75c2b2d3e383cd0b6f282d34a8b8fe7e66fd785bf532
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/utils@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/utils@npm:0.9.2"
|
||||
"@lexical/utils@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/utils@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/list": 0.9.2
|
||||
"@lexical/selection": 0.9.2
|
||||
"@lexical/table": 0.9.2
|
||||
"@lexical/list": 0.10.0
|
||||
"@lexical/selection": 0.10.0
|
||||
"@lexical/table": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
checksum: 4885762b108e5f42c31b6f719e53e0d75a9d98bf52c8ae8666a889211d602bc465f742feab8c5b3d8c7433cfeca44686f609b6a32af3fad0599eef4054239d99
|
||||
lexical: 0.10.0
|
||||
checksum: 5a57f134e6be65ce1243dd096c40168a54126f2f55ac8d44d1c2ad59e86ea5a2672591c8f1dd906f296de14beb556986aab9bbc06f58e4cdb8e2bfc460a18d24
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@lexical/yjs@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "@lexical/yjs@npm:0.9.2"
|
||||
"@lexical/yjs@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "@lexical/yjs@npm:0.10.0"
|
||||
dependencies:
|
||||
"@lexical/offset": 0.9.2
|
||||
"@lexical/offset": 0.10.0
|
||||
peerDependencies:
|
||||
lexical: 0.9.2
|
||||
lexical: 0.10.0
|
||||
yjs: ">=13.5.22"
|
||||
checksum: c2a2b0ebe1e547d98e6c95c3a81bd64cf776d5e8e06a4f73a68ce87a2eb107a1b12f0254b7dc804becdcca3fd0f3cd866c63a55456d6cc1c83b3410ed98dd7c5
|
||||
checksum: 7164157eea40aa196c60044e454fec6e18b0d19f82ac4b4d56313b919eaddfee887db17fd4fbf5c03e51fa7979472b5011db0b5d68256be167466a90049b808a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5509,8 +5509,8 @@ __metadata:
|
||||
"@babel/plugin-transform-react-jsx": ^7.19.0
|
||||
"@babel/preset-env": "*"
|
||||
"@babel/preset-typescript": ^7.18.6
|
||||
"@lexical/headless": 0.9.2
|
||||
"@lexical/react": 0.9.2
|
||||
"@lexical/headless": 0.10.0
|
||||
"@lexical/react": 0.10.0
|
||||
"@pmmmwh/react-refresh-webpack-plugin": ^0.5.10
|
||||
"@radix-ui/react-slot": ^1.0.1
|
||||
"@simplewebauthn/browser": ^7.1.0
|
||||
@@ -5559,7 +5559,7 @@ __metadata:
|
||||
identity-obj-proxy: ^3.0.0
|
||||
jest: ^29.3.1
|
||||
jest-environment-jsdom: ^29.3.1
|
||||
lexical: 0.9.2
|
||||
lexical: 0.10.0
|
||||
lint-staged: ">=13"
|
||||
mini-css-extract-plugin: ^2.7.2
|
||||
minimatch: ^5.1.1
|
||||
@@ -16179,10 +16179,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lexical@npm:0.9.2":
|
||||
version: 0.9.2
|
||||
resolution: "lexical@npm:0.9.2"
|
||||
checksum: 72c8cb3ad68de9e581b3033ec3102968144018f2f2cc7a0167655970672711dd7b1f2779a6fa8270ab23abd24a48ff92593ca178f18ad3751e0efcded3904ac0
|
||||
"lexical@npm:0.10.0":
|
||||
version: 0.10.0
|
||||
resolution: "lexical@npm:0.10.0"
|
||||
checksum: 181d09446fd53c348f4900776994a15910c8e70aa720d6630e825a270b96069c49389ff5d333ddfaebb94c9eecf58a08f6d4cfeada0f7be2f205ea5a21f903b0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user