diff --git a/app/assets/icons/ic-notes-remove.svg b/app/assets/icons/ic-notes-remove.svg
new file mode 100644
index 000000000..729ada141
--- /dev/null
+++ b/app/assets/icons/ic-notes-remove.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/app/assets/icons/ic-text.svg b/app/assets/icons/ic-text.svg
new file mode 100644
index 000000000..fcb0be29b
--- /dev/null
+++ b/app/assets/icons/ic-text.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/app/assets/javascripts/components/Icon.tsx b/app/assets/javascripts/components/Icon.tsx
index 6d5b6d3bc..ef347b6b4 100644
--- a/app/assets/javascripts/components/Icon.tsx
+++ b/app/assets/javascripts/components/Icon.tsx
@@ -113,6 +113,7 @@ const ICONS = {
add: AddIcon,
help: HelpIcon,
keyboard: KeyboardIcon,
+ spellcheck: NotesIcon,
'list-bulleted': ListBulleted,
'link-off': LinkOffIcon,
listed: ListedIcon,
diff --git a/app/assets/javascripts/components/NotesOptions.tsx b/app/assets/javascripts/components/NotesOptions.tsx
index 48273e1b3..0525d75c8 100644
--- a/app/assets/javascripts/components/NotesOptions.tsx
+++ b/app/assets/javascripts/components/NotesOptions.tsx
@@ -35,6 +35,8 @@ const DeletePermanentlyButton = ({
);
+const iconClass = 'color-neutral mr-2';
+
const getWordCount = (text: string) => {
if (text.trim().length === 0) {
return 0;
@@ -133,6 +135,39 @@ const NoteAttributes: FunctionComponent<{ application: SNApplication, note: SNNo
);
};
+const SpellcheckOptions: FunctionComponent<{
+ appState: AppState, note: SNNote
+}> = ({ appState, note }) => {
+
+ const editor = appState.application.componentManager.editorForNote(note);
+ const spellcheckControllable = Boolean(
+ !editor ||
+ appState.application.getFeature(editor.identifier)?.spellcheckControl
+ );
+ const noteSpellcheck = !spellcheckControllable ? true : note ? appState.notes.getSpellcheckStateForNote(note) : undefined;
+
+ return (
+
+
{
+ appState.notes.toggleGlobalSpellcheckForNote(note);
+ }}
+ >
+
+
+ Spellcheck
+
+
+ {!spellcheckControllable && (
+
Spellcheck cannot be controlled for this editor.
+ )}
+
+ );
+};
+
export const NotesOptions = observer(
({ application, appState, closeOnBlur, onSubmenuChange }: Props) => {
const [tagsMenuOpen, setTagsMenuOpen] = useState(false);
@@ -171,8 +206,6 @@ export const NotesOptions = observer(
const tagsButtonRef = useRef(null);
- const iconClass = 'color-neutral mr-2';
-
useEffect(() => {
if (onSubmenuChange) {
onSubmenuChange(tagsMenuOpen);
@@ -350,10 +383,9 @@ export const NotesOptions = observer(
>
{tag.title}
@@ -484,9 +516,16 @@ export const NotesOptions = observer(
>
)}
+
+
{notes.length === 1 ? (
<>
+
+
+
+
+
>
) : null}
diff --git a/app/assets/javascripts/components/Switch.tsx b/app/assets/javascripts/components/Switch.tsx
index 61a35db61..b199dc762 100644
--- a/app/assets/javascripts/components/Switch.tsx
+++ b/app/assets/javascripts/components/Switch.tsx
@@ -29,7 +29,7 @@ export const Switch: FunctionalComponent = (
return (
{props.children}
@@ -51,9 +51,8 @@ export const Switch: FunctionalComponent = (
/>
diff --git a/app/assets/javascripts/preferences/panes/general-segments/Defaults.tsx b/app/assets/javascripts/preferences/panes/general-segments/Defaults.tsx
index 8c83be5d9..2997622c9 100644
--- a/app/assets/javascripts/preferences/panes/general-segments/Defaults.tsx
+++ b/app/assets/javascripts/preferences/panes/general-segments/Defaults.tsx
@@ -1,6 +1,6 @@
import { Dropdown, DropdownItem } from '@/components/Dropdown';
import { IconType } from '@/components/Icon';
-import { FeatureIdentifier } from '@standardnotes/snjs';
+import { FeatureIdentifier, PrefKey } from '@standardnotes/snjs';
import {
PreferencesGroup,
PreferencesSegment,
@@ -16,6 +16,8 @@ import {
} from '@standardnotes/snjs';
import { FunctionComponent } from 'preact';
import { useEffect, useState } from 'preact/hooks';
+import { HorizontalSeparator } from '@/components/shared/HorizontalSeparator';
+import { Switch } from '@/components/Switch';
type Props = {
application: WebApplication;
@@ -87,6 +89,15 @@ export const Defaults: FunctionComponent = ({ application }) => {
getDefaultEditor(application)?.package_info?.identifier || 'plain-editor'
);
+ const [spellcheck, setSpellcheck] = useState(() =>
+ application.getPreference(PrefKey.EditorSpellcheck, true)
+ );
+
+ const toggleSpellcheck = () => {
+ setSpellcheck(!spellcheck);
+ application.getAppState().toggleGlobalSpellcheck();
+ };
+
useEffect(() => {
const editors = application.componentManager
.componentsForArea(ComponentArea.Editor)
@@ -149,6 +160,17 @@ export const Defaults: FunctionComponent = ({ application }) => {
/>
+
+
+
+ Spellcheck
+
+ The default spellcheck value for new notes. Spellcheck can be configured per note from the note context menu.
+ Spellcheck may degrade overall typing performance with long notes.
+
+
+
+
);
diff --git a/app/assets/javascripts/preferences/panes/general-segments/Tools.tsx b/app/assets/javascripts/preferences/panes/general-segments/Tools.tsx
index b0e21a623..79435d632 100644
--- a/app/assets/javascripts/preferences/panes/general-segments/Tools.tsx
+++ b/app/assets/javascripts/preferences/panes/general-segments/Tools.tsx
@@ -25,9 +25,6 @@ export const Tools: FunctionalComponent = observer(
const [marginResizers, setMarginResizers] = useState(() =>
application.getPreference(PrefKey.EditorResizersEnabled, true)
);
- const [spellcheck, setSpellcheck] = useState(() =>
- application.getPreference(PrefKey.EditorSpellcheck, true)
- );
const toggleMonospaceFont = () => {
setMonospaceFont(!monospaceFont);
@@ -39,11 +36,6 @@ export const Tools: FunctionalComponent = observer(
application.setPreference(PrefKey.EditorResizersEnabled, !marginResizers);
};
- const toggleSpellcheck = () => {
- setSpellcheck(!spellcheck);
- application.setPreference(PrefKey.EditorSpellcheck, !spellcheck);
- };
-
return (
@@ -67,17 +59,6 @@ export const Tools: FunctionalComponent = observer(
checked={marginResizers}
/>
-
-
-
- Spellcheck
-
- May degrade performance, especially with long notes. This option only controls
- spellcheck in the Plain Editor.
-
-
-
-
diff --git a/app/assets/javascripts/ui_models/app_state/app_state.ts b/app/assets/javascripts/ui_models/app_state/app_state.ts
index 712e515ab..363a5ee27 100644
--- a/app/assets/javascripts/ui_models/app_state/app_state.ts
+++ b/app/assets/javascripts/ui_models/app_state/app_state.ts
@@ -281,6 +281,18 @@ export class AppState {
}
}
+ isGlobalSpellcheckEnabled(): boolean {
+ return this.application.getPreference(PrefKey.EditorSpellcheck, true);
+ }
+
+ async toggleGlobalSpellcheck() {
+ const currentValue = this.isGlobalSpellcheckEnabled();
+ return this.application.setPreference(
+ PrefKey.EditorSpellcheck,
+ !currentValue
+ );
+ }
+
private tagChangedNotifier(): IReactionDisposer {
return reaction(
() => this.tags.selectedUuid,
diff --git a/app/assets/javascripts/ui_models/app_state/notes_state.ts b/app/assets/javascripts/ui_models/app_state/notes_state.ts
index 496cedaf0..6f141ad30 100644
--- a/app/assets/javascripts/ui_models/app_state/notes_state.ts
+++ b/app/assets/javascripts/ui_models/app_state/notes_state.ts
@@ -378,6 +378,23 @@ export class NotesState {
this.selectedNotes = {};
}
+ getSpellcheckStateForNote(note: SNNote) {
+ return note.spellcheck != undefined
+ ? note.spellcheck
+ : this.appState.isGlobalSpellcheckEnabled();
+ }
+
+ async toggleGlobalSpellcheckForNote(note: SNNote) {
+ await this.application.changeItem(
+ note.uuid,
+ (mutator) => {
+ mutator.toggleSpellcheck();
+ },
+ false
+ );
+ this.application.sync();
+ }
+
async addTagToSelectedNotes(tag: SNTag): Promise {
const selectedNotes = Object.values(this.selectedNotes);
const parentChainTags = this.application.getTagParentChain(tag);
diff --git a/app/assets/javascripts/views/note_view/note_view.ts b/app/assets/javascripts/views/note_view/note_view.ts
index e1a2a22f6..ad3bdfdf1 100644
--- a/app/assets/javascripts/views/note_view/note_view.ts
+++ b/app/assets/javascripts/views/note_view/note_view.ts
@@ -201,6 +201,8 @@ export class NoteView extends PureViewCtrl {
this.editorValues.text = note.text;
}
+ this.reloadSpellcheck();
+
const isTemplateNoteInsertedToBeInteractableWithEditor =
source === PayloadSource.Constructor && note.dirty;
if (isTemplateNoteInsertedToBeInteractableWithEditor) {
@@ -694,29 +696,35 @@ export class NoteView extends PureViewCtrl {
this.application.sync();
}
- async reloadPreferences() {
- const monospaceFont = this.application.getPreference(
- PrefKey.EditorMonospaceEnabled,
- true
- );
- const spellcheck = this.application.getPreference(
- PrefKey.EditorSpellcheck,
- true
- );
- const marginResizersEnabled = this.application.getPreference(
- PrefKey.EditorResizersEnabled,
- true
- );
+ async reloadSpellcheck() {
+ const spellcheck = this.appState.notes.getSpellcheckStateForNote(this.note);
if (spellcheck !== this.state.spellcheck) {
await this.setState({ textareaUnloading: true });
await this.setState({ textareaUnloading: false });
this.reloadFont();
+
+ await this.setState({
+ spellcheck,
+ });
}
+ }
+
+ async reloadPreferences() {
+ const monospaceFont = this.application.getPreference(
+ PrefKey.EditorMonospaceEnabled,
+ true
+ );
+
+ const marginResizersEnabled = this.application.getPreference(
+ PrefKey.EditorResizersEnabled,
+ true
+ );
+
+ await this.reloadSpellcheck();
await this.setState({
monospaceFont,
- spellcheck,
marginResizersEnabled,
});
diff --git a/package.json b/package.json
index 365a684bc..bc653c976 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,6 @@
"@babel/preset-typescript": "^7.15.0",
"@reach/disclosure": "^0.16.2",
"@reach/visually-hidden": "^0.16.0",
- "@standardnotes/components": "1.2.8",
"@svgr/webpack": "^5.5.0",
"@types/angular": "^1.8.3",
"@types/jest": "^27.0.3",
@@ -86,10 +85,11 @@
"@reach/dialog": "^0.16.2",
"@reach/listbox": "^0.16.2",
"@reach/tooltip": "^0.16.2",
- "@standardnotes/features": "1.20.7",
+ "@standardnotes/components": "1.3.0",
+ "@standardnotes/features": "1.22.0",
"@standardnotes/settings": "^1.9.0",
- "@standardnotes/sncrypto-web": "1.5.3",
- "@standardnotes/snjs": "2.35.5",
+ "@standardnotes/sncrypto-web": "1.6.0",
+ "@standardnotes/snjs": "2.37.1",
"mobx": "^6.3.5",
"mobx-react-lite": "^3.2.2",
"preact": "^10.5.15",
diff --git a/public/components/checksums.json b/public/components/checksums.json
index 893ea41f7..e2f8f891b 100644
--- a/public/components/checksums.json
+++ b/public/components/checksums.json
@@ -45,9 +45,9 @@
"binary": "bac85952fbe8af1eac49701da69b811de531fd15b1cfd6bbc90d61d9c785f5d1"
},
"org.standardnotes.plus-editor": {
- "version": "1.5.0",
- "base64": "f8923ab4a464ee113d47fa164ee7efbc6337e9e538105ae473b00492fb4ec46e",
- "binary": "d4645ee7a38eeb1046239ea337333dcb64dc01c81f05e20307696099364b485b"
+ "version": "1.6.0",
+ "base64": "ae94bf9621a3863167bead0ea2f3d1bb137c5e1dc65bfd73745113a18d0edb9b",
+ "binary": "509ba3f2d5d167b05ae9258ac27c48e9ff16820b3beca5600ceab6af8b206a94"
},
"org.standardnotes.simple-markdown-editor": {
"version": "1.4.0",
diff --git a/public/components/org.standardnotes.plus-editor/dist/dist.js b/public/components/org.standardnotes.plus-editor/dist/dist.js
index 7e9639669..79ecd5756 100644
--- a/public/components/org.standardnotes.plus-editor/dist/dist.js
+++ b/public/components/org.standardnotes.plus-editor/dist/dist.js
@@ -1,2 +1,2 @@
-document.addEventListener("DOMContentLoaded",(function(){let e,t,n,o,i,a=!1,r=!0,s=!1;const l=["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"].join(", ");function c(){if(t){const i=t;e.saveItemWithPresave(i,(()=>{o=$("#summernote").summernote("code"),i.clientData=n,i.content.text=o,i.content.preview_plain=function(e,t=90){return e.length<=t?e:e.substring(0,t)+"..."}(function(e){const t=document.implementation.createHTMLDocument("New").body;return t.innerHTML=e,t.textContent||t.innerText||""}(o)),i.content.preview_html=null}))}}function u(){return e.getComponentDataValueForKey("notes")||{}}$("#summernote").summernote({height:500,minHeight:null,maxHeight:null,focus:!0,tabDisable:!0,showDomainOnlyForAutolink:!1,toolbar:[["para",["style"]],["style",["bold","italic","underline","strikethrough","clear"]],["fontsize",["fontsize","fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["height",["height"]],["insert",["table","link","hr","picture","video"]],["misc",["codeview","help"]]],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Monospace","Roboto","system-ui","Tahoma","Times New Roman","Verdana"],callbacks:{onInit:function(){},onImageUpload:function(){alert("Until we can encrypt image files, uploads are not currently supported. We recommend using the Image button in the toolbar and copying an image URL instead.")}}}),$("#summernote").on("summernote.change",(function(){document.querySelectorAll(l).forEach((e=>e.setAttribute("dir","auto"))),a||c()})),$("textarea.note-codable").on("input",(()=>{c()})),e=new ComponentRelay({initialPermissions:[{name:"stream-context-item"}],targetWindow:window,onReady:()=>{const t=e.platform;t&&document.body.classList.add(t)}}),e.streamContextItem((l=>{!function(l){if(l.uuid!==i&&(o=null,r=!0,i=l.uuid),t=l,l.isMetadataUpdate)return;n=l.clientData;let c=l.content.text;if(c==o)return;const m=$("#summernote");if(m){a=!0;const t=/<[a-z][\s\S]*>/i.test(c);s||(m.summernote("fullscreen.toggle"),s=!0),r&&!t&&(c=((c||"")+"").replace(/\t/g," ").replace(/\r\n|\r|\n/g," "));let n=!1;if(function(e){const t=(new DOMParser).parseFromString(`${e}`,"text/html");return Array.from(t.body.childNodes).some((e=>"SCRIPT"==e.nodeName))}(c)){const t=u()[i];t?n=t.trustUnsafeContent||!1:new Promise((e=>{new Stylekit.SKAlert({title:null,text:"We’ve detected that this note contains a script or code snippet which may be unsafe to execute. Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.",buttons:[{text:"Cancel",style:"neutral",action:function(){e(!1)}},{text:"Continue",style:"danger",action:function(){e(!0)}}]}).present()})).then((t=>{t&&(function(t,n){const o=u();o[i]={trustUnsafeContent:n},e.setComponentDataValueForKey("notes",o)}(0,t),n=t)}))}else n=!0;if(!n)return m.summernote("code",""),void m.summernote("disable");m.summernote("enable"),m.summernote("code",c),r&&(m.summernote("commit"),r=!1),a=!1}}(l)}))}));
+document.addEventListener("DOMContentLoaded",(function(){let e,t,n,o,i,a=!1,r=!0,s=!1;const l=["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"].join(", ");function c(){if(t){const i=t;e.saveItemWithPresave(i,(()=>{o=$("#summernote").summernote("code"),i.clientData=n,i.content.text=o,i.content.preview_plain=function(e,t=90){return e.length<=t?e:e.substring(0,t)+"..."}(function(e){const t=document.implementation.createHTMLDocument("New").body;return t.innerHTML=e,t.textContent||t.innerText||""}(o)),i.content.preview_html=null}))}}function u(){return e.getComponentDataValueForKey("notes")||{}}$("#summernote").summernote({height:500,minHeight:null,maxHeight:null,focus:!0,tabDisable:!0,showDomainOnlyForAutolink:!1,toolbar:[["para",["style"]],["style",["bold","italic","underline","strikethrough","clear"]],["fontsize",["fontsize","fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["height",["height"]],["insert",["table","link","hr","picture","video"]],["misc",["codeview","help"]]],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Monospace","Roboto","system-ui","Tahoma","Times New Roman","Verdana"],callbacks:{onInit:function(){},onImageUpload:function(){alert("Until we can encrypt image files, uploads are not currently supported. We recommend using the Image button in the toolbar and copying an image URL instead.")}}}),$("#summernote").on("summernote.change",(function(){document.querySelectorAll(l).forEach((e=>e.setAttribute("dir","auto"))),a||c()})),$("textarea.note-codable").on("input",(()=>{c()})),e=new ComponentRelay({initialPermissions:[{name:"stream-context-item"}],targetWindow:window,onReady:()=>{const t=e.platform;t&&document.body.classList.add(t)}}),e.streamContextItem((l=>{!function(l){if(l.uuid!==i&&(o=null,r=!0,i=l.uuid),t=l,l.isMetadataUpdate)return;n=l.clientData;let c=l.content.text;if($(".note-editable").attr("spellcheck",JSON.stringify(l.content.spellcheck)),c==o)return;const m=$("#summernote");if(m){a=!0;const t=/<[a-z][\s\S]*>/i.test(c);s||(m.summernote("fullscreen.toggle"),s=!0),r&&!t&&(c=((c||"")+"").replace(/\t/g," ").replace(/\r\n|\r|\n/g," "));let n=!1;if(function(e){const t=(new DOMParser).parseFromString(`${e}`,"text/html");return Array.from(t.body.childNodes).some((e=>"SCRIPT"==e.nodeName))}(c)){const t=u()[i];t?n=t.trustUnsafeContent||!1:new Promise((e=>{new Stylekit.SKAlert({title:null,text:"We’ve detected that this note contains a script or code snippet which may be unsafe to execute. Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.",buttons:[{text:"Cancel",style:"neutral",action:function(){e(!1)}},{text:"Continue",style:"danger",action:function(){e(!0)}}]}).present()})).then((t=>{t&&(function(t,n){const o=u();o[i]={trustUnsafeContent:n},e.setComponentDataValueForKey("notes",o)}(0,t),n=t)}))}else n=!0;if(!n)return m.summernote("code",""),void m.summernote("disable");m.summernote("enable"),m.summernote("code",c),r&&(m.summernote("commit"),r=!1),a=!1}}(l)}))}));
//# sourceMappingURL=dist.js.map
\ No newline at end of file
diff --git a/public/components/org.standardnotes.plus-editor/package.json b/public/components/org.standardnotes.plus-editor/package.json
index 7d3b0dcad..459831a84 100644
--- a/public/components/org.standardnotes.plus-editor/package.json
+++ b/public/components/org.standardnotes.plus-editor/package.json
@@ -1,9 +1,9 @@
{
"name": "sn-plus-editor",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "A rich text editor for Standard Notes",
"main": "dist/dist.js",
- "author": "Standard Notes ",
+ "author": "Standard Notes ",
"scripts": {
"lint": "eslint --ext .js .",
"build": "webpack --config webpack.prod.js",
diff --git a/yarn.lock b/yarn.lock
index 2b5151817..e8554875f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2597,75 +2597,69 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
-"@standardnotes/auth@3.8.1":
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.8.1.tgz#4197fb2f7e223c6bd13a870a3feac3c73294fb3c"
- integrity sha512-Q2/81dgFGIGuYlQ4VnSjGRsDB0Qw0tQP/qsiuV+DQj+wdp5Wy5WX3Q4g+p2PNvoyEAYgbuduEHZfWuTLAaIdyw==
+"@standardnotes/auth@^3.13.1":
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.13.1.tgz#f86394d0979bb3c759436f066df4da33f65476e6"
+ integrity sha512-ow1hRgrp2zpUsKhoUFxa15a+hRIXbPNvoMBDiX3gE28qjHn0ZYk0W8lPdkBAUjmxTT9pkf3htd5uHNaDLFODYQ==
dependencies:
- "@standardnotes/common" "^1.2.1"
+ "@standardnotes/common" "^1.7.0"
+ jsonwebtoken "^8.5.1"
-"@standardnotes/auth@3.8.3", "@standardnotes/auth@^3.8.1":
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.8.3.tgz#6e627c1a1a9ebf91d97f52950d099bf7704382e3"
- integrity sha512-wz056b3pv8IIX74lYaqjCUvnw3NSow+ex5pn/VlGxg8r7gq19WsmgyXP2BoE7nqKddO1JMlFok+4gdnutYF0Cw==
+"@standardnotes/common@^1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.7.0.tgz#5cadca1d500d1b17c8fccdc6026b79cf6c447b82"
+ integrity sha512-h9BUX37+5Op7a6jdz2tFL1diMnDSBPjRyag+3vNfx1rvnIdX3qSYYM0WyyWEi0PFf24oorFIM4vmKxba2WY8Ng==
+
+"@standardnotes/components@1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.3.0.tgz#bb436feabb61b15f26abfa5b8bd91fa57146e9fb"
+ integrity sha512-6yuydOsIe+Z0sSjAmJ11mOy1lvV4we+mReky4S7G7kpHHdealxweJkOkPgQg2ofCAh9nmSN6iDAs9hYEmqomxQ==
+
+"@standardnotes/domain-events@^2.16.3":
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/@standardnotes/domain-events/-/domain-events-2.16.3.tgz#48254f8a002fc23bc1bf993b8bc33f0277cc1668"
+ integrity sha512-28k+zTs+9ap3vj7OGLGP3GXCJtoTGMtKvOL9etbTjdZPZcYkSbvPy5luzk2MkZ/t04yyZkTpyPgngFt76I1b+A==
dependencies:
- "@standardnotes/common" "^1.2.1"
+ "@standardnotes/auth" "^3.13.1"
-"@standardnotes/common@1.2.1", "@standardnotes/common@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.2.1.tgz#9db212db86ccbf08b347da02549b3dbe4bedbb02"
- integrity sha512-HilBxS50CBlC6TJvy1mrnhGVDzOH63M/Jf+hyMxQ0Vt1nYzpd0iyxVEUrgMh7ZiyO1b9CLnCDED99Jy9rnZWVQ==
-
-"@standardnotes/components@1.2.8":
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.2.8.tgz#fc104f520edcc6c80e958167758d844094297554"
- integrity sha512-M6pBV0ZULNZr+Q5d+xq1i5ZahZtwy6Daf+XGRQOBbWjrme/ECAW+2VXBRk3YkK4+DbRTziFDoiod9wJ011mQiw==
-
-"@standardnotes/domain-events@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@standardnotes/domain-events/-/domain-events-2.5.1.tgz#e6433e940ae616683d1c24f76133c70755504c44"
- integrity sha512-p0VB4Al/ZcVqcj9ztU7TNqzc3jjjG6/U7x9lBW/QURHxpB+PnwJq3kFU5V5JA9QpCOYlXLT71CMERMf/O5QX6g==
+"@standardnotes/features@1.22.0", "@standardnotes/features@^1.22.0":
+ version "1.22.0"
+ resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.22.0.tgz#c03509112148473cb9e66f31b82e277d9482bea5"
+ integrity sha512-2LNwp5PLd57+zeCcWqWR9GHOiSErps8RFAv+DoTr/oF+keTIhP6nFYbD9ntg3nsJ67OTkYuSC7gmHIkTnIxdng==
dependencies:
- "@standardnotes/auth" "^3.8.1"
-
-"@standardnotes/features@1.20.7", "@standardnotes/features@^1.20.7":
- version "1.20.7"
- resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.20.7.tgz#d666569492e942eaecc05e40a79d50d33df4fbe9"
- integrity sha512-eaZu/+PvHYXWaq6r3ET87t52lZqFknZVUEjspAL34Fdr+5cDma5ZRoylx6hPCVDO9VpHd6fjGWlS+5kZ+qJ+bA==
- dependencies:
- "@standardnotes/auth" "3.8.3"
- "@standardnotes/common" "1.2.1"
+ "@standardnotes/auth" "^3.13.1"
+ "@standardnotes/common" "^1.7.0"
"@standardnotes/settings@^1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@standardnotes/settings/-/settings-1.9.0.tgz#0f01da5f6782363e4d77ee584b40f8614c555626"
integrity sha512-y+Mh7NuXtekEDr4PAvzg9KcRaCdd+0zlTXWO2D5MG28lLv/uhZmSsyWxZCVZqW3Rx6vz3c9IJdi7SoXN51gzSQ==
-"@standardnotes/sncrypto-common@1.5.2", "@standardnotes/sncrypto-common@^1.5.2":
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-common/-/sncrypto-common-1.5.2.tgz#be9404689d94f953c68302609a4f76751eaa82cd"
- integrity sha512-+OQ6gajTcVSHruw33T52MHyBDKL1vRCfQBXQn4tt4+bCfBAe+PFLkEQMHp35bg5twCfg9+wUf2KhmNNSNyBBZw==
+"@standardnotes/sncrypto-common@^1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-common/-/sncrypto-common-1.6.0.tgz#c6174adf65c778c8d53e45ea4c68087786f86b67"
+ integrity sha512-3gTTokb+DWxtBH72auVtoB76V9pCZWyQ7hmClgBuQF3i5j6HvuuBZGiicHmwAv1zJxMi/op3haE8lwzQc8NJ9g==
-"@standardnotes/sncrypto-web@1.5.3":
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-web/-/sncrypto-web-1.5.3.tgz#b055bcac553914cbeebfa10e45f46fff817116c3"
- integrity sha512-thyFc71cTJTfmLNPgT1hDMiMefZ1bgN0eTa22GEJSp4T41J/X9MldyP2dTmc7sHNM95TJlwzlIJ0iQtxFUE50w==
+"@standardnotes/sncrypto-web@1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-web/-/sncrypto-web-1.6.0.tgz#eb09aad9b617fbb1e1dcac13dd049a473bcc4feb"
+ integrity sha512-FhehxNCcqjiA8aNRApdswVIZ3IydzXPoKG8K4AKsThUlIGlFra7qeyyVVxmEj0dTW7tXpP3SXH01n0LiYgM8vw==
dependencies:
- "@standardnotes/sncrypto-common" "^1.5.2"
+ "@standardnotes/sncrypto-common" "^1.6.0"
buffer "^6.0.3"
libsodium-wrappers "^0.7.9"
-"@standardnotes/snjs@2.35.5":
- version "2.35.5"
- resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.35.5.tgz#eddeb2ec084d3828ffbec5bbece8ba6483956234"
- integrity sha512-nftxSfHhS45jTUfe98rTV1Ie3zLVrke2M1U8OwttA7vQvg5e9f3aoLUml5efNMe02r7xVYf09/BIwxvZ0Zo4uw==
+"@standardnotes/snjs@2.37.1":
+ version "2.37.1"
+ resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.37.1.tgz#c9c625e4e8785c8cabda4c4f2c860887b153bb95"
+ integrity sha512-YQ3G4XHdOqh3XobF/9GYtzwO5RxHVGMb9To43LtqsJcdPwtOvg8yz5yilSXjalJFr1RfYQ11rOVniEnwH64NvA==
dependencies:
- "@standardnotes/auth" "3.8.1"
- "@standardnotes/common" "1.2.1"
- "@standardnotes/domain-events" "2.5.1"
- "@standardnotes/features" "^1.20.7"
+ "@standardnotes/auth" "^3.13.1"
+ "@standardnotes/common" "^1.7.0"
+ "@standardnotes/domain-events" "^2.16.3"
+ "@standardnotes/features" "^1.22.0"
"@standardnotes/settings" "^1.9.0"
- "@standardnotes/sncrypto-common" "1.5.2"
+ "@standardnotes/sncrypto-common" "^1.6.0"
"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
version "5.4.0"
@@ -3897,6 +3891,11 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+ integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
+
buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -4861,6 +4860,13 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
+ecdsa-sig-formatter@1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
+ integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -7102,6 +7108,22 @@ json5@^2.1.2:
dependencies:
minimist "^1.2.5"
+jsonwebtoken@^8.5.1:
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
+ integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
+ dependencies:
+ jws "^3.2.2"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.1.1"
+ semver "^5.6.0"
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -7128,6 +7150,23 @@ jstransformer@1.0.0:
array-includes "^3.1.2"
object.assign "^4.1.2"
+jwa@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
+ integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
+ dependencies:
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jws@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
+ integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
+ dependencies:
+ jwa "^1.4.1"
+ safe-buffer "^5.0.1"
+
kind-of@^3.0.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -7275,6 +7314,36 @@ lodash.debounce@^4.0.8:
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+ integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+ integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+ integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
+
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+ integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+ integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
+
lodash.memoize@4.x:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -7285,6 +7354,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
+
lodash@^4.0.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@~4.17.10:
version "4.17.20"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
@@ -9082,7 +9156,7 @@ selfsigned@^1.10.11:
dependencies:
node-forge "^0.10.0"
-"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0:
+"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==