mirror of
https://github.com/standardnotes/app
synced 2026-09-16 00:46:00 -04:00
Compare commits
69
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
390ea45865 | ||
|
|
68214b14b6 | ||
|
|
22297ff514 | ||
|
|
bec026ad6a | ||
|
|
db77e2f53b | ||
|
|
11b4377b76 | ||
|
|
56b4c1aa80 | ||
|
|
d6843c207f | ||
|
|
7f05b2a748 | ||
|
|
767d856293 | ||
|
|
799945b167 | ||
|
|
7a24b205a7 | ||
|
|
7e65c9c46b | ||
|
|
d83e371022 | ||
|
|
8f2cdc5839 | ||
|
|
a2a6b5295c | ||
|
|
1482d4244d | ||
|
|
c893f3a067 | ||
|
|
a1225829ca | ||
|
|
4094a35731 | ||
|
|
f14b047d7e | ||
|
|
a33365a4d9 | ||
|
|
dac719dc5a | ||
|
|
9d22b8bfa1 | ||
|
|
2294467059 | ||
|
|
240bf669a1 | ||
|
|
e5c580deab | ||
|
|
7b44224314 | ||
|
|
32bdb02b59 | ||
|
|
687c7ab7cb | ||
|
|
8ba290dbac | ||
|
|
fc06d0001a | ||
|
|
d5ec7d41b9 | ||
|
|
8d154b48b8 | ||
|
|
91e2d66e58 | ||
|
|
2a7567e7b8 | ||
|
|
fb843ea0b1 | ||
|
|
f6afaae342 | ||
|
|
5112b97c05 | ||
|
|
f27a38ca9b | ||
|
|
4fe391cd29 | ||
|
|
058a2c69a3 | ||
|
|
aceeeb7e7d | ||
|
|
38e8a81f0b | ||
|
|
3b23312b62 | ||
|
|
0c4d44fb00 | ||
|
|
a137ca6d70 | ||
|
|
0f641e05ad | ||
|
|
46e87085d7 | ||
|
|
6868e512f2 | ||
|
|
19ee9ecb41 | ||
|
|
1ad7aa27f8 | ||
|
|
2ee7fef80b | ||
|
|
f94921336b | ||
|
|
8bc8ef780d | ||
|
|
1214edc80d | ||
|
|
65753c8ee6 | ||
|
|
6ee1c76366 | ||
|
|
aa1f7d976e | ||
|
|
2e11c8a7d1 | ||
|
|
3c76bd25e4 | ||
|
|
499d408515 | ||
|
|
499fa1a1a9 | ||
|
|
214f299563 | ||
|
|
e1c5319965 | ||
|
|
5491e3137a | ||
|
|
7affc7e575 | ||
|
|
da0c0f1874 | ||
|
|
a14787ca8d |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.26.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.26.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/api",
|
||||
"version": "1.26.7",
|
||||
"version": "1.26.10",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,90 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.1.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.28](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.27](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.26](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.25](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.22](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.21](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.20](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.19](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.18](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.17](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.16](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
## [1.1.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/clipper
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@standardnotes/clipper",
|
||||
"description": "Web clipper browser extension for Standard Notes",
|
||||
"version": "1.1.11",
|
||||
"version": "1.1.32",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js",
|
||||
|
||||
@@ -3,6 +3,90 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.106.41](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.40](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.39](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.38](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.37](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.36](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.35](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.34](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.28](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.27](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.26](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.25](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.22](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.21](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.106.20](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@standardnotes/desktop",
|
||||
"main": "./app/dist/index.js",
|
||||
"version": "3.106.20",
|
||||
"version": "3.106.41",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.21.38](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.37](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.36](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.35](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/encryption",
|
||||
"version": "1.21.35",
|
||||
"version": "1.21.38",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.59.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
## [1.59.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
## [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,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/features",
|
||||
"version": "1.59.3",
|
||||
"version": "1.59.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ComponentPermission } from '../Component/ComponentPermission'
|
||||
import { ContentType, SubscriptionName } from '@standardnotes/common'
|
||||
import { ContentType } from '@standardnotes/common'
|
||||
import { ComponentArea } from '../Component/ComponentArea'
|
||||
import { PermissionName } from '../Permission/PermissionName'
|
||||
import { FeatureIdentifier } from './FeatureIdentifier'
|
||||
@@ -12,8 +12,7 @@ type RoleFields = {
|
||||
role_name?: string
|
||||
|
||||
/** Statically populated. Non-influencing; used as a reference by other static consumers (such as email service) */
|
||||
availableInSubscriptions: SubscriptionName[]
|
||||
availableInRoles?: string[]
|
||||
availableInRoles: string[]
|
||||
}
|
||||
|
||||
export type BaseFeatureDescription = RoleFields & {
|
||||
|
||||
@@ -1,19 +1,11 @@
|
||||
import { SubscriptionName } from '@standardnotes/common'
|
||||
import { GetFeatures, GetFeaturesForSubscription } from './Features'
|
||||
import { GetFeatures } from './Features'
|
||||
|
||||
describe('features', () => {
|
||||
it('all features should have either availableInSubscriptions or availableInRoles populated', () => {
|
||||
it('all features should have availableInRoles populated', () => {
|
||||
const features = GetFeatures()
|
||||
|
||||
for (const feature of features) {
|
||||
expect(feature.availableInSubscriptions.length > 0 || feature.availableInRoles !== undefined && feature.availableInRoles.length > 0).toBeTruthy()
|
||||
}
|
||||
})
|
||||
it('gets features for plus plan', () => {
|
||||
const features = GetFeaturesForSubscription(SubscriptionName.PlusPlan)
|
||||
|
||||
for (const feature of features) {
|
||||
expect(feature.availableInSubscriptions.includes(SubscriptionName.PlusPlan))
|
||||
expect(feature.availableInRoles !== undefined && feature.availableInRoles.length > 0).toBeTruthy()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -4,16 +4,11 @@ import { serverFeatures } from '../Lists/ServerFeatures'
|
||||
import { clientFeatures } from '../Lists/ClientFeatures'
|
||||
import { GetDeprecatedFeatures } from '../Lists/DeprecatedFeatures'
|
||||
import { experimentalFeatures } from '../Lists/ExperimentalFeatures'
|
||||
import { SubscriptionName } from '@standardnotes/common'
|
||||
|
||||
export function GetFeatures(): FeatureDescription[] {
|
||||
return [...serverFeatures(), ...clientFeatures(), ...experimentalFeatures(), ...GetDeprecatedFeatures()]
|
||||
}
|
||||
|
||||
export function GetFeaturesForSubscription(subscription: SubscriptionName): FeatureDescription[] {
|
||||
return GetFeatures().filter((feature) => feature.availableInSubscriptions.includes(subscription))
|
||||
}
|
||||
|
||||
export function FindNativeFeature(identifier: FeatureIdentifier): FeatureDescription | undefined {
|
||||
return GetFeatures().find((f) => f.identifier === identifier)
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { FeatureDescription } from '../Feature/FeatureDescription'
|
||||
import { PermissionName } from '../Permission/PermissionName'
|
||||
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
|
||||
import { SubscriptionName } from '@standardnotes/common'
|
||||
import { RoleName } from '@standardnotes/domain-core'
|
||||
import { themes } from './Themes'
|
||||
import { editors } from './Editors'
|
||||
@@ -12,7 +11,6 @@ export function clientFeatures(): FeatureDescription[] {
|
||||
...editors(),
|
||||
{
|
||||
name: 'Tag Nesting',
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
identifier: FeatureIdentifier.TagNesting,
|
||||
permission_name: PermissionName.TagNesting,
|
||||
@@ -21,7 +19,6 @@ export function clientFeatures(): FeatureDescription[] {
|
||||
{
|
||||
name: 'Super Notes',
|
||||
identifier: FeatureIdentifier.SuperEditor,
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
permission_name: PermissionName.SuperEditor,
|
||||
description:
|
||||
@@ -29,7 +26,6 @@ export function clientFeatures(): FeatureDescription[] {
|
||||
},
|
||||
{
|
||||
name: 'Smart Filters',
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
identifier: FeatureIdentifier.SmartFilters,
|
||||
permission_name: PermissionName.SmartFilters,
|
||||
@@ -37,7 +33,6 @@ export function clientFeatures(): FeatureDescription[] {
|
||||
},
|
||||
{
|
||||
name: 'Encrypted files',
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
identifier: FeatureIdentifier.Files,
|
||||
permission_name: PermissionName.Files,
|
||||
@@ -45,7 +40,6 @@ export function clientFeatures(): FeatureDescription[] {
|
||||
},
|
||||
{
|
||||
name: 'Extension',
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
identifier: FeatureIdentifier.Extension,
|
||||
permission_name: PermissionName.Extension,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ContentType, SubscriptionName } from '@standardnotes/common'
|
||||
import { ContentType } from '@standardnotes/common'
|
||||
import {
|
||||
EditorFeatureDescription,
|
||||
IframeComponentFeatureDescription,
|
||||
@@ -14,7 +14,6 @@ import { RoleName } from '@standardnotes/domain-core'
|
||||
|
||||
export function GetDeprecatedFeatures(): FeatureDescription[] {
|
||||
const bold: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Alternative Rich Text',
|
||||
identifier: FeatureIdentifier.DeprecatedBoldEditor,
|
||||
note_type: NoteType.RichText,
|
||||
@@ -42,7 +41,6 @@ export function GetDeprecatedFeatures(): FeatureDescription[] {
|
||||
})
|
||||
|
||||
const markdownBasic: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Basic Markdown',
|
||||
identifier: FeatureIdentifier.DeprecatedMarkdownBasicEditor,
|
||||
note_type: NoteType.Markdown,
|
||||
@@ -56,7 +54,6 @@ export function GetDeprecatedFeatures(): FeatureDescription[] {
|
||||
})
|
||||
|
||||
const markdownAlt: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Markdown Alternative',
|
||||
identifier: FeatureIdentifier.DeprecatedMarkdownVisualEditor,
|
||||
note_type: NoteType.Markdown,
|
||||
@@ -71,7 +68,6 @@ export function GetDeprecatedFeatures(): FeatureDescription[] {
|
||||
})
|
||||
|
||||
const markdownMinimist: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Minimal Markdown',
|
||||
identifier: FeatureIdentifier.DeprecatedMarkdownMinimistEditor,
|
||||
note_type: NoteType.Markdown,
|
||||
@@ -86,7 +82,6 @@ export function GetDeprecatedFeatures(): FeatureDescription[] {
|
||||
})
|
||||
|
||||
const markdownMath: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Markdown with Math',
|
||||
identifier: FeatureIdentifier.DeprecatedMarkdownMathEditor,
|
||||
spellcheckControl: true,
|
||||
@@ -101,7 +96,6 @@ export function GetDeprecatedFeatures(): FeatureDescription[] {
|
||||
})
|
||||
|
||||
const filesafe: IframeComponentFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'FileSafe',
|
||||
identifier: FeatureIdentifier.DeprecatedFileSafe,
|
||||
component_permissions: [
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { SubscriptionName } from '@standardnotes/common'
|
||||
import { EditorFeatureDescription } from '../Feature/FeatureDescription'
|
||||
import { PermissionName } from '../Permission/PermissionName'
|
||||
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
|
||||
@@ -8,7 +7,6 @@ import { RoleName } from '@standardnotes/domain-core'
|
||||
|
||||
export function editors(): EditorFeatureDescription[] {
|
||||
const code: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Code',
|
||||
spellcheckControl: true,
|
||||
identifier: FeatureIdentifier.CodeEditor,
|
||||
@@ -25,7 +23,6 @@ export function editors(): EditorFeatureDescription[] {
|
||||
})
|
||||
|
||||
const plus: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Rich Text',
|
||||
note_type: NoteType.RichText,
|
||||
file_type: 'html',
|
||||
@@ -39,7 +36,6 @@ export function editors(): EditorFeatureDescription[] {
|
||||
})
|
||||
|
||||
const markdown: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Markdown',
|
||||
identifier: FeatureIdentifier.MarkdownProEditor,
|
||||
note_type: NoteType.Markdown,
|
||||
@@ -53,7 +49,6 @@ export function editors(): EditorFeatureDescription[] {
|
||||
})
|
||||
|
||||
const task: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Checklist',
|
||||
identifier: FeatureIdentifier.TaskEditor,
|
||||
note_type: NoteType.Task,
|
||||
@@ -68,7 +63,6 @@ export function editors(): EditorFeatureDescription[] {
|
||||
})
|
||||
|
||||
const tokenvault: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Authenticator',
|
||||
note_type: NoteType.Authentication,
|
||||
file_type: 'json',
|
||||
@@ -82,7 +76,6 @@ export function editors(): EditorFeatureDescription[] {
|
||||
})
|
||||
|
||||
const spreadsheets: EditorFeatureDescription = FillEditorComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Spreadsheet',
|
||||
identifier: FeatureIdentifier.SheetsEditor,
|
||||
note_type: NoteType.Spreadsheet,
|
||||
|
||||
@@ -1,66 +1,66 @@
|
||||
import { ServerFeatureDescription } from '../Feature/FeatureDescription'
|
||||
import { PermissionName } from '../Permission/PermissionName'
|
||||
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
|
||||
import { SubscriptionName } from '@standardnotes/common'
|
||||
import { RoleName } from '@standardnotes/domain-core'
|
||||
|
||||
export function serverFeatures(): ServerFeatureDescription[] {
|
||||
return [
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Two factor authentication',
|
||||
identifier: FeatureIdentifier.TwoFactorAuth,
|
||||
permission_name: PermissionName.TwoFactorAuth,
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
name: 'U2F authentication',
|
||||
identifier: FeatureIdentifier.UniversalSecondFactor,
|
||||
permission_name: PermissionName.UniversalSecondFactor,
|
||||
availableInRoles: [RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
name: 'Unlimited note history',
|
||||
identifier: FeatureIdentifier.NoteHistoryUnlimited,
|
||||
permission_name: PermissionName.NoteHistoryUnlimited,
|
||||
availableInRoles: [RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan],
|
||||
name: '365 days note history',
|
||||
identifier: FeatureIdentifier.NoteHistory365Days,
|
||||
permission_name: PermissionName.NoteHistory365Days,
|
||||
availableInRoles: [RoleName.NAMES.PlusUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Email backups',
|
||||
identifier: FeatureIdentifier.DailyEmailBackup,
|
||||
permission_name: PermissionName.DailyEmailBackup,
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Sign-in email alerts',
|
||||
identifier: FeatureIdentifier.SignInAlerts,
|
||||
permission_name: PermissionName.SignInAlerts,
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
identifier: FeatureIdentifier.FilesMaximumStorageTier,
|
||||
permission_name: PermissionName.FilesMaximumStorageTier,
|
||||
availableInRoles: [RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan],
|
||||
identifier: FeatureIdentifier.FilesLowStorageTier,
|
||||
permission_name: PermissionName.FilesLowStorageTier,
|
||||
availableInRoles: [RoleName.NAMES.PlusUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
identifier: FeatureIdentifier.SubscriptionSharing,
|
||||
permission_name: PermissionName.SubscriptionSharing,
|
||||
availableInRoles: [RoleName.NAMES.ProUser],
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Listed Custom Domain',
|
||||
identifier: FeatureIdentifier.ListedCustomDomain,
|
||||
permission_name: PermissionName.ListedCustomDomain,
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,12 +2,10 @@ import { ThemeFeatureDescription } from '../Feature/FeatureDescription'
|
||||
import { PermissionName } from '../Permission/PermissionName'
|
||||
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
|
||||
import { FillThemeComponentDefaults } from './Utilities/FillThemeComponentDefaults'
|
||||
import { SubscriptionName } from '@standardnotes/common'
|
||||
import { RoleName } from '@standardnotes/domain-core'
|
||||
|
||||
export function themes(): ThemeFeatureDescription[] {
|
||||
const midnight: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
name: 'Midnight',
|
||||
identifier: FeatureIdentifier.MidnightTheme,
|
||||
permission_name: PermissionName.MidnightTheme,
|
||||
@@ -22,7 +20,6 @@ export function themes(): ThemeFeatureDescription[] {
|
||||
})
|
||||
|
||||
const futura: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
name: 'Futura',
|
||||
identifier: FeatureIdentifier.FuturaTheme,
|
||||
@@ -37,7 +34,6 @@ export function themes(): ThemeFeatureDescription[] {
|
||||
})
|
||||
|
||||
const solarizedDark: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
name: 'Solarized Dark',
|
||||
identifier: FeatureIdentifier.SolarizedDarkTheme,
|
||||
@@ -52,7 +48,6 @@ export function themes(): ThemeFeatureDescription[] {
|
||||
})
|
||||
|
||||
const autobiography: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
name: 'Autobiography',
|
||||
identifier: FeatureIdentifier.AutobiographyTheme,
|
||||
@@ -66,7 +61,7 @@ export function themes(): ThemeFeatureDescription[] {
|
||||
})
|
||||
|
||||
const dark: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.CoreUser, RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
name: 'Dark',
|
||||
identifier: FeatureIdentifier.DarkTheme,
|
||||
permission_name: PermissionName.FocusedTheme,
|
||||
@@ -81,7 +76,6 @@ export function themes(): ThemeFeatureDescription[] {
|
||||
})
|
||||
|
||||
const titanium: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
name: 'Titanium',
|
||||
identifier: FeatureIdentifier.TitaniumTheme,
|
||||
@@ -95,7 +89,6 @@ export function themes(): ThemeFeatureDescription[] {
|
||||
})
|
||||
|
||||
const dynamic: ThemeFeatureDescription = FillThemeComponentDefaults({
|
||||
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
|
||||
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
|
||||
name: 'Dynamic Panels',
|
||||
identifier: FeatureIdentifier.DynamicTheme,
|
||||
|
||||
@@ -3,7 +3,7 @@ import { ContentType } from '@standardnotes/common'
|
||||
import { EditorFeatureDescription } from '../../Feature/FeatureDescription'
|
||||
import { ComponentArea } from '../../Component/ComponentArea'
|
||||
|
||||
export type RequiredEditorFields = Pick<EditorFeatureDescription, 'availableInSubscriptions'>
|
||||
export type RequiredEditorFields = Pick<EditorFeatureDescription, 'availableInRoles'>
|
||||
|
||||
export function FillEditorComponentDefaults(
|
||||
component: Partial<EditorFeatureDescription> & RequiredEditorFields,
|
||||
|
||||
@@ -2,7 +2,7 @@ import { ContentType } from '@standardnotes/common'
|
||||
import { ThemeFeatureDescription } from '../../Feature/FeatureDescription'
|
||||
import { ComponentArea } from '../../Component/ComponentArea'
|
||||
|
||||
type RequiredThemeFields = Pick<ThemeFeatureDescription, 'availableInSubscriptions'>
|
||||
type RequiredThemeFields = Pick<ThemeFeatureDescription, 'availableInRoles'>
|
||||
|
||||
export function FillThemeComponentDefaults(
|
||||
theme: Partial<ThemeFeatureDescription> & RequiredThemeFields,
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.28.46](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.45](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.44](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.43](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/filepicker",
|
||||
"version": "1.28.43",
|
||||
"version": "1.28.46",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.15.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.15.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.15.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.15.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/files",
|
||||
"version": "1.15.5",
|
||||
"version": "1.15.8",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,20 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [1.11.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
### Features
|
||||
|
||||
* Preferences view layout on mobile has been updated, and can be dismissed by swiping from the right ([e5c580d](https://github.com/standardnotes/app/commit/e5c580deab14a5fb8bea59560d230c22ccc307d4))
|
||||
|
||||
## [1.10.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/icons
|
||||
|
||||
## [1.10.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/icons
|
||||
|
||||
## [1.10.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/icons
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/icons",
|
||||
"version": "1.10.9",
|
||||
"version": "1.11.0",
|
||||
"private": true,
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.4167 6.90759L10.2417 10.7326L14.0667 6.90759L15.2417 8.09093L10.2417 13.0909L5.2417 8.09093L6.4167 6.90759Z" fill="#181818"/>
|
||||
</svg>
|
||||
<path
|
||||
d="M6.4167 6.90759L10.2417 10.7326L14.0667 6.90759L15.2417 8.09093L10.2417 13.0909L5.2417 8.09093L6.4167 6.90759Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 222 B After Width: | Height: | Size: 243 B |
@@ -1,4 +1,4 @@
|
||||
<svg viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 5C1 2.79086 2.79086 1 5 1H27C29.2091 1 31 2.79086 31 5V27C31 29.2091 29.2091 31 27 31H5C2.79086 31 1 29.2091 1 27V5Z" fill="#2B6FCF"/>
|
||||
<path d="M1 5C1 2.79086 2.79086 1 5 1H27C29.2091 1 31 2.79086 31 5V27C31 29.2091 29.2091 31 27 31H5C2.79086 31 1 29.2091 1 27V5Z" fill="currentColor"/>
|
||||
<path d="M8.5 8.5H23.5V10.1667H8.5V8.5ZM8.5 11.8333H18.5V13.5H8.5V11.8333ZM8.5 15.1667H23.5V16.8333H8.5V15.1667ZM8.5 18.5H18.5V20.1667H8.5V18.5ZM8.5 21.8333H23.5V23.5H8.5V21.8333Z" fill="white"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 428 B |
@@ -3,6 +3,90 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.53.41](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.40](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.39](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.38](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.37](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.36](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.35](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.34](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.28](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.27](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.26](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.25](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.22](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.21](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.53.20](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
@@ -637,7 +637,7 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/ReactCommon/yoga"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
boost: 57d2868c099736d80fcd648bf211b4431e51a558
|
||||
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
|
||||
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
|
||||
FBLazyVector: 60195509584153283780abdac5569feffb8f08cc
|
||||
@@ -658,7 +658,7 @@ SPEC CHECKSUMS:
|
||||
MMKV: 9c4663aa7ca255d478ff10f2f5cb7d17c1651ccd
|
||||
MMKVCore: 89f5c8a66bba2dcd551779dea4d412eeec8ff5bb
|
||||
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
|
||||
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
|
||||
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
|
||||
RCTRequired: bec48f07daf7bcdc2655a0cde84e07d24d2a9e2a
|
||||
RCTTypeSafety: 171394eebacf71e1cfad79dbfae7ee8fc16ca80a
|
||||
React: d7433ccb6a8c36e4cbed59a73c0700fc83c3e98a
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/mobile",
|
||||
"version": "3.53.20",
|
||||
"version": "3.53.41",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0-or-later",
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
## [1.45.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
## [1.45.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
## [1.45.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/models",
|
||||
"version": "1.45.2",
|
||||
"version": "1.45.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,90 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.4.309](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.308](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.307](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.306](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.305](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.304](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.303](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.302](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.301](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.300](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.299](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.298](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.297](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.296](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.295](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.294](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.293](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.292](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.291](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.290](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.289](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.288](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/releases",
|
||||
"version": "1.4.288",
|
||||
"version": "1.4.309",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "dist/releases.json",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.13.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
## [1.13.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
## [1.13.22](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
## [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,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/responses",
|
||||
"version": "1.13.21",
|
||||
"version": "1.13.24",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,4 +3,5 @@ import { ErrorTag } from './ErrorTag'
|
||||
export type HttpError = {
|
||||
message: string
|
||||
tag?: ErrorTag
|
||||
payload?: Record<string, unknown>
|
||||
}
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.59.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.59.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.59.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.59.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/services",
|
||||
"version": "1.59.7",
|
||||
"version": "1.59.10",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,38 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.168.16](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.168.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
@@ -11,4 +11,6 @@ export interface SyncClientInterface {
|
||||
getLastSyncDate(): Date | undefined
|
||||
|
||||
getSyncStatus(): SyncOpStatus
|
||||
|
||||
completedOnlineDownloadFirstSync: boolean
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ describe('files', function () {
|
||||
localStorage.clear()
|
||||
})
|
||||
|
||||
it('should create valet token from server', async function () {
|
||||
it('should create valet token from server - @paidfeature', async function () {
|
||||
await setup({ fakeCrypto: true, subscription: true })
|
||||
|
||||
const remoteIdentifier = Utils.generateUuid()
|
||||
@@ -80,7 +80,7 @@ describe('files', function () {
|
||||
expect(tokenOrError.tag).to.equal('no-subscription')
|
||||
})
|
||||
|
||||
it('should not create valet token from server when user has an expired subscription', async function () {
|
||||
it('should not create valet token from server when user has an expired subscription - @paidfeature', async function () {
|
||||
await setup({ fakeCrypto: true, subscription: false })
|
||||
|
||||
await Factory.publishMockedEvent('SUBSCRIPTION_PURCHASED', {
|
||||
@@ -107,7 +107,7 @@ describe('files', function () {
|
||||
expect(tokenOrError.tag).to.equal('expired-subscription')
|
||||
})
|
||||
|
||||
it('creating two upload sessions successively should succeed', async function () {
|
||||
it('creating two upload sessions successively should succeed - @paidfeature', async function () {
|
||||
await setup({ fakeCrypto: true, subscription: true })
|
||||
|
||||
const firstToken = await application.apiService.createFileValetToken(Utils.generateUuid(), 'write')
|
||||
@@ -121,7 +121,7 @@ describe('files', function () {
|
||||
expect(secondSession.uploadId).to.be.ok
|
||||
})
|
||||
|
||||
it('should encrypt and upload small file', async function () {
|
||||
it('should encrypt and upload small file - @paidfeature', async function () {
|
||||
await setup({ fakeCrypto: false, subscription: true })
|
||||
|
||||
const response = await fetch('/packages/snjs/mocha/assets/small_file.md')
|
||||
@@ -134,7 +134,7 @@ describe('files', function () {
|
||||
expect(downloadedBytes).to.eql(buffer)
|
||||
})
|
||||
|
||||
it('should encrypt and upload big file', async function () {
|
||||
it('should encrypt and upload big file - @paidfeature', async function () {
|
||||
await setup({ fakeCrypto: false, subscription: true })
|
||||
|
||||
const response = await fetch('/packages/snjs/mocha/assets/two_mb_file.md')
|
||||
@@ -147,7 +147,7 @@ describe('files', function () {
|
||||
expect(downloadedBytes).to.eql(buffer)
|
||||
})
|
||||
|
||||
it('should delete file', async function () {
|
||||
it('should delete file - @paidfeature', async function () {
|
||||
await setup({ fakeCrypto: false, subscription: true })
|
||||
|
||||
const response = await fetch('/packages/snjs/mocha/assets/small_file.md')
|
||||
|
||||
@@ -116,7 +116,7 @@ describe('settings service', function () {
|
||||
expect(settings.getSettingValue(SettingName.create(SettingName.NAMES.MfaSecret).getValue())).to.not.be.ok
|
||||
})
|
||||
|
||||
it('reads a subscription setting', async () => {
|
||||
it('reads a subscription setting - @paidfeature', async () => {
|
||||
await Factory.publishMockedEvent('SUBSCRIPTION_PURCHASED', {
|
||||
userEmail: context.email,
|
||||
subscriptionId: subscriptionId++,
|
||||
@@ -139,7 +139,7 @@ describe('settings service', function () {
|
||||
expect(setting).to.be.a('string')
|
||||
})
|
||||
|
||||
it('persist irreplaceable subscription settings between subsequent subscriptions', async () => {
|
||||
it('persist irreplaceable subscription settings between subsequent subscriptions - @paidfeature', async () => {
|
||||
await reInitializeApplicationWithRealCrypto()
|
||||
|
||||
await Factory.publishMockedEvent('SUBSCRIPTION_PURCHASED', {
|
||||
|
||||
@@ -49,7 +49,7 @@ describe('subscriptions', function () {
|
||||
await Factory.sleep(2)
|
||||
})
|
||||
|
||||
it('should invite a user by email to a shared subscription', async () => {
|
||||
it('should invite a user by email to a shared subscription - @paidfeature', async () => {
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
|
||||
const existingInvites = await subscriptionManager.listSubscriptionInvitations()
|
||||
@@ -59,7 +59,7 @@ describe('subscriptions', function () {
|
||||
expect(newlyCreatedInvite.status).to.equal('sent')
|
||||
})
|
||||
|
||||
it('should not invite a user by email if the limit of shared subscription is breached', async () => {
|
||||
it('should not invite a user by email if the limit of shared subscription is breached - @paidfeature', async () => {
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
@@ -77,7 +77,7 @@ describe('subscriptions', function () {
|
||||
expect(existingInvites.length).to.equal(5)
|
||||
})
|
||||
|
||||
it('should cancel a user invitation to a shared subscription', async () => {
|
||||
it('should cancel a user invitation to a shared subscription - @paidfeature', async () => {
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
|
||||
@@ -96,7 +96,7 @@ describe('subscriptions', function () {
|
||||
expect(existingInvites.filter(invite => invite.status === 'canceled').length).to.equal(1)
|
||||
})
|
||||
|
||||
it('should invite a user by email if the limit of shared subscription is restored', async () => {
|
||||
it('should invite a user by email if the limit of shared subscription is restored - @paidfeature', async () => {
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
await subscriptionManager.inviteToSubscription('[email protected]')
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const syncServerHostName = urlParams.get('sync_server_host_name') ?? 'syncing-server-proxy';
|
||||
const bail = urlParams.get('bail') === 'false' ? false : true;
|
||||
const skipPaidFeatures = urlParams.get('skip_paid_features') === 'true' ? true : false;
|
||||
|
||||
Object.assign(window, SNCrypto);
|
||||
|
||||
@@ -29,9 +30,14 @@
|
||||
console.error(error);
|
||||
};
|
||||
|
||||
mocha.setup('bdd');
|
||||
mocha.timeout(5000);
|
||||
mocha.bail(bail);
|
||||
mocha.setup({
|
||||
ui: 'bdd',
|
||||
timeout: 5000,
|
||||
bail: bail,
|
||||
});
|
||||
if (skipPaidFeatures) {
|
||||
mocha.grep('@paidfeature').invert();
|
||||
}
|
||||
</script>
|
||||
<script type="module" src="memory.test.js"></script>
|
||||
<script type="module" src="protocol.test.js"></script>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/snjs",
|
||||
"version": "2.168.8",
|
||||
"version": "2.168.16",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.7.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/styles
|
||||
|
||||
## [1.7.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/styles
|
||||
|
||||
## [1.7.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-30)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/styles
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/styles",
|
||||
"version": "1.7.6",
|
||||
"version": "1.7.8",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -111,14 +111,16 @@ export class SKAlert {
|
||||
</button>
|
||||
</div>`
|
||||
: ''
|
||||
const messageTemplate = this.text ? `<p class='sk-p text-base lg:text-sm'>${this.text}</p>` : ''
|
||||
const messageTemplate = this.text
|
||||
? `<p class='sk-p text-base lg:text-sm' style="max-width: 100%; overflow: hidden; text-overflow: ellipsis;">${this.text}</p>`
|
||||
: ''
|
||||
|
||||
const template = `
|
||||
<div class="sk-modal">
|
||||
<div class="sk-modal-background"></div>
|
||||
<div class="sk-modal-content">
|
||||
<div class="sn-component">
|
||||
<div class="sk-panel" style='max-width: 500px;'>
|
||||
<div class="sk-panel" style='max-width: min(95vw, 500px);'>
|
||||
<div class="sk-panel-content" ${panelStyle}>
|
||||
<div class="sk-panel-section">
|
||||
${titleTemplate}
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.3.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/toast
|
||||
|
||||
## [1.3.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/toast
|
||||
|
||||
## [1.3.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/toast
|
||||
|
||||
## [1.3.28](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-04-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/toast
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/toast",
|
||||
"version": "1.3.28",
|
||||
"version": "1.3.31",
|
||||
"private": true,
|
||||
"main": "./src/index.ts",
|
||||
"scripts": {
|
||||
|
||||
@@ -3,6 +3,30 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.26.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.26.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.26.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.26.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.26.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.26.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.26.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/ui-services",
|
||||
"version": "1.26.6",
|
||||
"version": "1.26.12",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,96 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.160.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.160.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.160.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where empty new line in Super would create extra new lines when converting to Markdown ([799945b](https://github.com/standardnotes/app/commit/799945b167b1660751c97895467e83982e5cdda3))
|
||||
|
||||
## [3.160.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.160.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.160.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.160.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.160.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
# [3.160.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)
|
||||
|
||||
### Features
|
||||
|
||||
* Preferences view layout on mobile has been updated, and can be dismissed by swiping from the right ([e5c580d](https://github.com/standardnotes/app/commit/e5c580deab14a5fb8bea59560d230c22ccc307d4))
|
||||
|
||||
## [3.159.17](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.16](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed issue where editor column would close after deleting a note on bigger screens ([7affc7e](https://github.com/standardnotes/app/commit/7affc7e5756e6b2f647e3cbbf3f316f641a29466))
|
||||
|
||||
## [3.159.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.159.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
@@ -1,5 +1,245 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "3.160.8",
|
||||
"title": "[3.160.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.7",
|
||||
"title": "[3.160.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.6",
|
||||
"title": "[3.160.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-22)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue where empty new line in Super would create extra new lines when converting to Markdown ([799945b](https://github.com/standardnotes/app/commit/799945b167b1660751c97895467e83982e5cdda3))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue where empty new line in Super would create extra new lines when converting to Markdown (799945b)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue where empty new line in Super would create extra new lines when converting to Markdown (799945b)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.5",
|
||||
"title": "[3.160.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-19)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.4",
|
||||
"title": "[3.160.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.3",
|
||||
"title": "[3.160.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.2",
|
||||
"title": "[3.160.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.1",
|
||||
"title": "[3.160.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-18)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.160.0",
|
||||
"title": "[3.160.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-17)",
|
||||
"date": null,
|
||||
"body": "### Features\n\n* Preferences view layout on mobile has been updated, and can be dismissed by swiping from the right ([e5c580d](https://github.com/standardnotes/app/commit/e5c580deab14a5fb8bea59560d230c22ccc307d4))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Preferences view layout on mobile has been updated, and can be dismissed by swiping from the right (e5c580d)"
|
||||
],
|
||||
"Features": [
|
||||
"Preferences view layout on mobile has been updated, and can be dismissed by swiping from the right (e5c580d)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.17",
|
||||
"title": "[3.159.17](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.16",
|
||||
"title": "[3.159.16](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.15",
|
||||
"title": "[3.159.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.14",
|
||||
"title": "[3.159.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.13",
|
||||
"title": "[3.159.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-16)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.12",
|
||||
"title": "[3.159.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.11",
|
||||
"title": "[3.159.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.10",
|
||||
"title": "[3.159.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-15)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.9",
|
||||
"title": "[3.159.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.8",
|
||||
"title": "[3.159.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.7",
|
||||
"title": "[3.159.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)",
|
||||
"date": null,
|
||||
"body": "### Bug Fixes\n\n* Fixed issue where editor column would close after deleting a note on bigger screens ([7affc7e](https://github.com/standardnotes/app/commit/7affc7e5756e6b2f647e3cbbf3f316f641a29466))",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Fixed issue where editor column would close after deleting a note on bigger screens (7affc7e)"
|
||||
],
|
||||
"Bug Fixes": [
|
||||
"Fixed issue where editor column would close after deleting a note on bigger screens (7affc7e)"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.6",
|
||||
"title": "[3.159.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-12)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.159.5",
|
||||
"title": "[3.159.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-05-11)",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/web",
|
||||
"version": "3.159.5",
|
||||
"version": "3.160.8",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "dist/app.js",
|
||||
"author": "Standard Notes",
|
||||
@@ -107,7 +107,7 @@
|
||||
"app/**/*.{js,ts,jsx,tsx,css,md}": "prettier --write"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ariakit/react": "^0.1.2",
|
||||
"@ariakit/react": "^0.2.1",
|
||||
"@lexical/headless": "0.10.0",
|
||||
"@radix-ui/react-slot": "^1.0.1"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { InvisibleSuperConverter } from '@/Components/SuperEditor/Tools/InvisibleMarkdownConverter'
|
||||
import { HeadlessSuperConverter } from '@/Components/SuperEditor/Tools/HeadlessSuperConverter'
|
||||
import {
|
||||
SNComponent,
|
||||
ComponentMutator,
|
||||
@@ -40,7 +40,7 @@ export class DesktopManager
|
||||
) {
|
||||
super(application, new InternalEventBus())
|
||||
|
||||
const markdownConverter = new InvisibleSuperConverter()
|
||||
const markdownConverter = new HeadlessSuperConverter()
|
||||
backups.setSuperConverter(markdownConverter)
|
||||
}
|
||||
|
||||
|
||||
+10
-11
@@ -30,6 +30,7 @@ const WorkspaceMenuItem: FunctionComponent<Props> = ({
|
||||
}) => {
|
||||
const [isRenaming, setIsRenaming] = useState(false)
|
||||
const [inputValue, setInputValue] = useState(descriptor.label)
|
||||
const itemRef = useRef<HTMLButtonElement>(null)
|
||||
const inputRef = useRef<HTMLInputElement>(null)
|
||||
|
||||
useEffect(() => {
|
||||
@@ -43,8 +44,10 @@ const WorkspaceMenuItem: FunctionComponent<Props> = ({
|
||||
}, [])
|
||||
|
||||
const handleInputKeyDown: KeyboardEventHandler = useCallback((event) => {
|
||||
if (event.key === KeyboardKey.Enter) {
|
||||
inputRef.current?.blur()
|
||||
if (event.key === KeyboardKey.Enter || event.key === KeyboardKey.Escape) {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
itemRef.current?.focus()
|
||||
}
|
||||
}, [])
|
||||
|
||||
@@ -55,18 +58,14 @@ const WorkspaceMenuItem: FunctionComponent<Props> = ({
|
||||
|
||||
return (
|
||||
<div className="relative">
|
||||
<MenuRadioButtonItem
|
||||
className="flex w-full cursor-pointer items-center border-0 bg-transparent px-3 py-2 text-left text-mobile-menu-item text-text hover:bg-contrast hover:text-foreground focus:bg-info-backdrop focus:shadow-none md:text-tablet-menu-item lg:text-menu-item"
|
||||
onClick={onClick}
|
||||
checked={descriptor.primary}
|
||||
>
|
||||
<div className="ml-2 flex w-full items-center justify-between">
|
||||
{!isRenaming && <div>{descriptor.label}</div>}
|
||||
<MenuRadioButtonItem ref={itemRef} className="overflow-hidden" onClick={onClick} checked={descriptor.primary}>
|
||||
<div className="ml-2 flex w-full items-center justify-between gap-3 overflow-hidden">
|
||||
{!isRenaming && <div className="overflow-hidden text-ellipsis">{descriptor.label}</div>}
|
||||
{descriptor.primary && !hideOptions && (
|
||||
<div className="flex items-center">
|
||||
<div className="flex items-center gap-3">
|
||||
<a
|
||||
role="button"
|
||||
className="mr-3 flex h-5 w-5 cursor-pointer items-center justify-center border-0 bg-transparent p-0 hover:bg-contrast"
|
||||
className="flex h-5 w-5 cursor-pointer items-center justify-center border-0 bg-transparent p-0 hover:bg-contrast"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
setIsRenaming((isRenaming) => !isRenaming)
|
||||
|
||||
@@ -14,7 +14,7 @@ const AlertDialog = ({
|
||||
})
|
||||
|
||||
return (
|
||||
<Dialog store={dialog} role="alertdialog" className="h-full w-full" backdropProps={{ className: '!z-modal' }}>
|
||||
<Dialog store={dialog} role="alertdialog" className="fixed top-0 left-0 z-modal h-full w-full">
|
||||
<div
|
||||
className="absolute z-0 h-full w-full bg-passive-5 opacity-25 md:opacity-75"
|
||||
role="presentation"
|
||||
@@ -22,7 +22,7 @@ const AlertDialog = ({
|
||||
/>
|
||||
<div
|
||||
className={classNames(
|
||||
'absolute top-1/2 left-1/2 z-[1] -translate-x-1/2 -translate-y-1/2 rounded border border-border bg-default px-6 py-5 shadow-xl',
|
||||
'absolute top-1/2 left-1/2 z-[1] w-[95vw] -translate-x-1/2 -translate-y-1/2 rounded border border-border bg-default px-6 py-5 shadow-xl md:w-auto',
|
||||
!className?.includes('max-w-') && 'max-w-[600px]',
|
||||
className,
|
||||
)}
|
||||
|
||||
@@ -237,7 +237,7 @@ const ChallengeModal: FunctionComponent<Props> = ({
|
||||
})
|
||||
|
||||
return (
|
||||
<ModalOverlay isOpen={true} key={challenge.id} ref={setModalElement}>
|
||||
<ModalOverlay isOpen={true} key={challenge.id} ref={setModalElement} close={cancelChallenge}>
|
||||
<Modal
|
||||
title="Authenticate"
|
||||
close={cancelChallenge}
|
||||
|
||||
@@ -7,13 +7,20 @@ import RoundIconButton from '../Button/RoundIconButton'
|
||||
import { getIconAndTintForNoteType } from '@/Utils/Items/Icons/getIconAndTintForNoteType'
|
||||
import { CHANGE_EDITOR_COMMAND, keyboardStringForShortcut } from '@standardnotes/ui-services'
|
||||
import { useApplication } from '../ApplicationProvider'
|
||||
import { NoteViewController } from '../NoteView/Controller/NoteViewController'
|
||||
import { noteTypeForEditorIdentifier } from '@standardnotes/snjs'
|
||||
|
||||
type Props = {
|
||||
viewControllerManager: ViewControllerManager
|
||||
noteViewController?: NoteViewController
|
||||
onClickPreprocessing?: () => Promise<void>
|
||||
}
|
||||
|
||||
const ChangeEditorButton: FunctionComponent<Props> = ({ viewControllerManager, onClickPreprocessing }: Props) => {
|
||||
const ChangeEditorButton: FunctionComponent<Props> = ({
|
||||
viewControllerManager,
|
||||
noteViewController,
|
||||
onClickPreprocessing,
|
||||
}: Props) => {
|
||||
const application = useApplication()
|
||||
|
||||
const note = viewControllerManager.notesController.firstSelectedNote
|
||||
@@ -23,10 +30,18 @@ const ChangeEditorButton: FunctionComponent<Props> = ({ viewControllerManager, o
|
||||
const [selectedEditor, setSelectedEditor] = useState(() => {
|
||||
return note ? application.componentManager.editorForNote(note) : undefined
|
||||
})
|
||||
const [selectedEditorIcon, selectedEditorIconTint] = getIconAndTintForNoteType(
|
||||
note?.noteType || selectedEditor?.package_info.note_type,
|
||||
true,
|
||||
)
|
||||
const noteType = noteViewController?.isTemplateNote
|
||||
? noteTypeForEditorIdentifier(
|
||||
application.geDefaultEditorIdentifier(
|
||||
noteViewController.templateNoteOptions?.tag
|
||||
? application.items.findItem(noteViewController.templateNoteOptions.tag)
|
||||
: undefined,
|
||||
),
|
||||
)
|
||||
: note
|
||||
? note.noteType
|
||||
: selectedEditor?.package_info.note_type
|
||||
const [selectedEditorIcon, selectedEditorIconTint] = getIconAndTintForNoteType(noteType, true)
|
||||
const [isClickOutsideDisabled, setIsClickOutsideDisabled] = useState(false)
|
||||
|
||||
const toggleMenu = useCallback(async () => {
|
||||
|
||||
@@ -255,7 +255,7 @@ const ChangeEditorMenu: FunctionComponent<ChangeEditorMenuProps> = ({
|
||||
)
|
||||
})}
|
||||
</Menu>
|
||||
<ModalOverlay isOpen={showSuperNoteImporter}>
|
||||
<ModalOverlay isOpen={showSuperNoteImporter} close={closeSuperNoteImporter}>
|
||||
{note && (
|
||||
<SuperNoteImporter
|
||||
note={note}
|
||||
@@ -265,7 +265,7 @@ const ChangeEditorMenu: FunctionComponent<ChangeEditorMenuProps> = ({
|
||||
/>
|
||||
)}
|
||||
</ModalOverlay>
|
||||
<ModalOverlay isOpen={showSuperNoteConverter}>
|
||||
<ModalOverlay isOpen={showSuperNoteConverter} close={closeSuperNoteConverter}>
|
||||
{note && pendingConversionItem && (
|
||||
<SuperNoteConverter
|
||||
note={note}
|
||||
|
||||
@@ -180,7 +180,7 @@ const ChangeMultipleMenu = ({ application, notes, setDisableClickOutside }: Prop
|
||||
</Fragment>
|
||||
))}
|
||||
</Menu>
|
||||
<ModalOverlay isOpen={showSuperImporter}>
|
||||
<ModalOverlay isOpen={showSuperImporter} close={closeCurrentSuperNoteImporter}>
|
||||
{confirmationQueue[0] && (
|
||||
<SuperNoteImporter
|
||||
note={confirmationQueue[0]}
|
||||
|
||||
@@ -374,6 +374,7 @@ const ClipperView = ({
|
||||
setIsScreenshotMode(checked)
|
||||
}}
|
||||
className="flex-row-reverse gap-2"
|
||||
forceDesktopStyle={true}
|
||||
>
|
||||
Clip as screenshot
|
||||
</MenuSwitchButtonItem>
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import { $createParagraphNode, $getRoot, $insertNodes, LexicalNode } from 'lexical'
|
||||
import { $createParagraphNode, $getRoot, $insertNodes, $nodesOfType, LexicalNode } from 'lexical'
|
||||
import { $generateNodesFromDOM } from '@lexical/html'
|
||||
import { createHeadlessEditor } from '@lexical/headless'
|
||||
import { BlockEditorNodes } from '../SuperEditor/Lexical/Nodes/AllNodes'
|
||||
import BlocksEditorTheme from '../SuperEditor/Lexical/Theme/Theme'
|
||||
import { ClipPayload } from '@standardnotes/clipper/src/types/message'
|
||||
import { LinkNode } from '@lexical/link'
|
||||
|
||||
const AbsoluteLinkRegExp = new RegExp('^(?:[a-z+]+:)?//', 'i')
|
||||
|
||||
export const getSuperJSONFromClipPayload = async (clipPayload: ClipPayload) => {
|
||||
const editor = createHeadlessEditor({
|
||||
@@ -14,6 +17,8 @@ export const getSuperJSONFromClipPayload = async (clipPayload: ClipPayload) => {
|
||||
nodes: [...BlockEditorNodes],
|
||||
})
|
||||
|
||||
const clipURL = new URL(clipPayload.url)
|
||||
|
||||
await new Promise<void>((resolve) => {
|
||||
editor.update(() => {
|
||||
const parser = new DOMParser()
|
||||
@@ -59,5 +64,21 @@ export const getSuperJSONFromClipPayload = async (clipPayload: ClipPayload) => {
|
||||
})
|
||||
})
|
||||
|
||||
await new Promise<void>((resolve) => {
|
||||
editor.update(() => {
|
||||
$nodesOfType(LinkNode).forEach((linkNode) => {
|
||||
const url = linkNode.getURL()
|
||||
const isAbsoluteLink = AbsoluteLinkRegExp.test(url)
|
||||
|
||||
if (!isAbsoluteLink) {
|
||||
const fixedURL = new URL(url, clipURL)
|
||||
linkNode.setURL(fixedURL.toString())
|
||||
}
|
||||
})
|
||||
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
||||
return JSON.stringify(editor.getEditorState().toJSON())
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
} from '@standardnotes/ui-services'
|
||||
import { WebApplication } from '@/Application/WebApplication'
|
||||
import { PANEL_NAME_NOTES } from '@/Constants/Constants'
|
||||
import { FileItem, PrefKey, WebAppEvent } from '@standardnotes/snjs'
|
||||
import { FileItem, Platform, PrefKey, WebAppEvent } from '@standardnotes/snjs'
|
||||
import { observer } from 'mobx-react-lite'
|
||||
import { forwardRef, useCallback, useEffect, useMemo } from 'react'
|
||||
import ContentList from '@/Components/ContentListView/ContentList'
|
||||
@@ -305,7 +305,9 @@ const ContentListView = forwardRef<HTMLDivElement, Props>(
|
||||
}
|
||||
}, [selectedUuids, innerRef, isCurrentNoteTemplate, renderedItems, panes])
|
||||
|
||||
const [setElement] = usePaneSwipeGesture('right', () => setPaneLayout(PaneLayout.TagSelection))
|
||||
const [setElement] = usePaneSwipeGesture('right', () => setPaneLayout(PaneLayout.TagSelection), {
|
||||
requiresStartFromEdge: application.platform !== Platform.Android,
|
||||
})
|
||||
|
||||
return (
|
||||
<div
|
||||
|
||||
+2
-2
@@ -108,10 +108,10 @@ const AddItemMenuButton = ({
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
</Popover>
|
||||
<ModalOverlay isOpen={captureType === 'photo'}>
|
||||
<ModalOverlay isOpen={captureType === 'photo'} close={closeCaptureModal}>
|
||||
<PhotoCaptureModal filesController={filesController} close={closeCaptureModal} />
|
||||
</ModalOverlay>
|
||||
<ModalOverlay isOpen={captureType === 'video'}>
|
||||
<ModalOverlay isOpen={captureType === 'video'} close={closeCaptureModal}>
|
||||
<VideoCaptureModal filesController={filesController} close={closeCaptureModal} />
|
||||
</ModalOverlay>
|
||||
</>
|
||||
|
||||
+49
-10
@@ -1,11 +1,11 @@
|
||||
import { WebApplication } from '@/Application/WebApplication'
|
||||
import { memo, useCallback, useMemo, useRef, useState } from 'react'
|
||||
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||
import Icon from '../../Icon/Icon'
|
||||
import { classNames } from '@standardnotes/utils'
|
||||
import Popover from '@/Components/Popover/Popover'
|
||||
import DisplayOptionsMenu from './DisplayOptionsMenu'
|
||||
import { NavigationMenuButton } from '@/Components/NavigationMenu/NavigationMenu'
|
||||
import { isTag, VectorIconNameOrEmoji } from '@standardnotes/snjs'
|
||||
import { ApplicationEvent, isTag, VectorIconNameOrEmoji } from '@standardnotes/snjs'
|
||||
import RoundIconButton from '@/Components/Button/RoundIconButton'
|
||||
import { AnyTag } from '@/Controllers/Navigation/AnyTagType'
|
||||
import { MediaQueryBreakpoints, MutuallyExclusiveMediaQueryBreakpoints, useMediaQuery } from '@/Hooks/useMediaQuery'
|
||||
@@ -53,6 +53,38 @@ const ContentListHeader = ({
|
||||
const isTouchScreen = !useMediaQuery(MediaQueryBreakpoints.pointerFine)
|
||||
const isTablet = matchesMd && isTouchScreen
|
||||
|
||||
const [syncSubtitle, setSyncSubtitle] = useState('')
|
||||
const showSyncSubtitle = isMobileScreen && !!syncSubtitle
|
||||
|
||||
useEffect(() => {
|
||||
return application.addEventObserver(async (event) => {
|
||||
if (event === ApplicationEvent.CompletedInitialSync) {
|
||||
setSyncSubtitle('')
|
||||
return
|
||||
}
|
||||
|
||||
const syncStatus = application.sync.getSyncStatus()
|
||||
const { localDataDone, localDataCurrent, localDataTotal } = syncStatus.getStats()
|
||||
|
||||
if (event === ApplicationEvent.SyncStatusChanged) {
|
||||
setSyncSubtitle(
|
||||
syncStatus.syncInProgress && !application.sync.completedOnlineDownloadFirstSync ? 'Syncing...' : '',
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (event === ApplicationEvent.LocalDataIncrementalLoad || event === ApplicationEvent.LocalDataLoaded) {
|
||||
if (localDataDone) {
|
||||
setSyncSubtitle('')
|
||||
return
|
||||
}
|
||||
|
||||
setSyncSubtitle(`Loading ${localDataCurrent}/${localDataTotal} items...`)
|
||||
return
|
||||
}
|
||||
})
|
||||
}, [application])
|
||||
|
||||
const [showDisplayOptionsMenu, setShowDisplayOptionsMenu] = useState(false)
|
||||
|
||||
const toggleDisplayOptionsMenu = useCallback(() => {
|
||||
@@ -114,31 +146,38 @@ const ContentListHeader = ({
|
||||
const FolderName = useMemo(() => {
|
||||
return (
|
||||
<div className="flex min-w-0 flex-grow flex-col break-words pt-1 lg:pt-0">
|
||||
<div className={`flex min-w-0 flex-grow flex-row ${!optionsSubtitle ? 'items-center' : ''}`}>
|
||||
<div
|
||||
className={classNames(
|
||||
'flex min-w-0 flex-grow flex-row',
|
||||
!optionsSubtitle && !showSyncSubtitle ? 'items-center' : '',
|
||||
)}
|
||||
>
|
||||
{icon && (
|
||||
<Icon
|
||||
type={icon}
|
||||
size={'custom'}
|
||||
className={` ml-0.5 mr-1.5 h-7 w-7 text-2xl text-neutral lg:h-6 lg:w-6 lg:text-lg ${
|
||||
optionsSubtitle ? 'mt-1' : ''
|
||||
}`}
|
||||
size="custom"
|
||||
className={classNames(
|
||||
'ml-0.5 mr-1.5 h-7 w-7 flex-shrink-0 text-2xl text-neutral lg:h-6 lg:w-6 lg:text-lg',
|
||||
optionsSubtitle && 'md:mt-0.5',
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
<div className="flex min-w-0 flex-grow flex-col break-words">
|
||||
<div className=" text-2xl font-semibold text-text md:text-lg">{panelTitle}</div>
|
||||
<div className="text-2xl font-semibold text-text md:text-lg">{panelTitle}</div>
|
||||
{showSyncSubtitle && <div className="-mt-1 text-xs text-passive-0 md:mt-0">{syncSubtitle}</div>}
|
||||
{optionsSubtitle && <div className="text-xs text-passive-0">{optionsSubtitle}</div>}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}, [optionsSubtitle, icon, panelTitle])
|
||||
}, [optionsSubtitle, showSyncSubtitle, icon, panelTitle, syncSubtitle])
|
||||
|
||||
const PhoneAndDesktopLayout = useMemo(() => {
|
||||
return (
|
||||
<div className={'flex w-full justify-between md:flex'}>
|
||||
<NavigationMenuButton />
|
||||
{FolderName}
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="flex items-start gap-3 md:items-center">
|
||||
{SearchBarButton}
|
||||
{OptionsMenu}
|
||||
{AddButton}
|
||||
|
||||
+65
-59
@@ -29,6 +29,57 @@ import { PaneLayout } from '@/Controllers/PaneController/PaneLayout'
|
||||
|
||||
const DailyEntryModeEnabled = true
|
||||
|
||||
const SortIcon = ({ enabled, reverse }: { enabled: boolean; reverse: boolean | undefined }) => {
|
||||
if (!enabled) {
|
||||
return null
|
||||
}
|
||||
return (
|
||||
<Icon
|
||||
type={reverse ? 'arrows-sort-up' : 'arrows-sort-down'}
|
||||
className="h-6 w-6 text-neutral md:h-5 md:w-6"
|
||||
size="custom"
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
const TabButton: FunctionComponent<{
|
||||
label: string
|
||||
mode: PreferenceMode
|
||||
icon?: VectorIconNameOrEmoji
|
||||
currentMode: PreferenceMode
|
||||
setCurrentMode: (mode: PreferenceMode) => void
|
||||
}> = ({ mode, label, icon, currentMode, setCurrentMode }) => {
|
||||
const isSelected = currentMode === mode
|
||||
|
||||
return (
|
||||
<button
|
||||
className={classNames(
|
||||
'relative cursor-pointer rounded-full border-2 border-solid border-transparent py-1 px-2 text-mobile-menu-item focus:shadow-none md:py-0 lg:text-sm',
|
||||
isSelected
|
||||
? 'bg-info text-info-contrast'
|
||||
: 'bg-transparent text-text hover:bg-info-backdrop focus:bg-info-backdrop',
|
||||
)}
|
||||
onClick={() => {
|
||||
setCurrentMode(mode)
|
||||
}}
|
||||
>
|
||||
<div className="flex items-center justify-center">
|
||||
{icon && (
|
||||
<Icon
|
||||
size="custom"
|
||||
type={icon as IconType}
|
||||
className={classNames(
|
||||
'mr-1 h-4.5 w-4.5 cursor-pointer md:h-3.5 md:w-3.5',
|
||||
isSelected ? 'text-info-contrast' : 'text-neutral',
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
<div>{label}</div>
|
||||
</div>
|
||||
</button>
|
||||
)
|
||||
}
|
||||
|
||||
const DisplayOptionsMenu: FunctionComponent<DisplayOptionsMenuProps> = ({
|
||||
application,
|
||||
isOpen,
|
||||
@@ -227,39 +278,6 @@ const DisplayOptionsMenu: FunctionComponent<DisplayOptionsMenuProps> = ({
|
||||
}
|
||||
}, [preferences.useTableView, changePreferences, paneController])
|
||||
|
||||
const TabButton: FunctionComponent<{
|
||||
label: string
|
||||
mode: PreferenceMode
|
||||
icon?: VectorIconNameOrEmoji
|
||||
}> = ({ mode, label, icon }) => {
|
||||
const isSelected = currentMode === mode
|
||||
|
||||
return (
|
||||
<button
|
||||
className={classNames(
|
||||
'relative cursor-pointer rounded-full border-2 border-solid border-transparent px-2 text-base focus:shadow-none lg:text-sm',
|
||||
isSelected
|
||||
? 'bg-info text-info-contrast'
|
||||
: 'bg-transparent text-text hover:bg-info-backdrop focus:bg-info-backdrop',
|
||||
)}
|
||||
onClick={() => {
|
||||
setCurrentMode(mode)
|
||||
}}
|
||||
>
|
||||
<div className="flex items-center justify-center">
|
||||
{icon && (
|
||||
<Icon
|
||||
size="small"
|
||||
type={icon as IconType}
|
||||
className={classNames('mr-1 cursor-pointer', isSelected ? 'text-info-contrast' : 'text-neutral')}
|
||||
/>
|
||||
)}
|
||||
<div>{label}</div>
|
||||
</div>
|
||||
</button>
|
||||
)
|
||||
}
|
||||
|
||||
const isMobileScreen = useMediaQuery(MutuallyExclusiveMediaQueryBreakpoints.sm)
|
||||
const isTableViewEnabled = Boolean(isFilesSmartView || preferences.useTableView)
|
||||
const shouldHideNonApplicableOptions = isTableViewEnabled && !isMobileScreen
|
||||
@@ -269,8 +287,14 @@ const DisplayOptionsMenu: FunctionComponent<DisplayOptionsMenuProps> = ({
|
||||
<div className="my-1 px-3 text-base font-semibold uppercase text-text lg:text-xs">Preferences for</div>
|
||||
<div className={classNames('mt-1.5 flex w-full justify-between px-3', !controlsDisabled && 'mb-3')}>
|
||||
<div className="flex items-center gap-1.5">
|
||||
<TabButton label="Global" mode="global" />
|
||||
<TabButton label={selectedTag.title} icon={selectedTag.iconString} mode="tag" />
|
||||
<TabButton label="Global" mode="global" currentMode={currentMode} setCurrentMode={setCurrentMode} />
|
||||
<TabButton
|
||||
label={selectedTag.title}
|
||||
icon={selectedTag.iconString}
|
||||
mode="tag"
|
||||
currentMode={currentMode}
|
||||
setCurrentMode={setCurrentMode}
|
||||
/>
|
||||
</div>
|
||||
{currentMode === 'tag' && (
|
||||
<button className="text-base lg:text-sm" onClick={resetTagPreferences}>
|
||||
@@ -301,15 +325,9 @@ const DisplayOptionsMenu: FunctionComponent<DisplayOptionsMenuProps> = ({
|
||||
onClick={toggleSortByDateModified}
|
||||
checked={preferences.sortBy === CollectionSort.UpdatedAt}
|
||||
>
|
||||
<div className="ml-2 flex flex-grow items-center justify-between">
|
||||
<div className="ml-1 flex flex-grow items-center justify-between md:ml-2">
|
||||
<span>Date modified</span>
|
||||
{preferences.sortBy === CollectionSort.UpdatedAt ? (
|
||||
preferences.sortReverse ? (
|
||||
<Icon type="arrows-sort-up" className="text-neutral" />
|
||||
) : (
|
||||
<Icon type="arrows-sort-down" className="text-neutral" />
|
||||
)
|
||||
) : null}
|
||||
<SortIcon enabled={preferences.sortBy === CollectionSort.UpdatedAt} reverse={preferences.sortReverse} />
|
||||
</div>
|
||||
</MenuRadioButtonItem>
|
||||
<MenuRadioButtonItem
|
||||
@@ -318,15 +336,9 @@ const DisplayOptionsMenu: FunctionComponent<DisplayOptionsMenuProps> = ({
|
||||
onClick={toggleSortByCreationDate}
|
||||
checked={preferences.sortBy === CollectionSort.CreatedAt}
|
||||
>
|
||||
<div className="ml-2 flex flex-grow items-center justify-between">
|
||||
<div className="ml-1 flex flex-grow items-center justify-between md:ml-2">
|
||||
<span>Creation date</span>
|
||||
{preferences.sortBy === CollectionSort.CreatedAt ? (
|
||||
preferences.sortReverse ? (
|
||||
<Icon type="arrows-sort-up" className="text-neutral" />
|
||||
) : (
|
||||
<Icon type="arrows-sort-down" className="text-neutral" />
|
||||
)
|
||||
) : null}
|
||||
<SortIcon enabled={preferences.sortBy === CollectionSort.CreatedAt} reverse={preferences.sortReverse} />
|
||||
</div>
|
||||
</MenuRadioButtonItem>
|
||||
<MenuRadioButtonItem
|
||||
@@ -335,15 +347,9 @@ const DisplayOptionsMenu: FunctionComponent<DisplayOptionsMenuProps> = ({
|
||||
onClick={toggleSortByTitle}
|
||||
checked={preferences.sortBy === CollectionSort.Title}
|
||||
>
|
||||
<div className="ml-2 flex flex-grow items-center justify-between">
|
||||
<div className="ml-1 flex flex-grow items-center justify-between md:ml-2">
|
||||
<span>Title</span>
|
||||
{preferences.sortBy === CollectionSort.Title ? (
|
||||
preferences.sortReverse ? (
|
||||
<Icon type="arrows-sort-up" className="text-neutral" />
|
||||
) : (
|
||||
<Icon type="arrows-sort-down" className="text-neutral" />
|
||||
)
|
||||
) : null}
|
||||
<SortIcon enabled={preferences.sortBy === CollectionSort.Title} reverse={preferences.sortReverse} />
|
||||
</div>
|
||||
</MenuRadioButtonItem>
|
||||
<>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { FunctionComponent } from 'react'
|
||||
import Icon from '@/Components/Icon/Icon'
|
||||
import { ListableContentItem } from './Types/ListableContentItem'
|
||||
import { classNames } from '@standardnotes/snjs'
|
||||
|
||||
type Props = {
|
||||
item: {
|
||||
@@ -24,7 +25,7 @@ const ListItemFlagIcons: FunctionComponent<Props> = ({
|
||||
className,
|
||||
}) => {
|
||||
return (
|
||||
<div className={`flex items-start ${hasBorder && 'border-b border-solid border-border'} ${className} pl-0`}>
|
||||
<div className={classNames('flex items-start pl-0', hasBorder && 'border-b border-solid border-border', className)}>
|
||||
{item.locked && (
|
||||
<span className="flex items-center" title="Editing Disabled">
|
||||
<Icon ariaLabel="Editing Disabled" type="pencil-off" className="text-info" size="medium" />
|
||||
@@ -40,11 +41,6 @@ const ListItemFlagIcons: FunctionComponent<Props> = ({
|
||||
<Icon ariaLabel="Archived" type="archive" className="text-accessory-tint-3" size="medium" />
|
||||
</span>
|
||||
)}
|
||||
{item.pinned && (
|
||||
<span className="ml-1.5 flex items-center" title="Pinned">
|
||||
<Icon ariaLabel="Pinned" type="pin-filled" className="text-info" size="medium" />
|
||||
</span>
|
||||
)}
|
||||
{hasFiles && (
|
||||
<span className="ml-1.5 flex items-center" title="Files">
|
||||
<Icon ariaLabel="Files" type="attachment-file" className="text-info" size="medium" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { sanitizeHtmlString, SNNote } from '@standardnotes/snjs'
|
||||
import { classNames, sanitizeHtmlString, SNNote } from '@standardnotes/snjs'
|
||||
import { FunctionComponent } from 'react'
|
||||
|
||||
type Props = {
|
||||
@@ -13,7 +13,12 @@ const ListItemNotePreviewText: FunctionComponent<Props> = ({ item, hidePreview,
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={`overflow-hidden overflow-ellipsis text-base lg:text-sm ${item.archived ? 'opacity-60' : ''}`}>
|
||||
<div
|
||||
className={classNames(
|
||||
'overflow-hidden overflow-ellipsis text-base lg:text-sm',
|
||||
item.archived ? 'opacity-60' : '',
|
||||
)}
|
||||
>
|
||||
{item.preview_html && (
|
||||
<div
|
||||
className="my-1"
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
import { FunctionComponent } from 'react'
|
||||
import { ListableContentItem } from './Types/ListableContentItem'
|
||||
import Icon from '../Icon/Icon'
|
||||
import { classNames } from '@standardnotes/snjs'
|
||||
|
||||
export const ListItemTitle: FunctionComponent<{ item: ListableContentItem }> = ({ item }) => {
|
||||
return (
|
||||
<div
|
||||
className={`break-word mr-2 flex items-start justify-between overflow-hidden text-lg font-semibold leading-[1.3] lg:text-base lg:leading-[1.3] ${
|
||||
item.archived ? 'opacity-60' : ''
|
||||
}`}
|
||||
className={classNames(
|
||||
'break-word mr-2 overflow-hidden text-lg font-semibold leading-[1.3] lg:text-base lg:leading-[1.3]',
|
||||
item.archived ? 'opacity-60' : '',
|
||||
)}
|
||||
>
|
||||
{item.pinned && (
|
||||
<span className="mr-1.5 inline-flex rounded-full bg-info p-0.5 text-info-contrast">
|
||||
<Icon type="pin-filled" size="custom" className="h-3 w-3" />
|
||||
</span>
|
||||
)}
|
||||
{item.title}
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -83,7 +83,7 @@ const NoteListItem: FunctionComponent<DisplayableListItemProps<SNNote>> = ({
|
||||
onClick={onClick}
|
||||
>
|
||||
{!hideIcon ? (
|
||||
<div className="mr-0 flex flex-col items-center justify-between p-4 pr-4">
|
||||
<div className="mr-0 flex flex-col items-center justify-between gap-2 p-4 pr-4">
|
||||
<Icon type={icon} className={`text-accessory-tint-${tint}`} />
|
||||
</div>
|
||||
) : (
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { useEffect } from 'react'
|
||||
import Icon from '@/Components/Icon/Icon'
|
||||
import { DropdownItem } from './DropdownItem'
|
||||
import { classNames } from '@standardnotes/snjs'
|
||||
@@ -17,7 +16,7 @@ type DropdownProps = {
|
||||
label: string
|
||||
items: DropdownItem[]
|
||||
value: string
|
||||
onChange: (value: string, item: DropdownItem) => void
|
||||
onChange: (value: string) => void
|
||||
disabled?: boolean
|
||||
classNameOverride?: {
|
||||
wrapper?: string
|
||||
@@ -39,36 +38,14 @@ const Dropdown = ({
|
||||
popoverPlacement,
|
||||
}: DropdownProps) => {
|
||||
const select = useSelectStore({
|
||||
defaultValue: value,
|
||||
renderCallback(props) {
|
||||
const { popoverElement, defaultRenderCallback } = props
|
||||
defaultRenderCallback()
|
||||
if (popoverElement) {
|
||||
popoverElement.style.zIndex = 'var(--z-index-dropdown-menu)'
|
||||
}
|
||||
},
|
||||
placement: popoverPlacement,
|
||||
value,
|
||||
setValue: onChange,
|
||||
placement: popoverPlacement || 'top',
|
||||
})
|
||||
|
||||
const selectedValue = select.useState('value')
|
||||
const isExpanded = select.useState('open')
|
||||
|
||||
const currentItem = items.find((item) => item.value === selectedValue)
|
||||
|
||||
useEffect(() => {
|
||||
select.setValue(value)
|
||||
}, [select, value])
|
||||
|
||||
useEffect(() => {
|
||||
return select.subscribe(
|
||||
(state) => {
|
||||
if (state.value !== value) {
|
||||
onChange(state.value, items.find((item) => item.value === state.value) as DropdownItem)
|
||||
}
|
||||
},
|
||||
['value'],
|
||||
)
|
||||
}, [items, onChange, select, value])
|
||||
const currentItem = items.find((item) => item.value === value)
|
||||
|
||||
return (
|
||||
<div
|
||||
@@ -106,9 +83,10 @@ const Dropdown = ({
|
||||
<SelectPopover
|
||||
store={select}
|
||||
className={classNames(
|
||||
'max-h-[var(--popover-available-height)] w-[var(--popover-anchor-width)] overflow-y-auto rounded border border-border bg-default py-1',
|
||||
'z-dropdown-menu max-h-[var(--popover-available-height)] w-[var(--popover-anchor-width)] overflow-y-auto rounded border border-border bg-default py-1',
|
||||
classNameOverride.popover,
|
||||
)}
|
||||
portal={false}
|
||||
>
|
||||
{items.map((item) => (
|
||||
<SelectItem
|
||||
|
||||
+2
-13
@@ -8,7 +8,7 @@ import RadioButtonGroup from '../RadioButtonGroup/RadioButtonGroup'
|
||||
import { EditorMargins, EditorMaxWidths } from './EditorWidths'
|
||||
import { useApplication } from '../ApplicationProvider'
|
||||
import ModalOverlay from '../Modal/ModalOverlay'
|
||||
import { CHANGE_EDITOR_WIDTH_COMMAND, ESCAPE_COMMAND } from '@standardnotes/ui-services'
|
||||
import { CHANGE_EDITOR_WIDTH_COMMAND } from '@standardnotes/ui-services'
|
||||
import { PrefDefaults } from '@/Constants/PrefDefaults'
|
||||
import { observer } from 'mobx-react-lite'
|
||||
import Switch from '../Switch/Switch'
|
||||
@@ -37,7 +37,6 @@ const EditorWidthSelectionModal = ({
|
||||
close: () => void
|
||||
note: SNNote | undefined
|
||||
}) => {
|
||||
const application = useApplication()
|
||||
const isMobileScreen = useMediaQuery(MutuallyExclusiveMediaQueryBreakpoints.sm)
|
||||
|
||||
const [value, setValue] = useState<EditorLineWidth>(() => initialValue)
|
||||
@@ -88,16 +87,6 @@ const EditorWidthSelectionModal = ({
|
||||
[accept, close],
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
return application.keyboardService.addCommandHandler({
|
||||
command: ESCAPE_COMMAND,
|
||||
onKeyDown() {
|
||||
close()
|
||||
return true
|
||||
},
|
||||
})
|
||||
}, [application.keyboardService, close])
|
||||
|
||||
const DynamicMargin = (
|
||||
<div className="text-center text-sm text-passive-2">
|
||||
<div className={value !== EditorLineWidth.Dynamic ? 'hidden' : ''}>
|
||||
@@ -207,7 +196,7 @@ const EditorWidthSelectionModalWrapper = () => {
|
||||
}, [application, toggle])
|
||||
|
||||
return (
|
||||
<ModalOverlay isOpen={isOpen}>
|
||||
<ModalOverlay isOpen={isOpen} close={toggle}>
|
||||
<EditorWidthSelectionModal initialValue={lineWidth} handleChange={setLineWidth} close={toggle} note={note} />
|
||||
</ModalOverlay>
|
||||
)
|
||||
|
||||
@@ -285,7 +285,11 @@ FilePreviewModal.displayName = 'FilePreviewModal'
|
||||
|
||||
const FilePreviewModalWrapper: FunctionComponent<Props> = ({ application, viewControllerManager }) => {
|
||||
return (
|
||||
<ModalOverlay aria-label="File preview modal" isOpen={viewControllerManager.filePreviewModalController.isOpen}>
|
||||
<ModalOverlay
|
||||
aria-label="File preview modal"
|
||||
isOpen={viewControllerManager.filePreviewModalController.isOpen}
|
||||
close={viewControllerManager.filePreviewModalController.dismiss}
|
||||
>
|
||||
<FilePreviewModal application={application} viewControllerManager={viewControllerManager} />
|
||||
</ModalOverlay>
|
||||
)
|
||||
|
||||
@@ -33,7 +33,7 @@ const ImportModal = ({ importModalController }: { importModalController: ImportM
|
||||
)
|
||||
|
||||
return (
|
||||
<ModalOverlay isOpen={isVisible}>
|
||||
<ModalOverlay isOpen={isVisible} close={close}>
|
||||
<Modal title="Import" close={close} actions={modalActions}>
|
||||
<div className="px-4 py-4">
|
||||
{!files.length && <ImportModalInitialPage setFiles={setFiles} />}
|
||||
|
||||
+5
-3
@@ -30,9 +30,11 @@ const ItemSelectionDropdown = ({ contentTypes, placeholder, onSelection, combobo
|
||||
const combobox = useComboboxStore(comboboxProps)
|
||||
const value = combobox.useState('value')
|
||||
const open = combobox.useState('open')
|
||||
if (value.length < 1 && open) {
|
||||
combobox.setOpen(false)
|
||||
}
|
||||
useEffect(() => {
|
||||
if (value.length < 1 && open) {
|
||||
combobox.setOpen(false)
|
||||
}
|
||||
}, [combobox, open, value.length])
|
||||
|
||||
const searchQuery = useDeferredValue(value)
|
||||
const [items, setItems] = useState<DecryptedItem[]>([])
|
||||
|
||||
@@ -144,7 +144,7 @@ const LinkedItemBubblesContainer = ({ item, linkingController, hideToggle = fals
|
||||
<div
|
||||
className={classNames(
|
||||
'flex w-full justify-between',
|
||||
itemsToDisplay.length > 0 && 'pt-2',
|
||||
itemsToDisplay.length > 0 && !shouldHideToggle && 'pt-2',
|
||||
isCollapsed ? 'gap-4' : 'gap-1',
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
import { KeyboardKey } from '@standardnotes/ui-services'
|
||||
import { useListKeyboardNavigation } from '@/Hooks/useListKeyboardNavigation'
|
||||
import { mergeRefs } from '@/Hooks/mergeRefs'
|
||||
import { MutuallyExclusiveMediaQueryBreakpoints, useMediaQuery } from '@/Hooks/useMediaQuery'
|
||||
|
||||
type MenuProps = {
|
||||
className?: string
|
||||
@@ -51,7 +52,13 @@ const Menu = forwardRef(
|
||||
[closeMenu, onKeyDown],
|
||||
)
|
||||
|
||||
const { setInitialFocus } = useListKeyboardNavigation(menuElementRef, initialFocus, shouldAutoFocus)
|
||||
const isMobileScreen = useMediaQuery(MutuallyExclusiveMediaQueryBreakpoints.sm)
|
||||
|
||||
const { setInitialFocus } = useListKeyboardNavigation(
|
||||
menuElementRef,
|
||||
initialFocus,
|
||||
isMobileScreen ? false : shouldAutoFocus,
|
||||
)
|
||||
|
||||
useImperativeHandle(forwardedRef, () => ({
|
||||
focus: () => {
|
||||
|
||||
@@ -11,11 +11,23 @@ type Props = {
|
||||
children: ReactNode
|
||||
onChange: (checked: boolean) => void
|
||||
shortcut?: PlatformedKeyboardShortcut
|
||||
forceDesktopStyle?: boolean
|
||||
} & Omit<ComponentPropsWithoutRef<'button'>, 'onChange'>
|
||||
|
||||
const MenuSwitchButtonItem = forwardRef(
|
||||
(
|
||||
{ checked, onChange, disabled, onBlur, tabIndex, children, shortcut, className, ...props }: Props,
|
||||
{
|
||||
checked,
|
||||
onChange,
|
||||
disabled,
|
||||
onBlur,
|
||||
tabIndex,
|
||||
children,
|
||||
shortcut,
|
||||
className,
|
||||
forceDesktopStyle,
|
||||
...props
|
||||
}: Props,
|
||||
ref: ForwardedRef<HTMLButtonElement>,
|
||||
) => {
|
||||
return (
|
||||
@@ -24,7 +36,7 @@ const MenuSwitchButtonItem = forwardRef(
|
||||
disabled={disabled}
|
||||
ref={ref}
|
||||
className={classNames(
|
||||
'flex w-full cursor-pointer items-center border-0 bg-transparent px-3 py-2 md:py-1.5',
|
||||
'flex w-full cursor-pointer items-center border-0 bg-transparent px-3 py-1.5',
|
||||
'text-left text-text hover:bg-contrast hover:text-foreground focus:bg-info-backdrop focus:shadow-none',
|
||||
'text-mobile-menu-item md:text-tablet-menu-item lg:text-menu-item',
|
||||
className,
|
||||
@@ -47,6 +59,7 @@ const MenuSwitchButtonItem = forwardRef(
|
||||
checked={checked}
|
||||
onChange={onChange}
|
||||
tabIndex={FOCUSABLE_BUT_NOT_TABBABLE}
|
||||
forceDesktopStyle={forceDesktopStyle}
|
||||
/>
|
||||
</div>
|
||||
</button>
|
||||
|
||||
@@ -14,7 +14,7 @@ const MobileModalAction = forwardRef(
|
||||
<button
|
||||
ref={ref}
|
||||
className={classNames(
|
||||
'flex whitespace-nowrap py-1 px-1 text-base font-semibold focus:shadow-none focus:outline-none active:shadow-none active:outline-none disabled:text-neutral md:hidden',
|
||||
'flex select-none whitespace-nowrap py-1 px-1 text-base font-semibold focus:shadow-none focus:outline-none active:shadow-none active:outline-none active:brightness-50 disabled:text-neutral md:hidden',
|
||||
slot === 'left' ? 'justify-start text-left' : 'justify-end text-right',
|
||||
type === 'cancel' || type === 'destructive' ? 'text-danger' : 'text-info',
|
||||
className,
|
||||
|
||||
@@ -114,7 +114,7 @@ const Modal = ({
|
||||
) : (
|
||||
<div
|
||||
className={classNames(
|
||||
'flex w-full flex-shrink-0 items-center justify-between rounded-t border-b border-solid border-border bg-default px-2 text-text md:px-4.5 md:py-3',
|
||||
'flex w-full flex-shrink-0 select-none items-center justify-between rounded-t border-b border-solid border-border bg-default px-2 text-text md:px-4.5 md:py-3',
|
||||
hasTopInset ? 'pt-safe-top pb-1.5' : 'py-1.5',
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -6,14 +6,20 @@ import { useModalAnimation } from '../Modal/useModalAnimation'
|
||||
type Props = {
|
||||
isOpen: boolean
|
||||
children: ReactNode
|
||||
portal?: boolean
|
||||
animationVariant?: 'horizontal' | 'vertical'
|
||||
close: () => void
|
||||
}
|
||||
|
||||
const ModalOverlay = forwardRef(
|
||||
({ isOpen, children, portal = true, ...props }: Props, ref: ForwardedRef<HTMLDivElement>) => {
|
||||
const [isMounted, setElement] = useModalAnimation(isOpen)
|
||||
({ isOpen, children, animationVariant, close, ...props }: Props, ref: ForwardedRef<HTMLDivElement>) => {
|
||||
const [isMounted, setElement] = useModalAnimation(isOpen, animationVariant)
|
||||
const dialog = useDialogStore({
|
||||
open: isMounted,
|
||||
setOpen: (open) => {
|
||||
if (!open) {
|
||||
close()
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
if (!isMounted) {
|
||||
@@ -23,16 +29,14 @@ const ModalOverlay = forwardRef(
|
||||
return (
|
||||
<Dialog
|
||||
tabIndex={0}
|
||||
className="h-full w-full"
|
||||
backdropProps={{
|
||||
className: '!z-modal',
|
||||
style: {
|
||||
position: !portal ? 'absolute' : 'fixed',
|
||||
},
|
||||
}}
|
||||
className="fixed top-0 left-0 z-modal h-full w-full"
|
||||
ref={mergeRefs([setElement, ref])}
|
||||
store={dialog}
|
||||
portal={portal}
|
||||
getPersistentElements={() =>
|
||||
Array.from(document.querySelectorAll('[role="dialog"], [role="alertdialog"]')).map((el) => {
|
||||
return el.parentElement ? el.parentElement : el
|
||||
})
|
||||
}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
|
||||
@@ -1,49 +1,88 @@
|
||||
import { useLifecycleAnimation } from '@/Hooks/useLifecycleAnimation'
|
||||
import { useMediaQuery, MutuallyExclusiveMediaQueryBreakpoints } from '@/Hooks/useMediaQuery'
|
||||
|
||||
export const useModalAnimation = (isOpen: boolean) => {
|
||||
export const IosModalAnimationEasing = 'cubic-bezier(.36,.66,.04,1)'
|
||||
|
||||
const Animations = {
|
||||
vertical: {
|
||||
enter: {
|
||||
keyframes: [
|
||||
{
|
||||
transform: 'translateY(100%)',
|
||||
},
|
||||
{
|
||||
transform: 'translateY(0)',
|
||||
},
|
||||
],
|
||||
transformOrigin: 'bottom',
|
||||
},
|
||||
exit: {
|
||||
keyframes: [
|
||||
{
|
||||
transform: 'translateY(0)',
|
||||
},
|
||||
{
|
||||
transform: 'translateY(100%)',
|
||||
},
|
||||
],
|
||||
transformOrigin: 'bottom',
|
||||
},
|
||||
},
|
||||
horizontal: {
|
||||
enter: {
|
||||
keyframes: [
|
||||
{
|
||||
transform: 'translateX(100%)',
|
||||
},
|
||||
{
|
||||
transform: 'translateX(0)',
|
||||
},
|
||||
],
|
||||
transformOrigin: 'right',
|
||||
},
|
||||
exit: {
|
||||
keyframes: [
|
||||
{
|
||||
transform: 'translateX(0)',
|
||||
},
|
||||
{
|
||||
transform: 'translateX(100%)',
|
||||
},
|
||||
],
|
||||
transformOrigin: 'right',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export const useModalAnimation = (isOpen: boolean, variant: 'horizontal' | 'vertical' = 'vertical') => {
|
||||
const isMobileScreen = useMediaQuery(MutuallyExclusiveMediaQueryBreakpoints.sm)
|
||||
|
||||
return useLifecycleAnimation(
|
||||
{
|
||||
open: isOpen,
|
||||
enter: {
|
||||
keyframes: [
|
||||
{
|
||||
transform: 'translateY(100%)',
|
||||
},
|
||||
{
|
||||
transform: 'translateY(0)',
|
||||
},
|
||||
],
|
||||
keyframes: Animations[variant].enter.keyframes,
|
||||
options: {
|
||||
easing: 'cubic-bezier(.36,.66,.04,1)',
|
||||
easing: IosModalAnimationEasing,
|
||||
duration: 250,
|
||||
fill: 'forwards',
|
||||
},
|
||||
initialStyle: {
|
||||
transformOrigin: 'bottom',
|
||||
transformOrigin: Animations[variant].enter.transformOrigin,
|
||||
},
|
||||
},
|
||||
enterCallback: (element) => {
|
||||
element.scrollTop = 0
|
||||
},
|
||||
exit: {
|
||||
keyframes: [
|
||||
{
|
||||
transform: 'translateY(0)',
|
||||
},
|
||||
{
|
||||
transform: 'translateY(100%)',
|
||||
},
|
||||
],
|
||||
keyframes: Animations[variant].exit.keyframes,
|
||||
options: {
|
||||
easing: 'cubic-bezier(.36,.66,.04,1)',
|
||||
easing: IosModalAnimationEasing,
|
||||
duration: 250,
|
||||
fill: 'forwards',
|
||||
},
|
||||
initialStyle: {
|
||||
transformOrigin: 'bottom',
|
||||
transformOrigin: Animations[variant].exit.transformOrigin,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -860,6 +860,7 @@ class NoteView extends AbstractComponent<NoteViewProps, State> {
|
||||
/>
|
||||
<ChangeEditorButton
|
||||
viewControllerManager={this.viewControllerManager}
|
||||
noteViewController={this.controller}
|
||||
onClickPreprocessing={this.ensureNoteIsInsertedBeforeUIAction}
|
||||
/>
|
||||
<PinNoteButton
|
||||
|
||||
@@ -36,6 +36,7 @@ import MenuItem from '../Menu/MenuItem'
|
||||
import ModalOverlay from '../Modal/ModalOverlay'
|
||||
import SuperExportModal from './SuperExportModal'
|
||||
import { useApplication } from '../ApplicationProvider'
|
||||
import { MutuallyExclusiveMediaQueryBreakpoints } from '@/Hooks/useMediaQuery'
|
||||
|
||||
const iconSize = MenuItemIconSize
|
||||
const iconClassDanger = `text-danger mr-2 ${iconSize}`
|
||||
@@ -134,7 +135,10 @@ const NotesOptions = ({
|
||||
}, [application, notes])
|
||||
|
||||
const closeMenuAndToggleNotesList = useCallback(() => {
|
||||
toggleAppPane(AppPaneId.Items)
|
||||
const isMobileScreen = matchMedia(MutuallyExclusiveMediaQueryBreakpoints.sm).matches
|
||||
if (isMobileScreen) {
|
||||
toggleAppPane(AppPaneId.Items)
|
||||
}
|
||||
closeMenu()
|
||||
}, [closeMenu, toggleAppPane])
|
||||
|
||||
@@ -409,7 +413,7 @@ const NotesOptions = ({
|
||||
</>
|
||||
) : null}
|
||||
|
||||
<ModalOverlay isOpen={showExportSuperModal}>
|
||||
<ModalOverlay isOpen={showExportSuperModal} close={closeSuperExportModal}>
|
||||
<SuperExportModal exportNotes={downloadSelectedItems} close={closeSuperExportModal} />
|
||||
</ModalOverlay>
|
||||
</>
|
||||
|
||||
@@ -49,7 +49,7 @@ const NotesOptionsPanel = ({
|
||||
togglePopover={toggleMenu}
|
||||
anchorElement={buttonRef.current}
|
||||
open={isOpen}
|
||||
className="select-none md:pt-2"
|
||||
className="select-none pt-2"
|
||||
>
|
||||
<Menu a11yLabel="Note options menu" isOpen={isOpen}>
|
||||
<NotesOptions
|
||||
|
||||
@@ -64,7 +64,7 @@ export async function animatePaneExitTransitionOffscreenToTheRight(elementId: st
|
||||
* a Daily Notebook tag from navigation whereby two pane animations are simulatensouly triggered (the items panel, then
|
||||
* the editor panel), causing Safari to get tripped up.
|
||||
*/
|
||||
function performSafariAnimationFix(element: HTMLElement): void {
|
||||
export function performSafariAnimationFix(element: HTMLElement): void {
|
||||
const isSafari = /Safari/.test(navigator.userAgent) || /AppleWebKit/.test(navigator.userAgent)
|
||||
if (!isSafari) {
|
||||
return
|
||||
|
||||
@@ -36,8 +36,12 @@ const supportsPassive = (() => {
|
||||
export const usePaneSwipeGesture = (
|
||||
direction: 'left' | 'right',
|
||||
onSwipeEnd: (element: HTMLElement) => void,
|
||||
gesture: 'pan' | 'swipe' = 'pan',
|
||||
options?: {
|
||||
gesture?: 'swipe' | 'pan'
|
||||
requiresStartFromEdge?: boolean
|
||||
},
|
||||
) => {
|
||||
const { gesture = 'pan', requiresStartFromEdge = true } = options || {}
|
||||
const application = useApplication()
|
||||
|
||||
const underlayElementRef = useRef<HTMLElement | null>(null)
|
||||
@@ -100,10 +104,11 @@ export const usePaneSwipeGesture = (
|
||||
const touch = event.touches[0]
|
||||
startX = touch.clientX
|
||||
|
||||
if (
|
||||
const isStartOutOfThreshold =
|
||||
(direction === 'right' && startX > TouchStartThreshold) ||
|
||||
(direction === 'left' && startX < TouchStartThreshold)
|
||||
) {
|
||||
|
||||
if (isStartOutOfThreshold && requiresStartFromEdge) {
|
||||
canceled = true
|
||||
return
|
||||
}
|
||||
@@ -197,6 +202,10 @@ export const usePaneSwipeGesture = (
|
||||
closestScrollContainer.style.overflowY = 'hidden'
|
||||
}
|
||||
|
||||
if (document.activeElement) {
|
||||
;(document.activeElement as HTMLElement).blur()
|
||||
}
|
||||
|
||||
if (adjustedGesture === 'pan') {
|
||||
const x =
|
||||
direction === 'right' ? Math.max(deltaX - TouchMoveThreshold, 0) : Math.min(deltaX + TouchMoveThreshold, 0)
|
||||
@@ -265,7 +274,7 @@ export const usePaneSwipeGesture = (
|
||||
element.removeEventListener('touchend', touchEndListener)
|
||||
disposeUnderlay()
|
||||
}
|
||||
}, [direction, element, isMobileScreen, onSwipeEndRef, isEnabled, adjustedGesture])
|
||||
}, [direction, element, isMobileScreen, onSwipeEndRef, isEnabled, adjustedGesture, requiresStartFromEdge])
|
||||
|
||||
return [setElement]
|
||||
}
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ const PermissionsModalWrapper: FunctionComponent<Props> = ({ application }) => {
|
||||
}, [application, onAppStart])
|
||||
|
||||
return (
|
||||
<ModalOverlay isOpen={!!dialog}>
|
||||
<ModalOverlay isOpen={!!dialog} close={dismissPermissionsDialog}>
|
||||
{dialog && (
|
||||
<PermissionsModal
|
||||
callback={dialog.callback}
|
||||
|
||||
@@ -58,12 +58,12 @@ const Credentials: FunctionComponent<Props> = ({ application }: Props) => {
|
||||
Current password was set on <span className="font-bold">{passwordCreatedOn}</span>
|
||||
</Text>
|
||||
<Button className="mt-3 min-w-20" label="Change password" onClick={presentPasswordWizard} />
|
||||
<ModalOverlay isOpen={isChangeEmailDialogOpen}>
|
||||
<ModalOverlay isOpen={isChangeEmailDialogOpen} close={closeChangeEmailDialog}>
|
||||
<ChangeEmail onCloseDialog={closeChangeEmailDialog} application={application} />
|
||||
</ModalOverlay>
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
<ModalOverlay isOpen={shouldShowPasswordWizard}>
|
||||
<ModalOverlay isOpen={shouldShowPasswordWizard} close={dismissPasswordWizard}>
|
||||
<PasswordWizard application={application} dismissModal={dismissPasswordWizard} />
|
||||
</ModalOverlay>
|
||||
</>
|
||||
|
||||
@@ -110,7 +110,7 @@ const Email: FunctionComponent<Props> = ({ application }: Props) => {
|
||||
<PreferencesSegment>
|
||||
<Title>Email</Title>
|
||||
<div>
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-start justify-between gap-2 md:items-center">
|
||||
<div className="flex flex-col">
|
||||
<Subtitle>Mute sign-in notification emails</Subtitle>
|
||||
{isMuteSignInEmailsFeatureAvailable ? (
|
||||
@@ -132,7 +132,7 @@ const Email: FunctionComponent<Props> = ({ application }: Props) => {
|
||||
)}
|
||||
</div>
|
||||
{isLoading ? (
|
||||
<Spinner className="ml-2 flex-shrink-0" />
|
||||
<Spinner className="h-5 w-5 flex-shrink-0" />
|
||||
) : (
|
||||
isMuteSignInEmailsFeatureAvailable && (
|
||||
<Switch
|
||||
@@ -143,13 +143,13 @@ const Email: FunctionComponent<Props> = ({ application }: Props) => {
|
||||
)}
|
||||
</div>
|
||||
<HorizontalSeparator classes="my-4" />
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-start justify-between gap-2 md:items-center">
|
||||
<div className="flex flex-col">
|
||||
<Subtitle>Mute marketing notification emails</Subtitle>
|
||||
<Text>Disables email notifications with special deals and promotions.</Text>
|
||||
</div>
|
||||
{isLoading ? (
|
||||
<Spinner className="ml-2 flex-shrink-0" />
|
||||
<Spinner className="h-5 w-5 flex-shrink-0" />
|
||||
) : (
|
||||
<Switch
|
||||
onChange={toggleMuteMarketingEmails}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user